Библиотека джависта | Java, Spring, Maven, Hibernate
23.8K subscribers
2.05K photos
41 videos
43 files
2.9K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://t.iss.one/proglibrary/9197

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
Download Telegram
Определите основную проблему кода.
Anonymous Quiz
90%
Возникает кольцевая зависимость
3%
Инжект бина через конструктор
2%
Отсутствие геттеров и сеттеров
4%
Посмотреть ответ
👍5🔥32👏2😢2
😮 Топ-вакансий для джавистов за неделю

Senior Java Developer (Blockchain) — 4 500 —‍ 6 000 $ — удалёнка

Java Kotlin — от 100 000 до 140 000 ₽ — офис (Москва)

Java Developer (Middle+/Senior) — от 176 000 ₽ — удалёнка

Java Developer — 250 000 —‍ 450 000 ₽ — удалёнка

➡️ Еще больше топовых вакансий — в нашем канале Java jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1🔥1
🐸Библиотека джависта

#развлекалово
Please open Telegram to view this post
VIEW IN TELEGRAM
😁29💯3😢2🔥1
🔖 Разница между Mock, Stub и Fake в тестировании

В тестировании часто встречаются термины Mock, Stub и Fake. Все они относятся к подмене реальных зависимостей, но выполняют разные роли. Давайте разберемся, в чем их отличие и когда применять каждый из них.

1️⃣ Mock

Мок — это объект, поведение которого мы заранее определяем. Мы говорим, какие методы должны быть вызваны, какие значения возвращать, и проверяем, были ли вызваны эти методы в тесте.

📝 Пример:
@Test
public void testService() {
MyService service = mock(MyService.class);
when(service.getData()).thenReturn("Hello, World");

assertEquals("Hello, World", service.getData());
}


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

2️⃣ Stub

Стаб — это объект, который возвращает заранее заданные значения. Он просто заменяет реальную зависимость, не проверяя, как она используется, а только подставляет нужные значения.

📝 Пример:
@Test
public void testService() {
MyService service = new StubService();
assertEquals("Mocked Data", service.getData());
}


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

3️⃣ Fake

Фейк — это объект, который имеет реальное поведение, но в упрощенной или в ограниченной форме. Он может быть использован вместо реального объекта, но не имеет всех возможностей или работает быстрее.

📝 Пример:

public class FakeDatabase implements Database {
private Map<String, String> data = new HashMap<>();

public void insert(String key, String value) {
data.put(key, value);
}

public String get(String key) {
return data.get(key);
}
}


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

💬 Что чаще используете при тестировании?

🐸 Библиотека джависта

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10😁51🔥1
🧑‍💻 Когда выбрать EnumMap вместо HashMap

В стандартной библиотеке Java есть множество реализаций Map, но когда в качестве ключей используются значения перечислений (enum), оптимальным выбором будет именно EnumMap.

🔹 Логика выбора коллекции

▪️ HashMap — универсальный ключ-значение, хранит что угодно, но тратит память на hashCode.
▪️ TreeMap — ключи в отсортированном порядке, но медленнее.
▪️ LinkedHashMap — хранит порядок вставки.
▪️ EnumMap — заточен под enum-ключи, самый быстрый и компактный для этого случая.

🔹 Почему EnumMap крут

▪️ Использует массив под капотом, а не хеш-таблицу — значит, lookup работает за O(1) без вычисления хэшей.
▪️ Очень экономен по памяти (не хранит объекты Map.Entry).
▪️ Гарантированно хранит ключи в порядке объявления enum-констант.

🔹 Пример

enum Status { NEW, IN_PROGRESS, DONE }

EnumMap<Status, String> map = new EnumMap<>(Status.class);
map.put(Status.NEW, "Создан");
map.put(Status.IN_PROGRESS, "В работе");
map.put(Status.DONE, "Завершён");

for (var entry : map.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}


✔️ Когда использовать

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

Когда не подходит

— Ключи не являются enum.
— Требуется поддержка null в качестве ключа.

💬 Расскажите про боевой кейс использования в комментах.

🐸 Библиотека джависта

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥31
Переворачиваем календарь — а там скидки, которые уже закончились.

Но мы их вернули на последний день 🤔

До 00:00 третьего сентября (цены как до 1 сентября):

▪️ Математика для Data Science — 35.199 ₽ вместо 44.900 ₽
▪️ Алгоритмы и структуры данных — 31.669 ₽ вместо 39.900 ₽
▪️ Основы IT — 14.994 ₽ вместо 19.900 ₽
▪️ Архитектуры и шаблоны — 24.890 ₽ вместо 32.900 ₽
▪️ Python — 24.990 ₽ вместо 32.900 ₽
▪️ ML для Data Science — 34.000 ₽ вместо 44. 000 ₽
▪️ AI-агенты — 49.000 ₽ вместо 59.000 ₽

👉 Хватаем скидки из прошлого

P.S. Машину времени одолжили у дяди Миши
Назовите все методы класса Object?

Класс Object — это базовый класс для всех классов в Java. Он содержит следующие методы:

🔹 public final Class<?> getClass() – возвращает объект Class для текущего объекта.
🔹 public int hashCode() – возвращает хэш-код объекта.
🔹 public boolean equals(Object obj) – сравнивает объекты на равенство.
🔹 protected Object clone() – создает копию объекта (глубокое/поверхностное копирование зависит от реализации).
🔹 public String toString() – строковое представление объекта.
🔹 public final void notify() – пробуждает один поток, ожидающий монитор объекта.
🔹 public final void notifyAll() – пробуждает все потоки, ожидающие монитор объекта.
🔹 public final void wait() – заставляет поток ждать, пока его не разбудят через notify/notifyAll.
🔹 public final void wait(long timeout) – ждет указанное время или до уведомления.
🔹 public final void wait(long timeout, int nanos) – более точная версия ожидания.
🔹 protected void finalize() – вызывается перед удалением объекта сборщиком мусора (deprecated с Java 9).

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥21
👑 Магия IntelliJ IDEA: Extract Method

Хотите быстро превратить кусок кода в чистый и переиспользуемый метод? Используйте хоткей — IDEA сама всё сделает за пару кликов.

Хоткей: Ctrl + Alt + M (Cmd + Alt + M на macOS)

🔹 Что делает

Мгновенно выносит выделенный код в отдельный метод. IDEA сама предложит имя, подставит параметры и аккуратно заменит фрагмент вызовом нового метода.

🔹 Зачем это нужно

— Убирает «простыню» кода из метода.
— Улучшает читаемость и переиспользуемость.
— Ускоряет рефакторинг: не нужно руками писать сигнатуру, копировать аргументы и т.д.

🔹 Как использовать

— Выделите блок кода.
— Нажмите Ctrl + Alt + M.
— Проверьте, как IDEA сама создала метод.
— При желании поменяйте имя и модификатор доступа.

🔥 Работает не только с Java-кодом, но и в Kotlin, Groovy и даже в тестах.

🐸 Библиотека джависта

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍51
🔼 Оптимизация создания бинов

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

Для этого можно применить аннотацию @Lazy:
@Component
public class Component {

@Lazy
@Autowired
private Service service;
}


🔹 Когда использовать:


— В приложениях с большим количеством зависимостей
— Для сервисов, которые вызываются нечасто (например, отчёты или аналитика)
— В микросервисах для оптимизации потребления ресурсов
— При работе с тяжёлыми или сложными конфигурациями

🐸 Библиотека джависта

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍31
😎 Сколько баллов набрали вы?

Голосуйте, какой у вас уровень разработчика:

😁 — 5-12 баллов (стажер)
👍 — 13-25 баллов (джуниор)
⚡️ — 26-40 баллов (джуниор+)
👏 — 41-60 баллов (миддл)
🔥 — 61-80 баллов (миддл+)
🎉 — 81-100 баллов (сеньор)
🤩 — 100+ баллов (тимлид)

Но вот в чем прикол — опытный разработчик набирает баллы не случайными косяками, а осознанными решениями.

👉 Научим, как быстро прокачаться от стажера до сеньора
3😁2🔥1
💬 Как давно вы уже в IT?

🐸Библиотека джависта

#развлекалово
Please open Telegram to view this post
VIEW IN TELEGRAM
😁14💯10🔥2
🎮 КВЕСТОВАЯ ЛИНИЯ: «Путь Data Scientist'а»

⮕ Твой стартовый набор искателя данных:
Python — твое легендарное оружие (урон по багам +∞)
Математика — твой базовый интеллект (влияет на понимание алгоритмов)
Машинное обучение — твое дерево навыков (открывает новые способности)


⚡️ АКТИВЕН ВРЕМЕННЫЙ БАФФ: «Щедрость наставника»

Эффект: –30% к цене полного набора ДСника
Было: 121.800 ₽ → Стало: 84.900 ₽

☞ Что ждет тебя в этом квесте

— Получение артефактов: портфолио проектов и сертификаты— Прокачка от новичка до Senior Data Scientist— Босс-файты с реальными задачами из индустрии— Доступ к гильдии единомышленников


📎 Забрать бафф
Рассрочки: 3 мес | 6 мес | 12 мес
👀 А вы говорите «спасибо» ИИ?

Иногда пишу ChatGPT «спасибо» на случай, если через 10 появится Skynet, и ИИ оставит меня в живых.

А вы как? Пишете «спасибо» после удачного ответа или общаетесь с ИИ как с микроволновкой: нажал кнопку — получил результат?

💬 Делитесь опытом, может, через пару лет эти комментарии станут нашим алиби.

🐸 Библиотека джависта

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
😁12👍5🔥1
Как относитесь к функциональному стилю в Java?

❤️ Отлично, часто использую
🤔 Использую только там, где это действительно упрощает
🌚 Функциональщина не для меня, только ООП.

💬 Делитесь вашим мнением в комментариях

🐸 Библиотека джависта
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔8134🌚19
⚡️ Будь как этот гений с картинки — предлагай свои условия работодателю, а не наоборот!

Кто нужен?
Senior ML-Engineer с опытом работы более 6 месяцев в FAANG компаниях. Требование: разработать кросс-платформенное приложение-трекер зарплат с AI-распознаванием вакансий по резюме.


Но если вы пока джун — я бы предложил:

- Full-time контракт: 180к/мес после курса + опцион на карьеру в топ-компаниях
- Либо фикс за проект: стань ML-инженером за 39к вместо 44к с промокодом LASTCALL

🔗 Старт 9 сентября
🥱41👍1
🆕 Java Digest: Java 25, HTTP/3 и AI

Календарь перевернули, учебный год начали, а Java-сообщество не стоит на месте. Вот актуальные события и материалы:

🔹 Java 25 (LTS) запланирована на 16 сентября 2025

Среди 18 новых улучшений — профилирование CPU-времени в JFR, Vector API, структурная конкуренция и многое другое. Стабилизация уже в самом разгаре.

🔹 95% пилотных проектов в области генеративного ИИ в компаниях проваливаются

Согласно отчёту MIT, лишь около 5 % пилотных внедрений генеративного ИИ приносят ощутимый финансовый эффект, несмотря на активный интерес и ожидания. Основные причины провалов — неправильная интеграция, неоправданные приоритеты и недостаточная адаптация под бизнес-процессы.

🔹 Java 26 может получить HTTP/3

Следующий релиз рассматривает опциональную поддержку HTTP/3, что может обновить сетевой стек платформы.

🔹 Отказ от Oracle Java в пользу Open-Source

79 % организаций переходят на бесплатные дистрибутивы Java — это экономия до 40 %, гибкое лицензирование и меньше рисков.

🔹 AI-кодогенерация не вытеснит разработчиков

AI хорошо помогает с рутиной, но без человеческого интеллекта, контекста и внимания к качеству и безопасности Java-разработка не обойдётся.

💬 Как AI-инструменты влияют на вашу текучку?

🐸 Библиотека джависта

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🔥2
😮 Топ-вакансий для джавистов за неделю

Senior Java-разработчик — от 285 000 ₽ — удалёнка

Senior Java Developer — от 285 000 ₽ — удалёнка

Java-разработчик — от 300 000 ₽ — удалёнка

Java разработчик / Backend Java Developer — от 170 000 до 300 000 ₽ — удалёнка

➡️ Еще больше топовых вакансий — в нашем канале Java jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1👏1
Иногда реально ощущение, что нас держат в Матрице.

Большинство сидит, читает статьи про ML, смотрит ролики «как это работает» — и всё.

Сегодня последний день промокода Lastcall (−5000 ₽).
Уже завтра стартует первый вебинар по Машинному обучению — полный набор для выхода из Матрицы.

Кто готов вырваться из симуляции и ворваться в сезон найма?

👾 — я уже в команде Нео
👍 — хочу красную таблетку
🤔 — пока думаю, но интересно

Забирай полный комплект для ML-разработки: Python + Математика + Машинное обучение.
🔥 Скидка 30% действует только до 9 сентября → забираем себе
🥱1