Java Portal | Программирование
12.7K subscribers
1.24K photos
104 videos
38 files
1.2K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Java tip : старайся не шарить данные между потоками.

Используй иммутабельные объекты
Либо пусть потоки общаются через сообщения, не трогая общий state напрямую и не мутируя shared-состояние

// С иммутабельными объектами:

record Book(String title, int price) {} // Иммутабельный

public class BookJob implements Runnable {
private final Book book;
.... // конструктор

@Override
public void run() {
System.out.println(book.title() + " " + book.price());
}
}

// Обмен сообщениями:

...
new Thread(() -> {
try {
queue.put("mess1");
} catch (InterruptedException e) {}
}).start();

...
new Thread(() -> {
try {
String mess = queue.take();
} catch (InterruptedException e) {}
}).start();


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
1🌚1
Какой SQL-запрос будет выполнен при вызове метода findByEmail()?

1. SELECT * FROM users WHERE email LIKE ?

2. SELECT id, name, email FROM users WHERE email LIKE ?

3. SELECT * FROM users WHERE email = ? LIMIT 1

4. SELECT * FROM users WHERE email = ?

5. SELECT * FROM users WHERE email = email

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Spring Boot: используй @SpringBootApplication(exclude = …), чтобы отключить конкретные классы автоконфигурации.

Одна из возможных причин: кастомная конфигурация конфликтует с дефолтной.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
java.evolved это подборка, где каждый старый паттерн из Java показан рядом с его современным заменителем, прямо бок о бок.

👍👍👍

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥2
Совет по Spring Boot: если тебе нужны интеграционные тесты для контроллеров Spring MVC, а всё остальное ты хочешь замокать, используй @WebMvcTest — он поднимет только MVC-бины (контроллеры, конфиг MVC, конвертеры, валидацию и т.п.), без полного контекста приложения.

▪️Он грузит только MVC-бины, а не весь application context целиком.

▪️Интеграционные тесты медленнее юнитов, поэтому их стоит ускорять, выкидывая все лишнее, что не нужно конкретно для MVC.

▪️В этом примере мы мокaем бин HelloService и поднимаем только MVC-контекст и сам контроллер:

@WebMvcTest(HelloController.class)
class HelloControllerTest {

@Autowired
private MockMvc mockMvc;

@MockBean
private HelloService helloService; // замокано

@Test
void sayHello_returnsExpectedMessage() throws Exception {
given(helloService.getMessage()).willReturn("Hello!");
mockMvc.perform(get("/api/hello"))
.andExpect(status().isOk())
.andExpect(content().string("Hello!"));
}
}


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Пожизненная PRO-подписка на easyoffer по цене одного года.

Беспрецедентная акция на PRO-тариф сайта для подготовки к собеседованию на программиста, тестировщика, проектного менеджера и другие IT-профессии.

⚙️ Доступные функции сейчас:
1. База вопросов из реальных технических собеседований с вероятностью встречи и примерами ответов.
2. База задач с этапа live-coding.
3. База 1100+ реальных собеседований, в том числе в топовые компании (Сбер, Авито, Яндекс, WB, OZON, МТС и др.) на позиции Junior/Middle/Senior.
4. База 400+ тестовых заданий от компаний.
5. Аналитика ТОП-требований из вакансий для лучшего написания резюме по ключевым словам.
6. Тренажеры для подготовки к собеседованию. В том числе тренажер «Реальное собеседование» со сценарием вопросов под конкретную компанию.

⌛️ Функции, которые появятся в ближайшие полгода:
1. Агрегатор вакансий из Telegram, сайтов компаний и джоббордов.
2. Улучшение и оптимизация резюме, чтобы проходить ATS-системы.
3. Генерация уникального резюме и сопроводительного письма под вакансию.

Акция до 20 февраля (включительно) на PRO-тариф. Покупаешь сейчас один раз — пользуешься всю жизнь без лимита, включая все будущие функции.

👉 Смотри подробности тарифа и покупай на easyoffer
🤣5💊1
Spring Boot: Используй ResponseEntity<T>, чтобы получить тонкий контроль над HTTP-ответом.

Можно явно задать status, headers и body.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Вопрос для интервью по Spring Boot:

Когда ты делаешь REST API в Spring Boot, часто используют префикс /api для всех контроллеров.
Но добавлять @RequestMapping("/api") в каждый контроллер неудобно и захламляет код.

Есть ли способ проще, чтобы не писать это на каждом контроллере?

Да: можно задать единый префикс через конфигурацию.

@Configuration
class WebMvcConfig implements WebMvcConfigurer {

@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.addPathPrefix("/api",
aClass -> aClass.getPackage().getName()
.startsWith("com.sivalabs.bookstore"));
}
}


Так ты автоматически добавляешь /api ко всем контроллерам из нужного пакета, а код контроллеров остается чистым.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
Java Stream API Evolution (с Java 8 до Java 21).

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