Forwarded from Библиотека задач по Java | тесты, код, задания
Почему при стресс тесте и высокой нагрузке может быть выброшено NPE?
Anonymous Quiz
24%
Из-за race condition - оба потока читают одно и то же
31%
Из-за instruction reordering - процессор может переставить строки 1 и 2
10%
Из-за garbage collection в неудачный момент
17%
Это невозможно - если deploymentReady true, то config уже инициализирован
17%
Посмотреть ответ
🤔5👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁28👍3🔥3
Forwarded from Библиотека программиста | программирование, кодинг, разработка
Летим зимовать ✈️
Когда холодает, айтишники пакуют чемоданы, а мы разыгрываем ваучер на 50 000 рублей в Островке.
Поехать к морю или остаться среди снежных пейзажей — выбирайте сами!
Чтобы участвовать, нужно оставить любую реакцию под этим постом и подписаться на каналы ниже:
😎 Типичный программист
🐸 Библиотека программиста
🟢 Ostrovok! Tech
Теперь осталось нажать на кнопку участия под этим постом и вы в игре!
Итоги подведём 12 декабря. Победителя выберем с помощью бота. Подробнее с правилами можно ознакомиться здесь.
Всем удачи!
Участников: 111
Призовых мест: 1
Дата розыгрыша: 19:00, 12.12.2025 MSK (3 дня)
Когда холодает, айтишники пакуют чемоданы, а мы разыгрываем ваучер на 50 000 рублей в Островке.
Поехать к морю или остаться среди снежных пейзажей — выбирайте сами!
Чтобы участвовать, нужно оставить любую реакцию под этим постом и подписаться на каналы ниже:
Теперь осталось нажать на кнопку участия под этим постом и вы в игре!
Итоги подведём 12 декабря. Победителя выберем с помощью бота. Подробнее с правилами можно ознакомиться здесь.
Всем удачи!
Участников: 111
Призовых мест: 1
Дата розыгрыша: 19:00, 12.12.2025 MSK (3 дня)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
LinkedList — это реализация интерфейса List и Deque на основе двусвязного списка. Отличный выбор для частых вставок/удалений, но медленный доступ по индексу.
📦 Базовая структура
LinkedList состоит из узлов (Node), связанных ссылками:
public class LinkedList<E> {
transient int size = 0;
transient Node<E> first; // голова списка
transient Node<E> last; // хвост списка
private static class Node<E> {
E item;
Node<E> next; // следующий узел
Node<E> prev; // предыдущий узел
}
}Главные особенности:
— O(1) для add/remove с концов (first/last).
— O(n) для доступа по индексу (нужен обход).
— O(1) для вставки/удаления при наличии ссылки на узел.
— Больше памяти чем ArrayList (~24 байта overhead на элемент).
Внутренности Node
→ item: элемент
→ prev: ссылка на предыдущий узел
→ next: ссылка на следующий узел
Преимущества двусвязного списка
— Обход в обе стороны (вперёд и назад).
— Быстрое удаление узла при наличии ссылки на него.
— Динамический размер без перевыделения памяти.
➕ add(E element) — добавление в конец
1. Создаётся новый Node:
newNode = new Node<>(last, element, null).2. Если список пустой
(last == null), то first = last = newNode.3. Иначе:
last.next = newNode И last = newNode.4. Увеличивается size.
Сложность: O(1).
➕ add(int index, E element) — вставка по индексу
1. Проверяется range:
index > size → IndexOutOfBoundsException.2. Если
index == size, вызывается addLast().3. Иначе находится узел по индексу через
node(index).4. Создаётся новый узел и вставляется перед найденным.
5. Обновляются ссылки prev/next соседних узлов.
Сложность: O(n) — нужен поиск узла по индексу.
🔎 get(int index) — получение по индексу
1. Проверка границ:
index >= size → IndexOutOfBoundsException.2. Вызывается
node(index) для поиска узла.3.
node(index) использует оптимизацию:— Если index < size/2: обход от first вперёд.
— Иначе: обход от last назад.
4. Возвращается item найденного узла.
Сложность: O(n) — в худшем случае обход половины списка.
➖ remove(int index) — удаление по индексу
1. Находится узел по индексу через
node(index).2. Узел отсоединяется от списка:
— node.prev.next = node.next (если prev != null).
— node.next.prev = node.prev (если next != null).
3. Обновляются first/last если нужно.
4. Обнуляются ссылки в узле для GC:
node.item = null; node.next = node.prev = null.Сложность: O(n) — поиск узла O(n), удаление O(1).
➕ addFirst(E e) / addLast(E e)
Специальные методы для работы как Deque:
list.addFirst("A"); // O(1) — добавление в начало
list.addLast("Z"); // O(1) — добавление в конецСложность: O(1) — прямое изменение first/last.
➖ removeFirst() / removeLast()
list.removeFirst(); // O(1) — удаление первого
list.removeLast(); // O(1) — удаление последнего
Сложность: O(1) — прямой доступ к first/last.
⚖️ Важные нюансы
LinkedList может работать как двусторонняя очередь. Идеально для реализации стеков и очередей.
Каждый узел требует ~24 байта overhead (на 64-bit JVM):
— 12 байт заголовок объекта
— 8 байт ссылка item
— 8 байт ссылка next
— 8 байт ссылка prev
— Padding до 8 байт
Для списка из 1000 элементов overhead ~24 КБ против ~4 КБ у ArrayList.
LinkedList НЕ реализует RandomAccess marker interface. Это сигнал для алгоритмов использовать итераторы вместо get(i).
// ❌ Медленно — O(n²)
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
}
// ✅ Быстро — O(n)
for (String s : list) {
// iterator используется автоматически
}
ListIterator позволяет двунаправленный обход и модификацию.
LinkedList допускает null значения.
→ Частые вставки/удаления с концов.
→ Модификация при итерации.
→ Неизвестный размер с частым ростом (Нет overhead на расширение массива как у ArrayList).
Ставьте 🔥, если хотите ещё разбор.
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍4❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁30👍1🔥1🤔1💯1
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Конечно может! Более того, в Java 21 появился секретный модификатор ultra-final, после которого IDE будет ругаться на него еще до компиляции!
Интерфейс
Интерфейсы по умолчанию являются abstract, что концептуально
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5😁5🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Frontend VK Hub — как работают наши интерфейсы?
Что делает интерфейсы VK быстрыми, удобными и устойчивыми под нагрузкой миллионов пользователей?
Frontend VK Hub — это сообщество инженеров, которые создают и развивают пользовательские интерфейсы для ВКонтакте, VK Play, VK WorkSpace и других сервисов экосистемы. Мы делимся практическим опытом, рассказываем о подходах к производительности, внедрении современных фреймворков и всему, что связано с улучшением Developer Experience.
Здесь можно найти инсайты от ведущих фронтенд-разработчиков, разборы реальных задач, новости индустрии и приглашения на мероприятия VK. И конечно, вакансии!
Подписывайся!
Реклама. ООО "ВК" ИНН 7743001840
Что делает интерфейсы VK быстрыми, удобными и устойчивыми под нагрузкой миллионов пользователей?
Frontend VK Hub — это сообщество инженеров, которые создают и развивают пользовательские интерфейсы для ВКонтакте, VK Play, VK WorkSpace и других сервисов экосистемы. Мы делимся практическим опытом, рассказываем о подходах к производительности, внедрении современных фреймворков и всему, что связано с улучшением Developer Experience.
Здесь можно найти инсайты от ведущих фронтенд-разработчиков, разборы реальных задач, новости индустрии и приглашения на мероприятия VK. И конечно, вакансии!
Подписывайся!
Реклама. ООО "ВК" ИНН 7743001840
🔥 Устал каждый раз городить велосипед для Telegram-ботов на Spring Boot?
Новый готовый Spring Boot Starter решает именно эту боль: минимальная конфигурация, понятный pipeline обработки апдейтов, маршрутизация, обработка ошибок и простая интеграция в Spring-экосистему — всё из коробки.
Архитектура разделяет приём апдейтов (Ingress), Delivery, Interceptor, Dispatcher и Router/Handler, а также даёт готовые хуки расширения и обработки нестандартных сценариев.
🔗 Подробнее в статье
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸 Библиотека джависта
#CoreJava
Новый готовый Spring Boot Starter решает именно эту боль: минимальная конфигурация, понятный pipeline обработки апдейтов, маршрутизация, обработка ошибок и простая интеграция в Spring-экосистему — всё из коробки.
Архитектура разделяет приём апдейтов (Ingress), Delivery, Interceptor, Dispatcher и Router/Handler, а также даёт готовые хуки расширения и обработки нестандартных сценариев.
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3❤1
Проблема: вы правили код, тестировали гипотезу, переключились на другую ветку — и Git не даёт сделать checkout. Коммит делать рано, изменения сырые, но и терять их нельзя.
git stashgit stash временно убирает все незакоммиченные изменения в «карман», возвращая рабочую директорию в чистое состояние. Без потерь и хака.
git stash
или с комментарием:
git stash push -m "WIP: auth refactor"
git checkout feature/login
git stash list
git stash pop
или аккуратно, без удаления из stash:
git stash apply
git stash apply stash@{1}Минус один «я потерял код» в вашей карьере 🚀
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤2🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13👍2🔥1🥱1💯1
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Напишите потокобезопасный кеш с TTL и размером 👇
📦 Задание
Реализуйте ExpiringCache<K, V> — thread-safe кеш с автоматическим удалением устаревших записей.
public class ExpiringCache<K, V> {
public void put(K key, V value, Duration ttl) { }
public Optional<V> get(K key) { }
public void remove(K key) { }
public int size() { }
}📋 Требования
1. Функциональность
put() — добавить элемент с TTL (time-to-live)
get() — получить элемент, вернуть Optional.empty() если истёк
remove() — удалить элемент
size() — количество валидных (не истёкших) элементов
2. Потокобезопасность
→ Все операции должны быть thread-safe
→ Минимизировать блокировки (не использовать synchronized на весь объект)
→ Одновременное чтение не должно блокироваться
— Производительность
→ get() должен быть O(1) в среднем случае
→ Автоматическая очистка истёкших записей (passive + active eviction)
→ Не создавать отдельный поток для каждого элемента
3. Ограничения
→ Максимальный размер кеша — 1000 элементов
→ При превышении удалять самые старые записи (LRU)
→ Graceful shutdown при закрытии кеша
Бонус: Добавить метрики (cache hits/misses)
Ставьте → 🔥, если нравится формат. Если нет → 🤔
#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17🤔3👍2👾1