yoklateknik mülakat

Backend Nodejs Event Loop Async Mülakat Soruları

75 doğrulanmış Backend Nodejs Event Loop Async mülakat sorusu — cevaplarıyla çöz, açıklamalarıyla öğren, gerçek simülasyonda kendini test et.

Gerçek simülasyonu dene →

Örnek sorular

Nodejs Event Loop AsyncZorluk 1
console.log("A");
console.log("B");
console.log("C");

Bu ne yazdırır ve sıradan neden emin olabiliriz?
  • a"A", "B", "C"
  • bSıra garanti değildir, çünkü her console.log ayrı bir task olarak zamanlanır
  • c"C", "B", "A" — Node, hoisting nedeniyle ifadeleri ters sırada değerlendirir
  • dScript başladığında hangi event loop fazının aktif olduğuna bağlıdır
Açıklama:Burada hiçbir asenkron işlem yok. Node, senkron ifadeleri kaynak koddaki sırayla, tek bir JavaScript thread'inde birer birer çalıştırır. console.log("B") veya console.log("C")'yi erteleyen hiçbir şey yok, bu yüzden çıktı her zaman "A", "B", "C" olur.
Nodejs Event Loop AsyncZorluk 2
Node.js event loop'unun görevi nedir?
  • aÇalışmaya başlamadan önce JavaScript kaynak kodunu makine koduna derlemek
  • bHer biri aynı anda bir callback çalıştıran bir OS thread havuzunu yönetmek
  • cCall stack'in boş olup olmadığını kontrol etmek ve boşsa sıradaki callback'i stack'e almak
  • dV8 heap üzerindeki nesneler için bellek ayırmak ve serbest bırakmak
Açıklama:Event loop, tek thread'li JavaScript'in asenkron işleri yönetebilmesini sağlayan mekanizmadır: call stack'in boş olup olmadığını sürekli kontrol eder, boşsa (timer, I/O tamamlanması, microtask kuyruğu vb. kaynaklı) hazır bir sonraki callback'i stack'e alıp çalıştırır. Derleme ya da bellek yönetimiyle doğrudan ilgisi yoktur.
Nodejs Event Loop AsyncZorluk 1
console.log("start");
setTimeout(() => {
  console.log("timeout");
}, 0);
console.log("end");

Bu ne yazdırır?
  • a"start", "timeout", "end"
  • b"start", "end", "timeout"
  • c"timeout", "start", "end"
  • dsetTimeout 0'dan büyük pozitif bir gecikme gerektirdiği için hata fırlatır
Açıklama:setTimeout(fn, 0), fn'yi hemen çalıştırmaz — mevcut senkron kod bittikten sonra, event loop'un daha sonraki bir fazında çalışmasını planlar. Bu yüzden önce "start" ve "end" (senkron olarak) yazdırılır, "timeout" ise event loop timers fazına ulaştığında yazdırılır.
Nodejs Event Loop AsyncZorluk 1
Node.js, varsayılan olarak JavaScript kodunuzu kaç thread üzerinde çalıştırır?
  • aAçık her socket bağlantısı için bir thread
  • bsetTimeout çağrı sayısına göre büyüyen 4'lü bir thread havuzu
  • cHer asenkron callback için ayrı bir thread
  • dTek bir thread, ancak libuv bazı işletim sistemi seviyesindeki işlemler için arka planda ek thread'ler kullanabilir
Açıklama:JavaScript kodunuz her zaman tek bir ana thread üzerinde çalışır. Uzun süren senkron bir hesaplamanın her şeyi bloklamasının nedeni budur. Node (libuv aracılığıyla) bazı işler için içeride ek thread'ler kullanır, ama JS callback'lerinizin kendisi o tek thread üzerinde birer birer çalışır.
Nodejs Event Loop AsyncZorluk 2
setTimeout(() => console.log("first"), 100);
setTimeout(() => console.log("second"), 10);

Bu ne yazdırır ve hangi sırayla?
  • aKaydedilme sırasıyla önce "first" sonra "second"
  • bHata fırlatır, çünkü iki setTimeout çağrısı aynı fazı paylaşamaz
  • cÖnce "second" sonra "first"
  • dHer iki callback de tam olarak aynı anda çalışır, bu yüzden sıra rastgeledir
Açıklama:Her timer, gecikme süresi dolduğunda çalışmaya hazır hale gelir. 10ms'lik timer'ın süresi 100ms'likten önce dolar, bu yüzden kaynak kodda hangi setTimeout çağrısının önce yazıldığından bağımsız olarak onun callback'i önce çalışır.
Nodejs Event Loop AsyncZorluk 1
console.log("1");
Promise.resolve().then(() => console.log("2"));
console.log("3");

Bu ne yazdırır?
  • a"1", "3", "2"
  • b"1", "2", "3"
  • c"2", "1", "3"
  • dPromise.resolve() bir argümanla çağrılmak zorunda olduğu için hata fırlatır
Açıklama:Promise.resolve() zaten çözülmüş bir promise oluşturur, ama .then callback'i yine de doğrudan değil, bir microtask olarak zamanlanır. Microtask'lar ancak mevcut senkron blok bittikten sonra çalışır, bu yüzden önce "1" ve "3" yazdırılır, sonra "2".

3300 soruluk Backend bankasında kendini sına.

Mülakata başla