Библиотека Java разработчика
10.5K subscribers
1.17K photos
594 videos
58 files
1.51K links
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate.


По всем вопросам @evgenycarter

РКН clck.ru/3KoGeP
Download Telegram
Совет

По умолчанию при обновлении сущности Hibernate обновляет все ее поля. Вы можете использовать аннотацию @DynamicUpdate на объекте
@Entity и Hibernate будет обновлять только те столбцы, которые изменились.

👉@BookJava
👍283👎1
Совет SpringBoot

Вы можете запустить метод в Spring @Service сразу после запуска приложения, аннотируя его с помощью
@EventListener (ApplicationReadyEvent.class). Метод не может иметь параметров. Иногда я неправильно использую его, чтобы быстро протестировать определенный метод Spring Service.

👉@BookJava
👍10
Использование лямбда-выражений и Streams:
Лямбда-выражения и streams делают код более лаконичным и читаемым.


List<String> names = Arrays.asList("John", "Jane", "Jack", "Doe");
names.stream()
.filter(name -> name.startsWith("J"))
.map(String::toUpperCase)
.forEach(System.out::println);


👉@BookJava
👍83
Использование метода String.join:
Метод String.join можно использовать для объединения строк с заданным разделителем.


List<String> items = Arrays.asList("Apple", "Banana", "Cherry");
String result = String.join(", ", items);
System.out.println(result); // Output: Apple, Banana, Cherry


👉@BookJava
👍9🤓4
Использование StringBuilder для эффективной работы со строками:
StringBuilder используется для операций с изменяемыми строками, что улучшает производительность.


StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
System.out.println(sb.toString()); // Output: Hello World


👉@BookJava
👍4🎉1
Использование Map.computeIfAbsent для упрощённой инициализации Map:
Метод computeIfAbsent помогает инициализировать и вычислять значения, если они отсутствуют.


Map<String, List<String>> map = new HashMap<>();
map.computeIfAbsent("fruits", k -> new ArrayList<>()).add("Apple");
map.computeIfAbsent("fruits", k -> new ArrayList<>()).add("Banana");
System.out.println(map); // Output: {fruits=[Apple, Banana]}


👉@BookJava
👍7🥱5🤝2
🚀 Spring Boot с DevTools для Live Reload🚀

Ускорьте разработку с помощью DevTools! 🔥

https://docs.spring.io/spring-boot/reference/using/devtools.html

👉@BookJava
👍4👎1
Для чего нужно ключевое слово super?

Как и многие другие ключевые слова, super имеет несколько разных значений в зависимости от контекста:

1. Задать нижнюю границу generic-типа: Consumer<? super Number>
2. Обратиться к члену класса-родителя, который перекрыт (shadowed) членами наследника или локальными переменными: int foo = super.foo
3. Вызвать в конструкторе конструктор родителя: SubClass() { super("subclass param"); }
4. В случае неопределенности, уточнить родительский тип

interface A {
default int foo() { return 1; }
}

interface B {
default int foo() { return 2; }
}

class C implements A, B {
@Override
public int foo() {
return B.super.foo() ;
}
}


👉@BookJava
👍4
Media is too big
VIEW IN TELEGRAM
Spring Boot Tutorial | Полный курс [2023]

В этом учебном пособии по Spring Boot рассказывается о том, как начать работу с Spring Boot и Java.

00:00 Intro
01:00 Quick Word
02:12 Spring Boot Overview
03:44 Project Overview
04:28 Spring Initializr
08:05 IntelliJ
10:29 Starting The Server
14:03 Simple API with Spring Boot
18:06 Student Class
23:19 API Layer
26:38 Business Layer
29:08 Dependency Injection
32:47 Properties file
36:15 Creating and Connecting to Database
39:48 JPA and @ Entity
42:35 JPA in Action
45:52 Amigoscode Database Courses
47:35 JPA Repository
52:20 Saving Students
58:49 @ Transient
01:03:01 Post Mapping
01:08:00 Writing Business Logic
01:12:43 Testing Post Request
01:15:35 Deleting Students
01:21:33 Exercise
01:22:53 Solution
01:26:54 Testing
01:29:41 Packaging and Running Application
01:34:52 Next steps

источник

👉@BookJava
6👍1
Вопросы-ответы собеседования

Можно ли создать экземпляр абстрактного класса?
Что такое интерфейс?
Как вызвать нестатический метод в статическом?
Чем отличаются параметры от аргументов в методе?
Что такое конструктор? Как его создать и вызвать?
Что такое параметризованный конструктор?
Что такое конструктор по умолчанию?
Что такое приватный конструктор? Зачем он закрытый?
Что такое статическая переменная? Как работает static поле?
Что такое статический метод? Как вызвать static метод?

источник

👉@BookJava
🔥9
🚀 В чем разница между HashMap и Hashtable в Java?

Если вы работаете с Java, то наверняка сталкивались с HashMap и Hashtable. Оба используются для хранения пар "ключ-значение", но между ними есть важные различия. Давайте разберемся!

1. Синхронизация (Потокобезопасность)
- `Hashtable`:
- Синхронизирован (потокобезопасен). Все его методы синхронизированы, то есть только один поток может работать с ним одновременно.
- Это делает Hashtable безопасным для многопоточных сред, но может снижать производительность в однопоточных сценариях.
- `HashMap`:
- Не синхронизирован (не потокобезопасен). Несколько потоков могут обращаться к нему одновременно, что может привести к проблемам в многопоточных средах.
- Для потокобезопасности можно использовать Collections.synchronizedMap(new HashMap<>()) или ConcurrentHashMap.


2. Null-ключи и Null-значения
- `Hashtable`:
- Не позволяет использовать null в качестве ключа или значения. Попытка добавить null вызовет NullPointerException.
- `HashMap`:
- Разрешает один `null`-ключ и множество `null`-значений.


3. Производительность
- `Hashtable`:
- Медленнее из-за накладных расходов на синхронизацию.
- `HashMap`:
- Быстрее в однопоточных средах, так как не синхронизирован.


4. Наследие
- `Hashtable`:
- Считается устаревшим классом (появился в Java 1.0). Не является частью Java Collections Framework.
- `HashMap`:
- Часть Java Collections Framework (появился в Java 1.2). Более современный и широко используемый.


5. Итерация
- `Hashtable`:
- Использует Enumeration для перебора ключей и значений.
- `HashMap`:
- Использует Iterator, который более гибкий и позволяет удалять элементы во время перебора.


6. Наследование
- `Hashtable`:
- Наследуется от класса Dictionary (абстрактный класс, который сейчас считается устаревшим).
- `HashMap`:
- Наследуется от AbstractMap, который является частью Java Collections Framework.


7. Рекомендации по использованию
- Используйте HashMap, если:
- Работаете в однопоточной среде.
- Нужна высокая производительность.
- Требуется поддержка null-ключей или значений.
- Используйте Hashtable, если:
- Нужна потокобезопасность в многопоточной среде.
- Однако в современной Java ConcurrentHashMap предпочтительнее, так как он обеспечивает лучшую производительность и масштабируемость.


Пример кода

Hashtable:

Hashtable<String, Integer> hashtable = new Hashtable<>();
hashtable.put("one", 1);
hashtable.put("two", 2);
// hashtable.put(null, 3); // Выбросит NullPointerException
System.out.println(hashtable);


HashMap:

HashMap<String, Integer> hashMap = new HashMap<>();
hashMap.put("one", 1);
hashMap.put("two", 2);
hashMap.put(null, 3); // Разрешено
System.out.println(hashMap);


Итоговая таблица

| Особенность | Hashtable | HashMap |
|-------------------------|---------------------------------|-------------------------------|
| Синхронизация | Синхронизирован | Не синхронизирован |
| Null-ключи/значения | Запрещены | Разрешены |
| Производительность | Медленнее | Быстрее |
| Наследие | Устаревший (Java 1.0) | Современный (Java 1.2) |
| Итерация | Enumeration | Iterator |
| Наследование | Наследует Dictionary | Наследует AbstractMap |

💡Совет: В современной разработке на Java HashMap используется чаще. Если нужна потокобезопасность, лучше выбрать ConcurrentHashMap, а не Hashtable.

👉@BookJava
👍11