Dự án lập trình phỏng vấn tốt [đóng]


26

Tôi đang tìm kiếm một số dự án lập trình nhỏ mà tôi có thể cung cấp cho nhân viên tiềm năng để đánh giá khả năng lập trình của họ. Đây sẽ là những lập trình viên ra khỏi trường đại học. Tôi đang tìm kiếm các dự án sẽ mất vài giờ và họ sẽ gửi lại câu trả lời sau khi phỏng vấn.

Một ví dụ sẽ là lấy đoạn văn bản này và trả về một danh sách các từ duy nhất được xếp theo thứ tự chữ cái. Sau mỗi từ, hãy cho tôi biết từ đó xuất hiện bao nhiêu lần và trong (những) tình cảm nào, từ đó xuất hiện.

Bất cứ ai có bất kỳ đề nghị tốt?


Câu hỏi cuộc thi lập trình ACM. Bạn có thể tìm thấy một kho lưu trữ những câu hỏi ở đây .
whatsisname 18/03

1
Những trang web câu đố lập trình này sẽ thú vị với bạn? lập trình
viên.stackexchange.com/questions/756/

Câu trả lời:


43

Từ lâu tôi đã kết luận rằng không ai có thể làm gì trong một thời gian ngắn có thể cho tôi biết bất cứ điều gì hữu ích về người đó. Nhưng mỗi ứng cử viên tốt đều có các dự án cá nhân đã được viết có thể cho bạn biết rất nhiều. Vì vậy, tôi đã thay thế những thách thức cụ thể bằng "cho tôi một đoạn mã mà bạn tự hào và vui mừng khi đóng dấu tên của bạn."

Sự lựa chọn dự án của họ cho bạn biết nhiều hơn bất kỳ nhiệm vụ kéo dài hàng giờ. Và sau đó bạn có thể dành một giờ để thảo luận về nó để tìm hiểu nhiều hơn.


4
Tôi nhớ phỏng vấn tại một công ty và được cung cấp một chức năng khá đơn giản (15-20 dòng) và được hỏi "Cái này làm gì?" Tôi nói với họ, rồi hỏi "Có ai hiểu sai không?". Tôi đã nói rằng phần lớn những người họ đã phỏng vấn không thể trả lời. Có thể đó là một sự thay thế nhanh chóng (tôi không biết bất kỳ ai có thể đọc mã không thể viết nó, nhưng có lẽ tôi đã không gặp nhầm người).
TMN

4
@TMN - Ồ, chúng tôi cũng làm điều đó một chút. Nhưng tôi đã gặp những người có thể đọc mã và viết không tốt .
pdr

@TMN Được tự học, tôi đã dành một khoảng thời gian đáng kể để đọc mã sớm đến mức đọc nó tốt hơn nhiều so với viết nó. Nó có thể và có thể xảy ra, nó chỉ cần thời gian và thực hành để đưa kỹ năng viết lên.
Jimmy Hoffa

27

Tôi cảm thấy quá mệt mỏi với trò nhảm nhí này. Tôi đã từng đến những nơi yêu cầu tôi lấy mẫu mã, tách chúng ra và sau đó yêu cầu tôi giải thích mã ví dụ từ các hệ thống của chúng trông giống như được viết bởi những đứa trẻ 2 tuổi. Tôi đã được yêu cầu thực hiện các thuật toán sắp xếp tối nghĩa, các dịch vụ mạng, guis, cấu trúc dữ liệu (luôn luôn là một cây hoặc một danh sách được liên kết). Mỗi hương vị của câu hỏi khó chịu về bất cứ điều gì người phỏng vấn nghĩ là phần quan trọng nhất của lập trình.

Cuối cùng, tất cả đều vô dụng. Cách tốt nhất để đánh giá một nhân viên là thuê anh ta trong 30 ngày, và xem anh ta làm việc tốt như thế nào. Dành tất cả thời gian bạn muốn phát triển các bài kiểm tra và nó sẽ không cho bạn biết điều gì về cách ai đó làm việc hàng ngày.


8
Mã hóa một thuật toán đơn giản như một bigtang được mô tả không phải là "trò chơi trí tuệ". Có thể làm một cái gì đó như thế nên là điều kiện tiên quyết để thậm chí nhận được một cuộc phỏng vấn (và đó là, tại công ty của tôi). Nó rất hữu ích để sàng lọc các ứng cử viên trông tuyệt vời trên giấy. Điều cuối cùng tôi muốn làm là dành hàng giờ để phỏng vấn một người không thể viết một hàm để cho biết một chuỗi có phải là một bảng màu hay không. Bạn sẽ ngạc nhiên về số lượng tiến sĩ CS từ các trường hàng đầu không thể làm bài kiểm tra của bigtang. Nói tóm lại, có thể hoàn thành một bài kiểm tra như thế này là cần thiết nhưng chưa đủ.
Jer

+1 @Jer. Lần trước tôi đã phỏng vấn cho một lập trình viên, sáu trong số tám ứng viên không thể hoàn thành các nhiệm vụ cơ bản nhất (ngay cả với Google và SO). Không có cách nào tôi có thể để chúng ở gần cơ sở mã thực sự của tôi trong năm phút, chứ đừng nói đến 30 ngày.
Julia Hayward

2
@JuliaHayward: Tôi hy vọng bất cứ ai cũng có thể hoàn thành một dự án với quyền truy cập được cung cấp cho web / tài liệu. Vấn đề tăng lên khi ai đó bắt đầu ném buzzwords và các thuật toán sắp xếp tối nghĩa với bạn mà không truy cập internet, với giả định sai lầm rằng đã ghi nhớ các kỹ thuật sắp xếp khác nhau hoặc bất cứ điều gì quan trọng đối với hiệu suất công việc hàng ngày.
Satanicpuppy

12

Cho phép ai đó thực hiện một dự án thực tế vào thời gian riêng của họ không nhất thiết có nghĩa là chính họ là người thực hiện nó.

Mọi người đến sớm cho một cuộc phỏng vấn (tốt, ít nhất nên). Chúng tôi có một tờ 'trong khi bạn chờ' để họ làm việc cho đến khi chúng tôi sẵn sàng để xem chúng. Nó có tám (8) câu hỏi kiểm tra kiến ​​thức của ứng viên bằng ngôn ngữ mà chúng tôi chủ yếu sử dụng.

Chúng tôi không tìm kiếm câu trả lời cho tất cả là đúng, vì bất cứ ai cũng có thể trả lời đúng với một máy tính trước mặt họ. Chúng tôi đang tìm kiếm quá trình, họ thậm chí có thử câu hỏi không, làm thế nào để họ đi đến câu trả lời của họ.

Khi chúng tôi đến cuộc phỏng vấn, chúng tôi sẽ cùng họ trả lời và trả lời bất kỳ câu hỏi nào họ có thể đưa họ đến câu trả lời chính xác. Nó cũng cho phép chúng tôi hỏi làm thế nào họ có câu trả lời mà họ đưa ra.

Điều này kết hợp với công việc trước đây, chúng tôi thấy, là những cách tốt nhất để lọc ra các ứng cử viên.

CẬP NHẬT 2016/06/15

Chúng tôi đã thay đổi đáng kể quy trình của chúng tôi trong cách chúng tôi thuê các nhà phát triển.

Giai đoạn 1: Một cuộc phỏng vấn điện thoại 15 phút trong đó chúng tôi hỏi 7 câu hỏi. Hai cái đầu tiên là "Điều thú vị nhất bạn từng làm là gì?" (không cần phải liên quan đến lập trình) và "Bạn viết mã gì để giải trí trong thời gian rảnh?".

Giai đoạn 2: Một dự án nhỏ mà họ hoàn thành vào thời gian riêng của họ. Sau đó chúng tôi chia sẻ màn hình với họ và họ cho chúng tôi thấy những gì họ đã xây dựng. Trong quá trình chia sẻ màn hình, chúng tôi cũng khiến họ thực hiện hai thay đổi cho dự án của họ và sau đó xem họ làm việc thông qua nó và khiến nó hoạt động.

Giai đoạn 3: Trong cuộc phỏng vấn trực tiếp.

Quá trình này cho phép chúng tôi tìm ra văn hóa phù hợp ngay lập tức (giai đoạn 1). Nếu họ có thể thực hiện công việc và thực sự đi bộ nói chuyện của họ (giai đoạn 2). Cuối cùng, đảm bảo giá trị của chúng là phù hợp với những gì chúng ta đang tìm kiếm (giai đoạn 3).


1
Đây là loại tuyệt vời. Tôi thích nó!
davidhaskins

3
mặc dù tôi đã ở trong nhiều cuộc phỏng vấn biến thành chuyện nhỏ. Hãy cẩn thận để không bị sa lầy vào một chút sysntax đặc biệt này và hiểu được quy mô lớn của họ. Đặc biệt là nếu họ bị cáo buộc có một chút tài năng hoặc quan tâm. kết quả là tôi đã không muốn làm việc cho họ và tôi chắc chắn đó là sự tương hỗ.
John Nicholas

"Cho phép ai đó thực hiện một dự án thực tế vào thời gian của họ không nhất thiết có nghĩa là chính họ là người thực hiện nó" - Đúng, nhưng tôi chưa bắt gặp ai đó đủ can đảm để tham gia một cuộc phỏng vấn và được hỏi về mã mà họ ẩn náu 't viết. Nếu điều đó xảy ra, họ sẽ không vượt qua được cuộc phỏng vấn và quản chế, nhưng tôi có thể xem xét lại cách tiếp cận của mình.
pdr

@John. Đồng ý, không thể là "oh, bạn đã quên dấu phẩy ở đó". Như tôi đã đề cập, đó là để hiểu về cách tiếp cận mọi thứ và nếu họ hiểu ngôn ngữ. Nếu họ biết công cụ của họ chắc chắn chuyển sang những điều lớn hơn.
RDL

2
@RDL, Hầu hết quá trình phỏng vấn của chúng tôi được thiết kế để trở nên thú vị với loại nhà phát triển mà chúng tôi đang tìm kiếm và địa ngục cho phần còn lại. Bạn biết làm thế nào các nhà phát triển tốt không thể cưỡng lại một thách thức.
pdr

4

Bạn có thể muốn xem Cyber-Dojo tuyệt vời của Jon Jagger .

Đó là một môi trường tích hợp dựa trên web được thiết kế để thực hiện có chủ ý về Phát triển hướng thử nghiệm và tìm hiểu về động lực học của nhóm. Nó có rất nhiều nhiệm vụ lập trình nhỏ (kata's) và hỗ trợ một loạt các ngôn ngữ, từ Python và Ruby đến Java và C ++.

Không giống như IDE được thiết kế cho năng suất, không có hoàn thành mã, tô sáng cú pháp hoặc tự động tái cấu trúc, vì vậy bạn có thể xem người được phỏng vấn của bạn có thể làm gì nếu không có những điều này.

Điều tốt nhất là, sau khi thực hiện một kata, bạn có thể quay lại và xem tiến trình màu đỏ / xanh lá cây (hoặc có thể không nếu họ không làm TDD * 8 ') của mỗi kata. Mỗi biên dịch / kiểm tra cam kết các thay đổi đối với kho git cùng với kết quả kiểm tra.

Tôi nghĩ rằng việc sử dụng điều này cho các bài kiểm tra mã hóa phỏng vấn có thể cho bạn biết rất nhiều về không chỉ khả năng ứng viên giải quyết vấn đề, mà cả cách tiếp cận giải quyết vấn đề quy trình họ sử dụng khi không bị hạn chế bởi các yếu tố bên ngoài, chỉ cần chọn một kata phù hợp với thời gian bạn muốn ứng viên dành cho nó.

Nếu bạn muốn máy chủ CyberDojo của riêng mình, toàn bộ dự án có thể được tìm thấy tại github và thậm chí còn có một máy ảo thiết bị Turnkey Linux được liên kết từ đó, có nghĩa là giả sử bạn đã cài đặt trình phát VMware hoặc VirtualBox , bạn có thể chạy và chạy trong Một vài phút tải xuống thiết bị!


3

Tôi chỉ được phỏng vấn với một khi công ty đã làm điều này. Họ đã đưa ra một bảng câu hỏi gồm 6 hoặc 7 vấn đề. Các hướng dẫn là thực hiện một phương pháp để giải quyết từng vấn đề.

Một phần của nhiệm vụ là nhận ra rằng bạn có thể sử dụng lại mã. Các vấn đề có thể sử dụng mã từ các giải pháp khác. Nó cũng không tuần tự. Ví dụ, câu hỏi 3 có thể được viết bằng phương pháp được sử dụng cho câu hỏi 5.

Tôi sẽ đề nghị thử một cái gì đó như thế.

Đối với các câu hỏi? Một số câu hỏi bắt đầu trên trang Project Euler là tốt.

Bạn cũng có thể thử một trò chơi đơn giản nếu bạn muốn xem làm thế nào họ có thể đặt một dự án cùng nhau.

Hoặc, nếu bạn không muốn đưa ra một cái gì đó, hãy yêu cầu họ gửi cho bạn một số mã từ một dự án cuối cùng.


3

Để yêu cầu mọi người hoàn thành một dự án, bạn nên có một bộ kỹ năng cụ thể mà bạn muốn đánh giá trong đầu và thiết kế dự án để kiểm tra những kỹ năng đó.

Một ví dụ sẽ là lấy đoạn văn bản này và trả về một danh sách các từ duy nhất được xếp theo thứ tự chữ cái. Sau mỗi từ, hãy cho tôi biết từ đó xuất hiện bao nhiêu lần và trong (những) tình cảm nào, từ đó xuất hiện.

Bạn đang tìm kiếm điều gì với câu hỏi này? Có bao nhiêu cách để giải quyết nó, và mỗi cách tiếp cận cho bạn biết gì về người đã viết câu trả lời? Các kỹ năng được thể hiện bằng một câu trả lời hiệu quả cho câu hỏi này có phải là các kỹ năng quan trọng nhất đối với doanh nghiệp của bạn không?

Tôi không muốn câu trả lời cho những câu hỏi này; Tôi chỉ muốn bạn nghĩ về câu trả lời trước khi bạn đưa một nhóm ứng cử viên vào quy trình của bạn. Nếu bạn biết bạn đang tìm kiếm kỹ năng gì, việc tạo một câu hỏi để tìm kiếm những kỹ năng đó không khó. Nếu bạn sử dụng câu hỏi của người khác mà không hiểu kỹ về những gì nó được thiết kế để đánh giá (nếu có), bạn thực sự chỉ đang tự lừa dối bản thân và lãng phí thời gian của mọi người.


Xin lỗi vì đã lãng phí thời gian của bạn.
bigtang

1
@bigtang, không phải vậy đâu. Xin lỗi nếu những điều trên xuất hiện như một lời ca ngợi - tôi có thể thấy nó có thể như thế nào - nhưng mục tiêu của tôi là xây dựng một trường hợp để tạo dự án của riêng bạn dựa trên các kỹ năng bạn đang tìm kiếm trong tuyển dụng mới. Bạn có thể thực hiện một dự án nhỏ từ hầu hết mọi thứ, nhưng để làm cho nó có giá trị cho cả bạn và người được phỏng vấn, các yêu cầu nên được điều khiển bởi các kỹ năng bạn đánh giá cao nhất.
Caleb

Đã xóa hoàn toàn câu đầu tiên (Trân trọng, nếu bạn không đủ thông minh để tự mình đưa ra một dự án tử tế, điều gì khiến bạn nghĩ rằng bạn đủ thông minh để đánh giá bài nộp của ứng viên? ") giá trị và có vẻ hơi khó chịu.
Michael Durrant

0

Một ví dụ sẽ là lấy đoạn văn bản này và trả về một danh sách các từ duy nhất được xếp theo thứ tự chữ cái. Sau mỗi từ, hãy cho tôi biết từ đó xuất hiện bao nhiêu lần và trong (những) tình cảm nào, từ đó xuất hiện.

Ngôn ngữ nào họ sẽ viết này trong? Nếu họ sắp ra khỏi một trường tập trung nhiều vào C, thì việc viết này sẽ không nhanh bằng việc dạy Python / Perl / Ruby, v.v ... Hoặc thậm chí là Java hoặc C #. Tuy nhiên, đó là một thử nghiệm nhỏ tốt.

Tôi đề nghị một số dễ dàng hơn thực sự trong cuộc phỏng vấn. Không có câu hỏi mẹo. Tôi với TMN về điều này. Cung cấp cho họ một vài chức năng thực hiện các nhiệm vụ cơ bản và hỏi họ làm gì (đọc mã của người khác). Sau đó cung cấp cho họ một vài nhiệm vụ cơ bản (<20 dòng) để viết bằng ngôn ngữ họ chọn. Điều đó là đủ để một cấp nhập cảnh biết họ có thể viết mã hay không (ở vị trí cấp nhập cảnh). Điều đó cùng với cuộc phỏng vấn và GPA sẽ cho bạn một ý tưởng tốt về những gì bạn cần biết.


1
Tôi không tìm thấy ngôn ngữ quan trọng, thậm chí nó có thể được thực hiện bằng mã giả. Ý tưởng chính là để xem liệu nhân viên được cho là "vào đó" và cho thấy những dấu hiệu tốt để giải quyết vấn đề.
Jonas Byström

Thành thật mà nói, bất kỳ ngôn ngữ nào có split () và mảng / danh sách (với đẩy / nối) sẽ làm cho điều này trở nên tầm thường. Cho phép lập trình viên C 'giả sử' split () và liệt kê, và nó trở nên đơn giản như sau :-)
ChuckCottrill

-1

Yêu cầu họ thực hiện Trò chơi cuộc sống của Conway cho bất kỳ ngôn ngữ nào bạn đang xem, sử dụng mô hình thiết kế của ngôn ngữ đó.

Trò chơi Cuộc sống của Java hoặc C # Conway phải hướng đối tượng, LISP hoặc F # sẽ hoạt động, v.v.


2
Bao lâu bạn sẽ cung cấp cho họ để hoàn thành điều này?
Công việc

Tôi mất khoảng 4 giờ để hoàn thành toàn bộ quá trình thực hiện OO của nó, nhưng tôi đã thực hiện được khoảng một chục lần. Nếu bạn muốn xem họ nghĩ như thế nào và họ nhận được bao xa (và họ có viết mã kiểm tra hay không), hãy cho họ ít thời gian hơn thế. Nếu bạn trực tiếp làm điều đó, hãy cho họ 45 phút và xem họ đi được bao xa và tại sao họ chọn con đường họ đã làm. Đó là một trong những vấn đề mà bạn muốn họ biết trước về thời gian để họ không hoàn toàn lạc lối, thậm chí còn khuyến khích họ tự mình thử nó. Nó tiết lộ rất nhiều về một lập trình viên.
George

8
Yêu cầu một ứng cử viên viết bài kiểm tra Trò chơi cuộc sống của Conway trong thời gian gần đây họ học đại học, hoặc viết và nghiên cứu vấn đề đó. Bạn sẽ thuê @George Stocker vì anh ta đã viết nó cả chục lần. Trò chơi Cuộc sống có mối tương quan cao như thế nào với bất kỳ công việc phát triển trong thế giới thực nào?
ChuckCottrill
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.