Java Geliştirici (Backend & Microservices)
KURUMSAL YAZILIMSıfırdan ileri seviye Java Core mimarisine, Spring Boot ekosistemine ve Mikroservis dünyasına uzanan, en ince ayrıntılarıyla tasarlanmış devasa kurumsal(Enterprise) geliştirici kılavuzu.
Aşama 1: Java Temelleri ve JRE/JDK Mimarisi
Sözdizimi, Tipler, JVM ve BellekJVM, JRE ve JDK Farkları (Java Arka Planı)
Java Kodunun nasıl derlenip (.java -> .class) makine diline çevrildiğini anlama.
Main Metodu ve Top-Level Mimarisi
`public static void main(String[] args)` imzasının anlamı ve sınıf zorunluluğu.
İlkel (Primitive) ve Referans Veri Tipleri
int, boolean, char, double (Stack) ile String, Object (Heap) arasındaki devasa fark.
Tip Dönüşümleri (Type Casting)
Küçük tipleri büyüğe (int to long - Widening) veya büyüğü küçüğe (double to int - Narrowing) zorla sokmak.
Karar ve Kontrol Yapıları (If, Else, Switch-Case)
Akışı kontrol eden temel şartlı dallanmalar.
Döngüler (For, Enhanced For-Each, While, Do-While)
Tekrar eden kod bloklarını yönetme mekanizmaları ve koleksiyonlar üzerinde gezinme.
Metotlar (Functions) ve Parametre Geçişi (Pass by Value)
Prosedürel kodları bağımsız görev parçalarına bölmek, dönüş tipleri (void, return).
Metot Aşırı Yükleme (Method Overloading)
Aynı isimde ama parametre sayıları/tipleri "Farklı" olan çok sayıda fonksiyon tanımlayabilme serbestisi.
String Sınıfı, Hafıza Yönetimi ve String Pool
Metinler için en çok kullanılan sınıfın gizli çalışma mantığı ve değiştirilemezlik (Immutability).
StringBuilder ve StringBuffer: Hız Canavarları
Döngü içinde milyonlarca metni "+" operatörüyle birleştirme Faciasına (RAM şişmesine) ilaç olan sınıflar.
Hata Yönetimi ve İstisnalar (Exception Handling)
Try, Catch, Finally blokları, Throw/Throws anahtar kelimeleri ile uygulamanın çökmesini (Crash) önleme.
Aşama 2: Nesne Yönelimli Programlama (OOP)
Polymorphism, Interface, AbstractSınıf (Class) ve Nesne (Object) Anatomisi
Taslak(Blueprint) olan Sınıflar ile o taslaktan bellek(Heap) üzerinde "new" ile vücut bulan Canlı(Object) nesneler.
Constructor (Yapıcı Metot) ve "this" Anahtar Kelimesi
Nesne ilk "new"lendiğinde SADECE BİR KERE çalışan tetikleyici metot ve Parametre çakışmasını çözen "this" kancası.
Varsayılan (Default) ve Parametreli Constructor
Sınıfa hiçbir constructor yazmazsanız Java'nın gizlice arka planda attığı Boş(Default) yapıcı.
Kapsülleme (Encapsulation) ve Erişim Belirleyiciler
Değişkenleri "private" (Kilitli) yapıp, onlara sadece bizim Kontrollü Getter ve Setter metotlarımızla ulaşılması felsefesi.
Kalıtım (Inheritance) ve "extends" Mantığı
SubClass'ın (Çocuk), SuperClass'tan (Baba) tüm metot ve değişkenleri Miras alması.
Object Sınıfı ve "super" Anahtar Kelimesi
Java'daki İSTİSNASIZ TÜM sınıfların gizli Atası (Hz. Adem) olan "Object" sınıfı ve Ata Sınıfa ulaşım.
Çok Biçimlilik (Polymorphism): Upcasting
Bir "Kuş" referansının içine "Penguen" objesi, "Kartal" objesi koyup hepsine `.uc()` diyebilme yeteneği.
Method Overriding ve Overloading Farkı
Babadan gelen "SesCikar()" metodunu Çocuğun (Köpek) HA-YIR ben havlayacağım diyerek Ezmesi (Override) felsefesi.
Abstract (Soyut) Sınıflar ve Metotlar
"Araba" isminde genel bir kavram olması ama kimsenin galeriden "Ben 1 tane ARABA satın almak istiyorum!" diyememesi mecburiyeti.
Interfaces (Arayüzler): %100 Sözleşme Mantığı
Sınıflar arası "Senin bu Yeteneğin var mı?" sözleşmesi. "implements" anahtar kelimesi.
Static Anahtar Kelimesi: Sınıfın Kendisine Ait Olmak
Objelerden bağımsız (Object Independent), "new"lemeden Memory'de(Metaspace) tek kopya olarak var olan değişken ve metotlar.
Final Anahtar Kelimesi: Javadaki Mühür
Değişkeni "Sabit(Constant)" yapan, Metodu "Ezilemez(No Override)" yapan, Sınıfı ise "Kısır(Miras Veremez)" yapan son mühür.
Aşama 3: Koleksiyonlar, Generics ve Stream API
List, Map, Set, Lambda ExpressionsJava Collections Framework (JCF) Hiyerarşisi
Collection (Ata) -> List, Set, Queue (Çocuklar) şeklindeki Java'nın devasa Veri Yapıları ağacı (java.util).
List Arayüzü: ArrayList vs LinkedList Cengaverliği
Sıralı(Indexli) eleman tutan Listelerin Memory'deki (RAM) yapısal ve hızsal farklılıkları.
Set Arayüzü: HashSet vs TreeSet ve Mükerrer Kayıt
İçinde AYNI elemandan (Duplicate) ASLA iki tane barındırmayan matematiksel Kümeler.
Map Arayüzü: HashMap ve HashTable Gerçeği
Verileri "TCKimlik: İsim" gibi Anahtar-Değer (Key-Value) ikilisiyle eşleştiren Hash tabanlı sözlükler.
Generics (<T> Kavramı) ve Tip Güvenliği
`ArrayList<String>` diyerek o listeye Integer koyulmasını ENGELLEYEN ve Compile-Time'da Hata fırlatan mimari.
Iterator Deseni ve Fail-Fast Mekanizması
Bir koleksiyonu gezerken (while(iter.hasNext())) araya kaynak yapılmasına (Değişime) Java'nın gösterdiği acımasız tepki.
Java 8 Devrimi: Lambda İfadeleri (->)
Anonim İç Sınıfları (Anonymous Inner Class) ve uzun uzun "new Interface()" yazımını bitiren Ok(Arrow) sihirbazlığı.
Stream API (Akışlar): Filter, Map, Reduce
Toplu veriler (Listeler) üzerinde SQL tarzı Sorgular (Where, Select) yazmamızı sağlayan fonksiyonel veri borusu.
Parallel Streams (.parallelStream())
Stream sorgularını tek çekirdekte(CPU 1) değil, Bilgisayarın Geriye Kalan Tüm Çekirdeklerinde (Multi-Core) AYNI ANDA çalıştırmak.
Optional Sınıfı: NullPointerException (NPE) Katili
Bir metottan dönen objenin NULL gelme ihtimaline karşı onu `Optional<User>` kutusuna hapsedip güvenlik valfi takmak.
Aşama 4: Veritabanı Entegrasyonu (JDBC & Hibernate)
SQL, ORM, EntityManagerJDBC (Java Database Connectivity) Nedir?
Spring veya ORM kütüphaneleri YOKKEN, Java'nın direkt SQL yazarak veritabanına attığı ilkel / saf bağlantı köprüsü.
PreparedStatement vs Statement Farklılığı
SQL Injection (Veritabanı hackleme) zafiyetini %100 çözen, Parametreli(Soru İşaretli) ve önceden derlenen SQL cümleleri.
Connection Pooling (Bağlantı Havuzu - HikariCP)
Müşteri her istek attığında Veritabanıyla "YENİ BİR TCP" bağlantısı açma rezaletini engelleyen Hazır Depo mantığı.
ORM (Object Relational Mapping) Mucizesine Geçiş
Veritabanındaki "User" tablosunu Java'da "User" sınıfıyla Eşleyip, SQL yazmadan sadece `session.save(userObject)` dedirten teknoloji.
Hibernate Framework: Java'nın ORM Kralı
Java ekosistemindeki %90 pazar payına sahip JPA implementasyon standardı.
Entity Sınıfları ve Veritabanı Konfigürasyonu
Sınıfların başına `@Entity` koyarak onları Tablo Adayı, değişkenlerin başına `@Id` koyarak onları Primary Key(PK) yapma.
İlişkiler: C# EF vs Hibernate (OneToMany & ManyToMany)
İki sınıf (Kategori - Ürün) arasındaki SQL Foreign Key (Yabancı Anahtar) ilişkisini Kodla birbirine bağlamak.
Hibernate Fetch Type: Eager vs Lazy Loading
Ata(Kategori) Verisi DB'den çekilirken, Alt(Urunler) Verisinin o saniye "Hemen Gelsin mi(Eager) Yoksa Sorana Kadar Beklesin mi(Lazy)" sorunu.
Hibernate Cache Mimarisi (L1 ve L2 Caching)
1. Seviye Cache (Session İçi - Default) ve 2. Seviye Cache (Tüm Uygulama Çapında - EhCache) ile SQL isteklerini sıfıra indirme.
N+1 Problemi ve HQL / JPQL Çözümü
Lözy loading yaparken for döngüsü içinde DB'ye milyonlarca ince Select atma felaketi ve JOIN FETCH kurtarıcısı.
Aşama 5: Spring Boot ve REST API Geliştirme
IoC, DI Container, RestControllerSpring Framework vs Spring Boot Farkı
Tonlarca XML ayarıyla boğuşulan eski Spring ile, "Convention over Configuration (Ayarsız Varsayım)" felsefesiyle çalışan otomatik Spring Boot ayrımı.
Inversion of Control (IoC) Prensibi
Uygulamanın kontrolünü (Obje yaratma işini) programcının elinden alıp, Spring'in kendi Merkez Bankasına (Konteynerine) devretmesi.
Dependency Injection (DI) ve @Autowired
IoC Container'da bekleyen o hazır nesneleri (Bean), ihtiyaç duyan başka bir sınıfın içine (Controller) "Enjekte (Zerk)" etme mekanizması.
Bean Yaşam Döngüsü (LifeCycle) ve Scope'lar
Spring'in bir objeyi RAM'de yaratıp (Singleton/Prototype/Request) çöpe atana (Destroy) kadarki biyolojik ömrü.
@RestController ve @RequestMapping Mimarisi
Gelen HTTP isteklerini karşılayan (Resepsiyonist) sınıflar ve URL (Örn: /api/v1/users) yönlendirmeleri.
HTTP Fiilleri (@GetMapping, @PostMapping, @PutMapping)
REST prensiplerine uygun olarak Veri Çekme(Get), Yeni Veri Yaratma(Post) ve Güncelleme(Put) metodolojileri.
İstek Verileri (Request Data): @PathVariable vs @RequestParam
Postman'den veya React'ten gelen `/users/5` (Path) veya `/users?age=20` (Query) şeklindeki verileri Controller Parametresine yapıştırmak.
Veri Taşıyıcılar: DTO ve MapStruct
Veritabanı varlıklarını (Entity), Kullanıcıya "Şifresiyle falan" komple açmak yerine Araya Filtre Objesi (DTO) koymak.
Veri Doğrulama (Data Validation): @Valid
Gelen RequestBody JSON'unu Controller'a sokmadan önce (Email formatında mı, Yaş>18 mi?) diye Güvenlikten geçirmek.
Global Hata Yönetimi (Exception Handling)
Projenin 50 farklı yerinde oluşan Hataları (try-catch yığınlarını) TEK BİR MERKEZİ SINIFA toplayarak Standart JSON dönmek.
Uluslararasılaştırma (i18n - Internationalization)
Hata mesajlarının JSON formatında İspanyol Müşteriye İspanyolca, Türk Müşteriye Türkçe dönmesi.
Application.yml ve Profil Yönetimi
Tüm Şifrelerin, Veritabanı yollarının ve ayarların tutulduğu tek merkez. (Test, Canlı(Prod) ve Local ortamların ayrımı).
Aşama 6: Spring Data JPA ve İleri Veri Yönetimi
Repository Pattern, MigrationsRepository Pattern ve JpaRepository Arayüzü
Veritabanı CRUD operasyonlarını (Ekle, Sil, Listele) Tek satır kod yazmadan Sağlayan Sihirli Arayüz (Interface).
Türetilmiş Sorgular (Derived Query Methods)
Sadece Metodun "İSMİNE" bakarak, arkada o isme uygun (Where, And, Like) SQL kodunu Generate eden sihirbazlık.
@Query ve JPQL (Java Persistence Query Language)
Metot isimleriyle(findBy) yazılamayacak kadar Karmaşık(Çoklu Join, Alt sorgu) sorgular için Java dilinde özel SQL stili.
Native Query: İşin İçinden Çıkılamadığında
Performansın çok kritik olduğu (Özel Stored Procedure) anlarda, ORM zırhını delip doğrudan veritabanının kendi öz(çiğ) SQL'ini yollamak.
Sayfalama (Pagination) ve Sıralama (Sorting)
Milyonluk tabloyu `findAll()` demek yerine, "Bana sadece 2. Sayfanın 20 Elemanını getir" diyerek parçalayıp RAM'i kurtarmak.
@Transactional Yönetimi ve ACID Kuralları
Service katmanındaki 5 ayrı DB işleminin "Ya HEP YA HİÇ" mantığı! Biri hata verirse Önceki yapılmış tüm kayıtların Geri Alınması (Rollback).
Transaction Yayılımı (Propagation)
İç içe çalışan Transactional iki metodun Birbirlerinin Rollback(Hata) Kararından Nasıl etkileneceği kuralı.
Veritabanı Auditing (Otomatik Tarih/Adam Kaydı)
Bir Enttiy kaydedilirken "createdDate, updatedBy" gibi sütunların Developer ELLERİYLE değil, Spring Tarafından(Otomatik) doldurulması.
DTO Projeksiyonları (Projections)
Tabloda 50 Kolon varken (Şifre, CV vs), sadece ID ve İSİM getirmek için Koca Entity'i RAM'e taşımayıp (Performans) Arabirim(Interface) üzerinden filtrelemek.
Soft Deletion (Pasife Çekmek) Mekanizması
Kullanıcı Sil(Delete) tuşuna basınca Entity(Satır)nin Fiziksel(SQL Delete) değil, Mantıksal(is_deleted=true) olarak gizlenmesi kalkanı.
Aşama 7: Spring Security, JWT ve Kimlik Doğrulama
Filtreler, OAuth2, AuthorizationSpring Security Mimarisi ve Filtre Zinciri (Filter Chain)
Tomcat sunucusuna gelen isteğin, Controller'a ulaşmadan önce geçtiği "Güvenlik Gişeleri" silsilesi.
Authentication (Kimlik Doğrulama) vs Authorization (Yetkilendirme)
Authentication "Sen Kimsin?" (Login) sorusudur. Authorization ise "Kimliğini Anladım ama Buraya Girmeye Yetkin(Rolün) Var mı?" sorusudur.
UserDetailsService ve UserDetails Arayüzleri
Spring Security'e "Benim Veritabanımdaki Müşterilerimi Nereden Okuman Gerektiğini Sana Öğretiyorum" deme sözleşmesi.
Şifreleme (Hashing) Algoritmaları
Veritabanına şifreleri "123456" yerine, Geri Döndürülemez (Irreversible) kriptografik özetlerle (Hash) kaydetmek.
Session Tabanlı Güvenlik ve CSRF Koruması
Eski tip sitelerde, Login sonrası Tarayıcı Çerezine (Cookie) bırakılan JSESSIONID ile adamı tanıma.
Stateless REST API Güvenliği (State Tutmamak)
Sunucu RAM'inde (Session) adamın giriş yaptığını TUTMAMAK! Her yeni istekte Adamın Mühürlü Kartını (Token) sormak.
JWT (JSON Web Token) Anatomisi (Header, Payload, Signature)
İçinde Adamın ID'sini, Rolünü ve Expiration(Bitme) Süresini tutan, Sunucunun Özel Anahtarıyla İmzalanmış Mühürlü vize.
Token Yönetimi: Access Token ve Refresh Token
Access Token çalınırsa diye ömrünü 15 Dakika (Kısa) tutmak. Süre bitince adamı tekrar Logine zorlamamak için Refresh Token ile yeni Access Token türetmek.
OncePerRequestFilter Sınıfı ile JWT Doğrulama Kapısı
Spring Security zincirinin tam Kalbine Kendi yazdığımız "Token Validasyon Filtresi"ni entegre etmek.
Rol Bazlı Yetkilendirme (Role Based Access Control - RBAC)
Metotların tepesine `@PreAuthorize("hasRole('ADMIN')")` yazarak Controller seviyesinde izinsiz girişleri kesmek.
OAUTH2 ve OpenID Connect (OIDC) Kavramları
"Google ile Giriş Yap", "GitHub ile Giriş Yap" butonlarının arkasında yatan Delegasyon (Yetki Devri) mimarisi.
Aşama 8: Mikroservis Mimarisi, Docker ve Bulut
Eureka, API Gateway, CI/CDMonolitik vs Mikroservis (Microservices) Mimarisi Çatışması
Tüm E-Ticaretin (Sepet, Kargo, Ödeme) tek bir WAR dosyasından (Monolit), 50 Ayrı bağımsız sunucuya (Servis) bölünmesi serüveni.
Servis Keşfi (Service Discovery) ve Eureka
20 farklı mikroservisin IP adresi sürekli değişirse(Bulutta), birbirlerini Olay(IP) Yerinde nasıl bulacaklarının (Sarı Sayfalar/Rehber) çözümü.
API Gateway (Spring Cloud Gateway)
Müşterinin(React/iOS) 20 farklı servisin URL'ini bilmesini Engelleyip, tek bir Merkeze /api/v1/sepet isteği atmasını ve trafiği arka tarafa dağıtan Yönetmen.
Merkezi Konfigürasyon (Spring Cloud Config)
50 tane servisin "application.yml" dosyasına tek tek girip Veritabanı Şifresini(Local) Değiştirmek ameleliğinden kurtulmak.
Senkron ve Asenkron İletişim
Mikroservisler arası HTTP(Bekleyerek) iletişim kurmak ile Mesaj Kuyruğu(Beklemeksizin) iletişim kurmak felsefesi.
Saga Deseni ve Dağıtık İşlemler (Distributed Transactions)
Veritabanı farklı 3 Serviste(Sipariş->Stok->Ödeme) dönen bir döngüde STOK YOKSA diğer atılan Commit'leri (Örn Siparişi) nasıl RollBack yapacağımız.
Resilience4j ile Devre Kesici (Circuit Breaker) Patern
Sürekli Error/Timeout dönen bir servise(Örn: Ödeme) inatla istek atmayı sürdürüp Tüm Sistemi kilitlemek yerine "Devreyi Kapat (Fişi Çek)" mantığı.
Docker Konteyner Mimarisi (Kapsülleme)
Spring Boot [.jar] dosyasını; içinde kendisi için ayarlanmış (JRE, Alpine OS) sanal duvarlarla bir kalıba döküp İzole etmek.
Docker Compose ile Servis Ağı (Networking)
Tek komutla (`docker-compose up -d`) hem Postgres, hem Redis, hem RabbitMQ hem de 5 Spring Servisini birleriyle konuşacak ağda ayağa kaldırmak.
Dağıtık İzleme (Distributed Tracing)
Birbirine HTTP atan 15 servisin(Sepet->Fiyat->Banka) içinde "Bu İstek 5 saniye beklemiş AMA HANGİ SERVİSTE yavaşlamış?" dedektifliği.
CI/CD: GitHub Actions ve Jenkins (Sürekli Dağıtım)
Developer`in kodu Git'e `Push` etmesiyle; Sistemin KENDİ KENDİNE testleri (Unit) koşturması, Docker Image alıp Sunucuya (Deployment) Entegre etmesi.
Bilgi Sorumluluktur
buyoldan.com tarafından sunulan bu yol haritaları, yalnızca öğrenme sürecini kolaylaştırmak amacıyla hazırlanan birer rehber ve tavsiye niteliğindedir. Konular zamanla güncellenebilir, değişebilir veya sınav sistemlerine göre farklılık gösterebilir. Hedefine ulaşırken yalnızca buradaki içeriklerle yetinmemeni, resmi kaynakları ve güncel müfredatları da düzenli olarak araştırmanı şiddetle öneririz. Kendi yolunu çizmek senin elinde!
Buna Da Göz At
C# ve .NET Core Yazılım Geliştirme (Sıfırdan İleriye)
Modern yazılım prensipleriyle C# ve ASP.NET Core (MVC ve WebAPI) üzerinde üretim seviyesinde backend geliştirme yolculuğu
Python Geliştirici (Backend & Otomasyon)
Python kullanarak; temel script yazımından başlayıp Django/FastAPI ile gelişmiş backend servisleri ve web scraping otomasyonları kurmaya uzanan uzmanlık rotası.
Yapay Zeka ve Veri Bilimi Uzmanı (AI & Data Science)
Lineer cebirden makine öğrenmesine, derin sinir ağlarından üretken yapay zekaya (ChatGPT) uzanan en profesyonel ve eksiksiz AI rotası.