Java 3D logosu yanında katmanlı JVM disk yığını ve class modül bloğu bembeyaz arka planda premium kompozisyon

Java eğitimi, dili "enterprise dili" klişesinden çıkartıp modern özellikleriyle kullanan mühendisler yetiştirir. JVM ekosisteminin Kotlin, Scala ve Groovy arasındaki yeri; OOP'nin Java idiom'larıyla (kalıtım, kompozisyon, interface) uygulanması; Stream API ile parallel stream tuzakları somut örneklerle çalışılır.

Program sonunda katılımcı, Optional ve Record ile null safety ve immutable model yazar; Virtual Thread (Project Loom) ile mass concurrency kurar; Pattern matching ve sealed class ile modern dil özelliklerini kullanır. Maven ve Gradle ile dependency, build ve plugin yönetimi eğitimin operasyonel kapanışıdır. Eğitim, Oracle Java belgeleri baz alınarak kurgulanır.

Katılımcı Profili

Bu eğitim, Java'yı "enterprise dili" klişesinden çıkartıp modern özellikleriyle kullanmak isteyen rollere yöneliktir:

  • Java Geliştiriciler: Modern Java (17, 21 LTS) özellikleriyle çalışan ekipler
  • Backend Mühendisleri: Spring ekosisteminde yazılım geliştiren roller
  • Junior Geliştiriciler: Java'yı production seviyede öğrenmek isteyen mühendisler
  • Polyglot Programcılar: Kotlin, Scala veya Groovy ile Java arasında seçim yapan roller
  • Enterprise Mühendisleri: Büyük ölçekli Java sistemlerinde çalışan ekipler

Ön Gereklilikler

Bu eğitime katılım için aşağıdaki ön bilgiler önerilir:

  • Herhangi bir dilde temel programlama deneyimi
  • OOP kavramlarına (class, inheritance, interface) aşinalık
  • IntelliJ IDEA, Eclipse veya VS Code kullanım deneyimi
  • Komut satırı (mvn, gradle) ile temel rahatlık
  • Git ile sürüm kontrol akışı bilgisi

Süresi ve Tarihi

Süre: 5 gün. Bu süre standart program içindir; ek modüllere ve hedefe göre süre özelleştirilebilir.
Eğitim tarihleri ve saatleri, ekibinizin uygunluğuna göre birlikte planlanır.

Kazanımlar

Bu eğitimin sonunda katılımcı, Java'yı "enterprise dili" klişesinden çıkartıp modern özellikleriyle kullanır:

  • JVM ekosistemini Kotlin, Scala, Groovy ile karşılaştırarak yerini bilir
  • OOP'yi Java idiom'larıyla — kalıtım, kompozisyon, interface — uygular
  • Collections Framework ve Generics'i birlikte tip-güvenli kullanır
  • Stream API ile fonksiyonel akış kurar; parallel stream tuzaklarını bilir
  • Optional ve Record ile null safety ve immutable model yazar
  • Virtual Thread (Project Loom) ile mass concurrency kurar
  • Maven ve Gradle ile dependency, build ve plugin yönetir

Java Eğitimi Konuları

1. Java Felsefesi ve JVM Ekosistemi

  • "Write once, run anywhere" prensibi ve sürüm akışı
  • OpenJDK, Oracle JDK, Amazon Corretto, Eclipse Temurin
  • LTS sürümleri ve sürüm tercih stratejisi
  • JVM ekosistem dilleri: Kotlin, Scala, Groovy, Clojure

2. Söz Dizimi ve Primitive Tipler

  • Primitive tipler: byte, short, int, long, float, double, char, boolean
  • Autoboxing ve Integer cache (-128 ila 127)
  • var ile local type inference
  • Text block (""") ve multiline string
  • Operator önceliği ve sequence point

3. String Manipülasyonu ve StringBuilder

  • String immutability ve string pool
  • StringBuilder vs StringBuffer thread safety
  • String.format ve printf
  • String.join, String.repeat modern API
  • Locale ve internationalization

4. Akış Kontrolü ve Switch Expressions

  • if-else, classic switch statement
  • Switch expression ve arrow syntax
  • Pattern matching for switch
  • for-each ve enhanced for loop
  • break, continue, labeled loop

5. OOP - Class, Object, Encapsulation

  • Class, constructor, this keyword
  • Access modifier: public, protected, package, private
  • Getter/setter ve encapsulation
  • static keyword: field, method, block, nested class
  • Object class metotları: equals, hashCode, toString

6. Inheritance, Polymorphism, Abstract Class

  • extends ile inheritance
  • super keyword ve constructor chain
  • Method overriding ve @Override annotation
  • Abstract class ve abstract method
  • final class ve method ile inheritance kapatma

7. Interface ve Default Method

  • Interface ile multiple inheritance benzeri
  • Default method ve diamond problem çözümü
  • Static method ve private method interface'te
  • Functional interface ve @FunctionalInterface
  • Sealed interface ile sınırlı hiyerarşi

8. Collections Framework

  • List: ArrayList, LinkedList, Vector
  • Set: HashSet, TreeSet, LinkedHashSet
  • Map: HashMap, TreeMap, ConcurrentHashMap
  • Queue ve Deque: PriorityQueue, ArrayDeque
  • Iterator, fail-fast vs fail-safe
  • Collections utility class ve immutable factory

9. Generics ve Type Erasure

  • Generic class, method, interface
  • Wildcard: ?, extends, super (PECS prensibi)
  • Bounded type parameter
  • Type erasure ve runtime sınırlamaları
  • Heap pollution ve @SafeVarargs

10. Functional Interface ve Lambda

  • Lambda expression syntax
  • Built-in functional interface: Function, Predicate, Consumer, Supplier
  • Method reference (::) ve constructor reference
  • Capture variable ve effectively final

11. Stream API - map, filter, reduce

  • Stream, Collection ile farkı
  • Intermediate vs terminal operation
  • map, filter, flatMap, reduce
  • Collectors: toList, toMap, groupingBy, partitioningBy
  • Parallel stream ve ForkJoinPool

12. Optional - Null Safety

  • Optional.of, ofNullable, empty
  • orElse, orElseGet, orElseThrow farkı
  • map, flatMap, filter Optional ile
  • Optional anti-pattern: field tipi olarak kullanma

13. Exception Handling - Checked, Unchecked ve try-with-resources

  • Checked vs unchecked exception
  • try-catch-finally ve try-with-resources
  • Custom exception sınıfı tasarımı
  • Exception chaining: cause ve initCause
  • Multi-catch syntax (|)

14. I/O ve NIO.2 (Path, Files)

  • Classic I/O: InputStream, OutputStream, Reader, Writer
  • NIO.2: Path, Paths, Files
  • Files.readAllLines, Files.lines streaming
  • WatchService ile dosya değişikliği izleme
  • Serializable ve serialization riskleri

15. Concurrency - Thread, Runnable

  • Thread oluşturma: extends Thread vs implements Runnable
  • synchronized keyword ve intrinsic lock
  • volatile ve happens-before
  • wait, notify, notifyAll low-level senkronizasyon
  • java.util.concurrent.atomic paketi

16. ExecutorService ve CompletableFuture

  • ExecutorService ve thread pool yönetimi
  • Future ile sonuç bekleme
  • CompletableFuture ile asenkron zincir
  • thenApply, thenCompose, thenCombine
  • Exception handling: exceptionally, handle

17. Virtual Threads (Project Loom)

  • Platform thread vs virtual thread
  • Virtual thread yaşam döngüsü
  • Structured concurrency API
  • Scoped value (alternative to ThreadLocal)
  • Migration: traditional ExecutorService → virtual

18. Memory Model, Happens-Before ve Garbage Collection

  • JMM, happens-before ve memory barrier
  • Double-checked locking tuzakları
  • Immutable object ile thread safety
  • Generational GC: Young, Old, Metaspace
  • G1, ZGC, Shenandoah karşılaştırması
  • GC log analizi ve memory leak tespiti

19. Module System (JPMS)

  • module-info.java ve module declaration
  • exports, requires, opens
  • Modular JDK ve jlink
  • Migration: classpath → module path

20. Records, Sealed Classes, Pattern Matching

  • Record ile immutable data carrier
  • Sealed class ve permits
  • Pattern matching for instanceof
  • Pattern matching for switch
  • Record pattern ve deconstruction

21. Test - JUnit 5 ve AssertJ

  • JUnit 5 Jupiter API
  • @Test, @BeforeEach, @ParameterizedTest
  • AssertJ akıcı assertion
  • Mockito ile mock
  • Testcontainers ile integration test

22. Build - Maven ve Gradle

  • Maven: pom.xml ve standard lifecycle
  • Gradle: build.gradle ve task DSL
  • Dependency management ve BOM
  • Plugin sistemi ve custom task
  • Wrapper script (mvnw, gradlew)

JAVA EĞİTİMİ ile İlgili
Sıkça Sorulan Sorular ve Cevapları


Stream API'de parallel stream ne zaman fayda sağlar?

ForkJoinPool ile çoklu thread'de iş bölünür — CPU-bound ve büyük veri için kazanım. Küçük listede veya I/O-bound işte overhead fayda getirmez. Stateful operation, ordered stream ve common ForkJoinPool paylaşımı parallel stream'in tuzaklarıdır. Ölçmeden parallel() çağırmak çoğu zaman zarara çevirir.

Optional field tipi olarak kullanılmalı mı?

Hayır — Optional metod return type için tasarlandı. Field veya parametre olarak kullanılması memory overhead, serialization sorunu ve null check disiplinini bozar. Repository'den dönen sonucun yokluğunu Optional ile döndürmek doğru; entity'de phoneNumber alanını Optional yapmak anti-pattern.

Record ve Lombok arasında karar?

Record immutable data carrier; getter, equals, hashCode, toString otomatik gelir. Lombok @Data, @Builder gibi annotation'larla benzer şeyi yapar ama bytecode manipulation gerektirir. Java 16+ kullanıyorsanız record native, IDE/derleyici uyumu sorunsuz. Mutable bean gerekiyorsa Lombok hâlâ avantajlı.

Virtual Thread (Project Loom) ne işe yarar?

Klasik thread OS thread'e 1:1 maps olur ve binlerce concurrent connection için heavy. Virtual thread (Java 21+) JVM-managed; milyonlarca yaratılabilir, blocking I/O sırasında platform thread'i serbest bırakır. Reactive kod yazmadan yüksek-throughput web servisi yazmayı sadeleştirir.

Maven ile Gradle arasında nasıl seçim yapılır?

Maven XML-based, convention over configuration, kurumsal projede stabil. Gradle Groovy/Kotlin DSL, daha esnek, build caching ve incremental build ile büyük projelerde hızlı. Android resmi Gradle, Spring projeleri her ikisini destekler. Yeni proje seçiminde takım tecrübesi belirleyici.

Sealed class ve pattern matching ne zaman doğru?

Sealed class hierarchy'sini sınırlar — bilinen alt sınıflar dışında türetilemez. Pattern matching for switch ile compile-time exhaustiveness check sağlanır (eksik case warning). Domain modeling (Shape: Circle, Square, Triangle gibi closed set) için güçlü; visitor pattern'in yerine geçer.