gram news
Java: fill the gaps channel avatar

Java: fill the gaps

@java_fillthegaps

Привет! Меня зовут Диана, и я занимаюсь разработкой с 2013. Здесь пишу просто и понятно про джава бэк 🔥Тот самый курс по многопочке🔥 https://fillthegaps.ru/mt Комплименты, вопросы, предложения: @utki_letyat

ProjectsRUProgramming

12,400subscribers

Open the Channel

Latest posts

  • Java: fill the gaps

    30 Apr, 13:44

    Get Your Hands Dirty on Clean Architecture: отзыв на книгуКогда я подняла тему чистой архитектуры, на меня посыпались рекомендации изучить книгу Get Your Hands Dirty on Clean Architecture, автор Tom Hombergs. Прочитала, делюсь отзывом!Сердце книги — сервис перевода денег с одним методом. Этот сервис автор реализует в гексагональной архитектуре (она же "порты и адаптеры"), подробно объясняя каждый шаг и возможные варианты. Получается приятный баланс теории и практики.В книге чуть больше 100 страниц, много схем и кода на джаве, читается быстро. Варианта на русском нет, но язык очень простой.Помимо реализации сервиса, поднимаются такие темы (в скобках укажу позицию автора): ▫️ Чем плоха слоистая архитектура Controller-Service-Repository (всё опирается на структуру БД, код в сервисах становится сильно связанным месивом) ▫️ Как связаны чистая и гексагональная архитектуры (чистая
    6,42062305Open in Telegram
  • Java: fill the gaps

    27 Apr, 13:22

    ​Clean Architecture: отзыв на книгуНаконец-то дочитала книгу Clean Architecture Роберта Мартина. Делюсь отзывом!Начну с художественной составляющей🧚‍♀️Это самая "авторская" книга по архитектуре/разработке, которую я читала. Обычно в технических книгах автора не видно, истории описываются нейтрально, структура чёткая и максимально работает на раскрытии темы.В Clean Architecture ситуация другая, автор выражен очень ярко. Внутренний голос при чтении становится хриплым и дедовским👨‍🦳 Хотя Мартин кажется не самой приятной личностью, мне нравится подобный стиль в технической литературе, если он не идет в ущерб смысловой части.Перейдём к содержанию. Кратко: "Соблюдай SOLID, не смешивай бизнес-логику с БД и UI. Что конкретно делать - не скажу, но расскажу байку из 70-х".В книге есть здравые мысли, но оформлены они очень плохо. Не только с точки зрения практики (мало примеров и
    6,54093523213Open in Telegram
  • Java: fill the gaps

    4 Mar, 07:13edited

    Как переиспользовать контекст в интеграционных тестахСегодня расскажу базовый минимум для написания интеграционных тестов в Spring: как работать с контекстом, чтобы тесты шли не по 2 часа.В спринге интеграционным тестом называется тот, для которого нужен контекст. Контекст - это набор бинов, свойств, профилей и тд. Поднимать его для каждого теста долго, поэтому Spring по возможности переиспользует созданные ранее контексты.Если в коде теста какой-то бин помечен @MockitoBean, @MockitoSpyBean или @TestBean, Spring создает для него прокси. Получается уникальный контекст, который нужно поднимать отдельно и нельзя в дальнейшем переиспользовать.К новому контексту приводит переопределение свойств, указание профиля, конфигурация MockMvc и тдОтвет на вопрос перед постом - прогон тестов будет занимать чуть больше 6 минут, потому что формируется 3 контекста. Для тестов BidProcessingIT и
    8,8506337242Open in Telegram
  • Java: fill the gaps

    4 Mar, 07:13

  • Java: fill the gaps

    4 Mar, 07:13

    Тестовый контекст поднимается 2 минуты. У нас 4 класса с интеграционными тестами, их конфигурация ниже. Настройки прогона тестов стандартные. Сколько времени займет выполнение этих тестов? @SpringBootTest public class UserIT{...}@ActiveProfiles("test") @SpringBootTest public class BidProcessingIT{...}@SpringBootTest(properties = { "user.rebalance.enabled=true" }) public class RebalanceAccountIT{...}@ActiveProfiles("test") @SpringBootTest public class AccountProcessingIT{...}
  • Java: fill the gaps

    25 Feb, 07:47

    Чистая архитектура. Главы 3-5Продолжаем спидран по Clean Architecture Роберта Мартина.⭐️ Глава 3. Парадигмы программирования ⭐️определяют способы написания и организации кода. Их 3:▫️ Структурная - ход программы описывается явно через условия и циклы. Используется для описания алгоритмов ▫️ Обьектно-ориентированная - программа описывается как взаимодействие объектов. Используется полиморфизм, ход работы не всегда очевиден ▫️ Функциональная - базируется на неизменяемости⭐️ Глава 4. Структурное программирование ⭐️Код делится на небольшие функции, которые можно протестировать. Но если тесты проходят - не факт, что программа работает корректно. Большую часть главы занимают истории, как Дейкстра боролся против goto и пытался математически доказать корректность программ.⭐️ Глава 5. Обьектно-ориентированное (ОО) программирование ⭐️Роберт рассуждает, что полезного и нового
    8,0006426176Open in Telegram
  • Java: fill the gaps

    19 Feb, 13:14

    Чистая архитектура: главы 1-2Начала читать книгу Clean architecture Роберта Мартина.Давно чувствую в этой теме какой-то пробел. Идея о непорочной бизнес-логике мне нравится, но на практике я не видела хороших примеров.Видела сервисы, которые задумывались как "чистые", но в итоге становились проблемными. Протекающие слои, костыли, проблемы с транзакциями и атомарностью в целом. Не всегда понятно, как вписать некоторые задачи в рамку чистой архитектуры.У меня нет больших ожиданий. Книга 2017 года, да и Мартин вряд ли плотно работал в энтерпрайзе, когда её писал. Но мне интересно почитать первоисточник и идейную составляющую.И по первым впечатлениям - книга очень противоречивая.Поднимается много тем - от парадигм программирования до структуры папок в проекте. Есть что обсудить👌Но книгу читать сложно. Бесконечно много исторических справок и отступлений. Не всегда понятно, что
    8,360114482243Open in Telegram
  • Java: fill the gaps

    19 Feb, 13:14

    6,800poll62Open in Telegram
  • Java: fill the gaps

    29 Dec 2025, 08:52

    Лучшие посты и новостиРебята, не теряйте. У меня сейчас в жизни хайлоад, и до постов руки совсем не доходят. Но как станет полегче - продолжим исследовать чудный мир бэкенд разработки💅Топ-5 постов этого года▫️ База по Postgres: почему коннекшены это дорого, и что делает буфер и WAL ▫️ Почему однопоточный Redis быстрее многопоточного ConcurrentHashMap ▫️ CRaC — новая фича с большим потенциалом ▫️ Как прогреть кэши в Spring Boot ▫️ Как устроена многопоточность в разных языкахМой фаворит - пост Почему в Set.of нельзя добавить дубликаты Маленькое расследование и теперь моя любимая байка про джавуНовости для пользователей hard skills бота1. Если ваша подписка попадает на январские праздники, вам добавляются две недели подписки. Хотите отдохнуть - отдыхайте, оплаченные дни никуда не пропадут. (да, если подписаться сейчас, тоже будет 1.5 месяца по цене 1) 2. Появилась кнопка с
    11,0001156836Open in Telegram
  • Java: fill the gaps

    7 Nov 2025, 14:20edited

    Value types: концепт идентичностиСегодня продолжу разбирать JEP 401: value types. Начало в прошлом посте.В JEP слово identity встречается 87 раз, практически в каждом абзаце. В этом посте разберу концепт идентичности и что меня в нём смущает.В систему типов вводится новый термин - идентичность (identity): ▫️ У примитивов идентичности нет. 10 в одном месте ничем не отличается от 10 в другом месте ▫️ У ссылочных типов идентичность есть, каждый объект уникален. 2 объекта UserDTO - это разные объекты, даже если поля одинаковые ▫️ У value классов идентичности нетС первого взгляда кажется, что идентичность это про == и equals. Но по мере чтения JEP растёт ощущение, что что-то не так. Например1️⃣ Нет чёткого определения идентичностиПонятия типа identity относятся больше к проектированию модели данных. Value object, агрегаты и прочий DDD.Java — это всё ещё язык программирования
    12,6006331224Open in Telegram
  • Java: fill the gaps

    7 Nov 2025, 14:20

  • Java: fill the gaps

    6 Nov 2025, 09:03

    ​Value types: основноеНа прошлой неделе вышел билд с реализацией value types и основными оптимизациями. Это даже не превью версия, детали ещё поменяются, но первое впечатление составить уже можно. Вся информация есть в JEP 401.Сегодня расскажу основные технические моменты, отдельным постом напишу мнение про концепт идентичности, на базе которого стоит весь value тип.ИнтроВ java 2 гендера типа сущностей — примитивы и ссылочные типы. К первой группе относятся int, long, boolean и тд. В таких переменных хранится само значение. Набор действий с примитивами ограничен, зато вычисления происходят с космической скоростью.К ссылочным типам относятся классы, массивы, интерфейсы и тд. Они хранят указатель на участок памяти, где находится объект. Классы содержат поля и методы, работать с ними приятнее, чем с набором чисел. Но есть минус - при работе с объектами нужно постоянно прыгать по
    9,02011254362Open in Telegram
  • Java: fill the gaps

    24 Oct 2025, 08:49edited

    Распределенный локЧасто коллеги приходят с идеей сделать что-то через распределенный лок. В этом посте расскажу, почему эта задача сложнее, чем кажется, какие подводные камни встречаются и возможные альтернативы.Небольшое интро.Распределенный лок помогает сервисам "поделить" какой-то ресурс. Ресурсом может быть задача, обработка файла или какой-то сущности. Сам лок не контролирует доступ к ресурсу, это лишь способ договориться. Кто захватил лок, тот и работает с ресурсом.В чем сложность работы с распределенным локом?В комбинации "сложный алгоритм + общение по сети". Работа с локом — это не просто "взял-отпустил". Полный цикл выглядит так: Создать лок -> Попытаться захватить -> Если не получилось: попробовать ещё раз или встать в очередь -> Отпустить -> УдалитьКаждый участник в любой момент может отвалиться, а запрос - задержаться. В итоге получаем мешок вопросов, которые
    9,8408232263Open in Telegram
  • Java: fill the gaps

    14 Oct 2025, 07:21

    SemVer и как меня расстроил JUnit 6Эта осень богата на релизы. Недавно вышла Java 25, в ноябре выйдет Spring 7 и Spring Boot 4. Другие библиотеки тоже выпускают обновления. Сегодня обратим внимание на два камбэка: ✨ JUnit 6. Пятая версия вышла 8 лет назад, в 2017 году ✨ Jackson 3. Jackson - верный помощник в перекладывании джейсонов, вторая версия вышла больше 10 лет назадКогда выходит новая версия после большого перерыва, душа трепетно ждёт серьезных изменений. Потом смотришь release notes, а там все скучно. Что-то переименовали, что-то удалили, повысили версию джавы😒Но если нет ничего нового, зачем повышать версию?Ответ прост. На большинстве проектов используется семантическое версионирование (SemVer) - популярное соглашение о формате версий. Оно задаёт формат MAJOR.MINOR.PATCH, где ▫️ MAJOR — мажорная версия, меняется при несовместимых изменениях API ▫️ MINOR — минорная
    10,70017238336Open in Telegram
  • Java: fill the gaps

    24 Sept 2025, 08:10

    12,700poll32114Open in Telegram
  • Java: fill the gaps

    24 Sept 2025, 08:10

    Spring и паттерн SingletonВ мае я писала про групповой транс на собеседованиях при обсуждении SOLID. Люди на автомате обмениваются дежурными фразами, совершенно не вслушиваясь в суть. Сегодня расскажу ещё один пример.Часто на собесах обсуждается паттерн Singleton примерно в таком ключе:🤵‍♀️: Синглтон - это когда один экземпляр на приложение 💁: А пример привести можете, где он встречается? 🤵‍♀️: Ну, бины в спринге 💁: Ага, окВроде логично. У бинов по умолчанию скоуп Singleton. Создаётся один экземпляр. Значит, бины по умолчанию синглтоны.Но нет.Суть паттерна Singleton не в том, что в приложении один экземпляр класса. А в том, что он гарантированно один, и никаким легальным способом в системе не может появиться ещё один экземпляр. Для этого проводится комплекс мер - конструктор становится приватным, доступ к объекту предоставляется только через метод. Плюс всякие приёмы для
    11,20077341413Open in Telegram
  • Java: fill the gaps

    15 Sept 2025, 07:20

    Релиз Java 25будет завтра. А сегодня - краткий обзор фич новой версии.Пропущу JEP в статусе Preview, хотя среди них много интересных вроде Stable Values или Structured Concurrency. Расскажу только о новшествах, которые обрели финальную форму.🍑 JEP 519: Compact Object HeadersСамая полезная фича в новом релизе. В чем суть. У каждого объекта есть заголовок, в котором хранится служебная информация для JVM.В Java 25 размер заголовка сократился с 12 байт до 8.Вроде немного, но в одном бенчмарке это сэкономило аж 22% памяти и 8% CPU. В реальных приложениях результат будет скромнее, но всё равно приятно.Включается флажком -XX:+UseCompactObjectHeaders, по умолчанию Compact Headers выключены.Следующие 2 фичи вряд ли потребуются каждый день, но знать о них стоит.🍑 JEP 513: Flexible Constructor Bodies
    12,9001214215Open in Telegram
  • Java: fill the gaps

    5 Sept 2025, 07:03edited

    Последний день скидкиНу что, вот и прошло 3 дня после анонса бота. Спасибо тем, кто поддерживал и тем, кто взял подписку❤️Хочу ответить на вопрос, который задавали в том или ином виде: В интернете есть списки вопросов, на ютубе мок собесы, а ещё ИИ, чем бот лучше?Вместо тысячи слов - возьмите пробный период и оцените сами@awesome_java_botА если хочется слов, вот 4 главных плюса:1️⃣ ВопросыВопросы крутятся вокруг тем и моментов, с которыми у многих случаются сложности. Это не просто список с собесов. Я дополнила их вопросами на понимание, вопросами-кейсами, формулировками с другого ракурса.В одном отзыве на курс многопоточки ученик написал, что я использую метод Сократа. Из википедии: Этот метод часто подразумевает дискуссию, в которой собеседник, отвечая на заданные вопросы, высказывает суждения, обнаруживая свои знания или, напротив, своё неведение.
    10,600331010Open in Telegram
  • Java: fill the gaps

    2 Sept 2025, 09:43edited

    Как подготовиться к собесам на Middle/Senior позицию и заполнить пробелы по самым горячим навыкам на рынкеНайм сейчас сложный. Даже хорошему спецу сложно попасть на собеседование. На каждую вакансию летят 500 откликов в первые секунды, потом подключаются автофильтры по неведомым критериям.Сами собеседования стали жестче. Конкуренция такая, что недостаточно просто рассказать про свой опыт. Собеседования проходят те, кто лучше к ним подготовился.За последние полгода я прослушала 60 собеседований на Middle и Senior позицию. Выписала вопросы, где люди чаще всего косячат. На основе этих данных сделала бота, который помогает прокачаться в сложных вопросах. Чтобы закрыть все пробелы и быть звездой на собесе🌟@awesome_java_botКак это работает: каждый день бот спрашивает несколько вопросов. Основные темы: Java, БД, Спринг, Кафка, многопоточка, микросервисы.💪 Ответили правильно → +5 к
    9,610100211614Open in Telegram
  • Java: fill the gaps

    21 Aug 2025, 07:46

    Как создать неблокирующий индекс в Postgres?Сегодня расскажу про опцию CONCURRENTLY при построении индекса.Идея проста. Обычный CREATE INDEX блокирует изменения в таблице, возможно только чтение данных. Пока индекс строится, запросы на запись подвисают. Блокировка может длиться от нескольких минут до часа. Вряд ли пользователям это понравится.Опция CONCURRENTLY решает эту проблему и не блокирует обновления, с таблицей можно продолжать работать. Выглядит опция так: CREATE INDEX CONCURRENTLY idx ON t(f);Если всё так круто, почему опция не выбрана по умолчанию?Потому что появляются новые проблемы.Обычный индекс один раз проходит по таблице, которая не меняется, поэтому успех неизбежен.Если индекс строится во время активной работы с базой — привет гонки, параллельные транзакции и вся классика многопоточных проблем. В итоге ▫️ Индекс строится гораздо дольше. Скан таблицы
    10,900925420Open in Telegram