Advanced Java Backend: Modullar
Proqramın məqsədi junior səviyyədən real servisi müstəqil aparan developer səviyyəsinə keçidi dəstəkləməkdir. Əsas diqqət JVM-in və yaddaşın necə işlədiyini başa düşməyə, concurrency və verilənlər bazası ilə işi düzgün qurmağa və problemi production-a bənzər mühitdə diaqnoz etməyə yönəlir. Code review həm müəllif, həm rəyçi kimi məşq olunur.
01
JVM və yaddaş
JVM-in kod və yaddaşı necə idarə etdiyini öyrənir, yaddaşla bağlı problemləri ölçü ilə araşdırırıq.
- Heap, stack, metaspace və obyektin ömrü
- Garbage collector-lar (G1, ZGC) və pauza anlayışı
- Class loading və JIT kompilyasiyası
- Heap dump və GC log oxumaq
- Memory leak-in tipik mənbələri (cache, listener, ThreadLocal)
Laboratoriya: Qəsdən yaddaş sızıntısı olan servisi heap dump ilə analiz edib sızıntının mənbəyini tapmaq və düzəltmək.
02
Concurrency və virtual thread
Java Memory Model-dən virtual thread-lərə qədər düzgün və təhlükəsiz paralel kod yazmağı öyrənirik.
- Java Memory Model, happens-before və visibility
- synchronized, Lock, atomic və concurrent kolleksiyalar
- ExecutorService, CompletableFuture və structured concurrency
- Virtual thread-lər: nə vaxt faydalıdır, pinning problemi
- Deadlock, livelock və starvation diaqnozu
- Thread dump oxumaq
Laboratoriya: Paylaşılan hesaba eyni vaxtda yazan kodda race condition yaradıb testlə təkrarlamaq, sonra iki fərqli yolla düzəldib müqayisə etmək.
03
JPA və Hibernate dərinliyi
Persistence context-in, flush-un və lazy loading-in necə işlədiyini bilmədən JPA ilə güvənli iş mümkün deyil.
- Persistence context, dirty checking və flush rejimləri
- Lazy/eager loading və N+1 problemi
- Fetch join, entity graph və projection
- Batch insert/update və optimistic locking
- Transaction sərhədləri və LazyInitializationException səbəbləri
Laboratoriya: N+1 problemi olan endpoint-i SQL log-ları ilə ölçüb üç fərqli üsulla düzəltmək və sorğu sayını müqayisə etmək.
04
SQL və sorğu performansı
Sorğunun niyə yavaş olduğunu plan əsasında müəyyən etməyi və düzgün index seçməyi öyrənirik.
- EXPLAIN / EXPLAIN ANALYZE oxumaq
- B-tree index, composite index və sütun sırası
- Covering index və selectivity
- Pagination: offset və keyset yanaşması
- Isolation səviyyələri və lock davranışı
Laboratoriya: Böyük cədvəldə yavaş sorğunu plan ilə analiz edib index əlavə etmək, əvvəl/sonra ölçüsünü yazılı qeyddə göstərmək.
05
Test strategiyası
Nəyi hansı səviyyədə test etməyin ucuz və etibarlı olduğunu müəyyən edirik.
- Test piramidası və onun məhdudiyyətləri
- JUnit 5, Mockito və mock-un həddindən artıq istifadəsi
- Testcontainers ilə real verilənlər bazasında integration test
- Slice testlər (@DataJpaTest, @WebMvcTest)
- Flaky testlərin səbəbləri və aradan qaldırılması
Laboratoriya: Mövcud servis üçün test strategiyası sənədi yazıb kritik axın üçün Testcontainers ilə integration test əlavə etmək.
06
Böyüyən kod bazasında təmiz kod
Kod bazası böyüdükcə strukturu, adlandırmanı və asılılıqları idarə etməyi məşq edirik.
- Paket strukturu və qatlar arası asılılıq qaydaları
- Domain modelinin servis kodundan ayrılması
- Refactoring texnikaları və testlə qorunan dəyişiklik
- Exception və error modeli dizaynı
- Texniki borcun görünən edilməsi
Laboratoriya: Mürəkkəb servis sinfini testləri qoruyaraq kiçik, aydın məsuliyyətli hissələrə bölmək.
07
Production-a bənzər problemlərin diaqnozu
Yavaşlıq, yaddaş artımı və nəzərə çarpmayan xətaları sistemli üsulla araşdırırıq.
- Structured logging və correlation ID
- Micrometer metrikaları və əsas siqnallar
- Profiler və flame graph oxumaq
- Connection pool tükənməsi və thread pool doyması
- Hipotezlə işləyən diaqnoz metodu
Laboratoriya: Məqsədli şəkildə pozulmuş servisi (pool tükənməsi, yavaş sorğu) yalnız log, metrik və profiler ilə diaqnoz edib yazılı postmortem hazırlamaq.
08
Code review təcrübəsi
Review həm bacarıq, həm də komanda vərdişidir; hər iki tərəfdən məşq edirik.
- Kiçik və izah olunan Pull Request hazırlamaq
- Review checklist: düzgünlük, oxunaqlılıq, test, risk
- Konstruktiv rəy yazmaq və rəyə cavab vermək
- Review-da təhlükəsizlik və performans siqnalları
Laboratoriya: Verilmiş Pull Request-i review edib yazılı rəy hazırlamaq, sonra öz Pull Request-inə gələn rəyləri əsaslandırılmış şəkildə cavablandırmaq.