Совет по Java: возвращайте Collections.emptyList(), List.of() или Set.of() вместо null, чтобы не плодить проверки на null в вызывающем коде.
👉 Java Portal
// ❌ Нужен null-check:
public List<String> findUsers() {
if (!dataAvailable()) {
return null; // заставляет вызывающий код проверять на null
}
return loadUsers();
}
List<String> users = findUsers();
if (users != null) {
users.forEach(System.out::println);
}
// ✅ Без null-check:
public List<String> findUsers() {
if (!dataAvailable()) {
return Collections.emptyList(); // или List.of()
}
return loadUsers();
}
// Вызывающая сторона:
List<String> users = findUsers();
users.forEach(System.out::println); // проверка на null не нужна
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4
Изоляция рунета ближе, чем ты думаешь
Роскомнадзору дали карт-бланш на блокировки, а «белые списки» сайтов тестируют уже в десятках регионов. И гайки будут закручиваться только сильнее.
Чтобы в одночасье не лишиться доступа к свободному Интернету, просто сохрани Only Hack.
Тут профессиональный хакер делится фишками, с которыми доступ к глобальной сети у тебя будет даже в случае ядерного апокалипсиса.
Не жди момента «Х». Перестрахуйся подпиской.
Loading …
██████████████] 99%
Роскомнадзору дали карт-бланш на блокировки, а «белые списки» сайтов тестируют уже в десятках регионов. И гайки будут закручиваться только сильнее.
Чтобы в одночасье не лишиться доступа к свободному Интернету, просто сохрани Only Hack.
Тут профессиональный хакер делится фишками, с которыми доступ к глобальной сети у тебя будет даже в случае ядерного апокалипсиса.
Не жди момента «Х». Перестрахуйся подпиской.
💊8❤1😁1
Вышел релиз IntelliJ IDEA 2025.3!
В этой версии завезли несколько заметных обновлений – все они подробно описаны и показаны в демках на странице “Что нового”.
Зацени
👉 Java Portal
В этой версии завезли несколько заметных обновлений – все они подробно описаны и показаны в демках на странице “Что нового”.
Зацени
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
Java-совет: когда нужно наполнять значения в Map, например списки, удобно использовать computeIfAbsent().
Классический способ:
С использованием computeIfAbsent:
👉 Java Portal
Классический способ:
Map<String, List<String>> map = new HashMap<>();
if (!map.containsKey("key")) {
map.put("key", new ArrayList<>());
}
map.get("key").add("listValue");
С использованием computeIfAbsent:
map.computeIfAbsent("key", k -> new ArrayList<>())
.add("listValue");Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Твой Dockerfile не "простой". Он просто недописан.
Большинство девов за всю жизнь используют всего 5 инструкций Dockerfile:
FROM, COPY, RUN, EXPOSE, CMD, ну и иногда ENV, если уж прям заморочились.😱
Вот почему твоя команда Ops и пользователи молча тебя ненавидят.
Вот несколько инструкций, про которые ты, скорее всего, не знаешь:
- HEALTHCHECK: контейнер не становится здоровым только потому, что он запущен.
Нет, Kubernetes сам не поймет, что приложение внутри уже сдохло.
Скажи ему, как это проверять. Или дай Ops’ам удовольствие дебажить цикл перезапусков контейнеров в проде.
- SHELL:
По умолчанию это /bin/sh -c. Хочешь другое, используй SHELL.
Меньше экранирования, меньше проблем с кроссплатформой.
- STOPSIGNAL: не оставляй приложение подвисшим.
Задает сигнал, который Docker отправляет при остановке контейнера.
Используй тот сигнал, который твое приложение реально обрабатывает.
Больше никаких зомби-контейнеров и сломанной "корректной остановки".
- ONBUILD
Хочешь сделать базовые образы умнее, используй это.
Хочешь развалить чужой пайплайн, используй неправильно.
- ARG vs ENV: перестань путать "во время сборки образа" и “во время запуска контейнера”,
ARG: существует только во время сборки
ENV: остается в финальном образе
Если ты не понимаешь разницу, не удивляйся, когда приложение ведет себя по-разному на dev и в prod.
- LABEL: метаданные не опциональны.
Это не для красоты. Это нужно инструментам, CI и аудиторам. Потом сам себе спасибо скажешь.
Dockerfile это не шелл-скрипт.
Это продовый код.
Он описывает систему, которую ты поставляешь.
Ты же не выкатываешь наполовину сделанное API, так перестань выкатывать наполовину сделанные образы.
Научись писать Dockerfile, который не отстой.💩
👉 Java Portal
Большинство девов за всю жизнь используют всего 5 инструкций Dockerfile:
FROM, COPY, RUN, EXPOSE, CMD, ну и иногда ENV, если уж прям заморочились.
Вот почему твоя команда Ops и пользователи молча тебя ненавидят.
Вот несколько инструкций, про которые ты, скорее всего, не знаешь:
- HEALTHCHECK: контейнер не становится здоровым только потому, что он запущен.
Нет, Kubernetes сам не поймет, что приложение внутри уже сдохло.
Скажи ему, как это проверять. Или дай Ops’ам удовольствие дебажить цикл перезапусков контейнеров в проде.
- SHELL:
По умолчанию это /bin/sh -c. Хочешь другое, используй SHELL.
Меньше экранирования, меньше проблем с кроссплатформой.
- STOPSIGNAL: не оставляй приложение подвисшим.
Задает сигнал, который Docker отправляет при остановке контейнера.
Используй тот сигнал, который твое приложение реально обрабатывает.
Больше никаких зомби-контейнеров и сломанной "корректной остановки".
- ONBUILD
Хочешь сделать базовые образы умнее, используй это.
Хочешь развалить чужой пайплайн, используй неправильно.
- ARG vs ENV: перестань путать "во время сборки образа" и “во время запуска контейнера”,
ARG: существует только во время сборки
ENV: остается в финальном образе
Если ты не понимаешь разницу, не удивляйся, когда приложение ведет себя по-разному на dev и в prod.
- LABEL: метаданные не опциональны.
Это не для красоты. Это нужно инструментам, CI и аудиторам. Потом сам себе спасибо скажешь.
Dockerfile это не шелл-скрипт.
Это продовый код.
Он описывает систему, которую ты поставляешь.
Ты же не выкатываешь наполовину сделанное API, так перестань выкатывать наполовину сделанные образы.
Научись писать Dockerfile, который не отстой.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5