Please open Telegram to view this post
VIEW IN TELEGRAM
😁22💯3🔥1😢1
🔥 На рынке сейчас математика — снова король: AI растёт быстрее, чем вузы успевают обновлять программы. Мы же перестраиваем курс под индустрию мгновенно.
Хочешь наконец разобраться в математике для DS, а не гуглить «что такое градиент» перед собесом?
Новый курс «Математика для разработки AI-моделей» — это 8 недель плотной подготовки, свежая программа и только актуальные темы, которые реально нужны в ML.
Что в курсе:
→ линал, производные, градиенты, вероятности, статистика;
→ практика на Python и 3 большие ДЗ;
→ живые вебинары + разбор ваших вопросов;
→ финальный мини-проект, который можно положить в портфолио;
→ доступ к материалам и чат с экспертами.
Для старта нужны только школьная математика и базовый Python.
🎁 Бонусы ноября:
— скидка 40% до 30 ноября;
— «Базовая математика» в подарок при оплате;
→ бесплатный тест уровня математики.
👉 Записывайся на курс
Хочешь наконец разобраться в математике для DS, а не гуглить «что такое градиент» перед собесом?
Новый курс «Математика для разработки AI-моделей» — это 8 недель плотной подготовки, свежая программа и только актуальные темы, которые реально нужны в ML.
Что в курсе:
→ линал, производные, градиенты, вероятности, статистика;
→ практика на Python и 3 большие ДЗ;
→ живые вебинары + разбор ваших вопросов;
→ финальный мини-проект, который можно положить в портфолио;
→ доступ к материалам и чат с экспертами.
Для старта нужны только школьная математика и базовый Python.
🎁 Бонусы ноября:
— скидка 40% до 30 ноября;
— «Базовая математика» в подарок при оплате;
→ бесплатный тест уровня математики.
👉 Записывайся на курс
Проблема: Вы знаете, что код работал неделю назад, но сейчас есть баг. За это время было 50+ коммитов. Как найти тот, который всё сломал?
Эта команда работает как детектив — использует бинарный поиск по истории коммитов, чтобы за несколько шагов найти проблемный коммит. Вместо проверки всех 50 коммитов вручную, вы проверите всего 5-6!
git bisect start
git bisect bad # текущий коммит с багом
git bisect good abc123 # старый рабочий коммит
Git переключит вас на средний коммит. Проверьте код и скажите:
git bisect good # если баг отсутствует
git bisect bad # если баг есть
git bisect reset # вернётесь в исходное состояние
В итоге 50 коммитов проверите за 6 шагов вместо 50! 🚀
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍5❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁33🔥4💯4🥰1😢1
🎄 Скоро Новый год, а ты всё ещё не в бигтехе?
Если твой путь лежит в ML, DS или AI, то одна вещь решает всё: математика. Без неё — хоть три проекта сделай, хоть сотню туториалов посмотри — на собесе тебя всё равно вернут на «а что такое градиент?»
🔥 Экспресс-курс «Математика для разработки AI-моделей» — 8 недель, чтобы закрыть базу раз и навсегда.
Что внутри:
🔘 живые вебинары, где можно задавать вопросы экспертам
🔘 записи лекций + доступ к материалам
🔘 практические задания на Python и финальный мини-проект с фидбеком
🔘 программа обновлена в ноябре 2025
🔘 2 месяца только нужного — без воды
🔘 достаточно школьной математики и базового Python
🎁 Бонусы ноября:
→ 40% скидка до 30 ноября
→ при оплате до конца месяца — курс «Базовая математика» в подарок
→ бесплатный тест, чтобы узнать свой уровень математики
👉 Хочу стартовать
Если твой путь лежит в ML, DS или AI, то одна вещь решает всё: математика. Без неё — хоть три проекта сделай, хоть сотню туториалов посмотри — на собесе тебя всё равно вернут на «а что такое градиент?»
🔥 Экспресс-курс «Математика для разработки AI-моделей» — 8 недель, чтобы закрыть базу раз и навсегда.
Что внутри:
🔘 живые вебинары, где можно задавать вопросы экспертам
🔘 записи лекций + доступ к материалам
🔘 практические задания на Python и финальный мини-проект с фидбеком
🔘 программа обновлена в ноябре 2025
🔘 2 месяца только нужного — без воды
🔘 достаточно школьной математики и базового Python
🎁 Бонусы ноября:
→ 40% скидка до 30 ноября
→ при оплате до конца месяца — курс «Базовая математика» в подарок
→ бесплатный тест, чтобы узнать свой уровень математики
👉 Хочу стартовать
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Abstract Factory — это
Простыми словами:
▪️ Пример:
// Абстрактные продукты
interface EmailSender {
void send(String to, String message);
}
interface SmsSender {
void send(String phone, String message);
}
// Абстрактная фабрика
interface NotificationFactory {
EmailSender createEmailSender();
SmsSender createSmsSender();
}
// AWS реализация
class AwsEmailSender implements EmailSender {
public void send(String to, String message) {
System.out.println("Отправка через AWS SES: " + to);
}
}
class AwsSmsSender implements SmsSender {
public void send(String phone, String message) {
System.out.println("Отправка через AWS SNS: " + phone);
}
}
class AwsNotificationFactory implements NotificationFactory {
public EmailSender createEmailSender() {
return new AwsEmailSender();
}
public SmsSender createSmsSender() {
return new AwsSmsSender();
}
}
// Аналогично FirebaseNotificationFactory...
// Использование
NotificationFactory factory = new AwsNotificationFactory();
EmailSender email = factory.createEmailSender();
SmsSender sms = factory.createSmsSender();
// Гарантия: оба сервиса работают через AWS
▪️ В чем отличие от Factory Method
— Factory Method создает
— Abstract Factory создает
▪️ Когда использовать
▪️ Минус
#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3👏1
Вместо простого full-text search, вы получаете мощную аналитическую платформу с real-time индексацией.
Spring Data Elasticsearch даёт полный набор возможностей: собственные анализаторы текста, агрегаты для аналитики и сводных выборок, подсветку найденных терминов, поиск с учётом опечаток, геозапросы по координатам, декларативный конструктор запросов, управление жизненным циклом индекса, поиск между несколькими кластерами, создание снимков и восстановление данных для резервного копирования, а также наблюдение и метрики через панели мониторинга в Kibana.
📝 Промпт:
Implement advanced Elasticsearch integration for Spring Boot 3 application:
— Configure Spring Data Elasticsearch: connection settings (cluster nodes, port 9200), RestHighLevelClient configuration, authentication (username/password or API key), SSL/TLS for secure connection, connection pool tuning (max connections, timeout).
— Create document mappings: @Document with index name and settings, @Field with type (text, keyword, date, nested), custom analyzers (standard, whitespace, ngram for autocomplete), tokenizers and filters, multi-field mappings for text/keyword.
— Implement repository layer: extend ElasticsearchRepository, custom query methods with naming conventions (findByTitleContaining), @Query annotation with JSON DSL, native search queries with NativeSearchQuery, pagination with Pageable.
— Add full-text search: multi-match queries across fields, boosting for relevance tuning (title^3, description^1), phrase matching, fuzzy search for typos (fuzziness=AUTO), highlighting with <em> tags, minimum_should_match parameter.
— Configure aggregations: terms aggregation for faceting, date histogram for time-based analytics, metrics (avg, sum, min, max), nested aggregations, bucket sorting, pipeline aggregations for calculations.
— Implement geo-spatial search: geo_point field type, geo_distance queries for radius search, geo_bounding_box for area search, geo_shape for complex polygons, distance sorting.
— Set up index management: index templates for consistent settings, index aliases for zero-downtime reindexing, ILM policies (hot/warm/cold/delete phases), rollover based on size/age, shrink for optimization.
— Add bulk operations: bulk indexing with BulkRequest for performance, batch size tuning (1000-5000 docs), refresh strategy (wait_for or async), error handling for partial failures, bulk processor with backoff.
— Configure search optimization: query cache for repeated queries, field data cache for aggregations/sorting, request cache for size=0 aggregation queries, index refresh interval (1s default, increase for write-heavy), force merge for read-only indices.
— Implement monitoring: cluster health API (green/yellow/red), node stats (JVM heap, disk usage), index stats (doc count, size), slow log for query/indexing analysis, Kibana dashboards with visualizations, alerting with Watcher.
Deliverables: ElasticsearchConfig.java, document entity classes with @Document, repository interfaces, search service with query builders, index templates JSON, ILM policies, Kibana dashboard exports, integration tests with Testcontainers
— добавить learning to rank with LTR plugin;
— реализовать semantic search with dense vectors;
— настроить cross-cluster replication
🤌 Бонусы для подписчиков:
— Скидка 40% на все курсы Академии
— Розыгрыш Apple MacBook
— Бесплатный тест на знание математики
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁14💯3❤2🔥1
👀 Внутреннее устройство Map.computeIfAbsent()
computeIfAbsent() — это не просто «get или put». Это атомарная операция с ленивым вычислением, которая решает классическую проблему check-then-act в многопоточном коде.
📦 Что такое computeIfAbsent()
— Поведение
1. Если ключ существует и value != null → вернуть value
2. Если ключа нет или value == null → вызвать mappingFunction
3. Результат функции put в map
4. Вернуть computed value
— Классический use case:
🔍 Упрощённый код из JDK:
📊 Performance
Benchmark: 1M операций
✅ Делайте
— Используйте для lazy initialization
— Используйте ConcurrentHashMap для thread-safety
— Держите mappingFunction быстрым и простым
❌ Не делайте
— Не вызывайте computeIfAbsent рекурсивно на том же ключе
— Не модифицируйте map внутри mappingFunction
— Не возвращайте null если хотите кэшировать отсутствие
— Не используйте для побочных эффектов (только для вычисления value)
🔗 Документация
Ставьте 🔥, если интересны другие Map методы!
✨ Бонусы для подписчиков:
— Скидка 40% на все курсы Академии
— Розыгрыш Apple MacBook
— Бесплатный тест на знание математики
🐸 Библиотека джависта
#CoreJava
computeIfAbsent() — это не просто «get или put». Это атомарная операция с ленивым вычислением, которая решает классическую проблему check-then-act в многопоточном коде.
📦 Что такое computeIfAbsent()
— Поведение
1. Если ключ существует и value != null → вернуть value
2. Если ключа нет или value == null → вызвать mappingFunction
3. Результат функции put в map
4. Вернуть computed value
— Классический use case:
// ❌ Старый способ — race condition!
if (!map.containsKey(key)) {
map.put(key, expensiveOperation());
}
// ✅ Новый способ — атомарно
map.computeIfAbsent(key, k -> expensiveOperation());
🔍 Упрощённый код из JDK:
public V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) {
if (mappingFunction == null)
throw new NullPointerException();
int hash = hash(key);
Node<K,V>[] tab = table;
Node<K,V> first = tab[index];
// Поиск существующего entry
if (first != null) {
Node<K,V> e = first;
do {
if (e.hash == hash &&
Objects.equals(key, e.key)) {
V v = e.value;
if (v != null) {
return v; // Найден, не вызываем функцию!
}
}
} while ((e = e.next) != null);
}
// Ключа нет — вызов mappingFunction
V newValue = mappingFunction.apply(key);
if (newValue != null) {
putVal(hash, key, newValue, true, true);
}
return newValue;
}
📊 Performance
Benchmark: 1M операций
// Старый способ: containsKey + put
if (!map.containsKey(key)) {
map.put(key, new ArrayList<>());
}
// Time: ~45ms, 2 hash lookups
// computeIfAbsent
map.computeIfAbsent(key, k -> new ArrayList<>());
// Time: ~30ms, 1 hash lookup
computeIfAbsent() на 33% быстрее!
✅ Делайте
— Используйте для lazy initialization
— Используйте ConcurrentHashMap для thread-safety
— Держите mappingFunction быстрым и простым
❌ Не делайте
— Не вызывайте computeIfAbsent рекурсивно на том же ключе
— Не модифицируйте map внутри mappingFunction
— Не возвращайте null если хотите кэшировать отсутствие
— Не используйте для побочных эффектов (только для вычисления value)
Ставьте 🔥, если интересны другие Map методы!
✨ Бонусы для подписчиков:
— Скидка 40% на все курсы Академии
— Розыгрыш Apple MacBook
— Бесплатный тест на знание математики
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍4❤3👏1
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Хочешь строить свои AI-модели, а не просто запускать чужие?
Proglib.academy открывает курс «Математика для разработки AI-моделей» — программу, которая превращает понимание ML из «черного ящика» в осознанную инженерную работу.
📌 Почему без математики в AI никуда:
→ Чтобы пройти собеседование. Это первый фильтр: линал, матстат, оптимизация — спрашивают везде.
→ Чтобы понимать процесс изнутри. Инженер AI должен понимать, почему и как работает модель, а не просто жать fit().
🎓 Что будет на курсе:
→ 3 практических задания на Python + финальный проект с разбором от специалистов;
→ программа обновлена в ноябре 2025;
→ за 2 месяца пройдёшь весь фундамент, нужный для работы с моделями;
→ преподаватели — гуру математики, методисты и исследователи из ВШЭ и индустрии.
🎁 Бонусы ноября:
— 40% скидка;
— получаешь курс «Школьная математика» в подарок;
— короткий тест и узнать свой уровень.
🔗 Подробнее о курсе
Proglib.academy открывает курс «Математика для разработки AI-моделей» — программу, которая превращает понимание ML из «черного ящика» в осознанную инженерную работу.
📌 Почему без математики в AI никуда:
→ Чтобы пройти собеседование. Это первый фильтр: линал, матстат, оптимизация — спрашивают везде.
→ Чтобы понимать процесс изнутри. Инженер AI должен понимать, почему и как работает модель, а не просто жать fit().
🎓 Что будет на курсе:
→ 3 практических задания на Python + финальный проект с разбором от специалистов;
→ программа обновлена в ноябре 2025;
→ за 2 месяца пройдёшь весь фундамент, нужный для работы с моделями;
→ преподаватели — гуру математики, методисты и исследователи из ВШЭ и индустрии.
🎁 Бонусы ноября:
— 40% скидка;
— получаешь курс «Школьная математика» в подарок;
— короткий тест и узнать свой уровень.
🔗 Подробнее о курсе
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Напишите запрос для production-базы 👇
📦 Задание
Есть таблица transactions с полями:
id — идентификатор
user_id — ID пользователя
amount — сумма транзакции
created_at — время создания
Найдите подозрительные дубликаты: транзакции одного пользователя с одинаковой суммой, созданные в течение 5 минут друг от друга.
📋 Требования
— Вывести: user_id, amount, количество дублей, временной диапазон
— Показать только группы с 2+ транзакциями
— Отсортировать по количеству дублей (DESC)
Ставьте → 🔥, если нравится формат. Если нет → 🤔
#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤2👍2
🎯 Магия IntelliJ IDEA: Stream Debugger
Дебажишь цепочку стримов из 5 операций? Breakpoint показывает только входную коллекцию. Чтобы понять, где отвалились элементы, приходится разбивать стрим на переменные или добавлять peek(System.out::println) и пересобирать.
А IDEA умеет дебажить Stream API пошагово с визуализацией данных на каждой операции.
🔹 Что делает
— Показывает данные после каждой операции в цепочке (map, filter, flatMap, etc.)
— Визуализирует, какие элементы прошли/отфильтровались на каждом шаге
— Поддерживает Flat Mode для flatMap — разворачивает вложенные стримы
— Работает с параллельными стримами, показывая распределение по потокам
— Не требует изменения кода — breakpoint на любом месте стрима
🔹 Зачем это нужно
— Понять, почему в результате нет ожидаемых элементов (на каком filter отвалились)
— Увидеть промежуточные трансформации данных в сложных map/flatMap
— Найти элемент, который вызывает exception в середине pipeline
🔹 Как использовать
— Поставить breakpoint на любой строке с Stream API
— При остановке: кнопка "Trace Current Stream Chain" в дебаггере (иконка с волнами)
— Откроется окно с визуализацией: каждая операция — своя колонка с данными
— Можно кликнуть на элемент и увидеть его трансформацию по всей цепочке
— Flat Mode: переключатель для flatMap — раскрывает вложенные коллекции
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸 Библиотека джависта
#Enterprise
Дебажишь цепочку стримов из 5 операций? Breakpoint показывает только входную коллекцию. Чтобы понять, где отвалились элементы, приходится разбивать стрим на переменные или добавлять peek(System.out::println) и пересобирать.
А IDEA умеет дебажить Stream API пошагово с визуализацией данных на каждой операции.
🔹 Что делает
— Показывает данные после каждой операции в цепочке (map, filter, flatMap, etc.)
— Визуализирует, какие элементы прошли/отфильтровались на каждом шаге
— Поддерживает Flat Mode для flatMap — разворачивает вложенные стримы
— Работает с параллельными стримами, показывая распределение по потокам
— Не требует изменения кода — breakpoint на любом месте стрима
🔹 Зачем это нужно
— Понять, почему в результате нет ожидаемых элементов (на каком filter отвалились)
— Увидеть промежуточные трансформации данных в сложных map/flatMap
— Найти элемент, который вызывает exception в середине pipeline
🔹 Как использовать
— Поставить breakpoint на любой строке с Stream API
— При остановке: кнопка "Trace Current Stream Chain" в дебаггере (иконка с волнами)
— Откроется окно с визуализацией: каждая операция — своя колонка с данными
— Можно кликнуть на элемент и увидеть его трансформацию по всей цепочке
— Flat Mode: переключатель для flatMap — раскрывает вложенные коллекции
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥4❤3
📘 4 декабря стартует набор на курс «Математика для разработки AI-моделей»
Если вы работаете с моделями или хотите перейти в DS/ML, декабрь — идеальный момент закрыть фундаментальные пробелы.
На курсе вы разберёте ключевые разделы, которые лежат в основе современных AI-моделей: линейная алгебра, анализ, оптимизация, математический анализ, вероятности, статистика. Всё через практику в Python.
В программе живые занятия с экспертами AI-индустрии (SberAI, ВШЭ, WB&Russ), разбор реальных задач, квизы и финальный проект.
🌐 Формат: онлайн + доступ к записям
🎁 Бонусы: курс «Школьная математика» в подарок, бесплатный тест по математике
После лекций будет разбор ваших решений и возможность задать вопросы преподавателям.
👉 Записаться на курс
Если вы работаете с моделями или хотите перейти в DS/ML, декабрь — идеальный момент закрыть фундаментальные пробелы.
На курсе вы разберёте ключевые разделы, которые лежат в основе современных AI-моделей: линейная алгебра, анализ, оптимизация, математический анализ, вероятности, статистика. Всё через практику в Python.
В программе живые занятия с экспертами AI-индустрии (SberAI, ВШЭ, WB&Russ), разбор реальных задач, квизы и финальный проект.
🌐 Формат: онлайн + доступ к записям
🎁 Бонусы: курс «Школьная математика» в подарок, бесплатный тест по математике
После лекций будет разбор ваших решений и возможность задать вопросы преподавателям.
👉 Записаться на курс
🥱2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁24🔥2👍1
🔥 Как настроить Spring Cloud Config для централизованной конфигурации
Spring Cloud Config — это сервер конфигурации для распределённых систем. Централизованное хранение настроек, версионирование через Git, динамическое обновление без рестарта.
Поддерживает profiles, encryption секретов, webhook для автообновления и fallback на локальную конфигурацию при недоступности сервера.
1️⃣ Добавляем зависимости для Config Server
Создайте отдельный Spring Boot проект для Config Server. Добавьте зависимости spring-cloud-config-server и spring-boot-starter-actuator.
Критически важно указать версию Spring Cloud через dependencyManagement. Для Spring Boot 3.x используйте Spring Cloud 2022.x. Несовместимость версий приведёт к runtime ошибкам.
2️⃣ Настраиваем Config Server
Аннотируйте главный класс через @EnableConfigServer. В application.yml укажите spring.cloud.config.server.git.uri с путём к Git репозиторию конфигураций.
Настройте search-paths для структуры директорий: /{application} или /{application}/{profile}. Добавьте username/password для приватных репозиториев. Используйте clone-on-start=true для проверки доступности репо при старте.
3️⃣ Организуем структуру конфигураций в Git
Создайте Git репо с файлами конфигураций. Именование: {application}-{profile}.yml. Например: user-service-dev.yml, user-service-prod.yml.
Общие настройки кладите в application.yml — они применяются ко всем сервисам. Специфичные настройки в application-{profile}.yml. Config Server мержит конфигурации в правильном порядке приоритета.
4️⃣ Настраиваем Config Client в сервисах
В микросервисах добавьте зависимость spring-cloud-starter-config. Создайте bootstrap.yml (или application.yml) с параметрами для подключения к Config Server.
Укажите spring.application.name (имя сервиса для поиска конфигурации), spring.config.import=optional:configserver:http://config-server:8888, spring.cloud.config.fail-fast=false для graceful degradation.
5️⃣ Реализуем динамическое обновление конфигурации
Аннотируйте beans через @RefreshScope для пересоздания при обновлении конфигурации. Они будут уничтожены и созданы заново с новыми значениями из Config Server.
Отправляйте POST запрос на /actuator/refresh для обновления конфигурации в runtime. Для обновления всех инстансов используйте Spring Cloud Bus с RabbitMQ/Kafka — один запрос обновит все микросервисы.
6️⃣ Настраиваем шифрование секретов
Настройте encrypt.key в Config Server для симметричного шифрования или используйте keystore для asymmetric encryption. Шифруйте секреты через POST /encrypt endpoint.
В конфигах храните зашифрованные значения с префиксом {cipher}: password: '{cipher}AQBzQoXWeF...'. Config Server автоматически расшифрует при запросе от клиента. Ключ шифрования храните в environment variables.
7️⃣ Высокая доступность и наблюдение
▪️ Запускайте несколько экземпляров сервера настроек за load balancer'ом
▪️ Настройте параметры retry и timeout в клиентах на случай недоступности сервера
▪️ Включите actuator endpoints для мониторинга Config Server
▪️ Кэшируйте настройки на клиенте через встроенное кэширование spring-cloud-config-client
✔️ Что происходит под капотом
При старте Config Client делает HTTP запрос к Config Server с именем приложения и профилем. Config Server клонирует Git репо (или использует кеш), ищет файлы по pattern, парсит YAML/properties.
Конфигурации мержатся по приоритету (profile > application > default), секреты расшифровываются. Config Server возвращает JSON со всеми property sources. Client применяет их в Spring Environment с высоким приоритетом.
💡 Бонус-совет
Используйте Vault Backend вместо Git для критичных секретов. Spring Cloud Config поддерживает HashiCorp Vault как backend для конфигурации. Vault обеспечивает динамические секреты, audit logging, fine-grained access control. Настройте через spring.cloud.config.server.vault.
🐸 Библиотека джависта
#Enterprise
Spring Cloud Config — это сервер конфигурации для распределённых систем. Централизованное хранение настроек, версионирование через Git, динамическое обновление без рестарта.
Поддерживает profiles, encryption секретов, webhook для автообновления и fallback на локальную конфигурацию при недоступности сервера.
Создайте отдельный Spring Boot проект для Config Server. Добавьте зависимости spring-cloud-config-server и spring-boot-starter-actuator.
Критически важно указать версию Spring Cloud через dependencyManagement. Для Spring Boot 3.x используйте Spring Cloud 2022.x. Несовместимость версий приведёт к runtime ошибкам.
Аннотируйте главный класс через @EnableConfigServer. В application.yml укажите spring.cloud.config.server.git.uri с путём к Git репозиторию конфигураций.
Настройте search-paths для структуры директорий: /{application} или /{application}/{profile}. Добавьте username/password для приватных репозиториев. Используйте clone-on-start=true для проверки доступности репо при старте.
Создайте Git репо с файлами конфигураций. Именование: {application}-{profile}.yml. Например: user-service-dev.yml, user-service-prod.yml.
Общие настройки кладите в application.yml — они применяются ко всем сервисам. Специфичные настройки в application-{profile}.yml. Config Server мержит конфигурации в правильном порядке приоритета.
В микросервисах добавьте зависимость spring-cloud-starter-config. Создайте bootstrap.yml (или application.yml) с параметрами для подключения к Config Server.
Укажите spring.application.name (имя сервиса для поиска конфигурации), spring.config.import=optional:configserver:http://config-server:8888, spring.cloud.config.fail-fast=false для graceful degradation.
Аннотируйте beans через @RefreshScope для пересоздания при обновлении конфигурации. Они будут уничтожены и созданы заново с новыми значениями из Config Server.
Отправляйте POST запрос на /actuator/refresh для обновления конфигурации в runtime. Для обновления всех инстансов используйте Spring Cloud Bus с RabbitMQ/Kafka — один запрос обновит все микросервисы.
Настройте encrypt.key в Config Server для симметричного шифрования или используйте keystore для asymmetric encryption. Шифруйте секреты через POST /encrypt endpoint.
В конфигах храните зашифрованные значения с префиксом {cipher}: password: '{cipher}AQBzQoXWeF...'. Config Server автоматически расшифрует при запросе от клиента. Ключ шифрования храните в environment variables.
▪️ Запускайте несколько экземпляров сервера настроек за load balancer'ом
▪️ Настройте параметры retry и timeout в клиентах на случай недоступности сервера
▪️ Включите actuator endpoints для мониторинга Config Server
▪️ Кэшируйте настройки на клиенте через встроенное кэширование spring-cloud-config-client
При старте Config Client делает HTTP запрос к Config Server с именем приложения и профилем. Config Server клонирует Git репо (или использует кеш), ищет файлы по pattern, парсит YAML/properties.
Конфигурации мержатся по приоритету (profile > application > default), секреты расшифровываются. Config Server возвращает JSON со всеми property sources. Client применяет их в Spring Environment с высоким приоритетом.
Используйте Vault Backend вместо Git для критичных секретов. Spring Cloud Config поддерживает HashiCorp Vault как backend для конфигурации. Vault обеспечивает динамические секреты, audit logging, fine-grained access control. Настройте через spring.cloud.config.server.vault.
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3🔥3👏1
Forwarded from Библиотека задач по Java | тесты, код, задания
Что будет результатом фрагмента кода?
Anonymous Quiz
47%
list = [X, B, C, D]
4%
list = [A, B, C, D]
27%
UnsupportedOperationException на set()
17%
UnsupportedOperationException на add()
5%
Посмотреть ответ
🔥6🤔4👍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 декабря. Успейте подать заявку, скачать датасет и начать эксперименты!
👉 Подробности и регистрация на сайте
В самом разгаре ежегодное соревнование по разработке рекомендательных систем от VK — RecSys Challenge 2025. Участникам предстоит решить одну из самых сложных проблем в мире рекомендаций: задачу холодного старта.
Суть соревнования — построить модель, которая предскажет, кому из пользователей понравится новый клип, даже если его ещё никто не видел.
Что ждёт участников:
• Реальные данные — датасет VK-LSVD с 40 млрд взаимодействий и 20 млн коротких видео
• Можно участвовать соло или в команде до 4 человек
• Техническая свобода — до 5 сабмитов в день, возможность экспериментировать
• Общий призовой фонд — 2 500 000 рублей
Приглашают студентов, исследователей, ML-инженеров — всех, кто хочет испытать свои силы на реальных данных и создать алгоритм, который работает в условиях, максимально приближенных к контентной жизни.
Регистрация открыта до 15 декабря. Успейте подать заявку, скачать датасет и начать эксперименты!
👉 Подробности и регистрация на сайте