Когда-то интернет был другим. Возможно, более медленным и нестабильным, но куда более камерным и очаровательным. А его недостатки старались исправить разработчики-энтузиасты, которым было не всё равно.
Этим постом мы запускаем спецпроект «Наши любимые петы». В следующие недели мы продолжим рассказывать про личные проекты яндексоидов. Оставайтесь на связи!
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2🔥2
Когда проект живёт дольше полугода — ручное обновление схемы БД превращается в хаос.
Flyway решает эту проблему: управляет версионированием схемы и миграциями через SQL-скрипты прямо из вашего приложения.
Для настройки:
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
ИЛИ
implementation("org.flywaydb:flyway-core")
Также добавляет драйвер для вашей БД.
По умолчанию Flyway ищет скрипты в:
src/main/resources/db/migration/
Пример:
db/migration/
├─ V1__init_schema.sql
├─ V2__add_users_table.sql
└─ V3__add_index_email.sql
Имена файлов важны — Flyway сортирует их по версии (V1, V2, ...).
— V1__init_schema.sql
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL
);
— V2__add_users_table.sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT now()
);
spring:
datasource:
url: jdbc:postgresql://localhost:5432/app
username: app
password: secret
flyway:
enabled: true
baseline-on-migrate: true
locations: classpath:db/migration
Flyway выполнит все миграции, которых ещё нет в таблице flyway_schema_history.
./mvnw flyway:migrate
или просто запустите Spring Boot — миграции применятся автоматически.
— Используйте flyway:validate перед деплоем.
— Добавляйте новые SQL-файлы при изменении схемы.
— Не редактируйте старые версии (они уже зафиксированы).
— Используйте R__-скрипты (repeatable migrations) для справочников, триггеров, процедур.
— Версионируйте миграции в Git вместе с кодом.
— Проверяйте миграции на чистой базе перед мержем.
— Совмещайте с Testcontainers для автоматической проверки миграций в CI.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4🔥4☃1
🏗 Объектная модель без боли: как превратить хаос требований в стройную архитектуру
📅 11 декабря | 20:00 мск | бесплатно
🎓 На вебинаре разберём:
– Как анализировать бизнес-требования и выделять ключевые сущности
– Как находить связи между объектами и формировать целостную модель системы
– Как использовать UML-диаграммы для визуализации архитектуры
– Типичные ошибки при анализе предметной области и как их избежать
– Практический кейс: создаём объектную модель с нуля
💡 Кому будет полезно:
– Backend и FullStack разработчикам, желающим понимать архитектуру на уровне сущностей и связей
– Системным аналитикам, формализующим требования и сценарии взаимодействия
– Архитекторам, строящим масштабируемые и устойчивые модели систем
– Начинающим инженерам, осваивающим объектно-ориентированный анализ
✅ После вебинара вы сможете:
– Анализировать предметную область и выделять главные сущности
– Строить понятные и расширяемые объектные модели
– Использовать UML-диаграммы для визуализации архитектуры
– Превращать сложные требования в структурированные проектные решения
💥 Регистрируйтесь и научитесь мыслить как архитектор: https://vk.cc/cRTBCg
Занятие приурочено к старту курса «Архитектура и шаблоны проектирования», где вы освоите DDD, CQRS, Event Storming и научитесь превращать требования в надёжную архитектуру, готовую к росту продукта и команды. 🚀
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
📅 11 декабря | 20:00 мск | бесплатно
🎓 На вебинаре разберём:
– Как анализировать бизнес-требования и выделять ключевые сущности
– Как находить связи между объектами и формировать целостную модель системы
– Как использовать UML-диаграммы для визуализации архитектуры
– Типичные ошибки при анализе предметной области и как их избежать
– Практический кейс: создаём объектную модель с нуля
💡 Кому будет полезно:
– Backend и FullStack разработчикам, желающим понимать архитектуру на уровне сущностей и связей
– Системным аналитикам, формализующим требования и сценарии взаимодействия
– Архитекторам, строящим масштабируемые и устойчивые модели систем
– Начинающим инженерам, осваивающим объектно-ориентированный анализ
✅ После вебинара вы сможете:
– Анализировать предметную область и выделять главные сущности
– Строить понятные и расширяемые объектные модели
– Использовать UML-диаграммы для визуализации архитектуры
– Превращать сложные требования в структурированные проектные решения
💥 Регистрируйтесь и научитесь мыслить как архитектор: https://vk.cc/cRTBCg
Занятие приурочено к старту курса «Архитектура и шаблоны проектирования», где вы освоите DDD, CQRS, Event Storming и научитесь превращать требования в надёжную архитектуру, готовую к росту продукта и команды. 🚀
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍3🔥3❤2
Хитрый совет по Java: используй скрытую возможность
ClassLoader для безопасной подгрузки конфигураций и плагинов.Вместо чтения файлов напрямую через
File, загружай ресурсы из classpath — так ты избежишь проблем с путями, правами и разными окружениями.
import java.io.*;
import java.nio.charset.*;
public class ConfigLoader {
public static String load(String name) throws Exception {
try (InputStream in =
ConfigLoader.class.getClassLoader().getResourceAsStream(name)) {
if (in == null) return null;
return new String(in.readAllBytes(), StandardCharsets.UTF_8);
}
}
public static void main(String[] args) throws Exception {
System.out.println(load("config/app.conf"));
}
}
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤4🔥4
3 декабря(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4🔥3
В 2025 году Java продолжает развиваться, и вот на что стоит обратить внимание в учёбе. Роадмапа на картинке, ниже ключевые моменты.
Фокус на record классы (Java 16+), абстракция и полиформизм.
Основной тренд — использование Streams API (Java 8+) и неизменяемых коллекций (Java 9+).
Project Loom и виртуальные потоки (Java 21) упростят многозадачность и повысит производительность.
Расширение использования лямбда-выражений и функциональных интерфейсов.
Активное использование Spring Boot, Spring Cloud, Swagger/OpenAPI для документации.
JUnit 5, Mockito, Testcontainers и инструменты сборки Maven и Gradle для автоматизации.
Знания JDBC, Hibernate, JPA для создания надежных и масштабируемых систем.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍10🔥5
UI и API тестирование с java и playwright - тема бесплатного вебинара от OTUS.
Регистрация: https://vk.cc/cRW5WM
Фреймворк playwright изо дня в день набирает популярность на рынке и многие команды начинают задумываться о его внедрении для написания UI и API автотестов. На занятии поговорим о самом фреймворке и почему он набирает популярность и напишем пару UI и API автотестов.
После занятия ты:
- поймёшь, как работает Playwright и чем он удобен для тестировщика;
- сможешь написать и запустить простые UI и API автотесты;
- получишь представление, как внедрять Playwright в реальный проект.
Регистрация и подробности о курсе: https://vk.cc/cRW5WM
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Регистрация: https://vk.cc/cRW5WM
Фреймворк playwright изо дня в день набирает популярность на рынке и многие команды начинают задумываться о его внедрении для написания UI и API автотестов. На занятии поговорим о самом фреймворке и почему он набирает популярность и напишем пару UI и API автотестов.
После занятия ты:
- поймёшь, как работает Playwright и чем он удобен для тестировщика;
- сможешь написать и запустить простые UI и API автотесты;
- получишь представление, как внедрять Playwright в реальный проект.
Регистрация и подробности о курсе: https://vk.cc/cRW5WM
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤3🔥3👍2
В Spring Boot можно перехватывать ошибки на этапе запуска и превращать их в понятные человеку сообщения. Для этого создан механизм FailureAnalyzer.
Зачем он нужен
- улучшает диагностику на старте приложения
- помогает быстро находить причины конфигурационных ошибок
- делает логирование чище и понятнее
Как работает
Вы создаёте свой класс, который анализирует исключение и возвращает читаемое описание проблемы и советы по исправлению.
Под капотом Spring Boot автоматически подцепит ваш анализатор и покажет дружелюбное сообщение вместо сырого stacktrace.
Документация
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍5🔥5
Всё ещё запускаете проект мышкой? Тогда этот пост для вас.
На самом деле IDEA умеет стартовать, дебажить и останавливать приложение полностью без кликов мышью. После пары дней привычки вы забудете, где находится зелёная кнопка ▶️.
— Позволяет запускать и останавливать проект, не касаясь мыши
— Работает с любыми конфигурациями: Application, Maven, Gradle, Spring Boot и др.
— Поддерживает горячий перезапуск (rerun) и мгновенный переход к дебагу
— Ускоряет цикл “правка → запуск → проверка”
— Позволяет фокусироваться на коде, не отвлекаясь на интерфейс
— Особенно удобно при работе на ноутбуке или в tmux-подобном флоу
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14☃5❤4🔥3🎅2
This media is not supported in your browser
VIEW IN TELEGRAM
VK RecSys Challenge: проверьте свой алгоритм в деле!
В самом разгаре ежегодное соревнование по разработке рекомендательных систем от VK — RecSys Challenge 2025. Участникам предстоит решить одну из самых сложных проблем в мире рекомендаций: задачу холодного старта.
Суть соревнования — построить модель, которая предскажет, кому из пользователей понравится новый клип, даже если его ещё никто не видел.
Что ждёт участников:
• Реальные данные — датасет VK-LSVD с 40 млрд взаимодействий и 20 млн коротких видео
• Можно участвовать соло или в команде до 4 человек
• Техническая свобода — до 5 сабмитов в день, возможность экспериментировать
• Общий призовой фонд — 2 500 000 рублей
Приглашают студентов, исследователей, ML-инженеров — всех, кто хочет испытать свои силы на реальных данных и создать алгоритм, который работает в условиях, максимально приближенных к контентной жизни.
Регистрация открыта до 15 декабря. Успейте подать заявку, скачать датасет и начать эксперименты!
👉 Подробности и регистрация на сайте
Реклама. ООО "ВК" ИНН 7743001840
В самом разгаре ежегодное соревнование по разработке рекомендательных систем от VK — RecSys Challenge 2025. Участникам предстоит решить одну из самых сложных проблем в мире рекомендаций: задачу холодного старта.
Суть соревнования — построить модель, которая предскажет, кому из пользователей понравится новый клип, даже если его ещё никто не видел.
Что ждёт участников:
• Реальные данные — датасет VK-LSVD с 40 млрд взаимодействий и 20 млн коротких видео
• Можно участвовать соло или в команде до 4 человек
• Техническая свобода — до 5 сабмитов в день, возможность экспериментировать
• Общий призовой фонд — 2 500 000 рублей
Приглашают студентов, исследователей, ML-инженеров — всех, кто хочет испытать свои силы на реальных данных и создать алгоритм, который работает в условиях, максимально приближенных к контентной жизни.
Регистрация открыта до 15 декабря. Успейте подать заявку, скачать датасет и начать эксперименты!
👉 Подробности и регистрация на сайте
Реклама. ООО "ВК" ИНН 7743001840
❤3👍3🔥3
Хочешь контролировать, сколько раз может стартовать конкретный шаг в Spring Batch? Используй параметр startLimit — он задаёт максимальное число запусков для step'а.
Полезно для случаев с повторными попытками, защитой от бесконечного рестарта и строгим контролем бизнес-логики.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥2
В видеопроекте Road to Highload Дмитрий Кривопальцев, тимлид бэкенда Яндекс Диска, рассказывает, как избежать проблем при взаимодействии со смежными системами.
Поговорим о типичных сложностях, с которыми сталкиваются команды при интеграции с внешними сервисами, и о том, как их предотвратить или минимизировать.
Road to Highload — это цикл видео от Яндекс 360 о том, как строятся системы, которыми ежедневно пользуются миллионы людей и тысячи компаний. Здесь говорят о highload и отказоустойчивости не по учебникам, а на основе многолетнего опыта разработки.
Смотрите проект, чтобы узнать, как создаются одни из крупнейших облачных сервисов в России:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥3👍2
Forwarded from Java Guru 🤓
Что будет результатом запуска и обращения на /orders?
Anonymous Quiz
8%
4xx Ошибка
12%
5хх Ошибка
67%
Ошибка компиляции
13%
RuntimeException
👍7☃2❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Когда между идеей и продом — преград нет!
В VK любят решать сложные и масштабные задачи, а ещё — быстро реализовывать идеи. Компания рассказала, каких принципов придерживается команда в работе и какими результатами гордится. Переходите по ссылке, там много интересного!
В VK любят решать сложные и масштабные задачи, а ещё — быстро реализовывать идеи. Компания рассказала, каких принципов придерживается команда в работе и какими результатами гордится. Переходите по ссылке, там много интересного!
5❤4😁4👍2🔥2
Многие недооценивают, насколько ArrayList может быть узким местом в производительности, особенно при работе с большими объёмами данных. Разберём, как оптимизировать его использование 👇
⚙️ Указывайте ёмкость при создании
По умолчанию:
List<String> list = new ArrayList<>();
ArrayList начинает с небольшой ёмкости (10 элементов) и каждый раз увеличивается в 1.5 раза, когда не хватает места. Это вызывает множество копирований массива, что замедляет работу при миллионах элементов.
List<String> list = new ArrayList<>(1_000_000);
Если вы знаете (или можете оценить) количество элементов заранее — выделите память сразу. Это уменьшает количество realocations и экономит до 30–40% времени при массовых вставках.
🧠 Очищайте, а не пересоздавайте
Многие делают так:
list = new ArrayList<>();
Это создаёт новый объект и выбрасывает старый в GC. При частых операциях — GC начинает тормозить систему.
list.clear();
Если список используется повторно, очистка быстрее и не требует новой аллокации памяти.
Удаление элементов в цикле вручную — частая и дорогая ошибка.
Плохо:
for (String s : list) {
if (s.startsWith("A")) list.remove(s);
}Даже если использовать Iterator, это безопасно, но медленно — каждый вызов remove() сдвигает все последующие элементы (O(n) на удаление).
list.removeIf(s -> s.startsWith("A"));Метод removeIf оптимизирован под внутренние операции и работает быстрее при массовом удалении.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25❤10🔥6
Objects.requireNonNullElse(value, defaultValue), чтобы избавиться от ручных проверок на null.Это делает код чище, короче и безопаснее.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥5❤2🎅1
Keycloak — это современный open-source Identity Provider от Red Hat, который часто используется в enterprise-проектах для SSO (Single Sign-On), OAuth2 и OpenID Connect. Ниже — пошаговая настройка интеграции Keycloak с Spring Boot 3 и Spring Security 6.
Проверьте, что в проекте есть или добавьте следующие зависимости:
— Spring Web
— Spring Security
— OAuth2 Resource Server
— OAuth2 Client
Запустите Keycloak через Docker:
docker run -d \
-p 8080:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:25.0.2 start-dev
После запуска откройте http://localhost:8080, войдите под admin/admin и создайте realm, например demo-realm.
В разделе Clients → Create client укажите:
— Client ID: spring-client
— Client Protocol: openid-connect
— Root URL: http://localhost:8081
В разделе Settings:
— Установите Access Type → confidential
— Включите Standard Flow Enabled
— Укажите Redirect URI: http://localhost:8081/login/oauth2/code/keycloak
Сохраните и перейдите на вкладку Credentials — скопируйте Client Secret.
server:
port: 8081
spring:
security:
oauth2:
client:
registration:
keycloak:
client-id: spring-client
client-secret: YOUR_CLIENT_SECRET
scope: openid, profile, email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
provider:
keycloak:
issuer-uri: http://localhost:8080/realms/demo-realm
Настройте SecurityConfig.java:
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/", "/public").permitAll()
.anyRequest().authenticated()
)
.oauth2Login(Customizer.withDefaults())
.logout(logout -> logout
.logoutSuccessUrl("/")
.invalidateHttpSession(true)
);
return http.build();
}
}
🧠 Зачем это нужно:
Keycloak снимает с вас головную боль по хранению паролей, управлению ролями и сессиями. Он интегрируется с LDAP, AD, SAML и десятками внешних OAuth-провайдеров.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥5❤4