yoklateknik mülakat

Backend Php Concurrency Async Mülakat Soruları

75 doğrulanmış Backend Php Concurrency 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

Php Concurrency AsyncZorluk 1
PHP'de gövdesinde yield ifadesi bulunan bir fonksiyonu çağırmak ne döndürür?
  • aBir Generator nesnesi
  • byield edilen ilk değer
  • cyield edilen tüm değerlerin dizisi
  • dnull, ta ki fonksiyon bir foreach içinde kullanılana kadar
Açıklama:Gövdesinde herhangi bir yerde yield bulunan her fonksiyon otomatik olarak bir generator fonksiyonu olur. Onu çağırmak gövdeyi hemen çalıştırmaz — Iterator arayüzünü uygulayan bir Generator nesnesi döner ve gövde yalnızca generator ilerletildikçe çalışır.
Php Concurrency AsyncZorluk 2
function numbers() {
    yield 1;
    yield 2;
    yield 3;
}

foreach (numbers() as $n) {
    echo $n;
}

Ne yazdırılır?
  • a0 1 2
  • b123
  • c1, 2, 3
  • dHiçbir şey yazdırılmaz çünkü generator fonksiyonlar doğrudan foreach içinde kullanılamaz
Açıklama:numbers() bir Generator döner ve bu doğrudan foreach ile gezilebilir. Her iterasyon sırayla bir sonraki değeri yield eder (önce 1, sonra 2, sonra 3) ve echo $n bunları aralarında ayraç olmadan art arda yazdırır: 123.
Php Concurrency AsyncZorluk 1
Bir generator fonksiyonunun içindeki kod tam olarak ne zaman çalışmaya başlar?
  • aFonksiyon çağrıldığı anda, çağıran taraf başka bir şey yapmadan hemen
  • bAncak tüm script baştan sona tamamen çalışmasını bitirdikten sonra
  • cGenerator ilk kez ilerletildiğinde, ör. foreach ya da current()/next() ile
  • dPHP, generator fonksiyonu tanımlayan dosyayı parse edip derlediğinde
Açıklama:Bir generator fonksiyonunu çağırmak yalnızca Generator nesnesini oluşturur; çalışma tembeldir (lazy). Gövde, ilk yield'e kadar ancak bir şey ondan değer çekmeye başladığında (foreach, ->current(), ->next(), ->send() vb.) çalışır.
Php Concurrency AsyncZorluk 2
function pairs() {
    yield 'a' => 1;
    yield 'b' => 2;
}

foreach (pairs() as $k => $v) {
    echo "$k=$v ";
}

Ne yazdırılır?
  • a0=1 1=2
  • ba=1, b=2
  • c1=a 2=b
  • da=1 b=2
Açıklama:yield 'a' => 1; değeri 1'i açık 'a' anahtarıyla yield eder, 'b' => 2 için de aynısı geçerlidir. foreach ($gen as $k => $v) tam olarak bu anahtar/değer çiftlerini alır ve a=1 b=2 yazdırır.
Php Concurrency AsyncZorluk 1
Ek bir extension veya kütüphane olmadan, standart bir PHP script'i varsayılan olarak nasıl çalışır?
  • aSenkron olarak, tek bir thread içinde ifadeler sırayla
  • bBirden fazla ifade otomatik olarak CPU çekirdekleri arasında paralel çalışır
  • cHer fonksiyon çağrısı otomatik olarak yeni bir OS thread'i başlatır
  • dTüm I/O işlemleri varsayılan olarak non-blocking'dir
Açıklama:Sade PHP tek-thread'li ve senkrondur: ifadeler sırayla çalışır ve bloklayan bir çağrı (ör. yavaş bir HTTP isteği) o script'teki her şeyi durdurup dönene kadar bekletir. Gerçek paralellik ya da non-blocking I/O için ek araçlar gerekir (pcntl_fork, Fiber + event-loop kütüphanesi, Swoole vb.).
Php Concurrency AsyncZorluk 2
function slowTask($seconds) {
    sleep($seconds);
    return 'done';
}

$start = microtime(true);
slowTask(1);
slowTask(1);
$elapsed = microtime(true) - $start;

$elapsed yaklaşık ne kadar olur ve neden?
  • a~1 saniye, çünkü PHP iki slowTask() çağrısını da varsayılan olarak eşzamanlı çalıştırır
  • b~2 saniye, çünkü her bloklayan sleep() çağrısı bir sonraki başlamadan önce tamamen bitmelidir
  • c~0 saniye, çünkü PHP sleep() çağrılarını arka planda otomatik olarak zamanlar
  • dmicrotime() ile ölçülemez, çünkü PHP zamanlama bilgisini userland koddan gizler
Açıklama:sleep(), tek olan mevcut çalışma thread'ini bloklar. İkinci slowTask(1) ancak birincisi tamamen döndükten sonra başlar, bu yüzden iki 1 saniyelik uyku art arda toplanır ve yaklaşık 2 saniye eder.

3300 soruluk Backend bankasında kendini sına.

Mülakata başla