иерархия_классов_исключений_в_Java.jpeg
69.8 KB
══════ Навигация ══════
Вакансии • Задачи • Собесы
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥2
В Java не стоит использовать System.currentTimeMillis() для всех задач подряд. Для разных сценариев есть свои инструменты.
Instant now = Instant.now();
Подходит для timestamp’ов, логов и фиксации времени событий.
Duration timeout = Duration.ofSeconds(30);
Удобно для таймаутов, задержек и других временных интервалов.
long start = System.nanoTime();
// твоя логика
long elapsed = System.nanoTime() - start;
— Instant работает с абсолютным временем
— Duration явно описывает временной интервал
— nanoTime() подходит для измерения прошедшего времени и не зависит от перевода системных часов
══════ Навигация ══════
Вакансии • Задачи • Собесы
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍5❤2👏1🤩1
Если хочется прокачать Java не на очередных задачках, а на чем-то, что похоже на реальную разработку — держите подборку идей.
Для каждого указан примерный стек
══════ Навигация ══════
Вакансии • Задачи • Собесы
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3🔥1
Если условие простое и у него всего два результата, необязательно разворачивать полноценный if-else.
Можно использовать тернарный оператор:
String access = age >= 18
? "Проходите!"
: "Доступ запрещён»;
Схема простая:
условие ? значение_если_true : значение_если_false
══════ Навигация ══════
Вакансии • Задачи • Собесы
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤🔥2🥰1
Если вы хоть раз писали Map<String, Map<String, Integer>>, знаете, насколько быстро такая структура становится неудобной.
Например, продажи по городу и товару:
Map<String, Map<String, Integer>> sales = new HashMap<>();
sales.computeIfAbsent("Москва", k -> new HashMap<>())
.put("iPhone", 120);
А если нужно получить все города, где продавался iPhone? Придётся обходить вложенные Map.
Table<String, String, Integer> sales = HashBasedTable.create();
sales.put("Москва", "iPhone", 120);
sales.put("Питер", "iPhone", 90);
sales.get("Москва", "iPhone"); // 120
sales.row("Москва");
// {iPhone=120}
sales.column("iPhone");
// {Москва=120, Питер=90}
Есть несколько реализаций под разные задачи:
→ HashBasedTable — hash-таблицы с предсказуемым порядком итерации
→ TreeBasedTable — отсортированные ключи
→ ArrayTable — строки и столбцы известны заранее
→ ImmutableTable — неизменяемая таблица
📌 Если данные естественно описываются парой «строка + столбец», Table может оказаться удобнее вложенных Map.
══════ Навигация ══════
Вакансии • Задачи • Собесы
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍7🔥4❤3
→ submit()
→ invokeAll()
══════ Навигация ══════
Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2❤1
Раньше, если нужно было перенести в worker thread сразу несколько контекстов — например, MDC + SecurityContext, приходилось собирать это вручную.
В Spring Boot 4 можно зарегистрировать несколько TaskDecorator:
@Order(1)
class MdcTaskDecorator implements TaskDecorator {
// перенос MDC
}
@Order(2)
class SecurityTaskDecorator implements TaskDecorator {
// перенос SecurityContext
}
Spring Boot сам объединит их в CompositeTaskDecorator и выполнит в заданном порядке.
📌 Полезно для
@Async, когда request-контекст должен пережить переход на другой поток.══════ Навигация ══════
Вакансии • Задачи • Собесы
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3
Собрали самые популярные и эффективные инструменты на все случаи жизни.
══════ Навигация ══════
Вакансии • Задачи • Собесы
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
💯2
Раньше после проверки приходилось делать отдельный cast:
if (animal instanceof Dog) {
Dog d = (Dog) animal;
d.bark();
}
if (animal instanceof Dog d) {
d.bark();
}
d уже имеет тип Dog и доступна внутри ветки, где проверка успешна.
if (animal instanceof Dog d) {
d.bark();
} else if (animal instanceof Cat c) {
c.meow();
}
📌 Меньше явных cast’ов — меньше лишнего кода и проще читать условие.
══════ Навигация ══════
Вакансии • Задачи • Собесы
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
SQL Joins.pdf
122.4 KB
══════ Навигация ══════
Вакансии • Задачи • Собесы
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👾2
Что будет результатом кода ❓
👍 — UnsupportedOperationException на set()
🔥 — UnsupportedOperationException на add()
❤️ — list = [X, B, C, D]
👾 — list = [A, B, C, D]
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
👍 — UnsupportedOperationException на set()
🔥 — UnsupportedOperationException на add()
❤️ — list = [X, B, C, D]
👾 — list = [A, B, C, D]
══════ Навигация ══════
Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥47👍12❤6
Когда пользователь из Сиднея открывает ваш сайт, его запрос летит на сервер в Германии и обратно. Это ~300 мс только на «дорогу» — и это для каждого изображения, шрифта, JS-файла.
CDN (Content Delivery Network / Сеть доставки контента) решает эту проблему в лоб: вместо одного сервера — тысячи точек по всему миру. Пользователь получает файлы с ближайшей к нему ноды, а не с вашего origin-сервера.
🔹 Origin и Edge
В архитектуре с CDN появляются два новых понятия:
— Origin Server (Главный сервер): это ваш настоящий сервер, где крутится Spring Boot, лежит база данных и хранятся оригиналы всех файлов (например, в Amazon S3).
— Edge Servers (Граничные серверы / Точки присутствия - PoP): это тысячи серверов CDN-провайдера (например, Cloudflare или Akamai), раскиданные по всему земному шару: в Сиднее, Токио, Нью-Йорке, Лондоне, Москве.
🔹 Как работает кэш
Первый запрос к конкретному файлу всё равно идёт до origin. CDN его скачивает, кэширует у себя и отдаёт пользователю. Все последующие запросы на тот же файл edge-сервер обрабатывает сам, не трогая ваш бэкенд. Это называется cache hit.
🔹 Что кладем в CDN
CDN идеально подходит для статического контента:
— Картинки, видео, аудио.
— Скомпилированные файлы JavaScript и CSS.
— Шрифты.
CDN не подходит для динамического контента:
— Корзина товаров.
— Приватные данные пользователя.
— (Запросы к API /api/v1/users/me должны идти напрямую на ваш сервер, минуя кэш CDN).
🔹 Защита от DDoS
Современные CDN (тот же Cloudflare) - это не просто кэш. Это гигантский щит.
Если хакеры решат «положить» ваш сайт и отправят миллион запросов в секунду, этот удар примут на себя серверы CDN. Их пропускная способность измеряется терабитами. Они отфильтруют «мусорный» трафик, и ваш маленький Origin-сервер даже не заметит атаки.
🔹 Побочные эффекты
— Ускорение: пользователи получают тяжелый контент мгновенно, потому что скачивают его из своего же города.
— Экономия: ваш главный сервер больше не тратит процессорное время и трафик на отдачу терабайтов картинок. Вы платите за сервера меньше.
— Безопасность: CDN скрывает реальный IP-адрес вашего сервера и защищает от DDoS-атак.
══════ Навигация ══════
Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
API — это не просто интерфейс, а ворота в вашу систему. Без должной защиты они становятся уязвимой точкой для атак.
Ключевые принципы безопасности API:
— Использование HTTPS
— Аутентификация и авторизация
— Ограничение запросов
— Валидация входных данных
— Управление доступом на основе ролей (RBAC)
— Мониторинг и логирование
══════ Навигация ══════
Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
В августовском обновлении OpenJDK 25 появился time-based heap uncommit для G1 GC.
Если JVM простаивает и часть committed heap больше не нужна, G1 теперь может вернуть эту память операционной системе. Фича включена по умолчанию и управляется G1UseTimeBasedHeapSizing.
А заодно Microsoft выпустила свежие сборки:
25.0.4.1, 21.0.12.1, 17.0.20.1 и 11.0.32.1.══════ Навигация ══════
Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
До выхода Java 27 осталось меньше месяца. Из того, на что стоит обратить внимание:
А пока можно уже смотреть JDK 28 Early Access — там развивается Valhalla с Value Classes and Objects, а JSON API пока остаётся экспериментальной/incubating частью.
══════ Навигация ══════
Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Создали record:
record Vehicle(String year, String make, String model) {}
var car = new Vehicle("2020", "Toyota", "Camry»);
И Java сразу даёт несколько методов.
car.year(); // "2020"
car.make(); // "Toyota"
car.model(); // "Camry"
Не getYear(), а именно year() — это одна из особенностей records.
System.out.println(car);
// Vehicle[year=2020, make=Toyota, model=Camry]
var car1 = new Vehicle("2020", "Toyota", "Camry");
var car2 = new Vehicle("2020", "Toyota", "Camry");
car1.equals(car2); // true
И автоматически генерируется соответствующий hashCode().
То есть record уже из коробки даёт удобную модель «данные + value-based equality», а не просто сокращённую запись класса.
══════ Навигация ══════
Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3