Java: исключения в Java делятся на две основные категории: checked и unchecked.
Checked-исключения нужно либо перехватывать, либо объявлять.
Unchecked-исключения не нужно объявлять в throws у метода, и компилятор не требует их перехватывать, хотя при необходимости их тоже можно ловить.
👉 Java Portal
Checked-исключения нужно либо перехватывать, либо объявлять.
Unchecked-исключения не нужно объявлять в throws у метода, и компилятор не требует их перехватывать, хотя при необходимости их тоже можно ловить.
// Проверяемые (checked)
try {
FileReader reader = new FileReader("file.txt"); //FileNotFoundException (проверяемое)
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// Непроверяемые (unchecked)
String nullText = null;
System.out.println(nullText.length()); //NullPointerException (непроверяемое)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥4👍1
Объясни, какие паттерны проектирования Spring Boot использует внутри.
На собеседовании обычно проверяют не то, знаешь ли ты названия паттернов.
Скорее хотят понять, понимаешь ли ты, как Spring Boot архитектурно на них построен.
1. Singleton
Spring Boot бины по умолчанию singleton.
Когда ты помечаешь класс
Что можно сказать:
"Все Spring-бины по умолчанию singleton, если явно не указать другой scope, например
2. Proxy
Spring AOP (аспектно-ориентированное программирование) работает через прокси.
3. Observer
Система событий Spring это Observer в чистом виде.
4. Factory
Spring везде использует фабрики.
Ты объявляешь бин, а Spring решает, когда и как его создать.
5. Builder
Используется в клиентах вроде
6. Template Method
Очень активно используется в
Что можно сказать:
"Мне не нужно париться про управление соединением и обработку исключений. Это делает шаблон, а я просто подставляю свою конкретную логику."
👉 Java Portal
На собеседовании обычно проверяют не то, знаешь ли ты названия паттернов.
Скорее хотят понять, понимаешь ли ты, как Spring Boot архитектурно на них построен.
1. Singleton
Spring Boot бины по умолчанию singleton.
Когда ты помечаешь класс
@Component, @Service или @Repository, Spring по дефолту создаёт один инстанс.Что можно сказать:
"Все Spring-бины по умолчанию singleton, если явно не указать другой scope, например
@RequestScope. Это экономит память и держит объектный граф консистентным и разделяемым."2. Proxy
Spring AOP (аспектно-ориентированное программирование) работает через прокси.
3. Observer
Система событий Spring это Observer в чистом виде.
4. Factory
Spring везде использует фабрики.
BeanFactory, ApplicationContext, FactoryBean.Ты объявляешь бин, а Spring решает, когда и как его создать.
5. Builder
Используется в клиентах вроде
RestTemplateBuilder, WebClient.Builder.6. Template Method
Очень активно используется в
JdbcTemplate, RestTemplate и т.д.Что можно сказать:
"Мне не нужно париться про управление соединением и обработку исключений. Это делает шаблон, а я просто подставляю свою конкретную логику."
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Spring Boot: если в приложении для REST-вызовов используется RestTemplate, таймауты можно централизованно настроить через RestTemplateBuilder.
Также можно завести больше одной конфигурации таймаутов через аннотацию @Qualifier:
👉 Java Portal
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder
.setConnectTimeout(Duration.ofSeconds(3))
.setReadTimeout(Duration.ofSeconds(5))
.build();
}
}
Также можно завести больше одной конфигурации таймаутов через аннотацию @Qualifier:
@Bean
@Qualifier("slowServiceRestTemplate")
public RestTemplate slowServiceRestTemplate(RestTemplateBuilder builder) {
return builder
.setConnectTimeout(Duration.ofSeconds(5))
.setReadTimeout(Duration.ofSeconds(30))
.build();
}
@Autowired
@Qualifier("slowServiceRestTemplate")
private RestTemplate restTemplate;
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Залетел полезняк для тех, кто готовится к собесам по Java или просто хочет быстро освежить базу.
На InterviewPrep выложили Java Notes (по сути мини-гайд/конспект) и там закрывают самые частые темы:
Можно прям как чеклист прогнать перед интервью.
👉 Java Portal
На InterviewPrep выложили Java Notes (по сути мини-гайд/конспект) и там закрывают самые частые темы:
история Java
JDK / JRE / JVM (как это вообще устроено)
Collections
управление памятью
многопоточность
обработка исключений
типы классов
типы данных и ключевые слова
Можно прям как чеклист прогнать перед интервью.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍7
В Spring Boot можно задать таймаут для graceful shutdown через настройку spring.lifecycle.timeout-per-shutdown-phase.
Graceful shutdown помогает избежать резких обрывов HTTP-запросов и преждевременных остановок потоков.
👉 Java Portal
Graceful shutdown помогает избежать резких обрывов HTTP-запросов и преждевременных остановок потоков.
server:
shutdown: graceful
spring:
lifecycle:
timeout-per-shutdown-phase: 20s
# Сервер будет завершаться корректно (graceful).
# Даёт до 20 секунд на завершение запросов и работы бинов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Про модификаторы доступа в Java (public / default / protected / private)
private - только для себя
public - откуда угодно
protected - вроде бы для подклассов?
На самом деле тут всегда начинается каша, если не смотреть на вопрос "откуда и кто вызывает" по двум осям: пакет и наследование.
Чтобы нормально понять модификаторы, я подумал: пусть будет статья с моделью "якинику-ресторан".
Что такое модификаторы на самом деле:
Модификаторы - это не про "силу".
Это правила, откуда можно получить доступ.
В Java доступ всегда определяется двумя вещами:
* тот же пакет?
* есть наследование?
Модель с рестораном якинику:
* YakinikuShop: сам ресторан (родительский класс)
* LocalStaff: персонал этого же ресторана
* Manager: управляющий (дочерний класс)
* BranchStaff: персонал филиала (другой пакет + наследник)
* Customer: обычный клиент
Родительский класс: YakinikuShop.java
Почему askManagerToOpenSafe "особенный"
askManagerToOpenSafe - public.
То есть вызвать его может кто угодно.
Но откроется сейф или нет - решает проверка instanceof внутри.
public != "можно всё"
public = "вход виден и доступен"
Суть public вот такая:
*✅ может вызвать клиент
*✅ может вызвать персонал
*✅ может вызвать кто-то из другого магазина
"Встать у входа и попросить" можно, но:
*❌ если ты не управляющий - тебя сразу разворачивают
*❌ private-сейф напрямую трогать нельзя
Таблица доступа:
Клиент:
public:✅
default:❌
protected:❌
private:❌
Персонал этого же ресторана (тот же пакет):
public:✅
default:✅
protected:✅
private:❌
Персонал филиала (другой пакет, но наследник):
public:✅
default:❌
protected:✅
private:❌
Управляющий (дочерний класс):
public:✅
default:✅
protected:✅
private:❌
Сам класс YakinikuShop:
public:✅
default:✅
protected:✅
private:✅
👉 Java Portal
private - только для себя
public - откуда угодно
protected - вроде бы для подклассов?
На самом деле тут всегда начинается каша, если не смотреть на вопрос "откуда и кто вызывает" по двум осям: пакет и наследование.
Чтобы нормально понять модификаторы, я подумал: пусть будет статья с моделью "якинику-ресторан".
Что такое модификаторы на самом деле:
Модификаторы - это не про "силу".
Это правила, откуда можно получить доступ.
В Java доступ всегда определяется двумя вещами:
* тот же пакет?
* есть наследование?
Модель с рестораном якинику:
* YakinikuShop: сам ресторан (родительский класс)
* LocalStaff: персонал этого же ресторана
* Manager: управляющий (дочерний класс)
* BranchStaff: персонал филиала (другой пакет + наследник)
* Customer: обычный клиент
Родительский класс: YakinikuShop.java
package shop;
public class YakinikuShop {
public int counter = 30; // Стойка/места: видно всем
int staffRoom = 10; // Комната персонала: только для своего пакета
protected int kitchen = 20; // Кухня: свой пакет или наследники
private int safeMoney = 100; // Сейф: даже управляющему напрямую нельзя
public void askManagerToOpenSafe(Object person) {
if (!(person instanceof Manager)) {
System.out.println("❌ Только управляющий может открыть сейф");
return;
}
openSafe();
}
private void openSafe() {
System.out.println("open safe: " + safeMoney);
}
}
Почему askManagerToOpenSafe "особенный"
askManagerToOpenSafe - public.
То есть вызвать его может кто угодно.
Но откроется сейф или нет - решает проверка instanceof внутри.
public != "можно всё"
public = "вход виден и доступен"
Суть public вот такая:
*
*
*
"Встать у входа и попросить" можно, но:
*
*
Таблица доступа:
Клиент:
public:
default:
protected:
private:
Персонал этого же ресторана (тот же пакет):
public:
default:
protected:
private:
Персонал филиала (другой пакет, но наследник):
public:
default:
protected:
private:
Управляющий (дочерний класс):
public:
default:
protected:
private:
Сам класс YakinikuShop:
public:
default:
protected:
private:
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔7🔥4👍2
Spring Boot: используй CommandLineRunner, чтобы выполнять логику при старте приложения.
CommandLineRunner это интерфейс Spring Boot. Его можно реализовать, чтобы запускать код после того, как контекст приложения полностью инициализирован.
Некоторые сценарии, где это уместно:
Заполнение БД начальными данными
Запуск health-check’ов при старте
Бутстрап внешних сервисов/ресурсов
Пример:
👉 Java Portal
CommandLineRunner это интерфейс Spring Boot. Его можно реализовать, чтобы запускать код после того, как контекст приложения полностью инициализирован.
Некоторые сценарии, где это уместно:
Заполнение БД начальными данными
Запуск health-check’ов при старте
Бутстрап внешних сервисов/ресурсов
Пример:
@Component
public class StartupRunner implements CommandLineRunner {
@Override
public void run(String... args) {
System.out.println("Приложение запущено! Дальнейшая настройка");
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
21 января(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
📂 Сергей Чамкин, старший разработчик из Uzum, ex-WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Cергей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Сергею
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
❤32🔥11👍4🤣2🏆1
Spring Boot: чтобы при сериализации в Jackson исключать любые поля, у которых значение null, можно использовать аннотацию
Все пустые поля исключаются автоматически.
👉 Java Portal
@JsonInclude(Include.NON_NULL)@JsonInclude(JsonInclude.Include.NON_NULL)
public class UserDTO {
private Long id;
private String name;
private String email;
private String phone;
...
}
Все пустые поля исключаются автоматически.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🤔2
Держи сотни гигабайт свежих уроков, и каждую неделю мы подкидываем ещё!
• 1612 ГБ — DevOps
• 1402 ГБ — Python
• 1300 ГБ — C, C++
• 1815 ГБ — Frontend
• 1515 ГБ — Backend
• 898 ГБ — ИБ, Хакинг
• 996 ГБ — Kotlin, Swift
• 212 ГБ — JavaScript
• 315 ГБ — Flutter
• 820 ГБ — Go, PHP
• 419 ГБ — Java, Rust
• 648 ГБ — GameDev
• 517 ГБ — Windows, Linux
• 998 ГБ — Дизайн (UX/UI)
• 617 ГБ — Нейросети (ML/RL)
• 546 ГБ — БД (SQL & NoSQL)
• 687 ГБ — Аналитика данных
• 115 ГБ — QA-тестирование
Подписывайся и не плати за то, что можно получить бесплатно
Please open Telegram to view this post
VIEW IN TELEGRAM