Java Portal | Программирование
12.1K subscribers
1.38K photos
109 videos
42 files
1.39K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Совет по Java API

Используйте @FunctionalInterface как защиту на уровне компиляции

Она помогает не допустить случайного добавления второго абстрактного метода в интерфейс, который должен быть функциональным.
Если вы попытаетесь добавить ещё один абстрактный метод в такой интерфейс, компилятор выдаст ошибку ☕️

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Spring Boot: Добавление ID трассировки запросов важно для отладки API
#SpringBoot #JavaDev

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
😉 Нашел в сети очень подробное руководство по GIT на русском языке

В нем есть все: от клонирования репозиториев до работы с переменными и Pack-файлами

Ознакомиться: тут

👉 Java Portal
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Backend interview task:

Разработчик выполнил:
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 и объекты не были очищены, коммит восстанавливается без проблем.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Совет по Java: ловите ошибки ещё на этапе компиляции — помечайте переопределённые методы аннотацией @Override.

@Override
public void process() {
// logic
}


Если сигнатура метода не совпадёт с методом родительского класса или интерфейса, компилятор сразу выдаст ошибку вместо тихого создания нового метода.
#Java #Annotations

👉 Java Portal
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
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Совет по Spring Boot: с Spring Boot и Spring Security вы можете легко защитить эндпоинты.

Чтобы защитить следующий 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

👉 Java Portal
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: в нём есть встроенная поддержка пагинации через Pageable.

В репозиториях стоит использовать пагинацию вместо того, чтобы вытаскивать все данные сразу.
#SpringBoot #JavaDev

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Включить reflection-free Jackson в Quarkus — легко. Настоящая работа начинается с того, чтобы понять, сохраняется ли ваш JSON-контракт.

Автор собрал небольшой API каталога с DTO на record-классах, обобщённым Page<T>, полиморфными payload-ами, кастомным сериализатором и контрактными тестами: baseline против reflection-free режима.

#java #quarkus

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
Это проблема всех.

Кто ведёт 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/

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
map vs flatMap

map() — преобразует каждый элемент, сохраняя исходную структуру
flatMap() — преобразует элементы и одновременно разворачивает (flatten) результат

Используйте flatMap, когда функция преобразования возвращает Stream или коллекцию
flatMap «распаковывает» вложенные потоки в один плоский поток

Если вы получили Stream<Stream<T>>, а ожидали Stream<T>, вам нужен flatMap!

// map
Stream<List<Integer>>


// flatMap
Stream<Integer>


map()
создаёт вложенную структуру, а flatMap() её разворачивает.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Путеводитель по Kafka по Фейнману: https://chemacabeza.dev/writing/the-feynman-guide-to-apache-kafka

#apachekafka

Понимание нервной системы современных data-архитектур.
Сборник ключевых материалов по Kafka, объяснённых через простые аналогии.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Изучение внутреннего устройства Git — это одна из топ-5 вещей, которые разработчик может сделать для себя.

Вся суть Git внезапно сводится к коммитам в ветках, и тогда становится видно, насколько Git красив и прост по своей сути.

- rebase — это просто пересоздание коммитов на новой базе
- cherry-pick — это просто повторное применение изменений одного коммита
- merge — это просто соединение историй
- reset — это просто перемещение текущего ref’а

На самом деле это одна из самых красивых систем, когда-либо созданных.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
3
💡В Java sealed types позволяют закрыть граф наследования с помощью permits.

Наследоваться от sealed-класса или интерфейса могут только явно перечисленные подтипы.
Каждый разрешённый подтип должен быть объявлен как final, sealed или non-sealed.
non-sealed снова открывает возможность наследования ниже по этой ветке. #SoftwareDevelopment

Пример кода, и sample-проект на GitHub:

// java-17-sealed-classes — закрытая иерархия

public abstract sealed class Shape permits Circle, Rectangle, FancyRectangle {
public abstract double area();
}

public final class Circle extends Shape { /* листовой класс — без дальнейшего наследования */ }

public sealed class Rectangle extends Shape permits Square, Oblong { }

public final class Square extends Rectangle { }

public non-sealed class FancyRectangle extends Shape { }
// RoundedRectangle наследуется от FancyRectangle — не указан в Shape.permits (открытая ветка)


Java 17 Sealed Classes Example Project

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Лучшие GitHub-репозитории для изучения system design без покупки курсов за $400:

1. System Design Primer github.com/donnemartin/sy
2. Awesome System Design Resources github.com/ashishps1/awes
3. System Design 101 github.com/ByteByteGoHq/s
4. Designing Data-Intensive Applications Notes github.com/Vonng/ddia
5. System Design Interview github.com/checkcheckzz/s
6. The Book of Secret Knowledge github.com/trimstray/the-
7. Awesome Scalability github.com/binhnguyennus/
8. Low Level Design Primer github.com/prasadgujar/lo
9. Tech Interview Handbook github.com/yangshun/tech-

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
4
Выражения switch в Java 14+ являются исчерпывающими (exhaustive): компилятор проверяет, что обработаны все возможные значения.

Если пропустить константу enum, компиляция завершится ошибкой
Исправить это можно, обработав все значения enum или добавив ветку default
Более безопасный рефакторинг и меньше скрытых ошибок
#Java #JavaDev

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2