📚 Какие книги читать Java-разработчикам, чтобы вырасти в Senior?
Книги редко бывают единственным ключом к уровню Senior, но для некоторых именно они становятся трамплином: дают структуру, глубину и понимание там, где статьи / видео не справляются
Мой ученик, пришедший ко мне на менторство и сменивший AQA на разработку, его выбор правильной литературы и голод к знаниям вдохновили меня на этот пост
Вот 10 книг, которые я рекомендую на пути к Senior:
➡️ PostgreSQL Изнутри. Чтобы понимать, как СУБД работает под капотом: планировщик, индексы, транзакции. Если много работаете с SQL или хотите в компанию, где с ним нужна плотная работа, то эта книга — прекрасный выбор
➡️ Kubernetes для разработчиков. Без понимания того, как твое приложение развертывается и масштабируется (хотя бы на базовом уровне), сложно претендовать на высокие позиции
➡️ "Чистый код" Роберта Мартина. Учит писать код, который будет легко читать, поддерживать и развивать — тебе и твоей команде. Классика
➡️ Теоретический минимум по Computer Science (Владстон Феррейра Фило). Чтобы перестать плавать в основах CS на собеседованиях. Хорошо подходит тем, у кого не было хорошего профильного универа
➡️ Микросервисы Spring в действии. Spring Boot есть почти везде. Даёт знания, как строить отказоустойчивые микросервисы. Код автором выложен на GitHub
➡️ Java Concurrency in Practice. Старенькая, но актуальная база по многопоточке. Глубоко и понятно объясняет JMM, основы синхронизации и построение thread-safe классов. Must-have для любого разработчика
➡️ The Software Engineer’s Guidebook. Для тех, кто не хочет останавливаться на Senior. Эта книга — о навыках и стратегическом мышлении: как принимать архитектурные решения, как управлять своими задачами и карьерой. Показывает путь до Tech Lead/Staff Engineer
➡️ Kotlin в действии (2-е изд). Kotlin стал стандартом на многих проектах. Эта книга — лучшее введение, чтобы понять философию языка
➡️ Практика реактивного программирования в Spring 5. Лучшая книга по реактивщине в Java и Spring. Книга показывает использование Spring WebFlux и Project Reactor на реальных примерах
➡️ Высоконагруженные приложения (Мартин Клеппман, "Кабан"). Ещё одна классика, которая обязательна к прочтению всем, кто хочет работать с highload. Здесь есть всё: от баз данных и кэширования до распределенных систем и шаблонов проектирования
Книги отлично закрывают конкретные пробелы в знаниях. Не пытайся осилить всё сразу. Выбери 1-2 книги:
🪵 Путаешься в основах многопоточности? → Concurrency in Practice
🪵 Хочешь понимать, как масштабировать системы? → "Кабан"
🪵 Мечтаешь о роли архитектора? → The Software Engineer’s Guide
Завалил собес из-за вопросов по архитектуре? Чувствуешь, что не знаешь, как расти дальше после Middle? Не понимаешь, по какому пути развития идти именно тебе?
➡️ Пиши сюда слово "книга": @idkhokhlov. Составим твой персональный план развития, чтобы ты наконец начал зарабатывать столько, сколько хочешь
Книги редко бывают единственным ключом к уровню Senior, но для некоторых именно они становятся трамплином: дают структуру, глубину и понимание там, где статьи / видео не справляются
Мой ученик, пришедший ко мне на менторство и сменивший AQA на разработку, его выбор правильной литературы и голод к знаниям вдохновили меня на этот пост
Вот 10 книг, которые я рекомендую на пути к Senior:
Книги отлично закрывают конкретные пробелы в знаниях. Не пытайся осилить всё сразу. Выбери 1-2 книги:
Завалил собес из-за вопросов по архитектуре? Чувствуешь, что не знаешь, как расти дальше после Middle? Не понимаешь, по какому пути развития идти именно тебе?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤7⚡4👍2
📌 Чек-лист для написания своего Spring Boot стартера
Меня как ментора часто спрашивают, зачем нужны стартеры и какие есть best-practice по их написанию. Видел, как даже опытные разработчики ни разу не писали своих стартеров. Я помогаю командам и ребятам в стриме понять все нюансы и заложить правильный фундамент
Решил поделиться с вами ключевыми принципами. Сохраняйте себе, чтобы не наступать на грабли
1️⃣ Conditional — условные аннотации
Практически на каждом втором собеседовании можно услышать вопрос про
2️⃣ Single Responsibility и переиспользуемость
Стартер пишется для реализации конкретной задачи (клиентский стартер для вызова API, добавление конкретной функциональности и т.д.) и для того, чтобы переиспользовать его в других микросервисах. Это значит, что в стартер не нужно тянуть неуместную логику (например, тянуть
3️⃣ Параметризация
Выставляйте переменные окружения и присваивайте им осмысленные значения по умолчанию. Добавляйте метаданные, чтобы упрощать понимание того, зачем нужен тот или иной параметр. По возможности подготовьте
4️⃣ Тестирование
Не забывайте про Unit- и интеграционные тесты. Благодаря ним вы избежите часть очевидных ошибок и не придётся повторно дорабатывать и пересобирать стартер
5️⃣ Обратная совместимость
Думайте про обратную совместимость и старайтесь поддерживать её настолько, насколько возможно. Если депрекейтите какие-то методы / поля / классы, то делайте это постепенно (
6️⃣ Таблицы в БД вместе с миграциями
Если стартер требует наличия какой-то таблички в БД, а у вас в компании используется одинаковый инструмент для миграций (Liquibase, Flyway и т.п.), то можно вместе со стартером поставлять миграции
7️⃣ Единые версии зависимостей для стартеров
Если у вас много стартеров и общие версии библиотек в командах, их можно объединить в один репозиторий в многомодульный проект. В корне можно прописать все версии библиотек, чтобы все стартеры и их компоненты были совместимыми по их зависимостям. Из минусов — если микросервисы написаны на разных версиях Spring Boot, то придётся поддерживать две ветки стартеров — Spring Boot 2 / 3
8️⃣ Импорт автоконфигураций
Добавляйте
9️⃣ Метрики и Health
Если уместно, то не забывайте писать свои корректные healthcheck-и (
🔟 Тестирование НТ
Часто видел ситуацию, когда команда разрабатывала общий стартер, множество команд его к себе добавляла, а потом вдруг после нагрузочного тестирования находились утечки или проблемы с производительностью. Не забывайте о нагрузочном тестировании и передавайте свой общий стартер на ревью другим командам
➡️ Если вы хотите отточить свой навык в написании стартеров или научиться писать их с нуля, то пишите слово "стартер" в личные сообщения. Буду рад стать вашим ментором!
Меня как ментора часто спрашивают, зачем нужны стартеры и какие есть best-practice по их написанию. Видел, как даже опытные разработчики ни разу не писали своих стартеров. Я помогаю командам и ребятам в стриме понять все нюансы и заложить правильный фундамент
Решил поделиться с вами ключевыми принципами. Сохраняйте себе, чтобы не наступать на грабли
Практически на каждом втором собеседовании можно услышать вопрос про
@Conditional или про то, на основе чего пишутся стартеры и как они работают. Использование @Conditional крайне важно для того, чтобы иметь возможность создавать бины только тогда, когда это необходимо (например, @ConditionalOnProperty или @ConditionalOnExpression, чтобы включать стартер по feature-флагу, или @ConditionalOnMissingBean)Стартер пишется для реализации конкретной задачи (клиентский стартер для вызова API, добавление конкретной функциональности и т.д.) и для того, чтобы переиспользовать его в других микросервисах. Это значит, что в стартер не нужно тянуть неуместную логику (например, тянуть
spring-boot-starter-data-jpa в стартер-клиент для вызова REST — да-да, и такое видел!). Среди зависимостей и классов стоит писать только то, что нужно для работы стартера. Достаточно посмотреть на то, как написаны стандартные Spring Boot-стартерыВыставляйте переменные окружения и присваивайте им осмысленные значения по умолчанию. Добавляйте метаданные, чтобы упрощать понимание того, зачем нужен тот или иной параметр. По возможности подготовьте
README.md с примером подключения стартера в проект. Придумывайте адекватные понятные названия согласно конвенциям. Упрощайте жизнь другим разработчикамНе забывайте про Unit- и интеграционные тесты. Благодаря ним вы избежите часть очевидных ошибок и не придётся повторно дорабатывать и пересобирать стартер
Думайте про обратную совместимость и старайтесь поддерживать её настолько, насколько возможно. Если депрекейтите какие-то методы / поля / классы, то делайте это постепенно (
@Deprecated —> forRemoval = true —> remove). При этом указывайте, что стоит использовать вместо устаревающего компонента. Обязательно обновляйте версию стартера при внесении изменений (видел, когда пересобирали и публиковали стартер с перезатиранием версии)Если стартер требует наличия какой-то таблички в БД, а у вас в компании используется одинаковый инструмент для миграций (Liquibase, Flyway и т.п.), то можно вместе со стартером поставлять миграции
Если у вас много стартеров и общие версии библиотек в командах, их можно объединить в один репозиторий в многомодульный проект. В корне можно прописать все версии библиотек, чтобы все стартеры и их компоненты были совместимыми по их зависимостям. Из минусов — если микросервисы написаны на разных версиях Spring Boot, то придётся поддерживать две ветки стартеров — Spring Boot 2 / 3
Добавляйте
META-INF/spring.factories (Spring Boot 2) или META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports (Spring Boot 3) сразу в стартер. Не заставляйте разработчиков дополнительно донастраивать стартер в своём проектеЕсли уместно, то не забывайте писать свои корректные healthcheck-и (
HealthIndicator). Также можно добавлять кастомные метрики с помощью MeterRegistryЧасто видел ситуацию, когда команда разрабатывала общий стартер, множество команд его к себе добавляла, а потом вдруг после нагрузочного тестирования находились утечки или проблемы с производительностью. Не забывайте о нагрузочном тестировании и передавайте свой общий стартер на ревью другим командам
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Igor Khokhlov
Senior Java-разработчик | Ментор
🔥9👍8❤3
В рамках менторства готовил человека в Revolut и решил поделиться шагами собеседования с вами
Что нужно знать о Revolut?
Revolut — европейский онлайн-банк, работающий во многих странах мира. Компания ведет найм в ОАЭ, Испанию и Польшу. Удалёнка. Процесс собеседований — на английском языке. Перед каждым этапом — созвон с HR, который подскажет, к чему готовиться и на что обратить внимание. Советую вести запись
60-минутный live-coding в IDE, где нужно реализовать небольшую библиотеку, покрытую тестами
Какие задачи дают?
На что обратить внимание:
О чем помнить?
60 минут, из которых первые 30 — небольшая live-coding задача, вторые полчаса — техническая дискуссия о том, как сопровождать и масштабировать ваше решение
Первая половина
Реализация thread-safe перевода денег с одного счета на другой (Money Transfer Service). Не забываем, что у нас 30 минут. Главный упор тут на принципы DDD — обязательно их знать к этому этапу, понимать, как они реализуются в коде (большинство проектов так или иначе следуют этим принципам)
Тесты опциональные, так как времени сильно меньше. Просто спрашиваем интервьюера, начинать ли нам с тестов или переходить сразу к реализации. Не забываем лайфхаки с прошлого этапа (собираем требования)
Теоретическая часть
О чём помнить?
60 минут на проектирование системы целиком. Классический системный дизайн
Обычно дают что-то из этого:
Что важно:
Встречи с тимлидами и командой. Помните, что в первую очередь смотрят на soft-skills
Что будет?
Последние месяцы активно менторил. Возвращаюсь к публикациям — напишите в комментарии, разбор какой темы хотите видеть в следующих постах?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13
Final Results
10%
До 100 000 ₽
19%
От 100 000 до 200 000 ₽
24%
От 200 000 до 300 000 ₽
15%
От 300 000 до 400 000 ₽
6%
От 400 000 до 500 000 ₽
6%
От 500 000 ₽
7%
Учусь / ищу первую работу
6%
Работаю в IT, но не Java-разработчиком
8%
Не работаю в IT
🐞 Анонс программы "Java Bugs"
Ищу Java-разработчиков любого уровня, заинтересованных в устранении пробелов в коммерческой практике
📈 Если вам близка идея саморазвития, вы хотите закрыть свои пробелы на практике, чувствовать себя на проекте уверенно, научиться проводить качественное код-ревью или хотите не вылететь с первого испытательного срока, то этот месседж для вас
Что я предлагаю?
Программу на 1 месяц, на которой будем разбирать частые ошибки, встречаемые на реальных проектах в коммерческой разработке. Что внутри:
🪵 Банальные баги (NullPointerException, UnsupportedOperationException и др.)
🪵 Ошибки при работе с БД, индексы, работа с Liquibase
🪵 Проблемы Hibernate: N + 1, LazyInitException, генерация CROSS JOIN и др.
🪵 Ошибки проектирования Spring-микросервисов и REST-интеграций
🪵 Ошибки при работе с транзакциями
🪵 Баги многопоточного выполнения
Что нужно будет делать?
В определенные дни буду публиковать Pull Request’ы, в которых нужно будет находить ошибки в коде на указанную тему и предлагать исправления. Также будем вести рейтинг разработчиков: тому, кто найдёт больше всего дефектов, полагается приятный бонус
Как устроена программа?
➡️ У каждого участника — личный GitHub-репозиторий, в который публикуются Pull Request'ы с кратким описанием багов, которые нужно искать и исправлять
➡️ Затем: публикация ответов и материала, где подробно расписаны причины багов и к чему они приводят, а также правильные решения
➡️ Еженедельные созвоны с обсуждением проблематики и всего, что связано с Java-разработкой
➡️ Общий чат, где можно обсудить код и решения
➡️ Два тарифа: групповой и индивидуальный с личным код-ревью
Что вы получите?
✔️ Навыки прохождения live-coding собеседований, так как проблемы сильно пересекаются
✔️ Меньший процент багов на коммерческих проектах и более чистый код
✔️ Улучшение качества код-ревью
✔️ Покрытие практических и теоретических пробелов (узнаете что-то новое)
🦞 Тариф "Групповой". 30 000 ₽
Включает в себя:
➡️ Доступ к группе со всеми участниками и теоретическими материалами
➡️ Индивидуальный репозиторий для проведения код-ревью
➡️ Еженедельные групповые созвоны
🦞 Тариф "Индивидуальный". 60 000 ₽
Включает в себя всё из группового тарифа плюс:
➡️ Индивидуальный чат со мной
➡️ Индивидуальный созвон раз в неделю
➡️ Личное код-ревью ваших исправлений неправильного кода
⭐️ Старт — 26 января. Чтобы узнать больше и забронировать место — пишите в ЛС @idkhokhlov слово "Баг"
Ищу Java-разработчиков любого уровня, заинтересованных в устранении пробелов в коммерческой практике
Что я предлагаю?
Программу на 1 месяц, на которой будем разбирать частые ошибки, встречаемые на реальных проектах в коммерческой разработке. Что внутри:
Что нужно будет делать?
В определенные дни буду публиковать Pull Request’ы, в которых нужно будет находить ошибки в коде на указанную тему и предлагать исправления. Также будем вести рейтинг разработчиков: тому, кто найдёт больше всего дефектов, полагается приятный бонус
Как устроена программа?
Что вы получите?
Включает в себя:
Включает в себя всё из группового тарифа плюс:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥1
Праздники закончились, началась рабочая неделя, а значит — время поговорить о том, как расти в рамках компании, в которой вы работаете. Речь не только про зарплату, но и про технические навыки и личные качества. Важный нюанс: о том, что смена работы является эффективным методом роста, в этом посте говорить не будем
Забавный факт, но многие люди не задумываются о том, что они уже сейчас заслуживают повышения. Поэтому первое, что вы можете сделать — спросить себя:
🪵 Как давно меня повышали?🪵 Стал ли я брать больше ответственности?🪵 Есть ли у меня достижения с момента последнего повышения?🪵 Знаю ли я свой план роста ЗП в компании?
Если вы в принципе не знаете, при каких условиях вас могут повысить и что для этого нужно, то это отличная тема для разговора с руководителем. Вы легко можете узнать конкретный набор шагов, который нужно сделать. Помните, что в первую очередь в вашем развитии заинтересованы лично вы
Тут несколько вариантов в зависимости от возможностей в компании:
ментор Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥1
Программа java-bugs.pdf
3 MB
Всем доброго времени суток! Недавно я проводил опрос на тему того, что вы думаете о программе "Java Bugs". По вашей драгоценной обратной связи доработал свой анонс. Изменения внёс следующие:
Теперь программа охватывает 15 ключевых тем, выстроенных последовательно от основ к сложным enterprise-проблемам. Мы пройдём полный цикл: от Runtime-исключений и Stream API до тонкостей многопоточности, Apache Kafka, кэширования, тестирования и мониторинга. Каждая тема — частые и критичные ошибки, которые я и мои коллеги и ученики встречали на реальных проектах
Основа обучения — ваш личный приватный репозиторий на GitHub. В понедельник, среду и пятницу я публикую новый Pull Request с кодом в ваш репозиторий, содержащим типичные баги на заданную тему. Ваша задача — провести код-ревью, найти проблемы и предложить исправления. На следующий день вы получаете развёрнутое решение с теорией и лучшими практиками
Групповой формат:
Индивидуальный формат:
Написать в личку слово
баг Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤3
Друзья, всем привет! Принял решение выложить для вас первую тему моей программы Java Bugs — чтобы вы своими глазами увидели пример и оценили, насколько такой формат будет полезен лично вам
Это разогрев перед сложными и интересными темами. Намеренно оставил в
README побольше подсказок, чтобы было понятно, что искатьhttps://github.com/IDKhokhlov/java-bugs-public/pull/1/files
Что внутри?
NullPointerException, ConcurrentModificationException и другие)Зачем я это делаю?
Хочу, чтобы вы:
Что дальше?
Уже через пару дней я опубликую в этом же репозитории решение с подробным разбором:
Для кого?
Для Java-разработчиков любого уровня, кто:
Попробуйте на выходных: откройте PR, гляньте код, напишите замечания, что нашли (или пишите вопросы, если что-то непонятно)
Старт — уже в понедельник, 26 января. Чтобы присоединиться, напишите слово
Баг Увидимся в коде!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12
В последнее время выдалось много работы над разными проектами. Давно не выходил на связь, думал, чем порадовать вас. Пришла идея — буду каждый месяц показывать ситуацию на рынке по моим ученикам. Суммы буду указывать в рублях до вычета налогов (gross)
💰 Офферы
Получено офферов: 4
Сумма всех офферов: 1 161k
Максимальный оффер: 320k
Минимальный оффер: 276k
Скрининги HR: 23
Технических этапов: 10
Финалов с командой: 4
🪄 Интересный кейс
Один из подписчиков пришел с запросом подготовить его в Revolut на позицию New Grad на Python. Попросил провести моки по всем техническим этапам. Раньше на питоне технички не проводил, но с другой стороны, суть собеседований от языка к языку в Революте не меняется. Взялся помочь. Итог: 2 технички, успешно пройденные собесы и полученный оффер. Горжусь подписчиком, красавец. Очень быстро всё схватываешь, успехов в революте!
Как ваши дела? Сколько собеседований было, какие офферы получали за последнее время?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍5❤3
@Transactional. Вопрос с собеседованияВопрос с реального собеседования в зеленый банк на позицию Middle/Senior, задача чуть изменена с сохранением изначального замысла. По итогу получили ответ от интервьюера: "Почитайте про механизм прокси". Подобные задачи про механизм транзакций встречаются очень часто. Давайте разбираться. Задача ниже
В Spring Boot приложении есть сервисный класс с двумя методами:
@Service
public class EmployeeService {
@Transactional
public void updateSalary() {
// 1: UPDATE employee SET salary = 50000 WHERE department = 'IT'
try {
validateDepartment();
} catch (Exception e) {
// логируем, не пробрасываем дальше
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void validateDepartment() {
// 2: UPDATE employee SET salary = 30000 WHERE department = 'SALES'
throw new IllegalArgumentException("Invalid department");
}
}
Метод
updateSalary() вызывается из контроллера. Комментариями имитируется работа с БД. После выполнения в БД окажутся изменения:Опрос ниже. Пересылайте знакомым, посмотрим, кто как ответит
P.S. Комментарии содержат спойлеры
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
Половину апреля провёл в долгожданном отпуске со своими дорогими друзьями. Кстати, апрель принято считать одним из лучших месяцев в году для поиска работы в IT. Несмотря на это, по сумме офферов моих учеников сбавили обороты. С другой стороны, сохранили стабильность по числу офферов. Также очень радует, что сильно выросло количество скринигов, технических интервью и финалов. Будем наблюдать, к чему это приведёт. Статистика за апрель по менти ниже
💰 Офферы
Получено офферов: 4
Сумма всех офферов: 863k (-26%)
Максимальный оффер: 327k (+2%)
Минимальный оффер: 60k (-78%)
Скрининги HR: 37 (+61%)
Технических этапов: 21 (+110%)
Финалов с командой: 6 (+50%)
🏦 Revolut
За этот месяц пришло 3 человека на подготовку в Revolut. Недавно узнал по результатам скрининга одного из ребят с HR, что формат активно меняют. Общая суть и задачи остаются теми же. Дают меньше времени на подготовку до технического интервью. Уже вчера одному из ребят пришёл положительный фидбэк с нового формата — пригласили на системный дизайн. Если хотите вместе со мной подготовиться к Revolut и научиться классно решать live-coding задачи с нуля с применением TDD и DDD — welcome: @idkhokhlov
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15🎉5🔥4
Приходите послушать в субботу, 30 мая, в 14:00 по МСК. Буду одним из спикеров. Поделюсь своими знаниями о том, как точно и без воды рассказывать про свой опыт работы, что притягивает и сразу отталкивает работодателей, на чём ловят кандидатов и какими вопросами "валят". Также будут другие коллеги-менторы, которые расскажут про то, каково сейчас входить в IT в 2026 году. Присоединяйтесь, буду рад
https://t.me/m0rtymerr_channel/3520
https://t.me/m0rtymerr_channel/3520
https://t.me/m0rtymerr_channel/3520
Эфир пройдёт здесь:
https://www.youtube.com/live/9YM4PeiYG4o
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Осознанная Меркантильность | Антон Назаров
Все грустно или сосал не вкусный? / Как вкатиться в IT в 2026 году
Стоит ли вообще входить в IT в 2026 году или поезд уже ушел? AI реально заменит часть айтишников? Почему одни устраиваются за несколько месяцев, а другие годами не могут получить оффер?
…
Стоит ли вообще входить в IT в 2026 году или поезд уже ушел? AI реально заменит часть айтишников? Почему одни устраиваются за несколько месяцев, а другие годами не могут получить оффер?
…
🔥20👏1