Java библиотека
31.6K subscribers
2.32K photos
77 videos
8 files
2.05K links
Книги, статьи, мемы и многое другое для Java программиста!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrT4A

Мы на бирже: https://telega.in/c/javalib/

Сообщество VK https://vk.com/javatutorial
Download Telegram
Приглашаем на открытый урок «Playwright и его использование для UI автотестирования».

🗓 24 октября в 20:00 МСК

🆓 Бесплатно. Урок в рамках старта курса «Java QA Engineer. Professional»

На вебинаре разберем:


- обзор инструмента playwright
- использование playwright для написания UI атвотестов
- плюсы и минусы playwright и чем он лучше selenium

Спикер Павел Балахонов — Senior QA Automation Engineer.

Все участники вебинара получат специальную цену на обучение!

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

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍42🔥2
🖥 Вопрос с собеседования: Опишите жизненный цикл Spring Bean

Beans – центральный объект заботы Spring Framework. За кулисами фреймворка с ними происходит множество процессов. Во многие из них можно вмешаться, добавив собственную логику в разные этапы жизненного цикла. Через следующие этапы проходит каждый отдельно взятый бин:

1. Инстанцирование объекта. Техническое начало жизни бина, работа конструктора его класса;

2. Установка свойств из конфигурации бина, внедрение зависимостей;

3. Нотификация aware-интерфейсов. BeanNameAware, BeanFactoryAware и другие. Мы уже писали о таких интерфейсах ранее. Технически, выполняется системными подтипами BeanPostProcessor, и совпадает с шагом 4;

4. Пре-инициализация – метод postProcessBeforeInitialization() интерфейса BeanPostProcessor;

5. Инициализация. Разные способы применяются в таком порядке:
• Метод бина с аннотацией
@PostConstruct из стандарта JSR-250 (рекомендуемый способ);
• Метод afterPropertiesSet() бина под интерфейсом InitializingBean;
• Init-метод. Для отдельного бина его имя устанавливается в параметре определения initMethod. В xml-конфигурации можно установить для всех бинов сразу, с помощью default-init-method;

6. Пост-инициализация – метод postProcessAfterInitialization() интерфейса BeanPostProcessor.
Когда IoC-контейнер завершает свою работу, мы можем кастомизировать этап штатного уничтожения бина. Как со всеми способами финализации в Java, при жестком выключении (kill -9) гарантии вызова этого этапа нет. Три альтернативных способа «деинициализации» вызываются в том же порядке, что симметричные им методы инициализации:

1. Метод с аннотацией
@PreDestroy;
2. Метод с именем, которое указано в свойстве destroyMethod определния бина (или в глобальном default-destroy-method);
3. Метод destroy() интерфейса DisposableBean.

Не следует путать жизненный цикл отдельного бина с жизненным циклом контекста и этапами подготовки фабрик бинов. О них мы поговорим в будущих публикациях.


@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥108😁1
🦾 Ты крутой джавист? Всегда есть куда расти.

Приходи повышать грейд на хардовый курс «Разработчик на Spring Framework» от OTUS.

👩‍💻 Авторская программа, с ней ты освоишь владение фреймворками Spring и технологиями вспомогательных проектов (Spring MVC, Spring Security, Spring Boot, Spring Reactive Stack, Spring 5). Получишь умение быстро проходить путь от идеи до production-grade.

🗓 6 ноября в 20:00 мск., пройдет бесплатный открытый урок курса, тема «Spring - разбор (не)стандартных вопросов интервью»

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

Будет интересно!

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64🔥2😁1
CyclicBarrier

CyclicBarrier (циклический барьер) — это один из механизмов синхронизации в языке программирования Java, предоставляемый пакетом java.util.concurrent. Он позволяет группе потоков синхронизироваться на определенной точке выполнения, после чего они могут продолжить выполнение параллельно.

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


@javalib #java
👍95🔥5
Что такое Record?

Record — это специальный тип данных, введенный в Java 14 (и стабилизированный в Java 16), который значительно упрощает создание неизменяемых объектов. Который избавляет от необходимости вручную прописывать всю «рутинную» работу по созданию классов с полями, конструктором, геттерами, equals(), hashCode() и toString().

Пример использования Record:

public record Person(String name, int age) {}


Этот код автоматически создаст:


▪️ Конструктор Person(String name, int age)
▪️ Методы доступа name() и age()
▪️ Методы equals(), hashCode() и toString()

Допустим, нужно создать класс для хранения информации о сотруднике:

public class Employee {
private final String name;
private final String position;
private final int salary;

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

public String getName() {
return name;
}

public String getPosition() {
return position;
}

public int getSalary() {
return salary;
}

@Override
public boolean equals(Object o) { ... }

@Override
public int hashCode() { ... }

@Override
public String toString() { ... }
}


Все это можно заменить одной строкой с использованием Record:

public record Employee(String name, String position, int salary) {}


Варианты использования:

1️⃣ Неизменяемые объекты: Если нужно создать неизменяемый объект, который будет безопасен для многопоточного использования и не будет изменяться после создания.
2️⃣ Data Transfer Objects (DTO): Record хорошо подходит для классов, которые используются для передачи данных между компонентами системы.
3️⃣ Модели для API: Используйте Record для создания простых и неизменяемых моделей в REST API, что повышает предсказуемость и упрощает поддержку.

⚠️ Важно:

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

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28👍144
⁉️Хотите повысить свою квалификацию в Java-разработке?

👩‍💻 Инвестируйте в успех своей карьеры прямо сейчас! На курсе «Java Developer. Professional» вы получите:

✔️ знание актуального стека технологий;
✔️ 96 часов практической работы с детальным разбором технологий изнутри;
✔️ понимание основ функционирования JVM (сборка мусора, byteCode);
✔️ освоение приемов применения многопоточности;
✔️ практику решения сложных задач с подробным код-ревью от экспертных Java-разработчиков;
✔️ расширение возможностей использования языка Java;
- умение использовать современные фреймворки: Spring WebFlux, Kafka, реактивный Postgres, Kubernetes.

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

Готовы прокачать свою востребованность?

➡️ Пройдите короткий тест прямо сейчас, чтобы получить специальную цену на обучение: https://vk.cc/cD6yPp

🎁 А еще приятный бонус: до конца октября действует скидка 10% на обучение.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43🔥2😁1
Как разделить строку на части?

В Java можно разделить строку на части с помощью метода split() класса String. Метод split() разбивает исходную строку на массив строк, используя заданный разделитель.

В этом примере исходная строка «Это пример строки для разделения» разбивается на части с помощью пробела в качестве разделителя. Однако, если у вас есть другой разделитель (например, запятая или точка с запятой), просто замените значение переменной delimiter на соответствующий разделитель в вашем случае.


@javalib #java
👍13🔥96😁31
Хотите узнать, как использовать Patroni для управления высокодоступными кластерами PostgreSQL?

Ждем вас на открытом вебинаре 24 октября в 20:00 мск, где мы разберем:

- что такое Patroni и как он помогает обеспечить высокую доступность для PostgreSQL;
- основные компоненты и архитектуру Patroni;
- настройку и конфигурацию Patroni для работы с PostgreSQL;
- примеры использования Patroni для управления кластером PostgreSQL;
- практические советы по оптимизации и мониторингу работы кластера.

👨‍💻🛠👨🏻‍💻 Урок для DevOps-инженеров, системных администраторов, backend-разработчиков и тимлидов, стремящихся обеспечить высокую доступность PostgreSQL.

Спикер Андрей Поляков — старший разработчик в Unlimint.

Встречаемся в преддверии старта курса «Highload Architect». Все участники вебинара получат специальную цену на обучение! Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cD6Wej

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
4👍2🔥2
🕯 Паттерн Command (Команда)

Command — это поведенческий паттерн, который превращает запросы в объекты, позволяя параметризировать методы другими запросами, ставить запросы в очередь или логировать их.

Использование:

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

Преимущества:


1️⃣ Инкапсуляция операций в отдельные объекты упрощает расширение системы. Это позволяет легко добавлять новые команды, не изменяя существующий код.
2️⃣ Command предоставляет гибкость в управлении действиями: их можно откладывать, отменять или хранить для последующего выполнения, что делает его полезным в сценариях с очередями задач или транзакциями.
3️⃣ Команды можно комбинировать, создавая макрокоманды для выполнения последовательностей операций, что упрощает выполнение сложных сценариев.
4️⃣ Реализует принцип открытости-закрытости: можно добавлять новые команды без изменения существующего кода.

Недостатки:

1️⃣ Необходимость хранения истории команд для их отмены может потребовать значительных ресурсов, что делает паттерн менее эффективным в системах с ограниченной памятью.
2️⃣ Добавление новых команд требует создания новых классов, что увеличивает объем работы и поддерживает сложность системы.

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍177🔥5😁2
Конвертируем массив в список

Arrays.asList() — это статический метод класса Arrays, который позволяет конвертировать обычный массив в список List.

— Принимает массив в качестве аргумента и возвращает объект типа List с элементами этого массива.

— Возвращаемый список имеет фиксированный размер, равный длине исходного массива. Добавлять/удалять элементы в него нельзя.

— Изменения в возвращаемом списке будут вноситься в исходный массив, т. к. список работает как «представление» массива. Метод работает для массивов примитивных и ссылочных типов.

Arrays.asList хорош для чтения элементов массива, но не для записи из-за неизменяемого размера.


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

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

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

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

🎁 А еще приятный бонус: до конца октября действует скидка 10% на обучение.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43🔥2
ℹ️ Метод-референсы

В Java 8 появился новый способ улучшить читаемость кода — ссылки на методы. Это позволяет ссылаться на существующие методы без их вызова, делая код более кратким и понятным.

🔍 Типы метод-референсов:

1️⃣ Статические методы: Позволяют ссылаться на статические методы класса.
Пример: Integer::parseInt

2️⃣ Методы экземпляра: Ссылки на методы конкретного объекта.
Пример: myObject::toString

3️⃣ Методы любого объекта типа: Для методов любого экземпляра заданного класса.
Пример: String::toUpperCase

4️⃣ Конструкторы: Ссылки на конструкторы для создания новых объектов.
Пример: ArrayList::new

⚡️ Пример использования:

Вместо стандартной лямбды:

list.forEach(item -> System.out.println(item));


Можно использовать ссылку на метод:

list.forEach(System.out::println);


А Вы используете ссылки на методы в своих проектах?👇

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
17👍9🔥4
Готовитесь к поступлению в универ? Олимпиады помогут попасть в вуз мечты!

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

Многие ведущие вузы проводят свои олимпиады. Если вы хотите учиться на IT-специальности, можно обратить внимание на профиль «Промышленное программирование» в «Высшей пробе». Задания составляла команда Яндекса, а потому они максимально приближены к тому, что делают реальные программисты. Чем поможет эта олимпиада? Если вы станете призёром или победителем, то получите преимущество при поступлении в лучшие университеты страны! 🎓🚀

Принять участие может любой учащийся 9–11-х классов! Базовых знаний информатики будет достаточно. Отборочный этап пройдёт онлайн, а тех, кто успешно справится с первой частью, пригласят на очный заключительный этап.

Регистрируйтесь на «Высшую пробу» до 14:00 мск 5 ноября — повысьте свои шансы на поступление в вуз мечты!
4👍2🔥2
Java. Рекурсия и цикл.

В видео рассматривается рекурсия как аналог цикла. Показано, как можно использовать хвостовую рекурсию в функциональных языках программирования.

📺🗣СМОТРЕТЬ RUTUBE

🌐🗣СМОТРЕТЬ VKVIDEO
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥53👍3
Что такое REST?

REST (Representational State Transfer) — это архитектурный стиль предоставляющий стандарты для взаимодействия в распределённых системах. Он базируется на простоте, понятности и использует стандартные HTTP методы для взаимодействия между клиентом и сервером. Рой Филдинг впервые представил его в 2000 году в своей знаменитой диссертации. REST очень популярен, так как его легко реализовать, поддерживать и масштабировать.

❗️ Основные принципы REST

🔵 Единый интерфейс: каждый метод должен чётко выполнять свою задачу — например, GET для чтения, POST для создания.
🔵 Без сохранения состояния (stateless): каждый запрос от клиента к серверу должен содержать всю информацию, необходимую для понимания запроса, и не должен использовать какой-либо сохраненный контекст на сервере.
🔵 Архитектура клиент-сервер: чёткое разделение интерфейсов, сервер отвечает за обработку данных, клиент — за их представление.
🔵 Кэширование: сервер имеет право повторно использовать данные ответа позднее для эквивалентных запросов и в течение указанного периода.
🔵 Слои: архитектура может состоять из нескольких слоёв, где каждый слой имеет своё предназначение и не зависит от других.
🔵 Код по запросу (опционально): сервер может отправлять исполняемый код клиенту для улучшения его функциональности (например, скрипты).

⚙️ Основные HTTP-методы

▪️ GET — используется для получения данных. Например, запрос всех пользователей:
GET /users

▪️ POST — создаёт новый ресурс. Например, добавление нового пользователя:
POST /users
{
"name": "John",
"age": 30
}

▪️ PUT — обновляет ресурс. Например, обновление информации о пользователе:
PUT /users/1
{
"name": "John Doe",
"age": 31
}

▪️ PATCH — частично обновляет ресурс. Например, изменение email пользователя:
PATCH /users/1
{
"email": "john.new@example.com"
}

▪️ DELETE — удаляет ресурс. Например, удаление пользователя:
DELETE /users/1


@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥64
StringBuffer

StringBuffer — это класс, предназначенный для работы со строками. Он позволяет создавать модифицируемые (изменяемые) строки.

В отличие от класса String, объекты StringBuffer можно изменять после их создания, используя различные методы, такие как append(), insert(), delete().
Также StringBuffer эффективнее String при частых изменениях строки, так как не создает новый объект при каждом изменении.

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

Методы StringBuffer не синхронизированы, поэтому для многопоточного доступа нужно вручную синхронизировать доступ с помощью synchronized блока.


@javalib #java
👍106🔥4😁1🍾1
🕯 Паттерн Decorator (Декоратор)

Decorator — это структурный паттерн, который позволяет динамически добавлять объектам новые обязанности, оборачивая их в "декораторы". Это полезно для расширения функциональности без изменения существующего кода.

Использование:

🔹 Для динамического добавления поведения объектам без изменения их кода.
🔹 Для разделения функциональности на отдельные классы, чтобы избежать создания монолитных классов с множеством обязанностей.
🔹 Когда нужно добавлять новые функции не только для одного объекта, но и для всех его потомков.

Преимущества:

1️⃣ Паттерн позволяет гибко расширять поведение объектов на лету, не изменяя исходный код класса.
2️⃣ Устраняет необходимость создавать громоздкие подклассы с множеством вариаций, что уменьшает сложность системы.
3️⃣ Позволяет комбинировать несколько декораторов, чтобы получить более сложные поведения, сохраняя при этом структуру системы простой и модульной.
4️⃣ Реализует принцип единственной ответственности: каждая новая функциональность инкапсулируется в отдельный класс-декоратор.

Недостатки:

1️⃣ Усложнение отладки программы, так как наличие множества обёрток может затруднять понимание того, где и как обрабатываются запросы.
2️⃣ Создание большого числа мелких объектов-декораторов, что может увеличить потребление памяти и усложнить структуру системы.

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥54
Запуск Java SpringBoot + MySQL в Docker | Dockerfile + Docker compose

В этом видео я покажу, как запустить Spring Boot приложение с базой данных MySQL в Docker. Мы будем использовать Dockerfile для сборки приложения и Docker Compose для управления контейнерами. Это пошаговое руководство поможет вам быстро настроить среду разработки и развернуть приложение локально.

📺🗣СМОТРЕТЬ RUTUBE

🌐🗣СМОТРЕТЬ VKVIDEO
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍6🔥4
Какие известные фестивали проходят в октябре?

Конечно же OTUS FEST!

Присоединяйтесь к трёхдневному IT-фестивалю.

Вас ждут 9 спикеров, мастер-классы, полезные знакомства и разбор интересных случаев из практики. Мы обсудим темы, которые волнуют IT-индустрию, поделимся технологическими хитростями, ответим на ваши вопросы.

Вы узнаете:
- На что обращать внимание при выборе фреймворков?
- С чего начать импортозамещение в ИБ?
- Как подходить к описанию архитектуры на разных уровнях?
- Как разработать стратегию тестирования, которая действительно работает?
- Чего ждать от революции в большой языковой модели?
- Чем «импортозаместить» Nginx?
- Куда движется российский геймдев?
- Какие важные тренды появились в HR за последние годы?
- Что делать аналитикам, чтобы их не заменил ИИ?

Ждём всех, кто работает с информационными технологиями.
Будет круто.

29, 30, 31 октября: можете выбрать любой удобный день или все три сразу.

Участие бесплатное

Записаться на OTUS FEST - https://otus.pw/huIB/?erid=LjN8KMTNf

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
👍43🔥2