Pull to refresh
1
0

Backend Developer

Send message

Школы юнит-тестирования

Reading time9 min
Views13K

Существуют две основные школы юнит-тестирования: классическая (ее также называют школой Детройта, или Чикаго) и лондонская (ее также называют мокистской школой, от слова mock).

Эти школы кардинально отличаются друг от друга в подходе к юнит-тестированию, но все эти отличия можно свести к расхождению во мнениях о том, что является юнит-тестом. В этой статье обсудим, как именно школы интерпретируют это понятие и к каким отличиям это приводит.

Читать далее
Total votes 20: ↑20 and ↓0+20
Comments48

Использование memcached и Redis в высоконагруженных проектах

Reading time14 min
Views98K


Вячеслав Москаленко (Ленвендо)


Я буду рассказывать вам об инструментах высоконагруженных проектов, кэшировании, в частности, о memcached, Redis-е и о сервисе очередей RabbitMQ или в простонародье «кролике».

В первой части доклада я расскажу о том, что такое memcached — базовые понятия, что такое Redis, о его особенностях, и чем эти два сервиса отличаются. Расскажу о практическом применении в наших проектах обоих сервисов.

А во второй части я буду рассказывать о брокере сообщений RabbitMQ, об основных понятиях, которые есть в «кролике», о том, как работает маршрутизация сообщений между продюсерами и консьюмерами. Также расскажу о практическом применении в наших проектах данного брокера сообщений.

О кэшировании. Думаю, многие из вас хоть что-то кэшировали в своих веб-проектах, поэтому все будет очень просто и доступно.
Total votes 36: ↑32 and ↓4+28
Comments22

CSRF-уязвимости все еще актуальны

Reading time14 min
Views72K
CSRF (Сross Site Request Forgery) в переводе на русский — это подделка межсайтовых запросов. Михаил Егоров (0ang3el) в своем докладе на Highload++ 2017 рассказал о CSRF-уязвимостях, о том, какие обычно используются механизмы защиты, а также как их все равно можно обойти. А в конце вывел ряд советов о том, как правильно защищаться от CSRF-атак. Под катом расшифровка этого выступления.


О спикере: Михаил Егоров работает в компании Ingram Micro Cloud и занимается Application security. В свободное время Михаил занимается поиском уязвимостей и Bug hunting и выступает на security-конференциях

Дисклаймер: приведенная информация является сугубо мнением автора, все совпадения случайны.


В том, что CSRF-атаки работают виноват этот Cookie-монстр. Дело в том, что многие веб-приложения используют куки (здесь и далее считаем уместным называть cookies по-русски) для управления сессией пользователя. Браузер устроен так, что, если у него есть куки пользователя для данного домена и пути, он их автоматически отправляет вместе с HTTP-запросом.
Total votes 54: ↑54 and ↓0+54
Comments20

Когда клиенты — твои коллеги. Оптимизация веб-производительности внутренних систем

Reading time11 min
Views3.7K
Как-то раз у меня был занятный разговор со службой поддержки Департамента международной торговли (DIT). Они хотели повысить производительность одного из своих веб-приложений. Подобные разговоры — это то, что мне больше всего нравится на моей текущей позиции. Я общаюсь на темы, которые мне интересны, знакомлюсь с новыми людьми, рассказываю им про возможности, о которых они могут не знать, например, как улучшить UX приложения.
Читать дальше →
Total votes 10: ↑8 and ↓2+6
Comments0

Я сомневался в юнит-тестах, но…

Reading time6 min
Views7.2K
Когда я пишу тест, то часто не уверен, что мой дизайн будет на 100% удачным. И хочу, чтобы он давал гибкость в рефакторинге кода — например, чтобы затем изменить класс, не меняя код теста.



Но если у меня стандартная пирамида, внизу которой много юнит-тестов, то не получится ли так, что тесты будут знать не про поведение системы, а про то, какие классы там есть?
Total votes 32: ↑30 and ↓2+28
Comments8

Паттерн: Сага

Reading time2 min
Views132K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Pattern: Saga" автора Chris Richardson.


Ситуация


Есть приложение, к которому применялся паттерн Database per Service. Теперь у каждого сервиса приложения есть своя собственная база данных. Некоторые бизнес транзакции охватывают сразу несколько сервисов, так что нужен механизм, обеспечивающий согласованность данных между этими сервисами.


Например: давайте представим, что мы разрабатываем интернет магазин, где у клиента есть кредитный лимит. Приложение должно гарантировать, что новый заказ не превышает кредитный лимит клиента. Так как Заказы и Клиенты — различные базы данных, то приложение не может использовать локальные ACID транзакции.


Проблема


Как обеспечить согласованность данных между сервисами?


Решение


Необходимо каждую бизнес транзакцию, которая охватывает несколько сервисов, реализовывать как сагу.


Сага представляет собой набор локальных транзакций. Каждая локальная транзакция обновляет базу данных и публикует сообщение или событие, инициируя следующую локальную транзакцию в саге. Если транзакция завершилась неудачей, например, из-за нарушения бизнес правил, тогда сага запускает компенсирующие транзакции, которые откатывают изменения, сделанные предшествующими локальными транзакциями.


Читать дальше →
Total votes 11: ↑10 and ↓1+9
Comments10

Собеседование php-developer (вопросы и ответы)

Reading time10 min
Views238K
Так уж получилось, что в этом году я прошел ряд собеседований на позицию PHP разработчика, чего я не делал уже несколько лет. Будучи человеком ленивым практичным, перед собеседованием я попытался найти сборники вопросов-ответов, но все найденное было довольно старым, поэтому я решил сам подготовить список вопросов, которые встречал.

Обычно в статьях такого рода даются полные ответы на вопросы, но если вы собеседуетесь на достаточно серьезную позицию, краткой выжимки будет явно недостаточно и необходимо довольно глубоко понимать сам вопрос, поэтому я в основном вставил ссылки на документацию или статьи по описываемым вопросам.
Читать дальше →
Total votes 32: ↑29 and ↓3+26
Comments18

Руководство Google по форматированию кода на Java

Reading time21 min
Views28K
image

1. Введение


В данном документе описаны стандарты написания кода на языке программирования Java в корпорации Google. Исходный код Java считается соответствующим этим стандартам тогда и только тогда, когда он удовлетворяет всем описанным в документе правилам.

Затронутые в руководстве темы касаются не только эстетической стороны форматирования кода, но и других типов соглашений или стандартов кодирования. Тем не менее, данный документ концентрируется в первую очередь на определении строгих правил, которым мы повсеместно следуем, и не дает рекомендаций, которые могут быть неверно применены (как человеком, так и машинными инструментами).

Читать дальше →
Total votes 21: ↑12 and ↓9+3
Comments5

Предвзятый и субъективный взгляд на резюме разработчика

Reading time9 min
Views26K

Привет! Недавно мои коллеги из hh.ru провели вебинар, где разбирали резюме разработчика. Я решил поделиться своей точкой зрения на этот счет.


image


В этой статье мы поговорим о том, как разработчики создают резюме. Я расскажу о том, что меня, как интервьюера, мотивировало и воодушевляло перед встречей с кандидатом, а что наоборот. Разумеется, предвзятость в начале собеседования — это плохо, но все мы люди, и не можем полностью абстрагироваться от входных условий.

Читать дальше →
Total votes 37: ↑31 and ↓6+25
Comments30

Понимаем JIT в PHP 8

Reading time7 min
Views34K
Перевод статьи подготовлен в преддверии старта курса «Backend-разработчик на PHP»




TL;DR


Компилятор Just In Time в PHP 8 реализован как часть расширения Opcache и призван компилировать операционный код в инструкции процессора в рантайме.

Это означает, что с JIT некоторые операционные коды не должны интерпретироваться Zend VM, такие инструкции будут выполняться непосредственно как инструкции уровня процессора.
Читать дальше →
Total votes 25: ↑23 and ↓2+21
Comments12

10 советов по тестированию в Symfony

Reading time7 min
Views8.5K

Я принял участие в проекте с двухлетней кодовой базой и Symfony 3.4 в качестве веб-фреймворка. Это был не самый новый и блестящий проект, но у него было большое достоинство: тесты покрывали самые важные действия приложения.

Впервые в своей карьере я увидел, как тесты могут придать уверенности в кодовой базе, начинают экономить твоё время и помогают соблюсти требования бизнеса.

Этого достигли с помощью многочисленных функциональных тестов Symfony и некоторых модульных тестов, которые заполнили некоторые пустоты. Общее покрытие было около 50-52 %, но покрытие критически важной функциональности было гораздо выше. Это придавало достаточно уверенности, чтобы добавлять новые функции без ручного тестирования.
Читать дальше →
Total votes 32: ↑30 and ↓2+28
Comments10

Как бросить школу и перевести ребенка на удалёнку

Reading time7 min
Views37K
Привет, Хабр!

На днях моя дочь закончила 6й класс полностью в удалённом формате. Сразу несколько моих друзей обратились за обратной связью, потому что также задумываются о переводе детей на подобный формат обучения.

Пандемия внесла свои корректировки в привычный и давно изживший себя процесс обучения в современной (считай – еще советской) школе. И многие ГБОУ (ну и словечко) оказались к этому совершенно не готовы. Попытки организовать какие-то уроки в скайпе, зуме с треском провалились и детей отправили просто по домам учиться на усмотрение родителей.

Многие мои знакомые, которые год назад крутили пальцем у виска, когда я переводила ребенка на удаленку, стали задаваться вопросом, а так ли страшен чёрт.

Расскажу…


Читать дальше →
Total votes 109: ↑98 and ↓11+87
Comments238

Видеозаписи всех докладов с PHP Russia 2020 Online

Reading time6 min
Views7.6K
Онтико, благодаря поддержке Badoo, опубликовали видеозаписи всех докладов PHP Russia 2020 Online в открытый доступ.

Конференция прошла 13 мая, в ней приняло участие более 5 000 PHP-разработчиков. Каждый из семи докладов и трех включений со специалистами из компаний-партнёров одновременно смотрели сотни человек. К закрытию количество участников не снизилось, и в среднем каждый участник посмотрел хотя бы один доклад. Для нас как для программного комитета конференции это значит, что мы собрали правильную программу.

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

И вот теперь эти доклады доступны всем желающим, так же как и на конференции с оригинальной дорожкой и с синхронным переводом от Skyeng. Бонусом, полученным от онлайн-формата, ко всем видео прилагается запись Q&A-сессии. Можно сказать, что впервые можно переслушать то, что обсуждали в кулуарах, или вообще узнать, о чем говорили, когда ты убежал на следующий доклад.


Чуть подробнее о каждом докладе
Total votes 40: ↑40 and ↓0+40
Comments10

Автоматическое тестирование микросервисов в Docker для непрерывной интеграции

Reading time11 min
Views11K

В проектах, связанных с разработкой микросервисной архитектуры, CI/CD переходит из разряда приятной возможности в категорию острой необходимости. Автоматическое тестирование является неотъемлемой частью непрерывной интеграции, грамотный подход к которой способен подарить команде множество приятных вечеров с семьёй и друзьями. В противном же случае, проект рискует быть никогда не завершенным.


Можно покрыть весь код микросервиса юнит-тестами с мок-объектами, но это лишь частично решает задачу и оставляет множество вопросов и сложностей, особенно при тестировании работы с данными. Как всегда, наиболее острые – тестирование консистентности данных в реляционной БД, тестирование работы с облачными сервисами и неверные предположения при написании мок-объектов.


Все это и немного больше решается тестированием целого микросервиса в Docker-контейнере. Несомненным преимуществом для обеспечения валидности тестов является то, что тестам подвергаются те же самые Docker-образы, что идут в продакшен.


Автоматизация такого подхода представляет ряд проблем, решение которых будет описано чуть ниже:


  • конфликты параллельных задач в одном докер-хосте;
  • конфликты идентификаторов в БД при итерациях теста;
  • ожидание готовности микросервисов;
  • объединение и вывод логов во внешние системы;
  • тестирование исходящих HTTP-запросов;
  • тестирование веб-сокетов (с помощью SignalR);
  • тестирование аутентификации и авторизации OAuth.

Это статья по мотивам моего выступления на SECR 2019. Так что для тех, кому лень читать, вот запись выступления.


КДПВ

Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments0

Чистая архитектура на PHP. Как её измерять и контролировать?

Reading time24 min
Views24K

Предисловие


Как ты уже понял из названия, говорить я тут собрался о самом, что ни на есть, “высоком” — Чистой архитектуре. А толчком к развитию всей этой истории послужила книга Роберта Мартина “Чистая архитектура”. Если еще не читал, осмелюсь порекомендовать! Автор раскрывает много важных тем, активно делится своим богатым жизненным опытом (из проф. области естественно) и сделанными на его основе выводами, эпизодически вплетает в главы истории о том, как виртуозно говнокодили (ну и не только, конечно же) наши отцы и деды в далёких 60-х, 70-х, 80-х и даже лихих 90-х, как по крупинкам собирали всеми любимые принципы SOLID и их аналоги в мире компонентов, и чему научились за прошедшие полвека. В процессе чтения книги хорошо прослеживается линия развития индустрии разработки ПО, типичные проблемы, с которыми пацанам приходилось сталкиваться, и способы их решения.

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

Мне кажется, статья будет полезна всем. Те, кто с книгой уже знаком, смогут освежить в своей памяти некоторые ее моменты, или просто пропустить первую часть и сразу приступить к знакомству с инструментом. Те, кто ранее книгу не читал, возможно, и в первой части найдут для себя что-то новое.
Читать дальше →
Total votes 36: ↑33 and ↓3+30
Comments23

Книга «Чистый Agile. Основы гибкости»

Reading time6 min
Views6.6K
image Привет, Хаброжители! Мы сдали в типографию очередную новинку! Прошло почти двадцать лет с тех пор как появился Манифест Agile. Легендарный Роберт Мартин (Дядя Боб) понял, что пора стряхнуть пыль с принципов Agile, и заново рассказать о гибком подходе не только новому поколению программистов, но и специалистам из других отраслей. Автор полюбившихся айтишникам книг «Чистый код», «Идеальный программист», «Чистая архитектура» стоял у истоков Agile. «Чистый Agile» устраняет недопонимание и путаницу, которые за годы существования Agile усложнили его применение по сравнению с изначальным замыслом. По сути Agile — это всего лишь небольшая подборка методов и инструментов, помогающая небольшим командам программистов управлять небольшими проектами,… но приводящая к большим результатам, потому что каждый крупный проект состоит из огромного количества кирпичиков. Пять десятков лет работы с проектами всех мыслимых видов и размеров позволяют Дяде Бобу показать, как на самом деле должен работать Agile. Если вы хотите понять преимущества Agile, не ищите лёгких путей — нужно правильно применять Agile. «Чистый Agile» расскажет, как это делать разработчикам, тестировщикам, руководителям, менеджерам проектов и клиентам.
Читать дальше →
Total votes 8: ↑7 and ↓1+6
Comments2

Программист с помойки

Reading time28 min
Views86K


Когда-то моя пятая точка была в тепле, я поедал разные офисные ништяки и топил за чистую архитектуру и тесты, активно изучал Kotlin, представлял себе жизнь как нескончаемый подъем вверх, словно есть что-то выше Джомолунгмы. Однако, у вселенной оказались свои планы, и жизнь со всего размаха нанесла мне множество ударов: здоровье полетело в бездонную пропасть, все ниже и ниже, и каждый раз казалось, что я уже на дне, но падение не прекращалось. Удары не сломали, но выбросили на помойку, превратив в больной и немощный мешок, а главным призом за все эти годы нескончаемых напряжений и дедлайнов стало попадание в лигу отбросов общества. Tакова награда великих патриотов! Да-да, именно на помойку, склад ненужных и больных людей, чаще всего молодых, но не потерявших надежду выздороветь и найти решение своей проблемы. Как оказалось, надежда часто является лишь последней станцией перед отправкой в мир иной. Не мог подумать, что удары судьбы могут быть настолько молниеносными, и точно не подозревал, что существует другой огромный мир больных и отчаявшихся, и их количество растет экспоненциально, а прежний мир лишь счастливая виртуальная реальность, вывеска, обман, которого вовсе и не существовало?

Решение рассказать свою историю и пройти процедуру “каминг-аута” является определенным долгом перед Богом, людьми, которых уже нет, и теми, кто ещё пытается тянуть свою лямку. Я многому научился, читая дневники больных и ушедших, благодаря этому не сделал много ошибок, и смог нащупать путь, не превратившись в героя картины Климта “Жизнь и Смерть”.
Читать дальше →
Total votes 186: ↑128 and ↓58+70
Comments639

Идеальное резюме разработчика

Reading time7 min
Views101K
Привет! Недавно прошел бесплатный вебинар, где наши эксперты в прямом эфире препарировали резюме разработчика и наглядно разбирали, каким должно быть идеальное CV IT-инженера. Только факты: в этой статье изложены все ключевые моменты, которые стоит учитывать при создании резюме, а также масса любопытных советов, призванных помочь вам стать еще более желанными на рынке.


Читать дальше →
Total votes 27: ↑18 and ↓9+9
Comments23

Подготовка к собеседованиям в IT-гиганты: как я преодолела проклятье алгоритмического собеседования

Reading time12 min
Views204K

Дисклеймер:


Я не программирую с трёх лет, не знаю наизусть Кнута, не являюсь призёром олимпиад по информатике и чемпионатов по спортивному программированию, не училась в MIT. У меня за плечами образование по информатике и 6 лет опыта в коммерческой разработке. И до недавнего времени я не могла пройти дальше первого технического скрининга в IT-гиганты из FAANG (Facebook, Amazon, Apple, Netflix, Google и подобные), хотя предпринимала несколько попыток. 

Но теперь всё изменилось, я получила несколько офферов и хочу поделиться опытом, как можно к этому прийти. Речь пойдёт о позиции Software Engineer в европейских офисах перечисленных компаний.
Читать дальше →
Total votes 201: ↑196 and ↓5+191
Comments342
1
23 ...

Information

Rating
Does not participate
Location
Орел, Орловская обл., Россия
Date of birth
Registered
Activity