Ответ
Да, обязательно. Собеседование — это ценная обратная связь. Я систематизирую вопросы, которые вызвали затруднения, и создаю персональный план обучения для ликвидации этих пробелов.
Мой алгоритм действий:
- Анализ: Сразу после собеседования фиксирую темы, где были неточности (например, тонкости работы
CompletableFuture, детали сборки мусора в JVM). - Изучение: Углубляюсь в тему через документацию (Oracle Java Docs), авторитетные книги («Java Concurrency in Practice», «Effective Java») и технические статьи.
- Практика: Закрепляю теорию написанием кода, решением задач на LeetCode/HackerRank или созданием учебного проекта.
- Конспектирование: Веду технические заметки (например, в формате Markdown) для закрепления и быстрого повторения.
Пример для пробела в многопоточности:
// Тема: Правильная синхронизация доступа к shared mutable data
public class Counter {
private final AtomicLong count = new AtomicLong(0); // Вместо volatile/long
public void increment() {
count.incrementAndGet(); // Атомарная операция, решает проблему race condition
}
public long get() {
return count.get();
}
}
// Изучаю: разницу между volatile, synchronized, атомарными классами из java.util.concurrent.atomic.
Постоянное обучение и адаптация — ключевые навыки современного разработчика.
Ответ 18+ 🔞
Да ты посмотри, какая, блядь, дисциплина! Прямо как в армии, ёпта. Ну ладно, слушай сюда, разбираем по косточкам.
После любого собеса, особенно если где-то обосрался, я делаю нехитрый ритуал. Не чтобы грусть-тоску развеять, а чтобы в следующий раз не быть таким же мудаком. Вот мой священный план, блядь:
- Разбор полётов. Пока не остыло, сажусь и тупо выписываю, на каких вопросах меня, сука, подвесили. "А расскажите про фазы сборки мусора в G1" — ой, всё. "Чем
thenApplyотличается отthenCompose?" — да похуй, казалось. Вот эти все пиздопроебибны и есть моя слабость. - Закапываюсь в говно. Беру эту тему, которая меня сломала, и лезу в неё с головой. Не в википедию, блядь, а в нормальную документацию, в толстые книжки, которые все хвалят, но нихуя не читают. Типа "Java Concurrency in Practice" — там, бля, такие глубины, что волосы дыбом.
- Руки чешутся. Теория — это, конечно, охуенно, но пока сам не напишешь код, который сломается из-за гонки данных, нихуя не поймёшь. Лезу на LeetCode, ищу задачки именно по этой теме, либо пишу маленькую демку, где этот принцип можно потрогать.
- Конспект для будущего мудака. Чтобы через месяц не охуеть от собственной забывчивости, пишу краткую выжимку. Типа "Володя, запомни:
volatile— только видимость, для атомарности нуженsynchronizedилиAtomicInteger, ёбта".
Вот, например, меня спросили про потокобезопасный счётчик, а я начал про synchronized молоть, хотя есть же красота:
// Тема: Как не обосраться с общими данными в потоках
public class Schetchik {
private final AtomicLong schet = new AtomicLong(0); // Вот он, красавец! Не просто long, а атомарный!
public void pribav() {
schet.incrementAndGet(); // Эта штука не даст двум потокам нахулиганить одновременно
}
public long posmotri() {
return schet.get();
}
}
// И вот теперь я сижу и вникаю: а когда тогда `volatile`, а когда `synchronized`, а когда этот `AtomicLong`? Овердохуища нюансов, блядь.
Короче, суть в чём: если после собеса просто поныть и забыть — ты конченый. А если сесть, разобрать свои косяки и их починить — это и есть тот самый скилл "быстро учиться", про который все в резюме пишут. Без этого — пидары налетят и сожрут на следующем же интервью.