Статьи чтобы набрать классы

MySQL: уровни изоляции транзакций

Кто-бы ни купил MySQL, она еще долго будет будоражить ресурсы Наших с Вами серверов — и это хорошо. Есть таблица 

CREATE TABLE test (id INT, value VARCHAR(255)) ENGINE=InnoDB;
Что по Вашему покажет этот запрос?
START TRANSACTION;
INSERT INTO test(id, value) VALUES (1, 'test'), (2, 'test 2');
SELECT * FROM test;
COMMIT;
SELECT * FROM test;
(далее…)

Статьи чтобы набрать классы

Шпаргалка по SOLID-принципам с примерами на PHP

Тема SOLID-принципов и в целом чистоты кода не раз поднималась на Хабре и, возможно, уже порядком изъезженная. Но тем не менее, не так давно мне приходилось проходить собеседования в одну интересную IT-компанию, где меня попросили рассказать о принципах SOLID с примерами и ситуациями, когда я не соблюл эти принципы и к чему это привело. И в тот момент я понял, что на каком-то подсознательном уровне я понимаю эти принципы и даже могут назвать их все, но привести лаконичные и понятные примеры для меня стало проблемой. Поэтому я и решил для себя самого и для сообщества обобщить информацию по SOLID-принципам для ещё лучшего её понимания. Статья должна быть полезной, для людей только знакомящихся с SOLID-принципами, также, как и для людей «съевших собаку» на SOLID-принципах. Для тех, кто знаком с принципами и хочет только освежить память о них и их использовании, можно обратиться сразу к шпаргалке в конце статьи. Что же такое SOLID-принципы? Если верить определению Wikipedia, это: (далее…)

Статьи чтобы набрать классы

Краш-курс по интерфейсам в Go

Интерфейсы в Go представляют собой одну из отличительных особенностей языка, формирующих способ решения задач. При схожести с интерфейсами в других языках, интерфейсы Go всё же имеют важные отличия и это поначалу приводит к избыточному переиспользованию интерфейсов и путанице в том, как и когда их использовать. Это нормально, но давайте попробуем разобраться, в чем же особенность интерфейсов в Go, как они устроены, почему так важны и что значит ортогональность интерфейсных типов и структурных типов в Go. В этой статье вы узнаете:

  • в чем отличие от интерфейсов в Java
  • важные и неочевидные последствия этих отличий
  • как устроены интерфейсы под капотом
  • вспомним про пустой интерфейс (interface{})
  • затронем сакральную тему про дженерики
  • разберемся, кто и зачем должен создавать интерфейс
  • и постараемся научиться не абьюзить интерфейсы и начать жить
(далее…)

Статьи чтобы набрать классы

Наш вариант теста на знание SQL

У нас, как и во многих других организациях, проводится тестирование соискателей при поступлении их на работу. Основу тестирования составляет устное собеседование, но в некоторых случаях, даются также практические задания. Несколько дней назад, Руководство попросило меня подготовить набор задач на знание SQL. Разумеется, я постарался сделать задания не слишком сложными. Уровень соискателей различен и задачи, на мой взгляд, должны быть составлены таким образом, чтобы по результатам их решения можно было судить о том, насколько хорошо испытуемый знает предмет. (далее…)

Статьи чтобы набрать классы

Внедрение MySQL Multi-Master кластера

Для начала стоит разобраться с тем, какой из реализацией технолгии MySQL Galera, Вы будете пользоватся. На рынке есть имплементации Galera от Percona и MariaDB. Именно эти две реализации и поделили львиную долю внедрений MySQL Galera. Оба форка используют в качестве плагина InnoDB, движок Percona XtraDB Storage Engine. (далее…)

Статьи чтобы набрать классы

REMOTE_ADDR vs HTTP_X_FORWARDED_FOR

Давеча был свидетелем одного интересного спора о том как же действительно нужно определять IP адрес конечного пользователя из скриптов PHP. Собственно, каждое слово сабжа отображает действительную ситуацию. Это был религиозный спор, обострённый весенней замечательной погодой, в котором, я считаю, не оказалось правых и не правых, но который побудил меня к мини-исследованию и, к моему счастью, поставил точку в понимании этого конфессионального но по факту очень простого вопроса. Для тех, кто как и я сомневался был уверен, что во всём разобрался, но боялся спросить лень было разбираться в мелочах — под кат. (далее…)

Статьи чтобы набрать классы

Семантика exactly-once в Apache Kafka

Наконец, свершилось то, что сообщество Kafka так долго ждало: в Apache Kafka версии 0.11 появилась семантика exactly-once («строго однократная доставка»). В этом посте я расскажу вам о следующих моментах: – что представляет собой семантика exactly-once в Apache Kafka; – почему эта проблема сложна; – как новые свойства идемпотентности и транзакций позволяют корректно выполнять потоковую exactly-once-обработку с помощью Kafka Streams API. (далее…)

Статьи чтобы набрать классы

Далем тестирование проще вместе с Mockery

Горькой правдой является то, что хотя базовый принцип тестирования и выглядит довольно просто, но может оказаться довольно трудным занятием - использовать его в своем рабочем процессе изо дня в день. А разнообразный жаргон при этом еще больше все усугубляет! К счастью есть много инструментов, которые смогут упростить процесс тестирования. Mockery, главный фреймворк для создания mock объектов в PHP, является одним из таких инструментов! В этой статье мы рассмотрим что вообще из себя представляют mock-объекты, чем они могут быть полезны и как внедрить Mockery в свой процесс тестирования. (далее…)

Статьи чтобы набрать классы

Знакомство с графической базой данных Neo4j

Когда-то, году эдак в 2005, я заболел идеей создания базы знаний, которая бы не имела четкой табличной структуры и работала бы на принципе именованных узлов и связей между ними. Основная идея была такая, что сам по себе узел не нес никакой информации, а вся информация бы задавалась его окружением и связями. Я тогда написал небольшой код хранилища этих узлов и связей, а также простейших операций над ними, но совсем не хранить информацию в узлах было слишком сложно и я привязывал к каждому узлу одно текстовое свойство (в Neo4j в узел можно записать много свойств различного типа и потом обращаться к ним по имени). (далее…)

Статьи чтобы набрать классы

Введение в графы и Neo4j. Обработка графов в Spark

Программисты автоматизируют мир. Начав с автоматизации подсчета денег, где табличные записи естественны, программисты стали заталкивать в таблички всё, до чего их допустили. И это работало. В прошлом веке. И это хорошо т.к. из глубин вековой давности мы получили SQL – языка запросов к табличке. SQL хватает почти всегда – он простой, логичный и все его знают. А когда не хватает, его расширяют. И дальше мы будем работать с расширениями и диалектами SQL. В реальном мире всё несколько сложнее. В табличках представлять большие и сложные зависимости сложно и не эффективно по ресурсам (дисковое пространство,процессор, и главный ресурс – время). А какие данные не идеальны для табличек? Может, это лишние данные? (далее…)