Eğer logHello fonksiyonu ok işaretli (ok fonksiyonu) olarak yazılmışsa ve runOnce içinde fn.call(this, ...args) aracılığıyla çağrılıyorsa, this bağlamı ne olur? logHello fonksiyonunda bağlamın doğru iletilmesi için ne değiştirilmelidir?
Frontend
CamelCase dizgisini snake_case'e dönüştüren bir fonksiyon yazın. Düzenli ifadeler, karakter kodları veya sabit listeler kullanılamaz; çözüm evrensel olmalıdır. Zaman ve alan karmaşıklığını değerlendirin.
Neden iki kez sleep(2000) ve sleep(1000) çağrısı yapıldığında önce 1 saniyelik log, sonra 2 saniyelik log görüntülenir? Event Loop, mikro ve makro görevlerin çalışma şeklini açıklayın.
/* Elimizde şu şekilde bir bilet seti var: [ { from: 'Londra', to: 'Moskova' }, { from: 'NY', to: 'Londra' }, { from: 'Moskova', to: 'St. Petersburg' }, ... ] Bu biletlerden tek, kesintisiz bir rota oluşturulabilir. Rotada döngü veya tekrar yok. Bu aynı bilet nesnelerini rotaya göre sıralı şekilde döndüren bir program yazmanız gerekiyor. */ function getRoute(tickets = [], startCity) { // kodunuzu buraya yazın } console.clear() console.log(getRoute([ { from: 'Londra', to: 'Moskova' }, { from: 'NY', to: 'Londra' }, { from: 'Moskova', to: 'St. Petersburg' }, ], 'NY')); /* [ { from: 'NY', to: 'Londra' }, { from: 'Londra', to: 'Moskova' }, { from: 'Moskova', to: 'St. Petersburg' }, ] */
Veritabanları ve API ile çalışma bilgisi
/** * `asyncAuth(callback)` fonksiyonu, içinde * bir hata (birinci argüman olarak) ve backend'den veriler * (ikinci argüman olarak) geçirebileceğiniz bir callback kabul eder. * asyncAuth((error, data) => {}); * * `auth()` fonksiyonunu uygulamanız gerekiyor, * bu fonksiyon `asyncAuth()`'u çağırır, ancak Promise döner. * * @returns {Promise} */ function auth() { // asyncAuth((error, data) => {}); } /** * `tryAuth()` fonksiyonu, `auth()`'u kullanır ve hata durumunda, * N ek deneme yapar. * Tüm denemeler başarısız olursa, son hatayı döner. * * @returns {Promise} */ function tryAuth(n) { }
/** * 'asyncAuth(callback)' fonksiyonu, içinde hata (birinci argüman) ve * backend'den gelen veriler (ikinci argüman) ile çağrılabilen bir callback alır. * asyncAuth((error, data) => {}); * * 'auth()' fonksiyonunu uygulamanız gerekiyor, * bu fonksiyon 'asyncAuth()' çağırır, ancak bir Promise döner. * * @returns {Promise} */ function auth() { return new Promise((resolve, reject) => { asyncAuth((error, data) => { if (error) { reject(error) } else { resolve(data) } }); }) } /** * 'tryAuth()' fonksiyonu, 'auth()' kullanır ve hata durumunda, * N ek deneme yapar. * Tüm denemeler başarısız olursa, son hatayı döner. * * @returns {Promise} */ function tryAuth(n) { return new Promise((resolve, reject) => { function attempt(attemptsLeft) { auth().then(resolve).catch((error) => { if (attemptsLeft <= 0) { reject(error); } else { attempt(attemptsLeft - 1); } }); } attempt(n); }); }
Ticari deneyiminizde TypeScript ve JavaScript dışında başka neye yazmanız gerekti?
/* Array.prototype.some için bir polyfill yazılması gerekiyor Parametreler - callback - her öğeyi kontrol eden fonksiyon, üç argüman alır: - element - İşlenmekte olan dizideki şu anki öğe. - index (İsteğe bağlı) - İşlenmekte olan şu anki öğenin dizin numarası. - array (İsteğe bağlı) - üzerinde geçiş yapılan dizi. - thisArg (İsteğe bağlı) - callback fonksiyonunu çalıştırırken this olarak kullanılan değer. Dönüş değeri En az bir öğe için kontrol fonksiyonu truthy bir değer döndürürse true, aksi takdirde false. */ Array.prototype.some = function (callback, thisArgs) { const array = this; for (let i = 0; i < array.length; i++) { if (!(i in array)) continue; const result = callback.call(thisArgs, array[i], i, array); if (result) return true; } return false; }
Kesirli sayıları dikkate almamız gerekiyorsa, times metoduna ne eklemeliyiz?
Hangi takımda çalışıyorsunuz ve hangi projede?
Promise statik metodları kullanmadan söz promise toplama görevini çözebilir miyiz? Döngü içindeki promise'lerin çalışması Promise.all'dan farklı olacak mı — paralel mi yoksa sıralı mı?
Ağaçta sincaplar ve kargalar oturuyor. Ağacın içindeki tüm sincapları bulan ve isimlerini döndüren bir fonksiyon yazmak gerekiyor. Beklenen sonuç: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].
Anahtar ile veri saklamak için Map mi yoksa normal bir nesne mi kullanmak daha iyidir? Map'in avantajları nelerdir?
Sleep, zamanlayıcılar, Promise ve görev kuyrukları ile örnekte konsola çıktı sırasını ve ölçülen zaman değerlerini belirleyin; gerçek gecikmenin neden belirlenenden daha büyük olabileceğini açıklayın.
/** * runOnce adlı sarmalayıcı fonksiyonu uygulayın, bu fonksiyon * bir fonksiyon alır ve yeni bir fonksiyon döndürür. Yeni fonksiyon * yalnızca bir kez çağrılabilir, sonraki tüm çağrılar * undefined döner. * * Sarılan fonksiyon argümanlar alabilir * ve sonuç döndürebilir. */ function runOnce(fn) { // kodunuz } const logHello = (name) => { console.log(`merhaba, ${name}!`) }; const logHelloOnce = runOnce(logHello); console.clear(); logHelloOnce('Oleg'); // 'merhaba, Oleg!' logHelloOnce('Olga'); // undefined
callLimit(fn, limit, callback) dekoratörünü uygulayın; bu, fonksiyon çağrı sayısını sınırlar. Alır: dekorasyon yapılacak fonksiyon, maksimum çağrı sayısı, çağrı sonrasında çağrılan callback (isteğe bağlı). Döndürülen fonksiyonun, sayacı başlangıç durumuna sıfırlamak için reset adlı bir yöntemi olmalıdır.
/** * Belirtilen milisaniye kadar "uyuyan" ve sonra başarıyla tamamlanan * bir asenkron fonksiyon yazmak gerekiyor */ function sleep(duration) { } // Örnek const startTime = Date.now(); console.log("Uykuya dalınıyor..."); sleep(2000).then(() => { console.log("2 saniye sonra uyandı!"); console.log("Geçen zaman: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("1 saniye sonra uyandı!"); console.log("Geçen zaman: ", Date.now() - startTime); });
Şirketteki işinizde neyi seviyorsunuz ve neyi sevmiyorsunuz?
// Array metodlarını genişleten groupBy metodunu uygulamak gerekiyor. // Bu metod, array'in gruplandırılmış versiyonunu döndürmelidir - bir nesne, // her anahtar, fn(arr[i]) fonksiyonunun sonucu olmalı, // ve her değer, bu anahtarla ilgili tüm öğeleri içeren bir dizi olmalı. // Burada kod // Örnek 1 const array1 = [ { id: 1 }, { id: 1 }, { id: 2 } ]; const fn = (item) => item.id; console.log(array1.groupBy(fn)); // { // 1: [{ id: 1 }, { id : 1 }], // 2: [{ id: 2 }] // } // Örnek 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String)); // { // "1": [1], // "2": [2], // "3": [3] // } // Örnek 3 const array3 = [3.3, 0.5, 1.4]; console.log(array3.groupBy(Math.round)); // { // 3: [3.3], // 1: [0.5, 1.4] // }