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
Интерфейсы Future и Callable используются для работы с асинхронными задачами.

🖇Callable — это интерфейс, который похож на Runnable, но может возвращать результат и выбрасывать исключение. Метод call() заменяет run() и возвращает объект.

🖇Future представляет собой результат асинхронной операции. Он позволяет проверять статус выполнения задачи, отменять её и получать результат с помощью метода get(). Метод get() блокирует выполнение до завершения задачи, что позволяет безопасно получить результат.

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
ℹ️Подписывайся на наши новые каналы!

🖥 JS собеседования
🖥 Backend собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
😎Оператор instanceof в Java используется для проверки, является ли объект экземпляром определенного класса или его подкласса. Это особенно полезно при работе с полиморфизмом, когда объект может принадлежать к нескольким типам.

Синтаксис: object instanceof ClassName. Возвращает true, если объект является экземпляром указанного класса или его подкласса, и false в противном случае.

class Animal {}
class Dog extends Animal {}

Animal myDog = new Dog();

boolean result = myDog instanceof Dog; // true
boolean result2 = myDog instanceof Animal; // true
boolean result3 = myDog instanceof String; // false


😎😎😎
Важно помнить, что instanceof возвращает false, если объект равен null. Это позволяет безопасно использовать оператор без риска возникновения NullPointerException.

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥21
💡Перегрузка операторов в Java — это концепция, позволяющая определить, как операторы ведут себя с пользовательскими типами данных. В отличие от C++ или Python, Java не поддерживает перегрузку операторов напрямую. Однако можно добиться аналогичного эффекта, переопределяя методы, такие как equals() и hashCode(), для работы с объектами.

Например, для сравнения объектов вместо оператора == используется метод equals(). Это позволяет определить, что значит "равенство" для конкретного класса, обеспечивая более гибкое и точное сравнение объектов.

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
Ссылка на метод (Method Reference) - это сокращенная запись лямбда-выражения, которая указывает на существующий метод.

Существует 4 типа ссылок на метод:
😎Ссылка на статический метод: Class::staticMethod
😎 Ссылка на метод экземпляра: instance::method
😎 Ссылка на метод произвольного объекта: Class::method
😎 Ссылка на конструктор: Class::new

Пример:
List<String> list = Arrays.asList("a", "b", "c");
// Лямбда-выражение
list.forEach(s -> System.out.println(s));
// Эквивалентная ссылка на метод
list.forEach(System.out::println);


😎Ссылки на методы делают код более лаконичным и читаемым, особенно когда лямбда-выражение просто вызывает существующий метод.

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

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