Yazılım dünyasında başarılı bir kariyer inşa etmek isteyen herkesin yolculuğunda, programlama dillerindeki yetkinliklerini kanıtlayacakları önemli duraklardan biri mülakatlardır. Özellikle JavaScript gibi popüler dillerde yapılan teknik mülakatlar, adayların dil bilgilerini, algoritma yeteneklerini ve problem çözme becerilerini ölçen sorularla doludur. Bu yazıda, öğrencilerinizin JavaScript diline dair karşılaşabilecekleri mülakat sorularını kolaydan zora doğru sıralayarak, her bir sorunun detaylı cevaplarıyla birlikte açıklamalarını bulabilirsiniz. Hedefimiz, bu sorularla yalnızca teknik mülakatlara hazırlanmak değil, aynı zamanda adayların bu soruların ardındaki mantığı ve prensipleri anlamasını sağlamaktır.

JavaScript’te == ve === arasındaki fark nedir?

Açıklama:== (Loose Equality): İki değerin türünü dikkate almadan karşılaştırır. Eğer iki farklı türdeki değer karşılaştırılıyorsa JavaScript arka planda bir tür dönüşümü yapar.

=== (Strict Equality): Hem değeri hem de türü karşılaştırır. Türler farklıysa otomatik olarak false döner.

5 == '5';  // true, çünkü JavaScript string '5'i önce sayıya çevirir.
5 === '5'; // false, çünkü birisi sayıdır (5), diğeri string'dir ('5').

JavaScript’te bir fonksiyon nasıl tanımlanır?

  • Açıklama: JavaScript’te iki şekilde fonksiyon tanımlanabilir:
    • Fonksiyon Deklarasyonu: Normal fonksiyon tanımlama şeklidir. Bu yöntemle tanımlanan fonksiyonlar, tanımlandığı bloktan önce bile kullanılabilir (hoisting denir).
    • Arrow Fonksiyonu: ES6 ile gelen daha kısa bir yazım şekli. this bağlamı (context) daha nettir, çünkü this anahtar kelimesini dış fonksiyondan devralır.
// Normal fonksiyon
function topla(a, b) {
return a + b;
}

// Arrow fonksiyon
const topla = (a, b) => a + b;

console.log(topla(5, 3)); // 8

JavaScript’te map(), filter() ve reduce() metodlarının farkları nedir?

  • Açıklama:
    • map(): Her bir dizi elemanı üzerinde işlem yaparak yeni bir dizi döner. Dizi elemanlarının her biri üzerinde verilen fonksiyon çalıştırılır.
    • filter(): Verilen koşula uyan elemanları seçerek yeni bir dizi döner.
    • reduce(): Dizi elemanlarını tek bir değere indirger (örneğin, bir toplam veya birikim işlemi).
let sayilar = [1, 2, 3, 4];

// map: Her elemanın karesi alınır.
let kareler = sayilar.map(sayi => sayi * sayi);
console.log(kareler); // [1, 4, 9, 16]

// filter: Sadece çift sayılar seçilir.
let ciftler = sayilar.filter(sayi => sayi % 2 === 0);
console.log(ciftler); // [2, 4]

// reduce: Tüm sayılar toplanır.
let toplam = sayilar.reduce((toplam, sayi) => toplam + sayi, 0);
console.log(toplam); // 10

Async/Await kullanımını gösterin.

  • Açıklama: async ve await, promise tabanlı asenkron işlemleri daha kolay ve okunabilir bir şekilde yönetmeye olanak sağlar. await, bir promise’in tamamlanmasını bekler.
function uzunSureliIslem() {
return new Promise(resolve => {
setTimeout(() => {
resolve("İşlem tamamlandı");
}, 2000);
});
}

async function islemYap() {
console.log("İşlem başlıyor...");
let sonuc = await uzunSureliIslem(); // 2 saniye bekler.
console.log(sonuc);
}

islemYap();
  • Açıklama: islemYap fonksiyonu asenkron bir fonksiyon olduğu için içerisinde await kullanabilir. Bu örnekte, 2 saniyelik bir gecikmeden sonra “İşlem tamamlandı” yazısı ekrana basılır.

Bir dizideki en büyük ikinci sayıyı bulan bir fonksiyon yazın.

  • Açıklama: Burada dizinin tüm elemanlarını gezerek en büyük ve ikinci en büyük sayıyı buluruz. Her yeni büyük sayı bulunduğunda, bir önceki en büyük sayı ikinci en büyük olarak kaydedilir.
function ikinciEnBuyuk(dizi) {
let birinci = -Infinity, ikinci = -Infinity;
for (let sayi of dizi) {
if (sayi > birinci) {
ikinci = birinci; // Eski birinci artık ikinci
birinci = sayi; // Yeni birinci
} else if (sayi > ikinci && sayi !== birinci) {
ikinci = sayi; // İkinciyi güncelle
}
}
return ikinci;
}

console.log(ikinciEnBuyuk([3, 5, 1, 9, 7])); // 7
  • Açıklama: birinci en büyük sayıyı, ikinci ise ikinci en büyük sayıyı tutar. Döngü her elemanı kontrol eder ve gerekirse birinci ve ikinci en büyük sayıları günceller.

Debounce fonksiyonu nedir ve bunu JavaScript’te nasıl uygularsınız?

  • Açıklama: Debounce, bir fonksiyonun çağrılmasını geciktiren ve bu sırada aynı fonksiyon tekrar çağrılırsa önceki çağrıları iptal eden bir tekniktir. Özellikle bir olaya (örneğin pencere boyutlandırma) sürekli tepki vermemek için kullanılır.
function debounce(func, beklemeSuresi) {
let zamanlayici;
return function(...args) {
clearTimeout(zamanlayici); // Önceki zamanlayıcıyı sıfırlar
zamanlayici = setTimeout(() => func.apply(this, args), beklemeSuresi);
};
}

const kaydet = debounce(() => {
console.log("Kaydedildi");
}, 1000);

window.addEventListener('resize', kaydet);
  • Açıklama: Bu örnekte pencere boyutlandırıldığında kaydet fonksiyonu sürekli çağrılmayacak, yalnızca 1 saniyelik bir duraksamadan sonra çalıştırılacaktır. Bu da gereksiz işlemlerden kaçınılmasını sağlar.

Bir dizide tekrar eden elemanları bulup yeni bir dizi olarak döndüren bir fonksiyon yazın.

  • Açıklama: Dizideki elemanları sayarak, birden fazla görünen elemanları buluruz. Bu, bir nesne (object) kullanarak her elemanın kaç defa tekrarlandığını saymakla yapılır.
function tekrarEdenler(dizi) {
let sayac = {};
let tekrarlar = [];

for (let sayi of dizi) {
sayac[sayi] = (sayac[sayi] || 0) + 1; // Eleman sayısı
}

for (let sayi in sayac) {
if (sayac[sayi] > 1) {
tekrarlar.push(Number(sayi)); // Birden fazla olanları seç
}
}

return tekrarlar;
}

console.log(tekrarEdenler([4, 5, 6, 7, 4, 8, 5])); // [4, 5]
  • Açıklama: İlk döngüde, her sayının kaç defa geçtiğini sayarız. İkinci döngüde, sadece 1’den fazla tekrar eden sayıları yeni bir diziye ekleriz.

Verilen bir cümlenin her kelimesinin ilk harfini büyük harfe çeviren bir fonksiyon yazın.

  • Açıklama: split() ile cümleyi kelimelere böleriz, sonra her kelimenin ilk harfini büyük harfe çeviririz ve join() ile kelimeleri tekrar birleştiririz.
function basHarfBuyut(cumle) {
return cumle.split(' ').map(kelime => kelime.charAt(0).toUpperCase() + kelime.slice(1)).join(' ');
}

console.log(basHarfBuyut("merhaba dünya javascript")); // "Merhaba Dünya Javascript"
  • Açıklama: charAt(0) ile kelimenin ilk harfini alırız ve toUpperCase() ile bunu büyük harfe çeviririz. Sonrasında, kelimenin geri kalanını (slice(1)) birleştiririz.

Ekstra Sorular ve Danışmanlık Hizmeti

Daha fazla örnek soruya, mülakat hazırlığı için ek içeriklere veya birebir danışmanlığa ihtiyaç duyuyorsanız, sizin için profesyonel destek sağlayabilirim. Öğrencilerinizin ihtiyaçlarına yönelik özel sorular, çözümler ve rehberlik hizmeti ile JavaScript mülakatlarını daha da kolaylaştırmak için buradayım.

Sonuç

JavaScript mülakat soruları, hem dilin temel yapılarını hem de algoritma becerilerini test etmek üzere oluşturulur. Öğrenciler, burada öğrendikleri soruların cevaplarını çalışarak yalnızca mülakatlara değil, aynı zamanda gerçek dünya problemlerine yönelik çözüm üretme yeteneklerini de geliştirebilirler. Her seviyeye hitap eden bu sorular sayesinde, mülakatlarda karşılarına çıkacak teknik sorulara karşı daha donanımlı olacaklar. Başarıya giden bu süreçte, sürekli pratik yapmanın ve yeni teknolojilere adapte olmanın önemini unutmamalılar.

Son Yazılar

Kategoriler:

Front End, Javascript,