Java mülakatları üç eksende ilerler: temel dil bilgisi, nesne yönelimli programlama (OOP) ve JVM/bellek yönetimi. Aşağıda bu üç eksende en sık sorulan soruları gerçek cevaplarıyla bir araya getirdik — ezberlemek için değil, kavramları neden öyle çalıştığını anlamak için kullanın.
Temel kavram soruları
Java nedir?
Platformdan bağımsız çalışabilen, nesne yönelimli, statik tipli bir programlama dilidir. "Bir kere yaz, her yerde çalıştır" prensibiyle bilinir: Java kodu derlendiğinde bytecode'a dönüşür ve bu bytecode, üzerinde JVM (Java Virtual Machine) çalışan her işletim sisteminde çalışabilir.
JVM, JRE ve JDK arasındaki fark nedir?
JVM, bytecode'u çalıştıran sanal makinedir. JRE (Java Runtime Environment), JVM'i ve programın çalışması için gereken kütüphaneleri içerir. JDK (Java Development Kit) ise JRE'ye ek olarak derleyici ve geliştirme araçlarını da içerir — yani kod yazıp derlemek için JDK, yalnızca çalıştırmak için JRE yeterlidir.
Nesne yönelimli programlamanın dört temel ilkesi nedir?
Kapsülleme (verinin ve onu işleyen metotların bir sınıfta bir arada tutulup dışarıdan erişimin kontrol edilmesi), kalıtım (bir sınıfın başka bir sınıfın özelliklerini devralması), çok biçimlilik/polimorfizm (aynı metodun farklı sınıflarda farklı davranması) ve soyutlama (karmaşık detayları gizleyip yalnızca gerekli arayüzü göstermek).
Interface ile abstract class arasındaki fark nedir?
Abstract class, ortak durumu (alan) ve kısmen uygulanmış metotları paylaşmak için kullanılır; bir sınıf yalnızca bir abstract class'tan kalıtım alabilir. Interface ise yalnızca davranış sözleşmesi tanımlar (Java 8 sonrası default metotlarla sınırlı bir gövde de olabilir); bir sınıf birden fazla interface'i uygulayabilir. Seçim, "bu bir ilişki mi (is-a), yoksa bir yetenek mi (can-do)" sorusuna bağlıdır.
== ile equals() arasındaki fark nedir?
== operatörü, nesnelerin referansının (bellek adresinin) aynı olup olmadığını karşılaştırır. equals() metodu ise (doğru şekilde override edildiyse) nesnelerin içeriğinin eşit olup olmadığını karşılaştırır. String'lerde bu fark özellikle sık karıştırılır: iki farklı String nesnesi aynı metni tutsa bile == false dönebilirken equals() true döner.
Veri yapıları ve hata yönetimi soruları
ArrayList ile LinkedList arasındaki fark nedir?
ArrayList, verileri bitişik bir dizi üzerinde tutar; indeksle erişim hızlıdır ama listenin ortasına ekleme/silme yavaştır çünkü sonraki elemanlar kaydırılır. LinkedList, her elemanı bir öncekine ve sonrakine bağlayan bir yapıdır; ortaya ekleme/silme hızlıdır ama indeksle erişim, baştan saymayı gerektirdiği için yavaştır.
HashMap nasıl çalışır?
Her anahtar-değer çiftini, anahtarın hash kodundan hesaplanan bir "kova"ya (bucket) yerleştirir. Aynı kovaya düşen anahtarlar (çakışma) bir bağlı liste veya ağaç yapısıyla saklanır. Bu sayede ortalama durumda ekleme, silme ve arama işlemleri sabit zamanda (O(1)) gerçekleşir.
Checked ile unchecked exception farkı nedir?
Checked exception'lar (IOException gibi) derleyici tarafından zorunlu tutulur — ya yakalanmalı ya da metodun imzasında bildirilmelidir. Unchecked exception'lar (NullPointerException gibi) RuntimeException'dan türer ve derleyici bunları zorunlu kılmaz; genelde programlama hatasını gösterirler.
try-catch-finally nasıl çalışır?
try bloğunda hata oluşabilecek kod çalıştırılır. Hata oluşursa uygun catch bloğu devreye girer. finally bloğu ise hata oluşsun ya da oluşmasın her durumda çalışır — genelde dosya veya bağlantı kapatma gibi temizlik işlemleri için kullanılır.
AppFellas
Fikrinizi konuşalım.
Ücretsiz keşif görüşmesinde projenizi, bütçenizi ve zaman çizelgenizi netleştirelim.
JVM, bellek ve eşzamanlılık soruları
Garbage collection nedir?
Artık kullanılmayan (hiçbir referansı kalmamış) nesneleri belleğin heap alanından otomatik olarak temizleyen mekanizmadır. Programcının manuel bellek yönetimi yapmasına gerek kalmaz, ama garbage collector'ın ne zaman çalışacağı kesin olarak kontrol edilemez — bu yüzden performans kritik uygulamalarda nesne oluşturma sıklığı dikkatle yönetilir.
String neden immutable (değişmez) tasarlanmıştır?
Bir String nesnesi oluşturulduktan sonra değeri değiştirilemez; her "değişiklik" aslında yeni bir String nesnesi oluşturur. Bu tasarımın nedenleri: String'lerin birden fazla yerde güvenle paylaşılabilmesi (thread-safe olması), hash değerinin bir kez hesaplanıp önbelleğe alınabilmesi ve String pool mekanizmasıyla bellek tasarrufu sağlanması.
Thread nedir, multithreading neden kullanılır?
Thread, bir programın bağımsız olarak çalışabilen en küçük yürütme birimidir. Multithreading, birden fazla thread'i aynı anda çalıştırarak (özellikle çok çekirdekli işlemcilerde) bir uygulamanın birden fazla işi paralel şekilde yürütmesini sağlar — örneğin bir arayüzün donmadan arka planda veri indirmesi.
static anahtar kelimesi ne işe yarar?
Bir alan veya metodun sınıfa ait olmasını, her nesne için ayrı ayrı değil sınıf düzeyinde tek bir kopya olarak var olmasını sağlar. static bir metot, sınıftan bir nesne oluşturmadan doğrudan çağrılabilir.
Overloading ile overriding arasındaki fark nedir?
Overloading (aşırı yükleme), aynı sınıfta aynı isimde fakat farklı parametrelerle birden fazla metot tanımlamaktır ve derleme zamanında çözülür. Overriding (geçersiz kılma) ise bir alt sınıfın, üst sınıftan devraldığı bir metodu kendi ihtiyacına göre yeniden tanımlamasıdır ve çalışma zamanında çözülür — polimorfizmin temelini oluşturur.
final anahtar kelimesi ne işe yarar?
Bir değişkene uygulandığında değerinin bir kez atandıktan sonra değiştirilemeyeceğini, bir metoda uygulandığında alt sınıflar tarafından override edilemeyeceğini, bir sınıfa uygulandığında ise o sınıftan kalıtım alınamayacağını belirtir.
Wrapper class nedir, neden kullanılır?
int, boolean gibi ilkel (primitive) veri tiplerini nesne olarak temsil eden sınıflardır (Integer, Boolean gibi). Koleksiyonlar (ArrayList, HashMap gibi) yalnızca nesnelerle çalıştığı için ilkel değerleri koleksiyonlarda kullanabilmek için wrapper class'lara ihtiyaç duyulur; Java bu dönüşümü çoğu zaman otomatik (autoboxing) yapar.
Generics ne işe yarar?
Bir sınıf veya metodun, hangi veri tipiyle çalışacağını derleme zamanında belirtmenizi sağlar (List<String> gibi). Bunun faydası tip güvenliğidir: yanlış tipte bir eleman eklemeye çalışırsanız hata çalışma zamanında değil, derleme zamanında yakalanır — bu da hataları çok daha erken, çok daha ucuza ve daha az can sıkıcı bir şekilde bulmanızı sağlar.
Constructor (yapıcı metot) nedir?
Bir sınıftan yeni bir nesne oluşturulduğunda otomatik olarak çağrılan, sınıfla aynı isimde ve dönüş tipi olmayan özel bir metottur. Nesnenin başlangıç durumunu (alanlarının ilk değerlerini) ayarlamak için kullanılır. Bir sınıfa constructor tanımlanmazsa Java otomatik olarak parametresiz bir varsayılan constructor sağlar; bu, hızlı prototip yazarken kolaylık sağlasa da büyük projelerde açık ve anlaşılır bir constructor tanımlamak her zaman tercih edilmelidir.
Deneyim ve proje soruları
Teknik sorulara ek olarak, mülakatlarda projelerinize dayalı sorular da sorulur: "Bir projede karşılaştığınız en zor hata neydi, nasıl teşhis edip çözdünüz?", "Neden bu koleksiyon sınıfını tercih ettiniz?", "Bir performans sorununu nasıl bulup düzelttiniz?" Bu sorularda beklenen genel bir tanım değil, gerçek bir projeden somut ve ölçülebilir bir örnektir — hangi aracı kullandığınızı, sorunu nasıl teşhis ettiğinizi ve çözümün etkisini net bir şekilde anlatmanız beklenir.
Mülakat süreci ve sık yapılan hatalar
Java mülakatları genelde üç aşamalı işler: geçmiş projeler hakkında bir ön görüşme, ardından canlı kodlama (küçük bir sınıf yazmak veya mevcut kodda hata bulmak) ve kıdemli pozisyonlar için bir sistem tasarımı görüşmesi. Kurumsal şirketlerde Spring gibi bir framework bilgisi, Android tarafında ise Android SDK bilgisi de sıkça soruluyor — ama framework sorularından önce dilin temellerinin sağlam olması bekleniyor.
- equals() override edip hashCode() etmemek: HashMap veya HashSet içinde kullanılan nesnelerde ikisi birlikte override edilmezse beklenmedik davranışlar ortaya çıkar.
- String'leri döngü içinde + ile birleştirmek: Her birleştirme yeni bir nesne oluşturduğu için performansı düşürür; StringBuilder kullanmak daha verimlidir.
- Checked exception'ları boş bir catch bloğuyla yutmak: Hatayı sessizce yok saymak, hatanın nedenini bulmayı imkansız hale getirir.
- Gereksiz yere her şeyi static yapmak: Nesne yönelimli tasarımın avantajlarından (kapsülleme, test edilebilirlik) vazgeçmiş olursunuz.
Java, kurumsal backend sistemlerinin yanı sıra Android uygulama geliştirmede de çok uzun yıllardır temel dillerden biri olmayı sürdürüyor. Mobil tarafta kariyer yapmayı düşünüyorsanız Android geliştirici kariyerine dair yazımıza da göz atabilirsiniz.
Sık sorulan sorular
Java mülakatına hazırlanmak ne kadar sürer?
Temel sözdizimine hakimseniz, OOP prensiplerini ve koleksiyonları derinlemesine anlamak birkaç haftalık odaklı çalışmayla mümkün. Süreyi asıl uzatan şey kavramları uygulamalı projelerle pekiştirmemek.
Java mülakatlarında en çok hangi konu soruluyor?
OOP'nin dört temel ilkesi, koleksiyon sınıfları arasındaki farklar (ArrayList/LinkedList, HashMap) ve exception yönetimi en sık karşılaşılan konular.
Spring bilmeden Java mülakatına girilir mi?
Junior pozisyonlarda genelde girilebilir; framework yerine dilin temelleri test edilir. Kurumsal (backend ağırlıklı) pozisyonlarda ise Spring veya benzeri bir framework bilgisi büyük ölçüde beklenir.
Java'da hangi konular en çok karıştırılıyor?
== ile equals() farkı, checked/unchecked exception ayrımı ve String'in neden immutable tasarlandığı en sık yanlış anlaşılan üç konu. Bu üçünü net anlatabilmek mülakatta olumlu bir izlenim bırakır.



