Java | Вопросы собесов
11.4K subscribers
37 photos
4 videos
1.59K links
Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy

Контакт для рекламы: @easyoffer_adv
Download Telegram
🤔 Какие есть методы чтения XML, опиши сильные и слабые стороны каждого метода?

- DOM (Document Object Model): загружает весь XML в память в виде дерева.
Плюсы: лёгкий доступ к любому узлу; Минусы: высокая потребляемая память при больших файлах.
- SAX (Simple API for XML): событийный парсер, обрабатывает XML последовательно.
Плюсы: низкое потребление памяти; Минусы: нет прямого доступа к элементам, труднее работать.
- StAX (Streaming API for XML): потоковый парсер с возможностью контролировать чтение.
Плюсы: баланс между SAX и DOM, лучше управляем поток; Минусы: сложнее логика обработки.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥6👍1
🤔 Обеспечит ли Stream API RandomAcess?

Нет, Stream API не поддерживает RandomAccess, потому что он работает с потоком данных, а не с индексированными структурами.

🚩Почему Stream API не поддерживает `RandomAccess`?

🟠Stream – это поток данных
который не обязательно хранится в памяти в виде структуры, поддерживающей случайный доступ.
🟠Нет индексов
в отличие от List, Stream не позволяет получить элемент по индексу (get(index) отсутствует).
🟠Обход последовательный
элементы проходятся один за другим, что делает случайный доступ невозможным.

ListRandomAccess)
List<Integer> list = new ArrayList<>(List.of(1, 2, 3, 4, 5));
System.out.println(list.get(2)); // Быстрое получение элемента по индексу


Stream (без RandomAccess)
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
stream.skip(2).findFirst().ifPresent(System.out::println); // Ищем 3-й элемент


Ставь 👍 и забирай 📚 Базу знаний
👍5
🤔 Что стоит в центре парадигмы?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊15🤔4👍1
🤔 Чем отличаются методы Thread.sleep() и Thread.yield()?

Методы Thread.sleep() и Thread.yield() в Java используются для управления потоком, но работают по-разному.

🚩Thread.sleep()

Метод Thread.sleep(milliseconds) приостанавливает выполнение текущего потока на указанное время.

🚩Как это работает?

Поток уходит в состояние "ожидания" (TIMED_WAITING).
Операционная система не даёт ему процессорное время в течение заданного времени.
После завершения паузы поток снова становится готовым к выполнению (RUNNABLE).

public class SleepExample {
public static void main(String[] args) {
System.out.println("Начало работы...");
try {
Thread.sleep(2000); // Пауза на 2 секунды
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Прошло 2 секунды");
}
}


Результат
Начало работы...
(пауза 2 секунды)
Прошло 2 секунды


🚩Thread.yield()

Метод Thread.yield() даёт возможность другим потокам выполнить работу.

🚩Как это работает?

Текущий поток передаёт управление планировщику (scheduler).
Если есть другие потоки с таким же или более высоким приоритетом, они получат процессорное время.
Если таких потоков нет, то текущий поток продолжит выполняться.

public class YieldExample {
public static void main(String[] args) {
Runnable task = () -> {
for (int i = 1; i <= 5; i++) {
System.out.println(Thread.currentThread().getName() + " - " + i);
Thread.yield(); // Позволяет другим потокам выполняться
}
};

Thread t1 = new Thread(task, "Поток-1");
Thread t2 = new Thread(task, "Поток-2");

t1.start();
t2.start();
}
}


Результат (примерный, зависит от планировщика ОС)
Поток-1 - 1
Поток-2 - 1
Поток-1 - 2
Поток-2 - 2
...


Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Для чего используется оператор ORDER BY?

ORDER BY используется для сортировки результата запроса по одному или нескольким столбцам:
- по возрастанию (ASC) или убыванию (DESC);
- может использовать индексы (при наличии).
Без ORDER BY СУБД не гарантирует порядок строк в ответе.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍5
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴 Тестовый собес с Java-разработчиком уже завтра! 
[+ разбор 50 сложных вопросов в подарок ]

16 сентября (уже завтра!) в 19:00 по мск
приходи онлайн, чтобы посмотреть на настоящее интервью на Middle Java-разработчика!

Собеседование проведёт Виктор Анохин — Senior из Wildberries, ех-Билайн

Как это будет:

📂 Виктор задаст разработчику вопросы и задачи, которые могут спросить на реальном собесе

📂 После каждого ответа респондента ты услышишь подробный комментарий от ментора и поймёшь, чего на самом деле ожидает собеседующий на интервью

📂 В конце сможешь задать любой вопрос Виктору и получить на него развёрнутый ответ

Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы

И ты можешь посмотреть его бесплатно 🔥
Только завтра, в прямом эфире!

🎁 Подарок для всех, кто зарегается на веб — файл с ОТВЕТАМИ НА 50 СЛОЖНЫХ ВОПРОСОВ с Java-собеседований 🔥

Переходи в бот, чтобы попасть на эфир и забрать подарок
👉 @shortcut_sh_bot

Реклама.
О рекламодателе.
🤔 Чем полезны неизменяемые (Immutable) объекты в Java?

Неизменяемые (immutable) объекты не могут быть изменены после создания.
Если нужно изменить данные – создаётся новый объект.

🚩Почему неизменяемые объекты полезны?

🟠Потокобезопасность (Thread Safety)
Неизменяемые объекты можно безопасно использовать в многопоточной среде – их не нужно синхронизировать.
String message = "Hello";
String newMessage = message.replace("H", "J");

System.out.println(message); // Hello
System.out.println(newMessage); // Jello


🟠Отсутствие неожиданных изменений (безопасность данных)
Если объект неизменяемый, его нельзя случайно изменить.
class BankAccount {
private final String accountNumber;

public BankAccount(String accountNumber) {
this.accountNumber = accountNumber;
}

public String getAccountNumber() {
return accountNumber;
}
}


🟠Упрощает отладку и поддержку кода
Изменяемые объекты могут менять состояние в неожиданный момент.
List<String> list = new ArrayList<>();
list.add("Java");

modifyList(list); // Метод может изменить список!

System.out.println(list); // Ожидаем ["Java"], но может быть что угодно!


🟠Можно использовать в качестве ключей в `HashMap` и `HashSet`
Хешкод неизменяемого объекта не изменится, а значит, он корректно работает в HashMap.
Map<String, String> map = new HashMap<>();
map.put("key", "value");

System.out.println(map.get("key")); // Всегда "value", так как String неизменяемый


🟠Совместимость с кэшем (например, в Hibernate, Spring)
Неизменяемые объекты можно безопасно кешировать, так как они не меняются.

🚩Как создать неизменяемый класс?

Все поля private final.
Нет сеттеров.
Если есть массивы или списки – копируем их перед возвратом.
final class Person {
private final String name;
private final int age;

public Person(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public int getAge() {
return age;
}
}


Ставь 👍 и забирай 📚 Базу знаний
👍6
🤔 Что известно про особое свойство React?

- Компонентность: интерфейс разбит на переиспользуемые компоненты;
- Однонаправленный поток данных (props → down);
- JSX — декларативный синтаксис, близкий к HTML, но с возможностями JS;
- Виртуальный DOM — ключ к высокой производительности;
- Хуки — способ управлять состоянием и побочными эффектами в функциональных компонентах.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊10
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 В чем разница между Statement и PreparedStatement?

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

🚩Statement

Statement используется для выполнения простых SQL-запросов. Запросы формируются и передаются в базу данных в виде строки. Подходит для простых запросов. Не оптимизирован для повторного выполнения. Каждый раз, когда запрос передается в базу данных, он компилируется и выполняется заново. Уязвим к SQL-инъекциям. Поскольку запрос формируется путем конкатенации строк, злоумышленники могут внедрять вредоносный SQL-код.
Statement stmt = connection.createStatement();
String query = "SELECT * FROM employees WHERE department = 'HR'";
ResultSet rs = stmt.executeQuery(query);

while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
stmt.close();


🟠PreparedStatement
PreparedStatement используется для выполнения предварительно скомпилированных SQL-запросов. Это позволяет повысить производительность и безопасность. Оптимизирован для повторного выполнения. Запрос компилируется только один раз, а затем может многократно выполняться с разными параметрами, что повышает производительность. Защита от SQL-инъекций. Использует параметризованные запросы, которые помогают избежать уязвимостей, связанных с SQL-инъекциями. Удобство работы с параметрами. Позволяет устанавливать значения параметров с использованием методов setInt(), setString() и других.
String query = "SELECT * FROM employees WHERE department = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, "HR");
ResultSet rs = pstmt.executeQuery();

while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
pstmt.close();


🚩Основные различия

🟠Производительность
Statement: Каждый запрос компилируется заново, что снижает производительность при многократном выполнении одного и того же запроса.
PreparedStatement: Запрос компилируется один раз и может многократно выполняться с разными параметрами, что повышает производительность.
🟠Безопасность
Statement: Уязвим к SQL-инъекциям, поскольку запросы формируются путем конкатенации строк.
PreparedStatement: Использует параметризованные запросы, что защищает от SQL-инъекций.
🟠Удобство использования
Statement: Подходит для простых, одноразовых запросов.
PreparedStatement: Удобен для многократного выполнения запросов с разными параметрами.
🟠Типы запросов
Оба интерфейса могут выполнять запросы типа SELECT, INSERT, UPDATE, DELETE, но PreparedStatement более удобен для запросов с параметрами.

Ставь 👍 и забирай 📚 Базу знаний
👍3
🤔 Что такое ключевое слово final?

final используется для:
1. Классов: предотвращает наследование.
2. Методов: предотвращает переопределение.
3. Переменных: значение не может быть изменено после инициализации.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний