Pro JavaScript programcısı mülakat soruları (cevaplarla birlikte) [kapalı]


131

Başvuru sahibinin gerçekten profesyonel bir JavaScript (tarayıcı tarafı) geliştiricisi olup olmadığını belirlemek için iyi sorular nelerdir?

Bir kişinin geçici bir JavaScript programcısı olup olmadığını, ancak gerçekten profesyonel JavaScript geliştirme, nesne yönelimli, yeniden kullanılabilir ve bakımı yapıp yapmadığını ayırt edebilecek sorular.

Lütfen cevaplar verin , böylece orta ve geçici JavaScript programcıları daha deneyimli biriyle röportaj yapabilir; bu ileri düzey soruların epeyce yanıtını bulmanız benden kaçacaktır. Lütfen açık sorulardan kaçının .

Daha iyi okuma deneyimi ve daha kolay mülakat hazırlığı için lütfen SO cevabı başına bir mülakat sorusu / cevabı bulundurun .


21
Asla orta düzey bir JS geliştirici ile daha ileri düzeyde olması gereken biriyle röportaj yapmayın! Bu sadece çılgınlık. Mülakatı yetkili biri yapsın.
James

22
@JP - eğer kıdemli geliştiriciniz istifa ederse, o zaman sadece batırdınız mı?
tvanfosson

15
@JP Kendimden daha iyi birini işe almaya çalışıyorum. Bu küçük bir başlangıç, bu yüzden dışarıdan yardım kullanmazsam daha iyi bir seçeneğim yok ... ama sonra onunla röportaj yapmam gerekecek;)
Janusz Skonieczny

13
@JP: En az sizin kadar iyi insanları işe alıyorsanız, bir gün aptal aptallarla çevrili olacaksınız. Her zaman senden daha iyi birini işe almaya çalış.
Gumbo

1
@ Nick: Sorun bu soruyu kapsamında çok geniş ve hiçbir doğru cevap (bkz olmasıdır faq konu hakkında yaptığı yorumları). Bir blog yazısı için çok uygun, ancak bu Soru-Cevap formatı için pek uygun değil. Eski günlerde Yazılım Mühendisliği'ne geçmiş olabilirdik , ancak Programcı modlarından kaynaklanan sayısız bedensel zarar tehdidinden sonra, yöntemlerimizi değiştirmek zorunda kaldık.
Michael Myers

Yanıtlar:


118

JavaScript çok küçük bir dil olduğu için, yine de inanılmaz karmaşıklığa sahip olduğundan, nispeten basit sorular sorabilmeli ve cevaplarına göre gerçekten bu kadar iyi olup olmadıklarını öğrenebilmelisiniz. Örneğin, görüşmenin geri kalanını ölçmek için standart ilk sorum şudur:

JavaScript'te var x = 1ve arasındaki fark x = 1nedir? Kendinizi rahat hissettiğiniz kadar çok veya az ayrıntıyla yanıt verin.

Acemi JS programcılarının yereller ve küreseller hakkında temel bir cevabı olabilir . Orta düzey JS çalışanları kesinlikle bu cevaba sahip olmalı ve muhtemelen işlev düzeyinde kapsamdan bahsetmelidir. Kendisine "gelişmiş" JS programcısı diyen herkes, yereller, dolaylı küreseller, windownesne, işlev kapsamı, bildirim kaldırma ve kapsam zincirleri hakkında konuşmaya hazır olmalıdır . Ayrıca, [[DontDelete]]öncelik yükseltme (parametreler vs varvs function) ve hakkında duymak isterim undefined.

Bir başka iyi soru da, sum()herhangi bir sayıda argümanı kabul eden ve toplamlarını döndüren bir işlev yazmalarını istemektir . Ardından, bir dizideki tüm değerleri toplamak için bu işlevi (değişiklik yapmadan) kullanmalarını isteyin. Şöyle görünen bir işlev yazmaları gerekir:

function sum() {
  var i, l, result = 0;
  for (i = 0, l = arguments.length; i < l; i++) {
    result += arguments[i];
  }
  return result;
}
sum(1,2,3); // 6

Ve bunu sizin dizinizde applyşu şekilde çağırmaları gerekir (bağlamı ne olursa olsun, genellikle nullbu durumda kullanırım):

var data = [1,2,3];
sum.apply(null, data); // 6

Bu cevaplara sahiplerse, muhtemelen JavaScript'lerini biliyorlardır. Daha sonra, iyi bir programcı olup olmadıklarını öğrenmek için testler, iş akışları, sürüm kontrolü vb. Gibi JS'ye özgü olmayan şeyleri sormaya devam etmelisiniz .


4
İyi soru. Küçük nitpick: "Dönüş i" yerine "dönüş sonucu" demek istediğinize inanıyorum. Uzman ipucu: Göndermeden önce kodu test etmek için küçük bir test ortamı kurun ;-)
MisterMister

4
vay canına, bu aptalca bir hata. Kodumun çoğunu göndermeden önce jsFiddle'da test ettim, ancak bunu test etmedim. Teşekkürler :)
bcherry

5
Toplam işlevi, sayı olmayan türlere hata vermeden dirençli olmalıdır. Ek olarak, sayıları ekstra kredi için dizeler olarak kullanabilmelidir.
Abadaba

2
İyi bir programcı olup olmadıklarını keşfetme konusunda harika bir şekilde bahsedilmesi ve dikkatin dağılması için +1.
Demonslay335

3
Bu satır: for (i = 0, l = arguments.length; i <l; i ++) kötüdür çünkü arguments.length her yinelemede değerlendirilecektir. For döngüsünden önce l = arguments.length atarsanız daha iyidir. Sağ?
thomallen

94

Temel JS programlama

  • Scope of variable
  • Nedir Associative Array? Nasıl Kullanıyoruz?

OOPS JS

  • Difference between Classic Inheritance and Prototypical Inheritance
  • Nedir difference between private variable, public variable and static variable? Bunu JS'de nasıl başarırız?
  • add/remove properties to objectÇalışma zamanında nasıl yapılır ?
  • Nasıl başarılır inheritance?
  • Nasıl yapılır extend built-in objects?
  • Neden extending array is bad idea?

DOM ve JS

  • Difference between browser detection and feature detection
  • DOM Event Propagation
  • Event Delegation
  • Event bubbling V/s Event Capturing

Çeşitli

  • Graceful Degradation V/s Progressive Enhancement

17
bu JS Gurus'u işe almak içindir.
Andreas

22
Bir JS geliştiricisinin şöyle bir şey söylemesine hazır olun: JavaScript'in ilişkilendirilebilir dizileri yoktur. Ancak JavaScript, ilişkilendirilebilir diziler gibi kullanılabilen nesne değişmezlerine sahiptir. Ayrıca, nesnelerin özelliklerine nokta notasyonu veya köşeli parantezler ve dizeler kullanılarak erişilebilir.
Christopher Parker

8
Bunlar, kendilerini "JavaScript Geliştiricisi" olarak adlandıran biri için temeldir. Bence cevabın derinliği, onları bir Guru olarak nasıl değerlendireceğiniz ya da değil.
Ryan Ore

8
"Prototypal Miras" demek istiyorsun. Yaygın hata.
wizzard

4
@wizzard 'tipik hatayı' kastettiniz: p
Nick


17

(Tarayıcı tarafı JavaScript'i kastettiğinizi varsayıyorum)

Sonsuz JavaScript bilgisine rağmen jQuery, Mootools, Prototype vb. Gibi mevcut çerçeveleri kullanmanın hala iyi bir fikir olduğunu sorun.

Cevap: İyi kodlayıcılar, harika kodlayıcılar yeniden kullanır. DOM yeteneklerini tarayıcıya özel uygulamalardan soyutlamak için bu kitaplıklara binlerce çalışma saati harcandı. Düzeltmeleri yeniden icat etmek için tüm farklı tarayıcı DOM baş ağrılarını kendi başınıza gözden geçirmeniz için hiçbir neden yok.


5
@Tim Down: kesinlikle, ancak saygın bir paket bulursanız, paketin neredeyse tüm parçaları yetenekli kişiler tarafından gözden geçirilmiş olacaktır. Açık kaynak paketinin bir kullanıcısı olarak, hatalar bulduğunuzda, uzmanlığınızı ekleyerek düzeltmeler gönderebilirsiniz.
PanCrit

Doğru, tekerleği tanıyın - ancak farklı arazilerde her zaman aynı lastikleri kullanmayın. Örneğin. İhtiyacınız olan tüm (projeniz için) Ajax taşıma vb halde neden tüm jQuery lib kullanın - microjs.com
Ali

1
Bu sorunun cevabı bir sorudur - kodumuzu düzenlemek için neden basit bir not defteri değil de bir IDE kullanıyoruz? :)
Navin Israni

11

Kullanıcı JavaScript'i kapattığında veya JavaScript mevcut olmadığında sayfalarının kullanılabilir olmaya devam etmesini nasıl sağladıklarını sorun.

Tek Bir Doğru Cevap yoktur, ancak Aşamalı Geliştirme için bazı stratejiler hakkında konuşan bir cevap bekliyorsunuz .

Aşamalı İyileştirme aşağıdaki temel ilkelerden oluşur:

  • temel içerik tüm tarayıcılar tarafından erişilebilir olmalıdır
  • temel işlevsellik tüm tarayıcılar tarafından erişilebilir olmalıdır
  • seyrek, anlamsal biçimlendirme tüm içeriği içerir
  • gelişmiş düzen, harici olarak bağlantılı CSS tarafından sağlanır
  • gelişmiş davranış [[Unobtrusive JavaScript | unobtrusive]], harici olarak bağlantılı JavaScript tarafından sağlanır
  • son kullanıcı tarayıcı tercihlerine saygı duyulur

1
Mimar düzeyinde bir JS adamı işe almak için en iyi soru :)
Navin Israni

Her şeyden önce, beni JS kapalı olan bir kişinin karanlık web'e değil gerçek web'e yatırım yapmaya değer olduğuna ikna edin. Bu kullanıcılar muhtemelen bir tarayıcı kullanma konusunda aşırı paranoyak ya da bilgisizdirler ve yanlışlıkla JS'yi kapatırlar, her iki durumda da dönüştürme şansları sıfıra düşer.
vsync


6

"Hangi birim test çerçevesini kullanıyorsunuz? Ve neden?" Diye sorun.

Gerçekten bir test çerçevesi kullanmanın gerçekten gerekli olup olmadığına karar verebilirsiniz, ancak konuşma, kişinin ne kadar uzman olduğu hakkında size çok şey söyleyebilir.


1
Referans olarak, QUnit harika: docs.jquery.com/QUnit
Goyuix

0

orta seviye programcılar araçları konusunda teknik uzmanlığa sahip olmalıdır.

Yukarıdaki teknik telefon ekranına benzer soruları geçerse, ajax url kısaltıcı gibi aptalca bir şey çizmesini sağlayın. sonra portföyünde onu ızgara. inanılmaz bir portföy yok = bu alanda ara geliştirici ve parlak yeni projenizden sorumlu olmasını istediğiniz kişi değil.


4
Portföyler, en iyi ihtimalle zayıf bir metriktir - günümüz dünyasında, JS, projelerin muhtemelen görebileceğiniz herhangi bir portföyü geçtiği ve halka açık depoların bir şey olmadığı, kurumsal dünyada mükemmel kabul gören bir araçtır.
Ilya Ayzenshtok

1
@IlyaAyzenshtok BU benim ikilemimin bir parçası. Çalışmalarımın% 99'u tescilliyken / bir ödeme duvarının arkasında / dahili ... varken bir portföy
Spartacus

1
@Spartacus - ekran görüntülerini alabilir ve görüşmeyi yapan kişiye kuralınızı açıklayabilir ve yol boyunca engeller. Açık kaynaklı projelerle ilgili olarak , projelerde görülen kişinin kodlama düzeyine göre soruları ayarlamak için görüşmeden önce bir kişiyi değerlendirmenin harika bir yoludur .
vsync
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.