Java | Вопросы собесов
описание
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Лучшие посты
за три месяца🤔 Слышал ли что то про метод intern? Метод intern() в классе String используется для оптимизации памяти. Он добавляет строку в String Pool и возвращает её ссылку, если строка уже там есть. 🚩Как работает `intern()`? Без intern() – строки создаются в Heap (куче) String s1 = new String("Hello"); // В куче (Heap) String s2 = new String("Hello"); System.out.println(s1 == s2); // false (разные объекты) С intern() – строки хранятся в String Pool String s1 = new String("Hello").intern(); String s2 = new String("Hello").intern(); System.out.println(s1 == s2); // true (одна строка в String Pool) 🚩Что такое `String Pool`? Это специальная область памяти, где хранятся уникальные строковые литералы. Все строковые литералы ("Hello") по умолчанию хранятся в String Pool. String s1 = "Hello"; // В String Pool String s2 = "Hello"; // Ссылается на тот же объект System.out.println(s1 == s2); // true 🚩Когда использовать `intern()`? Когда у вас много одинаковых строк в памяти (например, имена, идентификаторы). Для экономии памяти, если строки часто дублируются. В парсинге JSON, XML – одни и те же строки могут повторяться тысячи раз. List<String> names = new ArrayList<>(); for (int i = 0; i < 100000; i++) { names.add(("User" + (i % 100)).intern()); // Используем String Pool } Ставь 👍 и забирай 📚 Базу знаний
🤔 Какая сложность поиска метода по ключу в коллекции TreMap? В TreeMap поиск элемента по ключу выполняется за O(log n). 🚩Почему сложность `O(log n)`? TreeMap основан на красно-чёрном дереве (Red-Black Tree). Красно-чёрное дерево – это самобалансирующееся бинарное дерево. В худшем случае, глубина дерева ≈ log₂(n), поэтому: Поиск (get(key)) выполняется за O(log n). Вставка (put(key, value)) тоже O(log n), так как требует балансировки. import java.util.TreeMap; public class TreeMapExample { public static void main(String[] args) { TreeMap<Integer, String> treeMap = new TreeMap<>(); treeMap.put(10, "Ten"); treeMap.put(20, "Twenty"); treeMap.put(30, "Thirty"); System.out.println(treeMap.get(20)); // Поиск за O(log n) } } Ставь 👍 и забирай 📚 Базу знаний
🤔 Какая структура данных в коллекции List? В Java интерфейс List представляет упорядоченную коллекцию элементов, допускающую дубликаты. В зависимости от конкретной реализации (ArrayList, LinkedList, Vector), используется разная структура данных. 🚩Основные реализации `List` и их структуры данных 🟠ArrayList Динамический массив Структура данных: массив Быстрая индексация O(1), но медленное удаление/вставка в середину O(n). List<String> list = new ArrayList<>(); 🟠LinkedList Двусвязный список Структура данных: двусвязный список Быстрое добавление/удаление элементов O(1), но медленный доступ по индексу O(n). List<String> list = new LinkedList<>(); 🟠Vector Динамический массив (синхронизирован) Структура данных: массив (как ArrayList), но с синхронизацией. Устарел, используется редко из-за synchronized методов (медленнее ArrayList). List<String> list = new Vector<>(); Ставь 👍 и забирай 📚 Базу знаний
🤔 Чем отличается компонент от бина? В Spring оба термина – Bean и Component – связаны с управляемыми объектами, но у них разное предназначение. 🚩Что такое `@Component`? @Component делает класс Spring-бином автоматически. Spring сам создаст и зарегистрирует объект в контейнере. import org.springframework.stereotype.Component; @Component public class Car { public void drive() { System.out.println("Машина едет..."); } } Как получить объект? import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); Car car = context.getBean(Car.class); car.drive(); } } 🚩Что такое `@Bean`? @Bean создаёт Bean вручную в @Configuration-классе. Можно использовать, если нужно передать параметры или создать Bean из библиотеки. import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean public Car car() { return new Car(); // Создаём объект вручную } } Как получить Bean? ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); Car car = context.getBean(Car.class); Ставь 👍 и забирай 📚 Базу знаний
🤔 К какой категории сущности относится Primary Key? Primary Key (первичный ключ) в базах данных относится к категории ограничений (constraints). Это специальное ограничение, которое накладывается на столбец или группу столбцов таблицы, чтобы однозначно идентифицировать каждую строку (запись) в таблице. 🚩Основные свойства Primary Key 🟠Уникальность Значение первичного ключа должно быть уникальным для каждой строки. Это исключает дублирование записей. 🟠Не может быть NULL Столбец (или столбцы), определённый как Primary Key, не допускает значения NULL, так как NULL не может однозначно идентифицировать строку. 🟠Только один Primary Key на таблицу Таблица может иметь только один первичный ключ, но он может состоять из одного столбца (простой ключ) или нескольких (составной ключ). 🚩Зачем нужен Primary Key? Для однозначной идентификации записей в таблице. Для создания связей между таблицами в реляционных базах данных (внешние ключи ссылаются на первичный ключ другой таблицы). Для ускорения поиска и манипуляций с данными за счёт создания индекса на столбец первичного ключа. 🚩Пример использования Primary Key Простой первичный ключ CREATE TABLE Users ( user_id INT PRIMARY KEY, username VARCHAR(50), email VARCHAR(100) ); Составной первичный ключ CREATE TABLE Orders ( order_id INT, product_id INT, PRIMARY KEY (order_id, product_id) ); Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое ordering? Ordering (упорядочивание) в многопоточности — это порядок, в котором операции записи и чтения видны разным потокам. Неправильный порядок может привести к ошибкам даже при правильной логике программы. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
🤔 В чём отличие List от Set? - List — сохраняет порядок элементов, допускает повторы; - Set — не допускает дубликатов, порядок может быть произвольным (кроме LinkedHashSet, TreeSet). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
🤔 Какие есть виды объединения веток? - Merge — объединяет изменения, создаёт новый коммит слияния; - Rebase — переносит коммиты на другую ветку, изменяя их историю; - Squash — объединяет несколько коммитов в один перед слиянием; - Fast-forward — слияние без нового коммита, если нет расхождений. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
🤔 Чем stub отличается от mock? В тестировании разница между Stub и Mock заключается в их предназначении и способе использования. 🚩Stub (Заглушка) Stub – это простейший объект-заглушка, который возвращает заранее заданные данные. Он не проверяет, какие методы были вызваны, а просто отвечает на запросы. class UserRepositoryStub implements UserRepository { @Override public User findById(Long id) { return new User(id, "Иван"); // Просто возвращает статичные данные } } 🚩Mock (Макет) Mock – это объект, который имитирует поведение реального объекта и позволяет проверять вызовы методов (сколько раз был вызван, с какими аргументами и т. д.). UserRepository userRepository = mock(UserRepository.class); when(userRepository.findById(1L)).thenReturn(new User(1L, "Иван")); User user = userRepository.findById(1L); verify(userRepository, times(1)).findById(1L); // Проверяем, что метод был вызван 1 раз Ставь 👍 и забирай 📚 Базу знаний
🤔 Чем отличаются подходы Trunk Based и Feature Branch? - Trunk-Based: разработчики часто коммитят напрямую в основную ветку, минимизируя долгоживущие ветви. - Feature Branch: каждая новая функциональность разрабатывается в отдельной ветке и затем вливается в основную. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
🤔 В чем разница Spring Boot и Spring? Spring и Spring Boot являются частью экосистемы, которая предоставляет широкий спектр инструментов для разработки современных Java-приложений. Несмотря на тесную связь, между ними есть ключевые отличия. 🚩Spring Framework Это мощный и широко используемый фреймворк для разработки приложений на Java. Он предоставляет обширный набор функциональностей, включая инверсию управления (IoC) и внедрение зависимостей (DI), абстракции для работы с транзакциями, обработку исключений, поддержку аспектно-ориентированного программирования (AOP) и многое другое. Он предназначен для упрощения Java EE разработки, обеспечивая легкость создания масштабируемых и легко поддерживаемых приложений. 🚩Spring Boot С другой стороны, представляет собой расширение Spring Framework, предназначенное для упрощения процесса конфигурации и развертывания Spring-приложений. Он автоматизирует многие процессы, предоставляя "готовые к использованию" настройки для быстрого старта проектов и избавления от необходимости вручную определять стандартную конфигурацию. 🚩Различия 🟠Цель Spring Framework предоставляет основу для создания приложений на Java, в то время как Spring Boot предлагает конвенции и автоматическую конфигурацию для быстрого старта и развертывания приложений. 🟠Конфигурация В Spring для настройки приложения часто требуется детальная конфигурация, включая XML-файлы или аннотации. Spring Boot стремится уменьшить эту сложность, автоматически конфигурируя компоненты на основе добавленных в проект зависимостей. 🟠Встроенный сервер Spring Boot по умолчанию включает в себя встроенный сервер приложений, что упрощает развертывание и тестирование веб-приложений. Ставь 👍 и забирай 📚 Базу знаний
🤔 Какие методы располагаются в интерфейсе? В интерфейсе могут быть абстрактные методы, которые по умолчанию являются public и abstract. Java 8 добавила методы с реализацией по умолчанию (default) и статические методы (static). Также можно использовать приватные методы (private) для внутренних нужд интерфейса. Это делает интерфейсы более функциональными и гибкими для расширения. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
🤔 Что такое Web application? Web application (веб-приложение) — это программное приложение, которое работает на веб-сервере и доступно пользователям через веб-браузер с использованием сети (например, Интернета). Примеры: интернет-магазины, почтовые клиенты, CRM-системы. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
🤔 Какие шаги нужно выполнить для прочтения текстового файла? Для прочтения текстового файла в Java нужно выполнить несколько шагов. 1⃣Выбор метода чтения файла В Java есть несколько способов читать текстовые файлы: 1. Использование класса FileReader. 2. Использование BufferedReader для построчного чтения. 3. Использование java.nio.file.Files для чтения всех строк файла. 4. Применение Scanner для гибкого чтения данных. 2⃣Открытие файла Нужно указать путь к файлу (абсолютный или относительный) и передать его в выбранный класс. Например: FileReader reader = new FileReader("file.txt"); 3⃣Чтение данных Выберите подходящий метод для обработки содержимого файла: - Построчное чтение. - Чтение символов. - Чтение всех строк сразу (например, через Files.readAllLines). 4⃣Закрытие ресурса Для освобождения системных ресурсов после работы с файлом нужно закрыть поток. Это делается вручную или с помощью конструкции try-with-resources. 🚩Примеры реализации Построчное чтение с BufferedReader import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class FileReadExample { public static void main(String[] args) { try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); // Вывод строки } } catch (IOException e) { System.out.println("Ошибка: " + e.getMessage()); } } } Чтение файла с помощью Files import java.nio.file.Files; import java.nio.file.Paths; import java.io.IOException; import java.util.List; public class FileReadExample { public static void main(String[] args) { try { List<String> lines = Files.readAllLines(Paths.get("file.txt")); for (String line : lines) { System.out.println(line); } } catch (IOException e) { System.out.println("Ошибка: " + e.getMessage()); } } } Чтение через Scanner import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class FileReadExample { public static void main(String[] args) { try (Scanner scanner = new Scanner(new File("file.txt"))) { while (scanner.hasNextLine()) { System.out.println(scanner.nextLine()); // Построчное чтение } } catch (FileNotFoundException e) { System.out.println("Файл не найден: " + e.getMessage()); } } } Ставь 👍 и забирай 📚 Базу знаний
🤔 Как разрешаются проблемы дефицита памяти и исключения OutOfMemoryError? OutOfMemoryError возникает, когда JVM не может выделить память. Причины и решения: - Утечка памяти — объекты остаются в памяти без необходимости → использовать профилировщики. - Неправильные настройки Heap → увеличить размер -Xmx, -Xms. - Плохая логика (бесконечные коллекции, рекурсия) → анализ и оптимизация кода. - Неосвобождённые ресурсы → использовать try-with-resources. Важно отлаживать утечки и оптимизировать структуру данных. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
🤔 Что такое HQL? HQL (Hibernate Query Language) — это язык запросов, похожий на SQL, но оперирующий Java-классами и их свойствами, а не таблицами и колонками. Он позволяет работать с объектной моделью и использовать возможности Hibernate ORM. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
🤔 Что за исключение Interrupted Exception? InterruptedException — это проверяемое исключение (checked exception) в Java, которое выбрасывается, когда поток (Thread) прерывается во время выполнения метода, который поддерживает прерывание (например, sleep(), wait(), join() и др.). 🚩Почему `InterruptedException` существует? В многопоточной среде иногда требуется прервать выполнение потока, например, для завершения долгой задачи или для корректной остановки программы. Вместо грубого завершения потока (Thread.stop(), который устарел и считается небезопасным) Java предлагает мягкий способ прерывания через флаг прерывания и обработку InterruptedException. 🚩Когда выбрасывается `InterruptedException`? Это исключение выбрасывается, если поток: 1. Ожидает (wait(), join()) 2. Спит (sleep()) 3. Блокируется на очереди (BlockingQueue.take(), LockSupport.park()) И при этом его прерывают с помощью метода interrupt(). Пример кода: обработка InterruptedException class MyThread extends Thread { public void run() { try { System.out.println("Поток засыпает..."); Thread.sleep(5000); // Поток засыпает на 5 секунд } catch (InterruptedException e) { System.out.println("Поток был прерван во время сна!"); } System.out.println("Поток продолжает работу..."); } } public class Main { public static void main(String[] args) { MyThread t = new MyThread(); t.start(); try { Thread.sleep(2000); // Даем потоку 2 секунды поработать } catch (InterruptedException e) { e.printStackTrace(); } t.interrupt(); // Прерываем поток } } Вывод программы Поток засыпает... Поток был прерван во время сна! Поток продолжает работу... 🚩Что делать после `InterruptedException`? 1. Просто обработать исключение (как в примере выше). 2. Передать исключение дальше — например, если метод не может корректно обработать прерывание, он передает его вызывающему коду: void myMethod() throws InterruptedException { Thread.sleep(1000); // Может выбросить исключение } 🟠Восстановить флаг прерывания если прерывание важно для логики программы: catch (InterruptedException e) { Thread.currentThread().interrupt(); // Восстанавливаем флаг прерывания } Ставь 👍 и забирай 📚 Базу знаний
🤔 Чем отличаются HashSet и LinkedHashSet? - HashSet: - Быстрая вставка и поиск. - Не сохраняет порядок элементов. - LinkedHashSet: - Также использует хеш-таблицу. - Сохраняет порядок вставки элементов. Выбирают в зависимости от требований к порядку. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
🤔 Что такое livelock? Livelock — это ситуация, в которой потоки продолжают реагировать друг на друга, но не могут продвинуться в выполнении задач, например, из-за постоянных попыток избежать конфликта. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
- 12 авг.836 просмотров
без подписи