Курс по Java — от съвременния език до програма, която проверява много услуги наведнъж

Езици и бекендСредно ниво

Преди този курс: Python или умение за програмиране на друг език

От Dorian Chávez, основател на Hábil и архитект на интеграции. Така обучаваме тези, които изграждат системи, които не могат да се провалят.

За кого е: за този, който вече програмира на друг език —Go, TypeScript, Python или какъвто и да е— и иска да научи днешната Java. Курсът е със средно ниво: не обяснява какво е променлива или цикъл, а обяснява какво Java прави различно и защо съществува. Всяко ново понятие се обяснява, когато се появи. Ако никога не си програмирал, започни с курса по Python или с този по Go.

Какво ще знаеш в края: да напишеш цялостна програма на Java 25, с модела на данните, изразен в типове, с тестове и конкурентност, да разбираш какво си написал и да можеш да го обясниш на някой друг. И да ти остане критерият да четеш документацията на езика сам.

Какво ти трябва, преди да започнеш: компютър с Linux Mint, да умееш да отвориш терминал и да си писал програми с функции, условия и цикли на какъвто и да е език. Урок 1 инсталира JDK от нулата, а Урок 6 — Maven.

Проектът, който ще изградиш

revisor: програма, която чете списък от услуги, пита всичките наведнъж по HTTP, измерва колко време отнема всяка, изолира повредата на всяка услуга и връща отчет винаги в един и същ ред. В края го предоставя чрез малък сървър и го пакетира в JAR. Това е същата задача като в курсовете по Go, Rust и TypeScript, решена този път на Java.

$ java -jar revisor.jar --config servicios.json
SERVICIO    ESTADO    TIEMPO  DETALLE
catalogo    ARRIBA     182ms  200
inventario  LENTO       2.3s  200
pagos       ARRIBA     132ms  200
reportes    CAIDO          —  sin conexión

4 servicios · 2 arriba · 1 lento · 1 caído · promedio 883ms

(Истинско изпълнение на завършената програма срещу учебния сървър на курса на 13 октомври 2026 г.; времената се менят при всяко изпълнение.)

Изглежда малка, но не е: за да я напишеш добре, са ти нужни запечатани типове, колекции, изключения, проект с Maven и тестове, HTTP клиентът, JSON, виртуални нишки и пакет, който може да бъде предаден.

Единайсетте урока

Урок Какво изграждаш Какво научаваш
0 Какво е Java и какво НЕ е засега нищо (четене) изходен код, байткод (bytecode) и JVM; JDK и JRE; какво е LTS и защо 25; какво защитава компилаторът и какво не
1 Инсталиране на Java 25 на твоя Linux Mint средата и първата ти програма JDK, java --version; void main() и IO.println; java Hola.java; jshell; javac; първата грешка
2 Типове, низове и управление на потока базовите функции на revisor примитиви и референции; var; == срещу equals; && срещу &; текстови блокове; switch като израз; null
3 Records, enums и запечатани типове моделът Servicio / Estado record; неизменяемост; enum; sealed; изчерпателен switch с шаблони; шаблони за record
4 Колекции, генерични типове и стриймове списъкът с услуги и отчетът List, Map, Set; неизменяеми колекции; генерични типове; Comparator; стриймове (streams); Optional
5 Грешки и изключения revisor, който не се срива проверявани и непроверявани; try-with-resources; собствени изключения; резултат срещу изключение
6 Проект с Maven истинският проект: компилира се, пакетира се и работи пакети и видимост; инсталиране на Maven; структура на Maven; pom.xml; жизненият цикъл; какво има в един .jar
7 Тестове с JUnit първите 18 теста на revisor JUnit 6; @Test; тестове с таблица от случаи; assertThrows и @TempDir; да го видиш червен; как се чете отчетът
8 HTTP и JSON истинска заявка и конфигурацията HttpClient; таймаути; Jackson 3; валидиране на данни отвън; SSRF
9 Конкурентност: проверка на всичко наведнъж конкурентният revisor виртуални нишки; една нишка на задача; invokeAll; Semaphore; ConcurrentHashMap; едно измерено състезание (race condition)
10 Завършената програма пълният revisor, готов за предаване команден ред и код на изход; сървърът на JDK; коректно спиране; качество; изпълним JAR

В края на всеки урок има упражнения с решенията им и раздел с източници, с препратките към онова, което е било твърдяно. А дневникът е твой: записвай в него какво ти струва усилия.

Три критерия, които минават през целия курс

Грешките се преподават по цената им. Проучванията с данни от стотици хиляди студенти по Java показват, че преподавателите грешат, когато гадаят кои грешки са трудните. Тези, които най-дълго се оправят, са объркването на == с equals, на & с && и неизползването на стойността, която връща един метод. Те се появяват, когато му е времето, и всеки урок нарочно предизвиква грешката, която ще видиш.

Тестовете и сигурността не са уроци, а навици. Тестове има от момента, в който проектът може да ги изпълнява (урок 7, веднага след като го превърнем в проект с Maven), и един тест не се брои, докато не си го видял да пропада. Сигурността се появява там, където се появява рискът за revisor: адресът, който някой пише във файл, данните отвън, които се валидират, и вградената сериализация, която не се използва с външни данни.

Преподава се само онова, което вече е окончателно в Java 25. Онова, което още е в предварителен преглед (preview), се появява в каре „какво предстои“, с флага, който изисква, и се казва да не се използва в продукция. Курс, който преподава току-що излязлото, остарява за шест месеца.

За да продължиш да четеш в блога на Hábil: кога е удачно (и кога не) да се компилира Java до нативен код, тестове, които хващат грешки и сигурност на API. И ако ти липсва основата от друг език, курсът по Python или този по TypeScript.

Как разбираш, че си приключил

Курсът не свършва, когато си прочел урок 10, а когато твоят revisor изпълнява тези шест неща:

  1. mvn -B verify завършва зелено и отчетът казва колко теста са се изпълнили. Преброй ги по отчета, не по кода на изход (exit code): зелено с нула теста изглежда същото като истинско зелено.
  2. Проверява 20 услуги наведнъж за време, близко до това на най-бавната, а не до сбора на всички. Измерваш го ти, с часовник, последователно и паралелно.
  3. Паднала, бавна или отговаряща с боклук услуга не сваля отчета: тя се появява в своя ред със своята грешка, а останалите излизат пълни и в същия ред както винаги.
  4. Никоя заявка не може да чака вечно: всички имат време за свързване и таймаут.
  5. Отхвърля адресите, които не са http или https, и тези, които не са в списъка с разрешените, вместо да пита каквото му напишат във файла.
  6. Изпълнява се с java -jar revisor.jar от друга папка и излиза с код 0, ако всичко работи, и с 1, ако не.

Уроци

  1. Урок 0 — Какво е Java и какво НЕ е
  2. Урок 1 — Инсталиране на Java 25 на твоя Linux Mint
  3. Урок 2 — Типове, низове и управление на потока
  4. Урок 3 — Records, enums и запечатани типове
  5. Урок 4 — Колекции, генерични типове и стриймове
  6. Урок 5 — Грешки и изключения
  7. Урок 6 — Проект с Maven
  8. Урок 7 — Тестове с JUnit
  9. Урок 8 — HTTP и JSON
  10. Урок 9 — Конкурентност: проверка на всичко наведнъж
  11. Урок 10 — Завършената програма