Pertanyaan wawancara programmer JavaScript pro (dengan jawaban) [ditutup]


131

Apa pertanyaan yang bagus untuk menentukan apakah pemohon benar-benar pengembang JavaScript (sisi browser) yang pro?

Pertanyaan yang dapat membedakan jika seseorang bukan programmer JavaScript ad-hoc, tetapi benar-benar melakukan pengembangan JavaScript profesional, berorientasi objek, dapat digunakan kembali, dan dapat dipelihara.

Tolong berikan jawaban , sehingga pemrogram JavaScript tingkat menengah dan khusus dapat mewawancarai seseorang yang lebih berpengalaman, memberikan jawaban atas beberapa pertanyaan tingkat lanjut yang akan menghindari saya. Harap hindari pertanyaan terbuka .

Harap simpan satu pertanyaan / jawaban wawancara per jawaban SO untuk pengalaman membaca yang lebih baik dan persiapan wawancara yang lebih mudah.


21
Tidak pernah ada orang yang mewawancarai pengembang JS menengah yang seharusnya lebih maju! Itu gila. Minta seseorang yang berkualifikasi untuk melakukan wawancara.
James

22
@ JP - jadi jika pengembang senior Anda berhenti, maka Anda baru saja kacau?
tvanfosson

15
@ JP Saya mencoba mempekerjakan seseorang lebih baik dari saya. Ini adalah startup kecil, jadi saya tidak punya pilihan yang lebih baik, kecuali saya menggunakan bantuan dari luar ... tapi kemudian saya harus mewawancarainya;)
Janusz Skonieczny

13
@ JP: Jika Anda hanya mempekerjakan orang-orang yang paling baik seperti Anda, suatu hari Anda akan dikelilingi oleh orang-orang bodoh. Selalu berusaha untuk merekrut seseorang yang lebih baik dari Anda.
Gumbo

1
@Nick: Masalahnya adalah bahwa pertanyaan ini terlalu luas cakupannya dan tidak memiliki jawaban yang benar (lihat komentar faq tentang masalah ini). Ini sangat cocok untuk posting blog, tetapi tidak begitu cocok untuk format tanya jawab ini. Di masa lalu kita mungkin telah bermigrasi ke Rekayasa Perangkat Lunak , tetapi setelah banyak ancaman kerusakan fisik dari Programer mod kita harus mengubah cara kita.
Michael Myers

Jawaban:


118

Karena JavaScript adalah bahasa yang sangat kecil, namun dengan kompleksitas yang luar biasa, Anda harus dapat mengajukan pertanyaan yang relatif mendasar dan mencari tahu apakah mereka benar-benar bagus berdasarkan jawaban mereka. Misalnya, pertanyaan pertama standar saya untuk mengukur sisa wawancara adalah:

Dalam JavaScript, apa perbedaan antara var x = 1dan x = 1? Jawab sedetail atau sesedikit mungkin Anda merasa nyaman.

Pemrogram JS pemula mungkin memiliki jawaban dasar tentang penduduk lokal vs global. Orang-orang JS menengah pasti memiliki jawaban itu, dan mungkin harus menyebutkan ruang lingkup tingkat fungsi. Siapa pun yang menyebut diri mereka seorang programmer JS "maju" harus siap untuk berbicara tentang penduduk lokal, global tersirat, windowobjek, fungsi-lingkup, pengangkat deklarasi, dan rantai cakupan. Selain itu, saya ingin mendengar tentang [[DontDelete]], mengangkat prioritas (parameter vs varvs function), dan undefined.

Pertanyaan bagus lainnya adalah meminta mereka untuk menulis sum()fungsi yang menerima sejumlah argumen, dan mengembalikan jumlah mereka. Kemudian, minta mereka untuk menggunakan fungsi itu (tanpa modifikasi) untuk menjumlahkan semua nilai dalam array. Mereka harus menulis fungsi yang terlihat seperti ini:

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

Dan mereka harus memanggilnya pada array Anda seperti ini (konteks untuk apply bisa apa saja, biasanya saya gunakan nulldalam kasus itu):

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

Jika mereka sudah mendapat jawaban itu, mereka mungkin tahu JavaScript mereka. Anda kemudian harus melanjutkan untuk bertanya kepada mereka tentang hal-hal khusus non-JS seperti pengujian, alur kerja, kontrol versi, dll. Untuk mengetahui apakah mereka adalah programmer yang baik .


4
Pertanyaan bagus. Nitpick kecil: Saya yakin maksud Anda "mengembalikan hasil" bukan "mengembalikan saya". Pro-tip: Siapkan lingkungan uji kecil yang bagus untuk menguji kode sebelum memposting ;-)
MisterMister

4
wow, itu kesalahan konyol. Saya menguji sebagian besar kode saya di jsFiddle sebelum memposting, tetapi tidak menguji yang ini. Terima kasih :)
bcherry

5
Fungsi penjumlahan harus tangguh terhadap tipe bukan angka tanpa menimbulkan kesalahan. Selain itu harus dapat menangani angka sebagai string untuk kredit tambahan.
Abadaba

2
+1 untuk penyebutan dan perbedaan yang bagus tentang mengetahui apakah mereka adalah programmer yang baik.
Demonslay335

3
Baris ini: for (i = 0, l = arguments.length; i <l; i ++) buruk karena arguments.length akan dievaluasi setiap iterasi. Jika Anda menetapkan l = arguments.length sebelum for for, lebih baik. Baik?
thomallen

94

Pemrograman JS dasar

  • Scope of variable
  • Apa Associative Array? bagaimana kami menggunakannya?

OOPS JS

  • Difference between Classic Inheritance and Prototypical Inheritance
  • Apa difference between private variable, public variable and static variable? Bagaimana kita mencapai ini di JS?
  • Bagaimana cara add/remove properties to objectmenjalankannya?
  • Bagaimana cara mencapainya inheritance?
  • Bagaimana caranya extend built-in objects?
  • Mengapa extending array is bad idea?

DOM dan JS

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

Lain-lain

  • Graceful Degradation V/s Progressive Enhancement

17
ini untuk mempekerjakan JS Gurus.
Andreas

22
Bersiaplah untuk pengembang JS untuk mengatakan sesuatu seperti ini: JavaScript tidak memiliki array asosiatif. JavaScript memang memiliki objek literal, yang dapat digunakan seperti array asosiatif. Juga, properti objek dapat diakses menggunakan notasi titik atau tanda kurung dan string.
Christopher Parker

8
Ini adalah data dasar untuk seseorang yang menyebut diri mereka 'Pengembang JavaScript'. Saya pikir kedalaman jawabannya adalah bagaimana Anda mengukur mereka sebagai seorang Guru atau tidak.
Ryan Ore

8
Maksud Anda "Warisan prototipe." Kesalahan Umum.
Wizzard

4
@wizzard maksudmu 'kesalahan umum': p
Nick


17

(Saya berasumsi maksud Anda JavaScript sisi-browser)

Tanyakan mengapa, terlepas dari pengetahuannya yang terbatas tentang JavaScript, masih merupakan ide bagus untuk menggunakan kerangka kerja yang ada seperti jQuery, Mootools, Prototype, dll.

Jawaban: Kode coders yang bagus, coders yang bagus digunakan kembali. Ribuan jam kerja telah dicurahkan ke perpustakaan ini untuk memisahkan kemampuan DOM dari implementasi khusus browser. Tidak ada alasan untuk menelusuri semua peramban yang berbeda DOM dengan susah payah hanya untuk menemukan kembali perbaikan.


5
@Tim Down: tentu saja, tetapi jika Anda menemukan paket yang memiliki reputasi baik, maka hampir semua bagian dari paket tersebut akan ditinjau oleh orang-orang yang cakap. Dan sebagai pengguna paket sumber terbuka, Anda dapat mengirimkan koreksi ketika Anda menemukan kesalahan, menambahkan keahlian Anda juga.
PanCrit

Benar, ketahui rodanya - tetapi jangan selalu menggunakan ban yang sama untuk medan yang berbeda. Misalnya. Mengapa menggunakan seluruh jQuery lib ketika semua yang Anda butuhkan adalah transportasi Ajax dll (untuk proyek Anda) - microjs.com
Ali

1
Jawaban atas pertanyaan ini adalah pertanyaan itu sendiri - mengapa kita menggunakan IDE dan bukan notepad sederhana untuk mengedit kode kita? :)
Navin Israni

11

Tanyakan kepada mereka bagaimana mereka memastikan halaman mereka tetap dapat digunakan ketika pengguna JavaScript dimatikan atau JavaScript tidak tersedia.

Tidak ada Satu Jawaban Benar, tetapi Anda memancing jawaban yang berbicara tentang beberapa strategi untuk Peningkatan Progresif .

Peningkatan Progresif terdiri dari prinsip-prinsip inti berikut:

  • konten dasar harus dapat diakses oleh semua browser
  • fungsionalitas dasar harus dapat diakses oleh semua browser
  • markup semantic dan jarang berisi semua konten
  • tata letak yang disempurnakan disediakan oleh CSS yang terhubung secara eksternal
  • perilaku yang ditingkatkan disediakan oleh [[JavaScript tidak mencolok | tidak mencolok]], JavaScript yang ditautkan secara eksternal
  • preferensi browser pengguna akhir dihormati

1
PERTANYAAN terbaik untuk menyewa orang JS tingkat arsitek :)
Navin Israni

Pertama-tama, yakinkan saya bahwa seseorang dengan JS yang tidak aktif layak untuk berinvestasi di web nyata dan bukan web gelap. para pengguna itu mungkin terlalu paranoid atau tidak mengerti tentang penggunaan browser dan mematikan JS karena kesalahan, baik cara mereka, peluang konversi mereka sangat kecil.
vsync


6

Tanyakan "Kerangka pengujian unit apa yang Anda gunakan? Dan mengapa?"

Anda dapat memutuskan apakah benar-benar menggunakan kerangka pengujian benar-benar diperlukan, tetapi percakapan itu mungkin memberi tahu Anda banyak tentang seberapa ahli orang itu.


1
Sebagai referensi, QUnit luar biasa: docs.jquery.com/QUnit
Goyuix

0

programmer menengah harus memiliki penguasaan teknis alat mereka.

jika dia melewati pertanyaan teknis layar ponsel di atas, buat dia membuat sketsa sesuatu yang bodoh di tempat, seperti pemendek ajax url. lalu bakar dia di portofolionya. tidak ada portofolio yang luar biasa = pengembang perantara dalam domain ini dan bukan orang yang Anda inginkan yang bertanggung jawab atas proyek baru Anda yang mengkilap.


4
Portofolio adalah metrik yang buruk di terbaik - di dunia saat ini, JS adalah alat yang diterima dengan baik di dunia perusahaan, di mana proyek mungkin mengalahkan portofolio yang mungkin Anda lihat, dan di mana repo publik tidak ada artinya.
Ilya Ayzenshtok

1
@IlyaAyzenshtok INI adalah bagian dari dilema saya. Sulit bagi saya untuk memamerkan portofolio ketika 99% dari pekerjaan saya adalah hak milik / di belakang tembok pembayaran / internal ...
Spartacus

1
@Partpart - Anda dapat mengambil tangkapan layar dan menjelaskan pewawancara aturan Anda di dalamnya dan rintangan di sepanjang jalan. mengenai proyek-proyek sumber terbuka, mereka adalah cara yang bagus untuk menilai seseorang sebelum wawancara untuk menyesuaikan pertanyaan relatif terhadap tingkat pengkodean orang yang terlihat dalam proyek.
vsync
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.