№ 4931127152 Изучаем Java. По вопросам сотрудничества: @adv_and_pr Канал на бирже: https://telega.in/c/seniorjavist
Удачное и неудачное использование OptionalOptional
— это контейнер для объекта, который может содержать или не содержать значение null
.
Удачным примером использования Optional
является метод orElseGet()
, который позволяет вернуть значение по умолчанию, если значение Optional
равно null
. (изображение 1)
Неудачным примером использования Optional
является метод get()
, который вызывает исключение NoSuchElementException
, если значение Optional
равно null
. (изображение 2)
Агрегация
Агрегация — это отношение между классами, когда один класс содержит ссылки на объекты другого класса. Это также называется «композицией» или «составным объектом». Важно отметить, что агрегация является одним из способов управления отношениями между классами в ООП.
Примером агрегации может быть, например, класс «Университет», который содержит коллекцию объектов класса «Студент». В этом случае, «Университет» агрегирует (содержит) множество объектов «Студент». Важно, чтобы объекты «Студент» оставались независимыми и могли существовать отдельно от объекта «Университет».
#для_продвинутых
Стек-трейс
Стек-трейс (stack trace) представляет собой список вызовов методов в обратном хронологическом порядке, начиная с метода, в котором произошло исключение. Стек-трейс позволяет отследить, какие методы были вызваны перед возникновением исключения, и предоставляет информацию о местоположении, где произошло исключение.
#для_продвинутых
👩💻 Курс «Java-разработчик»: помощь в превращении стажёра в сильного Middle
🔥 Вы платите не только за знания, но и за эффективное карьерное сопровождение. Быстрее найдя работу, вы окупите затраты и начнёте уверенно расти в доходе.
💻 Наше обучение — это живые вебинары с действующими экспертами в области, которые проведут тебя от новичка до уверенного Middle-разработчика. Ты освоишь Spring, Hibernate, PostgreSQL, Docker, Kafka, Kubernetes и другие актуальные технологии!
✔️ Трехступенчатая поддержка до полного трудоустройства
- Мы сопровождаем студента не только в момент обучения и поиска работы, но и в период адаптации после выхода в новую компанию.
✔️ Индивидуальный подход на вебинарах и консультациях
- Мы не выдаем всем «один и тот же скрипт»: во время карьерных вебинаров отвечаем на конкретные вопросы студентов.
✔️ Профессиональное резюме под руководством HR-экспертов
- Подготовка резюме и разбор «точек роста». Эксперт помогает сформулировать сильные стороны, уникальные достижения и убрать «лишнее», чтобы резюме работало на конкретные вакансии.
✔️ Поддержка после оффера
- Даем рекомендации, как вести себя в первые месяцы, какие вопросы задавать руководителю, как справляться со стрессом и «синдромом самозванца». Это особенно важно, когда студент переходит из стажерской/джуниор роли в более серьезную позицию.
Наш партнер — СберКорус, разработчик передовых цифровых решений!
👉 Оставь заявку и получи скидку на курс: https://otus.pw/jTzR/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
High cohesion
High cohesion (высокая связанность) — это принцип проектирования программного обеспечения, который означает, что компонент или модуль программы должен иметь чёткую и ограниченную ответственность, а все его функции и элементы должны быть связаны логически и тесно между собой. Это позволяет создать более структурированный и легко поддерживаемый код.
В Java принцип высокой связанности можно применить, следуя ряду практик:
1. Разделение функциональности
2. Ограниченная ответственность
3. Минимизация зависимостей
4. Принцип единственной ответственности (Single Responsibility Principle)
5. Группировка по функциональности
#для_продвинутых
Прокси-объект
Прокси-объект (Proxy Object) — это объект, который действует как промежуточный слой между клиентским кодом и реальным объектом. Прокси-объект позволяет выполнять дополнительные действия перед или после вызовов методов реального объекта, а также контролировать доступ к этим методам.
Прокси-объекты в Java реализуются с помощью интерфейсов и динамического создания классов во время выполнения. Для создания прокси-объекта в Java существует два основных способа: с использованием JDK Proxy и с использованием библиотеки CGLIB.
#для_продвинутых
👩💻 Открытый урок «Spring Boot: разбор (не)стандартных вопросов интервью»
🗓 17 марта в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework»
Продолжаем готовится к возможному собеседованию.
На уроке мы обсудим вопросы, которые могут встретиться на интервью по теме разработки на Spring.
На очереди Spring Boot.
Подключайтесь.
🔗 Ссылка на регистрацию: https://otus.pw/cZjB/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Монитор
Монитор представляет собой механизм, который обеспечивает синхронизированный доступ к критическим секциям кода, что позволяет избежать состояния гонки (race condition) и обеспечивает координацию между потоками.
Ключевое слово synchronized
может быть применено к методам или блокам кода. Когда метод или блок кода помечен как synchronized
, только один поток может выполнить этот код или метод в определенный момент времени. Если другой поток попытается войти в синхронизированный блок или вызвать синхронизированный метод, он будет ожидать, пока первый поток не завершит выполнение.
#для_продвинутых
Что такое Executor?
Понятие Executor
относится к части библиотеки java.util.concurrent
, которая предоставляет управление и выполнение задач в многопоточных приложениях. Этот интерфейс и связанные с ним классы предоставляют абстракцию для управления выполнением потоковых задач.
Основной целью интерфейса Executor
является разделение задачи выполнения задач от деталей управления потоками. Вместо того чтобы явно создавать и управлять потоками для выполнения задач, вы можете передать задачи в Executor
, который сам управляет пулом потоков и выполняет эти задачи.
#для_начинающих
ConcurrentHashMapConcurrentHashMap
— это класс из пакета java.util.concurrent
, который представляет собой реализацию хэш-таблицы, спроектированную для поддержки параллельных операций чтения и записи без необходимости блокировки всей структуры данных.
#для_начинающих
InterruptedException
Думаю, вы заметили, что мы везде обрабатываем эту ошибку. Пока поток ожидает, кто-то может прервать его работу.Thread.stop()
это устаревший метод, который просто убивал поток. Сейчас есть Thread.interrupt()
который говорит, что потоку надо закончить работу.
Ещё можно приостановить работу во время выполнения какого-то действия за счёт проверки !Thread.currentThread().isInterrupted()
.
#для_продвинутых
🦾Хотите глубже понять управление процессами в микросервисах и повысить надёжность систем? На ум сразу приходят распределённые транзакции – классический, но, увы, проблематичный метод. Но мы предлагаем кое-что получше: шаблон «Сага»!
На открытом вебинаре "«Саги» vs распределённые транзакции: как моделировать рабочие потоки в распределённой архитектуре"
Вы узнаете:
- Почему распределённые транзакции могут быть непрактичны в контексте микросервисов
- Как работает Сага и в чём преимущества этого шаблона
- Какие типы «саг» существуют и как их применять
- Как использовать Сагу для моделирования сложных рабочих потоков
И, конечно же, получите важные рекомендации по внедрению саг в реальных проектах.
Будет интересно архитекторам ПО, системным аналитикам, бэкенд и фулстек-разработчикам.
💬Спикер: Сергей Прощаев Java-разработчик в ПАО «Сургутнефтегаз».
Бонус! Скидка 5% на любой курс OTUS и чек-лист «Подойдёт ли вам шаблон SAGA? Семь вопросов создателю проекта»
⏰6 марта, 19:00 МСК, Бесплатно
Записаться на событие: https://otus.pw/jCI5/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
⚖️ 👩💻 Сравнение механизмов синхронизации потоков с помощью JMH
Понимание синхронизации — ключ к многопоточности. Оцените эффективность механизмов и проверьте гипотезы с помощью JMH.
🗓 13 марта в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Advanced».
📌О чём поговорим:
- Ключевые механизмы синхронизации в Java (synchronized, ReentrantLock и другие).
- Особенности их применения в многопоточном коде и влияние на производительность.
- Настройка и проведение бенчмарков JMH для объективного сравнения различных подходов.
📌Кому будет интересно:
Java-разработчикам, инженерам по производительности и любителям многопоточности, желающим оценить скорость и надёжность разных механизмов.
📌В результате урока вы получите:
- Навык реализации JMH-бенчмарков для сравнения различных инструментов синхронизации.
- Понимание разницы в скорости работы механизмов и уверенность в выборе оптимального решения.
🔗 Ссылка на регистрацию: https://otus.pw/oMyO/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
CountDownLatchCountDownLatch
— это синхронизационный механизм, предоставляемый пакетом java.util.concurrent
, который позволяет одному или нескольким потокам ждать, пока определенное количество операций завершится, прежде чем они смогут продолжить свою работу. Он полезен в ситуациях, когда нужно дождаться завершения нескольких параллельных задач, прежде чем продолжить выполнение кода.CountDownLatch
работает по принципу счетчика, который уменьшается с каждым вызовом метода countDown()
. Когда счетчик достигает нуля, все ожидающие потоки могут продолжить свою работу.
#для_продвинутых
Spring Batch
Spring Batch — это фреймворк для обработки больших объемов данных в приложениях Java. Он предоставляет множество инструментов и функциональности для управления и выполнения множества задач в пакетном режиме, таких как чтение, обработка и запись данных. Spring Batch обеспечивает множество возможностей для управления ошибками, масштабируемостью и мониторингом задач.
#для_продвинутых
Метод ordinal() в Enum
Метод ordinal()
является частью класса Enum
. Класс Enum
используется для создания типов данных, представляющих ограниченное множество значений, таких как перечисления (enumerations). Метод ordinal()
возвращает порядковый номер (индекс) конкретного элемента перечисления в объявленном порядке.
#для_начинающих
🚀 12-13 апреля пройдёт Третья онлайн-конференция Systems Design Online, посвящённая проектированию современных информационных систем для бизнеса.
Главная тема конференции в этом году — «Компромиссы проектирования — баланс между атрибутами качества, финансированием и сроками».
❗️ВНИМАНИЕ❗️ До 15 марта самая выгодная цена на билеты — 3 900 ₽
В 2025 году конференция Systems Design Online пройдёт в два дня:
— 12 апреля (сб) — день докладов
— 13 апреля (вс) — день воркшопов
Вас будут ждать:
— Более 20 докладов от опытных архитекторов, аналитиков и технических лидеров
— Два воркшопа с акцентом на практику
— 3 тематические секции: Архитектура, ИИ и Информационная безопасность
— Неограниченный доступ к записям всех докладов конференции
— Постоянный чат в Telegram
Конференция Systems Design Online будет интересна:
— разработчикам и аналитикам
— архитекторам и руководителям ИТ-проектов
Подробнее о конференции здесь
Следить за новостями конференции можно в Telegram-канале @systems_design_online
Абстрактные классы
Абстрактные классы — это классы, которые не могут быть инстанциированы напрямую, то есть нельзя создать объект абстрактного класса при помощи оператора new. Они предназначены для обеспечения базовой структуры и функциональности для других классов, которые наследуются от них. Абстрактные классы представляют собой в некотором роде «заготовки» для подклассов, указывая на общие атрибуты и методы, которые они должны реализовать.
#для_начинающих
unchecked exception
unchecked exception (непроверяемое исключение) относится к исключениям, которые не требуется обязательно обрабатывать или объявлять в секции throws
метода. Эти исключения наследуются от класса RuntimeException
или его подклассов. Они обычно свидетельствуют о ситуациях, которые могут возникнуть в ходе выполнения программы, но которые, как правило, связаны с ошибками программирования или непредвиденными ситуациями.
#для_начинающих
⚡️ Квиз на знание Java
Пройти тестирование — сложно! А ты справишься?
22 вопроса, 30 минут
Проверь себя - пройди квиз и оцени свой уровень навыков, а также свою готовность к обучению на курсе — «Java Developer. Advanced» от Отус.
👩💻 На курсе ты научишься профилировать приложения, настраивать GC, работать с реактивными подходами и мониторить метрики в Grafana. Пройдешь весь путь от JVM до Kubernetes, научишься анализировать «горячие точки», оптимизировать приложения и настраивать интеграции с Prometheus.
➡️ ПРОЙТИ ТЕСТ: https://otus.pw/TFYRi/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Что такое «fail-fast поведение»?
Fail-fast поведение (fail-fast behavior) — это принцип в программировании, который подразумевает, что программа должна обнаруживать ошибки и некорректные условия как можно раньше и немедленно генерировать исключения или останавливать выполнение, чтобы предотвратить дальнейшие некорректные операции и минимизировать возможные повреждения данных или неправильное поведение программы.
В Java fail-fast поведение реализуется с использованием механизмов. Если в процессе выполнения программы обнаруживается какое-либо нарушение, например, попытка доступа за пределы массива или передача недопустимого аргумента в метод, генерируется исключение, и выполнение программы прерывается.
#для_продвинутых
Прямой обход дерева
Прямой обход дерева (pre-order traversal) — это один из способов обхода бинарного дерева. В этом способе сначала посещается корневой узел, затем левое поддерево и затем правое поддерево. Прямой обход широко используется для вывода структуры дерева и выполнения операций на каждом узле в нужном порядке.
#для_продвинутых
❓ Хотите писать смарт-контракты, но кажется, что для этого нужны танцы с бубном?
🫣 Solidity пугает, инструменты кажутся сложными, а блокчейн — вообще отдельной вселенной. Но на самом деле разработка для EVM не так далека от классического программирования. Главное — разобраться с инструментами и подходами.
👉 Изучим это на открытом уроке «Обзор инструментов и методик» 11 марта в 20:00 (мск):
- Какие языки используют для блокчейн-разработки и чем они отличаются
- Как работают компиляторы и анализаторы кода для Solidity
- На что обращать внимание при написании смарт-контрактов
Блокчейн-рынок растёт, и специалисты по Solidity востребованы уже сегодня. Начните разбираться в EVM, пока другие только задаются вопросом «А что это такое?».
Все участники получат скидку на большое обучение «Solidity Developer».
👉 Регистрируйтесь и заходите в Web3 осознанно: https://otus.pw/ADzE/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Что такое ThreadGroup?ThreadGroup
представляет собой класс, предоставляемый Java для создания и управления группами потоков. Он может содержать другие подгруппы потоков, образуя иерархию. Основной целью ThreadGroup
является обеспечение единого механизма управления и мониторинга для всех потоков внутри группы.ThreadGroup
предоставляет некоторый уровень организации и управления, но в большинстве современных приложений управление потоками осуществляется с использованием более высокоуровневых конструкций, таких как классы из пакета java.util.concurrent
, которые предоставляют более гибкие и безопасные средства для работы с параллельным исполнением.
#для_продвинутых
⚡️ Квиз на знание Java
Пройти тестирование — сложно! А ты справишься?
21 вопрос, 30 минут
Проверь себя - пройди квиз и оцени свой уровень навыков, а также свою готовность к обучению на курсе — «Разработчик на Spring Framework» от OTUS.
💻 За 5 месяцев обучения ты освоишь современные возможности Spring, научишься быстро проходить путь от идеи до production-grade, создавать Web-приложения на микросервисной архитектуре и решать высокоуровневые задачи по разработке.
👉 ПРОЙТИ ТЕСТ: https://otus.pw/vhjI/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
ServletContextServletContext
— это интерфейс, который предоставляет методы для взаимодействия с контекстом сервлета. Контекст сервлета — это область, в которой работает сервлет, и предоставляет средства для обмена данными между сервлетами, а также для доступа к различным ресурсам, таким как файлы, базы данных и другие.
Некоторые из основных методов, предоставляемых интерфейсом ServletContext
, включают:getInitParameter
(String name): Возвращает значение инициализационного параметра сервлета, указанного по имени.getInitParameterNames()
: Возвращает имена всех инициализационных параметров сервлета.getAttribute
(String name): Возвращает значение атрибута, сохраненного в контексте сервлета по имени.setAttribute
(String name, Object object): Устанавливает значение атрибута в контексте сервлета.getRequestDispatcher
(String path): Возвращает объект RequestDispatcher, который используется для включения другого ресурса (например, другого сервлета или JSP-страницы) в текущий запрос.getRealPath
(String path): Преобразует виртуальный путь в абсолютный путь на сервере.
#для_продвинутых
CompletableFutureCompletableFuture
представляет собой мощный и гибкий механизм для асинхронного программирования и выполнения параллельных задач. Этот класс был введен в Java 8 и предоставляет более высокоуровневый интерфейс для работы с асинхронными операциями, чем традиционные Future
и ExecutorService
.
#для_продвинутых
BeanFactoryBeanFactory
— это интерфейс, определенный в фреймворке Spring, который предоставляет механизм для управления бинами (объектами), инверсии управления (IoC) и внедрения зависимостей (DI). Spring использует этот интерфейс для создания и управления бинами, которые представляют собой объекты, управляемые контейнером Spring.
На картинке XmlBeanFactory
используется для создания контейнера бинов на основе конфигурационного файла beans.xml
. В этом файле определяется бин с именем «helloWorld», и экземпляр этого бина извлекается из BeanFactory
и использован.
Важно отметить, что XmlBeanFactory
является устаревшим в новых версиях Spring. Вместо него рекомендуется использовать ApplicationContext
, который предоставляет дополнительные функции и улучшенную производительность.
#для_продвинутых
⁉️ По-прежнему перебираете списки с for и while? Код превращается в кашу из циклов и условий?
Оптимизация занимает больше времени, чем сам проект?
👩💻 Stream API — мощный инструмент, который позволит вам писать элегантный, лаконичный и производительный код.
⚡️ На открытом вебинаре 13 марта в 20:00 мск разберём ключевые операции Stream API, научимся фильтровать, группировать и трансформировать данные в несколько строк кода.
🎙 Спикер Александр Фисунов — Senior Kotlin Developer в SSP Software на проекте ВТБ, опытный Java-разработчик и кандидат технических наук.
Участники вебинара получат скидку для обучение на курсе «Java-разработчик»
🔗 Ссылка на регистрацию: https://otus.pw/Kx3s/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Метод System.nanoTime()
Метод System.nanoTime()
используется для получения текущего времени в наносекундах. Этот метод обычно используется для измерения времени выполнения участка кода или производительности приложения с высокой точностью.
#для_начинающих