Видел интересное видео от CTO Zerodha про то, как они масштабировали Postgres с 7+ млн таблиц.
Технология просто выносит мозг, а если копнуть глубже, становится еще веселее:
- синхронщина? не масштабируется, значит выкидываем.
- все в async. тяжелую генерацию отчетов ставим в очередь.
- независимый middleware, которому все равно на базу и на приложение.
- собрали “DungBeetle” на Go: обобщенные, независимые от СУБД HTTP API, чтобы тянуть отчеты из любой базы.
- результаты сливаем в отдельную Results DB, а приложение читает уже оттуда.
Вот так выглядит настоящий масштаб.
Смотреть видео
👉 Java Portal
Технология просто выносит мозг, а если копнуть глубже, становится еще веселее:
- синхронщина? не масштабируется, значит выкидываем.
- все в async. тяжелую генерацию отчетов ставим в очередь.
- независимый middleware, которому все равно на базу и на приложение.
- собрали “DungBeetle” на Go: обобщенные, независимые от СУБД HTTP API, чтобы тянуть отчеты из любой базы.
- результаты сливаем в отдельную Results DB, а приложение читает уже оттуда.
Вот так выглядит настоящий масштаб.
Смотреть видео
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯2
Java tip: Начиная с Java 12 можно использовать
✅ Добавление пробелов:
✅ Удаление пробелов:
👉 Java Portal
String.indent(n), чтобы красиво форматировать многострочные строки, добавляя нужный отступ.n > 0: добавляет n пробелов в начале каждой строки.n < 0: удаляет до n ведущих пробелов из каждой строки.String text = "Text\ncontent";
System.out.println(text.indent(0));
System.out.println(text.indent(4));
System.out.println(text.indent(0));
String text = " Text\n content";
System.out.println(text.indent(-4));
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Скачал Java, написал код, запустил - работает. Можно выдохнуть? 😎
Спойлер: нет.
Потому что завтра нужно будет написать что-то свое, без туториала. И тут выяснится, что public static void main - это для тебя просто магический ритуал, а не код.
❌ Копировать с экрана - не значит понимать.
❌ Выучить 10 уроков на YouTube - не значит стать разработчиком.
❇️ Ребята из Merion Academy (того самого YouTube-канала про IT) на бесплатных вводных уроках по Java разбирают код построчно, чтобы ты не просто копировал, а понимал, что пишешь.
Что внутри:
✔️ Что такое Java и с чем ее едят
✔️ Как настроить среду без боли (чтобы все взлетело с первого раза)
✔️ Разбор синтаксиса построчно - никакой магии
✔️ Как написать свое первое REST API (да, сразу)
➡️ Запишись на бесплатные вводные уроки
Разберись, как Java работает на самом деле.
Спойлер: нет.
Потому что завтра нужно будет написать что-то свое, без туториала. И тут выяснится, что public static void main - это для тебя просто магический ритуал, а не код.
❌ Копировать с экрана - не значит понимать.
❌ Выучить 10 уроков на YouTube - не значит стать разработчиком.
❇️ Ребята из Merion Academy (того самого YouTube-канала про IT) на бесплатных вводных уроках по Java разбирают код построчно, чтобы ты не просто копировал, а понимал, что пишешь.
Что внутри:
✔️ Что такое Java и с чем ее едят
✔️ Как настроить среду без боли (чтобы все взлетело с первого раза)
✔️ Разбор синтаксиса построчно - никакой магии
✔️ Как написать свое первое REST API (да, сразу)
➡️ Запишись на бесплатные вводные уроки
Разберись, как Java работает на самом деле.
Merion Academy
DevOps-инженер с нуля
Стань DevOps-инженером с нуля и научись использовать инструменты и методы DevOps
😁4👍1
This media is not supported in your browser
VIEW IN TELEGRAM
5 часто задаваемых вопросов на собеседованиях по Java Generics.
На сколько из них ты сможешь ответить?
1. В чем разница между
2. В чем разница между
3. В чем разница между
4. Можно ли добавлять элементы в
5. Чем
👉 Java Portal
На сколько из них ты сможешь ответить?
1. В чем разница между
Object<?> и Object в Java?2. В чем разница между
List<?> и List<Object>?3. В чем разница между
List<? extends Number> и List<? super Number>?4. Можно ли добавлять элементы в
List<?>?5. Чем
T отличается от ? в дженериках?Please open Telegram to view this post
VIEW IN TELEGRAM
🤯8❤1
Совет по Spring Boot: со Spring Boot и Spring Security ты можешь легко защитить эндпоинты.
✅ Чтобы защитить следующий REST-эндпоинт:
✅ Можно написать такую конфигурацию:
-
-
-
-
👉 Java Portal
@RestController
public class MyController {
@GetMapping
("/admin")
public String admin() {
...
}
...
}
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin").authenticated()
.anyRequest().permitAll()
.and()
.httpBasic();
}
}
-
authorizeRequests(): начинает описание эндпоинтов, которым нужна защита.-
antMatchers("/admin").authenticated(): требует аутентификацию для /admin.-
anyRequest().permitAll(): все остальные эндпоинты публичные.-
httpBasic(): включает HTTP Basic Auth.Please open Telegram to view this post
VIEW IN TELEGRAM
❤8
Как прогреть кэши в Spring Boot?
Или вообще как выполнить что-то на старте Spring Boot приложения?
Обычно такие операции делают в
Если “прогрев” находится в
Более элегантный способ “прогреть кэши”
Смотри:
Код выглядит как на картинке:
Плюс: В интеграционных тестах с
Когда “прогрев” все-таки нужен в тестах, добавляем параметр
👉 Java Portal
Или вообще как выполнить что-то на старте Spring Boot приложения?
Обычно такие операции делают в
@PostConstruct или подписываются на событие ApplicationReadyEvent. Но у этих вариантов есть заметный минус.Если “прогрев” находится в
@PostConstruct, как отключить его в тестах? Можно добавить флаг, сделать сабкласс и подменить его в тестовой конфигурации, но это не всегда помогает и часто выглядит как костыль.Более элегантный способ “прогреть кэши”
Смотри:
SpringApplication.run(...) возвращает полностью готовый контекст. Можно достать из него компонент и вызвать нужный метод “прогрева”.Код выглядит как на картинке:
Плюс: В интеграционных тестах с
@SpringBootTest метод main не запускается. Соответственно, код внутри него не выполняется. Никаких костылей вокруг @PostConstruct, все чисто и красиво.Когда “прогрев” все-таки нужен в тестах, добавляем параметр
use main method:@SpringBootTest(useMainMethod = SpringBootTest.UseMainMethod.ALWAYS)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4