Библиотека собеса по Java | вопросы с собеседований
описание
Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: clc.to/3wECtA Для обратной связи: @proglibrary_feeedback_bot
6 469
подписчиков
Охват к подписчикам
12,2%
ERR
Реакции к просмотрам
0,59%
361 на 50 постов
Пересылки к просмотрам
0,74%
459
Постов в день
0,0
всего 131
Где отзываются чаще
доля реакций к просмотрам- 25 июл.✔️ Java-тест: ретраи с экспоненциальной задержкой Напишите production-ready ретраер 👇 📦 Задание Реализуйте утилиту, которая повторяет операцию при временном сбое: public <T> T executeWithRetry(Supplier<T> operation) { // Ваша реализация } 📋 Требования — Максимум N попыток. — Экспоненциальная задержка: 100ms → 200ms → 400ms… с верхней границей (cap). — Добавить jitter (случайный разброс), чтобы избежать «thundering herd» при массовых ретраях. — Ретраить только временные ошибки, бизнес-ошибки пробрасывать сразу. — Корректно обработать прерывание (InterruptedException + восстановление флага interrupt). — После исчерпания попыток пробросить последнее исключение (с сохранением причины). Ставьте → 🔥, если нравится формат. Если нет → 🌚 💬 Решения под спойлер. Сравним, какое будет лучше. 🐸Библиотека собеса по Java #practise1,29%
- 9 маябез подписи1,27%
- 31 июл.❓ Как работает ConcurrentHashMap? ConcurrentHashMap использует сегментирование / распространённые блокировки (в новых версиях — на уровне бакета), что позволяет нескольким потокам читать и писать без полной блокировки карты. Операции get делаются без блокировки, put и remove используют ограниченную блокировку (или CAS) лишь на отдельных сегментах или узлах. В отличие от Collections.synchronizedMap(...), который блокирует весь объект на каждую операцию, ConcurrentHashMap даёт более высокую конкурентность и масштабируемость. 🐸 Библиотека собеса по Java #concurrency1,18%
- 22 маябез подписи1,12%
- 7 июн.без подписи1,12%
- 18 маябез подписи1,05%
- 26 июл.❓ Как работает HashMap внутри? Что происходит при коллизии и при достижении load factor? HashMap — массив бакетов (Node[] table). Ключ хешируется, хеш определяет индекс бакета: index = hash & (capacity - 1 Что происходит при put(key, value): Считается hash(key) — не просто hashCode(), а с дополнительным перемешиванием старших битов ((h = key.hashCode()) ^ (h >>> 16)). Это снижает коллизии при маленьком размере таблицы. Находится бакет по индексу. Если пустой — кладём первым. Если нет — коллизия. 🔹 Коллизия: До Java 8 → связный список в бакете. Поиск O(n) в худшем случае. С Java 8 → когда в бакете больше 8 элементов и capacity >= 64, список превращается в красно-чёрное дерево. Поиск становится O(log n). Обратно в список — при сжатии ниже 6 элементов. // Упрощённо: Node в списке или TreeNode в дереве static class Node<K,V> { final int hash; final K key; V value; Node<K,V> next; } 🔹 Load factor и resize: По умолчанию capacity = 16, loadFactor = 0.75. Порог = capacity * loadFactor = 12. Как только элементов стало больше 12 — начинается resize(): таблица удваивается до 32, все элементы перераспределяются по новым бакетам. Это O(n) операция. Поэтому если заранее знаете размер — задавайте начальную ёмкость: // Хотим 1000 элементов без resize: // 1000 / 0.75 ≈ 1334, берём следующую степень двойки Map<String, Integer> map = new HashMap<>(2048); 🐸 Библиотека собеса по Java #core0,98%
- 21 маябез подписи0,92%
- 13 маябез подписи0,90%
- 28 июл.❓ Для чего используется ключевое слово this? this — это ссылка на текущий объект внутри его метода или конструктора. Оно нужно для: — Разрешения конфликта имён (например, между полем класса и параметром метода). — Вызова других конструкторов этого же класса. — Передачи текущего объекта в качестве аргумента в методы или конструкторы других классов. — Возврата ссылки на текущий объект (часто используется в паттерне Builder или для чейнинга методов). 🐸 Библиотека собеса по Java #core0,89%
- 28 маябез подписи0,88%
- 27 маябез подписи0,85%