Java собеседования – Telegram
Java собеседования
696 subscribers
106 photos
224 links
Подготовка к собеседованиям на позицию Java-разработчик

Еще больше на сайте https://frontview-it.ru

Backend собеседования - @frontview_backend
Java работа - @frontview_java_vacancies
Все IT вакансии - @frontview_all_vacancies
Download Telegram
Класс Exception является базовым классом для всех исключений, которые могут быть перехвачены и обработаны в программе. Он используется для создания пользовательских исключений и управления потоком выполнения программы при возникновении ошибок.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2
Future представляет собой объект, который позволяет работать с результатами асинхронной вычислительной операции. Он обеспечивает возможность получения результата, когда вычисление будет завершено, и помогает управлять потоками.

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


ExecutorService executor = Executors.newFixedThreadPool(2);
Future<Integer> future = executor.submit(() -> {
// Долговременная задача или вычисление
Thread.sleep(2000);
return 42;
});

try {
// Ожидание результата, если задача завершилась
Integer result = future.get(); // может выбросить InterruptedException или ExecutionException
System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
// Обработка исключений
} finally {
executor.shutdown();
}


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111
BufferedWriter — это класс, который используется для записи текста в выходной поток с буферизацией, что повышает производительность за счет уменьшения количества операций ввода-вывода. Он оборачивает другой Writer и накапливает данные в буфере перед их записью в целевой поток.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2
📌 Java Memory Model (JMM) определяет, как потоки взаимодействуют с памятью в многопоточной среде. Она обеспечивает видимость изменений переменных между потоками и гарантирует порядок выполнения операций. Без JMM потоки могли бы видеть устаревшие данные из-за кэширования или переупорядочивания операций.

Ключевые аспекты JMM:
- Happens-before: Отношение, гарантирующее, что одна операция видна другой.
- Volatile: Переменные с этим модификатором всегда читаются из основной памяти, а не из кэша потока.
- Synchronized: Блоки и методы с этим ключевым словом обеспечивают взаимное исключение и видимость изменений.


class Example {
private volatile boolean flag = false;

public void toggleFlag() {
flag = !flag; // Изменение видно всем потокам
}
}


В этом примере volatile гарантирует, что изменения flag будут видны всем потокам сразу. JMM критична для написания корректных многопоточных приложений.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91
Константа создается с использованием ключевого слова final при объявлении переменной. Значение константы должно быть присвоено сразу при объявлении и не может быть изменено в дальнейшем.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
📌 HashMap и Hashtable — это структуры данных для хранения пар ключ-значение. Основные различия:

1. Синхронизация: Hashtable потокобезопасен, все его методы синхронизированы. HashMap не потокобезопасен, но работает быстрее в однопоточных сценариях. Для многопоточности можно использовать Collections.synchronizedMap или ConcurrentHashMap.

2. Null-значения: HashMap позволяет использовать null как ключ и значение. Hashtable выбрасывает NullPointerException при попытке добавить null.

3. Наследование: Hashtable — устаревший класс, появился в Java 1.0. HashMap — часть Java Collections Framework, появился в Java 1.2.


// Пример использования HashMap
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("key", null); // Работает

// Пример использования Hashtable
Hashtable<String, Integer> hashtable = new Hashtable<>();
hashtable.put("key", null); // NullPointerException


HashMap предпочтителен в большинстве случаев из-за производительности и гибкости. Hashtable используется редко, в основном в legacy-коде.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Цикл for выполняет итерацию, пока условие выполняется, и состоит из трех частей: инициализации, условия и шага. На каждой итерации проверяется условие, и если оно истинно, выполняется тело цикла.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
🔵Dependency Injection (DI) — это подход, при котором зависимости объекта передаются извне, а не создаются внутри самого объекта. Это упрощает тестирование, улучшает модульность и делает код более гибким.

Spring поддерживает три основных типа инъекций:
1. Constructor Injection — зависимости передаются через конструктор.
2. Setter Injection — зависимости устанавливаются через setter-методы.
3. Field Injection — зависимости внедряются напрямую в поля класса с помощью аннотаций.

Пример:

@Service
public class UserService {
private final UserRepository userRepository;

@Autowired // Constructor Injection
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}

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

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Перегрузка методов — это возможность определять несколько методов с одним именем в одном классе, но с разными параметрами (типами, количеством или порядком). Это позволяет использовать одно имя для методов, выполняющих схожие задачи, но с разными входными данными.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3
➡️ Оператор new используется для создания нового объекта. При вызове new выделяется память для объекта, вызывается конструктор класса для инициализации этого объекта, и возвращается ссылка на созданный объект.


ClassName obj = new ClassName();


В данном примере new ClassName() создает объект типа ClassName. Конструктор ClassName() вызывается для инициализации объекта, а ссылка на этот объект присваивается переменной obj.

Оператор new также используется для создания массивов:


int[] arr = new int[10];


Здесь создается массив из 10 элементов типа int, и ссылка на этот массив присваивается переменной arr.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91
🛑 Comparator — это интерфейс, используемый для сравнения двух объектов. Он позволяет задать пользовательский порядок сортировки для объектов, которые не поддерживают естественный порядок (не реализуют Comparable).


Comparator<String> lengthComparator = (s1, s2) -> s1.length() - s2.length();


Здесь создается Comparator, который сравнивает строки по их длине. Лямбда-выражение принимает две строки и возвращает разницу их длин.

Compar
ator часто используется в методах сортировки:


List<String> list = Arrays.asList("apple", "banana", "cherry");
list.sort(lengthComparator);


В этом примере список строк сортируется по длине с использованием созданного Comparator.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91
BufferedReader и BufferedWriter используются для эффективного чтения и записи текстовых данных соответственно. BufferedReader уменьшает количество операций ввода-вывода за счет буферизации данных при чтении, а BufferedWriter аналогично оптимизирует запись, накапливая данные в буфере перед отправкой в выходной поток.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
RuntimeException — это unchecked-исключение, которое не требует обязательного объявления в сигнатуре метода или обработки через try-catch. Оно используется для ошибок, которые могут возникнуть во время выполнения программы, таких как NullPointerException, IllegalArgumentException или ArrayIndexOutOfBoundsException.


public void divide(int a, int b) {
if (b == 0) {
throw new IllegalArgumentException("Divisor cannot be zero");
}
System.out.println(a / b);
}


В примере выбрасывается RuntimeException, если делитель равен нулю. Такие исключения обычно указывают на ошибки в логике программы.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101
OAuth2 — это протокол авторизации, позволяющий приложениям получать ограниченный доступ к данным пользователя на другом сервисе без передачи логина и пароля. Он использует токены доступа для безопасного взаимодействия между клиентом, ресурсным сервером и сервером авторизации.

Java собеседования
👍71
➡️ Функция представляет собой блок кода, который выполняет определённую задачу и может быть вызван по имени. Функции определяются с использованием ключевого слова void, если они не возвращают значение, или с указанием типа возвращаемого значения.


int add(int a, int b) {
return a + b;
}


Функции могут принимать параметры и возвращать результат. Они используются для организации кода, устранения дублирования и улучшения читаемости.


void printMessage(String message) {
System.out.println(message);
}


Функции могут быть статическими, если принадлежат классу, а не экземпляру, и вызываться без создания объекта.


class MathUtils {
static int multiply(int a, int b) {
return a * b;
}
}


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🤔1
filter используется для отбора элементов коллекции, удовлетворяющих определённому условию, возвращая только те элементы, которые соответствуют предикату. map преобразует каждый элемент коллекции в другой объект, применяя к нему заданную функцию, и возвращает новую коллекцию с результатами преобразования.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
🔹REST и SOAP — это два подхода к созданию веб-сервисов. REST основан на архитектурных принципах, использует стандартные HTTP-методы (GET, POST, PUT, DELETE) и работает с данными в форматах JSON, XML или других. SOAP — это протокол, который строго определяет структуру сообщений в XML и требует использования WSDL для описания сервисов.

🔹REST легче в реализации и интеграции, так как он более гибкий и использует стандартные веб-технологии. SOAP, напротив, более строгий и безопасный, поддерживает встроенные механизмы для транзакций и безопасности (WS-Security). Выбор между ними зависит от требований проекта.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101
Iterator — это объект, который позволяет последовательно обходить элементы коллекции без необходимости знать её внутреннюю структуру. Он предоставляет методы для проверки наличия следующего элемента (hasNext) и его получения (next), что делает обход коллекции удобным и безопасным.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
➡️ HashSet и TreeSet — это реализации интерфейса Set, но с разными характеристиками.

HashSet хранит элементы в хэш-таблице, обеспечивая вставку и поиск за O(1) в среднем случае. Порядок элементов не гарантируется.


Set<String> hashSet = new HashSet<>();
hashSet.add("apple");
hashSet.add("banana");


TreeSet использует красно-черное дерево для хранения элементов, обеспечивая вставку и поиск за O(log n). Элементы хранятся в отсортированном порядке.


Set<String> treeSet = new TreeSet<>();
treeSet.add("apple");
treeSet.add("banana");


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111
Ключевое слово protected обеспечивает доступ к членам класса (полям, методам) внутри того же пакета, а также в классах-наследниках, даже если они находятся в других пакетах. Это позволяет контролировать видимость данных, ограничивая доступ извне, но сохраняя его для наследников.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
Стек вызовов — это структура данных, которая отслеживает последовательность вызовов методов или функций. Каждый новый вызов добавляется на вершину стека, а завершение вызова удаляет его из стека.


public void methodA() {
methodB(); // Вызов methodB
}

public void methodB() {
methodC(); // Вызов methodC
}

public void methodC() {
throw new RuntimeException("Error in methodC"); // Исключение
}


При возникновении исключения стек вызовов показывает цепочку методов, которые привели к ошибке. Например, если исключение произошло в methodC, стек будет выглядеть так:


methodC
methodB
methodA


Это помогает определить, где именно возникла ошибка и как программа дошла до этого момента.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4