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

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

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

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
💬 Обратная связь

🎄 Всех с наступающими праздниками.
Планируете ли Вы готовиться к собеседованиям на новогодних праздниках?

👍🏼 - Конечно, выкладывайте вопросы как раньше
🌚 - Буду отдыхать и веселиться. Выложите что-то ещё

Поделитесь в комментариях, что на новогодние было бы интересно почитать, помимо постов по тематике канала?
Please open Telegram to view this post
VIEW IN TELEGRAM
December 30, 2024
🎄 Как работает String.intern()

Метод String.intern() возвращает строку из пула строк (String Pool), если такая строка уже существует, либо добавляет строку в пул, если её там ещё нет. Это может быть полезно для оптимизации памяти, особенно при работе с большим количеством дублирующихся строк.

🔍 Как это работает:

String Pool — это специальная область памяти в JVM, где хранятся уникальные строковые литералы. Когда мы вызываем intern(), JVM ищет строку в пуле:

Если строка найдена, возвращается ссылка на неё.
Если строка не найдена, она добавляется в пул, и возвращается новая ссылка.

🧨 Опасности использования:


— Перегрузка пула строк:
Если бездумно вызывать intern() на огромном количестве уникальных строк, можно исчерпать доступную память.

— Скрытые проблемы многопоточности:
Если несколько потоков одновременно вызывают intern() на строке, это может привести к задержкам или даже к дедлокам в JVM.
Please open Telegram to view this post
VIEW IN TELEGRAM
December 31, 2024
December 31, 2024
🎄 Чем отличается абстрактный класс от интерфейса?

Абстрактные классы и интерфейсы используются для обеспечения полиморфизма, но у них разные сценарии применения:

- Наследование: Абстрактный класс поддерживает единичное наследование, интерфейс — множественное.
- Реализация: Абстрактный класс может содержать поля и методы с реализацией. В то время как интерфейс (до Java 8) не мог иметь методы, после Java 8 в интерфейсах появились default методы. Поля в интерфейсах могут быть только public static final.
- Когда выбирать: Абстрактный класс — для объектов с общим поведением, интерфейсы — для описания возможностей или контрактов.


Абстрактные классы — это про кто я такой, интерфейсы — про что я могу делать.
Please open Telegram to view this post
VIEW IN TELEGRAM
January 1
🎄 Что такое JDBC?

JDBC (Java Database Connectivity) — это стандартный API для взаимодействия с реляционными базами данных. Он предоставляет набор интерфейсов и классов для выполнения следующих задач:

1️⃣ Подключение к базе данных с помощью драйверов, которые обеспечивают взаимодействие с конкретной СУБД.
2️⃣ Выполнение SQL-запросов, таких как SELECT, INSERT, UPDATE, DELETE.
3️⃣ Получение и обработка результатов, включая чтение данных из ResultSet.
4️⃣ Обработка транзакций, включая их коммит или откат.
5️⃣ Управление ресурсами, например, закрытие соединений, чтобы предотвратить утечки памяти.
Please open Telegram to view this post
VIEW IN TELEGRAM
January 2
ℹ️ Что такое Dependency Injection?

Dependency Injection (внедрение зависимостей) — это один из основных паттернов проектирования в программировании, который позволяет объектам получать свои зависимости извне, вместо того чтобы создавать их внутри себя.

DI способствует:

— Слабой связанности между компонентами.
— Легкости тестирования за счет использования mock-объектов.
— Повторному использованию кода.

Основные способы внедрения зависимостей:

🔹 Constructor Injection
Зависимости передаются через конструктор.
public class Service {
private final Repository repository;

public Service(Repository repository) {
this.repository = repository;
}
}


🔹Setter Injection
Зависимости передаются через сеттеры.
public class Service {
private Repository repository;

public void setRepository(Repository repository) {
this.repository = repository;
}
}


🔹 Field Injection
Зависимости внедряются напрямую в поля класса (обычно с помощью фреймворков, например Spring).
@Component
public class Service {
@Autowired
private Repository repository;
}
Please open Telegram to view this post
VIEW IN TELEGRAM
January 3
Можно ли переопределить метод toString() для Enum?

Да, можно переопределить так же, как и в любом другом классе. По умолчанию toString() для Enum возвращает имя перечисления (то, что задано при объявлении). Однако, если вам нужно вернуть другое значение, вы можете переопределить этот метод.
Please open Telegram to view this post
VIEW IN TELEGRAM
January 5
В чем разница между BeanFactory и ApplicationContext в Spring?

BeanFactory и ApplicationContext — это контейнеры Spring для управления бинами, но их возможности различаются:

🔹 Основная разница:

BeanFactory предоставляет базовую функциональность для управления бинами (инициализация, внедрение зависимостей, жизненный цикл).
ApplicationContext расширяет BeanFactory, добавляя больше возможностей, таких как обработка событий, интеграция с AOP, и интернационализация.

🔹 Ленивая загрузка бинов:


BeanFactory загружает бины лениво — только при их запросе.
ApplicationContext загружает все бины сразу при старте приложения (если они не настроены как ленивые).

🔹 Дополнительные возможности ApplicationContext:

Обработка событий (ApplicationEvent и ApplicationListener).
Поддержка аннотаций, таких как @PostConstruct и @PreDestroy.
Упрощенная интеграция с Environment для работы с настройками приложения.

🔹 Использование:

BeanFactory обычно используется для легковесных приложений или если нужна только базовая функциональность.
ApplicationContext — выбор для большинства реальных приложений благодаря богатому набору функций.
Please open Telegram to view this post
VIEW IN TELEGRAM
January 6
January 7
Что такое сигнатура метода?

Сигнатура метода — это его уникальная идентификация в пределах класса. Она включает:

▪️ Имя метода
▪️ Типы и порядок параметров (но не их названия)

Важно: возвращаемый тип и модификаторы доступа не входят в сигнатуру.
Please open Telegram to view this post
VIEW IN TELEGRAM
January 7
Что такое MVC?

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

1️⃣ Model (Модель):

- Отвечает за бизнес-логику и данные.
- Содержит состояние приложения и методы для его обработки.
- Не знает о представлении (View) и контроллере (Controller).

2️⃣ View (Представление):

- Отображает данные пользователю.
- Реализует интерфейс взаимодействия, но не содержит бизнес-логики.
- Получает данные только из модели.

3️⃣ Controller (Контроллер):

- Обрабатывает пользовательские действия и запросы.
- Вызывает методы модели для изменения состояния.
- Обновляет представление на основе изменений в модели.

MVC помогает разделить ответственность, упростить поддержку кода и облегчить тестирование.
Please open Telegram to view this post
VIEW IN TELEGRAM
January 8
Что такое MVP?

MVP (Minimum Viable Product) — это минимально жизнеспособный продукт, представляющий собой начальную версию продукта, которая включает только ключевые функции, необходимые для проверки гипотезы или удовлетворения базовых потребностей пользователей.

Ключевые аспекты MVP:

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

— MVP создаётся для тестирования рыночного спроса или реакции пользователей на продукт с минимальными затратами времени и ресурсов.

— После выпуска MVP собираются отзывы от пользователей, чтобы понять, в правильном ли направлении развивается продукт, и внести изменения.

Важно: MVP — это не просто "сырой" продукт, он должен решать основную задачу, при этом быть полезным и функциональным.
Please open Telegram to view this post
VIEW IN TELEGRAM
January 9
ℹ️ Что такое DispatcherServlet?

DispatcherServlet — это центральный компонент Spring MVC, который играет роль "фронт-контроллера" (Front Controller).

🔹 Он выполняет следующие функции:


▪️ Обработка входящих запросов:
Получает HTTP-запросы и перенаправляет их к соответствующим обработчикам (контроллерам).

▪️ Делегирование задач:
- Определяет, какой контроллер должен обработать запрос.
- Обращается к компонентам, таким как HandlerMapping и HandlerAdapter, чтобы найти подходящий обработчик.

▪️ Формирование ответа:
После обработки запроса контроллер возвращает ModelAndView, который DispatcherServlet использует для генерации ответа через ViewResolver.

🔹 Пример процесса:


- Клиент отправляет запрос /home.
- DispatcherServlet ищет соответствующий метод контроллера через HandlerMapping.
- Вызывает найденный метод контроллера, передаёт данные.
- Получает ModelAndView с данными и названием представления.
- Генерирует HTML с помощью ViewResolver и отправляет ответ клиенту.
Please open Telegram to view this post
VIEW IN TELEGRAM
January 10
Что такое Spring Boot?

Spring Boot — это фреймворк на базе Spring, который упрощает создание приложений на Java. Он предоставляет:

▪️ Автоконфигурацию — автоматическая настройка компонентов приложения на основе зависимостей и классов в проекте.
▪️ Встроенные серверы — возможность запустить приложение как автономный сервис (например, с помощью встроенного Tomcat или Jetty).
▪️ Starter-пакеты — преднастроенные зависимости для ускорения разработки. Например, spring-boot-starter-web для веб-приложений.
▪️ Поддержку production-ready функций — встроенные метрики, логирование, мониторинг через Spring Actuator.

Spring Boot упрощает старт проекта и уменьшает объем конфигурации, позволяя сосредоточиться на логике приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
January 11
January 13
В чём разница между @Controller и @RestController в Spring?

🔹 @Controller
Используется для определения классов, которые обрабатывают HTTP-запросы и возвращают представление (например, HTML или JSP). Обычно применяется совместно с ViewResolver для рендеринга страниц.
Методы внутри
@Controller возвращают ViewName (строку), а данные добавляются в модель через объект Model или ModelAndView.

🔹
@RestController
Это сокращение для @Controller + @ResponseBody.
Каждый метод автоматически сериализует возвращаемые данные в JSON или XML и отправляет их в ответе. Используется для создания REST API.
Please open Telegram to view this post
VIEW IN TELEGRAM
January 13
Что такое GraphQL?

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

🔵 Ключевые особенности GraphQL:

Клиент сам определяет структуру данных в запросе и получает именно то, что запрашивает.
Все запросы обрабатываются через один эндпоинт, что упрощает архитектуру API.
В GraphQL используется строгая типизация данных с помощью схемы, что облегчает разработку и валидацию.
Позволяет избежать избыточной передачи данных по сравнению с REST, что снижает нагрузку на сеть.
Please open Telegram to view this post
VIEW IN TELEGRAM
January 14