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
📝 ConcurrentHashMap и Hashtable — это коллекции в Java, обеспечивающие потокобезопасность, но они имеют различия в реализации и производительности.

1️⃣ Hashtable синхронизирована на уровне всего объекта, что делает её менее эффективной в многопоточных средах, так как только один поток может выполнять операции с картой в любой момент времени.

2️⃣ ConcurrentHashMap использует более сложный механизм синхронизации, разделяя карту на сегменты. Это позволяет нескольким потокам одновременно выполнять операции чтения и записи, значительно улучшая производительность в многопоточных приложениях.

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112
Deque (Double-Ended Queue) — это структура данных, которая позволяет добавлять и удалять элементы с обоих концов. В Java Deque является интерфейсом, расширяющим Queue, и реализуется такими классами, как ArrayDeque и LinkedList.

🟠Deque поддерживает операции вставки, удаления и просмотра элементов с обоих концов, что делает её гибкой для реализации различных алгоритмов, таких как стек и очередь.

Пример использования ArrayDeque:

Deque<Integer> deque = new ArrayDeque<>();
deque.addFirst(1);
deque.addLast(2);
System.out.println(deque.removeFirst()); // 1
System.out.println(deque.removeLast()); // 2


🟢Deque полезна для задач, где требуется доступ к элементам с обоих концов.

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

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

👉 Основные методы включают submit(), shutdown(), awaitTermination(), которые помогают запускать задачи, завершать работу сервиса и ожидать завершения всех задач.

ExecutorService executor = Executors.newFixedThreadPool(2);
executor.submit(() -> System.out.println("Task 1"));
executor.submit(() -> System.out.println("Task 2"));
executor.shutdown();


👉 ExecutorService полезен для эффективного управления многопоточностью.

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

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

Основные характеристики чистых функций:

✖️ Детерминированность: результат зависит только от входных параметров.
✖️ Отсутствие побочных эффектов: не изменяют внешние состояния, такие как глобальные переменные или файлы.

Чистые функции упрощают тестирование и отладку, так как их поведение предсказуемо и изолировано.

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
▶️Стек — это структура данных, работающая по принципу LIFO (Last In, First Out), где последний добавленный элемент извлекается первым. В Java стек можно реализовать с помощью класса Stack, который предоставляет методы push(), pop(), peek(), empty() и search().

▶️Метод push() добавляет элемент на вершину стека. pop() удаляет и возвращает верхний элемент. peek() возвращает верхний элемент без удаления. empty() проверяет, пуст ли стек. search() возвращает позицию элемента относительно вершины.

▶️Стек часто используется для реализации рекурсии, обработки выражений и управления вызовами функций. Важно помнить, что класс Stack синхронизирован, что может влиять на производительность. Для более высокой производительности можно использовать Deque как стек.

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥3
Существуют три класса для работы со строками: String, StringBuilder и StringBuffer, каждый из которых имеет свои особенности и области применения.

1⃣ String является неизменяемым объектом. Любое изменение строки создает новый объект в памяти, что может негативно сказываться на производительности при частых изменениях.

2⃣ StringBuilder — изменяемый класс, не синхронизированный, что делает его быстрее StringBuffer. Идеально подходит для приложений, где требуется множество операций изменения строк.

3⃣ StringBuffer также изменяемый, но он синхронизирован, обеспечивая безопасность при работе в многопоточной среде. Используется, когда необходимо выполнять операции с строками в многопоточных приложениях.

▶️ Выбор между этими классами зависит от конкретных требований к производительности и безопасности в приложении.

String str = "Hello";
str += " World"; // Создает новый объект String

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // Изменяет существующий объект StringBuilder

StringBuffer sbf = new StringBuffer("Hello");
sbf.append(" World"); // Изменяет существующий объект StringBuffer с потокобезопасностью


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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍161
java.time — это пакет в Java 8+, который предоставляет классы для работы с датами и временем.

Основные классы:
👉 LocalDate: для работы с датами без времени.
👉 LocalTime: для работы со временем без даты.
👉 LocalDateTime: для работы с датой и временем.
👉 ZonedDateTime: для работы с датой и временем с учетом временной зоны.

LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.of(date, time);
ZonedDateTime zonedDateTime = ZonedDateTime.now();


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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥1💯1
Методы add, remove и contains являются ключевыми в работе с коллекциями в Java.

😎 Метод add(E e) добавляет элемент в коллекцию. Если коллекция изменяется в результате вызова, возвращает true.

List<String> list = new ArrayList<>();
list.add("Java"); // Добавляет "Java" в список


😎 Метод remove(Object o) удаляет первый найденный элемент, равный указанному. Возвращает true, если элемент был удален.

list.remove("Java"); // Удаляет "Java" из списка


😎 Метод contains(Object o) проверяет, содержится ли элемент в коллекции. Возвращает true, если элемент найден.

boolean hasJava = list.contains("Java"); // Проверяет наличие "Java" в списке


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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍141🤔1
Каналы и буферы в Java используются для эффективного ввода-вывода данных.

1️⃣Каналы представляют собой абстракцию, через которую можно читать и записывать данные. Они работают с потоками байтов и поддерживают неблокирующий ввод-вывод.

2️⃣Буферы — это контейнеры для данных, которые взаимодействуют с каналами. Они позволяют временно хранить данные, что упрощает их обработку.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4
Java собеседования pinned «ℹ️Подписывайся на наши новые каналы! 🖥 JS собеседования 🖥 Backend собеседования»
😎Collections.unmodifiableList — это метод из Java Collections Framework, который возвращает неизменяемый вид списка. Он используется для создания "read-only" представления списка, что предотвращает его изменение после создания.

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");

List<String> unmodifiableList = Collections.unmodifiableList(list);


😎Попытка изменить unmodifiableList вызовет UnsupportedOperationException. Это полезно для защиты данных от непреднамеренных изменений, особенно при передаче коллекций между методами или классами.

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91
В Java Stream API, peek() и map() — это методы для работы с потоками данных, но они служат разным целям.

1️⃣peek() используется для промежуточных операций, позволяя выполнять действие для каждого элемента в потоке без изменения элементов. Это полезно для отладки или логирования.

Stream.of("a", "b", "c")
.peek(System.out::println)
.collect(Collectors.toList());


2️⃣map() преобразует каждый элемент потока, применяя функцию и возвращая новый поток с преобразованными элементами.

Stream.of("a", "b", "c")
.map(String::toUpperCase)
.collect(Collectors.toList()); // ["A", "B", "C"]


💡peek() не изменяет элементы, а map() преобразует их.

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2
В Java ключевые слова this и super используются для разных целей в контексте объектно-ориентированного программирования.

▶️ this ссылается на текущий объект класса. Используется для доступа к полям и методам текущего объекта, а также для вызова конструктора из другого конструктора в том же классе.

public class Example {
private int value;

public Example(int value) {
this.value = value;
}
}


▶️ super ссылается на суперкласс объекта. Используется для доступа к полям и методам суперкласса, а также для вызова конструктора суперкласса.

public class Subclass extends Superclass {
public Subclass() {
super();
}
}


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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍153
✏️ Оператор break в Java используется для немедленного выхода из цикла или блока switch. Он позволяет прервать выполнение текущей итерации и перейти к следующему коду за пределами цикла или блока. Пример использования в цикле for:


for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // Прерывает цикл, когда i равно 5
}
System.out.println(i);
}


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

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥3
ArrayList — это класс из Java Collections Framework, который реализует интерфейс List. Он представляет собой динамический массив, который может изменять свой размер при добавлении или удалении элементов.

Внутри ArrayList используется массив для хранения элементов. При добавлении элемента, если массив заполнен, создается новый массив большего размера, и все элементы копируются в него. Это делает операции добавления и удаления элементов более затратными по времени в худшем случае.


import java.util.ArrayList;

public class Example {
public static void main(String[] args) {
// Создание ArrayList
ArrayList<String> list = new ArrayList<>();

// Добавление элементов
list.add("A");
list.add("B");

// Получение элемента
String element = list.get(0); // "A"

// Удаление элемента
list.remove("B");
}
}


ArrayList обеспечивает быстрый доступ по индексу, но операции вставки и удаления могут быть медленными из-за необходимости сдвига элементов.

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥5
Поток ввода-вывода (I/O) в Java — это механизм, который позволяет программе взаимодействовать с внешними источниками данных, такими как файлы, сети или консоль, посредством чтения и записи данных. Java предоставляет различные классы и интерфейсы в пакете java.io для работы с потоками ввода-вывода, обеспечивая как байтовый, так и символьный ввод-вывод.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
🛑 Spring Framework — это фреймворк для разработки приложений на Java, который упрощает создание корпоративных приложений. Он предоставляет комплексную инфраструктуру для разработки, включая поддержку инверсии управления (IoC), аспектно-ориентированного программирования (AOP) и управления транзакциями. Основной компонент Spring — контейнер IoC, который управляет жизненным циклом объектов и их зависимостями.


@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}


Spring также поддерживает интеграцию с различными технологиями, такими как JPA, JMS и REST, что делает его универсальным инструментом для разработки.

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

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


import java.util.Arrays;
import java.util.List;

public class StreamExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

// Фильтрация и вывод чётных чисел
numbers.stream()
.filter(n -> n % 2 == 0)
.forEach(System.out::println); // Вывод: 2, 4
}
}


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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Создание объекта осуществляется с помощью оператора new, который вызывает конструктор класса. Например, MyClass obj = new MyClass(); создает новый экземпляр класса MyClass и сохраняет ссылку на него в переменной obj.

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