Câu hỏi phỏng vấn lập trình viên JavaScript chuyên nghiệp (có câu trả lời) [đã đóng]


131

Các câu hỏi hay để xác định xem ứng viên có thực sự là nhà phát triển JavaScript (phía trình duyệt) không?

Các câu hỏi có thể phân biệt nếu ai đó không phải là lập trình viên ad-hoc, nhưng thực sự đang phát triển JavaScript chuyên nghiệp, hướng đối tượng, có thể sử dụng lại và có thể duy trì.

Vui lòng cung cấp câu trả lời , vì vậy, một lập trình viên JavaScript trung cấp và đặc biệt có thể phỏng vấn ai đó có kinh nghiệm hơn, đưa ra câu trả lời cho khá nhiều câu hỏi nâng cao sẽ trốn tránh tôi. Hãy tránh những câu hỏi mở .

Vui lòng giữ một câu hỏi / câu trả lời phỏng vấn cho mỗi câu trả lời SO để có trải nghiệm đọc tốt hơn và chuẩn bị phỏng vấn dễ dàng hơn.


21
Không bao giờ có một nhà phát triển JS trung gian phỏng vấn ai đó được cho là tiến bộ hơn! Điều đó thật điên rồ. Có người đủ điều kiện làm phỏng vấn.
James

22
@JP - vậy nếu nhà phát triển cấp cao của bạn rời khỏi, thì bạn vừa bị lừa?
tvanfosson

15
@JP Tôi đang cố gắng tuyển dụng một người tốt hơn mình. Đó là một khởi nghiệp nhỏ, vì vậy tôi không có lựa chọn nào tốt hơn, trừ khi tôi sử dụng trợ giúp bên ngoài ... nhưng sau đó tôi sẽ phải phỏng vấn anh ấy;)
Janusz Skonieczny

13
@JP: Nếu bạn chỉ thuê những người giỏi nhất như bạn, một ngày nào đó bạn sẽ bị bao vây bởi những kẻ ngốc ngu ngốc. Luôn cố gắng thuê một người giỏi hơn bạn.
Gumbo

1
@Nick: Vấn đề là câu hỏi này quá rộng về phạm vi và không có câu trả lời đúng (xem bình luận của faq về chủ đề này). Nó rất phù hợp cho một bài đăng trên blog, nhưng không phù hợp lắm cho định dạng Q & A này. Vào thời xa xưa, chúng ta có thể đã chuyển sang Kỹ thuật phần mềm , nhưng sau nhiều mối đe dọa gây tổn hại cơ thể từ các mod lập trình viên, chúng ta phải thay đổi cách thức.
Michael Myers

Câu trả lời:


118

Vì JavaScript là một ngôn ngữ nhỏ như vậy, nhưng với độ phức tạp đáng kinh ngạc, bạn sẽ có thể hỏi những câu hỏi tương đối cơ bản và tìm hiểu xem chúng có thực sự tốt dựa trên câu trả lời của chúng không. Chẳng hạn, câu hỏi đầu tiên tiêu chuẩn của tôi để đánh giá phần còn lại của cuộc phỏng vấn là:

Trong JavaScript, sự khác biệt giữa var x = 1và là x = 1gì? Trả lời nhiều hay ít chi tiết khi bạn cảm thấy thoải mái.

Các lập trình viên Novice JS có thể có câu trả lời cơ bản về người địa phương và toàn cầu. Các anh chàng JS trung cấp chắc chắn nên có câu trả lời đó, và có lẽ nên đề cập đến phạm vi cấp hàm. Bất cứ ai tự gọi mình là một lập trình viên JS "tiên tiến" nên được chuẩn bị để nói về người dân địa phương, toàn cầu ngụ ý, windowđối tượng, phạm vi chức năng, cẩu khai báo và chuỗi phạm vi. Hơn nữa, tôi rất muốn nghe về [[DontDelete]], ưu tiên nâng cao (tham số so varvới function) và undefined.

Một câu hỏi hay khác là yêu cầu họ viết một sum()hàm chấp nhận bất kỳ số lượng đối số nào và trả về tổng của chúng. Sau đó, yêu cầu họ sử dụng hàm đó (không sửa đổi) để tổng hợp tất cả các giá trị trong một mảng. Họ nên viết một hàm trông như thế này:

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

Và họ nên gọi nó trên mảng của bạn như thế này (bối cảnh applycó thể là bất cứ điều gì, tôi thường sử dụng nulltrong trường hợp đó):

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

Nếu họ đã có những câu trả lời đó, có lẽ họ biết JavaScript của họ. Sau đó, bạn nên tiến hành hỏi họ về các công cụ không phải là JS như thử nghiệm, quy trình làm việc, kiểm soát phiên bản, v.v. để tìm hiểu xem họ có phải là một lập trình viên giỏi hay không .


4
Câu hỏi hay. Nitlog nhỏ: Tôi tin rằng bạn có nghĩa là "kết quả trả về" thay vì "return i". Pro-tip: Thiết lập một môi trường thử nghiệm nhỏ để kiểm tra mã trước khi đăng ;-)
MisterMister

4
wow, đó là một sai lầm ngớ ngẩn. Tôi đã kiểm tra hầu hết mã của mình tại jsFiddle trước khi đăng, nhưng không kiểm tra mã này. Cảm ơn :)
bcherry

5
Hàm sum phải có khả năng phục hồi đối với các loại số không có lỗi ném. Ngoài ra, nó có thể xử lý các số dưới dạng chuỗi cho tín dụng bổ sung.
Abadaba

2
+1 cho đề cập tuyệt vời và phân biệt về việc tìm hiểu xem họ có phải là một lập trình viên giỏi hay không.
Demonslay335

3
Dòng này: for (i = 0, l = argument.length; i <l; i ++) là xấu vì argument.length sẽ được đánh giá mỗi lần lặp. Nếu bạn gán l = argument.length trước vòng lặp for thì tốt hơn. Đúng?
thomallen

94

Lập trình JS cơ bản

  • Scope of variable
  • Associative Arraygì Làm thế nào để chúng ta sử dụng nó?

OOPS JS

  • Difference between Classic Inheritance and Prototypical Inheritance
  • difference between private variable, public variable and static variablegì Làm thế nào chúng ta đạt được điều này trong JS?
  • Làm thế nào để add/remove properties to objecttrong thời gian chạy?
  • Làm thế nào để đạt được inheritance?
  • Làm thế nào để extend built-in objects?
  • Tại sao extending array is bad idea?

DOM và JS

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

Linh tinh

  • Graceful Degradation V/s Progressive Enhancement

17
đây là để thuê JS Gurus.
Andreas

22
Hãy chuẩn bị cho một nhà phát triển JS nói điều gì đó như thế này: JavaScript không có mảng kết hợp. Tuy nhiên, JavaScript có các đối tượng bằng chữ, có thể được sử dụng như các mảng kết hợp. Ngoài ra, các thuộc tính của đối tượng có thể được truy cập bằng cách sử dụng ký hiệu dấu chấm hoặc dấu ngoặc vuông và chuỗi.
Christopher Parker

8
Đây là những điều cơ bản cho ai đó sẽ tự gọi mình là 'Nhà phát triển JavaScript'. Tôi nghĩ rằng độ sâu của câu trả lời là cách bạn đánh giá họ là một Chuyên gia hay không.
Ryan Ore

8
Bạn có nghĩa là "Kế thừa nguyên mẫu." Lỗi phổ biến.
Wizzard

4
@wizzard bạn có nghĩa là 'sai lầm điển hình': p
Nick

24

Hỏi về "cái này". Đây là một câu hỏi hay có thể là thử nghiệm thực sự của nhà phát triển JavaScript.


Bạn có thể cung cấp một liên kết đến một số bài viết tốt?
Janusz Skonieczny

2
Tôi nghĩ rằng câu hỏi này sẽ giúp stackoverflow.com/questions/2148451/ từ
Anil Namde

15
this === stackoverflow.com/questions/2492123/ Mạnh (BADUM-TISH!)
Ali


17

(Tôi giả sử bạn có nghĩa là JavaScript phía trình duyệt)

Hỏi anh ta tại sao, mặc dù có kiến ​​thức vô hạn về JavaScript, nhưng vẫn nên sử dụng các khung công tác hiện có như jQuery, Mootools, Prototype, v.v.

Trả lời: Mã coder tốt, tái sử dụng coder tuyệt vời. Hàng ngàn giờ làm việc đã được đổ vào các thư viện này để các khả năng DOM trừu tượng tránh xa các triển khai cụ thể của trình duyệt. Không có lý do gì để tự mình vượt qua tất cả các trình duyệt DOM khác nhau chỉ để phát minh lại các bản sửa lỗi.


5
@Tim Down: chắc chắn, nhưng nếu bạn tìm thấy một gói có uy tín, thì gần như tất cả các phần của gói sẽ được xem xét bởi những người có khả năng. Và là người dùng của gói nguồn mở, bạn có thể gửi các sửa chữa khi bạn tìm thấy lỗi, thêm chuyên môn của bạn.
PanCrit

Đúng, biết bánh xe - nhưng không phải luôn sử dụng cùng loại lốp cho các địa hình khác nhau. Ví dụ. Tại sao nên sử dụng toàn bộ lib lib khi tất cả những gì bạn cần là vận chuyển Ajax, v.v. (cho dự án của bạn) - microjs.com
Ali

1
Câu trả lời cho câu hỏi này là một câu hỏi - tại sao chúng ta sử dụng IDE và notepad đơn giản để chỉnh sửa mã của chúng tôi? :)
Navin Israni

11

Hỏi họ làm thế nào họ đảm bảo các trang của họ tiếp tục có thể sử dụng được khi người dùng tắt JavaScript hoặc JavaScript không khả dụng.

Không có câu trả lời đúng nào, nhưng bạn đang tìm câu trả lời nói về một số chiến lược để cải tiến tiến bộ .

Tăng cường tiến bộ bao gồm các nguyên tắc cốt lõi sau:

  • nội dung cơ bản nên có thể truy cập được cho tất cả các trình duyệt
  • chức năng cơ bản nên có thể truy cập được cho tất cả các trình duyệt
  • thưa thớt, đánh dấu ngữ nghĩa chứa tất cả nội dung
  • bố cục nâng cao được cung cấp bởi CSS được liên kết bên ngoài
  • hành vi nâng cao được cung cấp bởi [[JavaScript không phô trương | không phô trương]], JavaScript được liên kết bên ngoài
  • tùy chọn trình duyệt người dùng cuối được tôn trọng

1
Câu hỏi hay nhất để thuê một anh chàng JS cấp kiến ​​trúc sư :)
Navin Israni

Trước hết, thuyết phục tôi một người tắt JS là đáng để đầu tư vào web thật chứ không phải web tối. những người dùng đó có lẽ quá hoang tưởng hoặc không biết gì về việc sử dụng trình duyệt và tắt JS do nhầm lẫn, dù sao đi nữa, cơ hội chuyển đổi của họ rất mong manh.
vsync


6

Hỏi "Bạn sử dụng khung kiểm tra đơn vị nào? Và tại sao?"

Bạn có thể quyết định xem thực sự sử dụng khung kiểm tra có thực sự cần thiết hay không, nhưng cuộc trò chuyện có thể cho bạn biết rất nhiều về việc chuyên gia đó là người như thế nào.


1
Là một tài liệu tham khảo, QUnit là tuyệt vời: docs.jquery.com/QUnit
Goyuix

0

lập trình viên trung gian nên có kỹ thuật thành thạo các công cụ của họ.

nếu anh ấy vượt qua các câu hỏi kỹ thuật màn hình điện thoại ở trên, hãy làm cho anh ấy phác thảo một cái gì đó ngu ngốc ngay tại chỗ, như một công cụ rút gọn url ajax. sau đó nướng anh ta trên danh mục đầu tư của mình. không có danh mục đầu tư tuyệt vời = nhà phát triển trung gian trong lĩnh vực này và không phải là người bạn muốn phụ trách dự án mới sáng bóng của bạn.


4
Danh mục đầu tư là một số liệu kém nhất - trong thế giới ngày nay, JS là một công cụ được chấp nhận hoàn hảo trong thế giới doanh nghiệp, nơi các dự án có thể đánh bại bất kỳ danh mục đầu tư nào bạn có thể thấy và trong đó repos công khai không phải là một điều.
Ilya Ayundredhtok

1
@IlyaAyundredhtok ĐÂY là một phần của vấn đề nan giải của tôi. Thật khó để tôi thể hiện một danh mục đầu tư khi 99% công việc của tôi là độc quyền / đứng sau một bức tường trả tiền / nội bộ ...
Spartacus

1
@Spartacus - bạn có thể chụp ảnh màn hình và giải thích cho người phỏng vấn quy tắc của bạn trong đó và vượt rào trên đường đi. liên quan đến các dự án nguồn mở, chúng là một cách tuyệt vời để đánh giá một người trước một cuộc phỏng vấn để điều chỉnh các câu hỏi liên quan đến mức độ mã hóa của người được thấy trong các dự án.
vsync
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.