Python mülakatları üç eksende ilerler: temel dil bilgisi, veri yapıları ve ileri düzey konular (bellek yönetimi, eşzamanlılık, dekoratörler). 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ı
Python'ı diğer dillerden ayıran temel özellik nedir?
Python, yorumlanan (derlenmeden doğrudan çalıştırılan), dinamik tipli ve okunabilirliği önceliklendiren bir dildir. Girintileme (indentation) blok yapısını belirler — süslü parantez yerine boşluk kullanımı Python'ı görsel olarak sade kılar, ama bu da girinti hatalarına karşı dikkatli olmayı gerektirir.
Liste (list) ile demet (tuple) arasındaki fark nedir?
Liste değiştirilebilir (mutable) bir veri yapısıdır: eleman eklenebilir, silinebilir, değiştirilebilir. Demet ise değiştirilemez (immutable): bir kez oluşturulduktan sonra içeriği değişmez. Değişmezlik demeti biraz daha hızlı ve güvenli kılar; bu yüzden değişmeyeceği kesin olan veriler (örneğin sabit koordinat çiftleri) için demet tercih edilir.
*args ve **kwargs ne işe yarar?
Bir fonksiyona önceden bilinmeyen sayıda argüman geçmeyi sağlar. *args, sırasıyla verilen argümanları bir demet olarak toplar. **kwargs ise anahtar-değer (isimli) argümanları bir sözlük olarak toplar. İkisi birlikte, fonksiyonun kaç ve hangi argümanla çağrılacağını önceden bilmeden esnek fonksiyonlar yazmayı sağlar.
Liste kavraması (list comprehension) nedir?
Bir listeyi, döngü ve koşulları tek satırda ifade ederek oluşturmanın kısa yoludur — örneğin [x*2 for x in range(10) if x % 2 == 0]. Aynı işi klasik bir for döngüsüyle de yapabilirsiniz, ama liste kavraması hem daha kısa hem genelde daha hızlı çalışır çünkü Python içeride bunu optimize eder.
Sözlük (dictionary) nasıl çalışır?
Anahtar-değer çiftlerini bir hash tablosu üzerinde saklar. Her anahtarın hash değeri hesaplanır ve bu değere göre bir konuma yerleştirilir; bu sayede bir anahtara erişim, listede baştan sona arama yapmak yerine ortalama sabit zamanda (O(1)) gerçekleşir. Python 3.7'den itibaren sözlükler ekleme sırasını da korur.
Fonksiyonlar ve nesne yönelimli programlama soruları
Dekoratör (decorator) nedir?
Bir fonksiyonun davranışını, o fonksiyonun kodunu değiştirmeden genişletmenizi sağlayan bir tasarım deseni. @login_required gibi bir dekoratör, asıl fonksiyonu çağırmadan önce veya sonra ek bir işlem (örneğin yetki kontrolü) çalıştırabilir. Dekoratörler, tekrar eden kontrolleri (loglama, önbellekleme, yetkilendirme) merkezi bir yerde tanımlamayı sağlar.
Lambda fonksiyonu nedir, ne zaman kullanılır?
İsimsiz, tek satırlık kısa fonksiyonlar tanımlamayı sağlar (lambda x: x * 2 gibi). Genelde map(), filter() veya sort() gibi başka bir fonksiyona parametre olarak, kısa ömürlü ve basit bir işlem gerektiğinde kullanılır. Karmaşık mantık içeren işler için normal bir fonksiyon tanımlamak okunabilirlik açısından daha doğrudur.
self parametresi ne işe yarar?
Bir sınıf metodunun, çağrıldığı nesnenin kendisine referans tutmasını sağlar. Bir metot içinde self.isim gibi bir ifade, o metodun hangi nesne üzerinde çalıştığını belirtir. Python bunu otomatik olarak geçirir; metot tanımlanırken ilk parametre olarak elle yazılması gerekir ama çağrılırken belirtilmez.
Kalıtım (inheritance) Python'da nasıl çalışır?
Bir sınıf, parantez içinde başka bir sınıfın adını vererek onun özelliklerini ve metotlarını devralır: class Kopek(Hayvan) gibi. Python çoklu kalıtımı destekler — bir sınıf birden fazla üst sınıftan özellik devralabilir; bu durumda hangi metodun öncelikli çalışacağını MRO (Method Resolution Order) belirler.
İleri düzey ve bellek yönetimi soruları
GIL (Global Interpreter Lock) nedir?
CPython yorumlayıcısında aynı anda yalnızca bir thread'in Python bytecode'u çalıştırmasına izin veren bir kilittir. Bu, CPU'ya bağlı (hesaplama ağırlıklı) işlerde çoklu thread kullanımının beklenen performans artışını sağlamamasına yol açar. G/Ç'ye bağlı (dosya, ağ) işlerde GIL'in etkisi daha azdır; CPU-yoğun paralel işler için genelde multiprocessing tercih edilir.
Generator (üreteç) nedir, neden kullanılır?
yield anahtar kelimesiyle tanımlanan, değerleri tek seferde bellekte tutmak yerine istendikçe (lazy) üreten bir fonksiyon türüdür. Büyük veri setleriyle çalışırken tüm listeyi belleğe yüklemek yerine bir generator kullanmak bellek kullanımını ciddi ölçüde azaltır.
Python'da bellek yönetimi nasıl çalışır?
Python, referans sayımı (reference counting) ile çalışır: bir nesneye kaç değişkenin referans verdiği takip edilir, bu sayı sıfıra düştüğünde nesne otomatik olarak bellekten temizlenir. Döngüsel referansları (birbirine referans veren nesneler) yakalamak için ayrıca periyodik bir çöp toplayıcı (garbage collector) da çalışır.
Sanal ortam (virtual environment) neden kullanılır?
Her proje için ayrı ve izole bir Python paket ortamı oluşturur. Bu sayede bir projede kullanılan kütüphane sürümü, başka bir projedeki farklı sürüm ihtiyacıyla çakışmaz. venv veya conda gibi araçlarla oluşturulur ve profesyonel Python projelerinde neredeyse zorunlu bir pratiktir.
Try-except ile hata yönetimi nasıl yapılır?
try bloğunda hata oluşabilecek kod çalıştırılır; hata oluşursa uygun except bloğu devreye girer. Belirli bir hata tipini yakalamak (except ValueError gibi) genel bir except kullanmaktan her zaman daha güvenlidir çünkü beklenmedik hataları sessizce yutmaz. finally bloğu, hata olsun olmasın her durumda çalışır ve genelde temizlik işlemleri için kullanılır.
Shallow copy ile deep copy arasındaki fark nedir?
Shallow copy (sığ kopya), bir nesnenin yalnızca en üst seviyesini kopyalar; içindeki iç içe nesneler hâlâ orijinaliyle aynı referansı paylaşır. Deep copy (derin kopya) ise nesnenin tamamını, içindeki tüm iç içe nesnelerle birlikte tamamen bağımsız bir kopya olarak oluşturur. copy modülündeki copy() ve deepcopy() fonksiyonlarıyla yapılır.
Python'da modül ile paket arasındaki fark nedir?
Modül, tek bir .py dosyasıdır ve içinde fonksiyon, sınıf veya değişken tanımları barındırır. Paket ise birden fazla modülü bir araya getiren, içinde bir __init__.py dosyası bulunan bir dizindir. Paketler, büyük projelerde kodu mantıklı klasörlere bölerek düzenlemeyi sağlar.
__init__ metodu ne işe yarar?
Bir sınıftan yeni bir nesne oluşturulduğunda otomatik olarak çağrılan yapıcı (constructor) metottur. Nesnenin başlangıç durumunu tanımlamak — örneğin gelen parametreleri nesnenin özelliklerine atamak — için kullanılır. Diğer dillerdeki constructor'ların Python'daki karşılığıdır.
AppFellas
Fikrinizi konuşalım.
Ücretsiz keşif görüşmesinde projenizi, bütçenizi ve zaman çizelgenizi netleştirelim.
Deneyim ve proje soruları
Teknik sorulara ek olarak, mülakatlarda projelerinize dayalı sorular da sorulur: "Bir projede karşılaştığınız en zor performans sorununu nasıl çözdünüz?", "Neden bu kütüphaneyi tercih ettiniz?", "Bir veri işleme hattını (pipeline) nasıl kurdunuz?" Bu sorularda beklenen genel bir tanım değil; hangi aracı kullandığınızı, sorunu nasıl teşhis ettiğinizi ve sonucun ölçülebilir etkisini anlatabilmenizdir.
Mülakat süreci ve sık yapılan hatalar
Çoğu şirkette Python mülakatı üç aşamalı işler: geçmiş projeler üzerine bir ön görüşme, canlı kodlama (küçük bir fonksiyon yazmak veya mevcut kodda hata bulmak) ve kıdemli pozisyonlar için sistem tasarımı. Veri odaklı pozisyonlarda ayrıca pandas, NumPy gibi kütüphanelere hakimiyet, web backend pozisyonlarında ise Django veya FastAPI gibi bir framework bilgisi test edilir. Hangi alt alanda başvuruyor olursanız olun, framework sorularından önce dilin temellerinin sağlam olması bekleniyor.
- Değiştirilebilir varsayılan parametre kullanmak: def f(liste=[]) gibi bir tanım, fonksiyon her çağrıldığında aynı listeyi paylaşır ve beklenmedik hatalara yol açar; bunun yerine None kullanıp fonksiyon içinde yeni bir liste oluşturmak gerekir.
- Döngü içinde string birleştirmek: Her birleştirme yeni bir string oluşturduğu için büyük döngülerde performansı düşürür; join() kullanmak çok daha verimlidir.
- Genel except Exception kullanmak: Hangi hatayı yakaladığınızı belirtmemek, beklenmedik hataları sessizce yutar ve hata ayıklamayı zorlaştırır.
- == ile is'i karıştırmak: == değerleri karşılaştırır, is ise aynı nesne olup olmadığını (bellek adresini) karşılaştırır; bu iki sorgu çoğu zaman farklı sonuç verebilir.
Neden hâlâ bu kadar çok tercih ediliyor?
Python'ın mülakatlarda bu kadar sık gündeme gelmesinin nedeni, kullanım alanının genişliği. Aynı dil hem web backend'i (Django, FastAPI), hem veri analizi (pandas, NumPy), hem yapay zeka (PyTorch, scikit-learn), hem de otomasyon script'leri için kullanılabiliyor. Bu da bir işverenin, farklı ekiplerde çalışabilecek geniş yetenekli bir geliştirici arayışında Python bilgisini öncelikli görmesine yol açıyor.
Python, veri bilimi ve yapay zeka projelerinde de en çok tercih edilen dillerden biri. Bu alana yöneliyorsanız veri bilimi nedir yazımıza ve yapay zeka için hangi dili öğrenmeli yazımıza göz atabilirsiniz.
Sık sorulan sorular
Python mülakatına hazırlanmak ne kadar sürer?
Temel sözdizimine hakimseniz, veri yapılarını ve ileri düzey konuları (GIL, generator, dekoratör) derinlemesine anlamak birkaç haftalık odaklı çalışmayla mümkün. Süreyi asıl uzatan şey kavramları uygulamalı projelerle pekiştirmemek.
Python mülakatlarında en çok hangi konu soruluyor?
Liste/demet/sözlük farkları, liste kavraması ve hata yönetimi (try-except) en sık karşılaşılan üç konu. Veri odaklı pozisyonlarda buna pandas ve NumPy soruları eklenir.
GIL bilmek gerçekten önemli mi?
Evet, özellikle performans veya eşzamanlılık gerektiren pozisyonlarda. GIL'in ne olduğunu ve CPU-yoğun işlerde neden multiprocessing tercih edildiğini açıklayabilmek, orta-üstü seviye mülakatlarda sık sorulur.
Python'da hangi konular en çok karıştırılıyor?
== ile is farkı, liste ile demet farkı ve değiştirilebilir varsayılan parametre hatası en sık yanlış anlaşılan üç konu. Bu üçünü net anlatabilmek mülakatta olumlu bir izlenim bırakır.



