Facebook mülakat sorularının tam analizi

Yazar | Joey Colon

Çevirmen | Crescent Moon, Baş Editör | Tu Min

Baş resmi | Visual China'dan CSDN indirmesi

Üretildi | CSDN (ID: CSDNnews)

Aşağıdaki çeviridir:

Halk Facebook için karışık övgü ve eleştirilere rağmen, açık kaynak topluluğuna yaptıkları katkılar birçok geliştiriciye gerçekten fayda sağladı. Bu makalede, bir Facebook front-end mühendis pozisyonu için mülakat yaparken karşılaşabileceğiniz mülakat sorularını tanıtmama izin verin.

Sorun bildirimi

Reimplement Array.flat: Spesifik işlev, herhangi bir sayıda iç içe eleman içerebilen bir girdi dizisini kabul etmek ve girdi dizisini düzleştiren yeni bir dizi döndürmektir. Bu soruda, "düzleştirilmiş" dizi, temel türdeki tüm öğeleri içeren bir diziyi ifade eder.

Misal

giriş:

Çıktı:

Sorunu anlayın

Problem tanımı çok açık görünüyor, yani girdi dizisinin değerleriyle yeni bir dizi yaratmak, ancak yeni dizi iç içe diziler içermiyor.

Bu aşamada, öncelikle görüşmeci ile sorun hakkındaki varsayımlarımı netleştireceğim. Girdinin bir dizi olmasının garantili olup olmadığını bilmem gerekiyor (geçersiz girdi veya boş girdi yok). Görüşmeci, bu varsayımı yapamayacağımızı söyledi.

Başka bir soru şudur: Değerin bir tam sayı olması gerektiğini varsayabilir miyiz? Bu sorunun uygulamanın ayrıntılarını değiştirmesi olası olmasa da, herhangi bir varsayımda bulunmadan önce daima açıklığa kavuşturun. Dizide yuvalanmış tek temel türlerin tamsayılar olduğunu varsayıyoruz.

Bazı detayları açıkladıktan sonra, kendi girdi örneklerimi ve buna karşılık gelen çıktıları beyaz tahtaya verdim.

Bir örnek çizerken, yazdıklarınıza ve sorunu manuel olarak nasıl çözdüğünüze son derece dikkat etmeniz gerekir. Basit örneklerle başlamayı, ardından sınır koşullarını düşünmeyi ve yavaş yavaş karmaşık problemlere dalmayı seviyorum.

Eşleştirme sorunu

Yalnızca ilk örneğe bakarsak, açıkça görülüyor ki tüm diziyi taramamız, her öğenin bir tamsayı değeri olup olmadığını kontrol etmemiz ve sonra değerini çıktı dizisine yazmamız gerekir. Tutmayan tek koşul, o anda kontrol edilen elemanın bir dizi olmasıdır. Geçerli öğe bir dizi ise, sonraki dizi olmayan öğe bulunmalı ve çıktı dizisine yazılmalıdır. Bu problem özyineleme ile çözülmeye çok uygun görünüyor.

Ancak yineleme gerektiren herhangi bir sorunun gizli bir sınırlamayla karşılaşacağı unutulmamalıdır: çağrı yığınının derinlik sınırı. Bunu görüşmeci için netleştirdiğinizden emin olun. Görüşmeci bana bu konuda endişelenmeme gerek olmadığını söyledi, bu iyi, hadi devam edelim.

Çözümü planlayın

Çözümler hakkında düşünmek beceri gerektirir. Problemleri özyinelemeli bir şekilde düşünürken kendimize bir soru sormalıyız: Şu anda girdi çağrı yığınının durumu göz önüne alındığında, hangi görevi yerine getirmeliyiz?

Özyineleme ile başa çıkmak için "sürücü fonksiyonu" tekniğini kullanmanın çok kolay olduğunu düşünüyorum. Bu tekniği kullanmak için, bir "kabuk" fonksiyonu oluşturmamız ve özyinelemeli fonksiyonun kullanacağı başlangıç değerini ayarlamamız gerekir. Örneğin, aşağıdaki örnek:

İlk olarak, yardımcı fonksiyonda tamamlanacak işi yazın, fonksiyon çalıştırıldıktan sonra newArr gerekli değere sahiptir.

Şimdi bu yardımcı işlevi düşünün. Daha önce de belirtildiği gibi, dizinin tamamını taramamız gerekir.Eğer mevcut öğe bir dizi değilse, onu doğrudan yeni diziye koyun; aksi takdirde, yeni bir dizi bulunana kadar mevcut öğenin kalan öğelerini kontrol edin.

başarmak

İşin çoğu daha önce yapıldı, bu nedenle yalnızca koda çevrilmesi gerekiyor:

const flatten = (dizi) = > { eğer (dizi === || arr.length === 0) dönüş; const newArr =; flattenHelper (newArr, arr); return newArr; }; const flattenHelper = (newArr, currentArr) = > { for (let i = 0; i < currentArr.length; i ++) { if (Array.isArray (currentArr )) { flattenHelper (newArr, currentArr ); } else if (currentArr ! ==) { newArr.push (currentArr ); } } }; const arr =; console.log (flatten (arr)); // 1,2,3,4,5

Uygulamayı kontrol edin

Kodu yazdıktan sonra 1-2 örneği doğrulamak ve tüm programı çalıştırmak biraz zaman alır. Mülakat süreciniz programların çalıştırılmasını gerektirse bile, tüm kodu görsel olarak kontrol etmeniz gerekir.

Değerlendirme yapıldı

Değerlendirme adımında, algoritmanın karmaşıklığını ve geliştirilebilecek alanları vermeniz gerekir. Çalışma süresi ile ilgili olarak, N'nin dizi olmayan elemanların sayısı olduğu O (N) 'ye ulaştık. Uzay karmaşıklığı da O (N) 'dir, çünkü bir dizi N elemanı oluşturduk. Unutulmaması gereken bir diğer nokta da uzayın doğrusal olmasıdır. Girdi dizisindeki her elemana en az bir kez erişmemiz gerektiğinden algoritma geliştirilemez.

Ek olarak, bu problemde azaltma ve birleştirmeyi de kullanabiliriz. Sözde kod yazmak için bu yöntemleri kullanmaya alışkınsanız, bu daha iyi olur, ancak kavramsal olarak düz kod kullanmanın daha kolay olduğunu düşünüyorum.

Deneyim

Kod problemlerini çözmenin tek bir doğru cevabı yoktur. Algoritmik problemlerin güzelliği budur. Sorunu çözme fikri ve yolu görüşmecinin size farklı bakmasını sağlayacaktır.

Son olarak, birçok soru için, girdinin isteğe bağlı olarak büyük olabileceğini, çağrı yığınının üst sınırına ulaşabilecek kadar büyük olabileceğini varsaymamız gerektiğine dikkat edilmelidir, bu nedenle görüşmeyi yapan kişiye çağrı yığınının üst sınırı hakkında önceden soru sorulmalıdır. Görüşmeyi yapan kişi çağrı yığınının üst sınırını dikkate almamız gerektiğini belirtirse, yinelemeli işlevi yinelemeli bir şekilde uyarlamalı ve çağrı yığınını kendimiz korumalıyız. Bu problemle başka bir büyük şirketle görüşürken karşılaştım. Yineleme ve yinelemeli kod yazmayı öğrenmenin yanı sıra, yinelemeli işlevleri ve yinelemeli işlevleri birbirine nasıl dönüştüreceğinizi de öğrenmelisiniz.

Orijinal: https://medium.com/better-programming/solving-facebooks-2020-front-end-engineering-interview-f34dd6b2a977

Bu makale bir CSDN çevirisidir, lütfen yeniden basımın kaynağını belirtin.

Zhu Guangquan ve Li Jiaqi'nin canlı yayını düştü, 120 milyon kişi çevrimiçiydi, vb.

"Anti-salgın" yeni taktikler: DSÖ, IBM, Oracle ve Microsoft ile birlikte bir açık veri blok zinciri projesi oluşturdu!

Hızlı bir şekilde bir diyalog robotu oluşturmak için bu numarayı kullanın!

Neden izleme ve kayıt yok? Eski programcılar

"Anti-salgın" yeni taktikler: DSÖ, IBM, Oracle ve Microsoft ile birlikte bir açık veri blok zinciri projesi oluşturdu!

4D kuru mallar: konteynerler üzerinde nasıl sürekli dağıtım oluşturacağınızı adım adım öğretin!

Bunun çağdaş ineklerin [teknik kanatları] olduğu söyleniyor ...

Bugünün refahı: yorum alanı seçildi, çevrimiçi 299 yuan değerinde "2020 AI Geliştiricileri Konferansı" nı alabilirsiniz Bir canlı bilet . Parmaklarınızı hareket ettirin ve söylemek istediklerinizi yazın.

IntelliJ IDEA 2020.1, 15 ana özellik ve resmi Çin desteği ile resmi olarak yayınlandı! | Güç Projesi
önceki
onaylamak! Python'u bu şekilde öğrenmek, 10 cadde akranını ortadan kaldırabilir
Sonraki
Hızlı bir şekilde bir diyalog robotu oluşturmak için bu numarayı kullanın
Yeni "anti-salgın" taktikler: DSÖ, IBM, Oracle ve Microsoft ile birlikte bir açık veri blok zinciri projesi oluşturur
Livermore, spekülasyon kralı: Borsada her zaman bir servet kazanabilecek tek bir tür kişi vardır. Bu gerçekten basit, tekrarlanan para kazanımıdır.
Buffy'nin özellikleri Çin borsasını yıkıyor: Bu aşamada 100.000 PetroChina satın alır ve yükseliş ve düşüşü görmezden gelirseniz, bundan 10 yıl sonra nasıl görünecek? Bir yatırımcı olarak ne düşünüyo
Pekin Üniversitesi Finans Profesörü bir kez daha konuştu: Hisse senetlerinde sıkışıp kalmaktan mı korkuyorsunuz? "500'e 5 sent düşüp 500'e 5 sent yükseltir" diyebilirsiniz, borsa defterinde hiç bahse
Çin borsası: Şangay borsa endeksi 2.800 puanın altına düştü. "Bekleyip görelim" mi yoksa "tam avantaj elde etme fırsatını mı değerlendirelim"? Hissedarların baharı burada
Çin borsası: Şangay borsa endeksi 2700'den 2900 puana dalgalanıyor, "U şeklindeki dipten" çıkması mı bekleniyor?
Buffett'in PetroChina satın alma deneyimi size şunu söylüyor: PetroChina 48 yuan'dan yaklaşık 4,6 yuan'a düştükten sonra "iniş ve çıkışları görmezden gelmeye ve düştükçe daha fazla satın almaya" deva
Çinin "para toplama çağı" yaklaşıyor: Borç içinde olduğunuzda ve akrabalarınız sizi ihmal ettiğinde, "Buffett tarzı" bileşik faiz düşüncesini denemenizi öneririm
Çin borsası: Pazar için sırada ne var? 10 günlük hareketli ortalamanın eğilimini anlamak isteyebilirsiniz
Çin'in bir sonraki "para toplama çağı" geliyor: potu açamayacak kadar fakirseniz, "Yahudi" para kazanma zihniyetini deneyebilirsiniz ve belki ayağa kalkabilirsiniz.
Birisi nihayet riski aldı ve şöyle dedi: Yeni pırasalar neden 2800'de sıralanırken eski yatırımcılar boş bekliyor? Son gülen kim olabilir?
To Top