irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 183
- Tepkime puanı
- 2
- Puanları
- 18
Go mülakatları, dilin basitliğinin ardındaki derin mühendislik kararlarını ne kadar kavradığınızı ölçer. Mülakatçılar genellikle "nasıl" yapıldığından ziyade "neden" öyle tasarlandığına odaklanır.
İşte en sık sorulan teknik sorular ve stratejik cevap anahtarları:
Çözüm Yolları:
İşte en sık sorulan teknik sorular ve stratejik cevap anahtarları:
1. Goroutine ve Thread Arasındaki Farklar Nelerdir?
Bu soru, Go'nun eşzamanlılık (concurrency) modelini anlayıp anlamadığınızı test eder.- Boyut: Bir OS Thread yaklaşık 1-2 MB yığın (stack) belleği ile başlarken, bir Goroutine sadece 2 KB ile başlar ve ihtiyaca göre büyür/küçülür.
- Yönetim: Thread'ler işletim sistemi (OS) tarafından yönetilir ve geçişleri (context switch) maliyetlidir. Goroutine'ler ise Go Runtime içindeki Go Scheduler tarafından kullanıcı seviyesinde yönetilir.
- M:N Scheduling: Go, M sayıdaki Goroutine'i N sayıdaki OS Thread'i üzerinde çalıştırır.
2. "Channel" Yapısı Nedir ve "Buffered" ile "Unbuffered" Farkı Nedir?
Go'nun felsefesini ("Belleği paylaşarak iletişim kurma, iletişim kurarak belleği paylaş") açıklamak için harika bir fırsattır.- Unbuffered (Tamponsuz): Gönderici ve alıcı aynı anda hazır olmalıdır (senkronize). Biri gelmeden diğeri bloklanır.
- Buffered (Tamponlu): Kanalın belirli bir kapasitesi vardır. Kapasite dolana kadar gönderici bloklanmaz. Kapasite dolduğunda ise bir alıcı veriyi çekene kadar bekler.
3. Interface'ler Go'da Nasıl Çalışır? (Implicit Implementation)
Go'da bir tipin bir interface'i uygulaması için "implements" anahtar kelimesine ihtiyacı yoktur.- Duck Typing: Eğer bir struct, bir interface'in beklediği tüm metodlara sahipse, o interface'i otomatik olarak uygulamış sayılır.
- Empty Interface (
interface{}): Herhangi bir tipi temsil edebilir çünkü her tip sıfır metod kuralına uyar. (Not: Go 1.18+ ileanytakma adını kullanıyoruz).
4. Slice ve Array Arasındaki Fark Nedir?
Bellek yönetimi ve performans optimizasyonu için kritik bir sorudur.- Array: Sabit boyutludur ve değer tipidir (değişken kopyalandığında tüm dizi kopyalanır).
- Slice: Dinamik bir görünümdür (view). Arka planda bir Array'e işaret eder. Üç bileşeni vardır: Pointer, Length (Uzunluk) ve Capacity (Kapasite).
5. Context Paketi Ne İşe Yarar?
Özellikle mikroservis ve HTTP sunucusu mülakatlarında vazgeçilmezdir.- İptal Sinyali: Bir isteğin (request) süresi dolduğunda veya kullanıcı bağlantıyı kestiğinde, bu sinyali alt fonksiyonlara ve veritabanı işlemlerine ileterek gereksiz CPU kullanımını önler.
- Değer Taşıma: Request ID gibi meta-verileri katmanlar arasında taşır.
6. Map Yapısı Thread-Safe midir? Değilse Nasıl Çözülür?
Go'nun standartmap yapısı thread-safe değildir. Aynı anda birden fazla goroutine bir map'e yazmaya çalışırsa uygulama çöker (fatal error).Çözüm Yolları:
sync.Mutexveyasync.RWMutexkullanarak erişimi kilitlemek.- Çok okunan, az yazılan senaryolar için
sync.Mapkullanmak.
Mülakat Puan Tablosu: Hangi Cevap Sizi Nereye Taşır?
| Konu | Orta Seviye Cevap | Kıdemli (Senior) Seviye Cevap |
| Hata Yönetimi | if err != nil kullanırım. | Error wrapping (fmt.Errorf ile %w) ve sentinel hatalardan bahseder. |
| Bağımlılıklar | go get ile paket indiririm. | go.mod ve go.sum dosyasının bütünlük korumasını açıklar. |
| Garbage Collector | Otomatik bellek temizler. | GC'nin "Tri-color marking" algoritması ve STW (Stop The World) sürelerinden bahseder. |