bookjava | Unsorted

Telegram-канал bookjava - Библиотека Java разработчика

10986

📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

Subscribe to a channel

Библиотека Java разработчика

Совет по Java 💡

Чтобы сделать большие и сложные цепочки компараторов более читаемыми, мне нравится присваивать компараторы переменным, имена которых начинаются с "by". Таким образом, вызов sorted() становится меньше и читается почти как естественный язык. Кроме того, вы можете использовать статический импорт.

👉@BookJava

Читать полностью…

Библиотека Java разработчика

👩‍💻 Пройди тест по Java

👩‍💻 Ответишь — пройдешь на продвинутый курс "Разработчик на Spring Framework" от OTUS по специальной цене.

За 5 месяцев обучения вы освоите современные возможности Spring, научитесь быстро проходить путь от идеи до production-grade, создавать Web-приложения на микросервисной архитектуре и решать высокоуровневые задачи по разработке.

👉 ПРОЙТИ ТЕСТ: https://vk.cc/cHFsiQ

🎫 Начни обучение со скидкой, подробности у менеджеров.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Библиотека Java разработчика

👩‍💻 Хотите, чтобы ваши приложения на Java выдерживали любую нагрузку?

Executors — это не просто инструмент, а секретная «суперсила» JDK для управления потоками. Разберем, как грамотно настраивать пулы потоков и использовать их в реальных проектах.

🗓 На открытом уроке 27 января в 20:00 мск мы покажем, как сделать ваши сервисы быстрее и надежнее, даже если нагрузки растут. Участники получат скидку на большое обучение «Java Developer. Professional».

🎙 Спикер Сергей Петрелевич — опытный разработчик на Java и Kotlin.

➡️ Успейте зарегистрироваться и узнайте, как улучшить свои навыки в многопоточности с помощью Executors: https://vk.cc/cHzkM5

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Библиотека Java разработчика

💪 Открытый урок «Альтернативные фреймворки Spring Framework» 💪

🗓 Дата: 27 января в 20:00 мск.

На занятии мы разберем, почему Spring столь популярен, почему появились альтернативные решения, и познакомимся с такими фреймворками, как Quarkus, Micronaut и Helidon.

Программа урока:
✔️ Почему Spring Framework занимает лидирующие позиции в разработке.
✔️ Причины появления альтернативных фреймворков.
✔️Обзор Quarkus: основные особенности и возможности.
✔️Обзор Micronaut: ключевые преимущества и использование.
✔️ Обзор Helidon: применение в современных проектах.

🔗 Регистрация на вебинар: https://vk.cc/cHw0MM

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Библиотека Java разработчика

Подборка Telegram каналов для программистов

Системное администрирование 📌
/channel/sysadmin_girl Девочка Сисадмин
/channel/srv_admin_linux Админские угодья
/channel/linux_srv Типичный Сисадмин

/channel/linux_odmin Linux: Системный администратор
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux

1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С

Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus

Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах

GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
/channel/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin

Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
/channel/game_devv Все о разработке игр

Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов

БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning

Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста

QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика

Шутки программистов 📌
/channel/itumor Шутки программистов

Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"

Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров

Английский 📌
/channel/UchuEnglish Английский с нуля

Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике

Excel лайфхак📌
/channel/Excel_lifehack

/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)

Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT

Читать полностью…

Библиотека Java разработчика

👩‍💻 Курс для Java-разработчиков, которые хотят профессионального роста.

Пройди тест по Java и проверь свои знания, готов ли ты к обучению на курсе.

Ответишь — пройдешь на продвинутый курс "Java Developer. Professional" от OTUS по специальной цене + получишь доступ к записям открытых уроков курса курса

➡️ ПРОЙТИ ТЕСТ: https://vk.cc/cHnOVz

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Библиотека Java разработчика

Офер в Яндекс для опытных бэкендеров за два дня

15–16 февраля приглашаем бэкендеров с опытом работы от пяти лет получить офер в Яндекс через multitrack за 2 дня. Достаточно пройти несколько технических секции 15 февраля, чтобы уже 16-го получить офер и выбрать три команды, к которым вам было бы интересно присоединиться.

Как правило, за несколько собеседований сложно понять, подходит ли вам команда и наоборот. Multitrack позволит вам поработать в трёх разных командах Яндекса и выбрать подходящую. Вы сможете погрузиться в рабочие процессы, познакомиться с будущими коллегами и понять, с какими задачами и технологиями хотите работать.

Узнать подробности и зарегистрироваться.

Читать полностью…

Библиотека Java разработчика

👩‍💻 «OpenAPI + Spring».

Приглашаем на открытый урок, где мы разберем:

✔️ Что такое OpenAPI и для чего она нужна.;
✔️ Генерация спецификаций;
✔️Интеграция OpenAPI в Spring-приложения;
✔️Советы по масштабируемости и поддержке.

🗓
23 января в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework»

🔗 Ссылка на регистрацию : https://vk.cc/cHlYk4

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Библиотека Java разработчика

Использование 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

Читать полностью…

Библиотека Java разработчика

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


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


👉@BookJava

Читать полностью…

Библиотека Java разработчика

Использование лямбда-выражений и 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

Читать полностью…

Библиотека Java разработчика

Совет SpringBoot

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

👉@BookJava

Читать полностью…

Библиотека Java разработчика

📢Собеседование по Spring? Будьте на шаг впереди интервьюера!

Узнайте, как отвечать на самые хитрые вопросы по Spring Framework — от базовых до неожиданных. Всё, что нужно, чтобы уверенно пройти интервью.

📚Прокачайте свои знания, научитесь формулировать ответы, разберите типичные и нетипичные вопросы вместе с экспертом.

Регистрируйтесь на открытый вебинар 15 января в 20:00 мск! Участники получат скидку на большое обучение «Разработчик на Spring Framework».

🗓Регистрация открыта: https://vk.cc/cH3S1R

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Библиотека Java разработчика

Использование Optional для избежания NullPointerException:
Optional — это контейнер, который может содержать или не содержать ненулевое значение.


Optional<String> optional = Optional.ofNullable(getValue());
optional.ifPresentOrElse(
value -> System.out.println("Value is present: " + value),
() -> System.out.println("Value is absent")
);


👉@BookJava

Читать полностью…

Библиотека Java разработчика

👩‍💻 Обучение для тех, кто хочет освоить Java на профессиональном уровне — JVM с профилированием и оптимизацией приложений в облаках.

Пройди тест по Java и проверь свои знания, готов ли ты к обучению на курсе.

Ответишь — пройдешь на продвинутый курс "Java Developer. Advanced" от OTUS по специальной цене.

👉 ПРОЙТИ ТЕСТ: https://vk.cc/cGZV1O

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Библиотека Java разработчика

Совет по Spring Boot💡

Когда вам нужно настроить bean, предоставляемый Spring Boot, проверьте наличие интерфейсов *Customizer - велика вероятность, что вы сможете настроить bean, не отказываясь от автоконфигурации.

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Почему обработка отсортированного массива быстрее, чем неотсортированного? 🚀

Вы когда-нибудь задумывались, почему работа с отсортированными данными быстрее? Разберёмся на примере Java (и программирования в целом). 🧑‍💻



🔮 1. Предсказание ветвлений (Branch Prediction)
Современные процессоры используют технику под названием предсказание ветвлений, чтобы угадать результат условных операторов (например, if). Если предсказание верное, процессор выполняет инструкции быстро. Но если предсказание ошибочное, процессор вынужден откатить выполнение и начать заново, что замедляет работу.

- Отсортированные массивы: В отсортированном массиве данные следуют предсказуемым шаблонам. Например, если вы проверяете условие if (array[i] > threshold), результаты будут более последовательными (например, все true после определённого момента). Это помогает предсказателю ветвлений угадывать правильно, уменьшая простои.

- Неотсортированные массивы: В неотсортированном массиве результаты условных проверок более случайны. Это затрудняет работу предсказателя, увеличивая количество ошибок и замедляя выполнение.



🧠 2. Эффективность кэша
Кэш процессора — это быстрая память, которая хранит недавно использованные данные. Доступ к данным из кэша намного быстрее, чем из основной памяти.

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

- Неотсортированные массивы: В неотсортированном массиве доступ к данным менее предсказуем, что приводит к большему количеству промахов кэша и замедлению работы.



🛠 3. Алгоритмические оптимизации
Некоторые алгоритмы специально разработаны для работы с отсортированными данными. Например:
- Бинарный поиск: Работает только с отсортированными массивами и имеет сложность O(log n), что намного быстрее линейного поиска (**O(n)**) в неотсортированном массиве.
- Слияние массивов: Объединение двух отсортированных массивов происходит эффективнее, чем неотсортированных.



🧪 Пример: Предсказание ветвлений в действии
Рассмотрим пример кода:


int sum = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] >= 128) {
sum += array[i];
}
}


- Если массив отсортирован, условие if будет сначала всегда false, а потом всегда true. Это помогает предсказателю работать эффективно.
- Если массив неотсортирован, условие if будет выполняться хаотично, что приведёт к частым ошибкам предсказания и замедлит программу.


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


🎯 Вывод
Основная причина, по которой обработка отсортированного массива быстрее, — это предсказание ветвлений. Отсортированные данные делают выполнение программы более предсказуемым, уменьшая простои процессора. Также важны эффективность кэша и алгоритмические оптимизации.

👉@BookJava

Читать полностью…

Библиотека Java разработчика

🚀 В Java есть 4 уровня доступа: public, protected, package-private и private.

В Java модификаторы доступа управляют видимостью классов, методов и полей.

1. public:
- Видимость: Доступен из любого другого класса.
- Использование: Когда класс, метод или поле объявлены как public, они доступны из любого класса в любом пакете.
- Пример:


public class MyClass {
public int myField;
public void myMethod() {
// Реализация метода
}
}

Здесь myField и myMethod доступны из любого другого класса.

2. protected:
- Видимость: Доступен внутри того же пакета и для подклассов (даже если они находятся в других пакетах).
- Использование: Полезно, когда нужно разрешить доступ подклассам, но ограничить доступ для несвязанных классов вне пакета.
- Пример:

public class MyClass {
protected int myField;
protected void myMethod() {
// Реализация метода
}
}

Здесь myField и myMethod доступны для любого подкласса MyClass, даже если он находится в другом пакете.

3. package-private (по умолчанию, без модификатора):
- Видимость: Доступен только внутри того же пакета.
- Использование: Если модификатор доступа не указан, класс, метод или поле считаются package-private. Это уровень доступа по умолчанию.
- Пример:

class MyClass {
int myField;
void myMethod() {
// Реализация метода
}
}

Здесь myField и myMethod доступны только для классов внутри того же пакета.

4. private:
- Видимость: Доступен только внутри того же класса.
- Использование: Используется для инкапсуляции внутренних деталей класса, предотвращая доступ извне.
- Пример:

public class MyClass {
private int myField;
private void myMethod() {
// Реализация метода
}
}

Здесь myField и myMethod доступны только внутри MyClass.


📌 Краткая таблица:

| Модификатор доступа | Тот же класс | Тот же пакет | Подклассы | Другие пакеты |
|---------------------|--------------|--------------|-----------|---------------|
| public | Да | Да | Да | Да |
| protected | Да | Да | Да | Нет |
| package-private | Да | Да | Нет | Нет |
| private | Да | Нет | Нет | Нет |


💡Основные моменты:
- Используйте public для API и методов/полей, которые должны быть доступны всем.
- Используйте protected для методов/полей, которые должны быть доступны подклассам, но не всем остальным.
- Используйте package-private для внутренней реализации, которая не должна быть доступна вне пакета.
- Используйте private для инкапсуляции, скрывая детали реализации внутри класса.

👉@BookJava

Читать полностью…

Библиотека Java разработчика

🚀 В чем разница между 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

Читать полностью…

Библиотека Java разработчика

Вопросы-ответы собеседования

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

источник

👉@BookJava

Читать полностью…

Библиотека Java разработчика

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

Читать полностью…

Библиотека Java разработчика

Для чего нужно ключевое слово 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

Читать полностью…

Библиотека Java разработчика

🚀 Spring Boot с DevTools для Live Reload🚀

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

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

👉@BookJava

Читать полностью…

Библиотека Java разработчика

👩‍💻 Как сделать Java-приложения быстрее и эффективнее?

Асинхронное программирование — must-have для современных приложений. Хотите узнать, как использовать NIO2 для максимальной производительности?

🗓 20 января в 20:00 мск — откроем двери в мир Java NIO2! Разберём основы, научим писать асинхронный код и раскроем секреты пропускной способности приложений.

Успейте записаться, чтобы не упустить возможность освоить продвинутые инструменты Java.
А еще участники вебинара получат скидку на обучение на курсе «Java Developer. Advanced».

➡️ Регистрация на вебинар: https://vk.cc/cHhlu7

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Библиотека Java разработчика

Использование метода 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

Читать полностью…

Библиотека Java разработчика

Приглашаем вас на открытый вебинар: «Реализация простого HTTP-сервера на Java Core»

⏰Дата: 16 января в 20:00 мск
Спикер: Александр Фисунов

🧩Программа урока:
- Введение в HTTP и его роль в веб-приложениях.
- Создание простого HTTP-сервера с использованием Java Core.
- Разбор ключевых компонентов стандартной Java библиотеки для работы с HTTP.

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

🔥В результате урока вы:
- Узнаете, как использовать базовые возможности Java для создания HTTP-сервера.
- Поймете, как работают application server'ы и контейнеры сервлетов.
- Сможете применить полученные знания для работы с Java веб-приложениями.

Участники всех открытых уроков получат скидку🎁 на большое обучение

👉Регистрируйтесь на открытый вебинар по ссылке: https://vk.cc/cH5vrV

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Библиотека Java разработчика

Совет

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

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Извлечение структурированных данных из изображений с использованием AI в Java

По мере того, как модели ИИ становятся всё лучше в обработке мультимодального ввода, включая изображения, перед нами открываются новые возможности для создания бизнес-приложений. В этом посте я рассмотрю, как с помощью Open AI и Spring AI извлечь информацию из изображения, которую можно использовать в нашем приложении.

В посте будут представлены только ключевые фрагменты кода. Ссылка на полный исходный код в моём репозитории GitHub.

https://vaadin.com/blog/extracting-structured-data-from-images-using-ai-in-java

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Использование var для локального выведения типа переменной (Java 10+):
С помощью var можно сократить шаблонный код, если тип переменной может быть выведен компилятором.


var list = new ArrayList<String>();
list.add("Hello");
list.add("World");
for (var item : list) {
System.out.println(item);
}


👉@BookJava

Читать полностью…

Библиотека Java разработчика

Что такое «ссылка на метод»?

Если существующий в классе метод уже делает все, что необходимо, то можно воспользоваться механизмом method reference (ссылка на метод) для непосредственной передачи этого метода. Такая ссылка передается в виде:

⚫️имя_класса::имя_статического_метода для статического метода;
⚫️объект_класса::имя_метода для метода экземпляра;
⚫️название_класса::new для конструктора.
Результат будет в точности таким же, как в случае определения лямбда-выражения, которое вызывает этот метод.


private interface Measurable {
public int length(String string);
}

public static void main(String[] args) {
Measurable a = String::length;
System.out.println(a.length("abc"));
}


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


👉@BookJava

Читать полностью…
Subscribe to a channel