Варианты ответа:
Anonymous Quiz
14%
2, false, false
14%
2, false, true
29%
2, true, false
43%
Ошибка выполнения
👍4
Вопрос с собеседований
Что такое CountDownLatch?🤓
Ответ:
CountDownLatch — это синхронизатор, который блокирует выполнение потоков до тех пор, пока счётчик не станет 0.
Потоки вызывают countDown(), уменьшая счётчик, а другие ждут через await().
Используется для ожидания завершения задач.
#собеседование
Что такое CountDownLatch?
Ответ:
CountDownLatch
Потоки вызывают countDown(), уменьшая счётчик, а другие ждут через await().
Используется для ожидания завершения задач.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Джонатан Брюс По́стел (англ. Jonathan Bruce Postel; 6 августа 1943, Алтадина, Калифорния — 16 октября 1998, Санта-Моника, Калифорния) — американский учёный в области компьютерных наук, один из основных авторов сетевых протоколов, применяемых в сети Интернет: IP, ICMP, TCP, UDP, Telnet, FTP, DNS. В общей сложности участвовал в создании около двухсот RFC.
Не нашел)
#Biography #Birth_Date #Events #16Октября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Реактивное программирование
Введение в Spring WebFlux
Spring WebFlux — это часть Spring Framework, предназначенная для создания неблокирующих, асинхронных веб-приложений. Он основан на Project Reactor и Reactive Streams API, что позволяет использовать Mono и Flux прямо в коде сервера. Это не замена Spring MVC (традиционному веб-фреймворку), а альтернатива для сценариев с высокой нагрузкой: микросервисы, реальное время, стриминг. Почему это новый подход? В традиционном веб (как Servlet с потоками на запрос) под пиковой нагрузкой сервер исчерпывает ресурсы — каждый запрос занимает поток, который висит в ожидании IO. WebFlux меняет это: использует event-loop (цикл обработки событий), где один поток обслуживает тысячи подключений, реагируя на события асинхронно. Это экономит CPU и память, делая приложения более отзывчивыми и масштабируемыми.
Почему Spring WebFlux: связь с реактивным мышлением
WebFlux воплощает принципы, которые мы разбирали: push-модель, где данные отправляются по готовности; обратное давление для контроля темпа; операторы для трансформаций. В экосистеме Spring он интегрируется с другими компонентами: Spring Boot для быстрого старта, Spring Data Reactive для баз данных (как R2DBC), Spring Security Reactive для безопасности. Ключевой выигрыш — для IO-bound задач: запросы к БД, API или файлам идут асинхронно, без блокировок. Если ваш сервис ждёт внешних ответов 90% времени, WebFlux высвобождает ресурсы, позволяя обрабатывать в 10-100 раз больше запросов на том же железе.
Чтобы начать: добавьте spring-boot-starter-webflux в зависимости (Maven/Gradle). Spring Boot автоматически настроит Reactor Netty как сервер (неблокирующий HTTP на базе Netty). Нет нужды в Tomcat — всё реактивно.
Ключевые компоненты Spring WebFlux
WebFlux предлагает два стиля разработки: аннотированный (похож на Spring MVC) и функциональный (роутеры как в Express.js). Оба используют Mono/Flux для ответов.
- Аннотированные контроллеры: @RestController с методами, возвращающими Mono или Flux.
Пример простого GET:
- Функциональные роутеры: Для маршрутизации без контроллеров.
Пример:
- WebClient: реактивный клиент для исходящих запросов, интегрируется seamlessly.
Ещё фишки: поддержка WebSockets для bidirectional стриминга, Server-Sent Events для push-уведомлений, интеграция с Schedulers для распределения задач.
Практические советы и подводные камни
- Миграция: Начните с аннотированных контроллеров — синтаксис похож на MVC, но возвращайте Mono/Flux.
- Тестирование: WebTestClient вместо MockMvc — асинхронные тесты с StepVerifier (из Reactor).
- Камень: Блокирующий код в контроллерах (JDBC, sleep) сломает асинхронность — используйте reactive драйверы (R2DBC) и publishOn(Schedulers.boundedElastic()).
- Производительность: Под нагрузкой мониторьте с Micrometer — WebFlux даёт метрики из коробки.
В реальной жизни: Netflix использует похожий стек для стриминга, где WebFlux обрабатывает миллионы подключений.
#Java #middle #Reactor #WebFlux
Введение в Spring WebFlux
Spring WebFlux — это часть Spring Framework, предназначенная для создания неблокирующих, асинхронных веб-приложений. Он основан на Project Reactor и Reactive Streams API, что позволяет использовать Mono и Flux прямо в коде сервера. Это не замена Spring MVC (традиционному веб-фреймворку), а альтернатива для сценариев с высокой нагрузкой: микросервисы, реальное время, стриминг. Почему это новый подход? В традиционном веб (как Servlet с потоками на запрос) под пиковой нагрузкой сервер исчерпывает ресурсы — каждый запрос занимает поток, который висит в ожидании IO. WebFlux меняет это: использует event-loop (цикл обработки событий), где один поток обслуживает тысячи подключений, реагируя на события асинхронно. Это экономит CPU и память, делая приложения более отзывчивыми и масштабируемыми.
Почему Spring WebFlux: связь с реактивным мышлением
WebFlux воплощает принципы, которые мы разбирали: push-модель, где данные отправляются по готовности; обратное давление для контроля темпа; операторы для трансформаций. В экосистеме Spring он интегрируется с другими компонентами: Spring Boot для быстрого старта, Spring Data Reactive для баз данных (как R2DBC), Spring Security Reactive для безопасности. Ключевой выигрыш — для IO-bound задач: запросы к БД, API или файлам идут асинхронно, без блокировок. Если ваш сервис ждёт внешних ответов 90% времени, WebFlux высвобождает ресурсы, позволяя обрабатывать в 10-100 раз больше запросов на том же железе.
Чтобы начать: добавьте spring-boot-starter-webflux в зависимости (Maven/Gradle). Spring Boot автоматически настроит Reactor Netty как сервер (неблокирующий HTTP на базе Netty). Нет нужды в Tomcat — всё реактивно.
Ключевые компоненты Spring WebFlux
WebFlux предлагает два стиля разработки: аннотированный (похож на Spring MVC) и функциональный (роутеры как в Express.js). Оба используют Mono/Flux для ответов.
- Аннотированные контроллеры: @RestController с методами, возвращающими Mono или Flux.
Пример простого GET:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
@RestController
public class HelloController {
@GetMapping("/hello")
public Mono<String> hello() {
return Mono.just("Привет из WebFlux!"); // Асинхронный ответ
}
}
Здесь метод возвращает Mono — сервер не блокируется, ответ "течёт" асинхронно. Для Flux: стриминг данных, как SSE (сервер-сент события).
- Функциональные роутеры: Для маршрутизации без контроллеров.
Пример:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerResponse;
@Configuration
public class RouterConfig {
@Bean
public RouterFunction<ServerResponse> routes() {
return RouterFunctions.route()
.GET("/hello", request -> ServerResponse.ok().bodyValue("Привет из роутера!"))
.build();
}
}
Это декларативно: опишите маршруты, обработчики возвращают ServerResponse с Mono/Flux.
- WebClient: реактивный клиент для исходящих запросов, интегрируется seamlessly.
Ещё фишки: поддержка WebSockets для bidirectional стриминга, Server-Sent Events для push-уведомлений, интеграция с Schedulers для распределения задач.
Практические советы и подводные камни
- Миграция: Начните с аннотированных контроллеров — синтаксис похож на MVC, но возвращайте Mono/Flux.
- Тестирование: WebTestClient вместо MockMvc — асинхронные тесты с StepVerifier (из Reactor).
- Камень: Блокирующий код в контроллерах (JDBC, sleep) сломает асинхронность — используйте reactive драйверы (R2DBC) и publishOn(Schedulers.boundedElastic()).
- Производительность: Под нагрузкой мониторьте с Micrometer — WebFlux даёт метрики из коробки.
В реальной жизни: Netflix использует похожий стек для стриминга, где WebFlux обрабатывает миллионы подключений.
#Java #middle #Reactor #WebFlux
👍1
Что выведет код?
#Tasks
public class Task161025 {
public static void main(String[] args) {
String s1 = "hello";
String s2 = new String("hello").intern();
String s3 = "he" + "llo";
String s4 = new String("hello");
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s1 == s4);
System.out.println(s2 == s4);
}
}
#Tasks
Варианты ответа:
Anonymous Quiz
0%
true false true false
27%
false true false true
27%
true true true false
47%
true true false false
Вопрос с собеседований
Что такое Stop-The-World?🤓
Ответ:
Stop-The-World — это пауза, во время которой JVM останавливает все потоки для выполнения сборки мусора или других операций.
Даже при многопоточности приложение «замораживается».
Современные GC (G1, ZGC, Shenandoah) минимизируют эти паузы.
#собеседование
Что такое Stop-The-World?
Ответ:
Stop-The-World
Даже при многопоточности приложение «замораживается».
Современные GC (G1, ZGC, Shenandoah) минимизируют эти паузы.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1