Ответ
Основной формат — самообразование через книги, документацию, технические статьи и онлайн-курсы (Coursera, Udemy). Также участвую в профильных митапах и конференциях (JPoint, Joker).
Формальные сертификации и курсы:
- Oracle Certified Professional: Java SE 11 Developer
- Курсы по Spring Boot, микросервисной архитектуре и Apache Kafka
- Углубленные курсы по алгоритмам и структурам данных (практика на LeetCode, CodeWars)
Практический пример применения знаний:
После изучения многопоточности переработал кэш, применив ConcurrentHashMap для потокобезопасности:
public class Cache<K, V> {
private final ConcurrentHashMap<K, V> map = new ConcurrentHashMap<>();
public V get(K key) {
// Потокобезопасная ленивая загрузка
return map.computeIfAbsent(key, this::loadFromDb);
}
private V loadFromDb(K key) {
// Загрузка данных из источника
// ...
}
}
Постоянно изучаю новые технологии: в настоящее время углубляюсь в GraalVM и фреймворк Quarkus.
Ответ 18+ 🔞
Да что ж это за жизнь такая, а? Сидишь, блядь, как сыч, в четырёх стенах, и учишься. Самообразование, ёпта! Книжки, документация, статьи — вот мой хлеб насущный. Курсы эти, Coursera, Udemy... Иногда думаешь: "Э, сабака сука, дай-ка я на митап вылезу, людей посмотрю". JPoint, Joker — туда же, блядь. Чтобы не превратиться в говнокодера-затворника, понимаешь?
Ну и бумажки, конечно, эти ебушки-воробушки. Без них никуда, хоть тресни. Oracle Certified Professional: Java SE 11 Developer — вот это я понимаю, блядь, бумага! Не какая-нибудь хуйня. Плюс курсы по Spring Boot, микросервисам, Apache Kafka... А чтобы мозги не засохли — алгоритмы, структуры данных. LeetCode, CodeWars — там я, блядь, душу отвожу, как на турнике.
А вот смотри, практика, сука, где собака-то порылась. Читаю про многопоточность, думаю: "Да хуйня, всё понятно". А потом гляжу на старый кэш — и волнение ебать, терпения ноль! Всё в говне, потоконебезопасно. Ну я его, блядь, взъебал и переписал на ConcurrentHashMap. Красота же!
public class Cache<K, V> {
private final ConcurrentHashMap<K, V> map = new ConcurrentHashMap<>();
public V get(K key) {
// Потокобезопасная ленивая загрузка
return map.computeIfAbsent(key, this::loadFromDb);
}
private V loadFromDb(K key) {
// Загрузка данных из источника
// ...
}
}
Теперь хоть из десяти потоков дергай — ни один клиент не получит пизды вместо данных. Идиллия, блядь.
А щас, сука, новые игрушки изучаю. GraalVM, Quarkus... Говорят, летать должно. Посмотрим, блядь, посмотрим. А то как-то подозрение ебать чувствую — везде обещают овердохуища производительности, а на выходе получается пиздопроебибна. Но проверить надо, иначе никак.