Əsas məzmuna keç
DevScallix

Yol xəritələri · L2

Middle Java Developer

Middle developer orta ölçülü tapşırığı başdan sona müstəqil çatdırır: analiz, kod, test, deploy və dəstək. O, yalnız kodun işləməsini yox, onun yük altında və xəta halında necə davranacağını da düşünür.

Əvvəlki səviyyədən fərqi

Junior detalları aydın olan tapşırığı yerinə yetirir. Middle isə qeyri-müəyyən tələbi dəqiqləşdirir, variantları müqayisə edir, riskləri əvvəlcədən görür və başqalarının kodunu review edə bilir. Ondan nəzarət yox, yalnız vaxtaşırı sinxronizasiya gözlənilir.

Gözlənilən biliklər

  • Concurrency: thread, ExecutorService, visibility, synchronized və volatile fərqi, ConcurrentHashMap
  • Spring @Transactional-ın proxy ilə işləməsi, propagation və rollback qaydaları
  • JPA: N+1 problemi, fetch strategiyaları, DTO projection, optimistic locking
  • SQL: index seçimi, EXPLAIN oxumaq, isolation səviyyələrinin əsasları
  • Test strategiyası: unit, slice və integration testlərin balansı, Testcontainers
  • REST API dizaynı: versiyalama, səhifələmə, ardıcıl xəta formatı (ProblemDetail)
  • Authentication əsasları: session və JWT fərqi, əsas authorization səhvləri
  • CI/CD, Docker və əsas observability: struktur log, metric, health check

Praktik bacarıqlar

  • Yavaş sorğunu tapıb index və ya sorğu dəyişikliyi ilə düzəltmək
  • Real PostgreSQL ilə integration test yazmaq
  • Müştəri xətasını log, metric və trace ilə araşdırmaq
  • Backward-compatible API və verilənlər bazası migrasiyası hazırlamaq
  • Transaction sərhədlərini düzgün təyin etmək və uzun transaction-lardan qaçmaq
  • Başqasının Pull Request-ini konstruktiv şəkildə review etmək

Tipik səhvlər

  • @Transactional metodu eyni sinifdən çağırıb transaction-ın işləməsini gözləmək
  • Lazy kolleksiyanı döngüdə oxuyaraq N+1 yaratmaq
  • Transaction içində xarici HTTP çağırışı etmək
  • Hər şeyi mock edib heç bir real inteqrasiyanı yoxlamayan testlər yazmaq
  • Timeout və retry-siz xarici servis çağırmaq

Öyrənmə prioritetləri

  1. 1Transaction və verilənlər bazasını dərindən başa düşməkPropagation, isolation, locking və index. Production xətalarının çoxu buradan gəlir.
  2. 2Performansı ölçərək yaxşılaşdırmaqTəxmin yox, SQL log, EXPLAIN və profiler ilə işləyin.
  3. 3Test strategiyası qurmaqUnit, slice və Testcontainers testlərini məqsədə görə seçin; yavaş və kövrək testlərdən qaçın.
  4. 4Concurrency və asinxron emalın əsaslarıRace condition-ı görmək, thread-safe kod yazmaq və Kafka kimi mesajlaşmanın əsaslarını bilmək.
  5. 5Çatdırılma və dəstək məsuliyyətiCI/CD, monitorinq və incident-dən sonra öyrənmək. Yazdığınız kodun sahibi olun.

Arxitektura yetkinliyi

Middle developer bir servisin daxili dizaynına cavabdehdir: qatlar, modul sərhədləri, verilənlər modeli və API müqaviləsi. O, sadə həlli üstün tutur və artıq mürəkkəbliyi əsaslandırmadan əlavə etmir. Dəyişikliyin digər servislərə və komandalara təsirini qiymətləndirir, qərarın səbəbini qısa yazıya çevirə bilir.

Nümunə suallar

  • @Transactional self-invocation halında niyə işləmir?
  • N+1 problemini necə aşkar edib düzəldərdiniz?
  • REPEATABLE READ və READ COMMITTED arasında praktik fərq nədir?
  • Unit test, slice test və integration testi nə zaman seçərdiniz?
  • Kafka-da eyni açar üçün ardıcıllıq necə qorunur?
  • Composite index-də sütun sırası niyə vacibdir?
  • Race condition nümunəsi göstərin və düzəldin.

Özünüz edə biləcəyiniz tapşırıqlar

  • Endpoint-də N+1 yaradın, SQL log ilə sübut edin, fetch join və DTO projection ilə düzəldin.
  • Eyni sətri iki transaction-dan yeniləyən lost update ssenarisi yazın, @Version ilə həll edin.
  • Servisə Testcontainers ilə integration test əlavə edin və CI-da işlədin.
  • Xarici çağırışa timeout, retry və xəta xəritələməsi əlavə edin; hər birini test edin.
  • Başqasının açıq mənbə Pull Request-ini review edib blocking və nit qeydlərini ayırın.

Bu səviyyə üçün məqalələr

Uyğun proqramlar

Bu səviyyəyə nə qədər yaxınsınız?

Bacarıq testi cavablarınıza əsaslanan şəxsi boşluq hesabatı hazırlayır. Nəticə tövsiyədir, sertifikat deyil.