JavaScript Olay Döngüsü Açıklaması: Örneklerle Çağrı Yığını, Mikro Görevler ve Zamanlayıcılar

  1. Ana sayfa
  2. Blog
  3. Yazılım Geliştirme

Yazılım Geliştirme

JavaScript Olay Döngüsünün Açıklaması: Örneklerle Çağrı Yığını, Mikro Görevler ve Zamanlayıcılar

Sıfır setTimeout neden hala devam ediyor? Bir iş parçacığı aynı anda bu kadar çok şeyin üstesinden nasıl gelebilir? Olay döngüsünün gerçekte nasıl çalıştığını öğrenin, çalıştırdığımız kodla test edin ve klasik röportaj sorusunu çözün.

9 dk okuma
JavaScript olay döngüsünün açıklaması: örneklerle çağrı yığını, mikro görevler ve zamanlayıcılar

Önemli noktalar

  • JavaScript, kodunuzu tek seferde tek parça olacak şekilde tek bir iş parçacığında çalıştırır.
  • Çağrı yığını boş olduğunda, önce tüm mikro görevler, ardından bir görev çalıştırılır.
  • setTimeout(fn, 0) “şimdi” değil, “minimum bir gecikmeden sonra mümkün olan en kısa sürede” anlamına gelir.
  • Uzun senkronize çalışma her şeyi engeller, bu yüzden onu bölün veya bir çalışana taşıyın.

setTimeout ve bir söz ile birkaç satır çalıştırın; çıktı sırası sizi şaşırtabilir. JavaScript olay döngüsü bunun nedenini açıklıyor. Tek iş parçacıklı bir dilin zamanlayıcıları, ağ çağrılarını ve tıklamaları donmadan yönetmesini sağlayan mekanizmadır.

Bunu bir kez anladığınızda, bir sürü kafa karıştırıcı hata anlamlı olmaya başlar. Her örneği Node.js 24’te çalıştırdık ve çıktı bu çalıştırmadan geliyor. Temel sıralama kuralları tarayıcılarda da geçerlidir ve Node.js’nin hangi noktalarda farklılaştığını belirtiriz. JavaScript vaatlerinin temellerini zaten biliyorsanız, bundan daha fazlasını elde edeceksiniz.

Olay döngüsü neden var?

JavaScript, kodunuzu tek bir ana iş parçacığında yürütür, böylece aynı anda yalnızca bir parçası çalışır. Eğer sadece bir ağ isteğini bekleseydi, yanıt geri gelene kadar sayfa donacaktı.

Yani JavaScript beklemez. Yavaş çalışma, ana bilgisayar ortamına, yani onu arka planda işleyebilen tarayıcıya veya Node.js’ye aktarılır. Bu iş bittiğinde kuyruğa bir geri arama yerleştirilir. Olay döngüsünün görevi, sıradaki geri aramaları boş olduğunda yığına taşımaktır.

Tek başına çalışan bir şef düşünün. Şef fırına bir tabak koyar ve ona bakmak yerine bir zamanlayıcı ayarlar. Zamanlayıcı çaldığında görev bir listeye eklenir ve şef, elindeki işi bitirdikten sonra görevi alır.

Hareketli parçalar

Parça Ne işe yarar Örnekler
Çağrı yığını Şu anda çalışan işlevleri izler Senkron kodunuz
Ana makine API’leri Kodunuzun dışında çalışın Zamanlayıcılar, fetch, dosya okumaları
Görev kuyruğu Çalıştırılmaya hazır geri aramaları tutar setTimeout, tıklamalar, G/Ç
Mikro görev kuyruğu Daha yüksek öncelikli geri aramaları tutar .then, await, queueMicrotask
Olay döngüsü Bundan sonra ne olacağına karar verir Sürekli çalışır

Görevlere bazen makro görevler denir. Kesin olarak konuşursak, birkaç görev kaynağı olabilir ve kesin ayrıntılar ortamlar arasında farklılık gösterir.

kurallar

  1. Çağrı yığını boşalana kadar tüm eşzamanlı kodları çalıştırın.
  2. Yol boyunca eklenen yeniler de dahil olmak üzere tüm mikro görevleri çalıştırın.
  3. Bir tarayıcıda, zamanı gelmişse bir güncelleme oluşturun.
  4. Sıradan bir görevi alın ve çalıştırın.
  5. 2. adıma geri dönün.

En önemli ayrıntı: tüm mikro görevler, ardından bir görev. Çoğu olay döngüsü bulmacası bu tek kuralın uygulanmasıyla çözülür.

Siparişi görün

console.log("1 sync");
setTimeout(() => console.log("5 timeout"), 0);
Promise.resolve().then(() => console.log("3 promise"));
queueMicrotask(() => console.log("4 microtask"));
console.log("2 sync");

// 1 sync
// 2 sync
// 3 promise
// 4 microtask
// 5 timeout

İşte olanlar. İki console.log hattı eşzamanlıdır, dolayısıyla ilk önce onlar çalıştırılır. Söz geri araması ve queueMicrotask mikro görev kuyruğuna girdi ve yığın boşalır boşalmaz eklendikleri sıraya göre çalıştırıldılar. Zamanlayıcı geri araması, gecikmesi sıfır olmasına rağmen bir görev sırasını beklemek zorundaydı.

Mikro görevler zamanlayıcılar arasında çalışır

Her görevden sonra mikro görev kuyruğu yeniden boşaltılır. Bu örnek bunu kanıtlıyor:

setTimeout(() => {
  console.log("timer 1");
  Promise.resolve().then(() => console.log("promise inside timer 1"));
}, 0);
setTimeout(() => console.log("timer 2"), 0);

// timer 1
// promise inside timer 1
// timer 2

İlk zamanlayıcı sırasında oluşturulan söz, ikinci zamanlayıcıdan önce yürütüldü. Modern tarayıcılar ve Node.js 11 ve sonraki sürümleri bu şekilde davranır.

Beklemenin uygun olduğu yer

await bir fonksiyonu ikiye böler. Ondan önceki her şey eşzamanlı olarak çalışır ve ondan sonraki her şey bir mikro görev olarak planlanır. Bu birçok insanı şaşırtıyor:

async function task() {
  console.log("A before await");
  await null;
  console.log("C after await");
}

task();
console.log("B after calling task");

// A before await
// B after calling task
// C after await

Arka planda bir async işlevi başlamaz. İlk await noktasına ulaşana kadar aynı iş parçacığı üzerinde çalışır. Bu, null gibi gerçek bir vaat olmayan bir şeyi beklerken bile geçerlidir. Bu söz dizimi hakkında daha fazla bilgi için JavaScript eşzamansız/beklemede kılavuzumuza bakın.

Döngüyü engelleme

Senkron kod çalışırken başka hiçbir şey yapamaz. Bunu göstermek için 0 ms’ye bir zamanlayıcı ayarladık, ardından ipliği yarım saniye meşgul tuttuk:

const start = Date.now();
setTimeout(() => console.log("timer ran after", Date.now() - start, "ms"), 0);
while (Date.now() - start < 500) {}

// timer ran after about 500 ms

Zamanlayıcının gecikmesi minimumdur, bir garanti değildir. Yalnızca yığın serbest kaldığında çalışıyordu. Bir web sayfasında bunun gibi uzun bir döngü, tıklamaların yanıt vermediği ve animasyonların durduğu anlamına gelir. Bir sunucuda diğer tüm isteklerin beklemesi gerekir; bu nedenle yavaş bir eşzamanlı çağrı, Node.js işleminin tüm kullanıcılarına zarar verebilir.

Engellemenin yaygın nedenleri arasında büyük döngüler, çok büyük JSON’un ayrıştırılması, istek işleyicilerdeki readFileSync gibi eşzamanlı dosya işlevleri ve yıkıcı düzenli ifadeler yer alır.

İpucu: Chrome DevTools’ta Performans paneli, 50 ms’den uzun görevleri uzun görevler olarak işaretler. Bir sayfayı yavaşlatan şeyin ne olduğunu bulmanın hızlı bir yoludur.

Duyarlı kalmak

Ağır işler için olay döngüsüne nefes alma şansı verin. Bunun bir yolu zamanlayıcıyı ara sıra duraklatmak ve böylece diğer görevlerin yürütülmesini sağlamaktır:

const items = [0, 1, 2, 3, 4];

async function processAll() {
  for (const item of items) {
    if (item === 2) await new Promise((r) => setTimeout(r, 0));
    console.log("item", item);
  }
}

setTimeout(() => console.log("other work gets a turn"), 0);
processAll();

// item 0
// item 1
// other work gets a turn
// item 2
// item 3
// item 4

Diğer zamanlayıcı ortada çalışıyordu çünkü gerçek bir görevle teslim olmuştuk. Gerçek kod her bir öğeyi veya milisaniyede bir üretecektir. Görüntü işleme gibi gerçekten CPU ağırlıklı işler için, tarayıcılarda bir Web Çalışanı veya Node.js’de ayrı iş parçacıklarında çalışan bir çalışan iş parçacığı kullanın.

Mikro görev açlığı

Döngü, devam etmeden önce mikro görev kuyruğunu tamamen boşalttığından, daha fazla zamanlamayı sürdüren bir mikro görev, diğer her şeyi durdurabilir. Bunu 100.000 zincirleme mikro görevle test ettik:

let count = 0;
let timerFired = false;
setTimeout(() => { timerFired = true; }, 0);

function spin() {
  count++;
  if (count < 100000) queueMicrotask(spin);
  else console.log("timer fired during microtasks?", timerFired);
}
queueMicrotask(spin);

// timer fired during microtasks? false

Zamanlayıcı, hepsi tamamlanana kadar çalıştırılamadı. Bu zincir hiç sona ermezse, zamanlayıcılar asla çalışmaz ve tarayıcıda sayfa asla yeniden boyanmaz. await ile çözülmüş bir söze boyun eğmenin burada yardımcı olmadığını unutmayın, çünkü bu sadece başka bir mikro görev ekler. Başkalarına sıra vermek için zamanlayıcı gibi gerçek bir göreve ihtiyacınız var.

Tarayıcılarda oluşturma

Bir tarayıcı genellikle görevler arasında resim yapma şansını yakalar. Bu, yaygın bir hatayı açıklıyor:

spinner.hidden = false;
doHeavyWork();              // blocks the thread
spinner.hidden = true;

Tarayıcının bu satırlar arasında görüntü oluşturma fırsatı olmadığından döndürücü hiçbir zaman görünmez. Bunu düzeltmek için, ağır iş başlamadan önce bir çerçevenin geçmesine izin verin veya bu işi bir işçiye aktarın. Görselleri değiştiren kod için requestAnimationFrame bir sonraki boyamadan hemen önce çalışır, bu da onu animasyon için doğru araç yapar.

Node.js farklılıkları

Node.js’nin zamanlayıcılar, G/Ç yoklaması ve setImmediate dahil olmak üzere çeşitli aşamalardan oluşan kendi olay döngüsü vardır. Ayrıca kendi kuyruğunda çalışan process.nextTick vardır. Bunları bir eşzamansız işlevin içinden çalıştırırken gördüklerimiz:

setTimeout(() => console.log("timeout"), 0);
setImmediate(() => console.log("immediate"));
process.nextTick(() => console.log("nextTick"));
Promise.resolve().then(() => console.log("promise"));

// promise
// nextTick
// immediate
// timeout

Birçok makale, nextTick‘in her zaman vaatlerden üstün olduğunu ve zamanlayıcının setImmediate‘den üstün olduğunu belirtir. Sonucumuz işin bu kadar basit olmadığını gösteriyor. Kodumuz zaten bir mikro görev içinde çalışıyordu, bu nedenle önce söz kuyruğu devam etti. Ve setTimeout ve setImmediate‘ün sırasının nereden çağrıldıklarına bağlı olarak değiştiği bilinmektedir. O yüzden bunların tam sırasına göre kod yazmayın. Bir şeyin birbiri ardına olması gerekiyorsa, bunları açıkça zincirleyin.

Röportaj sınavı

Cevabı okumadan önce sırayı bulmaya çalışın:

console.log("a");
setTimeout(() => console.log("b"), 0);
Promise.resolve().then(() => {
  console.log("c");
  setTimeout(() => console.log("d"), 0);
  Promise.resolve().then(() => console.log("e"));
});
console.log("f");

Çalışmamız a, f, c, e, b, d yazdırdı. İşte nedeni:

  1. a ve f eşzamanlıdır, dolayısıyla önce onlar çalışır.
  2. Yığın boş olduğundan mikro görevler şu şekilde çalışır: c, ardından aynı turda yeni mikro görev e.
  3. Şimdi bir görev var: ilk sıraya alınan zamanlayıcı b.
  4. Sonra bir sonraki görev: mikro görev sırasında kuyruğa alınan zamanlayıcı d.

Yaygın hatalar

  • setTimeout‘nin kesin olduğunu düşünüyorum. Gecikme yalnızca minimum düzeydedir.
  • async‘nin başka bir iş parçacığı anlamına geldiğini düşünmek. Asenkron kod, beklemeler arasında ana iş parçacığında hâlâ çalışıyor.
  • Sırayı düzeltmek için uykuları kullanmak. Gerçek durumu beklemek çok daha güvenilirdir; bu aynı zamanda kesintili testler için de geçerlidir.
  • forEach‘yi await ile kullanma Öğeler arasında beklemez. Bkz. JavaScript dizi yöntemleri.
  • Bir sunucu işleyicisinde yoğun eşzamanlı çalışma yapmak. Bir istek diğer tüm istekleri geciktirebilir.

Son sözler

Temel kuralı unutmayın: yığın boşalana kadar çalıştırın, tüm mikro görevleri çalıştırın, ardından bir görevi çalıştırın ve tekrarlayın. Geri kalan her şey ondan kaynaklanır. Kalıcı olmasını sağlamak için yukarıdaki testin kendi versiyonunu yazın, çıktıyı kağıt üzerinde tahmin edin ve ardından çalıştırın. Bir yanlışı anlamak ve nedenini anlamak size herhangi bir diyagramdan daha fazlasını öğretecektir.

Sık sorulan sorular

JavaScript’teki olay döngüsü nedir?

Çağrı yığını boş olduğunda sıraya alınmış geri aramaları çalıştıran mekanizmadır. Tek iş parçacıklı JavaScript’in zamanlayıcıları, girişi ve ağ yanıtlarını engellemeden işlemesine olanak tanır.

Mikro görev ile görev arasındaki fark nedir?

Söz geri aramaları gibi mikro görevlerin tümü yığın boşalır boşalmaz çalışır. Zamanlayıcılar gibi görevler birer birer yürütülür ve mikro görevler her birinin ardından boşaltılır.

SetTimeout neden 0 ile hemen çalışmıyor?

Geri araması bir görev sırasını beklemelidir. Tüm senkronize kodlar ve mikro görevler ilk önce çalıştırılır ve gecikme, kesin bir süre yerine minimum düzeydedir.

JavaScript tek iş parçacıklı mı?

Ana JavaScript kodunuz tek bir iş parçacığında çalışır. Tarayıcılar ve Node.js, bazı arka plan çalışmaları için diğer konuları kullanır ve çalışanlar, kodu paralel olarak çalıştırmanıza izin verir.

Wait olay döngüsünü engelliyor mu?

Hayır. wait yalnızca eşzamansız işlevi duraklatır ve bu arada diğer kodlar çalışabilir. Ancak öncesinde veya sonrasında uzun senkronize kod yine de döngüyü engelleyebilir.

Öğrenmeye devam et

Stack Quora ile çalışın

Test, WordPress veya SEO konusunda yardıma mı ihtiyacınız var?

Ekiplerin daha iyi yazılımlar sunmasına ve sitelerini büyütmesine yardımcı oluyoruz. Bize ne üzerinde çalıştığınızı söyleyin, biz de bir sonraki adım için net bir öneride bulunalım.

Okumaya devam et

Daha fazla kılavuz test, yapay zeka ve modern geliştirme

Bu makaleyi beğendiniz mi? Bir konu seçin ve doğrudan en yeni eğitimlerimize geçin.

Yapay zekâ

Yapay Zeka Halüsinasyonları Açıklandı: Dil Modelleri Neden İşleri Düzeltiyor ve Nasıl Azaltılabilir?

Yapay zeka halüsinasyonları açıkladı: ne olduklarını, dil modellerinin bunları neden ürettiğini, yaygın türlerini, temellendirme ve yönlendirmelerle…

Makaleyi okuyun →
DevOps

Açıklanan Ortam Değişkenleri: .env Dosyaları, Sırlar ve Yapılandırma Doğru Yapıldı

Çalıştırdığımız Python örnekleriyle açıklanan ortam değişkenleri: bunları okumak ve ayarlamak, neden her değerin bir dize olduğu, .env dosyaları, sü…

Makaleyi okuyun →
Yazılım geliştirme

API Hız Sınırlamasının Açıklaması: Algoritmalar, Başlıklar ve 429 Hatalarının Ele Alınması

API hızı sınırlaması, çalıştırdığımız bir simülasyonla açıklanmıştır: belirteç kümesi, sabit pencere, kayan pencere, 429 yanıt, hız sınırı başlıklar…

Makaleyi okuyun →
Test otomasyonu

Python'da alay etme: Unittest.mock, patch ve Testleri Yalan Yapan Hatalar

Unittest.mock ile Python'da alay etme, test edildi: Sahte ve dönüş_değeri, yan_etki, bir adın kullanıldığı yerde yama uygulama, spesifikasyon ve oto…

Makaleyi okuyun →
Yazılım testi

Kod Kapsamının Açıklaması: Hat ve Şube Kapsamı ve %100'ün Gerçek Anlamı

Kod kapsamı gerçek bir kapsama.py çalışmasıyla açıklanmıştır: hat, şube ve durum kapsamı, bir raporun okunması, %100 kapsamın neden hâlâ hataları ka…

Makaleyi okuyun →
Veritabanları ve SQL

SQL'de DELETE vs TRUNCATE vs DROP: Farklılıklar, Geri Alma ve Her Biri Ne Zaman Kullanılmalı

DELETE vs TRUNCATE vs DROP test edilmiş SQL ile açıklandı: her birinin neyi kaldırdığı, geri aldığı, tetiklediği, kimlik sıfırlaması, hızı ve Postgr…

Makaleyi okuyun →
Veritabanları ve SQL

Açıklanan SQL Görünümleri: Örneklerle Tuzakları Oluşturun, Kullanın ve Önleyin

Çalıştırdığımız sorgularla açıklanan SQL görünümleri: görünüm oluşturma, canlı sonuçlar, sütunları gizleme, performans, güncellenebilir ve gerçekleş…

Makaleyi okuyun →
Yazılım geliştirme

TypeScript Arayüzü ve Tür: Gerçek Farklılıklar, Derleyiciyle Test Edildi

TypeScript arayüzü ve türü, gerçek derleyiciyle kontrol edildi: her ikisinin de yapabileceği, yalnızca birinin yapabileceği, bildirim birleştirme, g…

Makaleyi okuyun →
Yazılım geliştirme

Python *args ve **kwargs'ın Açıklaması: Açık Örneklerle Esnek Fonksiyonlar

Python *args ve **kwargs çalıştırdığımız kodla açıklanmıştır: paketleme ve paketten çıkarma, parametre sırası, yalnızca anahtar kelime ve yalnızca k…

Makaleyi okuyun →
Yazılım geliştirme

Python Lambda İşlevleri: Söz Dizimi, Gerçek Kullanımlar ve Ne Zaman Kullanılmaması Gerektiği

Çalıştırdığımız kodla açıklanan Python lambda işlevleri: sözdizimi, anahtarla sıralama, harita ve filtre, kapatmalar, geç bağlama tuzağı ve normal b…

Makaleyi okuyun →
Yapay zekâ

Yapay Zeka Ajanları Nelerdir? Çalıştırabileceğiniz Basit Bir Aracı Döngüsüyle Nasıl Çalışırlar?

Yapay zeka ajanları nedir? Aracı döngüsüne, araçlara, belleğe ve korkuluklara ilişkin basit bir kılavuz, çalıştırdığımız küçük bir Python döngüsü, g…

Makaleyi okuyun →
DevOps

İzleme ve Gözlemlenebilirlik: Günlükler, Metrikler ve İzlerle Gerçek Fark

İzleme ve gözlemlenebilirliğin açıklanması: bilinen ve bilinmeyen arızalar, günlükler, ölçümler ve izler, ödeme olayının gözden geçirilmesi, altın s…

Makaleyi okuyun →
DevOps

Docker Birimleri ve Bağlama Bağlantıları: Konteyner Verilerini Doğru Şekilde Kalıcılaştırın

Docker birimleri ile bağlama bağlamaları arasındaki karşılaştırma açıklandı: kapsayıcı verilerinin neden kaybolduğu, adlandırılmış birimler, bağlama…

Makaleyi okuyun →
Test otomasyonu

TDD ve BDD: Temel Farklılıklar, Her İki Şekilde Geliştirilmiş Bir Özellik ve Her Birinin Ne Zaman Kullanılacağı

TDD ve BDD, her iki yönde de oluşturulmuş bir indirim özelliğiyle açıklandı: çalıştırdığımız kodla kırmızı-yeşil-refactor, Verilen-Ne Zaman-O Zaman …

Makaleyi okuyun →
Yazılım testi

Kullanıcı Kabul Testi (UAT): Süreç, Kontrol Listesi ve Gerçek Örnekler

Kullanıcı kabul testi açıklandı: bunu kimin yürüttüğü, QA'dan farkı, yedi adımlı bir süreç, bir UAT test senaryosu şablonu, bir kontrol listesi, otu…

Makaleyi okuyun →
Veritabanları ve SQL

Açıklanan SQL NULL Değerleri: IS NULL, COALESCE, NULLIF ve Kaçınılması Gereken Tuzaklar

SQL NULL değerleri, çalıştırdığımız sorgularla açıklandı: üç değerli mantık, IS NULL, COALESCE, NULLIF, toplamaların, birleştirmelerin ve sıralamanı…

Makaleyi okuyun →
Veritabanları ve SQL

SQL CASE WHEN İfadesi: Sözdizimi, Gerçek Örnekler ve Yaygın Hatalar

SQL CASE WHEN çalıştırdığımız sorgularla açıkladı: basit ve aranmış formlar, koşul sırası, SUM'lu pivotlar, COUNT hileleri, özel sıralama, güncellem…

Makaleyi okuyun →
Yazılım geliştirme

JWT Nedir? JSON Web Belirteçleri Bir Çalışma Örneğiyle Açıklanıyor

JWT nedir? JSON Web Tokens açıkladı: üç bölüm, çalıştırdığımız kodda oluşturulan ve üzerinde değişiklik yapılan bir token, JWT ile oturumlar, depola…

Makaleyi okuyun →
Yazılım geliştirme

JavaScript Olay Döngüsü Açıklaması: Örneklerle Çağrı Yığını, Mikro Görevler ve Zamanlayıcılar

JavaScript olay döngüsü çalıştırdığımız kodla açıklandı: çağrı yığını, görev ve mikro görev kuyrukları, setTimeout 0'ın neden anında olmadığı, engel…

Makaleyi okuyun →
Yazılım geliştirme

Python Jeneratörleri ve Verim Açıklaması: Gerçek Örneklerle Bellekten Tasarruf Edin

Python üreteçleri ve verim, çalıştırdığımız kodla açıklandı: nasıl duraklatılır ve devam ettirilir, ölçülen bellek tasarrufları, işlem hatları, sons…

Makaleyi okuyun →
Yapay zekâ

Gömmeler Nelerdir? Vektörler ve Kosinüs Benzerliği Basitçe Açıklandı

Gömmeler nedir? Vektörler, kosinüs benzerliği ve anlamsal aramaya ilişkin sade dilli bir kılavuz; çalıştırdığımız küçük bir örnek, yaygın kullanımla…

Makaleyi okuyun →
DevOps

Mavi-Yeşil ve Kanarya Konuşlandırılması: Farklılıklar, Takaslar ve Nasıl Seçilir

Mavi-yeşil ve kanarya konuşlandırması açıklandı: her birinin nasıl çalıştığı, maliyet, risk ve geri alma, test ettiğimiz istikrarlı kullanıcı grubu,…

Makaleyi okuyun →
Test otomasyonu

Kesintili Testler: Bunların Sebepleri ve Nasıl Düzeltileceği

Yaptığımız demolarla açıklanan hatalı testler: ana nedenler, birinin nasıl doğrulanacağı ve teşhis edileceği, zamanlama için uygun düzeltmeler, payl…

Makaleyi okuyun →
Yazılım testi

Yük Testi ve Stres Testi: Farklılıklar, Metrikler ve k6 Örnekleri

Yük testi ve stres testinin açıklaması: her birinin neyi kanıtladığı, ani yükselme ve soğuma testleri, önemli ölçümler, ortalamaların neden yanıltıc…

Makaleyi okuyun →
Yazılım testi

Test Senaryosu ve Test Senaryosu: Temel Farklılıklar, Örnekler ve Her Biri Ne Zaman Kullanılmalı?

Test senaryosu ve test senaryosunun açıklaması: net tanımlar, yan yana tablo, senaryolardan vakalara, şablonlara ve her birinin ne zaman kullanılaca…

Makaleyi okuyun →
Veritabanları ve SQL

SQL Sorgu Optimizasyonu: Zamanlamalarla Yürütme Planlarını Okuyun ve Yavaş Sorguları Düzeltin

SQL sorgu optimizasyonu bir milyon satırda test edilmiştir: yürütme planlarını okuyun, doğru dizinleri ekleyin, değiştirilemeyen filtreleri düzeltin…

Makaleyi okuyun →
Veritabanları ve SQL

SQL UNION ve UNION ALL: Farklılıklar, Örnekler ve Test Edilmiş Performans

SQL UNION ve UNION ALL, yürüttüğümüz sorgularla açıklandı: kopyalar, her ikisinin de takip ettiği kurallar, gerçek bir veri hatası, ölçülen performa…

Makaleyi okuyun →
Yazılım geliştirme

JavaScript Fetch API Eğitimi: GET, POST, Hata İşleme ve Zaman Aşımları

Yerel bir sunucuya karşı test edilen bir JavaScript Fetch API öğreticisi: GET ve POST, 404'ün neden atmadığı, yeniden kullanılabilir bir yardımcı, s…

Makaleyi okuyun →
Yazılım geliştirme

Python Dosya İşleme: Örneklerle Okuma, Yazma, CSV, JSON ve pathlib

Python dosya işleme, çalıştırdığımız kodla açıklanmıştır: açık modlar, büyük dosyaları okuma, CSV, JSON, pathlib, ikili dosyalar, güvenli yazma, hat…

Makaleyi okuyun →
Yazılım geliştirme

Python Sınıfları ve Nesneleri: Gerçek Örneklerle OOP Eğitimi

Çalıştırdığımız kodla açıklanan Python sınıfları ve nesneleri: __init__, yöntemler, sınıf ve örnek nitelikleri, kalıtım, özellikler, dunder yöntemle…

Makaleyi okuyun →
Yapay zekâ

Büyük Dil Modeli Nedir? Yüksek Lisans'ların Nasıl Çalıştığı, Abartmadan Açıklanıyor

Büyük dil modeli nedir? LLM'ler sade bir dille açıklandı: belirteçler, yerleştirmeler, dikkat, eğitim, sıcaklık ve bağlam pencereleri, küçük bir son…

Makaleyi okuyun →
DevOps

Yeni Başlayanlar İçin Linux Komutları: Örneklerle Temel Terminal Kılavuzu

Yeni başlayanlar için göreve göre gruplandırılmış Linux komutları: pratik bir günlük analizi örneğiyle gezinme, dosyalar, günlükleri görüntüleme, gr…

Makaleyi okuyun →
Test otomasyonu

Selenyum ve Oyun Yazarı: Temel Farklılıklar, Karşılaştırılan Kod ve Hangisinin Seçileceği

Selenium ve Playwright karşılaştırması: mimari, bekleme, tarayıcı ve dil desteği, hata ayıklama, her iki araçta da aynı test, geçiş tavsiyesi ve nas…

Makaleyi okuyun →
Yazılım testi

Eşdeğerlik Bölümleme: Test Tasarımı Tekniğinin Çalışılmış Örneklerle Açıklanması

Eşdeğerlik bölümlemenin açıklaması: geçerli ve geçersiz bölümlerin nasıl bulunacağı, yaşlara yönelik çalışılmış örnekler, şifreler ve kuponlar, yürü…

Makaleyi okuyun →
Yazılım testi

Yazılım Testinde Şiddet ve Öncelik: Farklılıklar, Matris ve Gerçek Örnekler

Yazılım testinde önem ve önceliğin açıklanması: net tanımlar, örnekler içeren dört yönlü bir matris, seviye ölçekleri, her birini kimin belirlediği …

Makaleyi okuyun →
Veritabanları ve SQL

SQL Alt Sorguları Eğitimi: Türler, İlişkili Alt Sorgular ve Örneklerle EXISTS

Çalıştırdığımız sorguları içeren bir SQL alt sorgu eğitimi: skaler, IN, FROM ve SELECT alt sorguları, ilişkili alt sorgular, EXISTS, NOT IN NULL tuz…

Makaleyi okuyun →
Veritabanları ve SQL

SQL İşlemleri ve ACID Açıklaması: COMMIT, ROLLBACK ve İzolasyon Seviyeleri

SQL işlemleri ve ACID, yürüttüğümüz bir banka transferiyle açıklandı: COMMIT, ROLLBACK, kayıt noktaları, kilitler, izolasyon seviyeleri, kirli okuma…

Makaleyi okuyun →
Yazılım geliştirme

Git merge vs rebase: farklar, örnekler ve hangisi ne zaman kullanılır

Git merge vs rebase; gerçek log çıktısı, karşılaştırma tablosu, rebase'in altın kuralı ve güvenli bir ekip iş akışıyla anlatılıyor.

Makaleyi okuyun →
Yazılım geliştirme

Python Liste Üreteci (List Comprehension): Sözdizimi, Örnekler ve Kaçınılacak Durumlar

Python list comprehension anlatımı: sözdizimi, filtreleme, if-else, iç içe döngüler, ölçülmüş süreler ve düz for döngüsünün daha iyi olduğu durumlar.

Makaleyi okuyun →
Veritabanları ve SQL

SQL JOIN Örneklerle Açıklama (Inner, Left, Right, Full)

SQL JOIN'leri örnek tablolar ve sorgularla adım adım öğrenin: INNER, LEFT, RIGHT, FULL, CROSS ve SELF; yaygın hatalar ve performans ipuçları.

Makaleyi okuyun →