— Лямбда-выражения имеют лаконичный синтаксис по сравнению с анонимными классами. Лямбды проще читать и писать, так как они не требуют явного объявления метода, тогда как анонимные классы содержат больше «лишнего» кода.
— Лямбды используются, когда интерфейс имеет один абстрактный метод (функциональные интерфейсы), тогда как анонимные классы могут реализовать несколько методов и применяться для интерфейсов с несколькими методами.
— Лямбды могут быть более эффективными, так как они компилируются в байт-код, который может быть оптимизирован. Анонимные классы обычно компилируются как отдельные классы, что может требовать больше ресурсов.
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤11❤🔥3🔥1
Forwarded from Java Guru 🤓
Ответ:
@javatasks #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥7❤5
Proxy — это структурный паттерн, который предоставляет объект-заместитель для управления доступом к другому объекту, обеспечивая контроль над его использованием.
Использование:
🔹 Когда необходимо контролировать доступ к ресурсоемким объектам или операциям.
🔹 Для добавления дополнительной функциональности без изменения исходного объекта.
Преимущества:
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25❤6🔥6🎅1
Хотите узнать, как реализовать идеальную хэш-таблицу, которая работает за О(L) время?
Ждем вас на открытом вебинаре 21 октября в 20:00 мск, где мы разберем:
- как создать алгоритм ассоциативного массива на основе идеальной хэш-таблицы;
- как исключить коллизии с помощью двухступенчатой хэш-таблицы;
- как выполнить визуальное тестирование с англо-русским словарем на 2.000 слов.
👨💻🛠👨🏻💻 Урок для Junior-разработчиков на любых языках программирования.
Спикер Евгений Волосатов — программист баз данных и преподаватель с огромным и разнообразным опытом, автор статей и учебных программ по C#, Java, PHP.
Встречаемся в преддверии старта курса «Алгоритмы и структуры данных». Все участники вебинара получат специальную цену на обучение! Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cCUgUw
Ждем вас на открытом вебинаре 21 октября в 20:00 мск, где мы разберем:
- как создать алгоритм ассоциативного массива на основе идеальной хэш-таблицы;
- как исключить коллизии с помощью двухступенчатой хэш-таблицы;
- как выполнить визуальное тестирование с англо-русским словарем на 2.000 слов.
👨💻🛠👨🏻💻 Урок для Junior-разработчиков на любых языках программирования.
Спикер Евгений Волосатов — программист баз данных и преподаватель с огромным и разнообразным опытом, автор статей и учебных программ по C#, Java, PHP.
Встречаемся в преддверии старта курса «Алгоритмы и структуры данных». Все участники вебинара получат специальную цену на обучение! Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cCUgUw
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576👍5❤4🔥2
Исключение в static блоке кода
Если в статическом блоке инициализации возникнет исключение, то это приведет к ошибке при инициализации класса.
Решить эту проблему можно двумя способами:
1. Перехватить исключение с помощью try-catch в этом же статическом блоке.
2. Перехватить исключение в последующем методе, куда оно будет выброшено, если не обрабатывать исключение в статическом блоке.
Как видно из примера, исключение из статического блока перехватывается в нем же блоком try-catch.
После этого класс инициализируется успешно, и его статический метод можно вызвать.
Если не обрабатывать исключение в статическом блоке, то оно будет выброшено дальше и его можно будет поймать в методе main, как показано в примере.
@javalib #java
Если в статическом блоке инициализации возникнет исключение, то это приведет к ошибке при инициализации класса.
Решить эту проблему можно двумя способами:
1. Перехватить исключение с помощью try-catch в этом же статическом блоке.
2. Перехватить исключение в последующем методе, куда оно будет выброшено, если не обрабатывать исключение в статическом блоке.
Как видно из примера, исключение из статического блока перехватывается в нем же блоком try-catch.
После этого класс инициализируется успешно, и его статический метод можно вызвать.
Если не обрабатывать исключение в статическом блоке, то оно будет выброшено дальше и его можно будет поймать в методе main, как показано в примере.
@javalib #java
👍18❤6☃3🔥3
Приглашаем на открытый урок «Playwright и его использование для UI автотестирования».
🗓 24 октября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java QA Engineer. Professional»
На вебинаре разберем:
- обзор инструмента playwright
- использование playwright для написания UI атвотестов
- плюсы и минусы playwright и чем он лучше selenium
Спикер Павел Балахонов — Senior QA Automation Engineer.
Все участники вебинара получат специальную цену на обучение!
🔗 Ссылка на регистрацию: https://vk.cc/cCYSWj
🗓 24 октября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java QA Engineer. Professional»
На вебинаре разберем:
- обзор инструмента playwright
- использование playwright для написания UI атвотестов
- плюсы и минусы playwright и чем он лучше selenium
Спикер Павел Балахонов — Senior QA Automation Engineer.
Все участники вебинара получат специальную цену на обучение!
🔗 Ссылка на регистрацию: https://vk.cc/cCYSWj
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576👍4❤2🔥2
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🔥10❤8😁1
Приходи повышать грейд на хардовый курс «Разработчик на Spring Framework» от OTUS.
🗓 6 ноября в 20:00 мск., пройдет бесплатный открытый урок курса, тема «Spring - разбор (не)стандартных вопросов интервью»
🔗 Ссылка на регистрацию: https://vk.cc/cD2zFL
Будет интересно!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4🔥2😁1
CyclicBarrier
CyclicBarrier (циклический барьер) — это один из механизмов синхронизации в языке программирования Java, предоставляемый пакетом java.util.concurrent. Он позволяет группе потоков синхронизироваться на определенной точке выполнения, после чего они могут продолжить выполнение параллельно.
CyclicBarrier представляет собой барьер, который блокирует выполнение всех потоков до тех пор, пока все потоки не достигнут этой точки. Как только все потоки достигли барьера, он разблокируется, и все потоки выполняют свою работу.
@javalib #java
CyclicBarrier (циклический барьер) — это один из механизмов синхронизации в языке программирования Java, предоставляемый пакетом java.util.concurrent. Он позволяет группе потоков синхронизироваться на определенной точке выполнения, после чего они могут продолжить выполнение параллельно.
CyclicBarrier представляет собой барьер, который блокирует выполнение всех потоков до тех пор, пока все потоки не достигнут этой точки. Как только все потоки достигли барьера, он разблокируется, и все потоки выполняют свою работу.
@javalib #java
👍9❤5🔥5
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) {}Варианты использования:
Record не может наследовать другие классы, что может ограничить его применение в некоторых архитектурах.
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28👍14❤4
- умение использовать современные фреймворки: Spring WebFlux, Kafka, реактивный Postgres, Kubernetes.
Вы получите инструменты и знания, которые помогут вам писать код быстрее и чище. Все практические навыки вы сможете незамедлительно применять в своей работе.
Готовы прокачать свою востребованность?
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3🔥2😁1
Как разделить строку на части?
В Java можно разделить строку на части с помощью метода split() класса String. Метод split() разбивает исходную строку на массив строк, используя заданный разделитель.
В этом примере исходная строка «Это пример строки для разделения» разбивается на части с помощью пробела в качестве разделителя. Однако, если у вас есть другой разделитель (например, запятая или точка с запятой), просто замените значение переменной delimiter на соответствующий разделитель в вашем случае.
@javalib #java
В Java можно разделить строку на части с помощью метода split() класса String. Метод split() разбивает исходную строку на массив строк, используя заданный разделитель.
В этом примере исходная строка «Это пример строки для разделения» разбивается на части с помощью пробела в качестве разделителя. Однако, если у вас есть другой разделитель (например, запятая или точка с запятой), просто замените значение переменной delimiter на соответствующий разделитель в вашем случае.
@javalib #java
👍13🔥9❤6😁3☃1
Хотите узнать, как использовать Patroni для управления высокодоступными кластерами PostgreSQL?
Ждем вас на открытом вебинаре 24 октября в 20:00 мск, где мы разберем:
- что такое Patroni и как он помогает обеспечить высокую доступность для PostgreSQL;
- основные компоненты и архитектуру Patroni;
- настройку и конфигурацию Patroni для работы с PostgreSQL;
- примеры использования Patroni для управления кластером PostgreSQL;
- практические советы по оптимизации и мониторингу работы кластера.
👨💻🛠👨🏻💻 Урок для DevOps-инженеров, системных администраторов, backend-разработчиков и тимлидов, стремящихся обеспечить высокую доступность PostgreSQL.
Спикер Андрей Поляков — старший разработчик в Unlimint.
Встречаемся в преддверии старта курса «Highload Architect». Все участники вебинара получат специальную цену на обучение! Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cD6Wej
Ждем вас на открытом вебинаре 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 — это поведенческий паттерн, который превращает запросы в объекты, позволяя параметризировать методы другими запросами, ставить запросы в очередь или логировать их.
Использование:
🔹 Для отделения отправителя запроса от объекта, который выполняет действие, чтобы упростить изменение или отмену команд.
🔹 Для реализации очередей команд или их многоуровневой отмены.
🔹 Для логирования команд с возможностью их повторного выполнения.
Преимущества:
Недостатки:
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤7🔥5😁2
Конвертируем массив в список
Arrays.asList() — это статический метод класса Arrays, который позволяет конвертировать обычный массив в список List.
— Принимает массив в качестве аргумента и возвращает объект типа List с элементами этого массива.
— Возвращаемый список имеет фиксированный размер, равный длине исходного массива. Добавлять/удалять элементы в него нельзя.
— Изменения в возвращаемом списке будут вноситься в исходный массив, т. к. список работает как «представление» массива. Метод работает для массивов примитивных и ссылочных типов.
Arrays.asList хорош для чтения элементов массива, но не для записи из-за неизменяемого размера.
@javalib #java
Arrays.asList() — это статический метод класса Arrays, который позволяет конвертировать обычный массив в список List.
— Принимает массив в качестве аргумента и возвращает объект типа List с элементами этого массива.
— Возвращаемый список имеет фиксированный размер, равный длине исходного массива. Добавлять/удалять элементы в него нельзя.
— Изменения в возвращаемом списке будут вноситься в исходный массив, т. к. список работает как «представление» массива. Метод работает для массивов примитивных и ссылочных типов.
Arrays.asList хорош для чтения элементов массива, но не для записи из-за неизменяемого размера.
@javalib #java
👍13🔥4❤3
Пройди тест по Java и проверь свои знания, готов ли ты к обучению на курсе.
Ответишь — пройдешь на продвинутый курс "Java Developer. Advanced" от OTUS по специальной цене.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3🔥2
В Java 8 появился новый способ улучшить читаемость кода — ссылки на методы. Это позволяет ссылаться на существующие методы без их вызова, делая код более кратким и понятным.
🔍 Типы метод-референсов:
Пример: Integer::parseInt
Пример: myObject::toString
Пример: String::toUpperCase
Пример: 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 ноября — повысьте свои шансы на поступление в вуз мечты!
Чтобы оказаться в топовом универе и учиться на интересной программе, надо заранее подготовиться к поступлению. Например, посмотреть, в каких олимпиадах можно принять участие.
Многие ведущие вузы проводят свои олимпиады. Если вы хотите учиться на IT-специальности, можно обратить внимание на профиль «Промышленное программирование» в «Высшей пробе». Задания составляла команда Яндекса, а потому они максимально приближены к тому, что делают реальные программисты. Чем поможет эта олимпиада? Если вы станете призёром или победителем, то получите преимущество при поступлении в лучшие университеты страны! 🎓🚀
Принять участие может любой учащийся 9–11-х классов! Базовых знаний информатики будет достаточно. Отборочный этап пройдёт онлайн, а тех, кто успешно справится с первой частью, пригласят на очный заключительный этап.
Регистрируйтесь на «Высшую пробу» до 14:00 мск 5 ноября — повысьте свои шансы на поступление в вуз мечты!
❤4👍2🔥2
VK Видео
Java. Рекурсия и цикл.
В видео рассматривается рекурсия как аналог цикла. Показано, как можно использовать хвостовую рекурсию в функциональных языках программирования. Канал автора: https://www.youtube.com/watch?v=GaIXsRuloqk
Java. Рекурсия и цикл.
В видео рассматривается рекурсия как аналог цикла. Показано, как можно использовать хвостовую рекурсию в функциональных языках программирования.
📺 🗣 СМОТРЕТЬ RUTUBE
🌐 🗣 СМОТРЕТЬ VKVIDEO
В видео рассматривается рекурсия как аналог цикла. Показано, как можно использовать хвостовую рекурсию в функциональных языках программирования.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤3👍3
REST (Representational State Transfer) — это архитектурный стиль предоставляющий стандарты для взаимодействия в распределённых системах. Он базируется на простоте, понятности и использует стандартные HTTP методы для взаимодействия между клиентом и сервером. Рой Филдинг впервые представил его в 2000 году в своей знаменитой диссертации. REST очень популярен, так как его легко реализовать, поддерживать и масштабировать.
▪️ 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": "[email protected]"
}
▪️ DELETE — удаляет ресурс. Например, удаление пользователя:
DELETE /users/1
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥6❤4
VK Видео
Брокер сообщений RabbitMQ | Java Spring Boot
🛠 Документация RabbitMQ - https://www.rabbitmq.com/tutorials 🛠 Зависимость на RabbitMQ (Spring Boot) - https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp Канал автора: https://www.youtube.com/watch?v=dWieeksMnZY
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4🔥2😁1