คำถามสัมภาษณ์โปรแกรมเมอร์ Pro JavaScript (พร้อมคำตอบ) [ปิด]


131

คำถามที่ดีในการพิจารณาว่าผู้สมัครเป็นนักพัฒนา JavaScript มืออาชีพ (ฝั่งเบราว์เซอร์) หรือไม่?

คำถามที่สามารถแยกความแตกต่างได้ว่าใครบางคนไม่ใช่โปรแกรมเมอร์ JavaScript แบบเฉพาะกิจ แต่กำลังดำเนินการพัฒนา JavaScript แบบมืออาชีพเชิงวัตถุใช้ซ้ำได้และบำรุงรักษาได้

โปรดให้คำตอบเพื่อให้โปรแกรมเมอร์ JavaScript ระดับกลางและเฉพาะกิจสามารถสัมภาษณ์ผู้ที่มีประสบการณ์สูงกว่าได้โดยการหาคำตอบสำหรับคำถามขั้นสูงเหล่านี้จะทำให้ฉันเข้าใจผิด โปรดหลีกเลี่ยงคำถามปลายเปิด

โปรดเก็บคำถาม / คำตอบสำหรับการสัมภาษณ์ไว้หนึ่งคำถามต่อคำตอบ SOเพื่อประสบการณ์การอ่านที่ดีขึ้นและการเตรียมการสัมภาษณ์ที่ง่ายขึ้น


21
ไม่ต้องสัมภาษณ์นักพัฒนา JS ระดับกลางที่ควรจะก้าวหน้ากว่านี้! มันบ้ามาก ให้บุคคลที่มีคุณสมบัติเหมาะสมทำการสัมภาษณ์
เจมส์

22
@JP - ถ้านักพัฒนาอาวุโสของคุณเลิกเล่นคุณก็เมาใช่ไหม
tvanfosson

15
@JP ฉันพยายามจ้างคนที่ดีกว่าตัวเอง มันเป็นการเริ่มต้นเล็ก ๆ ดังนั้นฉันจึงไม่มีทางเลือกที่ดีกว่าเว้นแต่ฉันจะใช้ความช่วยเหลือจากภายนอก ... แต่ฉันจะต้องสัมภาษณ์เขา;)
Janusz Skonieczny

13
@JP: ถ้าคุณแค่จ้างคนที่ดีที่สุดเท่าที่คุณเป็นอยู่วันหนึ่งคุณจะถูกล้อมรอบไปด้วยคนงี่เง่าโง่ ๆ พยายามจ้างคนที่เก่งกว่าคุณเสมอ
Gumbo

1
@ นิค: ปัญหาคือคำถามนี้มีขอบเขตกว้างเกินไปและไม่มีคำตอบที่ถูกต้อง (ดูความคิดเห็นของคำถามที่พบบ่อยในหัวข้อนี้) เหมาะสำหรับบล็อกโพสต์ แต่ไม่ค่อยเหมาะกับรูปแบบถาม & ตอบนี้ ในสมัยก่อนเราอาจย้ายไปที่วิศวกรรมซอฟต์แวร์แต่หลังจากมีการคุกคามหลายครั้งเกี่ยวกับการทำร้ายร่างกายจากม็อดโปรแกรมเมอร์เราต้องเปลี่ยนวิธีการของเรา
Michael Myers

คำตอบ:


118

เนื่องจาก JavaScript เป็นภาษาเล็ก ๆ แต่มีความซับซ้อนอย่างไม่น่าเชื่อคุณจึงควรถามคำถามที่ค่อนข้างพื้นฐานและดูว่าภาษานั้นดีจริงหรือไม่ตามคำตอบของพวกเขา ตัวอย่างเช่นคำถามแรกมาตรฐานของฉันในการประเมินส่วนที่เหลือของการสัมภาษณ์คือ:

ใน JavaScript อะไรคือความแตกต่างระหว่างvar x = 1และx = 1? ตอบโดยละเอียดมากหรือน้อยตามที่คุณสบายใจ

โปรแกรมเมอร์มือใหม่ JS อาจมีคำตอบพื้นฐานเกี่ยวกับคนในพื้นที่กับคนทั่วโลก พวก JS ระดับกลางควรมีคำตอบนั้นอย่างแน่นอนและน่าจะกล่าวถึงขอบเขตระดับฟังก์ชัน ใครก็ตามที่เรียกตัวเองว่าโปรแกรมเมอร์ JS "ขั้นสูง" ควรเตรียมพร้อมที่จะพูดคุยเกี่ยวกับคนในท้องถิ่นโลกโดยนัยwindowวัตถุขอบเขตการทำงานการยกประกาศและโซ่ขอบเขต นอกจากนี้ฉันชอบที่จะได้ยินเกี่ยวกับ[[DontDelete]]ชูความสำคัญ (พารามิเตอร์ VS varVS function) undefinedและ

คำถามที่ดีอีกข้อหนึ่งคือขอให้พวกเขาเขียนsum()ฟังก์ชันที่รับอาร์กิวเมนต์จำนวนเท่าใดก็ได้และส่งกลับผลรวม จากนั้นขอให้พวกเขาใช้ฟังก์ชันนั้น (โดยไม่ต้องแก้ไข) เพื่อรวมค่าทั้งหมดในอาร์เรย์ ควรเขียนฟังก์ชันที่มีลักษณะดังนี้:

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

และควรเรียกใช้ในอาร์เรย์ของคุณเช่นนี้ (บริบทสำหรับapplyอะไรก็ได้ฉันมักจะใช้nullในกรณีนั้น):

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

หากพวกเขามีคำตอบเหล่านั้นพวกเขาอาจจะรู้จัก JavaScript จากนั้นคุณควรถามพวกเขาเกี่ยวกับสิ่งที่ไม่ใช่ JS เช่นการทดสอบเวิร์กโฟลว์การควบคุมเวอร์ชัน ฯลฯ เพื่อดูว่าพวกเขาเป็นโปรแกรมเมอร์ที่ดีหรือไม่


4
คำถามที่ดี. Small nitpick: ฉันเชื่อว่าคุณหมายถึง "return result" แทนที่จะเป็น "return i" เคล็ดลับสำหรับมือโปร: ตั้งค่าสภาพแวดล้อมการทดสอบเล็ก ๆ น้อย ๆ ที่ดีเพื่อทดสอบโค้ดก่อนโพสต์ ;-)
MisterMister

4
ว้าวเป็นความผิดพลาดโง่ ๆ ฉันทดสอบโค้ดส่วนใหญ่ที่ jsFiddle ก่อนโพสต์ แต่ไม่ได้ทดสอบโค้ดนี้ ขอบคุณ :)
bcherry

5
ฟังก์ชัน sum ควรมีความยืดหยุ่นกับประเภทที่ไม่ใช่ตัวเลขโดยไม่มีข้อผิดพลาด นอกจากนี้ควรสามารถจัดการตัวเลขเป็นสตริงสำหรับเครดิตพิเศษ
Abadaba

2
+1 สำหรับการกล่าวถึงและความแตกต่างเกี่ยวกับการค้นหาว่าพวกเขาเป็นโปรแกรมเมอร์ที่ดี
Demonslay335

3
บรรทัดนี้: สำหรับ (i = 0, l = arguments.length; i <l; i ++) ไม่ดีเนื่องจากอาร์กิวเมนต์ความยาวจะได้รับการประเมินทุกการวนซ้ำ ถ้าคุณกำหนด l = arguments.length ก่อน for loop จะดีกว่า ขวา?
thomallen

94

การเขียนโปรแกรม JS พื้นฐาน

  • Scope of variable
  • คืออะไรAssociative Array? เราจะใช้มันอย่างไร?

OOPS JS

  • Difference between Classic Inheritance and Prototypical Inheritance
  • คืออะไรdifference between private variable, public variable and static variable? เราบรรลุสิ่งนี้ใน JS ได้อย่างไร
  • วิธีการadd/remove properties to objectในระยะเวลาหรือไม่
  • จะบรรลุได้inheritanceอย่างไร?
  • วิธีการextend built-in objects?
  • ทำไมextending array is bad idea?

DOM และ JS

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

อื่น ๆ

  • Graceful Degradation V/s Progressive Enhancement

17
นี่คือการจ้าง JS Gurus
Andreas

22
เตรียมพร้อมสำหรับนักพัฒนา JS ที่จะพูดสิ่งนี้ JavaScript ไม่มีอาร์เรย์ที่เชื่อมโยง อย่างไรก็ตาม JavaScript มีตัวอักษรอ็อบเจ็กต์ซึ่งสามารถใช้งานได้เหมือนกับอาร์เรย์ที่เชื่อมโยงกัน นอกจากนี้คุณสมบัติของวัตถุยังสามารถเข้าถึงได้โดยใช้สัญลักษณ์จุดหรือวงเล็บเหลี่ยมและสตริง
Christopher Parker

8
สิ่งเหล่านี้เป็นพื้นฐานสำหรับผู้ที่เรียกตัวเองว่าเป็น 'นักพัฒนา JavaScript' ฉันคิดว่าความลึกของคำตอบคือวิธีที่คุณประเมินว่าพวกเขาเป็นปราชญ์หรือไม่
Ryan Ore

8
คุณหมายถึง "Prototypal Inheritance" ข้อผิดพลาดทั่วไป
wizzard

4
@wizzard คุณหมายถึง 'ความผิดพลาดทั่วไป': p
Nick

24

ถามเกี่ยวกับ "สิ่งนี้" นี่เป็นคำถามที่ดีคำถามหนึ่งที่สามารถทดสอบนักพัฒนา JavaScript ได้อย่างแท้จริง


คุณสามารถให้ลิงค์ไปยังบทความดีๆได้หรือไม่?
Janusz Skonieczny

2
ฉันคิดว่าคำถามนี้จะช่วยให้stackoverflow.com/questions/2148451/…
Anil Namde

15
Ali


17

(ฉันสมมติว่าคุณหมายถึง JavaScript ฝั่งเบราว์เซอร์)

ถามเขาว่าทำไมแม้ว่าเขาจะมีความรู้เกี่ยวกับ JavaScript ไม่สิ้นสุด แต่ก็ยังควรใช้เฟรมเวิร์กที่มีอยู่เช่น jQuery, Mootools, Prototype เป็นต้น

คำตอบ: รหัส coders ที่ดีใช้ coders ที่ยอดเยี่ยมซ้ำ ชั่วโมงการทำงานหลายพันคนถูกเทลงในไลบรารีเหล่านี้เพื่อเพิ่มขีดความสามารถ DOM แบบนามธรรมให้ห่างจากการใช้งานเฉพาะเบราว์เซอร์ ไม่มีเหตุผลที่จะต้องเผชิญกับอาการปวดหัว DOM ของเบราว์เซอร์ที่แตกต่างกันทั้งหมดด้วยตัวคุณเองเพียงเพื่อสร้างการแก้ไขใหม่


5
@ Tim Down: แน่นอน แต่ถ้าคุณพบแพ็คเกจที่มีชื่อเสียงเกือบทุกส่วนของแพ็คเกจจะได้รับการตรวจสอบโดยผู้ที่มีความสามารถ และในฐานะผู้ใช้แพ็กเกจโอเพนซอร์สคุณสามารถส่งการแก้ไขเมื่อคุณพบข้อผิดพลาดและเพิ่มความเชี่ยวชาญของคุณได้เช่นกัน
PanCrit

จริงรู้ล้อ - แต่อย่าใช้ยางเดียวกันเสมอไปสำหรับภูมิประเทศที่แตกต่างกัน เช่น. ทำไมต้องใช้ jQuery lib ทั้งหมดในเมื่อสิ่งที่คุณต้องการคือ Ajax transport และอื่น ๆ (สำหรับโครงการของคุณ) - microjs.com
Ali

1
คำตอบสำหรับคำถามนี้เป็นคำถามเอง - ทำไมเราถึงใช้ IDE และไม่ใช่แบบธรรมดาในการแก้ไขโค้ดของเรา? :)
นาวินอิสรานี

11

ถามพวกเขาว่าพวกเขาแน่ใจได้อย่างไรว่าหน้าของพวกเขายังคงใช้งานได้เมื่อผู้ใช้ปิด JavaScript หรือไม่สามารถใช้งาน JavaScript ได้

ไม่มีคำตอบหนึ่งที่แท้จริง แต่คุณกำลังตกปลาสำหรับคำตอบที่พูดคุยเกี่ยวกับกลยุทธ์บางอย่างสำหรับความก้าวหน้าการเพิ่มประสิทธิภาพ

Progressive Enhancement ประกอบด้วยหลักการสำคัญดังต่อไปนี้:

  • เนื้อหาพื้นฐานควรเข้าถึงได้ในทุกเบราว์เซอร์
  • ฟังก์ชันพื้นฐานควรสามารถเข้าถึงได้ในทุกเบราว์เซอร์
  • มาร์กอัปความหมายแบบเบาบางมีเนื้อหาทั้งหมด
  • เค้าโครงขั้นสูงมีให้โดย CSS ที่เชื่อมโยงภายนอก
  • พฤติกรรมขั้นสูงจัดทำโดย [[JavaScript ที่ไม่สร้างความรำคาญ | ไม่สร้างความรำคาญ]], JavaScript ที่เชื่อมโยงภายนอก
  • การตั้งค่าเบราว์เซอร์ของผู้ใช้จะได้รับการเคารพ

1
คำถามที่ดีที่สุดในการจ้างงานสถาปนิกระดับ JS :)
นาวินอิสรานี

ก่อนอื่นโน้มน้าวใจฉันว่าคนที่ปิด JS นั้นคุ้มค่าที่จะลงทุนในเว็บจริงไม่ใช่เว็บมืด ผู้ใช้เหล่านั้นอาจหวาดระแวงมากเกินไปหรือไม่เข้าใจเกี่ยวกับการใช้เบราว์เซอร์และปิดการใช้งาน JS โดยไม่ได้ตั้งใจไม่ว่าจะด้วยวิธีใดโอกาสในการแปลงของพวกเขาจะน้อยมาก
vsync


6

ถามว่า "คุณใช้กรอบการทดสอบหน่วยอะไรและทำไม"

คุณสามารถตัดสินใจได้ว่าการใช้กรอบการทดสอบเป็นสิ่งที่จำเป็นจริงๆหรือไม่ แต่บทสนทนาอาจบอกคุณได้มากมายว่าบุคคลนั้นเป็นผู้เชี่ยวชาญเพียงใด


1
อ้างอิง QUnit นั้นยอดเยี่ยมมาก: docs.jquery.com/QUnit
Goyuix

0

โปรแกรมเมอร์ระดับกลางควรมีความเชี่ยวชาญด้านเทคนิคของเครื่องมือ

หากเขาผ่านคำถามทางเทคนิคเกี่ยวกับหน้าจอโทรศัพท์ด้านบนให้เขาร่างสิ่งที่โง่ ๆ ออกมาทันทีเช่น ajax url shortner แล้วย่างเขาในผลงานของเขา ไม่มีผลงานที่น่าทึ่ง = นักพัฒนาระดับกลางในโดเมนนี้และไม่ใช่คนที่คุณต้องการให้รับผิดชอบโครงการใหม่ที่สดใสของคุณ


4
พอร์ตการลงทุนเป็นตัวชี้วัดที่แย่ที่สุดในโลกปัจจุบัน JS เป็นเครื่องมือที่ได้รับการยอมรับอย่างสมบูรณ์ในโลกขององค์กรซึ่งโครงการต่างๆอาจเอาชนะพอร์ตโฟลิโอใด ๆ ที่คุณอาจเห็นและในกรณีที่ repos สาธารณะไม่ใช่สิ่งที่สำคัญ
Ilya Ayzenshtok

1
@IlyaAyzenshtok นี่เป็นส่วนหนึ่งของภาวะที่กลืนไม่เข้าคายไม่ออกของฉัน ยากสำหรับฉันที่จะอวดผลงานเมื่อ 99% ของงานของฉันเป็นกรรมสิทธิ์ / อยู่เบื้องหลัง pay wall / ภายใน ...
Spartacus

1
@Spartacus - คุณสามารถจับภาพหน้าจอและอธิบายผู้สัมภาษณ์กฎของคุณในนั้นและอุปสรรคระหว่างทาง เกี่ยวกับโครงการโอเพ่นซอร์สเป็นวิธีที่ดีในการประเมินบุคคลก่อนการสัมภาษณ์เพื่อปรับคำถามที่เกี่ยวข้องกับระดับการเข้ารหัสของบุคคลที่เห็นในโครงการ
vsync
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.