Skip to content

Latest commit

 

History

19 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚒️ Project Stream Forge

От простых Stream Pipeline до проектирования современных систем обработки данных на Java.

💡 Не изучайте Stream API. Учитесь мыслить потоками данных.

Project Stream Forge — это практический курс по инженерному мышлению и современной обработке данных на Java.

Здесь Stream API выступает не целью обучения, а инструментом. Проект помогает перейти от использования отдельных методов стандартной библиотеки к проектированию выразительных конвейеров обработки данных, алгоритмов и архитектурных решений. Каждый уровень последовательно развивает способность мыслить декларативно, анализировать данные и выбирать оптимальные подходы к решению задач.

Вместо набора изолированных упражнений Stream Forge предлагает последовательную образовательную траекторию, где каждый новый уровень расширяет не только набор используемых инструментов, но и способ мышления разработчика.

🚀 Чему вы научитесь

Во время прохождения курса вы познакомитесь с современными подходами к обработке данных на Java:

✔ Java Stream API ✔ Collectors Framework ✔ Lambda Expressions ✔ Optional ✔ Comparator API

✔ Проектирование Stream Pipeline ✔ Многоуровневая агрегация данных ✔ Статистическая обработка ✔ Композиции Collector ✔ Оконные алгоритмы ✔ Жадные алгоритмы ✔ Обход графов (BFS) ✔ Коэффициент сходства Жаккара ✔ Гибридные алгоритмы

🧠 Философия проекта

Большинство материалов по Stream API ограничиваются изучением отдельных методов: filter(), map(), flatMap(), collect().

Stream Forge предлагает другой подход.

Проект рассматривает Stream API как язык описания алгоритмов обработки данных. По мере прохождения курса вы переходите от простых преобразований коллекций к построению сложных конвейеров, аналитическим вычислениям и реализации алгоритмов, которые встречаются в реальных приложениях.

Каждый новый уровень не просто знакомит с очередным методом стандартной библиотеки, а развивает инженерное мышление: умение анализировать данные, выбирать оптимальный алгоритм и проектировать читаемые, масштабируемые решения.

В результате Stream API перестаёт восприниматься как набор отдельных операций и становится инструментом проектирования алгоритмов обработки данных.

📐 Две оси сложности

Обычные задачники меряют сложность одним числом. Здесь их два, и они измеряют разное.

CODE — механика записи. Сколько конструкций Stream API нужно свинтить: от filter до вложенного teeing и четырёхуровневого индекса.

MIND — мыслительная нагрузка. Свёртка восьми осей мышления:

Ось О чём
SET работа с множествами
PAIR пары и со-встречаемость
SEQ последовательности, серии, окна
CTX производный контекст: сначала посчитать, потом применить
JOIN соединение источников
ALGO проектирование алгоритмов
SYS обобщённая машинерия, композиция коллекторов
PERF рассуждение о вычислении

Разница принципиальна. Задача может быть громоздкой в записи, но пустой по мысли: построить пятиуровневый индекс механически несложно, просто длинно. И наоборот — одна строка Collector-а способна стоить часа размышлений.

Отсюда два слоя обучения:

Слой кода      MIND = 0    механика качается, мысль спит
Слой мышления  MIND > 0    механика на плато, качается мышление

Следствие, которое видно на данных: чистая механика упирается в потолок. Написать по-настоящему сложный код, не начав думать, нельзя — конструкции высшей сложности (кастомный Collector, конвейеры с промежуточными структурами) неотделимы от мышления. Поэтому за верхом кодового слоя ничего нет. Дальше — только мысль.

Ваш профиль по этим осям виден в ./hammerhall profile: где уже сильны, где провал.

🎯 Особенности проекта

  • 📚 360 практических задач первого набора, объединённых в единую траекторию;
  • 🎓 десять ступеней: три в слое кода, семь в слое мышления;
  • 🧩 единая предметная область вместо разрозненных учебных примеров;
  • 🧪 автоматическая проверка через JUnit 5;
  • 📈 постепенное усложнение алгоритмов;
  • ⚙️ задачи, приближенные к промышленной обработке данных;
  • 🧠 развитие алгоритмического мышления;
  • 🚀 современные возможности Java 25+.

🚀 Начало работы

  1. Сделайте Fork репозитория.
  2. Клонируйте проект к себе.
  3. Создайте ветку solution.
  4. Откройте первую задачу и начните решать.

Подробное описание процесса разработки приведено в Forge Workflow.

🧪 О тестах

Тест рядом с задачей — smoke-проверка. Он подтверждает, что решение собирается и что-то возвращает. Корректность он не проверяет: зелёный локальный тест не означает, что задача решена правильно.

Это сделано намеренно. Строгая проверка идёт на скрытом датасете, собранном так, чтобы вылавливать граничные случаи: пустые группы, ничьи при выборе максимума, дубликаты ключей, коллизии компараторов. Эти проверки вы не видите — иначе решать было бы нечего.

Отправьте решение через ./hammerhall submit, и оно прогонится на закрытых тестах. Названия упавших подскажут, какой случай не учтён.

Пока не отправили — разбирайте сами. В каждой задаче спросите себя: что вернётся на пустом входе? что при ничьей? что при повторяющихся ключах? Умение задать эти вопросы до запуска тестов и есть навык, который здесь ставится.

⚒️ Отправка решения на проверку

В корне проекта лежит hammerhall — клиент кузницы. Устанавливать ничего не нужно: он приезжает вместе с репозиторием.

Первый запуск

./hammerhall login

Клиент попросит токен доступа. Токен выдаётся при регистрации на сайте и показывается один раз — сохраните его сразу. Потеряли — перевыпустите в личном кабинете: в базе хранится только отпечаток, восстановить исходный токен невозможно.

Токен сохранится в .hammerhall/config. Этот файл в .gitignore — он не уедет в ваш форк.

Отправить решение

./hammerhall submit MovCode0002.java

Достаточно имени файла: клиент сам найдёт его в src/main/java. Полный путь тоже примет.

В ответ придёт вердикт:

✓ PASSED  10/10 тестов, 1007 мс

Или, если что-то не так:

✗ FAILED  3/10 тестов

Не прошли:
  · пустой вход
  · дубликаты ключей

Названия упавших тестов подсказывают, какой случай не учтён. Самих проверок вы не увидите — иначе решать было бы нечего.

Посмотреть профиль

./hammerhall profile

Покажет ваш вектор по осям мышления: где уже сильны, где провал.

На Windows

То же самое через hammerhall.bat:

hammerhall.bat submit MovCode0002.java

Что нужно

Java 25 — та же, на которой запускаются задачи. Больше ничего.


Возможные вердикты

Вердикт Что означает
PASSED решение верное, все проверки пройдены
FAILED компилируется и работает, но отвечает неправильно
STYLE_VIOLATION решение не в стрим-стиле — нет конвейера или использован цикл
COMPILE_ERROR код не компилируется
TIMEOUT решение работает слишком долго
INVALID_INPUT решение отклонено до запуска

STYLE_VIOLATION стоит до проверок: курс о Stream API, и правильный ответ, полученный циклом, задачу курса не решает.

🔄 Обновления проекта

Stream Forge находится в активной разработке.

Новые задачи, улучшения и переработка существующих уровней публикуются регулярно.

Поэтому рекомендуется не скачивать проект архивом, а работать с ним через Git и периодически синхронизировать свой форк с оригинальным репозиторием.

Что именно изменилось в каждом обновлении — в CHANGELOG.md. Там же отмечено, когда менялись условия задач и закрытые тесты: если ваше решение проходило раньше, а теперь нет — скорее всего, причина там.

Подробный процесс работы описан в документе Forge Workflow.

About

🔥 The forge is lit.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages