Java
Урок 1. Java Start | Java для начинающих | Java с нуля
Урок 2. Java переменные | Java типы данных | Java для автоматизаторов | Урок 2
Урок 3. Java комментарий | Java как вывести сообщения в консоль | Java конкатенация строк | Урок 3
Урок 4. Java арифметические операции | Java для автоматизаторов | строк | Урок 4
Урок 5. Java библиотеки классов | Java Scanner | строк | Урок 5
Урок 6. Java String | Класс String и его методы
Урок 7. Условный оператор if в Java | Оператор switch | Конструкция if-else |
источник
👉
Урок 1. Java Start | Java для начинающих | Java с нуля
Урок 2. Java переменные | Java типы данных | Java для автоматизаторов | Урок 2
Урок 3. Java комментарий | Java как вывести сообщения в консоль | Java конкатенация строк | Урок 3
Урок 4. Java арифметические операции | Java для автоматизаторов | строк | Урок 4
Урок 5. Java библиотеки классов | Java Scanner | строк | Урок 5
Урок 6. Java String | Класс String и его методы
Урок 7. Условный оператор if в Java | Оператор switch | Конструкция if-else |
источник
👉
Зачем используется Serial Version UID? Что если не определить его?
Сериализуемый класс явно или неявно, но всегда имеет
Для совпадающих версий работает мощная поддержка эволюции класса – совместимые изменения, такие как добавление или удаление полей, не приводят к
Неявное значение вычисляется автоматически в рантайме, и включает в себя информацию о имени типа, списке родителей и полей (с точностью до коллизии). По смыслу это похоже на хэш-сумму класса. Соответственно, при любом изменении класса значение изменится, и поддержка эволюции окажется бесполезной.
Всегда лучше явно указывать любое значение
Явное значение устанавливается в переменную
👉
Сериализуемый класс явно или неявно, но всегда имеет
serialVersionUID
. Это число типа long
, которое представляет собой «версию» сериализационной формы класса. Если при сериализации/десериализации значения serialVersionUID
не совпадают – будет выброшено InvalidClassException
.Для совпадающих версий работает мощная поддержка эволюции класса – совместимые изменения, такие как добавление или удаление полей, не приводят к
InvalidClassException
. Неявное значение вычисляется автоматически в рантайме, и включает в себя информацию о имени типа, списке родителей и полей (с точностью до коллизии). По смыслу это похоже на хэш-сумму класса. Соответственно, при любом изменении класса значение изменится, и поддержка эволюции окажется бесполезной.
Всегда лучше явно указывать любое значение
serialVersionUID
, и изменять только в тех редких случаях, когда требуется сломать совместимость с предыдущими версиями. Стандартная утилита JDK serialver
умеет «угадывать» авто-генерированное значение. Она используется чтобы зафиксировать значение для включения поддержки эволюции созданного ранее класса.Явное значение устанавливается в переменную
static final long serialVersionUID
. 👉
Media is too big
VIEW IN TELEGRAM
Разрешаем фронту подписаться на бэкенд. Server Sent Events на Java Spring Boot.
Простой способ избежать постоянного опроса сервера. Событийный способ работы.
источник
👉
Простой способ избежать постоянного опроса сервера. Событийный способ работы.
источник
👉
🎬 Amplicode – конвейер для Spring-приложений прямо в IntelliJ IDEA
На прошлой неделе мы провели митап, который длился 3,5 часа!
Мы понимаем, что усвоить столько информации за раз непросто (если только ты не Илья Кучмин :D ). Поэтому мы выложили запись в высоком качестве и разбили её на плейлист с полной записью мероприятия и отдельными его частями.
Всего получилось 6 докладов:
– История и философия Amplicode (Илья Кучмин)
– Локальное окружение с Docker Compose для Spring Boot (Кирилл Толкачёв)
– Проблемы JPA в Spring PetClinic и способы их решения (Илья и Фёдор Сазоновы)
– Разрабатываем правильный REST API для Spring Boot (Рустам Курамшин)
– Настраиваем Spring Security и Keycloak (Павел Кислов)
– Admin UI с использованием React Admin для Spring Boot (Александр Шустанов)
✔️СМОТРЕТЬ НА YOUTUBE
✔️СМОТРЕТЬ В VK ВИДЕО
✔️СМОТРЕТЬ НА RUTUBE
На прошлой неделе мы провели митап, который длился 3,5 часа!
Мы понимаем, что усвоить столько информации за раз непросто (
Всего получилось 6 докладов:
– История и философия Amplicode (Илья Кучмин)
– Локальное окружение с Docker Compose для Spring Boot (Кирилл Толкачёв)
– Проблемы JPA в Spring PetClinic и способы их решения (Илья и Фёдор Сазоновы)
– Разрабатываем правильный REST API для Spring Boot (Рустам Курамшин)
– Настраиваем Spring Security и Keycloak (Павел Кислов)
– Admin UI с использованием React Admin для Spring Boot (Александр Шустанов)
✔️СМОТРЕТЬ НА YOUTUBE
✔️СМОТРЕТЬ В VK ВИДЕО
✔️СМОТРЕТЬ НА RUTUBE
Опыт отладки хитрой утечки прямой памяти
Pinterest поддерживает формирование отчётов по метрикам рекламных объявлений внешних рекламодателей и расчёт рекламных бюджетов в реальном времени. Всё это основано на потоковых конвейерах обработки данных, созданных с помощью на Apache Flink. Доступность заданий (job) Flink для пользователей находится на уровне 99-го перцентиля. Но время от времени некоторые задачи (task) «валятся» под ударами неприятных ошибок, вызванных утечками прямой памяти (Out-Of-Memory, OOM), возникающими сразу в нескольких операторах.
https://habr.com/ru/companies/wunderfund/articles/843618/
👉
Pinterest поддерживает формирование отчётов по метрикам рекламных объявлений внешних рекламодателей и расчёт рекламных бюджетов в реальном времени. Всё это основано на потоковых конвейерах обработки данных, созданных с помощью на Apache Flink. Доступность заданий (job) Flink для пользователей находится на уровне 99-го перцентиля. Но время от времени некоторые задачи (task) «валятся» под ударами неприятных ошибок, вызванных утечками прямой памяти (Out-Of-Memory, OOM), возникающими сразу в нескольких операторах.
https://habr.com/ru/companies/wunderfund/articles/843618/
👉
Принципы SOLID в Java с примерами
Принципы SOLID - это набор из пяти принципов проектирования в объектно-ориентированном программировании, которые помогают разработчикам создавать более удобное, понятное и гибкое программное обеспечение. Эти принципы были введены Робертом К. Мартином, также известным как Дядя Боб. SOLID означает:
1 - Single Responsibility Principle (SRP)
2 - Open/Closed Principle (OCP)
3 - Liskov Substitution Principle (LSP)
4 - Interface Segregation Principle (ISP)
5 - Dependency Inversion Principle (DIP)
https://www.javaguides.net/2020/01/solid-principles-in-java-with-examples.html
👉
Принципы SOLID - это набор из пяти принципов проектирования в объектно-ориентированном программировании, которые помогают разработчикам создавать более удобное, понятное и гибкое программное обеспечение. Эти принципы были введены Робертом К. Мартином, также известным как Дядя Боб. SOLID означает:
1 - Single Responsibility Principle (SRP)
2 - Open/Closed Principle (OCP)
3 - Liskov Substitution Principle (LSP)
4 - Interface Segregation Principle (ISP)
5 - Dependency Inversion Principle (DIP)
https://www.javaguides.net/2020/01/solid-principles-in-java-with-examples.html
👉
Используйте плагин checkstyle
Подключить его очень легко и в Gradle, и в Maven.
Плагин проверяет форматирование, неиспользуемые импорты и когнитивную сложность ваших методов при каждой сборке приложения, что помогает поддерживать ваш код удобочитаемым, а следовательно, лучше сопровождаемым.
👉
Подключить его очень легко и в Gradle, и в Maven.
plugins {
id 'checkstyle'
Плагин проверяет форматирование, неиспользуемые импорты и когнитивную сложность ваших методов при каждой сборке приложения, что помогает поддерживать ваш код удобочитаемым, а следовательно, лучше сопровождаемым.
👉
Какие бывают строковые классы?
В Java строковые классы — это классы, которые используются для работы со строками, то есть последовательностями символов. Основные строковые классы в Java:
1. String
- Неизменяемый класс (immutable): После создания объекта
- Использование: Широко используется для представления строковых значений.
- Особенности:
- Строки могут быть созданы с использованием строковых литералов или через конструктор.
- Для сравнения строк рекомендуется использовать метод
- Пример:
2. StringBuilder
- Изменяемый класс (mutable): Этот класс позволяет изменять строки без создания нового объекта.
- Основное применение: Используется, когда требуется частое изменение строк, например при конкатенации.
- Не синхронизирован: Этот класс не потокобезопасен, что делает его быстрее при работе в однопоточных приложениях.
- Пример:
3. StringBuffer
- Изменяемый класс (mutable): Как и
- Синхронизирован: Потокобезопасный, что делает его более медленным по сравнению с
- Основное применение: Рекомендуется использовать в многопоточных приложениях.
- Пример:
Различия между
- Неизменяемость:
- Потокобезопасность:
- Производительность:
👉
В Java строковые классы — это классы, которые используются для работы со строками, то есть последовательностями символов. Основные строковые классы в Java:
1. String
- Неизменяемый класс (immutable): После создания объекта
String
его нельзя изменить.- Использование: Широко используется для представления строковых значений.
- Особенности:
- Строки могут быть созданы с использованием строковых литералов или через конструктор.
- Для сравнения строк рекомендуется использовать метод
equals()
, а не оператор ==
.- Пример:
String str = "Hello, World!";
2. StringBuilder
- Изменяемый класс (mutable): Этот класс позволяет изменять строки без создания нового объекта.
- Основное применение: Используется, когда требуется частое изменение строк, например при конкатенации.
- Не синхронизирован: Этот класс не потокобезопасен, что делает его быстрее при работе в однопоточных приложениях.
- Пример:
StringBuilder sb = new StringBuilder("Hello");
sb.append(", World!");
3. StringBuffer
- Изменяемый класс (mutable): Как и
StringBuilder
, позволяет изменять строки.- Синхронизирован: Потокобезопасный, что делает его более медленным по сравнению с
StringBuilder
.- Основное применение: Рекомендуется использовать в многопоточных приложениях.
- Пример:
StringBuffer sb = new StringBuffer("Hello");
sb.append(", World!");
Различия между
String
, StringBuilder
и StringBuffer
:- Неизменяемость:
String
неизменяемый, тогда как StringBuilder
и StringBuffer
изменяемы.- Потокобезопасность:
StringBuffer
синхронизирован, в отличие от StringBuilder
.- Производительность:
StringBuilder
быстрее, чем StringBuffer
при работе в однопоточных средах.👉
🚀 Совет по Java - Comparator 🚀
Принимает Comparator в качестве аргумента, который отвечает за сравнение ненулевых элементов. В случае, если переданный компаратор равен null, ненулевые значения считаются равными. 🔥
https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/util/Comparator.html#nullsLast(java.util.Comparator)
👉
Comparator.nullsLast
Принимает Comparator в качестве аргумента, который отвечает за сравнение ненулевых элементов. В случае, если переданный компаратор равен null, ненулевые значения считаются равными. 🔥
https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/util/Comparator.html#nullsLast(java.util.Comparator)
👉
Как заставить code coverage работать на вас
Недавно я снова услышал тезис, что code coverage не нужен и совсем не обязательно за ним следить, а нужно просто делать black-box тесты и считать количество тест-кейсов. Я не согласен с подобного рода категоричными утверждениями. В этой статье постараюсь изложить свою точку зрения и развеять некоторые мифы, опираясь на свой опыт в разработке и идеи, которые почерпнул из книг и статей других инженеров.
https://habr.com/ru/articles/836366/
👉
Недавно я снова услышал тезис, что code coverage не нужен и совсем не обязательно за ним следить, а нужно просто делать black-box тесты и считать количество тест-кейсов. Я не согласен с подобного рода категоричными утверждениями. В этой статье постараюсь изложить свою точку зрения и развеять некоторые мифы, опираясь на свой опыт в разработке и идеи, которые почерпнул из книг и статей других инженеров.
https://habr.com/ru/articles/836366/
👉
Media is too big
VIEW IN TELEGRAM
Создание REST API с использованием Spring WebFlux и Security
00:00:00 Введение
00:00:20 Создание проекта
00:11:36 Создание миграций БД
00:15:40 Создание базовых классов
00:23:20 Реализация логики генерации JWT токена
00:46:30 Реализация логики валидации JWT токена
00:53:05 Построения цепочки аутентификации
01:04:22 Финальная конфигурация с использованием SecurityWebFilterChain
01:12:11 Реализация REST контроллеров
01:23:15 Проверка REST API средствами Postman
01:24:21 Добавление и конфигурация обработчика ошибок
01:25:40 Заключение
Ссылка на Github репозиторий https://github.com/proselytear/webfluxsecurity
источник
👉
00:00:00 Введение
00:00:20 Создание проекта
00:11:36 Создание миграций БД
00:15:40 Создание базовых классов
00:23:20 Реализация логики генерации JWT токена
00:46:30 Реализация логики валидации JWT токена
00:53:05 Построения цепочки аутентификации
01:04:22 Финальная конфигурация с использованием SecurityWebFilterChain
01:12:11 Реализация REST контроллеров
01:23:15 Проверка REST API средствами Postman
01:24:21 Добавление и конфигурация обработчика ошибок
01:25:40 Заключение
Ссылка на Github репозиторий https://github.com/proselytear/webfluxsecurity
источник
👉