Pull to refresh
125
0
Иван Вахрушев @IvanVakhrushev

Java Developer, Open Source Enthusiast

Send message

Как протестировать логику консьюмеров и продюсеров и не сгореть? Spring Boot 3, Spring Kafka

Level of difficultyEasy
Reading time11 min
Views4.4K

Всем привет. Решил поделиться опытом тестирования логики консьюмеров и продюсеров в стандартном Spring Boot приложении. Я несколько раз подходил к этой задаче с различными вариантами и находил разные подводные камни, которые стимулировали меня искать дальше - более лучшее решение. И вот, в очередной раз прошерстив накопленный опыт человечества (stackoverflow), я реализовал очередной вариант, в котором пока не нашел минусов предыдущих реализаций. В любом случае, поделюсь с вами как я к этому пришел и почему для моих кейсов не сработали другие варианты (или показались хуже последнего).

Дисклеймер. Я сторонник интеграционных тестов при запуске сборки проекта с тестами. То есть это когда для unit-тестов поднимается контекст Spring со всеми плюсами (окружение, максимально похожее на боевое) и минусами (это ДОЛГО запускается и ДОЛГО описывается).

Часть 1. А разве это проблема вообще?

Коротко: ...

Читать далее
Total votes 10: ↑8 and ↓2+7
Comments8

Мегагайд: культура работы с Git

Level of difficultyEasy
Reading time16 min
Views27K

Привет всем! Меня зовут Юля, я фронтенд-разработчик, наставник на курсах по JS и React и организатор профессионального сообщества Tbilisi JS. В Практикуме я помогаю студентам на курсе «React-разработчик».

За время работы в разных компаниях и над разными проектами я поняла, что Git — это не только (и не столько!) знание самой технологии и конкретных команд, но и определённая культура взаимодействия, практики, подходы, договорённости. Всё это помогает участникам команды лучше понимать друг друга и работать быстрее и чётче.

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

Читать далее
Total votes 35: ↑30 and ↓5+30
Comments22

Что нужно знать, чтобы успешно пройти System Design Interview

Reading time16 min
Views32K

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

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

Далее мы рассмотрим каждый из принципов более детально, чтобы понять их суть и способы применения в разработке приложений.

Читать далее
Total votes 47: ↑45 and ↓2+52
Comments26

Программирование в среде Scratch для детей: знакомство с платформой

Level of difficultyEasy
Reading time7 min
Views3K

Программирование — это не только написание кода, но и способ мышления. Учиться ему лучше как можно раньше. Первые шаги в айти-сфере стоит начинать уже в младшей школе. Но это не значит, что в первом классе ребенок будет писать настоящий код. Для обучения можно использовать платформы с визуальным программированием. Здесь важнее понимание логики и закономерностей.

Читать далее
Total votes 6: ↑6 and ↓0+8
Comments6

Внутренний мир: Java NIO

Level of difficultyMedium
Reading time15 min
Views7.9K

Привет, Хабр!

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

Неблокируемый ввод/вывод был реализован в пакете java.nio Java SE 1.4. К сожалению, в ежедневной практике нечасто приходится иметь дело с низкоуровневым I/O, и намного чаще при необходимости используются стримы из java.io. В этой статье будет описано содержание Java NIO, несколько примеров и принцип работы неблокируемого I/O.

Читать далее
Total votes 11: ↑10 and ↓1+11
Comments7

Что нового в планировщике / оптимизаторе запросов Postgres 16

Level of difficultyMedium
Reading time18 min
Views6.6K

PostgreSQL 16 вносит немало улучшений в планировщик запросов и позволяет выполнять многие SQL-запросы быстрее, чем в предыдущих версиях PostgreSQL.

Если вы посмотрите на PG16 release notes, то увидите некоторые из этих улучшений. Но из-за объема изменений, вносимых в каждом выпуске PostgreSQL, невозможно предоставить достаточно подробную информацию о каждом изменении.

В этом посте вы получите глубокое представление о 10 улучшениях, внесенных в планировщик запросов PostgreSQL 16. Для каждого из улучшений будет сравнения выходных данных планировщика PG15 и PG16, а также примеры того, что изменилось, в виде автономного теста, который вы можете попробовать сами.

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

Как прогнозировать время выполнения задач

Level of difficultyHard
Reading time20 min
Views33K

Привет! Меня зовут Павел Ахметчанов, я руководитель направления улучшения процессов разработки. В статье расскажу про часто используемые методики оценок задач и есть ли в них ошибки. Посмотрим, как правильно ставить вопросы при оценке. Узнаем, что собой представляет время решения задач, а это далеко не очевидная вещь. Попробуем изменить свое мышление и получим рецепт для определения времени решения задач. 

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

Читать далее
Total votes 63: ↑61 and ↓2+66
Comments57

Где джуну оттачивать навыки программирования: 6 бесплатных ресурсов

Reading time3 min
Views57K

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

Читать далее
Total votes 27: ↑20 and ↓7+16
Comments9

Как работает сеть в контейнерах: Docker Bridge с нуля

Level of difficultyMedium
Reading time21 min
Views36K

В этой статье мы собираемся разобраться со следующими вопросами:

* Как виртуализировать сетевые ресурсы, чтобы контейнеры думали, что у них есть отдельные сетевые среды?

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

* Как выйти во внешний мир (например, в Интернет) изнутри контейнера?

* Как связаться с контейнерами, работающими на хосте Linux, из внешнего мира?

* Как реализовать публикацию портов, подобную Docker?

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

Обзор продуктивности разработчиков от McKinsey

Reading time14 min
Views2.9K

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

Я буду писать так, как будто авторы обратились ко мне за технической рецензией на свою статью. Можете считать это открытым письмом.

Читать далее
Total votes 21: ↑17 and ↓4+17
Comments3

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

Level of difficultyMedium
Reading time5 min
Views4.3K

Сейчас проходят финальные слушания по принятому закону, который позволит получить гражданство за 5 лет или в особых случаях 3 года. Раньше это было 8 лет.

Дальше в статье идет детальный разбор закона и его 4-ех основных требований с ссылками на статьи и цитаты.

Читать далее
Total votes 16: ↑10 and ↓6+8
Comments8

Где бесплатно учить Java в 2024 году

Level of difficultyEasy
Reading time6 min
Views33K

В 2024 году изучение Java остается одним из актуальных направлений для тех, кто стремится стать профессиональным разработчиком.

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

 Изучения Java в 2024 году остается актуальным по нескольким причинам:

1. Популярность: Java является одним из самых популярных языков программирования в мире и сохранит свою популярность и в 2024 году. Множество компаний и организаций используют Java для разработки приложений и веб-сервисов, поэтому знание этого языка будет востребовано.

2. Карьерные возможности: Знание Java открывает широкий спектр карьерных возможностей. Работа с Java может предоставить вам возможность работать в таких областях, как разработка мобильных приложений, веб-разработка, разработка игр, аналитика данных и многое другое.

3. Android-разработка: Java является популярным языком программирования для разработки приложений под платформу Android. С учетом того, что Android продолжает быть одной из самых популярных мобильных операционных систем в мире, знание Java будет необходимым для разработки приложений для этой платформы.

4. Устоявшийся экосистема: Java имеет богатую экосистему инструментов и фреймворков, которые помогают разработчикам ускорить процесс разработки и повысить производительность. Знание Java позволит вам использовать все преимущества этой экосистемы и упростить свою работу.

Читать
Total votes 13: ↑10 and ↓3+7
Comments8

10 самых распространенных проблем при линтинге Dockerfile'ов

Level of difficultyEasy
Reading time8 min
Views11K

Весной 2023 года разработчики Depot добавили в свой сервис возможность проверять Dockerfile'ы при каждой сборке.

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

Читать далее
Total votes 30: ↑29 and ↓1+34
Comments4

Как в СУБД реализовать администратора без прав доступа к данным

Level of difficultyMedium
Reading time9 min
Views7.2K

В СУБД-строении есть не новая, но не теряющая актуальности задача. Сформулировать её можно примерно так: как убрать возможность суперпользователя взаимодействовать с данными, но оставить ему все возможности по управлению СУБД? Эта функция затребована не только большими компаниями с жёсткими требованиями к информационной безопасности, но и крайне нужна всем, кто попадает под различного вида государственные регуляции, вроде приказа ФСТЭК №64 или страшного GDPR.

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

В этой статье мы хотим поговорить о том, какие есть подходы к решению этой проблемы, какие можно найти реализации на рынке, и что решили сделать мы в Postgres Professional.

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

CompletableFuture. Глубокое погружение

Level of difficultyHard
Reading time20 min
Views23K

java.util.concurrent.CompletableFuture - класс не новый. Он предстал перед нами во всём своём величии в 2014-м году вместе с выпуском Java 8. Много лет с тех пор прошло, а проще он не стал.

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

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

JWT-аутентификация при помощи Spring Boot 3 и Spring Security 6

Level of difficultyMedium
Reading time15 min
Views37K

Переход от базовых приложений к более сложным требует использования Spring Security для обеспечения безопасности. Новая версия, Spring Security 6, изменяет некоторые базовые реализации, а русскоязычных материалов на эту тему очень мало. В этой статье мы рассмотрим JWT-аутентификацию и авторизацию с помощью Spring Boot 3 и Spring Security 6, чтобы помочь начинающем разработчикам разобраться и начать пользоваться базовым функционалом этой библиотеки. Цель данной статьи - показать, как использовать JWT-аутентификацию с API-интерфейсами.

Читать далее
Total votes 15: ↑12 and ↓3+10
Comments12

Почему B-деревья быстрые?

Level of difficultyEasy
Reading time7 min
Views47K

B-дерево — это структура, помогающая выполнять поиск в больших объёмах данных. Она была изобретена более сорока лет назад, однако по-прежнему используется в большинстве современных баз данных. Хотя существуют и более новые структуры индексов, например, LSM-деревья, B-дерево пока никто не победил в обработке большинства запросов баз данных.

После прочтения этого поста вы будете знать, как B-дерево упорядочивает данные и выполняет поисковые запросы.

Читать далее
Total votes 151: ↑150 and ↓1+183
Comments13

Статья 214 (b) — черная метка для временных релокантов в США

Reading time12 min
Views10K

Для многих российских ИТ-специалистов  возможность поработать или учиться в США если не заветная мечта, то, как минимум, серьезная цель. Несмотря на геополитическую напряженность, зарплаты, качество образования и другие приятные бонусы пребывания в Штатах продолжают привлекать российских разработчиков, ИТ-менеджеров, тестировщиков, аналитиков и студентов. Между тем, с распростертыми объятиями там не ждут не всех и не всегда.

В сети достаточно материалов про визы H-1B, L-1, О-1, F-1, B-1, специальных программах для “технических специалистов”, однако большинство из них дают поверхностную общую информацию и мало применимы на практике. В этом посте я предлагаю обзор самой “страшной” и широко используемой статьи Акта об иммиграции и национальности — 214(b).  Такое основание признаётся юристами наиболее гибким инструментом для отказов в неиммиграционных визах (рабочих, студенческих), а за её стандартной формулировкой может скрываться широкий спектр неочевидных и “коварных” причин.  К сожалению, я не юрист, а системный аналитик, поэтому в подготовке поста мне помог Мэтью Морлей - человек и пароход, американский адвокат, работающий в Москве, доктор юридических наук (JD) в Массачусетской Школе Права, специалист, на которого ссылается Reuters, член Американской коллегии адвокатов (АВА) и Американской ассоциации иммиграционных адвокатов (AILA).

Читать далее
Total votes 13: ↑9 and ↓4+7
Comments20

Интеграция Keycloak в приложение Spring Boot 3 с использованием протокола OAuth2.0

Level of difficultyMedium
Reading time27 min
Views14K

В современном мире веб-разработки обеспечение безопасности пользовательских идентификаторов и управление доступом к ресурсам становятся все более важными задачами. Один из мощных инструментов, предоставляющих полноценное решение для этих задач, это Keycloak, современная система управления идентичностью и доступом.

В данной статье мы рассмотрим процесс интеграции Keycloak в наше приложение Spring Boot 3 в качестве сервера авторизации с использованием протокола OAuth2. Обсудим смысл OAuth2, его механизм работы и сравним его с другими протоколами. Кроме того, мы настроим Keycloak с использованием Docker Compose, воспользовавшись PostgreSQL в качестве базы данных для Keycloak. Затем мы интегрируем Keycloak с нашим приложением Spring Boot 3, используя протокол OAuth2. Также мы подключим Keycloak Admin Client и, наконец, проверим функциональность всей системы.

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

Как перестать забывать про индексы и начать проверять execution plan в тестах

Reading time9 min
Views12K
кдпв

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

Обычный день, обычный релиз: все задачи вдоль и поперек проверены нашим QA-инженером, поэтому со спокойствием священной коровы «закатываем» на stage. Приложение ведет себя хорошо, в логах — тишина. Принимаем решение делать switch (stage <-> prod). Переключаем, смотрим на приборы…

Проходит пару минут, полет стабильный. QA-инженер делает smoke-тест, замечает, что приложение как-то неестественно подтормаживает. Списываем на прогрев кешей.

Проходит еще пару минут, первая жалоба из первой линии: у клиентов очень долго загружаются данные, приложение тормозит, долго отвечает и т.д. Начинаем беспокоиться… смотрим логи, ищем возможные причины.
Читать дальше →
Total votes 25: ↑22 and ↓3+19
Comments29

Information

Rating
Does not participate
Location
Yerevan, Yerevan, Армения
Works in
Date of birth
Registered
Activity

Specialization

Specialist
Lead
Java
PostgreSQL