Класс DateTimeFormatter
Класс DateTimeFormatter используется для форматирования и парсинга объектов даты и времени.
Он позволяет указать нужный формат даты и времени при выводе этих данных в строку или при чтении из строки в объекты LocalDateTime, LocalDate и другие классы API даты и времени.
@javalib #java
Класс DateTimeFormatter используется для форматирования и парсинга объектов даты и времени.
Он позволяет указать нужный формат даты и времени при выводе этих данных в строку или при чтении из строки в объекты LocalDateTime, LocalDate и другие классы API даты и времени.
@javalib #java
❤11👍5🔥4
С Java Flight Recorder – это легко.
Приглашаем вас на открытый урок «Обзор инструмента Java Flight Recorder».
🗓 22 октября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Advanced» от OTUS.
JFR:
- Регистрирует множество событий внутри виртуальной машины Java
- Не ухудшает производительность
- Помогает детально разобраться в причинах сбоев и ошибок
Хотите освоить? - приходите на вебинар!
Спикер – Александр Царёв, техлид в Сбере.
🔗 Ссылка на регистрацию: https://vk.cc/cCIZW4
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3❤2
Метод split
Метод split() используется для разбиения строки на подстроки по заданному разделителю. Он принимает один параметр — регулярное выражение, по которому будет производиться разбиение строки и возвращает массив строк (String[]), содержащий подстроки.
Если в качестве разделителя передать пробел (» «), то строка разбивается по пробелам на отдельные слова. Также можно указать число в качестве второго параметра, это будет лимит количества элементов.
@javalib #java
Метод split() используется для разбиения строки на подстроки по заданному разделителю. Он принимает один параметр — регулярное выражение, по которому будет производиться разбиение строки и возвращает массив строк (String[]), содержащий подстроки.
Если в качестве разделителя передать пробел (» «), то строка разбивается по пробелам на отдельные слова. Также можно указать число в качестве второго параметра, это будет лимит количества элементов.
@javalib #java
🔥13❤5👍3
CyclicBarrier — это синхронизатор в Java, который позволяет нескольким потокам остановиться и дождаться друг друга в определённой точке (барьере) перед продолжением работы. Он создаётся с фиксированным числом потоков, которые должны достичь барьера, прежде чем все они смогут продолжить выполнение.
Как это работает:
Когда использовать:
▪️ Когда нужно, чтобы несколько потоков координировали свои действия и начинали следующую стадию только после того, как все потоки закончат текущую работу.
▪️ Для выполнения задач, которые разбиты на несколько этапов, где каждый этап должен начаться только после завершения предыдущего всеми потоками.
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24❤7🔥5
Yandex Cloud запустил сервис для ускорения разработки продуктов в облаке Yandex Serverless Integrations
Теперь разработчики смогут при минимальном написании кода автоматизировать различные процессы, например обработку онлайн-заказов и мониторинг систем безопасности.
Сделать это можно благодаря инструменту Yandex Workflows — он позволяет описать последовательность операций с помощью декларативного языка YAML. Сервис автоматически запустит эти процессы и проконтролирует их выполнение.
Помимо этого, Yandex Serverless Integrations включает в себя инструменты EventRouter для передачи событий между сервисами и API Gateway для создания шлюзов между внешними и облачными сервисами по спецификации OpenAPI 3.0.
Читайте подробнее в статье
Теперь разработчики смогут при минимальном написании кода автоматизировать различные процессы, например обработку онлайн-заказов и мониторинг систем безопасности.
Сделать это можно благодаря инструменту Yandex Workflows — он позволяет описать последовательность операций с помощью декларативного языка YAML. Сервис автоматически запустит эти процессы и проконтролирует их выполнение.
Помимо этого, Yandex Serverless Integrations включает в себя инструменты EventRouter для передачи событий между сервисами и API Gateway для создания шлюзов между внешними и облачными сервисами по спецификации OpenAPI 3.0.
Читайте подробнее в статье
❤3👍3🔥2
Обучение на курсе «Разработчик на Spring Framework» от OTUS — это практический подход к освоению самого востребованного фреймворка для Java-разработчиков.
Узнайте, как создавать веб-приложения на микросервисной архитектуре, автоматизировать задачи с Spring Boot и реализовывать высокоуровневые решения!
В конце курса у вас будет портфолио из готовых приложений и глубокое понимание работы со Spring. Пройдите вебинар-собеседование, чтобы быть готовым к реальным интервью.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🔥2
— Лямбда-выражения имеют лаконичный синтаксис по сравнению с анонимными классами. Лямбды проще читать и писать, так как они не требуют явного объявления метода, тогда как анонимные классы содержат больше «лишнего» кода.
— Лямбды используются, когда интерфейс имеет один абстрактный метод (функциональные интерфейсы), тогда как анонимные классы могут реализовать несколько методов и применяться для интерфейсов с несколькими методами.
— Лямбды могут быть более эффективными, так как они компилируются в байт-код, который может быть оптимизирован. Анонимные классы обычно компилируются как отдельные классы, что может требовать больше ресурсов.
@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
Будет интересно!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please 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.
Вы получите инструменты и знания, которые помогут вам писать код быстрее и чище. Все практические навыки вы сможете незамедлительно применять в своей работе.
Готовы прокачать свою востребованность?
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please 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