👍12🔥4🤔2
🗓 17 сентября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Professional».
🎯 О чём поговорим:
👥 Кому будет интересно:
Это мероприятие будет полезно Java-разработчикам, архитекторам и IT-специалистам финансовых организаций. Вы получите ценные знания, которые сможете применить на практике.
🔗 Ссылка на регистрацию: https://vk.cc/cPn5Ma
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
Что будет результатом кода?
Anonymous Quiz
20%
RejectedExecutionException, так как shutdown() вызван до завершения submit()
40%
Вывод 42 через 1 секунду и корректное завершение.
9%
NullPointerException, так как future будет null
25%
InterruptedException, так как поток будет принудительно завершён
6%
Программа зависнет навсегда, так как shutdown() остановит все задачи
❤4👍4🤔4🔥1
Где потенциальная проблема в коде?
Anonymous Quiz
26%
@Autowired на UserService
13%
@PathVariable Long id нужно заменить на @RequestParam
43%
Если userService.getUserById(id) вернет null -> NPE
4%
Лучше @Controller вместо @RestController
14%
ResponseEntity.ok(user) не нужен, нужно просто вернуть User
👍5🔥3
⚡️ Отказоустойчивость и масштабируемость микросервисов
📅 17 сентября | 20:00 мск | бесплатно
Хотите, чтобы ваши микросервисы работали стабильно под нагрузкой? На вебинаре разберём:
• Паттерны отказоустойчивости: Circuit Breaker, Bulkhead, Timeouts
• Паттерны масштабируемости: Auto-scaling, Load Balancing
• Как защитить сервисы от перегрузок и сбоев
💡 Полезно для:
• Разработчиков и архитекторов микросервисов
• DevOps-инженеров
• Руководителей проектов
✅ После вебинара вы сможете:
• Проектировать отказоустойчивую архитектуру
• Настраивать автоскейлинг и балансировку
• Повышать стабильность и производительность сервисов
👉 Регистрируйтесь:
https://vk.cc/cPyygH
Занятие приурочено к старту курса "Software Architect", обучение на котором позволит освоить компетенции архитектора по моделированию и построению отказоустойчивых, масштабируемых информационных систем.
📅 17 сентября | 20:00 мск | бесплатно
Хотите, чтобы ваши микросервисы работали стабильно под нагрузкой? На вебинаре разберём:
• Паттерны отказоустойчивости: Circuit Breaker, Bulkhead, Timeouts
• Паттерны масштабируемости: Auto-scaling, Load Balancing
• Как защитить сервисы от перегрузок и сбоев
💡 Полезно для:
• Разработчиков и архитекторов микросервисов
• DevOps-инженеров
• Руководителей проектов
✅ После вебинара вы сможете:
• Проектировать отказоустойчивую архитектуру
• Настраивать автоскейлинг и балансировку
• Повышать стабильность и производительность сервисов
👉 Регистрируйтесь:
https://vk.cc/cPyygH
Занятие приурочено к старту курса "Software Architect", обучение на котором позволит освоить компетенции архитектора по моделированию и построению отказоустойчивых, масштабируемых информационных систем.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤2👍2🔥2
Что произойдёт, если вызвать Optional.orElseThrow() на пустом Optional?
Anonymous Quiz
9%
Вернётся null
60%
Будет выброшено NoSuchElementException
8%
Метод ничего не сделает
10%
Ошибка компиляции
13%
Будет выброшено IllegalStateException
👍3🔥1
17 сентября(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2🔥2
Что происходит внутри TreeMap.put()?
Недавно мы в деталях рассматривали, какие процессы происходят при добавлении элемента в HashMap. Теперь поговорим о TreeMap. Здесь не так много тонкостей, как в хэш-таблице.
TreeMap требует либо задать порядок ключей вручную (передать в конструктор Comparator), либо чтобы они имели собственный естественный порядок (были Comparable).
Подобно нодам в хэш-таблице, внутренняя структура дерева строится из объектов внутреннего класса узла – Entry. В каждом узле хранится информация о данных (пара key-value), и о положении в структуре (ссылки на родительский узел, левую и правую ветви).
Сама структура представляет из себя красно-чёрное дерево относительно ключей. Не будем здесь углубляться в детали его реализации. О нем важно знать два факта:
1. Это бинарное дерево поиска. Значит, каждый новый элемент начинает искать свое место в дереве, сравниваясь с узлами начиная с корневого. Меньшие элементы движутся влево, большие – вправо. Для этого и требуется наличие метода compare. Дойдя до конца, пара ключ-значение «повисает» новым узлом.
2. Это самобалансирующееся дерево. Если какая-то ветка начинает становиться слишком длинной (а её эффективность вырождаться в эффективность связного списка), происходит балансировка. В результате этой операции правило из пунтка 1 остается в силе, но нагрузка на ветки перераспределяется. Самое длинное поддерево становится выше самого короткого максимум на один элемент.
Java Guru🤓 #java
Недавно мы в деталях рассматривали, какие процессы происходят при добавлении элемента в HashMap. Теперь поговорим о TreeMap. Здесь не так много тонкостей, как в хэш-таблице.
TreeMap требует либо задать порядок ключей вручную (передать в конструктор Comparator), либо чтобы они имели собственный естественный порядок (были Comparable).
Подобно нодам в хэш-таблице, внутренняя структура дерева строится из объектов внутреннего класса узла – Entry. В каждом узле хранится информация о данных (пара key-value), и о положении в структуре (ссылки на родительский узел, левую и правую ветви).
Сама структура представляет из себя красно-чёрное дерево относительно ключей. Не будем здесь углубляться в детали его реализации. О нем важно знать два факта:
1. Это бинарное дерево поиска. Значит, каждый новый элемент начинает искать свое место в дереве, сравниваясь с узлами начиная с корневого. Меньшие элементы движутся влево, большие – вправо. Для этого и требуется наличие метода compare. Дойдя до конца, пара ключ-значение «повисает» новым узлом.
2. Это самобалансирующееся дерево. Если какая-то ветка начинает становиться слишком длинной (а её эффективность вырождаться в эффективность связного списка), происходит балансировка. В результате этой операции правило из пунтка 1 остается в силе, но нагрузка на ветки перераспределяется. Самое длинное поддерево становится выше самого короткого максимум на один элемент.
Java Guru🤓 #java
👍11🔥6❤3
🏗 Курс “Software Architect” от OTUS — набор заканчивается. Успейте пройти вступительный тест и занять место в группе!
Почему стоит присоединиться прямо сейчас:
• 100% практики на реальных проектах
• Проектирование гибких архитектур
• Микросервисы, интеграции, Big Data
• Современные паттерны: CQRS, Event Sourcing и др.
💡 Кому подойдёт:
• Разработчикам, готовым выйти на новый уровень
• Архитекторам, углубляющим экспертизу
• Тимлидам и менеджерам
✅ После курса вы сможете:
• Проектировать масштабируемые архитектуры
• Оптимизировать взаимодействие сервисов
• Повышать качество и устойчивость систем
Места в группе ограничены — пройдите вступительное тестирование сегодня, чтобы успеть!
https://vk.cc/cPCgvE
Почему стоит присоединиться прямо сейчас:
• 100% практики на реальных проектах
• Проектирование гибких архитектур
• Микросервисы, интеграции, Big Data
• Современные паттерны: CQRS, Event Sourcing и др.
💡 Кому подойдёт:
• Разработчикам, готовым выйти на новый уровень
• Архитекторам, углубляющим экспертизу
• Тимлидам и менеджерам
✅ После курса вы сможете:
• Проектировать масштабируемые архитектуры
• Оптимизировать взаимодействие сервисов
• Повышать качество и устойчивость систем
Места в группе ограничены — пройдите вступительное тестирование сегодня, чтобы успеть!
https://vk.cc/cPCgvE
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤2👍2🔥2
Можно ли хранить null в стандартных коллекциях?
Все интерфейсы Collections Framework позволяют своим реализациям самостоятельно решать, поддерживать ли null-значения. Если реализация не может принять null, она выбрасывает NullPointerException или ClassCastException.
Большинство списков (LinkedList, ArrayList) принимают null без проблем. Большинство очередей (Queue и Deque) не хранят null – возвращая из читающего метода null они сообщают пользователю о пустоте коллекции.
Unmodifiable Maps не допускают null-ов совсем. Обычные изменяемые мапы обычно не испытывают трудности со значениями null. А вот с ключами дело обстоит интереснее.
HashMap не может посчитать hash-сумму от null. Но вместо этого для таких ключей просто используется бакет номер 0.
Иногда этот вопрос дается как задача с подвохом про TreeMap. Nullability её ключей зависит от готовности к этому компаратора. Натуральный порядок (который работает для Comparable ключей) не поддерживает null. Раньше в реализации был баг, который позволял положить значение по ключу null в корень дерева без выброса исключения.
Для значений Set-ов действуют те же правила, что для ключей лежащих в основе их Map-ов.
Java Guru🤓 #java
Все интерфейсы Collections Framework позволяют своим реализациям самостоятельно решать, поддерживать ли null-значения. Если реализация не может принять null, она выбрасывает NullPointerException или ClassCastException.
Большинство списков (LinkedList, ArrayList) принимают null без проблем. Большинство очередей (Queue и Deque) не хранят null – возвращая из читающего метода null они сообщают пользователю о пустоте коллекции.
Unmodifiable Maps не допускают null-ов совсем. Обычные изменяемые мапы обычно не испытывают трудности со значениями null. А вот с ключами дело обстоит интереснее.
HashMap не может посчитать hash-сумму от null. Но вместо этого для таких ключей просто используется бакет номер 0.
Иногда этот вопрос дается как задача с подвохом про TreeMap. Nullability её ключей зависит от готовности к этому компаратора. Натуральный порядок (который работает для Comparable ключей) не поддерживает null. Раньше в реализации был баг, который позволял положить значение по ключу null в корень дерева без выброса исключения.
Для значений Set-ов действуют те же правила, что для ключей лежащих в основе их Map-ов.
Java Guru🤓 #java
👍9🔥5❤2
Какой сценарий может привести к утечке памяти?
Anonymous Quiz
6%
Использование try-with-resources для работы с потоками ввода/вывода
20%
Применение WeakReference для кэширования объектов
64%
Хранение объектов в static коллекции без явного удаления
4%
Использование Optional вместо null для обработки отсутствующих значений
6%
Автоматическое закрытие соединений с БД с помощью HikariCP
👍6❤3🔥2
Какой потенциальный риск присутствует?
Anonymous Quiz
25%
Код работает корректно, проблем нет
25%
future.get() может зависнуть навсегда
9%
Высокая нагрузка на потокобезопасные ресурсы, нужен synchronized
18%
CompletableFuture.supplyAsync() блокирует основной поток
23%
future.get() может выбросить NullPointerException
👍6🤔4🤨2😐2
Podlodka Crew 29 сентября запускает новую конференцию — Podlodka AI Crew 🥳
Если вы ищете практические знания без воды — это оно. Подлодка собрала экспертов, которые покажут, что реально работает в коде, пайплайнах и командных процессах.
В программе:
📊«AI, ML, DS, нейросети: без хайпа в терминах» — разберём границы применимости подходов, чтобы отличать пользу от шума (Алексей Шаграев, ex-Google, ex-Yandex).
👥 Круглый стол «AI-культура в команде» — инструменты и практики, сопротивление/принятие, влияние на эффективность и безопасность (Макс Сальников / Microsoft, Владимир Иванов / Supplied, Михаил Левченко / Яндекс Вертикали, Павел Герасимов / Wrike).
💻 Мастер-класс «Project-aware ассистенты: RAG + MCP» — живая документация, контекст кода для LLM и интерфейс запросов в мессенджере; как это ускоряет онбординг и разработку (Григорий Сухоруков, Яндекс).
⚡«Эффективный промптинг» — техники, которые убирают типовые страхи и реально ускоряют разработку (Евгений Сатуров, Surf).
Почему это важно: AI уже часть рабочего стека — от IDE до CI/CD. Здесь — практики с измеримым эффектом: меньше рутины, быстрее процессы.
Кому будет полезно: разработчикам, архитекторам и техлидам, платформенным/DevOps-инженерам - всем, кто внедряет AI-процессы и ждёт измеримого результата.
🗓 29 сентября - 3 октября
🔗 Подробности и регистрация: https://podlodka.io/aicrew
Если вы ищете практические знания без воды — это оно. Подлодка собрала экспертов, которые покажут, что реально работает в коде, пайплайнах и командных процессах.
В программе:
📊«AI, ML, DS, нейросети: без хайпа в терминах» — разберём границы применимости подходов, чтобы отличать пользу от шума (Алексей Шаграев, ex-Google, ex-Yandex).
👥 Круглый стол «AI-культура в команде» — инструменты и практики, сопротивление/принятие, влияние на эффективность и безопасность (Макс Сальников / Microsoft, Владимир Иванов / Supplied, Михаил Левченко / Яндекс Вертикали, Павел Герасимов / Wrike).
💻 Мастер-класс «Project-aware ассистенты: RAG + MCP» — живая документация, контекст кода для LLM и интерфейс запросов в мессенджере; как это ускоряет онбординг и разработку (Григорий Сухоруков, Яндекс).
⚡«Эффективный промптинг» — техники, которые убирают типовые страхи и реально ускоряют разработку (Евгений Сатуров, Surf).
Почему это важно: AI уже часть рабочего стека — от IDE до CI/CD. Здесь — практики с измеримым эффектом: меньше рутины, быстрее процессы.
Кому будет полезно: разработчикам, архитекторам и техлидам, платформенным/DevOps-инженерам - всем, кто внедряет AI-процессы и ждёт измеримого результата.
🗓 29 сентября - 3 октября
🔗 Подробности и регистрация: https://podlodka.io/aicrew
❤2👍2🔥2
Какие есть преимущества у массива перед коллекцией?
Для хранения ссылочных типов массив подходит хуже чем ArrayList. В основе реализации коллекции лежит такой же массив, поэтому эффективность будет той же самой. Однако, вам придется самостоятельно реализовывать логику управления хранилищем: например, увеличение массива при переполнении. А значит, будет больше шансов на ошибку.
Если использовать массивы вместо коллекций для примитивов, можно получить выигрыш по эффективности. Коллекции – generic-типы, из-за этого простые значения хранятся в них в форме ссылочных типов-оберток.
1. Autoboxing выделяет память под новый объект, это дорогая операция;
2. Кроме данных, Object занимает дополнительную память под метаинформацию;
3. Ячейки массива лежат близко в оперативной памяти, это увеличивает шансы попадания в кэш процессора.
С другой стороны, для массива всё так же нужно написать больше кода, он сложнее. Поэтому замена листов на массивы обычно считается излишней микрооптимизацией.
Когда сэкономить всё-таки хочется, стоит выбрать одну из множества готовых библиотек не-generic реализаций коллекций. Списки примитивов можно найти в Eclipse Collections. В Android есть HashMap с целочисленными ключами – SparseArray.
Java Guru🤓 #java
Для хранения ссылочных типов массив подходит хуже чем ArrayList. В основе реализации коллекции лежит такой же массив, поэтому эффективность будет той же самой. Однако, вам придется самостоятельно реализовывать логику управления хранилищем: например, увеличение массива при переполнении. А значит, будет больше шансов на ошибку.
Если использовать массивы вместо коллекций для примитивов, можно получить выигрыш по эффективности. Коллекции – generic-типы, из-за этого простые значения хранятся в них в форме ссылочных типов-оберток.
1. Autoboxing выделяет память под новый объект, это дорогая операция;
2. Кроме данных, Object занимает дополнительную память под метаинформацию;
3. Ячейки массива лежат близко в оперативной памяти, это увеличивает шансы попадания в кэш процессора.
С другой стороны, для массива всё так же нужно написать больше кода, он сложнее. Поэтому замена листов на массивы обычно считается излишней микрооптимизацией.
Когда сэкономить всё-таки хочется, стоит выбрать одну из множества готовых библиотек не-generic реализаций коллекций. Списки примитивов можно найти в Eclipse Collections. В Android есть HashMap с целочисленными ключами – SparseArray.
Java Guru🤓 #java
👍4🔥1