yoklateknik mülakat

Backend Eşzamanlılık Mülakat Soruları

75 doğrulanmış Backend Eşzamanlılık mülakat sorusu — cevaplarıyla çöz, açıklamalarıyla öğren, gerçek simülasyonda kendini test et.

Gerçek simülasyonu dene →

Örnek sorular

EşzamanlılıkZorluk 1
Process ile thread arasındaki temel bellek farkı nedir?
  • aAynı process içindeki thread'ler process'in belleğini paylaşır; ayrı process'lerin normalde kendi address space'leri vardır
  • bProcess'ler belleği varsayılan olarak paylaşır; her thread izole bir address space alır
  • cHem thread'ler hem process'ler her zaman tamamen izole bellek alır
  • dThread'ler yalnızca aynı CPU core üzerinde çalıştıklarında bellek paylaşır
Açıklama:Bir process kendi address space'ine sahiptir; thread'leri onun içinde yaşar ve o belleği paylaşır. Bu paylaşım thread'ler arası iletişimi ucuz yapar — shared-state bug'larını mümkün kılan şey de budur. Paylaşım CPU core'una bağlı değildir (d): thread'ler nerede schedule edilirse edilsin belleği paylaşır.
EşzamanlılıkZorluk 1
Concurrency ile parallelism arasındaki fark nedir?
  • aTamamen aynı anlama gelirler — iki kelime tek kavramın birbirinin yerine geçen adlarıdır
  • bConcurrency, yaşam süreleri örtüşen birden çok işi yönetmektir; parallelism, aynı fiziksel anda birden fazlasını çalıştırmaktır
  • cParallelism tek core'da bile olabilir; concurrency ise her zaman birden çok core gerektirir
  • dConcurrency sadece I/O-bound işlere, parallelism sadece CPU-bound işlere uygulanır
Açıklama:Concurrency yapıyla ilgilidir — tek core'da bile yaşam süreleri örtüşen işleri çevirmek. Parallelism yürütmeyle ilgilidir — işlerin aynı anda gerçekten çalışması, ki bu birden çok core gerektirir. Tek core'lu bir makine concurrent olabilir ama asla gerçekten parallel olamaz; (c) tam tersini söylüyor.
EşzamanlılıkZorluk 2
Bir sunucu bellekte paylaşılan bir sayaç tutuyor.
counter = 0

function handle_request():
    counter = counter + 1

İki thread, handle_request() fonksiyonunu 1000'er kez çağırıyor. counter'ın son değeri ne olur?
  • aHer zaman tam 2000 — artırma tek satır olduğu için kesintiye uğrayamaz
  • bHer zaman tam 1000 — ikinci thread'in yazmaları ilkinin yazmalarını ezer
  • cEn fazla 2000, ama daha az olabilir — eşzamanlı artırmalar race condition'a kurban gidebilir
  • dProgram çöker, çünkü iki thread aynı değişkene yazamaz
Açıklama:counter = counter + 1 bir read-modify-write dizisidir. İki thread okuma ile yazma arasında iç içe geçtiğinde artışlardan biri diğerini ezer ve kaybolur; sonuç 2000'in altına düşebilir. Kaynak kodda tek satır olması (a) bir şey ifade etmez — birden çok adıma derlenir — ve eşzamanlı yazma tek başına programı çökertmez (d).
EşzamanlılıkZorluk 1
Concurrent programlamada critical section nedir?
  • aProgramın performans açısından en kritik, her şeyden önce optimize edilmesi gereken sıcak yolu
  • bPaylaşılan bir kaynağa erişen ve aynı anda yalnızca tek thread'de çalışması gereken kod
  • cUygulama açılışında, henüz hiçbir thread yokken çalışan kod
  • dYakalanmayan exception'ları tüm process'i düşüren blok
Açıklama:Critical section, paylaşılan state'e dokunan bölgedir; bu yüzden çalışması karşılıklı dışlamalı (mutually exclusive) hale getirilmelidir — tipik olarak bir mutex ile. İsimdeki 'critical' performansla ilgili değildir (a); karışıklık kelimeyi 'performance-critical' okumaktan gelir.
EşzamanlılıkZorluk 2
Bir mutex'i tutmak gerçekte neyi garanti eder?
  • aAynı anda en fazla bir thread onu tutar; lock ile unlock arasındaki kod asla eşzamanlı çalışmaz
  • bKoruduğu kod tek bir CPU core'a sabitlenir ve hızlanır
  • cThread lock'u tuttuğu sürece OS scheduler onu preempt etmez
  • dÇakışan yazmalar otomatik tespit edilip geri alınır
Açıklama:Mutex yalnızca mutual exclusion sağlar: aynı anda tek sahip. Preemption'ı engellemez (c) — lock'u tutan thread bölümün ortasında duraklatılabilir; diğerleri sadece o bırakana kadar giremez. Geri alma semantiği (d) lock'ların değil transaction'ların işidir.
EşzamanlılıkZorluk 2
thread 1:        thread 2:
lock(A)          lock(B)
lock(B)          lock(A)
# ... iş ...     # ... iş ...
unlock(B)        unlock(A)
unlock(A)        unlock(B)

Bu iki thread aynı anda çalıştığında ne olabilir?
  • aHer zaman tamamlanırlar, çünkü lock istekleri ilk gelen alır sırasıyla verilir
  • bRuntime hatası oluşur: aynı mutex iki farklı thread'den istenemez
  • cLivelock: iki thread iş yapmadan sonsuza dek lock alıp bırakır
  • dDeadlock mümkündür: her thread bir lock'u tutarken diğerini sonsuza dek bekleyebilir
Açıklama:Thread 1 A'yı, thread 2 B'yi aldıktan sonra ikisi de ikinci lock'una uzanırsa, her biri diğerinin tuttuğu lock'u bekler — sonsuza dek. FIFO dağıtım (a) genel bir garanti değildir ve işe de yaramazdı; thread'ler farklı lock'ları bekliyor. Livelock (c) aktif deneme-vazgeçme içerir; düz bloklayan lock'lar bunu yapmaz.

3300 soruluk Backend bankasında kendini sına.

Mülakata başla