Əsas məzmuna keç
DevScallix
← ProqramlarPlanlaşdırılır

Junior → Middle Akseleratoru

İşləyən junior Java developer-lər üçün 12 həftəlik instructor-led proqram: mövcud kod bazasını oxumaq və dəyişmək, Spring Boot-u dərindən bilmək, JPA və PostgreSQL tələlərindən qaçmaq, düzgün test yazmaq, təhlükəsizlik və CI əsasları və biletdən başlayaraq feature-i müstəqil çatdırmaq. Proqram plan edilmiş sillabusdur, qrupun səviyyəsinə görə tənzimlənə bilər; iş təminatı vədi yoxdur.

Bu proqram planlaşdırılır və hələ cədvələ salınmayıb. Tarix, qrup və qəbul açıq elan olunmayıb; müraciət qəbul etmirik. Maraq bildirin və ya konsultasiya istəyin: proqram planlaşdırıldıqda sizinlə əlaqə saxlayarıq.

Müddət
12 həftə
Canlı dərslər
həftədə 2 dərs, hər biri 90 dəqiqə
Mərhələ
4 mərhələ

12 həftə

Həftə-həftə tədris planı

Planlaşdırılan tədris planıdır: sıra və dərinlik qrupa uyğun dəyişə bilər. İş təminatı və ya vəzifə vədi deyil.

01 · 1–3-cü həftələr

Mövcud kodla işləmək və Spring Boot

Mərhələnin məqsədi: Tanımadığı Spring Boot layihəsini oxuyub anlamaq, təhlükəsiz dəyişiklik etmək, Git/Pull Request axınında işləmək və qatlı arxitekturanı düzgün qurmaq.

  1. Həftə 1

    Mövcud kod bazasını oxumaq və təhlükəsiz dəyişmək

    • Tanımadığı layihəni xəritələmək: modullar, giriş nöqtələri, konfiqurasiya
    • Request-in izlənməsi: controller → service → repository → DB
    • Testləri sənəd kimi oxumaq və characterization test
    • Debugger, stack trace və log ilə səbəb axtarışı
    • Kiçik, geri qaytarıla bilən dəyişiklik prinsipi

    Laboratoriya: Instructor-un verdiyi bilet izləmə (ticket tracker) layihəsini ilk dəfə işə salıb bir sorğunun yolunu debugger ilə addım-addım izləmək, sonra characterization test yazıb səhifələmə (pagination) bug-ını təkrarlayıb düzəltmək.

    Tapşırıq: CODEBASE_MAP.md hazırlamaq (modullar, request axını diaqramı), pagination bug-ını testlə təkrarlayıb düzəltmək və kiçik filter əlavə etmək; Pull Request ilə təqdim etmək.

  2. Həftə 2

    Git axını, Pull Request və code review mədəniyyəti

    • Branching, rebase vs merge, interaktiv rebase ilə tarixçənin təmizlənməsi
    • Kiçik və oxunaqlı Pull Request: təsvir, ölçü, commit mesajları
    • Review verən kimi: nəyə baxmaq, rəyi necə yazmaq
    • Review alan kimi: rəyə cavab vermək, mübahisəni həll etmək
    • Merge conflict-lərin həlli və git bisect

    Laboratoriya: Qəsdən qurulmuş merge conflict-i həll etmək, git bisect ilə bug gətirən commit-i tapmaq və həmkarın verilmiş Pull Request-ini yazılı review etmək.

    Tapşırıq: Öz feature branch-ınızda 3 kiçik, mənalı commit ilə dəyişiklik edib Pull Request açmaq və qrup yoldaşının Pull Request-inə ən azı 5 əsaslandırılmış rəy yazmaq.

  3. Həftə 3

    Spring Boot dərindən: qatlar, validation, xəta idarəsi

    • Controller / service / repository məsuliyyətləri və DTO ilə entity ayrılması
    • Bean Validation, custom validator və validation qrupları
    • @RestControllerAdvice və RFC 9457 ProblemDetail
    • Konfiqurasiya: @ConfigurationProperties, profillər
    • Bean lifecycle və dependency injection tələləri

    Laboratoriya: Entity-ni birbaşa qaytaran endpoint-i DTO, validation və vahid ProblemDetail xəta cavabı ilə yenidən yazmaq.

    Tapşırıq: Ticket tracker-ə 'yeni bilet yarat' və 'statusu dəyiş' endpoint-lərini validation, business-rule xətaları və testlərlə əlavə etmək; Pull Request.

Yoxlama nöqtəsi: Verilmiş kod bazasına validation və vahid xəta formatı ilə yeni endpoint əlavə edən, review-dan keçmiş Pull Request.

02 · 4–6-cü həftələr

Data qatı və test strategiyası

Mərhələnin məqsədi: Transaction-ları, JPA tələlərini (N+1, lazy loading) və PostgreSQL sorğu planlarını anlamaq; unit, slice və Testcontainers testlərini düzgün qatlarda yazmaq.

  1. Həftə 4

    Transaction-lar və JPA tələləri: N+1, lazy loading

    • @Transactional: sərhəd, propagation, rollback qaydaları və self-invocation tələsi
    • Persistence context, dirty checking, flush
    • N+1 problemi və fetch join / EntityGraph / batch fetching
    • LazyInitializationException və open-in-view-un qiyməti
    • Optimistic locking (@Version) ilə itirilmiş yeniləmələrin qarşısı

    Laboratoriya: SQL log-ları və Hibernate statistics ilə N+1 olan endpoint-i ölçmək, üç üsulla düzəldib sorğu sayını müqayisə etmək.

    Tapşırıq: Bilet siyahısı endpoint-indəki N+1-i düzəltmək, sorğu sayını yoxlayan test əlavə etmək və @Version ilə eyni vaxtlı redaktəni qorumaq; Pull Request.

  2. Həftə 5

    PostgreSQL: index-lər və sorğu planları

    • EXPLAIN (ANALYZE, BUFFERS): planı oxumaq
    • B-tree index, composite index və sütun sırası, partial index
    • Seq Scan nə vaxt düzgündür; statistika və selektivlik
    • Pagination: OFFSET vs keyset
    • Flyway ilə təhlükəsiz migration və index-i online yaratmaq

    Laboratoriya: 1 milyon sətirlik cədvəldə yavaş sorğunu planla analiz edib index əlavə etmək və əvvəl/sonra nəticəni ölçmək.

    Tapşırıq: Axtarış endpoint-i üçün index dizayn edib Flyway migration yazmaq, OFFSET-i keyset pagination ilə əvəz etmək, planları qısa qeyddə müqayisə etmək; Pull Request.

  3. Həftə 6

    Test strategiyası: unit, slice, Testcontainers

    • Test piramidası və hər qatda nəyi test etmək
    • Mockito ilə unit test və həddən artıq mock tələsi
    • @WebMvcTest və @DataJpaTest slice testləri
    • Testcontainers ilə real PostgreSQL integration test
    • Flaky testlərin səbəbləri və test data builder-lər

    Laboratoriya: Layihə üçün test strategiyası sənədi yazmaq və kritik axın üçün Testcontainers integration testi əlavə etmək.

    Tapşırıq: Ticket tracker üçün: 5 unit, 2 slice və 2 Testcontainers testi yazmaq, flaky riskləri qeyd etmək; Pull Request.

Yoxlama nöqtəsi: Yavaş endpoint-in ölçülmüş diaqnozu, düzəlişi (fetch strategiyası + index) və Testcontainers ilə qorunan test dəsti.

03 · 7–9-cü həftələr

Keyfiyyət, müşahidə və təhlükəsizlik

Mərhələnin məqsədi: Testlərlə qorunan refactoring etmək, structured logging və metriklərlə problemi diaqnoz etmək, authn/authz və OWASP əsas zəifliklərini bağlamaq.

  1. Həftə 7

    Clean code və refactoring

    • Code smell-lər: uzun metod, feature envy, primitive obsession
    • Testlərlə qorunan refactoring addımları
    • Sealed type, record və Optional-ın düzgün istifadəsi
    • Naming, funksiya ölçüsü və kommentin 'niyə'si
    • Legacy koda təhlükəsiz giriş: seam-lər və strangler yanaşması

    Laboratoriya: 300 sətirlik servis sinfini characterization testlərlə qoruyub kiçik, aydın məsuliyyətli hissələrə bölmək.

    Tapşırıq: Verilmiş legacy modulu 4–6 kiçik commit ilə refactor etmək; hər commit-də testlər yaşıl qalmalıdır; Pull Request.

  2. Həftə 8

    Logging və observability əsasları

    • Structured logging, log səviyyələri və correlation id (MDC)
    • Nəyi loglamamalı: şəxsi məlumat və sirlər
    • Micrometer metrikləri və Spring Boot Actuator
    • Health check, readiness və liveness
    • Log + metrik ilə problemi diaqnoz etmək

    Laboratoriya: Qəsdən pozulmuş servisi (yavaş sorğu, pool tükənməsi) yalnız log və metriklə diaqnoz edib qısa postmortem yazmaq.

    Tapşırıq: Tracker-ə correlation-id filter-i, 3 business metriki və /actuator/health qruplarını əlavə etmək; sirlərin loglanmadığını testlə göstərmək; Pull Request.

  3. Həftə 9

    Təhlükəsizlik əsasları: authn/authz və OWASP

    • Authentication vs authorization; session və JWT fərqləri
    • Spring Security: filter chain, method security, CSRF
    • OWASP Top 10: injection, broken access control, sensitive data exposure
    • IDOR və resurs səviyyəli icazə yoxlaması
    • Parolların saxlanması, asılılıq zəiflikləri, secret idarəsi

    Laboratoriya: Verilmiş layihədə SQL injection və IDOR zəifliyini testlə sübut edib bağlamaq.

    Tapşırıq: Tracker-də rol və sahiblik əsaslı icazələr (başqasının biletini görməmək → 404) və authorization testləri; təhlükəsizlik review qeydi; Pull Request.

Yoxlama nöqtəsi: Legacy modulun refactoring Pull Request-i, log/metrik əlavələri və təhlükəsizlik review qeydi (tapılan və bağlanan zəifliklər).

04 · 10–12-cü həftələr

Çatdırılma: Docker, CI və müstəqil feature

Mərhələnin məqsədi: Tətbiqi konteynerləşdirmək, CI pipeline qurmaq, biletdən tapşırıqları qiymətləndirib bölmək və feature-i əvvəldən sona müstəqil çatdırmaq.

  1. Həftə 10

    Docker və CI pipeline

    • Multi-stage Dockerfile, layer cache və kiçik image
    • docker compose ilə lokal mühit (app + PostgreSQL)
    • GitHub Actions: build, test, cache, artifact
    • Pipeline-da Testcontainers və keyfiyyət qapıları
    • 12-factor konfiqurasiya və sirlərin CI-da idarəsi

    Laboratoriya: Tətbiq üçün multi-stage Dockerfile yazıb image ölçüsünü azaltmaq və CI-da testləri işə salan workflow qurmaq.

    Tapşırıq: Tracker üçün Dockerfile, compose.yaml və yaşıl CI workflow-u; README-də 'bir əmrlə işə sal' təlimatı; Pull Request.

  2. Həftə 11

    Biletdən feature-ə: qiymətləndirmə və planlama

    • Biletin aydınlaşdırılması: acceptance criteria və suallar
    • Tapşırıqların bölünməsi və vertikal dilimlər
    • Qiymətləndirmə: qeyri-müəyyənlik, aralıq və risk
    • Feature flag və tədricən çatdırılma
    • Statusu paylaşmaq: bloker, risk, asılılıq

    Laboratoriya: Qeyri-müəyyən bir biletdən sual siyahısı, tapşırıq bölgüsü və aralıqlı qiymətləndirmə çıxarıb instructor ilə 'product owner' rolunda müzakirə etmək.

    Tapşırıq: Capstone biletini götürüb plan sənədi yazmaq (suallar, dilimlər, qiymətləndirmə, risklər) və ilk dilimi Pull Request kimi göndərmək.

  3. Həftə 12

    Capstone: müstəqil feature çatdırılması və demo

    • Feature-in qalan dilimlərinin çatdırılması
    • Öz-özünə review və Pull Request-in hazırlanması
    • Review rəylərinə cavab və düzəliş
    • Demo: nəyi, necə, hansı kompromisləri göstərmək
    • Retrospektiv və növbəti inkişaf planı

    Laboratoriya: Feature-i tamamlamaq, instructor və həmyaşıd review-dan keçirmək, CI yaşıl vəziyyətdə 10 dəqiqəlik demo etmək.

    Tapşırıq: Tam feature Pull Request-i (kod, testlər, migration, sənəd), review-ya cavablar və demo qeydləri; təqdimat və retrospektiv.

Yoxlama nöqtəsi: Real koda yaxın kod bazasında müstəqil çatdırılmış, review-dan keçmiş və demo edilmiş feature (kod, testlər, CI yaşıl, qısa sənəd).

Maraq bildirin

Bu, müraciət və ya ödəniş öhdəliyi deyil. Proqram planlaşdırıldıqda və ya sizə uyğun format müzakirə olunduqda əlaqə saxlayırıq.

Sizinlə necə əlaqə saxlayaq?