<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:yandex="http://news.yandex.ru" xmlns:media="http://search.yahoo.com/mrss/" xmlns:turbo="http://turbo.yandex.ru">
<channel>
<title>Java с нуля - Онлайн курсы от 49 рублей</title>
<link>https://many-courses.net/</link>
<description>Java с нуля - Онлайн курсы от 49 рублей</description><item turbo="true">
<turbo:extendedHtml>true</turbo:extendedHtml>
<link>https://many-courses.net/programmirovanie/17153-otus-kotlin-backend-developer-professional-chast-1-iz-4.html</link>
<author>Admin</author>
<category>Программирование, Backend, Java с нуля, OTUS</category>
<pubDate>Mon, 24 Aug 2026 16:16:58 +0300</pubDate>
<turbo:content><![CDATA[
<header>
<h1>OTUS - Kotlin Backend Developer. Professional (часть 1 из 4)</h1>
</header>
<b>Для кого этот курс:</b><br> <ul> <li>Для Java-разработчиков. Kotlin полностью совместим с Java, поэтому освоить его просто. Он легко интегрируется в существующие проекты и предлагает современные инструменты для более качественный и удобной бэкенд-разработки.</li> <li>Для разработчиков других языков. Синтаксис Kotlin — прост и выразителен. Если вы владеете PHP, Python, JavaScript или C#, перейти на Kotlin будет легко. Он даст новые инструменты, упрощающие бэкенд-разработку.</li> <li>Для мобильных разработчиков. Сможете сохранить единый язык программирования на фронтенде (Android) и на бэкенде. Это упростит командную работу, повысит эффективность разработки.</li> <li>Для Kotlin бэкенд-разработчиков. Узнаете о современных практиках разработки: о чистой архитектуре, микросервисах, технологиях высокой доступности и обработке больших данных.</li> </ul><b>Необходимые знания:</b><br> <ul> <li>опыт программирования на любом языке ООП</li> <li>SQL</li> <li>навыки работы с Linux</li> </ul><b>Будет плюсом:</b><br> <ul> <li>опыт программирования на Java</li> <li>знание шаблонов проектирования</li> <li>умение писать чистый код</li> <li>навыки использования git</li> </ul><b>Что вам даст этот курс:</b><br> Вы узнаете, как разрабатывать гибкие и высокопроизводительные серверные приложения на языке Kotlin. Изучите архитектурные подходы и практики, а также современные инструменты: системы хранения, обозреваемости, мониторинга и безопасности.<br> На вебинарах преподаватели покажут, как разрабатывается проект маркетплейса: от идеи и постановки задачи — до конечного решения.<br> <br> <b>Вы научитесь:</b><br> <ul> <li>использовать язык Kotlin для разработки серверных приложений</li> <li>создавать приложения для разных платформ с помощью Kotlin Multiplatform: JS, JVM, Native (Linux, Windows, MacOs, Android, iOS)</li> <li>применять асинхронное и многопоточное программирование с корутинами</li> <li>использовать OpenAPI и Kotlin Multiplatform и выполнять интеграцию бэкенд-приложения с различным фронтендом</li> <li>использовать Kotlin вместе с 10 фреймворками, включая Spring и Ktor, а также с бессерверными библиотеками</li> <li>реализовывать асинхронный транспорт с применением WebSocket, RabbitMQ и Kafka</li> <li>строить хранилища на базе SQL, NoSQL и NewSQL: Postgres, Cassandra, ArcadeDb</li> <li>писать приложения с монолитной, микросервисной и бессерверной архитектурой</li> <li>разрабатывать гибкую и надёжную бизнес-логику любой сложности, используя инструменты Kotlin DSL, ООП и null-safety</li> <li>проектировать архитектуру приложений, применяя модульную разработку, DDD, TDD, MDD</li> <li>формировать архитектуру приложения с учётом требований законодательства в области защиты информации</li> <li>внедрять в приложения элементы BI, чтобы получать аналитические отчёты по функционированию и бизнес-процессам</li> </ul>У нас нет предзаписанных уроков!<br> Занятия в OTUS – это онлайн-вебинары. Преподаватели-практики помогут погрузиться в теорию, обучат на реальных примерах, расскажут о необходимых в работе инструментах. Вы всегда сможете задать вопрос и получить обратную связь.<br> И самое главное – сможете практиковаться!<br> <br> Разработайте бэкенд приложения<br> От постановки задачи – до продуктового развёртывания<br> <br> Учитесь у экспертов<br> Наши преподаватели – асы разработки со средним стажем 10 лет<br> <br> Изучите полезные инструменты<br> Более 10 фреймворков, в т.ч. Spring, Ktor, RabbitMQ, Kafka, SQL, NoSQL, NewSQL<br> <br> <b>Программа первой части</b><br> <br> <b>1.</b> <b>Введение в Kotlin</b><br> Цель модуля: познакомить студентов с общими сведениями о языке, изучить синтаксис Kotlin, познакомиться с наиболее базовыми элементами языка. Модуль обзорный, в нем не планируется глубокое изучение всех элементов языка. Такое изучение будет происходить на практике в течение всей работы над выпускным проектом. Для работы потребуются: JDK 11, git, Intellij Idea Community Edition или GigaIDE от Сбера. Требования к ПК: памяти не менее 8 ГБ, рекомендуется не менее 16 ГБ. Рекомендуется установить Linux.<br> <br> Тема 1: Введение в курс // ДЗ<br> Тема 2: Базовые элементы Kotlin<br> Тема 3: Функциональные элементы Kotlin<br> Тема 4: Объектно-ориентированное программирование<br> <br> <b>2. Расширенные возможности Kotlin</b><br> Цель модуля: познакомиться с расширенными возможностями языка Kotlin, знание которых отличает квалифицированного разработчика. Изучаемые темы частично являются обязательными для разработчика на Kotlin (корутины, DSL), частично опциональными (Multiplatform, интероперабельность с другими языками), знанием которых можно выгодно отличиться на собеседовании.<br> <br> Тема 1: Предметно - ориентированные языки (DSL) // ДЗ<br> Тема 2: Конкурентность с корутинами<br> Тема 3: Конкурентность с Sequence и Flow-потоками<br> Тема 4: Мультиплатформенная разработка<br> Тема 5: Интероперабельность с другими языками<br> Тема 6: Расширенные возможности Gradle<br> <br> <b>3.</b> <b>Подготовка к разработке</b><br> В модуле обсуждается этап подготовки к старту проекта, который предшествует началу разработки. Среди тем рассматривается работа с идеей проекта, маркетинговая проработка, формирование требований и организация тестирования. Также обсуждается целевая архитектура проекта, инфраструктура сборки и функционирования. Модуль важен тем, что позволяет выполнить планирование и проработку выпускного проекта студента. Результатами работы в учебном модуле будут следующие: 1) список требований и критериев приемки к выпускному проекту; 2) описание API, с которым будет работать выпускной проект студента; 3) готовая инфраструктура для тестирования, развертывания и мониторинга выпускного проекта.<br> <br> Тема 1: Выбор проекта и консультация по пройденному материалу // ДЗ<br> Тема 2: Маркетинг и аналитика проекта<br> Тема 3: Общие принципы защиты информации<br> Тема 4: Архитектурные принципы и архитектура проекта<br> Тема 5: Основы DevOps и среда выполнения приложения<br> <br> <b>4.</b> <b>Разработка API</b><br> Модуль посвящен разработке API и освоению различных элементов ООП. В нем студент разработает собственное API для выпускного проекта, сделает комплект различных классов для внутреннего использования в приложении, а также научится делать мапинг между этими сущностями. Также в модуле обсуждаются вопросы тестирования и мониторинга системы на базе логов. Обязательным результатом работы по учебному модулю являются: 1) API; 2) внутренние модели; 3) маперы. Опционально студент может освоить следующие темы: 1) разработка сквозных и интеграционных тестов; 2) разработка библиотек логирования.<br> <br> Тема 1: Создаем интерфейс с помощью OpenAPI // ДЗ<br> Тема 2: Создаем внутренние модели и маперы<br> Тема 3: Тестирование проекта<br> Тема 4: Мониторинг, сбор логов и метрик<br> <br> <b>5. Фреймворки и асинхронный транспорт</b><br> Целью модуля является разработка серии приложений с применением нескольких фреймворков и транспортных интерфейсов, которые уже на самом раннем этапе разработки могут корректно отвечать и обеспечивать интеграцию нашего будущего сервиса с другими командами (фронтенд, смежные команды), несмотря на то, что до завершения проекта еще далеко. В рамках модуля будут обсуждаться HTTP-фреймворки Spring и Ktor, а также асинхронные транспортные интерфейсы WebSocket, RabbitMQ и Kafka.<br> <br> Тема 1: Разработка приложения со Spring // ДЗ<br> Тема 2: Разработка приложения с KTOR<br> Тема 3: Транспорт с WebSocket<br> Тема 4: Транспорт с RabbitMQ<br> Тема 5: Транспорт с Kafka<br> Тема 6: Разработка бессерверного приложения<br> <br> <b>6.</b> <b>Бизнес-логика проекта</b><br> В этом модуле обсуждается создание бизнес-логики проекта. В соответствии с принципами чистой архитектуры, бизнес-логика выносится в отдельный модуль (Gradle-подпроект) и становится независимой от конкретной реализации транспортных моделей, баз данных, фреймворков и пр. Кроме того, шаблон проектирования «Цепочка обязанностей» позволяет бизнес-логику сделать максимально гибкой. Доработка вашего приложения при изменении постановки задачи будет простой, быстрой и дешевой. В рамках модуля планируется разработка библиотеки для шаблона «Цепочка обязанностей», внедрение ее в приложение, а также разработка валидаторов для всех входных данных.<br> <br> Тема 1: Основы бизнес-логики и разработка библиотеки для шаблона CoR // ДЗ<br> Тема 2: Создание модуля бизнес-логики с использованием шаблона Цепочка Ответственности.<br> Тема 3: Шаг валидации в бизнес-цепочке<br> <br> <b>7.</b> <b>Работа с базами данных</b><br> В модуле рассматриваются следующие основные вопросы: - различные аспекты работы с базами данных, включая формирование миграций, особенности обслуживания конкурентного доступа к объектам в БД и др.; - исследование различных баз данных из разных поколений (SQL, NoSQL, NewSQL), которые либо активно применяются в современной разработке, либо активно развиваются и стремительно набирают популярность; - гибкая интеграция в приложение хранилищ, позволяющая легко и дешево заменять одну базу данных на другую.<br> <br> Тема 1: Практические принципы работы с БД // ДЗ<br> Тема 2: Создание репозитария<br> Тема 3: Конкурентный доступ к БД<br> Тема 4: Репозитарий с PostgreSQL<br> Тема 5: Репозитарий с Cassandra<br> Тема 6: Репозитарий с графовой базой данных<br> <br> <b>8. Развитие бизнес-логики проекта</b><br> В рамках модуля развития бизнес-логики обсуждаются различные аспекты расширения возможностей приложения, которыми обычно обрастают любые реальные проекты. Также в модуле рассматриваются различные математические алгоритмы и подходы типа машины состояний и машинного обучения. В рамках модуля студенты узнают, как выполнять контроль состояний системы, обеспечивать авторизацию в приложении, а также интегрироваться с системами искусственного интеллекта.<br> <br> Тема 1: Машина состояний<br> Тема 2: Авторизация и аутентификация в бэкенде<br> Тема 3: Введение в машинное обучение<br> Тема 4: Реализация алгоритмов ML в Kotlin-проекте<br> Тема 5: Обзор значимых проектов на Kotlin, которые выходят за рамки курса<br> <br> <b>9. Проектная работа</b><br> Заключительный месяц курса посвящен доработке выпускных проектов студентов. В течение этого месяца ожидается доделка всех оставшихся домашних заданий и подготовка к защите проекта.<br> <br> Тема 1: Защита проектных работ<br> <br> <b>Преподаватели:</b><br> Сергей Окатов, Николай Никольский, Евгений Непомнящий, Кирилл Крылов, Анастасия Порхун, Александр Брут-Бруляко<br> <br> <b>ИСТОЧНИК<br> </aside> <br> СКАЧАТЬ<br> </aside> </b>
]]></turbo:content>
</item><item turbo="true">
<turbo:extendedHtml>true</turbo:extendedHtml>
<link>https://many-courses.net/programmirovanie/14404-qa-guru-kurs-po-avtomatizacii-testirovaniya-java-advanced-2-0-dlya-prodvinutyh-10-potok.html</link>
<author>Admin</author>
<category>Программирование, Тестирование (QA), Java с нуля</category>
<pubDate>Mon, 04 May 2026 13:55:39 +0300</pubDate>
<turbo:content><![CDATA[
<header>
<h1>qa.guru - Курс по автоматизации тестирования Java Advanced 2.0 для продвинутых. 10 поток</h1>
</header>
<b>О курсе:</b><br> <ul> <li>6 месяцев обучения</li> <li>Больше 50 занятий с домашкой, по 2 занятия в неделю, и живые вебинары</li> <li>Программа по Java с погружением в backend</li> <li>Ваш уникальный микросервисный проект на Spring, покрытый всеми видами автотестов</li> <li>Обновленный курс по iOS</li> <li>Собственный проект на Swift, полное погружение в мир нативного mobile-тестирования и ни слова про Appium</li> <li>Обновлённый Niffler</li> <li>Полноценный web-проект с продуманной архитектурой, позволяющей обучаться на практических примерах</li> </ul><b>Чему мы учим?</b><br> Вы прокачаете знания в автоматизации на Java до уровня Senior+ и разнообразите портфолио впечатляющими кейсами<br> <ul> <li>Архитектура и дизайн. Глубокому пониманию JUnit extension. И использованию паттернов разработки, таких как decorator, singleton, factory, IOC.</li> <li>Покроем всё. Тестированию нестандартных протоколов взаимодействия: gRPC, GraphQL, SOAP. А также работе с базами данных и Kafka, и с такими инструментами как docker и docker-compose.</li> <li>Кроме того. Создадим весь код с нуля, исследуем, как тестируемые технологии работают в Spring Boot под капотом.</li> </ul><b>Востребованность профессии</b><br> <ul> <li>100 000 ₽ — Средняя заработная плата тестировщика.</li> <li>Одна из самых перспективных профессий на рынке.</li> <li>Возможность удалённой работы и гибкого графика.</li> <li>Быстрый карьерный рост от джуна до тимлида.</li> <li>Постоянное развитие и изучение новых технологий.</li> <li>Возможность работы в различных сферах.</li> <li>Высокий спрос на специалистов во всех IT-компаниях.</li> </ul><b>Программа курса</b><br> Регулярно обновляем программу, учим только актуальному<br> <br> 1. Niffler и его тестирование Advanced Как меняется проект<br> Тестируем полностью самописное приложение в суперсовременном стеке (Java 21, Spring Boot 3, Spring Security 6, Spring Data, OAuth2, gRPC, GraphQL, Microservices, Docker, Postgres, React)<br> Научим не просто понимать, как написать автотест на GraphQL, но и разберемся в том, как это работает под капотом<br> Вы узнаете, как сделать запрос в БД из теста и зачем это может быть нужно в микросервисной архитектуре<br> Будем подменять настоящие микросервисы на Wiremock на практике<br> <br> 2. Знакомство с Niffler NG. Локальный запуск, введение в учебный процесс, QA сессия<br> Обзор проекта Niffler<br> Необходимые предусловия для работы с проектом<br> Запуск локально: настройка в Idea Ultimate, Community<br> Необходимые предусловия для запуска проекта в docker, отличия для Windows и Nix<br> Запуск проекта в докере<br> Выполнение домашних заданий<br> <br> 3.1. Введение в JUnit Extensions. Callbacks, жизненный цикл теста, разбор первого теста<br> Интерфейсы BeforeEachCallback, AfterEachCallback и другие callback<br> Подключение Extension декларативно — аннотация @ExtendWith<br> Разбор теста, написанного на вводном занятии<br> Написание Extension для создания скриншотов на упавший тест<br> <br> 3.2. Погружение в JUnit Extensions: ExtensionContext, интерфейс ParameterResolver. Создание Extension "очередь тестовых пользователей"<br> Интерфейсы ExtensionContext и Store<br> Концепция шэринга данных через Store + Namespace<br> Создаем threadsafe очередь пользователей – UsersQueueExtension<br> <br> 3.3. Интеграция JUnit Extensions. Метааннотации, 3 способа подключения Extension. Создаем TestMethodContextExtension, QA сессия<br> Работа с аннотациями в Extensions, класс AnnotationSupport<br> Метааннотации<br> ServiceLoader и глобальное подключение Extensions<br> Аннотация @RegisterExtension<br> Q&amp;A сессия<br> <br> 4.1. Работаем с RDBMS из тестов. Введение в JDBC базовые интерфейсы и архитектура. Пишем INSERT и SELECT запросы<br> Краткая теория JDBC<br> Интерфейсы DataSource, Connection, Statement, PreparedStatement, ResultSet<br> Реализация SpendRepositryJdbc<br> Вставка данных в БД (sql INSERT) через JDBC<br> Возврат ID созданной записи<br> <br> 4.2. Работаем с RDBMS из тестов. JDBC Транзакции, JTA. Определение границ транзакций<br> Понятие Repository, создание UserRepository<br> Транзакции в JDBC<br> Реализация UserRepositoryJDBC<br> Модификация данных в БД<br> <br> 5.1. Работаем с RDBMS из тестов. Spring-JDBC базовая функциональность и архитектура библиотеки<br> JDBC-Template: теория и применимость<br> Реализация простых запросов (CRUD) c помощью библиотеки Spring-JDBC<br> <br> 5.2. Работаем с RDBMS из тестов. Spring-JDBC транзакции<br> Класс TransactionTemplate<br> Интерфейс PreparedStatementCreator<br> Реализация UserRepositorySpringJdbc<br> <br> 6.1. Работаем с RDBMS из тестов. Спецификация JPA<br> Hibernate и JPA краткая теория<br> Интерфейсы EntityManagerFactory и EntityManager<br> Декораторы для EntityManager: интерфейс EntityTransaction и использование ThreadLocal EntityManager<br> <br> 6.2. Работаем с RDBMS из тестов. Hibernate + JNDI + JTA<br> Конфигурационный файл persistence.xml<br> Реализация UserRepositoryHibernate<br> Особенности использования Hibernate работа с коллекциями, ленивая инициализация<br> <br> 6.3. Используем Repository. Подключаем созданные классы Repository к Extension. QA сессия<br> Создание аннотации и Extension AbstractTestUserExtension<br> Наследование Extension: создание класса DbTestUserExtension<br> Реализация логики создание тестового пользователя: хэширование пароля, создание в БД нескольких микросервисов<br> Передача пользователя в тест через ParameterResolver<br> Q&amp;A сессия<br> <br> 7.1. втоматизация «с нуля» минималистичный фреймворк<br> Build.gradle best practices<br> Конфигурации запуска<br> Абстракции для работы с REST api<br> PageObject<br> Утилитные классы<br> <br> 7.2. Автоматизация «с нуля». Базовые классы. Dependency Injection + QA сессия<br> Классы BaseRestTest, BaseGraphQL<br> Подготовка к написанию REST тестов пишем простые тесты на internal api (без авторизации)<br> Концепция Dependency Injection и ее реализация с помощью интерфейса TestInstancePostProcessor в JUnit 5<br> Q&amp;A сессия<br> <br> 8.1. Параллелизация тестов в JUnit5: Теория<br> Теория параллельного программирования и ее применимость к тестам<br> Shared mutable state: что такое и чем вредит<br> Конфигурация и стратегии параллелизации в JUnit 5<br> <br> 8.2. Параллелизация тестов в JUnit5: инструменты управление параллельным запуском. QA сессия по параллелизации<br> Аннотация @ResourceLock<br> Аннотация @Execution<br> Особенности работы с JUnit Extensions при многопоточном выполнении тестов<br> Еще раз про важность использования ThreadLocal переменных на примере EntityManager<br> Q&amp;A сессия<br> <br> 9.1. Allure Lifecycle. Добавляем в отчет логи тестируемых сервисов<br> Класс AllureLifecycle<br> Создаем ServerLogExtension, добавляющий логи бэкенда в Allure<br> Дорабатываем UsersQueueExtension<br> Создаем Extension для удаления вложений к тестам<br> <br> 9.2. Allure Lifecycle. Кастомные html-вложения на примере логгирования SQL<br> Принцип работа внешних интеграций Allure на примере класса AllureSelenide<br> Реализация интеграции для работы с SQL: библиотека P6Spy<br> <br> 10.1 Selenide Conditions. Создаем кастомные проверки для веб-элементов и коллекций<br> Классы Condition / CollectionCondition<br> Пишем свои кастомные ожидания для проекта Niffler: FriendsCondition, PhotoCondition<br> <br> 10.2. Selenide: нестатическая кинфигурация, библиотека selenide-core<br> Класс SelenideConfiguration<br> Реализация поднятия 2 браузеров в тесте<br> Параллельное выполнение тестов в разных браузерах<br> Использование PageObject для бибилотеки selenide-core<br> <br> 10.3. QA сессия по Allure и Selenide<br> Реализация поднятия 2 браузеров в тесте<br> Параллельное выполнение тестов в разных браузерах<br> Использование PageObject для бибилотеки selenide-core<br> QA сессия по кастомизации Allure и Selenide<br> <br> 11.1. OAUTH 2.0 + OIDC. Базовые концепции. PKCE<br> Краткая теория Oauth 2.0 code flow<br> Смотрим http-запросы в консоли браузера и подготавливаем инфраструктуру для автоматизации логина<br> <br> 11.2. OAUTH 2.0 + OIDC. Реализация через Retrofit + JUnit Extension<br> Создаем интерфес ContextHolderExtension<br> Создаем класс CodeInterceptor для okhttp клиента<br> Создаем ApiLoginExtension<br> <br> 11.3. OAUTH 2.0 + OIDC. Расширяем тестовое покрытие. QA сессия<br> Пишем WEB и API тесты с созданием всех тестовых данных через JUnit Extensions.<br> Q&amp;A сессия по авторизации через Retrofit<br> <br> 12.1. Spring core + Spring Boot. Создаем простой REST сервис<br> Базовые компоненты Spring (context, DI, сервисы)<br> Использование Spring Web (создаем REST сервис)<br> Использование Spring Data JPA (работа с базой)<br> <br> 12.2. Spring core + Spring Boot. Работа с исключениями<br> Концепция Controller Advice, возврат на фронт унифицированных ошибок<br> Docker краткая теория<br> Докеризация Spring-приложения через плагин google jib<br> <br> 13.1. GraphQL: Реализация в Spring Boot<br> GraphQL в Spring Boot<br> Аннотации @QueryMappig, @chemaMapping<br> Интерфейс DataFetchingEnvironment<br> Утилита graphiql<br> <br> 13.2. GraphQL. Пишем автотесты с использованием Apollo Client<br> Подготовка тестовых данных<br> Создаем Extension GqlRequestExtension для работы со статическими данными<br> Пишем тесты на проверку вложенных подзапросов<br> Пишем тесты на проверку работы с Apollo Cache<br> <br> 14. Установочное занятие по диплому<br> Знакомство с дипломными проектами: Rococo, Rangiffler<br> Обзор успешной дипломной работы<br> <br> 15.1. gRPC: Реализация в Spring Boot<br> gRPC в Spring Boot<br> Protobuf и Protoc компиллятор<br> Интерфейс StreamObserver<br> Конфигурация, работа с исключениями и информирование об ошибках<br> <br> 15.2. gRPC. Пишем автотесты с использованием нативных библиотек<br> Подготовка тестовых данных<br> Особенности работы с proto-файлами тестируемых сервисов в тестах<br> Пишем тесты на gRPC сервис niffler-currency<br> Сложные кейсы: gRPC Streaming<br> <br> 16.1. SOAP: Реализация в Spring Boot<br> SOAP в Spring Boot<br> XSD и WSDL схемыАннотации @Endpoint, @PayloadRoot, @ResponsePayload<br> <br> 16.2. SOAP: Пишем тесты с помощью Retrofit<br> Подготовка тестовых данных<br> Особенности работы с wsdl тестируемых сервисов в тестах<br> Пишем тесты на SOAP сервис niffler-userdata<br> <br> 16.3. GraphQL, gRPC, SOAP: Q&amp;A сессия<br> <br> 17. Unit тесты – пишем тестируемый код и тесты для него<br> Краткая теория юнит-тестирования<br> Библиотека Mockito<br> Покрываем тестами код сервисов Niffler<br> <br> 18.1. Пишем первые тесты, разбираемся с селекторами<br> Что такое селекторы, как по них находить элементы<br> Как посмотреть дерево элементов через консоль<br> Как работать с брейкпойнтами во время написания теста<br> Как добавить первые тесты в проект<br> Как запускать тесты<br> Пишем первый тест на экране регистрации<br> <br> 18.2. Переиспользуем код между разными тестами<br> Пишем второй тест и переиспользуем код между ними<br> Стабилизируем тесты: сбросив данные о регистрации<br> Как деталилазия шагов упрощает чтение тест-репорта<br> Выносим общий код в сетап и тирдаун<br> <br> 18.3. Погружение: пишем тесты для сложных сценариев<br> Добавляем accessibilityIdentifier для тестов<br> Пишем сложный тест на три экрана — проходим авторизацию, добавляем новые траты и проверяем, что они появились в общем списке.<br> Упрощаем тест, чтобы его легко было прочитать.<br> <br> 18.4. Page Object паттерн в IOS тестах<br> Делим тесткейсы на разные файлы<br> Зачем нужны пейджобжекты и как они помогают писать новые тесты<br> Описываем структуру пейдж-обжекта и переносим все прошлые тесты на них<br> <br> 18.5. Особенности XCUITests<br> Приводим тесты к нужной структуре, обсуждаем название тестов<br> Обсуждаем разные способы получения селекторов<br> Способы ускорения тестов<br> <br> 18.6. Финальная лекция блока<br> Как максимально быстро настроить автоматический запуск тестов и оповещения в мессенджер<br> <br> 19.1. Docker-compose. Запуск тестов локально в изолированном окружении<br> Поднимаем микросервисы в docker compose<br> Selenoid &amp; Selenoid UI<br> Доработка конфигурации тестов для запуска в docker<br> Упаковка проекта с тестами в docker контейнер, написание Dockerfile<br> <br> 19.2. Докеризация Niffler Тонкости инфраструктуры<br> Рассмотрим bash-скрипты в проекте niffler<br> Докеризация фронтеда с использованием nginx<br> Особеннности работы с docker-окружением<br> <br> 19.3. Docker-compose QA сессия<br> Обзор Allure docker service<br> Написание интерфейса SuiteExtension, AllureSendresultExtension<br> Q&amp;A сессия<br> <br> 20.1. Wiremock. Мок REST API in-memory<br> Сравнение с библиотекой Mockito<br> Используем in-memory Wiremock прямо в тестах<br> <br> 20.2. Wiremock. Standalone mock for RESTgRPC API<br> Используем http и gRPC Wiremock в docker-compose<br> <br> 21.1. Apache Kafkа. Реализация producer consumer в Spring Boot<br> Kafka в проекте на Spring Boot<br> Конфигурации consumer и producer<br> <br> 21.2. Apache Kafkа. Реализация consumer в тестах<br> Пишем свой Consumer и JUnit Extension для его использования в тестах<br> <br> 21.3. Q&amp;A сессия по Wiremock и Kafka<br> <br> 22. Конференции – готовим доклад и себя к выступлению<br> Как попасть на конференцию спикером<br> Как готовиться<br> Презентация – хорошая и плохая<br> Дискуссия до и после доклада<br> Ради чего? Плюсы и минусы<br> <br> 23. CI/CD - pipeline, к которому мы шли<br> Рассматриваем вопросы сборки проекта и деплоя на прод с использованием GHA<br> <br> 24. Q&amp;A по дипломному проекту<br> Отвечаем на вопросы, возникшие при работе над дипломным проектом<br> <br> <b>Преподаватели:</b><br> <b>Дмитрий Тучс. </b>Преподаёт основную программу Java на курсе Java Advanced 2.0<br> В IT больше 12 лет. Начинал в аналитике, управлял проектами. Сейчас — Head of QA at Dodo Brands. Занимается менторством, пишет и автоматизирует на Java. Автор учебной программы QA.GURU Java Advanced.<br> <br> <b>Михаил Рубанов.</b> Преподаёт iOS-программу на курсе Java Advanced 2.0<br> Head of mobile в Dodo Engineering. В разработке любит интерфейсы, тесты и доступность. Купил 10 эргономичных клавиатур. Написал книгу «Про доступность iOS». Пишет статьи на Хабр, ведет Telegram-канал о мобильной разработке в Dodo.<br> <br> <b>ИСТОЧНИК<br> </aside> <br> СКАЧАТЬ<br> </aside> </b>
]]></turbo:content>
</item><item turbo="true">
<turbo:extendedHtml>true</turbo:extendedHtml>
<link>https://many-courses.net/programmirovanie/12156-pavel-sorokin-mnogopotochnost-v-java.html</link>
<author>Admin</author>
<category>Программирование, Java с нуля</category>
<pubDate>Wed, 25 Feb 2026 15:11:17 +0300</pubDate>
<turbo:content><![CDATA[
<header>
<h1>Павел Сорокин - Многопоточность в Java</h1>
</header>
<p><b>Разберись в потоках от фундамента до production-кода.</b><br><br>Будешь спокойно писать многопоточные приложения, проходить собесы на middle+ без страха и сможешь претендовать на вакансии с зарплатой в 2 раза выше.<br><br><b>Для кого этот курс:</b><br><br>Новичок, знающий только базу по Java и Spring</p> <ul> <li>Сейчас самое время освоить многопоточность. Гораздо проще разобраться с ней на старте карьеры, чем потом догонять под давлением боевых задач.</li> </ul> <p>Junior/Middle Java-разработчик</p> <ul> <li>Умеешь писать REST API, работаешь с базами данных, но многопоточность остаётся белым пятном и это мешает браться за самые интересные проекты</li> </ul> <p>Хочешь качать харды</p> <ul> <li>Тебе важно становиться сильнее как кодер и расти по ЗП с помощью хардов, а не самопрезентаций и легенд</li> </ul> <p><b>Программа:</b><br><br><b>Модуль 1. Открываем капот: потоки, процессы, Threads API, JVM, Daemon, Synchronized, Volatile</b></p> <ul> <li>Зачем нужна многопоточность: где однопоточность «держит» систему; эффект очередей и блокирующих операций</li> <li>Поток как единица исполнения в общей памяти процесса: общий heap, stack у каждого потока</li> <li>Program → Process → Thread: от запуска программы до выполнения кода в потоке</li> <li>Планировщик ОС: очереди Ready/Waiting/Blocked; RUNNABLE ≠ RUNNING; стоимость переключений контекста; недетерминизм порядка</li> <li>Базовый Thread API: Thread/Runnable; start vs run; join; sleep (TIMED_WAITING); interrupt и восстановление флага; наблюдение состояний (getState)</li> <li>Daemon vs User: определение, назначение, условия завершения JVM, риски использования демонов для бизнес‑логики</li> <li>Введение в синхронизацию: race condition; mutex/критическая секция; synchronized; volatile;</li> </ul> <p>Результат:</p> <ul> <li>Поймёшь, как устроены процессы и потоки в JVM и ОС, где у них общая и изолированная память</li> <li>Сможешь уверенно создавать и управлять потоками: запуск, ожидание, усыпление, корректная остановка.</li> <li>Научишься объяснять работу планировщика, очереди Ready/Waiting/Blocked и почему порядок выполнения непредсказуем</li> <li>Будешь различать user‑ и daemon‑потоки и поймёшь, когда и почему JVM завершает работу.</li> <li>Освоишь базу синхронизации: зачем нужен mutex, когда использовать synchronized, а когда volatile (видимость)</li> </ul> <p><b>Модуль 2. Укрощаем хаос: JMM, Reordering, ReentrantLock, Semaphore, Deadlock, Livelock</b></p> <ul> <li>Java Memory Model (JMM): program order, happens‑before, основные HB‑рёбра (unlock→lock, volatile write→read, start/join).</li> <li>Reordering: где возможен (компилятор/JIT/CPU) и почему без HB порядок не гарантирован; volatile — видимость/порядок, но не атомарность</li> <li>Межпоточная сигнализация: монитор, очереди EntryList/WaitList, wait/notify/notifyAll, spurious wakeups и правило while; тайм‑ауты ожидания.</li> <li>ReentrantLock и Condition: re‑entry, lockInterruptibly (), tryLock (timeout), await/signal, несколько условий ожидания.</li> <li>Semaphore: permits, ограничение параллелизма, fair/non‑fair режимы.</li> <li>ReadWriteLock: совместимость читателей, эксклюзивный писатель, отсутствие безопасного апгрейда read→write, starvation и fair‑режим.</li> <li>CountDownLatch: одноразовый барьер N→0, await (timeout), сценарии start‑gate/completion‑gate.</li> <li>Атомики и CAS: Atomic*, CAS‑цикл, конфликты и спины, ABA и AtomicStampedReference.</li> <li>Deadlock: как обнаружить, условия Коффмана, «обедающие философы», порядок локов, tryLock (timeout) + откат.</li> <li>Livelock: «уступчивые» симметричные протоколы, разрыв симметрии (backoff/приоритет).</li> <li>ThreadLocal: внутренняя модель (ThreadLocalMap), кейсы применения, утечки в пулах и best‑practices</li> <li>Практика: собственная ArrayBlockingQueue на synchronized + wait/notify, продюсеры/консюмеры, проверка корректности.</li> </ul> <p>Результат:</p> <ul> <li>Узнаешь, как Java гарантирует видимость и порядок между потоками (Java Memory Model, happens‑before, reordering).</li> <li>Получишь набор практических приёмов межпоточной сигнализации (wait/notify/notifyAll) и научится избегать типовых багов (потерянные сигналы, ложные пробуждения).</li> <li>Сможешь осознанно выбирать примитив синхронизации (ReentrantLock/Condition, Semaphore, ReadWriteLock, CountDownLatch) под задачу и использовать тайм‑ауты/прерывание для выхода из вечного ожидания.</li> <li>Научишься применять атомики и CAS, объяснять ABA‑проблему и её фиксы.</li> <li>Сможешь воспроизводить и устранять deadlock и livelock (включая «уступчивый» сценарий), работать с ThreadLocal без утечек и реализовать безопасную блокирующую очередь</li> </ul> <p><b>Модуль 3. Продвинутые средства: ExecutorService, CompletableFuture, Concurrent Collections, Virtual Threads</b></p> <ul> <li>I/O-bound vs CPU-bound: задачи, ограниченные скоростью операций ввода-вывода, и задачи, ограниченные вычислительными ресурсами; определения, метрики и стратегия выбора пула потоков.</li> <li>ExecutorService и разновидности ThreadPoolExecutor: FixedThreadPool, CachedThreadPool, ScheduledThreadPool и SingleThreadExecutor; работа очереди задач, рабочих потоков и механизмы завершения пула.</li> <li>ForkJoinPool: модель work-stealing (распределения задач с кражей работы), использование классов RecursiveTask и RecursiveAction; общий ForkJoinPool для параллельных потоков (parallel streams) и пул по умолчанию для CompletableFuture.</li> <li>Parallel Streams: когда применение оправдано, влияние числа доступных процессорных ядер (Runtime.getRuntime ().availableProcessors ()), и почему такие потоки не подходят для сценариев с интенсивным вводом-выводом.</li> <li>Асинхронная модель: интерфейсы Runnable, Callable и Future; жизненный цикл Future; использование CompletableFuture, основные операторы, обработка ошибок и таймауты.</li> <li>Потокобезопасные коллекции: ConcurrentHashMap, CopyOnWriteArrayList, ArrayBlockingQueue и LinkedBlockingQueue (массив против связного ccc, примеры проблем при использовании обычных HashMap и ArrayList в многопоточности.</li> <li>Virtual Threads: создание через Thread.ofVirtual ().start () и Executors.newVirtualThreadPerTaskExecutor (); как JVM сопоставляет виртуальных и системных потоков (N к M), механизмы монтирования и размонтирования, сравнение с потоками операционной системы и ограничения в java-21</li> </ul> <p>Результат:</p> <ul> <li>Поймёшь разницу между IO‑bound и CPU‑bound задачами и научишься выбирать модель выполнения под профиль нагрузки (ThreadPoolExecutor vs ForkJoinPool vs Virtual Threads)</li> <li>Сможешь безопасно работать с пулами потоков: конфигурация, отправка задач, корректное завершение (shutdown/awaitTermination), анти‑паттерны ожидания на get/join без нужды</li> <li>Освоит Runnable/Callable/Future и построение неблокирующих цепочек на CompletableFuture (thenApply/thenCompose/thenCombine/allOf/anyOf, обработка ошибок exceptionally/handle)</li> <li>Разберёшь устройство и гарантии популярных конкурентных коллекций (ConcurrentHashMap, CopyOnWriteArrayList, ArrayBlockingQueue, LinkedBlockingQueue) и применишь их вместо небезопасных аналогов под конкуренцией.</li> <li>Поймёшь, как устроены Virtual Threads (Loom): mapping на carrier‑потоки, mount/unmount стека, где они выигрывают, а где нет; увидит практические ограничения (thread pinning, тяжёлые ThreadLocal).</li> <li>Сможешь сравнить выполнение на обычных пулах и на VT на типичных I/O‑сценариях (десятки тысяч задач) и сделать обоснованный выбор</li> </ul> <p><b>Модуль 4. Боевое крещение: реальный production-case проект</b></p> <ul> <li>Thread-per-Request в Tomcat — классическая модель, где каждому запросу выделяется поток. Покажем, где у неё пределы и как это влияет на масштабирование</li> <li>Event-loop и WebFlux / Netty — неблокирующая архитектура, где один поток обслуживает тысячи соединений.</li> <li>Virtual Threads (Java 21+) — новая эпоха Java-параллелизма. Подключим виртуальные потоки в Spring Boot и покажем, как убрать боль реактивщины без потери производительности</li> <li>I/O-bound и CPU-bound, закон Амдала — объясняем, почему многопоточность не всегда ускоряет, и как найти оптимальный баланс</li> <li>Rate-limiters и HikariCP — где рождаются «бутылочные горлышки» в реальных прод-сервисах и как их диагностировать и предотвратить</li> <li>План деградации и изоляция ресурсов — как защитить систему, если одно из API начинает тормозить</li> <li>Финальный прод-кейс — очередь задач, асинхронный раннер, три внешних API (Stock, Pricing, Shipping), статусы NEW → IN PROGRESS → DONE/FAILED. Реальный сценарий с архитектурой, близкой к продакшену.</li> </ul> <p>Результат:</p> <ul> <li>Поймёшь, как Spring Boot и Tomcat обрабатывают параллельные запросы (модель thread-per-request)</li> <li>Увидишь воочию контраст с event-loop/WebFlux</li> <li>Разберёшься в типовых узких местах (очереди, пулы, лимиты) и применишь эти знания в практике</li> <li>Реализуешь production-like асинхронный обработчик заказов с ретраями и агрегацией результатов</li> <li>На выходе будешь уметь диагностировать bottleneck, проектировать очередь задач и использовать виртуальные потоки там, где они дают выигрыш</li> </ul> <p><b>Бонусы курса:</b><br><br>Чек‑лист «20 ошибок в многопоточности»</p> <ul> <li>PDF с разбором типичных ошибок, которые встречаются даже у опытных разработчиков. <ul> <li>Ошибка: использование HashMap в многопоточности<br>Решение: ConcurrentHashMap</li> <li>Ошибка: блокировка под synchronized на длинные операции<br>Решение: выносить блокировку на минимум</li> <li>Ошибка: забыли про volatile при доступе из разных потоков<br>Решение: понимание visibility</li> </ul> </li> <li>И ещё 17 реальных примеров с объяснением, как чинить</li> <li>Используй как шпаргалку для код‑ревью. Особенно полезно перед собеседованиями — многие задачи ровно про это.</li> </ul> <p>Видео — топ‑10 вопросов на собесе</p> <ul> <li>Формат: «Как отвечать на вопросы про потоки, чтобы звучать как увереный middle+». <ul> <li>Реальные вопросы с собесов</li> <li>Как объяснять сложные темы простым языком</li> <li>Какие примеры приводить, чтобы выглядеть убедительно</li> <li>Как вести себя, если не знаешь ответа (спойлер: это нормально)</li> <li>Разбор типичных «ловушек» в вопросах интервьюеров</li> </ul> </li> <li>Это как репетиция интервью — после просмотра ты будешь звучать уверенно.</li> </ul> <p><b>Автор Паша Сорокин</b> (S0R0KlN) — Java backend-разработчик и контент-мейкер, ведущий YouTube-канал и Telegram-канал об IT. Он специализируется на Java-разработке, микросервисах, а также проводит mock-собеседования для помощи в трудоустройстве<br><br><b>Тариф Стандарт</b></p> <ul> <li>4 модуля курса (15 часов видео)</li> <li>4 практические домашки (от простых к продакшн-кейсу)</li> <li>Реальный проект для портфолио — обработчик очереди задач</li> <li>Чек-лист «20 ошибок в многопоточности»</li> <li>Видео-разбор топовых вопросов на собесах</li> </ul>
]]></turbo:content>
</item></channel></rss>