Please open Telegram to view this post
VIEW IN TELEGRAM
Spring Boot:
#SpringBoot #SoftwareDevelopment
👉 Java Portal
spring.main.lazy-initialization=true не только откладывает создание бинов, но и полностью пропускает выполнение @PostConstruct до первого реального использования бина. Учитывайте это и следите за побочными эффектами.#SpringBoot #SoftwareDevelopment
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Java 8: мастерство работы с «разворачивающим отображением» — самая важная операция потоков, с которой у разработчиков чаще всего возникают сложности
Многие разработчики понимают операции отображения и фильтрации, но «разворачивающее отображение» вызывает наибольшую путаницу. Эта операция особенно мощная при работе со вложенными коллекциями, списками списков, значениями-обертками, а также ответами API, которые возвращают коллекции. Освоение этого подхода помогает писать более чистый и эффективный код и уходить от вложенных циклов.
👉 Java Portal
Многие разработчики понимают операции отображения и фильтрации, но «разворачивающее отображение» вызывает наибольшую путаницу. Эта операция особенно мощная при работе со вложенными коллекциями, списками списков, значениями-обертками, а также ответами API, которые возвращают коллекции. Освоение этого подхода помогает писать более чистый и эффективный код и уходить от вложенных циклов.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Это тот сайт, который Google должен ставить на первое место по каждому поиску разработчиков.
Он называется IT Tools: https://it-tools.tech/
Бесплатный open-source сайт с 100+ утилитами для разработчиков, которые полностью работают локально в браузере.
JSON formatter
Regex tester
JWT decoder
UUID generator
Cron parser
Timestamp converter
Hash generators
Docker helpers
Color tools
Markdown editor
Всё загружается мгновенно. Нет логинов. Нет трекинга. Нет AI-сгенерированного SEO-мусора.
Когда ищешь один простой конвертер на других сайтах, получаешь:
- всплывающий спам
- трекеры
- фейковые кнопки
- автозапуск видео
- 40 скриптов аналитики
А поскольку сайт полностью open-source, вы можете сами его хостить.
Одна закладка заменила для меня 30+ случайных сайтов.
👉 Java Portal
Он называется IT Tools: https://it-tools.tech/
Бесплатный open-source сайт с 100+ утилитами для разработчиков, которые полностью работают локально в браузере.
JSON formatter
Regex tester
JWT decoder
UUID generator
Cron parser
Timestamp converter
Hash generators
Docker helpers
Color tools
Markdown editor
Всё загружается мгновенно. Нет логинов. Нет трекинга. Нет AI-сгенерированного SEO-мусора.
Когда ищешь один простой конвертер на других сайтах, получаешь:
- всплывающий спам
- трекеры
- фейковые кнопки
- автозапуск видео
- 40 скриптов аналитики
А поскольку сайт полностью open-source, вы можете сами его хостить.
Одна закладка заменила для меня 30+ случайных сайтов.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Как выбрать шаблон проектирования?
Выбор подходящего шаблона проектирования в программной инженерии — ключ к эффективному решению задач. Этот гайд упрощает процесс выбора, помогая принимать обоснованные решения в зависимости от конкретных потребностей.
В нём даны краткие описания и практические случаи использования каждого шаблона, что облегчает их понимание и применение в реальных проектах.
Чтобы выбрать шаблон, сначала необходимо определить тип проблемы:
> Создание объектов? → Порождающие шаблоны
> Компоновка объектов? → Структурные шаблоны
> Взаимодействие объектов? → Поведенческие шаблоны
Приступим.
1. Порождающие шаблоны
> Singleton — используется, когда нужен единственный экземпляр класса. Примеры: логгирование, подключения к базе данных.
> Factory Method — отделяет создание объекта от его использования. Пример: создание разных типов подключений к БД на основе конфигурации.
> Abstract Factory — создаёт семейства связанных объектов. Пример: парсеры для разных форматов файлов.
> Builder — пошаговое создание сложных объектов. Пример: построение сложного объекта доменной модели.
> Prototype — создание копий объектов и повторное использование закэшированных экземпляров для снижения количества запросов к БД.
2. Структурные шаблоны
> Adapter — делает несовместимые интерфейсы совместимыми. Пример: подключение новой библиотеки логгирования к системе с другим интерфейсом.
> Composite — представление иерархий "часть-целое". Пример: графические объекты в редакторе, объединяемые в группы.
> Proxy — управление доступом к объекту. Пример: ленивое подключение изображения высокого разрешения.
> Decorator — динамическое добавление/удаление поведения. Пример: добавление сжатия или шифрования для потоков файлов.
> Bridge — разделение абстракции и реализации. Пример: изоляция платформозависимого кода от основной логики.
3. Поведенческие шаблоны
> Strategy — определяет семейство алгоритмов. Пример: выбор между различными алгоритмами сортировки или сжатия.
> Observer — оповещение об изменениях состояния. Пример: уведомление подписчиков о событиях в системе сообщений.
> Command — инкапсулирует запрос как объект. Пример: реализация undo/redo в текстовом или графическом редакторе.
> State — инкапсулирует поведение в зависимости от состояния. Пример: разные состояния UI-элемента (вкл., выкл., выделен).
> Template Method — задаёт скелет алгоритма, позволяя подклассам реализовать отдельные шаги. Пример: базовый класс для юнит-тестов с переопределяемыми шагами подготовки и очистки.
В итоге мы подбираем тот шаблон, который наилучшим образом решает конкретную задачу
👉 Java Portal
Выбор подходящего шаблона проектирования в программной инженерии — ключ к эффективному решению задач. Этот гайд упрощает процесс выбора, помогая принимать обоснованные решения в зависимости от конкретных потребностей.
В нём даны краткие описания и практические случаи использования каждого шаблона, что облегчает их понимание и применение в реальных проектах.
Чтобы выбрать шаблон, сначала необходимо определить тип проблемы:
> Создание объектов? → Порождающие шаблоны
> Компоновка объектов? → Структурные шаблоны
> Взаимодействие объектов? → Поведенческие шаблоны
Приступим.
1. Порождающие шаблоны
> Singleton — используется, когда нужен единственный экземпляр класса. Примеры: логгирование, подключения к базе данных.
> Factory Method — отделяет создание объекта от его использования. Пример: создание разных типов подключений к БД на основе конфигурации.
> Abstract Factory — создаёт семейства связанных объектов. Пример: парсеры для разных форматов файлов.
> Builder — пошаговое создание сложных объектов. Пример: построение сложного объекта доменной модели.
> Prototype — создание копий объектов и повторное использование закэшированных экземпляров для снижения количества запросов к БД.
2. Структурные шаблоны
> Adapter — делает несовместимые интерфейсы совместимыми. Пример: подключение новой библиотеки логгирования к системе с другим интерфейсом.
> Composite — представление иерархий "часть-целое". Пример: графические объекты в редакторе, объединяемые в группы.
> Proxy — управление доступом к объекту. Пример: ленивое подключение изображения высокого разрешения.
> Decorator — динамическое добавление/удаление поведения. Пример: добавление сжатия или шифрования для потоков файлов.
> Bridge — разделение абстракции и реализации. Пример: изоляция платформозависимого кода от основной логики.
3. Поведенческие шаблоны
> Strategy — определяет семейство алгоритмов. Пример: выбор между различными алгоритмами сортировки или сжатия.
> Observer — оповещение об изменениях состояния. Пример: уведомление подписчиков о событиях в системе сообщений.
> Command — инкапсулирует запрос как объект. Пример: реализация undo/redo в текстовом или графическом редакторе.
> State — инкапсулирует поведение в зависимости от состояния. Пример: разные состояния UI-элемента (вкл., выкл., выделен).
> Template Method — задаёт скелет алгоритма, позволяя подклассам реализовать отдельные шаги. Пример: базовый класс для юнит-тестов с переопределяемыми шагами подготовки и очистки.
В итоге мы подбираем тот шаблон, который наилучшим образом решает конкретную задачу
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥5
Совет по Java API
Используйте
Она помогает не допустить случайного добавления второго абстрактного метода в интерфейс, который должен быть функциональным.
Если вы попытаетесь добавить ещё один абстрактный метод в такой интерфейс, компилятор выдаст ошибку☕️
👉 Java Portal
Используйте
@FunctionalInterface как защиту на уровне компиляцииОна помогает не допустить случайного добавления второго абстрактного метода в интерфейс, который должен быть функциональным.
Если вы попытаетесь добавить ещё один абстрактный метод в такой интерфейс, компилятор выдаст ошибку
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Spring Boot: Добавление ID трассировки запросов важно для отладки API
#SpringBoot #JavaDev
👉 Java Portal
#SpringBoot #JavaDev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
В нем есть все: от клонирования репозиториев до работы с переменными и Pack-файлами
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Важная Java-библиотека: Jackson
Джексон — высоконастраиваемый, быстрый, поддерживает стриминг и является процессором JSON с биндингом данных. Если работаешь с JSON, эту библиотеку нужно знать.
Какие основные модули у Джексона?
jackson-core — низкоуровневый стриминговый API (JsonParser, JsonGenerator) для эффективного чтения и записи JSON
jackson-databind — содержит ObjectMapper, основной API для конвертации между Java-объектами и JSON
jackson-annotations — аннотации (@JsonProperty, @JsonIgnore и др.), управляющие сериализацией/десериализацией
jackson-dataformat-* — расширения для форматов XML, CSV, YAML, CBOR и др.
jackson-datatype-* — поддержка типов Java 8 Date/Time (LocalDate, Instant), Guava, JodaTime и др.
jackson-module-* — модули-расширения под конкретные языки и оптимизации производительности (например, Kotlin, Afterburner)
👉 Java Portal
Джексон — высоконастраиваемый, быстрый, поддерживает стриминг и является процессором JSON с биндингом данных. Если работаешь с JSON, эту библиотеку нужно знать.
Какие основные модули у Джексона?
jackson-core — низкоуровневый стриминговый API (JsonParser, JsonGenerator) для эффективного чтения и записи JSON
jackson-databind — содержит ObjectMapper, основной API для конвертации между Java-объектами и JSON
jackson-annotations — аннотации (@JsonProperty, @JsonIgnore и др.), управляющие сериализацией/десериализацией
jackson-dataformat-* — расширения для форматов XML, CSV, YAML, CBOR и др.
jackson-datatype-* — поддержка типов Java 8 Date/Time (LocalDate, Instant), Guava, JodaTime и др.
jackson-module-* — модули-расширения под конкретные языки и оптимизации производительности (например, Kotlin, Afterburner)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Backend interview task:
Разработчик выполнил:
После этого запаниковал — команда удалила коммит
с 3 часами работы.
Можно ли восстановить изменения?
A) Нет — hard reset навсегда удаляет коммиты
B) Да — git reflog хранит недавние позиции HEAD, оттуда можно восстановиться
C) Да — но только если коммит был запушен в remote
D) Нет — только при наличии локального бэкапа
Правильный ответ: B
Восстановление:
Git покажет историю перемещений HEAD:
Дальше можно вернуть состояние:
или создать новую ветку:
Пока не сработал garbage collector и объекты не были очищены, коммит восстанавливается без проблем.
👉 Java Portal
Разработчик выполнил:
git reset --hard HEAD~1
После этого запаниковал — команда удалила коммит
с 3 часами работы.
Можно ли восстановить изменения?
A) Нет — hard reset навсегда удаляет коммиты
B) Да — git reflog хранит недавние позиции HEAD, оттуда можно восстановиться
C) Да — но только если коммит был запушен в remote
D) Нет — только при наличии локального бэкапа
Правильный ответ: B
git reset --hard удаляет ссылку на коммит из текущей ветки, но сам объект коммита обычно ещё остаётся в локальном репозитории.Восстановление:
git reflog
Git покажет историю перемещений HEAD:
abc1234 HEAD@{1}: commit: add payment retry logic
def5678 HEAD@{0}: reset: moving to HEAD~1Дальше можно вернуть состояние:
git reset --hard abc1234
или создать новую ветку:
git checkout -b recovery abc1234
Пока не сработал garbage collector и объекты не были очищены, коммит восстанавливается без проблем.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Совет по Java: ловите ошибки ещё на этапе компиляции — помечайте переопределённые методы аннотацией
Если сигнатура метода не совпадёт с методом родительского класса или интерфейса, компилятор сразу выдаст ошибку вместо тихого создания нового метода.
#Java #Annotations
👉 Java Portal
@Override.@Override
public void process() {
// logic
}
Если сигнатура метода не совпадёт с методом родительского класса или интерфейса, компилятор сразу выдаст ошибку вместо тихого создания нового метода.
#Java #Annotations
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Разработчику пригодится это приложение.
Запуск эмулятора iOS или Android за секунды.
Бесплатное, нативное и с открытым исходным кодом:
→ http://minisim.app
👉 Java Portal
Запуск эмулятора iOS или Android за секунды.
Бесплатное, нативное и с открытым исходным кодом:
→ http://minisim.app
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
This media is not supported in your browser
VIEW IN TELEGRAM
Большинство разработчиков даже не знают, что GitHub умеет рендерит анимации прямо в README.
github.com/LottieFiles/do github.com/LottieFiles/do github.com/LottieFiles/do github.com/thorvg/thorvg/
👉 Java Portal
github.com/LottieFiles/do github.com/LottieFiles/do github.com/LottieFiles/do github.com/thorvg/thorvg/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Совет по Spring Boot: с Spring Boot и Spring Security вы можете легко защитить эндпоинты.
Чтобы защитить следующий REST endpoint:
Можно написать конфигурацию вот так:
Пояснение:
#SpringBoot #SpringSecurity
👉 Java Portal
Чтобы защитить следующий REST endpoint:
@RestController
public class MyController {
@GetMapping("/admin")
public String admin() {
...
}
...
}
Можно написать конфигурацию вот так:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin").authenticated()
.anyRequest().permitAll()
.and()
.httpBasic();
}
}
Пояснение:
authorizeRequests(): начинает определение эндпоинтов, которые нужно защитить.antMatchers("/admin").authenticated(): требует аутентификацию для /admin.anyRequest().permitAll(): все остальные эндпоинты являются публичными.httpBasic(): включает HTTP Basic-аутентификацию.#SpringBoot #SpringSecurity
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Java : Используй инструменты вроде VisualVM, чтобы профилировать свой проект и находить узкие места в производительности. #Java #Performance
👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
4 способа обновления данных в веб-приложении на стороне клиента в реальном режиме времени: коротки и долгий опрос, SSE и веб-сокеты
👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Spring Boot: в нём есть встроенная поддержка пагинации через
В репозиториях стоит использовать пагинацию вместо того, чтобы вытаскивать все данные сразу.
#SpringBoot #JavaDev
👉 Java Portal
Pageable.В репозиториях стоит использовать пагинацию вместо того, чтобы вытаскивать все данные сразу.
#SpringBoot #JavaDev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Включить reflection-free Jackson в Quarkus — легко. Настоящая работа начинается с того, чтобы понять, сохраняется ли ваш JSON-контракт.
Автор собрал небольшой API каталога с DTO на record-классах, обобщённым
#java #quarkus
👉 Java Portal
Автор собрал небольшой API каталога с DTO на record-классах, обобщённым
Page<T>, полиморфными payload-ами, кастомным сериализатором и контрактными тестами: baseline против reflection-free режима.#java #quarkus
Please open Telegram to view this post
VIEW IN TELEGRAM
The-Main-Thread
Quarkus Reflection-Free Jackson Serializers: Migrate with Contract Tests
Use a small catalog API to enable reflection-free Jackson, keep tricky JSON payloads honest with contract tests, and benchmark the change without guessing.
👍3❤2
Это проблема всех.
Кто ведёт Java-bootcamp, заметили один и тот же паттерн. Люди спокойно пишут код. Но как только нужно что-то запушить на GitHub или, не дай бог, разобраться с merge conflict — они внезапно в панике гуглят “how to undo git”.
Поэтому они сделали курс из 20 уроков, где у тебя прямо в браузере есть настоящий Ubuntu-терминал. Не фейковый sandbox — реальный терминал. Слева урок, справа ты вводишь команды. Никто не пишет код за тебя. Никто не рассказывает лекцию 45 минут по слайдам. Ты просто делаешь всё сам.
Курс проходит путь от нуля до вещей, которые большинство людей вообще никогда не изучают:
Тебе не нужно знать Java или вообще какой-то конкретный язык. Файлы в репозитории — просто заглушки. Вся суть курса — именно Git и GitHub.
Когда ты заканчиваешь, у тебя есть реальный репозиторий на GitHub с настоящими коммитами, смёрженными PR-ами, CI-проверками и tagged release. Не сертификат. А реальная работа, которую любой может открыть и посмотреть.
Весь курс бесплатный. Все 20 уроков.
линк: https://www.javapro.academy/bootcamp/free-git-and-github-course/
👉 Java Portal
Кто ведёт Java-bootcamp, заметили один и тот же паттерн. Люди спокойно пишут код. Но как только нужно что-то запушить на GitHub или, не дай бог, разобраться с merge conflict — они внезапно в панике гуглят “how to undo git”.
Поэтому они сделали курс из 20 уроков, где у тебя прямо в браузере есть настоящий Ubuntu-терминал. Не фейковый sandbox — реальный терминал. Слева урок, справа ты вводишь команды. Никто не пишет код за тебя. Никто не рассказывает лекцию 45 минут по слайдам. Ты просто делаешь всё сам.
Курс проходит путь от нуля до вещей, которые большинство людей вообще никогда не изучают:
Git basics — init, commits, staging, diff’ы, откаты ошибок
Branching — merge, merge conflicts (ты специально вызываешь реальный конфликт и сам его решаешь), rebase
GitHub — push, pull, fork, pull request’ы, code review
Как работают реальные команды — feature branches, conventional commits, protection веток
То, что реально спасает в проде — cherry-pick, reflog, bisect
Тебе не нужно знать Java или вообще какой-то конкретный язык. Файлы в репозитории — просто заглушки. Вся суть курса — именно Git и GitHub.
Когда ты заканчиваешь, у тебя есть реальный репозиторий на GitHub с настоящими коммитами, смёрженными PR-ами, CI-проверками и tagged release. Не сертификат. А реальная работа, которую любой может открыть и посмотреть.
Весь курс бесплатный. Все 20 уроков.
линк: https://www.javapro.academy/bootcamp/free-git-and-github-course/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
map vs flatMap
Используйте
Если вы получили
↓
👉 Java Portal
map() — преобразует каждый элемент, сохраняя исходную структуруflatMap() — преобразует элементы и одновременно разворачивает (flatten) результатИспользуйте
flatMap, когда функция преобразования возвращает Stream или коллекциюflatMap «распаковывает» вложенные потоки в один плоский потокЕсли вы получили
Stream<Stream<T>>, а ожидали Stream<T>, вам нужен flatMap!// map
Stream<List<Integer>>
↓
// flatMap
Stream<Integer>
map() создаёт вложенную структуру, а flatMap() её разворачивает.Please open Telegram to view this post
VIEW IN TELEGRAM
👍3