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

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

Backend собеседования - @frontview_backend
Java работа - @frontview_java_vacancies
Все IT вакансии - @frontview_all_vacancies
Download Telegram
➡️ 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
Основные цели сборки мусора — освобождение памяти, занятой объектами, которые больше не используются в программе, и предотвращение утечек памяти. Это обеспечивает эффективное управление ресурсами и стабильную работу приложения.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
🪅 Методы default и static в интерфейсах позволяют добавлять реализацию методов непосредственно в интерфейс. Это расширяет функциональность интерфейсов без нарушения обратной совместимости.


interface Example {
void abstractMethod();

default void defaultMethod() {
System.out.println("Default implementation");
}

static void staticMethod() {
System.out.println("Static method in interface");
}
}


Метод default предоставляет реализацию по умолчанию, которую можно переопределить в классах. Метод static позволяет добавлять утилитарные методы, которые вызываются через интерфейс, а не через экземпляр класса. Это упрощает расширение интерфейсов и уменьшает дублирование кода.

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

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
▶️Конструкции if-else используются для выполнения кода на основе условий. Основные правила включают:

- Условие в if должно быть булевым выражением.
- Блок else не обязателен и выполняется, если условие в if ложно.
- Можно использовать else if для проверки нескольких условий последовательно.


int x = 10;
if (x > 0) {
// выполняется, если x больше 0
} else if (x < 0) {
// выполняется, если x меньше 0
} else {
// выполняется, если x равно 0
}


- Фигурные скобки {} обязательны, если блок содержит более одной строки кода.
- Для улучшения читаемости рекомендуется избегать вложенных if-else и использовать ранний возврат или тернарные операторы, где это уместно.

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

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

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


class Animal {
void sound() {
System.out.println("Animal sound");
}
}

class Dog extends Animal {
@Override
void sound() {
System.out.println("Bark");
}
}

Animal myAnimal = new Dog();
myAnimal.sound(); // Выведет "Bark"


В этом примере метод sound() переопределен в классе Dog. При вызове myAnimal.sound() выполняется версия метода из класса Dog, несмотря на то, что ссылка имеет тип Animal. Это демонстрирует полиморфизм во время выполнения.

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82
Heap (куча) используется для динамического выделения памяти под объекты, время жизни которых управляется сборщиком мусора. Stack (стек) предназначен для хранения локальных переменных и вызовов методов, память освобождается автоматически при завершении метода.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
Основные отличия между String, StringBuilder и StringBuffer:

1. String
- Неизменяемый (immutable) класс. Любая операция, изменяющая строку, создает новый объект.
- Подходит для хранения строк, которые не требуют частых изменений.

2. StringBuilder
- Изменяемый (mutable) класс. Операции выполняются на том же объекте, что повышает производительность.
- Не потокобезопасный. Используется в однопоточных приложениях.

3. StringBuffer
- Аналогичен StringBuilder, но потокобезопасный.
- Медленнее StringBuilder из-за синхронизации.

Пример:

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

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

StringBuffer sbf = new StringBuffer("Hello");
sbf.append(" World"); // Потокобезопасное изменение


Выбор зависит от требований к изменяемости и потокобезопасности.

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

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
👉 Основные методы класса Throwable:

- getMessage(): Возвращает сообщение об ошибке, которое было передано при создании исключения.
- getCause(): Возвращает причину исключения, если она была указана.
- printStackTrace(): Выводит стек вызовов, который привел к исключению.
- getStackTrace(): Возвращает массив элементов StackTraceElement, представляющих стек вызовов.
- toString(): Возвращает строковое представление исключения, включая его класс и сообщение.


try {
// код, который может вызвать исключение
} catch (Exception e) {
System.out.println(e.getMessage()); // вывод сообщения об ошибке
e.printStackTrace(); // вывод стека вызовов
}


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

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
Метод объявляется с указанием модификатора доступа, возвращаемого типа, имени метода и списка параметров в круглых скобках. Если метод не возвращает значение, используется ключевое слово void.

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


ClassName obj = new ClassName();


Если класс имеет параметризованный конструктор, объект создается с передачей аргументов:


ClassName obj = new ClassName(arg1, arg2);


Пример с классом Person:


class Person {
String name;
int age;

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

Person person = new Person("Alice", 30);


Объект создается в куче, а переменная person хранит ссылку на этот объект.

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
Основные методы интерфейса Set включают add(), remove(), contains(), size() и isEmpty(). Эти методы позволяют добавлять элементы, удалять их, проверять наличие элемента, получать размер набора и проверять его на пустоту.

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


for (int i = 0; i < 5; i++) {
if (i == 2) {
continue; // Пропустить итерацию при i == 2
}
System.out.println(i); // Выведет 0, 1, 3, 4
}


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

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
Метод getMessage() возвращает текстовое сообщение об ошибке, которое обычно содержит краткое описание причины исключения. Метод printStackTrace() выводит полный стек вызовов, включая информацию о том, где именно произошло исключение, что полезно для отладки.

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
Comparable и Comparator используются для сравнения объектов, но имеют разные подходы.

Comparable — это интерфейс, который реализуется самим классом. Он содержит метод compareTo, определяющий естественный порядок сортировки объектов.


class Person implements Comparable<Person> {
private String name;
public int compareTo(Person other) {
return this.name.compareTo(other.name);
}
}


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


Comparator<Person> byName = (p1, p2) -> p1.getName().compareTo(p2.getName());


Comparable задает естественный порядок, а Comparator предоставляет гибкость для множества вариантов сортировки.

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

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

Анонимный класс создает новый класс на лету с полным синтаксисом:


Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("Running");
}
};


Лямбда-выражение предоставляет более компактный синтаксис для реализации функционального интерфейса:


Runnable r = () -> System.out.println("Running");


Лямбда-выражения не создают новый объект класса, что делает их более эффективными по памяти. Они также улучшают читаемость кода, особенно для простых операций. Анонимные классы могут использоваться для более сложных сценариев, где требуется несколько методов или состояние.

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

✈️ Java собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Ключевое слово super используется для обращения к родительскому классу. Оно имеет два основных применения:

1. Вызов конструктора родительского класса:


public class Child extends Parent {
public Child() {
super(); // Вызов конструктора родительского класса
// или super(параметры) для вызова конкретного конструктора
}
}


2. Обращение к методам или полям родительского класса:


public class Child extends Parent {
@Override
public void display() {
super.display(); // Вызов метода родительского класса
System.out.println("Дополнительная логика");
}

public void accessField() {
System.out.println(super.field); // Доступ к полю родительского класса
}
}


super особенно полезен при переопределении методов, когда нужно расширить, а не полностью заменить поведение родительского класса.

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

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