Please open Telegram to view this post
VIEW IN TELEGRAM
😁21👍2🔥1
Forwarded from Библиотека задач по Java | тесты, код, задания
Вы обрабатываете очередь задач из Kafka. Каждая задача должна быть обработана ровно один раз, даже если несколько потоков читают из одной топик-партиции. У вас есть shared счётчик int processedCount для мониторинга. Как безопасно инкрементировать счётчик?
Anonymous Quiz
2%
processedCount++
10%
synchronized(this) { processedCount++; }
7%
volatile int processedCount; затем processedCount++
74%
AtomicInteger processedCount; затем processedCount.incrementAndGet()
8%
Посмотреть ответ
👍5🔥1👏1🥱1
Выбор структуры данных — это не только про знание API, но и про понимание:
— нужен ли random access;
— важна ли уникальность;
— критичен ли порядок элементов;
— как часто insert/delete в середине.
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1🔥1🤔1
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
🔥17👍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
😁12❤2💯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
👍4🔥3👏1