Хотите создать устойчивое к нагрузкам масштабируемое приложение?
Ключевой элемент при проектировании микросервисов – правильная интеграция брокеров сообщений с микросервисной архитектурой.
На открытом вебинаре «Как эффективно использовать брокеры сообщений в микросервисной архитектуре?» вы научитесь:
- Повышать производительность системы, настраивать взаимодействие между микросервисами, правильно работать с очередями сообщений
- Связывать различные слои приложений с помощью брокеров сообщений
- Проектировать решения с учётом масштабируемости и отказоустойчивости
- Эффективно управлять инфраструктурой сообщений RabbitMQ и Apache Kafka
А также увидите примеры кода и познакомитесь со случаями использования брокеров сообщений.
Будет интересно: бэкенд и фулстек-разработчикам, системным аналитикам, девопс-инженерам.
Спикеры: Сергей Прощаев, Java-разработчик в ПАО «Сургутнефтегаз».
Бонус! Всем участникам – скидка 5% и эксклюзивные материалы от спикера.
6 февраля, 19:00 МСК
Записаться - https://otus.pw/DA4e/?erid=2W5zFJ7dumS
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
🔧 Rust: язык для тех, кто ценит надёжность и производительность!
На открытом уроке «Разбираем анатомию парсера на Rust» вы погрузитесь в тонкости разработки, исследуете ключевые компоненты парсера и узнаете, как Rust делает код безопасным.
Что разберем:
— Принципы работы и архитектуру парсера.
— Владение, заимствование, обработку ошибок: практикуем Rust.
— Как строгая типизация помогает избежать ошибок ещё до компиляции.
📅 Встречаемся 11 февраля в 🕗 20:00 мск. Урок проводится в преддверии старта курса «Rust Developer. Professional», а участники получат 🎁 скидку на обучение.
🔴Не упустите возможность освоить Rust на профессиональном уровне и шагнуть в мир востребованной разработки: https://otus.pw/OtdVS/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Вебинар «Как стать облачным экспертом и повысить свою ценность на ИТ-рынке»
Узнайте, как повысить экспертность и увеличить свою ценность для ИТ-рынка.
Дата и время: 14 февраля, 17:00.
Основные темы вебинара
·Российские облачные технологии
·Облако в личных ИТ-проектах
·Программа бесплатного курса Сloud Native DIY Advanced
·Продвижение в карьере
·ИТ-сообщество
Вебинар будет полезен ИТ-специалистам middle- и senior-уровня.
Регистрируйтесь, если хотите разрабатывать стратегии миграции в облако, управлять ИТ-инфраструктурой как кодом, работать с базами данных и кластерами Kubernetes, использовать инструменты кибербезопасности для защиты инфраструктуры.
Бонус для участников
Зарегистрируйтесь на вебинар, пройдите курс и получите сертификат до 25 февраля, и мы выдадим вам мерч и бонусы на работу с VK Cloud, а также пригласим на экскурсию в первый офис VK в Доме Зингера в Санкт-Петербурге.
Зарегистрироваться
Экземплярный инициализатор
Экземплярный инициализатор — это блок кода внутри класса, который выполняется каждый раз при создании нового экземпляра класса. Он используется для инициализации экземплярных переменных.
#для_продвинутых
Как обеспечить стабильность при высокой частоте запуска тасок
Рассказываем в новой статье от бэкенд-разработчика Ильи Григорьева
Запуск частых тасок по расписанию — такая нетривиальная задача встала при разработке одной из функциональностей сервиса для видеовстреч Яндекс Телемоста.
Осложнялась ситуация тем, что запуск требовался с посекундной точностью и максимальной отказоустойчивостью — даже небольшой перерыв вёл к неработоспособности сервиса.
Как решали проблему, какие возможности и ограничения у выбранного решения — читайте в статье.
Читайте статью на Хабре здесь
Больше материалов о технологиях в Яндекс 360: https://ya.cc/t/OZ4inE495pU96D
Алгоритм Кнута – Морриса – Пратта
Алгоритм КМП осуществляет поиск текста по заданному шаблону. В этом поиске сначала компилируется заданный шаблон. Компилируя шаблон, мы пытаемся найти префикс и суффикс строки шаблона. Это поможет в случае несоответствия – не придётся искать следующее совпадение с начального индекса.
Вместо этого мы пропускаем часть текстовой строки, которую уже сравнили, и начинаем сравнивать следующую. Необходимая часть определяется по префиксу и суффиксу, поэтому известно, какая часть уже прошла проверку и может быть безопасно пропущена.
#для_продвинутых
🦾👩💻🦾 Вы уже опытный Java-разработчик, но хотите освоить глубины JVM и оптимизацию приложений в облаке?
Курс «Java Developer. Advanced» — ваш билет к продвинутым технологиям, которые востребованы в крупных проектах.
✔️ На курсе вы научитесь профилировать приложения, настраивать GC, работать с реактивными подходами и мониторить метрики в Grafana. Пройдете весь путь от JVM до Kubernetes, научитесь анализировать «горячие точки», оптимизировать приложения и настраивать интеграции с Prometheus.
Представьте, как ваши навыки открывают двери в серьёзные проекты с высокими требованиями. Наши преподаватели-практикующие эксперты поделятся опытом, а диплом OTUS станет отличным усилением к вашему резюме.
➡️ Это последний шанс попасть в группу! Регистрируйтесь сейчас и получите скидку: https://otus.pw/bAsY/
🎫 ПРОМОКОД: Java_adv
Начните обучение со скидкой, подробности у менеджеров.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👩💻 Пройди тест по Java и проверь свои знания, готов ли ты к обучению на курсе.
Ответишь — пройдешь на продвинутый курс "Java Developer. Professional" от OTUS по специальной цене + получишь доступ к записям открытых уроков курса курса
За 6 месяцев обучения вы научитесь создавать современные Java-приложения, освоите Spring WebFlux и Kafka, а также разберётесь в работе JVM изнутри.
Вас ждёт практическая работа с кодом, детальные разборы, ревью от экспертов и подходы, позволяющие писать эффективный и чистый код.
Начните свой путь к уровню Middle+!
➡️ ПРОЙТИ ТЕСТ: https://otus.pw/DXu5/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Офер в Яндекс для опытных бэкендеров за два дня
15–16 февраля приглашаем бэкендеров с опытом работы от пяти лет получить офер в Яндекс через multitrack за 2 дня. Достаточно пройти несколько технических секции 15 февраля, чтобы уже 16-го получить офер и выбрать три команды, к которым вам было бы интересно присоединиться.
Как правило, за несколько собеседований сложно понять, подходит ли вам команда и наоборот. Multitrack позволит вам поработать в трёх разных командах Яндекса и выбрать подходящую. Вы сможете погрузиться в рабочие процессы, познакомиться с будущими коллегами и понять, с какими задачами и технологиями хотите работать.
Узнать подробности и зарегистрироваться.
События и слушатели
В Java события и слушатели используются для обработки событий, которые возникают в программе. События могут быть связаны с действиями пользователя, такими как клик мыши, нажатие клавиши или изменение текста в поле ввода, или с другими действиями, такими как завершение работы потока или получение данных из сети.
Слушатели (Listeners) в Java - это интерфейсы, которые позволяют регистрировать обработчики событий. Когда происходит событие, соответствующий слушатель вызывает метод обработки события, который реализуется классом, который зарегистрировал слушатель.
😱 Цукерберг сокращет мидлов в 2025 и заменяет их на ИИ.
Хочешь оставаться востребованным на рынке труда? Прокачивай сеньорность.
Один из ключевых навыков, отличающих сеньора от мидла — умение проектировать архитектуру. А самая популярная книга по архитектуре систем — это «Высоконагруженные приложения» Мартина Клепманна, она же книга с кабанчиком.
Моя знакомая Женя Янченко, java-разработчик и тимлид, делает регулярные конспекты всех глав кабанчика в своем канале.
Подробные разборы репликации, шардирования, транзакций. С примерами, схемами, картинками.
Второй ключевой навык сеньора — это софт-скиллы. Поэтому Женя активно делится историями из своего опыта, дает рекомендации по собесам и отвечает на вопросы подписчиков. В комментах к таким постам кипят обсуждения, люди делятся опытом подобных ситуаций.
Оглавление конспектов «кабанчика»
Сравнение Kafka и RabbitMQ
Зачем нужны микросервисы
Как попросить повышение
Про манипуляции менеджеров
Фейлы на пути изучения алгоритмов
В этом канале даже джуны становятся сеньорами 😏
👀 Подписывайтесь, это самый простой способ прокачать свои скиллы: @jane_yanchenko
NavigableSetNavigableSet
— это расширенный интерфейс Set
, который позволяет работать с элементами множества в отсортированном порядке и выполнять различные операции поиска и навигации. NavigableSet
в Java предоставляет ряд методов для работы с элементами в порядке возрастания или убывания.
#для_продвинутых
👩💻 Работаете с Java, но хотите попробовать себя в Android-разработке?
👩💻 Начните с простой и полезной задачи — приложения для заметок!
На открытом уроке 27 января 2025 в 20:00 вы освоите:
— Создание списков через RecyclerView.
— Работу с базой данных Room.
— Использование Flow для обновления данных.
Это отличный шанс погрузиться в мир Android. К тому же, все участники вебинара получат скидку на обучение на курсе «Android Developer»!
➡️ Регистрация на вебинар: https://otus.pw/zwwl/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Мечтаешь о той самой работе в Big Tech, но никогда не проектировал системы? Или работаешь на галере с нулевым подходом к проектированию и не знаешь, а как разбираться в архитектуре приложений?
Знаешь, ведь я был таким же, как ты. Читал книги, смотрел курсы, но на работе не было той почвы, которая давала бы рост. А на всех ресурсах одни и те же проблемы: устаревшие подходы, зачитывание терминов без примеров и самое главное — минимум практики.
Я решил с этим покончить. Больше никаких недо-курсов, которые “готовят к собесу за один месяц с нуля”. Это невозможно, если ты не обладаешь базой. Но все реально, если разобраться в компонентах, которые составляют эти системы.
Приходи на мой Открытый Урок, где за час мы посмотрим на эти самые компоненты. А еще я расскажу про процесс проектирования в Big Tech и что такое system design секция.
В конце лекции анонс продукта, который поможет тебе навсегда решить проблему с проектированием.
ЗАПИСАТЬСЯ
PS: недавно проходил собес в один российский Big Tech. Результат можешь увидеть на скрине
👩💻 Хотите, чтобы ваши приложения на Java выдерживали любую нагрузку?
Executors — это не просто инструмент, а секретная «суперсила» JDK для управления потоками. Разберем, как грамотно настраивать пулы потоков и использовать их в реальных проектах.
🗓 На открытом уроке 27 января в 20:00 мск мы покажем, как сделать ваши сервисы быстрее и надежнее, даже если нагрузки растут. Участники получат скидку на большое обучение «Java Developer. Professional».
🎙 Спикер Сергей Петрелевич — опытный разработчик на Java и Kotlin.
➡️ Успейте зарегистрироваться и узнайте, как улучшить свои навыки в многопоточности с помощью Executors: https://otus.pw/Z7XA/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Байт-код
Байт-код (bytecode) — это промежуточный код, который создается компилятором при компиляции исходного кода. Вместо того, чтобы компилировать исходный код напрямую в машинный код для конкретной архитектуры процессора (как это делается, например, в языках C или C++), Java компилирует исходный код в байт-код, который представляет собой набор инструкций, понимаемых JVM.
#для_начинающих
Stream API
Stream API — это мощный инструмент, введенный в Java 8, который позволяет выполнять операции на потоках данных (sequences of elements) с использованием функциональных интерфейсов. Он предоставляет богатый набор операций для обработки и манипулирования данными в потоках, таких как фильтрация, сортировка, сопоставление, сведение и другие.
#для_начинающих
Инициализаторы
Инициализаторы — это блоки кода, которые выполняются при создании объекта класса, перед вызовом конструктора. Они позволяют выполнять дополнительную инициализацию объекта, которая не может быть выполнена внутри конструктора или требует какой-то логики до вызова конструктора.
В Java есть два типа инициализаторов: инициализатор экземпляра и статический инициализатор.
Оба типа инициализаторов позволяют выполнять код при создании объектов класса или загрузке класса, что может быть полезно для настройки и инициализации переменных и других ресурсов до начала использования объектов.
#для_продвинутых
Как используется класс Future?
Класс Future является частью пакета java.util.concurrent, и он используется для представления результата асинхронной операции или задачи, которая выполняется в фоновом потоке. Future позволяет вам управлять и получать результаты выполнения задачи в будущем, даже если она еще не завершилась.
#для_начинающих
Метод Arrays.asList(T... a)
Метод Arrays.asList(T... a)
используется для создания списка (List) на основе массива (array) или набора элементов переменной длины типа T. Этот метод принимает набор элементов типа T в качестве аргументов переменной длины (varargs) и возвращает список, который оборачивает переданные элементы массивом.
Обратите внимание, что список, созданный с помощью Arrays.asList
, имеет фиксированный размер, и вы не можете добавлять или удалять элементы из него. Попытки изменить размер списка вызовут исключение UnsupportedOperationException
.
#для_продвинутых
Кэширование
Кэширование (caching) — это механизм хранения временных данных в оперативной памяти или на диске, чтобы улучшить производительность приложения. Кэширование позволяет избежать повторного вычисления или запроса данных, которые уже были получены или рассчитаны ранее.
#для_продвинутых
Java varargs
Java varargs (variable arguments) — это механизм, предоставляемый Java, который позволяет методу принимать переменное количество аргументов одного типа. Он позволяет передавать любое количество аргументов заданного типа в метод, без явного указания массива аргументов.
Для объявления переменного количества аргументов в Java используется троеточие (...) после типа данных аргумента в определении метода.
#для_продвинутых
Отложенная инициализация
Отложенная инициализация — это паттерн проектирования, который позволяет отложить создание объекта до момента его реального использования. Он полезен, когда создание объекта требует значительных ресурсов или происходит в условиях, когда объект может не понадобиться.
В Java есть несколько способов реализации отложенной инициализации. Два наиболее распространенных подхода — это использование двойной проверки и использование внутреннего класса. На картинке мы рассмотрели использование двойной проверки (Double-Checked Locking).
#для_продвинутых
Блочная область видимости
Блочная область видимости (block scope) в Java - это область видимости, определенная фигурными скобками внутри метода, конструктора или другого блока кода, такого как условный оператор, цикл или блок try-catch
.
Переменные, объявленные в блочной области видимости, могут использоваться только в этой области видимости и любых вложенных областях видимости. Когда управление программой покидает блок кода, переменные, объявленные в этом блоке, выходят из области видимости, и их значения больше не доступны.
#для_начинающих
Итератор
Итератор — это объект, который предоставляет доступ к элементам коллекции (например, списку, множеству или массиву) и позволяет последовательно перебирать эти элементы без необходимости знать внутреннюю структуру коллекции. Итераторы используются для упрощения работы с коллекциями и обеспечивают абстракцию доступа к элементам.
#для_начинающих
Процедурное программирование
Процедурное программирование в Java основывается на использовании процедур (функций) для разделения программы на отдельные блоки кода, которые могут быть вызваны из других частей программы. Процедурное программирование подразумевает последовательное выполнение инструкций в программе, где основными элементами являются процедуры и данные.
В Java процедуры реализуются с помощью методов. Методы в Java объявляются внутри классов и могут выполнять определенные действия или возвращать результаты. Они могут принимать аргументы и иметь локальные переменные.
#для_продвинутых
Ссылочные типы
В Java все типы данных делятся на две категории: примитивные типы и ссылочные типы. Ссылочные типы данных представляют собой объекты, которые содержат данные и методы для работы с ними. В отличие от примитивных типов, переменные ссылочных типов хранят ссылку на объект, а не его значение.
#для_начинающих
Сортировка Шелла
Если простыми словами, то сортировка Шелла это алгоритм сортировки массива, который улучшает производительность сортировки вставками.
Он основан на сравнении элементов, находящихся не только рядом, но и на определенном расстоянии друг от друга.
Суть алгоритма заключается в том, что на каждом шаге расстояние между элементами уменьшается вдвое, что позволяет ускорить сортировку.
#для_продвинутых
Переопределение методов в классах наследниках
В Java можно переопределить методы в классах-наследниках с помощью ключевого слова @Override
. Переопределение метода позволяет изменить его реализацию в подклассе, сохраняя при этом сигнатуру (имя, типы параметров и возвращаемое значение) метода из суперкласса.
Обратите внимание на использование аннотации @Override
перед переопределенным методом в классе Subclass
. Это помогает компилятору обнаружить ошибки, если вы случайно ошиблись в сигнатуре метода или не переопределили метод правильно.
#для_продвинутых
Инвертированный индекс
Инвертированный индекс — это структура данных, используемая в информационных поисковых системах для быстрого поиска документов, содержащих определенные слова или фразы. В инвертированном индексе каждое уникальное слово (термин) в коллекции документов связывается с списком документов, в которых это слово встречается.
Ниже приведен пример простой реализации инвертированного индекса на языке Java. Этот пример демонстрирует создание инвертированного индекса для небольшой коллекции документов.
#для_продвинутых