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

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

Backend собеседования - @frontview_backend
Java работа - @frontview_java_vacancies
Все IT вакансии - @frontview_all_vacancies
Download Telegram
😎Интерфейсы могут содержать методы с реализацией, используя ключевое слово default. Это позволяет добавлять новые методы в интерфейсы без нарушения существующего кода, реализующего интерфейс.


interface MyInterface {
// Обычный метод интерфейса
void existingMethod();

// Метод с реализацией по умолчанию
default void newDefaultMethod() {
System.out.println("Default implementation");
}
}


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

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1
InputStream является абстрактным классом, представляющим поток ввода байтов, который используется для чтения данных из различных источников, таких как файлы, массивы байтов или сетевые соединения. Он предоставляет базовые методы для чтения байтов, которые могут быть переопределены в подклассах для реализации специфических источников данных.

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


import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Example {
public static void main(String[] args) {
// Создание пула потоков с фиксированным размером
ExecutorService executor = Executors.newFixedThreadPool(5);

// Отправка задач на выполнение
for (int i = 0; i < 10; i++) {
executor.submit(() -> {
System.out.println("Task executed by " + Thread.currentThread().getName());
});
}

// Завершение работы ExecutorService
executor.shutdown();
}
}


Этот код создает пул из 5 потоков и выполняет 10 задач, распределяя их между потоками.

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍131
Ключевое слово private используется для ограничения доступа к членам класса, делая их доступными только внутри самого класса. Это обеспечивает инкапсуляцию, защищая внутреннее состояние объекта от внешнего вмешательства и позволяя контролировать доступ к данным.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
++i — префиксный инкремент. Сначала увеличивает значение переменной i, затем возвращает новое значение.

i++ — постфиксный инкремент. Сначала возвращает текущее значение переменной i, затем увеличивает его.

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

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

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
⚡️Инкапсуляция достигается путем сокрытия данных класса и предоставления доступа к ним через методы. Это защищает внутреннее состояние объекта и обеспечивает контроль над изменениями.


public class Person {
// Приватные поля, доступ к которым ограничен
private String name;
private int age;

// Публичные методы для доступа и изменения полей
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
if (age > 0) {
this.age = age;
}
}
}


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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍141
JVM (Java Virtual Machine) — это виртуальная машина, которая исполняет Java байт-код, обеспечивая платформонезависимость. JRE (Java Runtime Environment) включает JVM и библиотеки для выполнения Java приложений, тогда как JDK (Java Development Kit) содержит JRE и инструменты для разработки, такие как компилятор javac.

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

1⃣ Predicate представляет собой условие, возвращающее boolean. Он имеет метод test(T t), который принимает объект типа T и возвращает true или false. Пример использования:

Predicate<Integer> isEven = x -> x % 2 == 0;
// Проверяет, является ли число четным


2⃣ Function преобразует объект одного типа в объект другого. Он имеет метод apply(T t), который принимает объект типа T и возвращает объект типа R. Пример использования:

Function<String, Integer> stringLength = s -> s.length();
// Возвращает длину строки


Таким образом, Predicate используется для проверки условий, а Function — для преобразования данных.

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍161
FileReader и FileWriter используются для чтения и записи текстовых данных в файлы соответственно. FileReader читает символы из файла, а FileWriter записывает символы в файл, обеспечивая удобную работу с текстовыми данными в приложениях.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3
➡️ Статический внутренний класс объявляется с ключевым словом static. Он не имеет доступа к нестатическим полям и методам внешнего класса без создания его экземпляра. Такой класс может быть использован без создания объекта внешнего класса.


class Outer {
static class StaticInner {
// Статический внутренний класс
}
}


Нестатический внутренний класс имеет доступ ко всем полям и методам внешнего класса. Для его создания требуется экземпляр внешнего класса.


class Outer {
class NonStaticInner {
// Нестатический внутренний класс
}
}


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

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

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


public enum Day {
// Определение констант перечисления
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

public class EnumExample {
public static void main(String[] args) {
Day today = Day.MONDAY;
System.out.println("Today is: " + today);
}
}


Перечисления помогают избежать ошибок, связанных с использованием "магических" чисел или строк.

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111
Класс 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