Библиотека собеса по Java | вопросы с собеседований
6.37K subscribers
398 photos
9 videos
477 links
Вопросы с собеседований по Java и ответы на них.

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

Учиться у нас: https://proglib.io/w/08c603b6

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Почему нельзя использовать LocalDateTime для работы с временными метками в распределенных системах?



Потому что LocalDateTime — это местное время, а в распределенных системах все серверы находятся в разных городах! Если один сервер в Москве показывает 15:00, а другой в Владивостоке — 22:00, то база данных не знает, как решить противоречия.

✔️

LocalDateTime не хранит информацию о часовом поясе и смещении относительно UTC, что делает его непригодным для распределенных систем

🐸 Библиотека собеса по Java

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111🔥1🤔1
В чем разница между fail-fast и fail-safe итераторами?



Fail-fast итераторы — это те, которые быстро падают при первой же ошибке, потому что написаны на скорострельном C++. А fail-safe итераторы работают медленно, зато безопасно, потому что каждый элемент проверяется антивирусом перед возвратом.

✔️

🔹 Fail-fast итераторы:

Бросают ConcurrentModificationException при структурном изменении коллекции во время итерации.
Проверяют modCount (счетчик модификаций) при каждом вызове next().
Используются в большинстве коллекций из java.util (ArrayList, HashMap, HashSet).
Работают на оригинальной коллекции.

🔹 Fail-safe итераторы:

Работают на копии/снимке коллекции, поэтому не бросают исключений.
Используются в java.util.concurrent коллекциях (CopyOnWriteArrayList, ConcurrentHashMap).
Могут не отражать актуальное состояние коллекции (weakly consistent).
Потребляют больше памяти из-за копирования.

🐸 Библиотека собеса по Java

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3😁3
Где лучше хранить пароль: в строке или в массиве символов?

Пароль лучше хранить в массиве символов.

— Строки в Java неизменяемы, и их нельзя явно удалить из памяти. Они остаются там до сборки мусора, что может привести к утечке пароля.
— Массив можно очистить вручную после использования (путём перезаписи значения), что даёт больший контроль над временем хранения данных.


🐸 Библиотека собеса по Java

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍123🔥2
✔️ Collections Challenge: Реализация Custom HashMap

Напишите упрощённую версию HashMap с нуля 👇

📦 Задание

Реализуйте SimpleHashMap<K, V> — собственную реализацию хеш-таблицы без использования готовых Map.

📋 Требования


1. Основная функциональность


→ put() — добавить/обновить пару ключ-значение
→ get() — получить значение по ключу (null если нет)
→ remove() — удалить элемент, вернуть старое значение
→ containsKey() — проверка наличия ключа
→ size() — текущее количество элементов
→ keySet() — множество всех ключей

2. Внутренняя структура

→ Использовать массив buckets (корзин)
→ Collision resolution через связный список (chaining)
→ Начальная ёмкость — 16 элементов
→ Load factor — 0.75

3. Обязательные фичи


→ Автоматическое расширение (resize) при превышении load factor
→ Корректная работа с null ключами
→ Правильный расчёт hashCode (учитывать equals/hashCode contract)
→ Обработка коллизий

Ставьте → 🔥, если нравится формат. Если нет → 🤔

💬 Пишите решение в комментариях, главное прячьте под спойлер.

🐸 Библиотека собеса по Java

#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍21
💬 Обратная связь

Какие вопросы публиковать больше?

👍🏼 — Классика с собесов, чтобы точно набить руку на ближайший
🤔 — Вопросы, которые не встречаются в каждой статье вида "N вопросов для собеса"
🔥 — Больше практики, а то одна теория

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍38🤔17🔥13
Чем отличается процесс от потока?

🔹 Процесс — это отдельная программа, выполняющаяся в своей выделенной области памяти. У каждого процесса есть собственное адресное пространство, и он изолирован от других процессов.

Взаимодействие между процессами требует механизмов межпроцессного взаимодействия (IPC), таких как сокеты, каналы или общая память. Это делает процессы более независимыми, но обмен данными между ними — более сложным и ресурсозатратным.

🔹 Поток — это "легковесная" единица выполнения, которая работает в рамках одного процесса и использует общую память этого процесса.

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

🐸 Библиотека собеса по Java

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥1👏1
Почему нельзя использовать ArrayList в многопоточной среде?



Если два потока одновременно добавят элементы, они создадут ситуацию, где список существует в двух состояниях одновременно (квантовая суперпозиция данных).

✔️

ArrayList не thread-safe, потому что все операции не синхронизированы. При concurrent доступе возникают три основные проблемы:

1. Race condition при модификации.
2. ConcurrentModificationException.
3. Нарушение инвариантов (самое опасное).

🐸 Библиотека собеса по Java

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2👏1