Библиотека собеса по Java | вопросы с собеседований
6.33K subscribers
370 photos
4 videos
298 links
Вопросы с собеседований по Java и ответы на них.

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

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

Для обратной связи: @proglibrary_feeedback_bot
加入频道
Что такое денормализация в базах данных?

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

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥32
Как устроена под капотом HashMap?

Это структура данных, основанная на хешировании, реализующая интерфейс Map. Она использует массив бакетов, где каждый элемент хранится в виде пары "ключ-значение".

Основные моменты:

🔹 Хеширование: для каждого ключа вычисляется хеш-код с помощью метода hashCode(). Этот код используется для определения индекса в массиве бакетов.

🔹 Коллизии: если два разных ключа имеют одинаковый хеш-код (коллизия), они помещаются в один бакет. До Java 8 коллизии обрабатывались с помощью связанного списка, начиная с Java 8 — с помощью сбалансированных деревьев.

🔹 Динамическое расширение: когда нагрузка достигает 75% от текущего размера массива (порог загрузки), HashMap увеличивает размер массива в два раза и перераспределяет элементы, чтобы уменьшить вероятность коллизий.

🔹 Балансировка дерева: если в бакете больше 8 элементов, то список преобразуется в сбалансированное дерево, что улучшает производительность при большом количестве коллизий.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍84🔥1
Чем отличается ArrayList от LinkedList в Java?

ArrayList основан на массиве, LinkedList — на двусвязном списке. ArrayList быстрее при случайном доступе по индексу, но вставки и удаления в середину — дорогие, т.к. нужно сдвигать элементы.

LinkedList — наоборот: доступ по индексу медленный, но вставка и удаление в начале или середине — быстрые (при наличии ссылки на элемент).

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

🔹 ArrayList — если чаще нужен быстрый доступ по индексу и мало вставок/удалений.
🔹 LinkedList — если часто добавляешь/удаляешь элементы в начале или середине списка.

На практике ArrayList почти всегда предпочтительнее. LinkedList используется редко из-за своей громоздкости и плохой кэш-локальности.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥1
Что такое лямбда?

Лямбда — это краткий способ описания анонимной функции, которая может быть передана как аргумент или возвращена из метода. В Java лямбда-выражения реализуют функциональные интерфейсы (интерфейс с одним абстрактным методом).

Синтаксис:
(parameters) -> expression


Используются для упрощения работы с функциональными API (например, Stream API), сокращают бойлерплейт-код.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥3
Какие объекты стоит использовать в качестве ключей в HashMap?

Потенциальные ключи должны быть иммутабельными, а также правильно реализовывать методы equals() и hashCode().

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥3👏2
Для чего нужен Garbage Collector?

Garbage Collector автоматически освобождает память, удаляя объекты, на которые больше нет ссылок. Это помогает избежать утечек памяти и ручного управления памятью.

Основные функции GC:

Освобождение памяти.
Предотвращение утечек памяти.
Оптимизация работы приложения.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64🔥3
Какие есть методы в классе Object?

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

▪️ equals(Object obj) — сравнение объектов на логическое равенство
▪️ hashCode() — возвращает хеш-код объекта
▪️ toString() — строковое представление объекта
▪️ getClass() — возвращает объект Class, представляющий тип в рантайме
▪️ clone() — создает копию объекта (если поддерживает Cloneable)
▪️ finalize() — вызывается перед сборкой мусора (устарел и не рекомендуется)
▪️ wait(), notify(), notifyAll() — методы для межпоточной синхронизации

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3👏1
Что такое MVC?

MVC (Model-View-Controller) — это архитектурный шаблон, разделяющий приложение на три компонента:

▪️ Model (Модель) — содержит бизнес-логику
▪️ View (Представление) — отображает данные пользователю, получая их от модели
▪️ Controller (Контроллер) — обрабатывает входные данные (обычно от пользователя), вызывает нужные методы модели и обновляет представление

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

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11👏2🔥1🤔1
Расскажите о паттерне "Стратегия"?

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

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

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥1
💬 Обратная связь

Ваше мнение по контенту:

🔥 — Всё супер
👍🏼 — Нормально
😁 — Есть предложения по улучшению (в комменты)

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥43👍13😁3
В чем разница между sleep() и wait()?

🔹 sleep() — это метод из Thread, он просто приостанавливает выполнение текущего потока на заданное время. Он не освобождает монитор (lock) объекта.

🔹 wait() — это метод из Object, он используется для синхронизации между потоками. Поток, вызвавший wait(), освобождает монитор и ждет, пока другой поток вызовет notify() или notifyAll().

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81🔥1
Чем отличается абстрактный класс от интерфейса?

Абстрактный класс может содержать как реализованные, так и абстрактные методы, состояние (поля), а также конструкторы. Интерфейс до Java 8 содержал только абстрактные методы, но теперь может иметь default, static методы и даже private методы (с Java 9), но не может содержать состояние (кроме static final констант).

🔹 Ключевые отличия:

▪️ extends — только один абстрактный класс, но implements — множество интерфейсов.
▪️ Абстрактный класс позволяет инкапсулировать общую реализацию и состояние.
▪️ Интерфейс чаще используют для задания контракта, который может быть реализован классом с любой иерархией.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥5👏2
Что такое нормализация базы данных?

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

Нормализация включает несколько этапов, называемых нормальными формами (1NF, 2NF, 3NF и т.д.), каждая из которых имеет свои требования к структуре таблиц.

🔹 1НФ
Таблица должна содержать только атомарные значения (без множественных значений в одной ячейке) и уникальные строки.

🔹 2НФ

Таблица должна быть в 1НФ, и все ненулевые атрибуты должны быть полностью зависимы от первичного ключа.

🔹 3НФ
Таблица должна быть в 2НФ, и все атрибуты должны быть не только зависимы от первичного ключа, но и напрямую, без транзитивных зависимостей (когда один атрибут зависит от другого через третий).

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92🔥1
Что такое ссылка на метод?

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

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤔3🔥1👏1