Java ve Spring Boot Mülakat Soruları: Junior ve Mid Seviye İçin Örnekler

Java ve Spring Boot mülakat soruları, junior ve mid seviye backend adaylarının dili, framework'ü ve üretim ortamı alışkanlıklarını ne kadar anladığını ölçer. Bu yazıda soruları seviyeye göre grupladım: önce junior adaydan beklenen temel Java ve Spring bilgisi, ardından mid seviyede öne çıkan transaction, performans, güvenlik ve test konuları.
2012'den beri web projeleri yönetiyorum ve backend ekibine geliştirici alırken bu soruların önemli bir kısmını ben de soruyorum. Bu yazı kütüphane tanıtımı değil; hangi kütüphanenin ne işe yaradığını değil, görüşmede nasıl sorgulandığını anlatıyor. Diğer teknik yazılara yazılım kategorisinden ulaşabilirsiniz.
Java ve Spring Boot mülakat soruları neyi ölçer?
Java ve Spring Boot mülakat soruları, adayın nesne yönelimli Java temellerini, Spring'in bağımlılık enjeksiyonu ve otomatik yapılandırma mantığını, veritabanı erişimini ve üretimdeki hata davranışını anlayıp anlamadığını ölçen teknik sorulardır. Görüşmeci ezberi değil, bir kararın nedenini açıklayabilmenizi dinler.
Deneyimime göre sorular iki eksende ilerler. Birinci eksen bilgi derinliğidir: tanımı biliyor musunuz, yoksa neden öyle çalıştığını da biliyor musunuz? İkinci eksen sorumluluktur. Junior adaydan doğru kod yazmasını beklerim; mid adaydan ise o kodun yük altında, hatalı veride ve güvenlik açısından nasıl davrandığını öngörmesini isterim. Bu nedenle aşağıdaki gruplar kolaydan zora doğru sıralı.
Junior seviyede hangi Java mülakat soruları gelir?
JDK, JRE ve JVM arasındaki fark nedir?
JVM, bytecode'u çalıştıran sanal makinedir. JRE, JVM ile çalışma için gereken sınıf kütüphanelerini içerir. JDK ise JRE'ye ek olarak derleyici ve geliştirme araçlarını getirir. Güncel sürümlerde ayrı JRE dağıtımı pek görmezsiniz; yine de görüşmeci bu üçlüyü ayırt etmenizi ister.
Java neden platformdan bağımsızdır?
Çünkü derleyici kaynak kodu doğrudan makine koduna değil, bytecode'a çevirir. Ardından her işletim sistemindeki JVM bu bytecode'u kendi ortamında çalıştırır. Yani taşınabilirlik JVM katmanından gelir. Görüşmede JIT derleyicisinin sık çalışan kodu makine koduna çevirdiğini eklemeniz iyi bir artı olur.
İlkel tipler ile sarmalayıcı sınıflar arasındaki fark nedir?
İlkel tipler (int, long, boolean) değeri doğrudan tutar ve null olamaz. Sarmalayıcılar (Integer, Long) ise nesnedir; koleksiyonlarda onları kullanırsınız ve null alabilirler. Otomatik kutulama bu dönüşümü sessizce yapar. Dolayısıyla null bir Integer'ı int'e açarken NullPointerException alabilirsiniz; bu tuzak junior görüşmelerin klasiğidir.
String ve eşitlik soruları görüşmecilerin favorisi mi?
== ile equals() arasındaki fark nedir?
== iki referansın aynı nesneyi gösterip göstermediğine bakar. equals() ise sınıfın tanımladığı mantıksal eşitliği kontrol eder. Örneğin iki ayrı String nesnesi aynı metni tutuyorsa equals true döner, == ise false dönebilir. Bu soru, adayın referans kavramını anlayıp anlamadığını hızlıca gösterir.
equals() ile hashCode() neden birlikte ezilmelidir?
HashMap ve HashSet önce hashCode ile kovayı bulur, ardından equals ile eşleşmeyi kontrol eder. Eşit iki nesne farklı hashCode üretirse, koleksiyon onları farklı kabul eder ve aradığınızı bulamaz. Kısacası sözleşme şudur: equals true ise hashCode da aynı olmalıdır. Tersi zorunlu değildir.
String neden değiştirilemez (immutable)?
String nesnesini oluşturduktan sonra içeriğini değiştiremezsiniz; her değişiklik yeni bir nesne üretir. Bu tasarım string havuzunu güvenli kılar, eşzamanlı kullanımda kilit gerektirmez ve hashCode'u önbelleklemeye izin verir. Döngüde çok sayıda birleştirme yapacaksanız StringBuilder kullanmalısınız.
Junior adaya hangi OOP ve koleksiyon soruları gelir?
Abstract class ile interface arasındaki fark nedir?
Abstract class durum (alan) tutabilir ve yapıcıya sahip olabilir; bir sınıf yalnızca bir tanesini genişletebilir. Interface ise sözleşme tanımlar ve bir sınıf birden çok interface uygulayabilir. Java 8'den beri interface'ler default metot da içerebilir. Ancak ortak durum paylaşımı gerekiyorsa abstract class daha doğal bir seçimdir.
ArrayList ile LinkedList ne zaman seçmelisiniz?
ArrayList dizi tabanlıdır, indeksle erişim hızlıdır. LinkedList düğüm tabanlıdır ve ortadan ekleme teorik olarak ucuzdur. Pratikte ArrayList çoğu senaryoda daha hızlıdır, çünkü bellek yerelliği iyidir. Bu yüzden LinkedList'i savunacaksanız somut bir kuyruk senaryosu anlatmanız gerekir.
HashMap içeride nasıl çalışır?
HashMap anahtarın hashCode değerinden bir kova indeksi hesaplar. Aynı kovaya düşen kayıtlar önce bağlı listede durur; Java 8'den sonra kova belirli bir eşiği aşarsa ağaç yapısına dönüşür. Doluluk oranı eşiği geçince tablo büyür ve kayıtları yeniden dağıtır. Ayrıca HashMap thread safe değildir.
İstisna yönetimiyle ilgili hangi sorular gelir?
Checked ve unchecked exception farkı nedir?
Checked exception'ları derleyici yakalamanızı ya da imzada bildirmenizi ister; IOException buna örnektir. Unchecked exception'lar RuntimeException'dan türer ve derleyici zorlamaz. Spring dünyasında çoğu hata unchecked olarak ilerler. Üstelik bu tercih, transaction geri alma davranışını da etkiler; buna mid seviye bölümünde döneceğim.
try-with-resources ne işe yarar?
AutoCloseable uygulayan kaynakları blok bitince otomatik kapatır. Böylece finally içinde elle close çağırma ve bu sırada yeni hata fırlatma riski ortadan kalkar. Dosya, akış ve JDBC bağlantısı sorularında bu yapıyı kullanmanızı isterler.
- Hatayı yutmayın; en azından loglayın ve bağlamını ekleyin.
- Genel Exception yakalamak yerine beklediğiniz tipi yakalayın.
- İş kuralı ihlalleri için anlamlı adlı özel istisna sınıfları tanımlayın.
Junior seviyede hangi Spring Boot mülakat soruları gelir?
Spring ile Spring Boot arasındaki fark nedir?
Spring Framework bağımlılık enjeksiyonu, web, veri erişimi gibi yapı taşlarını sunar. Boot ise bu yapı taşlarını hazır varsayılanlarla bir araya getirir: starter bağımlılıkları, otomatik yapılandırma ve gömülü sunucu. Yani Boot, Spring'in yerine geçmez; kurulum yükünü azaltan bir katmandır.
Spring Boot hangi Java sürümünü ister?
Resmi Spring Boot sistem gereksinimleri sayfasına göre güncel Spring Boot 4 serisi en az Java 17 ister ve Jakarta EE 11 tabanlıdır. Spring Boot 3 ile birlikte javax paketlerinden jakarta paketlerine geçişi de bilmelisiniz; eski projelerde bu soru sık gelir.
@SpringBootApplication neleri kapsar?
Bu anotasyon üç şeyi birleştirir: @Configuration, @EnableAutoConfiguration ve @ComponentScan. Dolayısıyla Spring, ana sınıfın paketini ve alt paketlerini tarar. Bileşeniniz bu paketin dışında kalırsa bean oluşmaz; junior adayların sık düştüğü bir hatadır.
Bağımlılık enjeksiyonu hakkında hangi sorular gelir?
Dependency injection nedir, ne işe yarar?
Bir sınıfın ihtiyaç duyduğu nesneleri kendisinin oluşturması yerine dışarıdan alması demektir. Spring bu nesneleri bean olarak yönetir ve gerektiği yere verir. Böylece sınıflar gevşek bağlı olur, testte sahte nesne vermek kolaylaşır. Görüşmede bunu inversion of control kavramıyla ilişkilendirirseniz cevabınız tamamlanır: nesnelerin yaşam döngüsünü artık sizin kodunuz değil, Spring konteyneri yönetir. Örneğin bir ödeme servisini arayüz üzerinden alırsanız, testte gerçek bankaya gitmeyen sahte bir uygulama verebilirsiniz.
Constructor injection neden daha iyidir?
Yapıcı enjeksiyonu bağımlılıkları final alan olarak tutmanıza izin verir, eksik bağımlılığı uygulama açılışında yakalar ve testte düz Java ile nesne kurmanızı sağlar. Alan enjeksiyonu ise bağımlılığı gizler. Tek yapıcısı olan sınıfta @Autowired yazmanız gerekmez; bunu bilmek artı puandır.
Bean kapsamları (scope) nelerdir?
Varsayılan kapsam singleton'dır: konteyner başına tek örnek. Prototype her istekte yeni örnek üretir. Web uygulamalarında request ve session kapsamları da vardır. Singleton bean içinde değişken durum tutarsanız eşzamanlı isteklerde veri karışır; bu nedenle servisleri durumsuz yazmalısınız.
REST API ve controller katmanında hangi sorular çıkar?
@Controller ile @RestController farkı nedir?
@RestController, @Controller ile @ResponseBody'nin birleşimidir. Dönen nesne görünüm adı olarak değil, doğrudan yanıt gövdesi olarak (genelde JSON) gider. Sunucu tarafında HTML şablonu dönüyorsanız @Controller, API yazıyorsanız @RestController kullanırsınız.
Doğru HTTP durum kodunu nasıl döndürürsünüz?
ResponseEntity ile kodu açıkça belirleyebilir ya da @ResponseStatus kullanabilirsiniz. Oluşturma işleminde 201, bulunamayan kayıtta 404, doğrulama hatasında 400 dönmelisiniz. Yönlendirme mantığını test etmek isterseniz yönlendirme denetleyici ile yanıt zincirini görebilirsiniz.
Global hata yönetimini nasıl kurarsınız?
@RestControllerAdvice içinde @ExceptionHandler metotları tanımlarsınız. Böylece her controller'da try-catch tekrarlamaz, tutarlı bir hata gövdesi dönersiniz. Güncel Spring sürümleri RFC 9457 tabanlı ProblemDetail yapısını destekler; bunu anmanız mid seviyeye yakın olduğunuzu gösterir.
Junior ile mid seviye soruları arasında ne fark var?
Aynı konu iki seviyede farklı derinlikte gelir. Aşağıdaki tablo, kendi görüşmelerimde kullandığım ayrımı özetliyor; bu saha tecrübesine dayalı bir çerçevedir, her şirket için geçerli bir standart değildir.
| Konu | Junior beklentisi | Mid beklentisi |
|---|---|---|
| Koleksiyonlar | List, Set, Map farkı | HashMap iç yapısı, ConcurrentHashMap |
| Spring çekirdeği | Bean, DI, anotasyonlar | Proxy, otomatik yapılandırma koşulları |
| Veri erişimi | Repository ile CRUD | N+1, fetch stratejisi, transaction sınırı |
| Hata yönetimi | try-catch, özel istisna | Global handler, geri alma kuralları |
| Eşzamanlılık | Thread kavramı | ExecutorService, sanal thread, yarış durumu |
| Test | Birim test yazma | Slice test, entegrasyon testi, Testcontainers |
| Üretim | Loglama | Actuator, metrik, sağlık kontrolü |
Kısacası junior aday "nasıl" sorusunu cevaplar, mid aday ise "ne zaman ve neden" sorusunu da cevaplar.
Mid seviyede hangi Java mülakat soruları gelir?
Java bellek modeli ve garbage collection nasıl çalışır?
Nesneler heap'te, metot çağrıları ve yerel değişkenler stack'te yaşar. Garbage collector erişilemeyen nesneleri temizler; güncel JDK'larda varsayılan toplayıcı G1'dir. Mid adaydan bellek sızıntısının Java'da da mümkün olduğunu bilmesini beklerim: statik koleksiyonda biriken referanslar buna örnektir.
Stream API mi, klasik döngü mü?
Stream'ler dönüşüm zincirlerini okunaklı kılar ve tembel çalışır. Ancak yan etkili işlemler ve karmaşık hata yönetimi için klasik döngü daha açıktır. parallelStream'i düşünmeden kullanmak ise ortak havuzu tüketebilir. Bu yüzden ölçmeden paralelleştirmemek iyi bir cevaptır.
Record ve Optional ne zaman işe yarar?
Record, değiştirilemez veri taşıyıcıları için kısa bir sözdizimi sunar; DTO'lar için uygundur. Optional ise dönüş değerinin boş olabileceğini açıkça belirtir. Öte yandan Optional'ı alan veya parametre olarak kullanmak iyi bir fikir değildir; yalnızca dönüş tipi için tasarlanmıştır.
Eşzamanlılık ve sanal thread soruları nasıl gelir?
synchronized, volatile ve atomic sınıflar arasındaki fark nedir?
synchronized karşılıklı dışlama ve görünürlük sağlar. volatile yalnızca görünürlük sağlar; bileşik işlemleri (sayaç artırma gibi) güvenli yapmaz. AtomicInteger gibi sınıflar ise kilitsiz, atomik güncelleme sunar. Yani sayaç sorusuna volatile cevabı vermek klasik bir hatadır.
Sanal thread nedir, Spring Boot'ta nasıl etkinleştirirsiniz?
Sanal thread'ler, JEP 444 ile Java 21'de kalıcı hale gelen hafif thread'lerdir. Bloklayan I/O ağırlıklı işlerde çok sayıda eşzamanlı isteği ucuza taşır. Spring Boot'ta spring.threads.virtual.enabled=true ayarıyla etkinleştirirsiniz. Ancak CPU yoğun işleri hızlandırmaz; bunu da belirtmelisiniz.
- Deadlock: iki thread birbirinin kilidini bekler.
- Race condition: sonuç, işlemlerin sırasına göre değişir.
- Starvation: bir thread kaynağa uzun süre ulaşamaz.
Mid seviyede hangi Spring Boot mülakat soruları gelir?
Otomatik yapılandırma nasıl çalışır?
Spring Boot, sınıf yolunda bulunan kütüphanelere ve mevcut bean'lere bakarak koşullu yapılandırmalar uygular. @ConditionalOnClass, @ConditionalOnMissingBean gibi koşullar bunu yönetir. Kendi bean'inizi tanımlarsanız varsayılan devreden çıkar. Hangi yapılandırmanın neden devreye girdiğini görmek için debug modunda koşul raporunu okuyabilirsiniz.
Profil ve yapılandırma yönetimini nasıl kurarsınız?
application.yml içinde ortak ayarları, application-prod.yml gibi dosyalarda ortama özel ayarları tutarsınız. @ConfigurationProperties ile ayarları tip güvenli bir sınıfa bağlarsınız. Ayrıca gizli bilgileri depoya koymamanız, ortam değişkeni veya gizli anahtar yöneticisinden okumanız gerekir.
Spring AOP ve proxy mantığı neden önemlidir?
@Transactional, @Cacheable ve @Async gibi anotasyonlar proxy üzerinden çalışır. Aynı sınıf içinden this ile çağrılan metotta proxy devreye girmez, anotasyon etkisiz kalır. Bu self invocation tuzağını açıklayabilen aday, framework'ü gerçekten anlamıştır.
Transaction ve JPA soruları neden mid seviyeyi ayırır?
@Transactional hangi durumlarda geri alır?
Varsayılan olarak unchecked exception ve Error durumunda geri alır; checked exception'da almaz. Bunu değiştirmek için rollbackFor kullanırsınız. Ayrıca private metotta ve self invocation'da anotasyon çalışmaz. Bu üç ayrıntı, üretimde sessiz veri tutarsızlığının en yaygın nedenlerindendir.
N+1 sorgu problemi nedir, nasıl çözersiniz?
Bir liste için bir sorgu, ardından her kayıt için ilişkiyi yükleyen ayrı sorgular çalışır. Örneğin 100 sipariş için 101 sorgu oluşur. Çözüm olarak fetch join, @EntityGraph veya batch fetching kullanırsınız. Mid adaydan bu sorunu SQL loguna bakarak fark ettiğini anlatmasını beklerim.
Lazy mi, eager yükleme mi?
Lazy yükleme ilişkiyi ihtiyaç anında getirir, eager ise hemen getirir. Genel öneri ilişkileri lazy tutup gereken sorguda açıkça yüklemektir. Transaction dışında lazy alana erişirseniz LazyInitializationException alırsınız. Bu hatayı Open Session in View ile gizlemek yerine sorguyu düzeltmek daha sağlıklıdır.
Performans ve önbellekleme hakkında hangi sorular gelir?
Yavaş bir endpoint'i nasıl incelersiniz?
Önce ölçerim: yanıt süresi metrikleri, SQL logları ve gerekirse profiler. Ardından darboğazı ayırırım; veritabanı mı, dış servis mi, serileştirme mi? Tahminle optimizasyon yapmak yerine veriyle ilerlemek, görüşmecinin en çok duymak istediği yaklaşımdır. Yanıt süresinin kullanıcı deneyimine etkisini merak ediyorsanız site hızı ve SEO yazıma göz atabilirsiniz.
Spring Cache ne zaman işe yarar?
@Cacheable, aynı girdiyle sık çağrılan ve sonucu nadiren değişen metotlarda işe yarar. Asıl zorluk geçersiz kılmadır: veri değişince önbelleği ne zaman temizleyeceksiniz? Mid adaydan TTL, @CacheEvict ve dağıtık önbellek seçeneklerini tartabilmesini beklerim.
Bağlantı havuzu neden önemlidir?
Veritabanı bağlantısı açmak pahalıdır. Havuz, bağlantıları yeniden kullanır. Spring Boot varsayılan olarak HikariCP kullanır. Havuzu gereğinden büyük tutmak veritabanını yorar; dolayısıyla boyutu yük testine göre ayarlamanız gerekir.
Güvenlik soruları mid adaydan ne bekler?
Spring Security filtre zinciri nasıl çalışır?
Her istek, sırayla çalışan bir filtre zincirinden geçer: kimlik doğrulama, yetkilendirme, CSRF gibi kontrolleri burada yapılandırırsınız. Güncel sürümlerde yapılandırmayı SecurityFilterChain bean'i ile tanımlarsınız. Eski WebSecurityConfigurerAdapter yaklaşımının artık bulunmadığını bilmelisiniz.
JWT ile oturum tabanlı kimlik doğrulama, hangisi?
Oturum tabanlı yapı sunucuda durum tutar ve iptali kolaydır. JWT durumsuzdur, dağıtık servislerde pratiktir; ancak token'ı süresi dolmadan iptal etmek ek mekanizma ister. Tek bir web uygulamasında oturum çoğu zaman yeterlidir. Ayrıca parolaları BCrypt gibi yavaş bir hash ile saklamanız temel beklentidir; güçlü test parolaları için şifre oluşturucu işinize yarar.
- SQL enjeksiyonuna karşı parametreli sorgu kullanın.
- Hata yanıtlarında yığın izini dışarı sızdırmayın.
- Actuator uç noktalarını yetkisiz erişime kapatın.
Test ve üretim hazırlığıyla ilgili hangi sorular gelir?
@SpringBootTest ile slice testleri arasındaki fark nedir?
@SpringBootTest tüm uygulama bağlamını ayağa kaldırır, bu yüzden yavaştır. @WebMvcTest yalnızca web katmanını, @DataJpaTest yalnızca JPA katmanını yükler. Mid adaydan hangi testin hangi riski yakaladığını açıklamasını beklerim. Gerçek veritabanıyla entegrasyon testi için Testcontainers sık gündeme gelir.
Actuator ne işe yarar?
Actuator sağlık kontrolü, metrikler ve uygulama bilgisi gibi üretim uç noktaları sunar. Örneğin yük dengeleyici /actuator/health adresine bakarak örneği trafikten çıkarabilir. Metrikleri Micrometer üzerinden izleme sistemine aktarırsınız. Mid adaydan hangi metriği neden izlediğini anlatmasını beklerim: yanıt süresi, hata oranı, bağlantı havuzu doluluğu ve JVM bellek kullanımı iyi bir başlangıç setidir.
Uygulamayı nasıl paketler ve dağıtırsınız?
Spring Boot çalıştırılabilir bir jar üretir. Container ortamında katmanlı jar ve buildpack seçeneklerini anlatabilirsiniz. Mimari tarafa ilgi duyuyorsanız micro frontend yazım ön yüzün nasıl parçalandığını anlatıyor.
Junior adaya hangi veritabanı soruları gelir?
Spring Data JPA repository ne sağlar?
JpaRepository arayüzünü genişlettiğinizde kaydetme, silme, bulma ve sayfalama metotları hazır gelir. Ayrıca metot adından sorgu türetebilirsiniz: findByEmail gibi. Karmaşık sorgularda ise @Query ile JPQL ya da yerel SQL yazarsınız. Junior adaydan bu üç yolu ayırt etmesini beklerim.
Entity ile DTO neden ayrı tutulur?
Entity veritabanı tablosunu temsil eder, DTO ise API sözleşmesini. Entity'yi doğrudan dışarı açarsanız tablo değişikliği API'yi bozar; üstelik lazy ilişkiler serileştirme sırasında hata çıkarabilir. Bu nedenle giriş ve çıkış için ayrı sınıflar tanımlamak güvenli bir alışkanlıktır.
İndeks nedir ve neden önemlidir?
İndeks, veritabanının kaydı tüm tabloyu taramadan bulmasını sağlar. Örneğin e-posta ile giriş yapan bir sistemde bu sütuna indeks koymazsanız kullanıcı sayısı arttıkça giriş yavaşlar. Ancak her indeks yazma işlemini biraz yavaşlatır; yani körlemesine indeks eklemek de doğru değildir.
Mid adaya hangi mimari ve mikroservis soruları gelir?
Monolit mi, mikroservis mi?
Mikroservis bağımsız dağıtım ve ölçekleme getirir, ama ağ gecikmesi, dağıtık transaction ve gözlemlenebilirlik yükü de getirir. Küçük bir ekip için iyi modüllenmiş bir monolit çoğu zaman daha verimlidir. Mid adaydan moda olanı değil, ekip ve ürün ölçeğine uygun olanı savunmasını beklerim.
Servisler arası hata nasıl yönetilir?
Dış servis yanıt vermezse zaman aşımı, yeniden deneme ve devre kesici (circuit breaker) desenleri devreye girer. Yeniden denemeyi idempotent olmayan işlemlerde dikkatli kullanmalısınız, aksi halde aynı ödemeyi iki kez alabilirsiniz. Bu örneği anlatan aday, üretim deneyimini hemen belli eder.
Senkron ve asenkron iletişim arasında nasıl karar verirsiniz?
Kullanıcının anında sonuç beklediği işlemde REST gibi senkron çağrı mantıklıdır. E-posta gönderimi, rapor üretimi gibi işler ise bir mesaj kuyruğuna bırakılabilir. Böylece ana istek hızlı döner. Öte yandan kuyruk, mesajın iki kez işlenmesi ihtimalini de beraberinde getirir; bunu tüketici tarafında ele almanız gerekir.
Davranışsal sorulara nasıl cevap vermelisiniz?
Teknik turdan sonra genelde davranışsal sorular gelir: zor bir hatayı nasıl çözdünüz, bir kod incelemesinde neye itiraz ettiniz, teslim tarihi kaydığında ne yaptınız? Bu sorularda kısa bir yapı işe yarar: durum, yaptığınız eylem ve sonuç. Hikâyeyi abartmayın; ekip katkısını da anın.
- Üretimde yaşadığınız bir hatayı ve kök nedenini hazırlayın.
- Görüş ayrılığı yaşadığınız bir teknik kararı anlatabilecek durumda olun.
- Öğrendiğiniz son yeni teknolojiyi ve neden öğrendiğinizi söyleyin.
Junior adaydan kurumsal deneyim beklemem; okul ya da kişisel proje örnekleri de yeterlidir. Mid adaydan ise gerçek bir üretim olayı duymak isterim, çünkü sorumluluk seviyesi buradan anlaşılır.
Canlı kodlama görevinde sizi ne bekler?
Junior görüşmelerde genelde küçük bir algoritma veya basit bir REST endpoint'i isterler. Mid görüşmelerde ise mevcut bir kodu inceleyip hataları bulmanızı veya bir özelliği test ile birlikte eklemenizi isteyebilirler. Benim ekiplerimde en çok değer verdiğim şey düşünceyi sesli anlatmaktır.
- Görevi kendi cümlelerinizle tekrar edin ve belirsizlikleri sorun.
- Önce çalışan basit bir çözüm yazın, sonra iyileştirin.
- Uç durumları (boş liste, null, tekrar eden kayıt) açıkça kontrol edin.
- Zaman ve bellek karmaşıklığını kısaca yorumlayın.
- Vakit kalırsa bir test ekleyin.
Bu adımlar sizi mükemmel çözümden daha iyi gösterir, çünkü görüşmeci sizinle birlikte çalışmanın nasıl olacağını görür.
Adayların en sık yaptığı hatalar nelerdir?
Yıllar içinde dinlediğim cevaplarda aynı hatalar tekrar ediyor. Bunların çoğu bilgi eksikliğinden değil, anlatım biçiminden kaynaklanıyor. Dolayısıyla küçük bir farkındalıkla kolayca düzeltebilirsiniz.
- Tanımı ezbere söyleyip örnek verememek. Her kavram için kendi kodunuzdan bir örnek hazırlayın.
- Anotasyonun ne yaptığını bilip nasıl çalıştığını bilmemek. Proxy mantığını mutlaka çalışın.
- Her soruya "duruma göre değişir" deyip durmak. Hangi duruma göre değiştiğini de söyleyin.
- Özgeçmişte yazan teknolojiyi savunamamak. Yazdığınız her araç için bir soru bekleyin.
- Soruyu dinlemeden cevaba atlamak. Önce ne sorulduğundan emin olun.
Öte yandan görüşmeciler de hata yapar; belirsiz bir soru gelirse netleştirmek için soru sormanız tamamen normaldir. Hatta bu, gerçek projede gereksinimleri nasıl ele alacağınızı gösterir. Kısacası mülakat tek yönlü bir sınav değil, iki tarafın birbirini tanıdığı bir çalışma provasıdır.
Özgeçmiş ve portföy mülakatı nasıl etkiler?
Görüşmeci soruların önemli bir kısmını özgeçmişinizden seçer. Örneğin Kafka yazdıysanız mesaj tekrarını, Redis yazdıysanız önbellek geçersiz kılmayı sormasını bekleyin. Bu yüzden özgeçmişe yalnızca savunabileceğiniz teknolojileri koyun.
GitHub'daki küçük ama temiz bir Spring Boot projesi, uzun bir teknoloji listesinden daha ikna edicidir. README dosyasında projeyi nasıl çalıştıracağımı, hangi kararları neden aldığınızı ve testleri nasıl koşacağımı görmek isterim. Ayrıca commit geçmişi, kodu nasıl adım adım geliştirdiğinizi de gösterir.
Java ve Spring Boot mülakat sorularına nasıl hazırlanmalısınız?
Liste ezberlemek yerine küçük bir proje üzerinden çalışmanızı öneririm. Örneğin sipariş yöneten bir REST servisi yazın: JPA ile ilişkili iki tablo, doğrulama, global hata yönetimi, güvenlik ve birkaç test. Böylece bu yazıdaki soruların çoğunu kendi kodunuz üzerinden cevaplarsınız.
- İlk hafta: Java temelleri, koleksiyonlar, istisnalar.
- İkinci hafta: Spring çekirdeği, REST, yapılandırma.
- Üçüncü hafta: JPA, transaction, performans.
- Dördüncü hafta: güvenlik, test, sesli anlatım pratiği.
Bu dört haftalık plan saha tecrübeme dayalı bir başlangıç önerisidir, garanti değildir. Resmi davranışlar için Spring Framework belgelerine dönmeniz en güvenli yoldur.
Mülakat sonrasında adayı öne çıkaran şey nedir?
Teknik cevaplar kadar, işin ürüne nasıl dokunduğunu anlamak da önemlidir. Kurumsal projelerde backend kararı doğrudan dönüşüme yansır: yavaş bir sepet API'si satış kaybettirir. Bu bağlantıyı kurabilen geliştiriciyle çalışmayı tercih ederim. E-ticaret danışmanlığı ve web tasarım projelerimde de bu bakışı arıyorum.
Son olarak, mülakatta bilmediğiniz bir şeyi dürüstçe söylemek zayıflık değildir. Nasıl araştıracağınızı anlatırsanız görüşmeci sağlam bir ekip arkadaşı görür. Benimle bir proje ya da ekip kurulumu hakkında konuşmak isterseniz hakkımda sayfasından geçmişime, iletişim sayfasından da bana ulaşabilirsiniz.




