Java | Вопросы собесов

channel icon
Разбираем вопросы с собеседований на Java разработчика. Spring, Hibernate

Сайт: easyoffer.ru/
Реклама: @easyoffer_adv

Условия размещения

Цена за 48 часов в ленте 9850,00
Цена за 1 час закрепления N/A
Взаимопиар Нет
Дополнительные условия рекламы Отсутствуют
+1
10 982
подписчиков
-1
~1.8k
охват 1 публикации
0
~5
постов / день
0,0%
16,5%
ERR % ?

Статистика

Последние публикации

Java | Вопросы собесов
22 декабря 2024 г. 12:10
🤔 На базе чего работают Lambda выражения?На базе чего работают Lambda выражения?

Лямбда-выражения в Java работают на основе нескольких ключевых концепций и механизмов, включая функциональные интерфейсы, инструкции invokedynamic, и использование java.lang.invoke.MethodHandle и java.lang.invoke.LambdaMetafactory.

🚩Основные компоненты

🟠Функциональные интерфейсы
Лямбда-выражения могут использоваться только в контексте функционального интерфейса. Функциональный интерфейс — это интерфейс, который имеет только один абстрактный метод. Примеры функциональных интерфейсов: Runnable, Callable, Comparator, и интерфейсы из пакета java.util.function (Function, Predicate, Consumer, Supplier).

🟠Инструкция `invokedynamic`
invokedynamic — это инструкция байт-кода, введенная в Java 7, которая позволяет динамически связывать вызовы методов во время выполнения. В случае лямбда-выражений, invokedynamic используется для создания инстанции функционального интерфейса.

🟠`java.lang.invoke.MethodHandle` и `java.lang.invoke.LambdaMetafactory`
MethodHandle — это легковесный, типобезопасный способ описания подлежащих вызову методов, конструкторов и полей. LambdaMetafactory — это утилита, используемая JVM для создания реализации функционального интерфейса на основе лямбда-выражения. При выполнении инструкции invokedynamic JVM вызывает LambdaMetafactory для создания экземпляра функционального интерфейса.

🚩Пример работы лямбда-выражения под капотом

1⃣Написание лямбда-выражения
List names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println(name));


2⃣Компиляция лямбда-выражения
Компилятор преобразует лямбда-выражение в байт-код, который использует инструкцию invokedynamic. Инструкция invokedynamic указывает на метод-обработчик (MethodHandle) для метода System.out.println(name).

3⃣Выполнение лямбда-выражения
При выполнении инструкции invokedynamic JVM вызывает LambdaMetafactory для создания инстанции функционального интерфейса Consumer. LambdaMetafactory создает реализацию интерфейса Consumer с методом accept, который вызывает System.out.println(name).

🚩Преобразование лямбда-выражения

// Лямбда-выражение
Consumer consumer = name -> System.out.println(name);

// Компилируется в байт-код, который использует invokedynamic
Consumer consumer = (Consumer) LambdaMetafactory.metafactory(
caller,
"accept",
MethodType.methodType(Consumer.class),
MethodType.methodType(void.class, Object.class),
MethodHandles.lookup().findVirtual(System.out.getClass(), "println", MethodType.methodType(void.class, String.class)),
MethodType.methodType(void.class, String.class)
).getTarget().invoke();


🚩🚩Плюсы

Компактность
Лямбда-выражения позволяют писать более компактный и читаемый код.
Производительность
Использование invokedynamic и LambdaMetafactory позволяет JVM генерировать высокоэффективный байт-код для лямбда-выражений.
Гибкость
Лямбда-выражения могут использоваться в любых контекстах, где ожидается функциональный интерфейс.

Ставь 👍👍 и забирай 📚 📚 Базу знанийБазу знаний
Java | Вопросы собесов
21 декабря 2024 г. 19:10
🤔🤔 В чём разница между final, finally, finalize?

final используется для обозначения констант и для запрета наследования или переопределения методов. finally — это блок, выполняющийся всегда в конце блока try-catch, независимо от исключений. finalize — это метод для очистки ресурсов перед удалением объекта сборщиком мусора.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 📚 Базу знанийБазу знаний
Java | Вопросы собесов
21 декабря 2024 г. 13:17
Премиальное кросс-купе EXEED RX. От 45 000 ₽ в месяцПремиальное кросс-купе EXEED RX. От 45 000 ₽ в месяц

Создавайте будущее в новом году вместе с EXEED RX. Система стабилизации курсовой устойчивости, полный пакет систем безопасности и интеллектуальный полный привод позволят чувствовать себя уверенно в любом путешествии. Автомобили отлично подготовлены к условиям российской зимы: максимальный пакет теплых опций и система EXEED Connect - двигатель и салон будут прогреты к началу поездки, Вы сможете выбрать необходимую температуру салона, прогреть сиденья водителя и пассажиров. Открывайте новые места и путешествуйте с удовольствием! Чудеса обитают там, где в них верят - пусть эта зима станет началом счастливого приключения, а EXEED поможет в этом!

Получить предложениеПолучить предложение

#реклама
exeed.ru

О рекламодателе
Java | Вопросы собесов
21 декабря 2024 г. 12:10
🤔 Используешь в работе Lambda-выражения?Используешь в работе Lambda-выражения?

Да, лямбда-выражения являются важной частью современной разработки на Java, и я активно их использую в своей работе. Лямбда-выражения помогают писать более лаконичный и выразительный код, особенно при работе с коллекциями и потоками данных. Вот несколько распространенных случаев использования лямбда-выражений в Java:

🟠Итерация по коллекциям
Использование лямбда-выражений с методом forEach позволяет компактно и удобно итерировать по элементам коллекций.
List names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println(name));


🟠Фильтрация и преобразование коллекций
С использованием Stream API и лямбда-выражений можно легко фильтровать, сортировать и преобразовывать коллекции.
List names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List filteredNames = names.stream()
.filter(name -> name.startsWith("A"))
.collect(Collectors.toList());

filteredNames.forEach(System.out::println); // Вывод: Alice


🟠Сортировка коллекций
Лямбда-выражения упрощают сортировку коллекций с использованием метода sort.
List names = Arrays.asList("Alice", "Bob", "Charlie");
names.sort((name1, name2) -> name1.compareTo(name2));
names.forEach(System.out::println);


🟠Использование функциональных интерфейсов
Лямбда-выражения широко используются с функциональными интерфейсами, такими как Predicate, Function, Consumer и Supplier.
// Predicate
Predicate startsWithA = s -> s.startsWith("A");
boolean result = startsWithA.test("Alice"); // true

// Function
Function lengthFunction = s -> s.length();
int length = lengthFunction.apply("Hello"); // 5

// Consumer
Consumer printConsumer = s -> System.out.println(s);
printConsumer.accept("Hello, World!"); // Вывод: Hello, World!

// Supplier
Supplier stringSupplier = () -> "Hello, Supplier!";
String suppliedString = stringSupplier.get();
System.out.println(suppliedString); // Вывод: Hello, Supplier!


🟠Параллельные вычисления
Лямбда-выражения с использованием параллельных потоков позволяют легко выполнять параллельные вычисления.
List numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.parallelStream()
.mapToInt(Integer::intValue)
.sum();

System.out.println("Sum: " + sum); // Вывод: Sum: 15


🚩🚩Пример использования в реальном проекте

Предположим, у нас есть список сотрудников, и мы хотим отфильтровать и отсортировать их по имени.
import java.util.*;
import java.util.stream.Collectors;

class Employee {
private String name;
private int age;

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

public String getName() {
return name;
}

public int getAge() {
return age;
}

@Override
public String toString() {
return "Employee{name='" + name + "', age=" + age + '}';
}
}

public class LambdaExample {
public static void main(String[] args) {
List employees = Arrays.asList(
new Employee("Alice", 30),
new Employee("Bob", 25),
new Employee("Charlie", 35),
new Employee("David", 28)
);

// Фильтрация и сортировка сотрудников по имени
List filteredAndSorted = employees.stream()
.filter(e -> e.getAge() > 27)
.sorted(Comparator.comparing(Employee::getName))
.collect(Collectors.toList());

filteredAndSorted.forEach(System.out::println);
}
}


Ставь 👍👍 и забирай 📚 📚 Базу знанийБазу знаний
Java | Вопросы собесов
20 декабря 2024 г. 13:03
Откройте подписку на Кинопоиск и Музыку за 1₽Откройте подписку на Кинопоиск и Музыку за 1₽

Ответьте на 1 вопрос и получите в подарок доступ к Кинопоиску, Музыке и Книгам на 60 дней за 1 рубль.

✨ Сервисы будут доступны не только для Вас, но и для трёх ваших близких

ПопробоватьПопробовать

#реклама 18+
kinopoisk.ru

О рекламодателе
Реклама на Яндексе
Java | Вопросы собесов
20 декабря 2024 г. 12:10
🤔 За счет чего работают Lambda-выражения, что происходит "под капотом"?За счет чего работают Lambda-выражения, что происходит "под капотом"?

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

🚩Как работают лямбда-выражения "под капотом"

Под капотом, лямбда-выражения в Java работают благодаря следующим ключевым концепциям и механизмам:

🟠Функциональные интерфейсы
Лямбда-выражения могут использоваться только в контексте функционального интерфейса, который является интерфейсом с одним абстрактным методом. Примеры функциональных интерфейсов: Runnable, Callable, Comparator, и интерфейсы из пакета java.util.function (Function, Predicate, Consumer, Supplier).

🟠Интерфейс `java.lang.invoke.MethodHandle` и `java.lang.invoke.LambdaMetafactory`
Лямбда-выражения компилируются в байт-код, который использует метод invokedynamic для создания инстанций функциональных интерфейсов. Этот механизм позволяет JVM динамически генерировать реализацию функционального интерфейса, используя метод-обработчик (MethodHandle).

🚩Что происходит при компиляции лямбда-выражения

Когда вы пишете лямбда-выражение, компилятор создает байт-код, который при выполнении использует invokedynamic инструкцию. Это позволяет JVM динамически создать реализацию функционального интерфейса при первом вызове лямбда-выражения.
List names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println(name));


🟠Что происходит под капотом
Компилятор преобразует лямбда-выражение в байт-код, который использует инструкцию invokedynamic. Инструкция invokedynamic указывает на метафабрику (LambdaMetafactory), которая отвечает за создание инстанции функционального интерфейса. Метафабрика создает реализацию функционального интерфейса, используя метод-обработчик (MethodHandle) для метода, определенного в лямбда-выражении.

🟠Преобразование в функциональный интерфейс
Лямбда-выражение name -> System.out.println(name) соответствует методу функционального интерфейса Consumer. В байт-коде создается invokedynamic инструкция, которая ссылается на LambdaMetafactory для создания инстанции Consumer.

Ставь 👍👍 и забирай 📚 📚 Базу знанийБазу знаний
Java | Вопросы собесов
19 декабря 2024 г. 19:10
🤔🤔 В чем идея Stream API?

Stream API — это инструмент для обработки коллекций и массивов с использованием функционального подхода. Он позволяет фильтровать, преобразовывать и агрегировать данные, используя методы, такие как map, filter, reduce. Stream API поддерживает ленивую обработку данных, что улучшает производительность, особенно с большими объёмами данных. Это упрощает написание кода и делает его более выразительным.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 📚 Базу знанийБазу знаний
Java | Вопросы собесов
19 декабря 2024 г. 15:38
Виртуальные сервера от 575 руб./мес. Защита от DDOS!Виртуальные сервера от 575 руб./мес. Защита от DDOS!

Техническая информация:Техническая информация:
- SLA 99.998%
- 9 ЦОД TIER 3
- ISPmanager 6
- Поддержка 24/7
- Windows & Linux
- Бесплатный IPv4
- Неограниченный трафик
- Скорость доступа 1 ГБит/c
- SSD/NVMe/HDD до 5000Gb
- Высокочастотные процессоры от 3.6 Ghz

Наши услуги:Наши услуги:
- Для бизнеса;
- DDoS защита;
- Мониторинг 24/7;
- Готовые образы ОС;
- Облачное Хранилище;
- Корпоративный VPN сервер;
- Комплексное администрирование.

Локации серверов:Локации серверов:
💻 Россия
💻 Нидерланды
💻 США
💻 Молдова

FoxCloud - Надежное решение для вашего бизнеса!FoxCloud - Надежное решение для вашего бизнеса!

Перейти на сайтПерейти на сайт

#реклама 16+
foxcloud.net

О рекламодателе
Java | Вопросы собесов
19 декабря 2024 г. 12:10
🤔 Является ли пустым пул строк при старте jar файла или там есть какие-то значения? Является ли пустым пул строк при старте jar файла или там есть какие-то значения?

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

🚩Что изначально содержится

🟠Предопределенные строковые литералы
JVM и стандартные библиотеки Java используют различные строковые литералы для своей работы. Эти строки добавляются в пул строк при запуске JVM. Примеры таких строк включают имена основных классов и пакетов (например, "java/lang/Object", "java/lang/String").
🟠Строковые литералы, используемые в загруженных классах
Когда классы загружаются JVM, все строковые литералы, используемые в этих классах, добавляются в пул строк. Это включает строки, используемые в JAR файле, а также строки из стандартных библиотек Java, которые загружаются при старте.

🚩Пример строк в пуле при старте

Для демонстрации этого можно написать простой код, который проверяет, присутствуют ли определенные строки в пуле строк при старте программы.
public class StringPoolDemo {
public static void main(String[] args) {
// Проверка стандартных строк, которые могут быть в пуле строк
String str1 = "java";
String str2 = "lang";
String str3 = "Object";

// Вывод строк
System.out.println("str1: " + str1);
System.out.println("str2: " + str2);
System.out.println("str3: " + str3);

// Проверка строк в пуле строк
System.out.println("Is 'java' in pool: " + (str1 == "java"));
System.out.println("Is 'lang' in pool: " + (str2 == "lang"));
System.out.println("Is 'Object' in pool: " + (str3 == "Object"));
}
}


🚩Что происходит при старте JVM

🟠Инициализация JVM
При запуске JVM загружаются системные классы, такие как java.lang.Object, java.lang.String, java.lang.System, и другие. Строковые литералы, используемые в этих классах, добавляются в пул строк.
🟠Загрузка пользовательских классов
Когда JVM загружает пользовательские классы из JAR файла, все строковые литералы в этих классах также добавляются в пул строк.

Ставь 👍👍 и забирай 📚 📚 Базу знанийБазу знаний
Java | Вопросы собесов
18 декабря 2024 г. 19:10
🤔🤔 Почему синглтон называют антипаттерном?

Синглтон нарушает принципы SOLID, создавая скрытую глобальную зависимость. Это усложняет тестирование, расширение кода и может вызывать проблемы в многопоточности. Кроме того, он снижает гибкость архитектуры приложения, что делает его нежелательным для сложных систем.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 📚 Базу знанийБазу знаний
Java | Вопросы собесов
18 декабря 2024 г. 13:01
Квартиры в Краснодаре от 3,3 млн. руб.Квартиры в Краснодаре от 3,3 млн. руб.

Новый жилой район "Первое место" в Краснодаре.

Здесь всё для счастливой жизни на первом месте:
- Две школы
- Шесть детских садов
- Поликлиники
- Собственный фитнес-центр
- Многоуровневый паркинг

Жилой комплекс располагается в новом районе города «Новознаменский», в Карасунском округе Краснодара и имеет удобный выезд на трассу М4 ДОН, Джубгскую трассу в направлении Черного моря и горнолыжных курортов.

Только в декабре скидка 8% при покупке квартиры за собственные средства.

Успейте забрать билет в жизнь, где вы всегда будете на «Первом месте»!

Получить предложениеПолучить предложение

#реклама
promo.tochno-pervoe.ru

О рекламодателе
Java | Вопросы собесов
18 декабря 2024 г. 12:10
🤔 Как изначально создается пул строк?Как изначально создается пул строк?

Пул строк в Java создается и управляется JVM для оптимизации использования памяти и повышения производительности при работе со строками. Пул строк представляет собой специальную область памяти, где хранятся строковые литералы и строки, созданные с помощью метода String.intern().

🚩Инициализация пула строк

🟠Во время загрузки класса
Когда JVM загружает класс, она также загружает все строковые литералы, использованные в этом классе, и добавляет их в пул строк. Каждый раз, когда строковый литерал встречается в коде, JVM проверяет, существует ли он уже в пуле строк. Если да, используется существующая строка; если нет, строка добавляется в пул.
🟠Метод `String.intern()`
Метод String.intern() можно использовать для добавления строки в пул строк вручную. Если строка уже существует в пуле, возвращается ссылка на существующую строку; если нет, строка добавляется в пул и возвращается ссылка на нее.

public class StringPoolExample {
public static void main(String[] args) {
// Строковые литералы автоматически добавляются в пул строк
String str1 = "Hello";
String str2 = "Hello";

// Проверка, что str1 и str2 ссылаются на один и тот же объект
System.out.println(str1 == str2); // true

// Создание новой строки (не литерала)
String str3 = new String("Hello");

// Проверка, что str3 и str1 ссылаются на разные объекты
System.out.println(str1 == str3); // false

// Использование метода intern()
String str4 = str3.intern();

// Проверка, что str4 и str1 теперь ссылаются на один и тот же объект
System.out.println(str1 == str4); // true
}
}


🚩Подробное описание процесса

🟠Загрузка класса и добавление литералов в пул строк
При загрузке класса JVM анализирует все строковые литералы и добавляет их в пул строк, если их там еще нет.
public class Example {
String str = "Hello"; // Литерал добавляется в пул строк при загрузке класса
}


🟠Использование метода `intern()`
Метод intern() позволяет явно добавить строку в пул строк или получить существующую строку из пула. Это полезно, когда строки создаются динамически и нужно обеспечить, чтобы они находились в пуле строк.
String dynamicStr = new String("Dynamic");
String pooledStr = dynamicStr.intern(); // Добавляет строку в пул, если её там еще нет


🚩Внутренние механизмы

🟠Метод `intern()`
Метод intern() проверяет, находится ли строка в пуле строк. Если да, он возвращает ссылку на существующую строку. Если нет, строка добавляется в пул строк, и возвращается ссылка на неё.
String s1 = new String("Java");
String s2 = s1.intern(); // s2 теперь указывает на строку в пуле строк


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

Ставь 👍👍 и забирай 📚 📚 Базу знанийБазу знаний
Java | Вопросы собесов
18 декабря 2024 г. 10:00
А вы знали что?...

🕵️В Windows есть папка, которая собирает на вас компромат!

Посмотрите видео выше — насколько легко узнать всю информацию о вас

Простых способов узнать о вас практически всё — сотни, и если вы хотите соблюдать хотя бы минимум сетевой гигиены — подпишитесь на IT ВЕДОМСТВО

Они рассказывает о признаках майнеров, как удалить трояны и порно-баннеры за 5 минут

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

💻 Подписываемся на IT ВЕДОМСТВОIT ВЕДОМСТВО — выигрываем призы и соблюдаем цифровую гигиену
Java | Вопросы собесов
17 декабря 2024 г. 20:00
🏰 Открытый урок «Знакомство с Resilience4j»Открытый урок «Знакомство с Resilience4j»🏰

🗓 Когда: 19 декабря в 20:00 мск.

👩‍💻 Resilience4j — популярный инструмент для обеспечения стабильности и отказоустойчивости в Java-приложениях. В мире высоких нагрузок и распределенных систем важно познакомиться с этим фреймворком, чтобы улучшить надежность и производительность ваших приложений.

Программа урока:
- Введение в Resilience4.
- Применение Resilience4j для улучшения стабильности.

🔗  Регистрация на вебинар: https://otus.pw/u3GbZ/

#реклама
О рекламодателе
Java | Вопросы собесов
17 декабря 2024 г. 19:10
🤔 Назови сколько существует нормальных форм в SQL?

Существует шесть нормальных форм: 1NF, 2NF, 3NF, BCNF, 4NF и 5NF. Обычно используют до третьей или формы Бойса-Кодда, так как этого достаточно для большинства задач. Более высокие формы применяются редко из-за их сложности и дополнительных ограничений.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 📚 Базу знанийБазу знаний
Java | Вопросы собесов
17 декабря 2024 г. 16:20
Миграция в облако? Это легко!Миграция в облако? Это легко!

Собственная инфраструктура устарела или не справляется с нагрузками? Используйте облачные ресурсы! Эксперты Yandex Cloud помогут перейти в облако быстро, легко и безопасно.

✅ Мы полностью сопровождаем процесс.
✅ От вас — только инженер с доступом к инфраструктуре.
✅ Архитектура под ваши задачи, миграция и поддержка на каждом шагу — всё включено.

⚡Переходите в Yandex Cloud и забудьте о старом железе. А если успеете подать заявку до 31 декабря, мы покроем расходы на инженеров и тестовую инфраструктуру.

Подать заявкуПодать заявку

#реклама 16+
yandex.cloud

О рекламодателе
Реклама на Яндексе
Java | Вопросы собесов
17 декабря 2024 г. 12:10
🤔 Какие минусы есть у пула строк с точки зрения безопасности?Какие минусы есть у пула строк с точки зрения безопасности?

Пул строк (String Pool) в Java представляет собой особую область памяти в методной области (Metaspace начиная с Java 8), где хранятся строковые литералы.

🚩🚩Минусы

Уязвимость к анализу памяти (Memory Analysis)
Поскольку строковые литералы хранятся в пуле строк и не уничтожаются до тех пор, пока JVM работает, злоумышленник, получивший доступ к дампу памяти, может извлечь чувствительные данные, такие как пароли, токены или личные данные, если они были сохранены как строковые литералы.

Уязвимость к атакам по кэшированию (Caching Attacks)
Злоумышленник может попытаться использовать кэширование строк для проведения атак. Например, если однажды созданный строковый литерал остается в пуле строк, его можно найти и использовать повторно, даже если оригинальная строка больше не используется программой.

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

Потенциальная уязвимость к атакам типа "Deduplication"
Если две строки с одинаковым содержимым помещаются в пул строк, они будут указывать на один и тот же объект. Это может позволить злоумышленнику, знающему об этой особенности, попытаться извлечь чувствительные данные путем поиска дубликатов строк.

🚩Пример уязвимости к анализу памяти

public class Example {
public static void main(String[] args) {
String password = "secretPassword123"; // Строка хранится в пуле строк
System.out.println("Password is set.");
}
}


🚩Как уменьшить риски

🟠Избегайте использования строк для хранения чувствительных данных
Вместо строк используйте массивы символов (char[]), так как их содержимое можно обнулить после использования.
char[] password = new char[] {'s', 'e', 'c', 'r', 'e', 't'};
// Очистка массива после использования
java.util.Arrays.fill(password, '\0');


🟠Используйте библиотеки безопасности
Используйте специализированные библиотеки, которые обеспечивают более безопасное управление чувствительными данными, такие как Java Cryptography Architecture (JCA).
🟠Минимизируйте использование строковых литералов для чувствительных данных
Не храните пароли, ключи и другие конфиденциальные данные как строковые литералы.
🟠Шифрование данных
Шифруйте данные перед их хранением или передачей. Даже если данные будут извлечены из памяти, без ключа расшифровки они останутся бесполезными.

Ставь 👍👍 и забирай 📚 📚 Базу знанийБазу знаний
Java | Вопросы собесов
16 декабря 2024 г. 19:10
🤔🤔 Чем singleton отличается от prototype?

В контексте паттернов проектирования:
- **Singleton** гарантирует, что класс имеет только один экземпляр в приложении и предоставляет глобальную точку доступа к этому экземпляру.
- **Prototype** позволяет создавать объекты, клонируя существующий объект, что позволяет избежать затрат на создание объектов стандартным способом (через new), особенно если это сложный процесс создания.?

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 📚 Базу знанийБазу знаний
Java | Вопросы собесов
16 декабря 2024 г. 12:10
🤔 Какие области памяти можете вспомнить кроме стэка и кучи?Какие области памяти можете вспомнить кроме стэка и кучи?

Кроме стека (Stack) и кучи (Heap), в JVM существуют другие области памяти, которые играют важную роль в управлении выполнением программы и ресурсами.

🟠Метаспейс (Metaspace)
Метаспейс используется для хранения метаданных о классах, таких как информация о методах, полях и других элементах классов. Метаспейс заменил область памяти PermGen (Permanent Generation) в Java 8.
Метаспейс динамически увеличивается по мере необходимости, в отличие от PermGen, который имел фиксированный размер.
Память для метаданных классов теперь выделяется из нативной памяти (вне куче).

🟠Методная область (Method Area)
Методная область хранит структуру классов, включая метаданные, полевые данные и данные о методах. Используется JVM для загрузки и хранения информации о классах. Включает информацию о типах, полях, методах и конструкторах.

🟠Регистр счётчика команд (PC Register)
Каждый поток имеет собственный регистр счётчика команд, который указывает на текущую инструкцию, выполняемую потоком. Используется для отслеживания адреса текущей инструкции в программе. Каждому потоку выделяется свой собственный регистр PC.

Ставь 👍👍 и забирай 📚 📚 Базу знанийБазу знаний
Java | Вопросы собесов
15 декабря 2024 г. 19:10
🤔🤔 В чем идея Stream API?

Stream API — это инструмент для обработки коллекций и массивов с использованием функционального подхода. Он позволяет фильтровать, преобразовывать и агрегировать данные, используя методы, такие как map, filter, reduce. Stream API поддерживает ленивую обработку данных, что улучшает производительность, особенно с большими объёмами данных. Это упрощает написание кода и делает его более выразительным.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 📚 Базу знанийБазу знаний