Teknik mülakat kodlama sorularına hazırlanmanın en sağlam yolu, soruları ezberlemek değil; algoritma soruları, veri yapısı soruları ve temel sistem tasarımı sorularının arkasındaki düşünme kalıplarını tanımaktır. Bir adayın mülakatta başarılı olması, karşılaştığı problemi daha önce görüp görmediğinden çok, bilinmeyen bir soruyu tanıdık bir çözüm ailesine (pattern) bağlayabilmesine bağlıdır. Bu yazıda soru tiplerinden pattern bazlı çalışmaya, canlı kodlama pratiğinden gerçekçi bir hazırlık takvimine kadar somut ve uygulanabilir bir yol haritası bulacaksınız. Amaç, staj veya iş görüşmesine hazırlanırken kaygıyı azaltıp yerine sistemli bir çalışma disiplini koymaktır.
Teknik Mülakatlarda Karşılaşılan Soru Tipleri Nelerdir?
Teknik mülakatlarda karşınıza çıkan sorular genellikle üç ana kategoride toplanır: algoritma soruları, veri yapısı soruları ve yeni mezun seviyesinde basitleştirilmiş sistem tasarımı soruları. Algoritma soruları çoğunlukla sıralama, arama ve özyineleme (recursion) üzerine kuruludur; örneğin bir diziyi belirli bir kritere göre sıralamanız, sıralı bir dizide ikili arama yapmanız veya bir ağacı özyinelemeli şekilde dolaşmanız istenebilir. Bu sorularda mülakatçı doğru cevabı değil, probleme yaklaşım biçiminizi ölçer.
Veri yapısı soruları ise dizi, bağlı liste, ağaç ve hash tablosu gibi yapılar üzerinden hangi işlemi ne maliyetle yapabileceğinizi anlamaya çalışır. Bir bağlı listeyi tersine çevirmek, bir ağaçta belirli bir seviyeyi bulmak veya bir hash tablosuyla tekrar eden elemanları tespit etmek, aslında "bu veri yapısını ne zaman seçersiniz" sorusunun pratik hâlidir. Kendi seviyenizi görmek isterseniz algoritma ve veri yapıları bilgi testi ile hangi konularda daha çok tekrar yapmanız gerektiğini net biçimde görebilirsiniz.
Sistem tasarımı temelleri, yeni mezun mülakatlarında genellikle küçük ölçekli bir senaryo şeklinde sorulur: basit bir önbellekleme (cache) mekanizması nasıl tasarlanır, ya da kısa bir URL kısaltma servisinin veri modeli nasıl kurulur gibi sorular buna örnektir. Bu aşamada dağıtık sistemler veya büyük ölçekli mimari beklenmez; beklenen şey, problemi küçük parçalara bölme ve mantıklı varsayımlar yapma becerisidir. Son olarak davranışsal ve iletişim becerileri de teknik sürecin bir parçasıdır; çözüm sürecinizi anlatabilmeniz, geri bildirime açık olmanız değerlendirilir.
| Soru Tipi | Beklenen Beceri | Çalışma Yöntemi |
|---|---|---|
| Algoritma soruları | Sıralama, arama, özyineleme mantığını kurma | Küçük problemlerle pattern tekrarı |
| Veri yapısı soruları | Doğru yapıyı seçme ve maliyetini bilme | Her yapıyı elle kod yazarak uygulama |
| Sistem tasarımı temelleri | Problemi parçalara bölme, varsayım yapma | Basit senaryoları sesli tasarlama |
| Davranışsal/iletişim becerisi | Süreci anlatma, geri bildirime açıklık | Sesli düşünerek çözüm anlatma pratiği |
Ezber Yerine Pattern Bazlı Çalışma Neden Daha Kalıcıdır?

Bir soruyu internette bulup çözümünü ezberlemek, o soru birebir aynı şekilde çıkmadığı sürece işe yaramaz; hatta değişkenlerin adı değişse, dizi sırası tersine çevrilse bile ezberlenen çözüm çoğu zaman çöker. Bunun sebebi basit: ezber, "bu problem nasıl çözülür" sorusuna değil, "bu spesifik metin bloğu ne şekilde yazılır" sorusuna cevap üretir. Pattern bazlı çalışma ise tam tersini yapar; belirli bir problem ailesinin ortak yapısını görmenizi ve bu yapıyı yeni, hiç görmediğiniz bir soruya uygulamanızı sağlar. Bu yüzden aktarılabilir bir beceridir.
İki işaretçi (two pointers) tekniği, genellikle sıralı bir dizide iki elemanın toplamını, farkını veya ilişkisini aramanız gerektiğinde işe yarar; çünkü diziyi baştan ve sondan aynı anda taramak, iç içe döngü kullanmaktan çok daha verimlidir. Kayan pencere (sliding window) ise bir dizi veya string içinde belirli boyutlu ya da değişken boyutlu alt aralıkların toplamını, uzunluğunu veya benzersizliğini bulmanız gerektiğinde devreye girer. Geriye izleme (backtracking) ise permütasyon, kombinasyon veya bir ızgara üzerinde yol bulma gibi "tüm olasılıkları dene, uymayanı geri al" mantığıyla çalışan problemlerde temel yaklaşımdır. Bu üç kalıbı tanıdığınızda, karşınıza çıkan yeni bir soruyu "bu hangi aileye benziyor" diye sorarak çözmeye başlarsınız.
Aşağıdaki örnek, sıralı bir dizide iki işaretçi tekniğiyle belirli bir hedef toplamı bulan basit ve çalışan bir Python koduyla bu mantığı somutlaştırır:
def iki_isaretci_hedef_bul(dizi, hedef):
sol, sag = 0, len(dizi) - 1
while sol < sag:
toplam = dizi[sol] + dizi[sag]
if toplam == hedef:
return (dizi[sol], dizi[sag])
elif toplam < hedef:
sol += 1
else:
sag -= 1
return None
sirali_dizi = [2, 4, 7, 11, 15, 20]
print(iki_isaretci_hedef_bul(sirali_dizi, 18))
Bu tür kalıpları tek tek soru ezberlemeden, mantığını içselleştirerek öğrenmek isteyenler için birebir Python dersleri kapsamında her pattern'i sıfırdan kod yazarak uygulamak, kalıcı öğrenmeyi hızlandıran bir yöntemdir.
Canlı Kod Yazma ve Sesli Düşünme Pratiği
Mülakatta doğru cevaba ulaşmak kadar, o cevaba nasıl ulaştığınızı görünür kılmak da önemlidir. Whiteboard üzerinde veya ekran paylaşımlı bir ortamda kod yazarken sessizce çözüme odaklanmak, mülakatçının sizi değerlendirmesini zorlaştırır; çünkü mülakatçı sonucu değil, düşünme sürecinizi izler. Yaklaşımınızı önce cümlelerle özetlemek, hangi veri yapısını neden seçtiğinizi söylemek, aklınızdaki varsayımları ("dizinin sıralı olduğunu varsayıyorum" gibi) açıkça dile getirmek, sizi hem daha güvenilir hem de daha anlaşılır bir aday yapar. Sessiz kalıp takılmak yerine, hangi yönde düşündüğünüzü paylaşmak yanlış bir fikirden bile geri dönüş yolunuzu açar.
Kodu yazdıktan sonra çözümünüzün zaman ve alan karmaşıklığını yorumlayabilmek, yani Big-O analizi yapabilmek, mülakatçının en çok beklediği ama adayların çoğu zaman atladığı bir adımdır. "Bu çözüm O(n) zaman, O(1) alan karmaşıklığına sahip, çünkü diziyi tek geçişte tarıyorum ve ek bellek kullanmıyorum" gibi net bir açıklama, çözümün rastgele bulunmadığını, bilinçli tasarlandığını gösterir. Karmaşıklığı yorumlarken alternatif bir çözümle kıyaslamak (örneğin brute-force yaklaşımın O(n²) olduğunu belirtmek) sizi bir kademe daha öne çıkarır.
Son olarak temiz kod alışkanlıkları, mülakatın teknik olmayan ama gözden kaçmaması gereken bir parçasıdır. Değişkenlere x, y gibi anlamsız isimler vermek yerine sol_isaretci, toplam gibi anlamlı adlar kullanmak, kodunuzu okuyan mülakatçının sizi takip etmesini kolaylaştırır. Uzun bir çözümü tek bir bloğa sıkıştırmak yerine mantıksal parçalara ayrılmış fonksiyonlara bölmek ve yazdığınız kodu bitirdikten sonra kendi elinizle küçük bir örnek üzerinden test etmek, hem hataları erken yakalamanızı hem de titiz bir mühendislik alışkanlığına sahip olduğunuzu göstermenizi sağlar. Bu alışkanlıkları Java tarafında da pekiştirmek isteyenler birebir Java dersleri kapsamında canlı kod pratiği yaparak sesli düşünme becerisini de aynı anda geliştirebilir.
Adayların Sık Yaptığı Hatalar
Mülakat sürecinde teknik bilgi kadar, o bilgiyi baskı altında nasıl kullandığın da değerlendirilir. Aşağıdaki hatalar sıkça karşılaşılan, ancak fark edildiğinde nispeten kolay düzeltilebilen alışkanlıklardır. Bu listeyi bir eksiklik göstergesi değil, bir farkındalık aracı olarak oku.
- Soruyu tam anlamadan kodlamaya başlamak: Heyecan ya da acele, adayı ilk fikri hemen kodlamaya iter. Ancak girdi kısıtları, beklenen çıktı formatı ya da problemin gerçek amacı netleşmeden yazılan kod genellikle yarı yolda tıkanır. Düzeltmesi basittir: kodlamaya geçmeden önce soruyu kendi cümlelerinle yüksek sesle özetle ve mülakatçıya "böyle mi anlamalıyım?" diye sor.
- Edge-case'leri atlamak: Boş dizi, tek elemanlı liste, negatif değerler, tekrar eden elemanlar ya da sıfır gibi sınır durumları kodun kırılma noktalarıdır. Bu durumları göz ardı etmek, çözümün "genel mantığı doğru ama detayda çuvallayan" bir hale gelmesine yol açar. Kod yazmadan önce kısa bir liste halinde olası uç durumları not almak, bu riski büyük ölçüde ortadan kaldırır.
- Süreyi yanlış yönetmek: Bir probleme gereğinden fazla saplanmak, geri kalan zamanı baskı altında geçirmene neden olur. Belirli bir süre içinde ilerleme sağlanamıyorsa, kaba bir çözümle (brute-force) devam edip sonrasında optimize etmek, hiç çözümsüz kalmaktan daha değerlidir. Zaman yönetimi de tıpkı algoritma bilgisi gibi pratikle gelişen bir beceridir.
- Geri bildirim almadan tek başına çalışmak: Sessizce çözülen yüzlerce soru, sesli anlatım ve baskı altında düşünme becerisini otomatik olarak geliştirmez. Kendi kendine çalışmak temel bilgiyi oturtur, ama gerçek mülakat deneyimine en çok yaklaşan pratik, bir başkasının seni dinlediği ve soru sorduğu ortamlarda oluşur.
6-8 Haftalık Gerçekçi Hazırlık Takvimi

Teknik mülakata hazırlık, bir gecede oturup çözülecek bir maraton değildir; düzenli ve aşamalı bir süreçtir. Aşağıdaki takvim esnek bir çerçevedir — mevcut bilgi seviyene göre haftaları uzatabilir veya kısaltabilirsin, önemli olan sırayı korumaktır.
- 1. hafta – Temelleri tazeleme: Diziler, bağlı listeler, yığın (stack), kuyruk (queue), hash tablosu ve temel ağaç yapıları gibi veri yapılarını; ayrıca Big-O analizini tekrar gözden geçir. Hedef, "bu yapı ne zaman kullanılır" sorusuna rahatça cevap verebilmektir.
- 2-4. haftalar – Pattern bazlı problem çalışma: Her hafta bir tekniğe odaklan: önce iki işaretçi, ardından kayan pencere, sonra geriye izleme (backtracking). Her pattern için 8-10 problem çözüp, çözümdeki ortak mantığı defterine not al.
- 5. hafta – Zamanlı pratik: Öğrendiğin pattern'leri artık kronometreyle çöz. Amaç hız değil, baskı altında düşünme refleksini geliştirmektir; bu aşamada karışık soru setleriyle çalışmak faydalıdır.
- 6. hafta – Mülakat simülasyonu: Bir arkadaşınla, bir mentorunla ya da mock interview ortamında sesli anlatım pratiği yap. Çözümünü anlatırken takıldığın noktalar, gerçek mülakatta nerede zorlanacağını gösterir.
- 7-8. haftalar – Zayıf alanları tekrar gözden geçirme: Simülasyonlarda ortaya çıkan boşlukları hedefli tekrarla kapat. Bu aşamada yeni konu eklemek yerine mevcut bilgiyi sağlamlaştırmak daha değerlidir.
Bu sürecin düzenli ve yapılandırılmış ilerlemesi, dağınık kaynaklardan çalışmaktan çok daha etkilidir. canlı sınıflı yazılım eğitimleri gibi belirli bir müfredat ve takip mekanizması olan bir yapı içinde çalışmak, bu takvimi disiplinli şekilde uygulamayı kolaylaştırabilir.
Python ve Java ile Algoritma-Veri Yapısı Temelini Güçlendirmek
Hangi dille hazırlanacağın kadar, o dili nasıl kullandığın önemlidir. Python'ın sade söz dizimi, kodun "gürültüsünü" azalttığı için algoritmanın mantığına odaklanmayı kolaylaştırır; bir iki işaretçi çözümünü birkaç satırda ifade edebilirsin ve zihnin sözdizimiyle değil problemle uğraşır. Java ise statik tip disiplini sayesinde veri yapılarının iç işleyişini daha görünür kılar: ArrayList, LinkedList, HashMap gibi koleksiyon sınıflarının hangi işlemde ne kadar zaman karmaşıklığına sahip olduğunu doğrudan deneyerek öğrenirsin.
Aşağıdaki örnek, bir dizide tekrar eden elemanı bulma problemini hash tablosu mantığıyla çözer; bu, birçok mülakat sorusunun temelinde yatan O(n) yaklaşımını gösterir:
def has_duplicate(nums):
seen = set()
for num in nums:
if num in seen:
return True
seen.add(num)
return False
print(has_duplicate([1, 2, 3, 2])) # True
print(has_duplicate([1, 2, 3, 4])) # False
Java'da aynı mantık HashSet ile birebir uygulanır; fark, tip tanımlarının açıkça yazılması sayesinde koleksiyonun içinde ne tuttuğunu her satırda net görmendir. Hangi dille ilerleyeceğine karar verirken tempo tercihini de göz önünde bulundurmakta fayda var: bireysel geri bildirime ihtiyaç duyuyorsan ve belirli konularda hızlı derinleşmek istiyorsan birebir özel ders seçeneği, kendi programını kurup tekrar tekrar izleyerek çalışmak istiyorsan kendi hızında ilerleyen video eğitim modeli daha uygun olabilir. Hangi yolu seçersen seç, günlük kısa alıştırmalarla pattern tekrarı yapmak — örneğin her gün bir kayan pencere veya geriye izleme sorusuyla zihni canlı tutmak — bilgiyi kısa süreli ezberden çıkarıp kalıcı bir düşünme refleksine dönüştürür. Düzenli, günlük ve odaklı pratik mantığı, tek seferlik yoğun çalışma seanslarından her zaman daha sağlam sonuç verir.
Hazır Olup Olmadığını Ölçmek: Kendi Kendini Değerlendirme
Aylarca çalışıp da hâlâ "acaba hazır mıyım?" sorusuna cevap bulamamak, teknik mülakata hazırlanan pek çok öğrencinin ortak sıkıntısıdır. Bu sorunun cevabı hisle değil, ölçümle verilmelidir. Hangi veri yapısında akıcı olduğunu, hangi pattern'de tıkandığını net biçimde görmeden yapılan çalışma, zamanını rastgele dağıtır; bilinen konuyu tekrar tekrar gözden geçirip zayıf noktayı es geçmek çok yaygın bir tuzaktır.
Objektif Ölçüm Neden Öncelik Belirler?
Kendi kendine yapılan değerlendirme, çalışma planının pusulasıdır. Örneğin bir aday, dizi ve string sorularında hızlı çözüm üretirken, ağaç ve graf yapılarında aynı rahatlığı gösteremiyor olabilir. Bu fark fark edilmeden geçen her hafta, zaten güçlü olunan alana yatırılan gereksiz zamandır. Kısa, düzenli aralıklarla yapılan bir öz değerlendirme şu sorulara yanıt vermelidir:
- Hangi veri yapısı sorularında çözüm süresi belirgin şekilde uzuyor?
- Big-O analizini yaparken hangi yapı türlerinde (özellikle ağaç, graf, dinamik programlama) tereddüt yaşanıyor?
- Kod yazarken mi, yoksa problemi doğru tanımlarken mi zaman kaybediliyor?
Bu noktada elle tutulur bir ölçüm aracı devreye girer. ücretsiz kodlama bilgisi test etme imkânı sunan bir değerlendirme, adayın hangi konularda sağlam hangi konularda dağınık olduğunu birkaç dakika içinde ortaya koyar. Böyle bir test, mülakat sorusu ezberlemek yerine; temel kavramlara, sözdizimine ve problem çözme mantığına ne kadar hâkim olunduğunu gösterir ve bu da gerçek mülakat baskısına daha yakın bir öz farkındalık sağlar.
Sonuca Göre Planı Yeniden Şekillendirmek
Test sonucu, sabit bir yargı değil, hareket noktasıdır. Sonuçta zayıf çıkan konu başlıkları, bir sonraki haftanın odak noktası hâline getirilmeli; güçlü çıkan alanlar ise haftalık tekrara indirilip serbest kalan zaman zayıf alana kaydırılmalıdır. Örneğin özyinelemeli fonksiyonlarda ve geriye izleme mantığında düşük performans görülüyorsa, o hafta yalnızca bu tipte beş-altı soru çözüp her birinde çözüm ağacını kâğıda çizmek, ezbersiz ama etkili bir müdahaledir. Bu döngüyü iki-üç haftada bir tekrarlamak, hazırlık sürecini tahminden çıkarıp veriye dayalı bir sürece dönüştürür.
Sık Sorulan Sorular
Teknik mülakata hazırlanırken önce hangi konudan başlamalıyım?
Önce diziler, string'ler ve temel veri yapıları (yığın, kuyruk, bağlı liste) üzerinde rahat çözüm üretebildiğinden emin olmak gerekir. Bu temel sağlamlaştıktan sonra iki işaretçi, kayan pencere gibi pattern'lere ve ardından ağaç, graf ile geriye izleme gibi daha karmaşık konulara geçilmesi mantıklıdır; aksi hâlde ileri konularda kurulan çözümler temelsiz kalır.
Pattern bazlı çalışma tam olarak ne anlama gelir?
Pattern bazlı çalışma, yüzlerce farklı soruyu tek tek ezberlemek yerine, sorular arkasındaki tekrar eden çözüm mantığını (örneğin iki işaretçi, kayan pencere, geriye izleme) tanımayı ve bu mantığı yeni, hiç görülmemiş bir soruya uygulayabilmeyi hedefler. Amaç soruyu hatırlamak değil, hangi pattern'in hangi problem yapısına uyduğunu tanıyabilmektir.
Big-O analizini bilmeden teknik mülakata girilir mi?
Girilebilir ama zorlu geçer, çünkü mülakatlarda çoğu zaman "bu çözümü nasıl daha verimli yapabilirsin?" sorusu doğrudan Big-O bilgisine dayanır. Zaman ve alan karmaşıklığını değerlendirememek, doğru çalışan bir kodun bile yetersiz görünmesine yol açabilir; bu yüzden temel karmaşıklık analizi hazırlığın erken aşamalarında öğrenilmelidir.
Mülakat hazırlığı kaç hafta sürmeli?
Kesin bir süre herkes için geçerli değildir; mevcut seviyeye, hedeflenen pozisyona ve haftalık ayrılabilen zamana göre değişir. Bununla birlikte temel veri yapılarından pattern bazlı çalışmaya, ardından canlı kod pratiğine kadar ilerleyen kademeli bir süreç, birkaç haftalık düzenli çalışmayla anlamlı bir ilerleme sağlar.
Python mu Java mı, hangi dille pratik yapmak daha iyi?
Asıl önemli olan dilin kendisi değil, algoritmik düşünme ve veri yapısı mantığıdır. Python, sade sözdizimi sayesinde çözüm mantığına odaklanmayı kolaylaştırırken; Java, tip sistemi ve nesne yönelimli yapısıyla büyük ölçekli sistemlerde beklenen disiplini erken kazandırır. Hangi dille pratik yapılacağı, hedeflenen pozisyonun teknolojisine göre şekillendirilebilir.
Whiteboard mülakatında sesli düşünmek neden önemlidir?
Mülakatı yapan kişi, sonuçtan çok çözüm sürecini ve problem çözme yaklaşımını değerlendirir. Sessizce kod yazmak, doğru cevaba ulaşılsa bile mantığın takip edilememesine yol açar; sesli düşünmek, varsayımları, alternatif yaklaşımları ve olası hata noktalarını görünür kılarak adayın düşünce sürecini şeffaf hâle getirir.
Mülakat öncesi kendi seviyemi nasıl ölçebilirim?
Kendi kendine yapılan öznel değerlendirme yerine, güçlü ve zayıf konu başlıklarını net biçimde ortaya koyan bir ölçüm aracı kullanmak daha güvenilir sonuç verir. Böyle bir test, hangi veri yapısı veya pattern'de daha çok pratik gerektiğini gösterir ve çalışma planının hangi konuya öncelik vermesi gerektiğine somut bir yön çizer.
Teknik mülakat hazırlığı, tek seferde tamamlanan bir sınav değil; düzenli ölçüm, doğru pattern seçimi ve sesli pratikle ilerleyen bir süreçtir. Kendi hızında, sağlam bir Python veya Java temeliyle ilerlemek isteyenler için 1-1 özel ders desteği bu süreci daha planlı ve kişiye özel hâle getirebilir.