default. Это позволяет добавлять новые методы в интерфейсы без нарушения существующего кода, реализующего интерфейс.
interface MyInterface {
// Обычный метод интерфейса
void existingMethod();
// Метод с реализацией по умолчанию
default void newDefaultMethod() {
System.out.println("Default implementation");
}
}
Классы, реализующие интерфейс, могут переопределять методы по умолчанию, если требуется другая реализация.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6✍1
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 задач, распределяя их между потоками.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
i, затем возвращает новое значение.i, затем увеличивает его.Префиксный инкремент полезен, когда требуется сразу использовать увеличенное значение, а постфиксный — когда важно сохранить текущее значение до увеличения.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1
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;
}
}
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4🔥1
Predicate и Function — это функциональные интерфейсы, используемые в лямбда-выражениях и функциональном программировании.
1⃣ Predicate представляет собой условие, возвращающее boolean. Он имеет метод
2⃣ Function преобразует объект одного типа в объект другого. Он имеет метод
✅ Таким образом, Predicate используется для проверки условий, а Function — для преобразования данных.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Java собеседования
test(T t), который принимает объект типа T и возвращает true или false. Пример использования:Predicate<Integer> isEven = x -> x % 2 == 0;
// Проверяет, является ли число четным
apply(T t), который принимает объект типа T и возвращает объект типа R. Пример использования:Function<String, Integer> stringLength = s -> s.length();
// Возвращает длину строки
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3
static. Он не имеет доступа к нестатическим полям и методам внешнего класса без создания его экземпляра. Такой класс может быть использован без создания объекта внешнего класса.
class Outer {
static class StaticInner {
// Статический внутренний класс
}
}
Нестатический внутренний класс имеет доступ ко всем полям и методам внешнего класса. Для его создания требуется экземпляр внешнего класса.
class Outer {
class NonStaticInner {
// Нестатический внутренний класс
}
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤4
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);
}
}
Перечисления помогают избежать ошибок, связанных с использованием "магических" чисел или строк.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2
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();
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2
Ключевые аспекты JMM:
- Happens-before: Отношение, гарантирующее, что одна операция видна другой.
- Volatile: Переменные с этим модификатором всегда читаются из основной памяти, а не из кэша потока.
- Synchronized: Блоки и методы с этим ключевым словом обеспечивают взаимное исключение и видимость изменений.
class Example {
private volatile boolean flag = false;
public void toggleFlag() {
flag = !flag; // Изменение видно всем потокам
}
}
В этом примере
volatile гарантирует, что изменения flag будут видны всем потокам сразу. JMM критична для написания корректных многопоточных приложений.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
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-коде.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
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;
}
}
Конструкторное внедрение рекомендуется как наиболее предпочтительный способ, так как оно обеспечивает неизменяемость и упрощает тестирование.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7