Tôi có nên đưa ra câu trả lời cho một bài tập mã hóa phỏng vấn thất bại? [đóng cửa]


14

Chúng tôi đã có một ứng cử viên phỏng vấn cấp cao không đạt được sắc thái của câu hỏi FizzBuzz 1 2 .
Ý tôi là, thực sự, hoàn toàn, hoàn toàn, thất bại câu hỏi - thậm chí không gần gũi.
Tôi thậm chí còn dẫn dắt ông qua để suy nghĩ về việc sử dụng một vòng lặp và điều đó 35đã thực sự đáng giá như trường hợp đặc biệt.

Anh thổi nó.

Chỉ với mục đích QA, tôi đã đưa ra câu hỏi chính xác tương tự cho ba đồng đội; cho họ 5 phút; và sau đó quay lại để thu thập mã giả của họ. Tất cả đều đóng đinh nó và chưa thấy câu hỏi trước đó. Hai người hỏi mánh khóe là gì ...

Trong một bài tập logic khác, ứng viên đã cho thấy một số hiểu biết về một số tính năng có sẵn trong ngôn ngữ mà anh ta chọn sử dụng (C #). Vì vậy, nó không phải như thể anh ta chưa bao giờ viết một dòng mã. Nhưng logic của anh vẫn chùn bước.

Câu hỏi của tôi là liệu tôi có nên cho anh ta câu trả lời cho các câu hỏi logic hay không.

Anh ta biết rằng anh ta đã thổi bay chúng, và thừa nhận nó sau cuộc phỏng vấn.
Mặt khác, anh ấy không bao giờ hỏi câu trả lời hoặc những gì tôi đang mong đợi để xem.

Tôi biết các bài tập mã hóa có thể được sử dụng để thiết lập các ứng cử viên thất bại (một lần nữa, xem liên kết thứ hai từ phía trên). Và tôi thực sự đã cố gắng giúp anh ấy về nhà trả lời cốt lõi của câu hỏi. Nhưng đây là một ứng cử viên cấp cao và Fizz-Buzz, thẳng thắn, dễ dãi một cách nực cười ngay cả sau khi tính toán cho những người hốt hoảng phỏng vấn.

Tôi cảm thấy mình nên chỉ cho anh ấy cách giải quyết vấn đề để ít nhất anh ấy có thể học hỏi kinh nghiệm. Nhưng một lần nữa, anh không hỏi.

Cách đúng đắn để xử lý tình huống đó là gì?


1 Được rồi, đó không phải là liên kết đến câu hỏi FizzBuzz thực tế, nhưng đó là một cuộc thảo luận P.SE tốt xung quanh FizzBuzz và liên kết đến các khía cạnh khác nhau của nó.

2 Để giúp làm rõ, đây là sắc thái của Fizz-Buzz tôi đã hỏi và đó là từ vấn đề đầu tiên của Project Euler . In ấn thay thế Fizz | Buzz để tổng hợp các con số và bạn có cùng một câu hỏi cơ bản.
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Write a function that finds the sum of all the multiples of 3 or 5 below 1000.

3 Câu hỏi này thu hút nhiều sự chú ý hơn tôi mong đợi và tôi đánh giá cao tất cả các câu trả lời. Một số câu trả lời sau đã thực sự đi vào cốt lõi câu hỏi của tôi, vì vậy tôi sẽ cho phép cộng đồng xem xét và bỏ phiếu trước khi chỉ định câu trả lời "câu trả lời".

4 Tôi đã chọn "câu trả lời" dựa trên phiếu bầu của cộng đồng tại thời điểm đó. Và tôi nghĩ câu trả lời của Yannis là thích hợp cho các cuộc phỏng vấn với các nhà phát triển mới hơn. Tôi nghĩ rằng các phản ứng tập thể tập trung vào việc thiếu yêu cầu trả lời là tại chỗ là tốt.


34
Cắt chúng ra và tiếp tục với ngày của bạn. Theo như tôi quan tâm, việc thất bại FizzBuzz ở "cấp cao" là lãng phí thời gian của tôi.
Steven Evers

6
Gần đây tôi đã phỏng vấn cho một số vị trí trong khu vực của tôi và những vị trí yêu cầu mã cho tôi biết rằng họ gặp khó khăn trong việc tìm kiếm các ứng cử viên cấp cao có thể vượt qua các bài kiểm tra "FizzBuzz" của riêng họ. Trong mọi trường hợp, phản ứng của tôi là "bạn không thể nghiêm túc". Rõ ràng có rất nhiều lập trình viên khủng khiếp ngoài kia đang giả dạng cấp cao thậm chí không gần gũi.
Joel Etherton

6
@JoelEtherton - Điều tương tự ở đây. Tôi đã đẩy màn hình điện thoại ở mọi nơi tôi đến. Nếu bạn đăng ký làm Người cao tuổi sử dụng C # và không thể cho chúng tôi biết sự khác biệt giữa loại giá trị và loại tham chiếu, bạn sẽ không nhận được một cuộc phỏng vấn.
Telastyn

3
@ 0A0D, lãnh đạo một nhóm là một loại kỹ năng khác với việc trở thành một nhà phát triển giỏi. Tôi cũng đã từng thấy những người lãnh đạo nhóm, những người phát triển tồi.
Kyralessa

4
@JoelEtherton, đừng hành động ngạc nhiên. Tôi nghĩ rằng "199 trong số 200 ứng viên không thể viết mã" chỉ là cường điệu cho đến khi tôi thực sự bắt đầu giúp sàng lọc và phỏng vấn ứng viên. Nhiều năm kinh nghiệm (bị cáo buộc) đơn giản là không quan trọng. Chức danh công việc không quan trọng. Hầu hết các ứng viên thực sự là đàn em vô cùng, cho dù họ biết hay không.
Anthony Pegram

Câu trả lời:


15

Hầu hết các cuộc phỏng vấn của tôi là với các sinh viên đang tìm kiếm một vị trí thực tập, và thường xuyên hơn là họ không làm hỏng các bài tập đơn giản (?). Tôi muốn một cách dễ dàng và thân thiện để truyền đạt lỗi của họ, và điều tôi nghĩ ra khá đơn giản: tôi đã tự mình giải bài tập và chỉ cho họ giải pháp của mình sau khi họ hoàn thành bài tập của mình.

Tôi đã có khá nhiều cuộc thảo luận cực kỳ thú vị và tiết lộ với các ứng cử viên bắt đầu bằng cách so sánh các cách tiếp cận khác nhau của chúng tôi để giải quyết cùng một vấn đề. Sau một thời gian, tôi thậm chí đã lường trước được một số lỗi, chỉ bằng cách kiểm tra trường mà ứng viên đang theo học (một số "giáo sư" là ... kẻ ngốc). Và, tốt, trong một vài trường hợp ứng viên không thể đưa ra bất kỳ giải pháp nào, tôi đã đưa cho họ một lần tiếp theo.


Có ý nghĩa; Gần đây tôi đang tìm kiếm một công việc mới và tôi thấy rằng hầu hết những người phỏng vấn đều làm điều tương tự khi tôi trả lời sai (hoặc hơi "trả lời sai") cho câu hỏi của họ. Đây là một thực hành tốt. Chủ yếu là vì nó mở ra ứng cử viên (ví dụ như tôi) và làm cho cuộc phỏng vấn trở nên hấp dẫn hơn từ cả hai phía. Nhưng tất nhiên, chúng tôi đã thảo luận về các mẫu, RAII và đa luồng trong C ++. Câu hỏi là bạn nói gì với một người không thể giải quyết fizzbuzz?
Chani

11
@RitwikG Thành thật mà nói, nếu ứng viên đang phỏng vấn cho vị trí lập trình và không thể đối phó với fizzbuzz, tôi có lẽ ... cười (hey, tôi chưa bao giờ nói tôi là một người phỏng vấn giỏi ;). Điều đó nói rằng, một vài tháng trước, tôi đã mất khoảng một vài ngày để chiến đấu với thứ trở thành một OBOE cực kỳ tầm thường trong mã của tôi. Tất cả chúng ta đều có những khoảnh khắc vui vẻ, và tôi sẽ không thực sự tập trung vào việc thí sinh làm hỏng một bài tập, có lẽ tôi sẽ nhanh chóng chuyển sang bài tiếp theo. Nếu họ thất bại lần tiếp theo, có lẽ tôi sẽ cảm ơn họ vì đã dành thời gian và tiếp tục.
yannis

1
@YannisRizos Đó có lẽ là một cách tiếp cận tốt; luôn luôn có cơ hội rằng người đó không làm tốt trong các tình huống phỏng vấn, hoặc bằng cách nào đó đã tránh được hoạt động modulo trong công việc của họ (mặc dù điều đó không tốt cho lắm, để nói rằng ít nhất). Theo kinh nghiệm của tôi, một số lượng đáng kể ứng viên bị cản trở khi được yêu cầu viết bất kỳ vòng lặp đơn giản nào (bằng bất kỳ ngôn ngữ nào họ chọn), ngay cả đối với các vị trí cấp cao. Bây giờ , tôi thấy hoàn toàn không thể biện minh.
Daniel B

Đó là một cái nhìn sâu sắc tốt về quá trình là tốt. Ứng cử viên rất lo lắng và tôi sẵn sàng trợ cấp cho việc đó. Khi cuối cùng anh ta bắt đầu nói chuyện về nỗ lực của mình trong một giải pháp, nó chỉ bị gây rối và tạo ra các điều kiện biên mà anh ta bỏ lỡ.

15

Trả lời

Tôi sẽ nói rằng nếu ứng viên không đủ quan tâm để hỏi, tôi sẽ không lãng phí hơi thở của mình, nhưng câu trả lời @Yannis_Rizos tốt hơn nhiều.

Phỏng vấn có nhịp độ khá nhanh. Tôi biết tôi thường tìm kiếm mọi thứ trong nhiều ngày sau một cuộc phỏng vấn.

Những người không thể viết mã FizzBuzz Classic

Tôi tưởng tượng một điểm gắn bó lớn là nhận thức được toán tử%. Bạn sẽ hy vọng rằng ai đó có thể suy nghĩ để so sánh (myInt / 3) == (myDouble / 3.0)nhưng có thể với sự căng thẳng của một cuộc phỏng vấn ... Tuy nhiên, FizzBuzz Classic buộc một cách tiếp cận mạnh mẽ, đưa nó vào loại vấn đề thuật toán dễ giải quyết nhất. Một gợi ý, bạn đã thử yêu cầu mọi người chỉ viết mã "Fizz" cho một nửa tín dụng và có thể thêm "Buzz" sau này như một sự cải tiến?

Tôi nghĩ rằng câu trả lời cuối cùng cho câu hỏi của bạn là thật khó để tìm ra những ứng cử viên tốt.

Câu hỏi phỏng vấn nói chung

Tôi thường thấy dễ dàng và hiệu quả hơn khi yêu cầu các ứng viên mô tả dự án lập trình cuối cùng mà họ hào hứng. Tôi đã thành công 100% với câu hỏi này, nghĩa là những người nói sôi nổi về một dự án lập trình và có thể trả lời các câu hỏi kỹ thuật về nó là những người tuyển dụng tuyệt vời và những người không thể, không. Điều này có tác dụng phụ tốt đẹp của việc đưa ứng viên thoải mái và khuyến khích thảo luận kết thúc mở. Với câu hỏi này, ứng viên sẽ, trong thực tế, cho bạn biết những gì họ phù hợp nhất cho.

Có thể tại một câu hỏi thuật toán bể nghĩ cũng cần thiết, nhưng tôi đã từ bỏ chúng để ủng hộ câu hỏi "dự án yêu thích".

Tổng (Con) của FizzBuzz

Câu hỏi phỏng vấn của bạn không tương đương với FizzBuzz:

Nếu chúng ta liệt kê tất cả các số tự nhiên dưới 10 là bội của 3 hoặc 5, chúng ta sẽ nhận được 3, 5, 6 và 9. Tổng của các bội số này là 23. Viết hàm tìm tổng của tất cả các bội của 3 hoặc 5 dưới 1000.

Trong đó FizzBuzz Classic buộc bạn phải trải qua n lần lặp (để in ra mọi số hoặc Fizz / Buzz), vấn đề của bạn có thể được thực hiện trong n / 5 + n / 3 + n / 15 lần lặp hoặc thậm chí không lặp lại - cố định trực tiếp tính toán điểm là có thể. Chương trình sau đây so sánh ba phương pháp sau:

public static void main(String[] args) {
  long n = Long.valueOf(args[0]).longValue();
  long sum = 0;
  long ms = System.currentTimeMillis();
  // Brute force method  Performance: cn
  for (long i = 1; i <= n; i++) {
    if ((i % 3) == 0) { sum += i;
    } else if ((i % 5) == 0) { sum += i; }
  }
  System.out.print("Brute force sum:    " + sum);
  System.out.println(" time: " + (System.currentTimeMillis() - ms));
  ms = System.currentTimeMillis();

  // Second solution: iterate through only numbers we are
  // interested in.  Performance: c * (n/3 + n/5 + n/15)
  // We counted multiples of 15 twice, so subtract one of them
  sum = countSum(n, 3) + countSum(n, 5) - countSum(n, 15);
  System.out.print("Only multiples sum: " + sum);
  System.out.println(" time: " + (System.currentTimeMillis() - ms));
  ms = System.currentTimeMillis();

  // Third solution: Use high school algebra.  Performance: c
  sum = sumSeries(n, 3) + sumSeries(n, 5) - sumSeries(n, 15);
  System.out.print("Sum of series:      " + sum);
  System.out.println(" time: " + (System.currentTimeMillis() - ms));
}

// Iteravely sum all multiples of skip
private static long countSum(long n, long skip) {
  long skipTotal = skip;
  long grandTotal = 0;
  while (skipTotal <= n) {
    grandTotal += skipTotal; skipTotal += skip;
  }
  return grandTotal;
}

// Thanks to @Caleb for pointing this out!  High school algebra
// tells us that the sum of a series is: (n * (a1 + an)) / 2
// where a1 is the first term and an is the nth term.  E.g. The
// sum of a series of 3 is: (n/3 * (3 + n - (n % 3))) / 2
// Since we are thinking about performance here, we'll shift
// right one instead of dividing by 2 for style points.  ;-D
private static long sumSeries(long n, long skip) {
  return (n/skip * (skip + n - (n % skip))) >> 1;
}

Đầu ra (tổng của FizzBuzz <1000):

$JDK_HOME/bin/java FizzBuzzNot 999
Brute force sum:    233168 time: 0
Only multiples sum: 233168 time: 0
Sum of series:      233168 time: 0

Với n lớn hơn để so sánh hiệu suất:

$JDK_HOME/bin/java FizzBuzzNot 1000000000
Brute force sum:    233333334166666668 time: 4744
Only multiples sum: 233333334166666668 time: 818
Sum of series:      233333334166666668 time: 0

Lưu ý cho những người bỏ phiếu này là lạc đề

Quan điểm của việc đưa ra một giải pháp cho câu hỏi này là chỉ ra rằng trong khi giải pháp vũ phu cho Sum of FizzBuzz tương tự như FizzBuzz Classic, thì có sẵn các giải pháp tốt hơn cho vấn đề Sum, khiến nó trở thành một vấn đề cơ bản khác. Sum of FizzBuzz cực kỳ khó khăn nếu bạn không nhớ công thức thích hợp cho tổng của một chuỗi hoặc không nhận ra rằng nó được áp dụng khi bước 3 hoặc 5.

Nếu bạn lấy lại công thức tính tổng của một chuỗi bằng cách chia một nửa chuỗi, đảo ngược một nửa và ghép chúng lại, bạn sẽ nhận được (n + 1) (n / 2) có thể đưa bạn xuống một con đường thực sự lộn xộn theo như phân chia số nguyên và phần còn lại bị cắt ngắn có liên quan. Phiên bản (n (a1 + an)) / 2 của công thức này hoàn toàn quan trọng cho một câu trả lời đơn giản cho tất cả các giá trị của n.


3
Điều này có thể được tính trực tiếp (Ruby): t = { |i| (i * (i+1)) / 2 }; fizzbuzz = { |n| 3 * t((n-1)/3) + 5 * t((n-1)/5) }
kevin cline


1
@ GlenH7 Vâng, tôi đã xóa nhận xét của mình vì đó là buzzkill. Glen xứng đáng là đạo cụ cho phân tích của anh ấy, ngay cả khi nó không trả lời câu hỏi TẠI TẤT CẢ: D (Bên cạnh đó, tôi đã hoàn toàn mã hóa và thử giải pháp của riêng mình trước đây)
Andres F.

2
Bạn đang tìm kiếm một tổng của một chuỗi, với điều kiện là chuỗi này có modulo = 0, công thức n / 2 * (m + nm) có thể được sử dụng. Trong đó m = số modulo và n = số phần tử trong chuỗi (còn gọi là sàn (x / m). Sau đó, dễ dàng, S (3) + S (5) - S (3 * 5) [sao cho một số số không được tính hai lần].
jmoreno

3
Một lý do bạn có thể gặp vấn đề, đó là bạn đang đếm một số số hai lần (những số đó chia hết cho 15). Để biết một chương trình ví dụ, hãy xem ideone.com/clone/oNWrhJ
jmoreno

8

Tôi cảm thấy mình nên chỉ cho anh ấy cách giải quyết vấn đề để ít nhất anh ấy có thể học hỏi kinh nghiệm. Nhưng một lần nữa, anh không hỏi. Cách đúng đắn để xử lý tình huống đó là gì?

Tôi không quan tâm cuộc phỏng vấn dành cho cấp độ nào, thậm chí thực sự nếu đó là câu hỏi "FizzBuzz" hay câu hỏi nâng cao. Nếu bạn yêu cầu một ứng viên giải một câu hỏi và họ không thể, nhưng thậm chí đừng bận tâm hỏi bạn câu trả lời đúng thì họ không xứng đáng với thời gian của bạn. Làm thế nào trên thế giới bạn có thể lười biếng về trí tuệ?!?

Và ngay cả khi bạn hoàn toàn lén lút với tư cách là một lập trình viên và chỉ đang cố gắng trâu bò vào công việc, tại sao bạn ít nhất sẽ thực dụng đến mức có được câu trả lời đúng ngay bây giờ, để bạn biết điều đó cho cuộc phỏng vấn tiếp theo?

Vì vậy, không, bạn không nên "đưa ra" câu trả lời, nhưng bạn nên yêu cầu ứng viên kiên quyết nghe câu trả lời đúng sau khi họ thất bại. Nếu họ không, đó là một lá cờ đỏ khổng lồ trong cuốn sách của tôi.

Nếu ai đó đã thổi phồng FizzBuzz trong một cuộc phỏng vấn Dev cấp cơ sở vì họ không thể nhớ toán tử mô đun và không thể tự mình tiếp tục mà không có nó, nhưng sau đó họ sẽ say mê làm lại khi bạn giải thích đúng câu trả lời, hoặc ít nhất là nói chuyện qua mã đúng với bạn, thì điều đó cũng tốt như trả lời đúng.


1
Tại sao? Bạn chỉ có thể Google trả lời sau. FizzBuzz là khá phổ biến. Tôi thực sự quan tâm nếu ai đó không biết phân chia mô đun.
Brian

Tôi đã có thể cho anh ta tín dụng vì đã cố gắng đưa ra một cái gì đó thay vì toán tử mô-đun, nhưng anh ta thậm chí không đến điểm đó. Tôi nghĩ rằng bạn có một điểm tốt với việc tập trung vào thất bại của anh ấy để yêu cầu câu trả lời. Quan sát của bạn phù hợp với một số thách thức khác xuất hiện trong cuộc phỏng vấn.

Tôi thực sự có ý kiến ​​về FizzBuzz ... nhưng đây là câu trả lời đúng. Nếu ứng viên không yêu cầu câu trả lời, đừng đưa cho họ.
James P. Wright

@ JamesP.Wright - Tôi đồng ý ở một mức độ nào đó, và đi vào cuộc phỏng vấn, tôi đã có một chút xấu hổ khi sử dụng nó như là câu hỏi mã hóa chính. Nó được cho là dễ dàng một cách nực cười, và tôi thậm chí còn mở đầu bằng một cảnh báo để không đọc quá nhiều câu hỏi. Tôi đã có một theo dõi cũng được cho là dễ dàng, và sau đó tôi đã có một phần ba cho phép anh ta thể hiện các kỹ năng thiết kế / phát triển cấp cao hơn. Chúng tôi không bao giờ có câu hỏi thứ ba ....

1
@ 0A0D, "toán học" liên quan đến FizzBuzz chỉ đơn giản là kiểm tra xem một biến đã cho có chia hết cho 3 và / hoặc 5. Mức độ toán học đó có trong hầu hết mọi ứng dụng bạn viết. Ngay cả những "nhà phát triển kinh doanh" như tôi, những người chỉ thực hiện cùng một loại dự án đều sử dụng trình độ toán học này. GlenH7, tôi thậm chí không chắc chắn nếu sử dụng đệ quy trong FizzBuzz sẽ gây ấn tượng với tôi hay làm tôi sợ .... Chắc chắn có vẻ như quá mức nguy hiểm.
Graham

4

Tôi đã gõ fizzbuzz trong khi nói chuyện điện thoại với người phỏng vấn trong buổi chiếu trước. Đó là điều mà ngay cả khi mọi người chưa từng nghe nói đến, bạn sẽ có thể cùng nhau ngồi sau một học kỳ tất nhiên làm việc nhưng chắc chắn sau khi có được trạng thái "cấp cao".

Thực sự không có sự phục hồi từ việc không thể làm điều đó. Đó là một trong những phiền toái cần thiết mà bạn cần phải tránh ra chỉ trong trường hợp.

Tôi sẽ nói rằng thật hợp lý khi phân phối dưới dạng màn hình trước để bạn không lãng phí thời gian của mọi người khi mang chúng đến trang web cho một cuộc phỏng vấn.


Đối với màn hình trước của chúng tôi, chúng tôi đã yêu cầu một số mã mẫu được cung cấp. Mã đó có một số tính năng ngôn ngữ C # từ trung cấp đến nâng cao, vì vậy tôi thực sự mong đợi anh ta sẽ lướt qua các câu hỏi logic chỉ trong một hoặc hai phút.

7
Khi mã mẫu được cung cấp không khớp với kiến ​​thức đã được chứng minh trong một cuộc phỏng vấn, não tôi ngay lập tức trở nên nghi ngờ về mã mẫu.
Graham

@Graham: Thuê anh ấy làm temp trong 6 tháng ..
Brian

@ 0A0D Đáng buồn là tôi chưa bao giờ làm việc ở một nơi cho phép sự linh hoạt đó. Nếu vị trí được quảng cáo là hợp đồng toàn thời gian, đó là TẤT CẢ chúng tôi có thể cung cấp cho người đó.
Graham

3
Không có hàng rào trong kịch bản đó. Nếu "mã mẫu" của anh ấy thể hiện kiến ​​thức vững chắc và anh ấy không thể mã fizzbuzz, hãy lấy mẫu ra và hỏi anh ấy chi tiết cụ thể. Nếu anh ấy không thể sao lưu, thì đã đến lúc dòng yêu thích của tôi "chúng tôi vẫn còn một số ứng cử viên để xem xét, chúng tôi sẽ liên lạc lại với bạn."
Michael Brown

4

Tôi thậm chí đã huấn luyện anh ấy để suy nghĩ về việc sử dụng một vòng lặp và rằng 3 và 5 thực sự đáng xem là trường hợp đặc biệt.

Thật thú vị khi biết những gì bạn nghĩ câu trả lời "chính xác" cho câu hỏi FizzBuzz-ish của bạn là gì. Từ nơi tôi ngồi, một từ tốt (bằng C) được viết cho thư của câu hỏi của bạn là:

int f(void) {
    // sum the multiples of 3 and of 5 and subtract multiples of 15 so we don't count them twice
    return ((1000/3)/2)*(999+3) + ((1000/5)/2)*(995+5) - ((1000/15)/2)*(990+15);
}

Một cái tốt hơn có thể là:

Tại sao bạn lại viết một chương trình để làm điều đó khi bạn có thể tính toán trực tiếp?

Vấn đề là có nhiều hơn một cách để lột da một con mèo và thực tế là ứng cử viên trong câu hỏi đã không ngay lập tức bắt đầu viết forcác vòng lặp và các modnhà khai thác không có nghĩa là anh ta ngu ngốc. Nếu bạn muốn biết những gì ứng viên biết, hãy thảo luận về vấn đề - tìm hiểu xem anh ấy đang nghĩ gì. Nếu anh ấy bị mắc kẹt hoặc bối rối, tìm ra nơi và tại sao. Anh ta có thể dẫn bạn đến một cách tiếp cận mà bạn chưa bao giờ xem xét.

Câu hỏi của tôi là liệu tôi có nên cho anh ta câu trả lời cho các câu hỏi logic hay không.

Là người phỏng vấn, đây không phải là nơi để bạn dạy cho ứng viên một bài học . Nếu họ thực sự không biết cách viết mã, hoàn toàn không cần phải làm họ xấu hổ bằng cách dựa vào số tiền họ không biết. Nếu họ đủ quan tâm để hỏi, thì bằng mọi cách, hãy thoải mái chia sẻ. Nếu không, kết thúc cuộc phỏng vấn, cảm ơn họ đã dành thời gian và chuyển sang ứng viên tiếp theo.


+1 cho câu trả lời chắc chắn trong đoạn cuối của bạn. Và bạn nêu lên một điểm tốt ở chỗ tôi nên nói câu trả lời "một" thay vì "câu trả lời". Có một số cách để giải quyết vấn đề cụ thể đó. Như discuss the problem, yếu tố đó đã đưa ra các câu hỏi khác trong cuộc phỏng vấn. Đáng tiếc, ứng cử viên đã ... ít hơn sắp tới trong việc trả lời. Tôi đã không thêm khía cạnh đó vào câu hỏi ban đầu vì tôi thực sự đang cố gắng tuân theo các hướng dẫn của P.SE về "chủ quan tốt".

1
"Đây không phải là nơi để bạn dạy cho ứng viên một bài học" - Tôi không đồng ý. Một lập trình viên giỏi luôn học hỏi. Nếu họ phản hồi bài học của bạn bằng cách hành động biết ơn vì đã học được những điều mới, thì đó là dấu hiệu cho thấy họ là một lập trình viên giỏi. Nếu họ nhún vai bài học của bạn, thì rất có thể họ là một lập trình viên tồi tệ.
nbv4

Nếu tôi là người phỏng vấn của bạn và bạn đã cho tôi câu trả lời như vậy, tôi sẽ giới thiệu bạn đến một khu học chánh cần giáo viên đại số. FizzBuzz là về việc thể hiện kiến ​​thức cơ bản về lập trình để người phỏng vấn có thể chuyển sang các câu hỏi sẽ phân biệt bạn với các lập trình viên cơ bản tốt khác. Câu trả lời của bạn rất thông minh, nhưng họ không chứng minh rằng bạn hiểu về vòng lặp, số học mô-đun, v.v., khiến cuộc phỏng vấn tiến lên theo giả định rằng những người biết đại số cũng biết lập trình (sai) hoặc chỉ đơn giản là bắt tay bạn và di chuyển trên (nhiều khả năng).
1172763

@ user1172763 Đó là điểm chính - không giống như FizzBuzz, câu hỏi phỏng vấn của OP có thể được trả lời bằng một phép tính duy nhất. Do đó, nó là một lựa chọn kém nếu quan điểm là xem ứng cử viên có thể viết một vòng lặp hay không. Bạn không thể mong đợi một ứng cử viên chọn một giải pháp chậm hơn, dài dòng hơn với giả định rằng bạn đang đặt câu hỏi cho một lý do cụ thể (và không nói). Thật vậy, người phỏng vấn có thể dễ dàng là một câu hỏi "mẹo" để xem liệu ứng viên có nhận thấy rằng việc lặp lại là hoàn toàn không cần thiết hay không. Đọc suy nghĩ của bạn không phải là trách nhiệm của ứng viên.
Caleb

2

"Vấn đề" của bạn là bạn là một người đồng cảm, vì vậy thật khó để xem ai đó đấu tranh với một vấn đề mà bạn biết câu trả lời (đây cũng là một vấn đề nếu bạn thực hiện các nghiên cứu về khả năng sử dụng). Từ quan điểm của một người phỏng vấn, bạn không bắt buộc phải dạy người được phỏng vấn cách lập trình hoặc giải quyết vấn đề, hoặc giải pháp cho một vấn đề mà bạn yêu cầu.

Khi bạn huấn luyện một người được phỏng vấn, không phải vì thế mà họ có thể có câu trả lời đúng. Đó là để bạn có thể xem liệu họ thực sự không thể giải quyết vấn đề hay nếu họ bị treo lên vì một hoặc hai sai lầm hoặc hiểu lầm.

Vì vậy, nếu bạn muốn đưa ra một người được phỏng vấn giải pháp sau khi thực tế, bạn đang làm nó hoàn toàn cho chính mình. Nói chung, tôi muốn sử dụng thời gian đó để cho phép người được phỏng vấn thử một vấn đề khác. Nhưng một lập trình viên "cao cấp" không thể trả lời FizzBuzz có lẽ sẽ bị loại khỏi danh sách. Nếu bạn quyết định đưa ra giải pháp, hãy chắc chắn rằng bạn không dại dột nghĩ rằng cuộc phỏng vấn diễn ra tốt hơn nó (nếu bạn thấy mình suy nghĩ, "anh ấy không thể giải quyết vấn đề, nhưng khi tôi giải thích thì anh ấy hiểu rất rõ", sau đó bạn đang đi trên một con đường nguy hiểm).

Và vâng, tôi đã là một người được phỏng vấn, người không thể thực hiện được nỗ lực đầu tiên trong việc giải quyết vấn đề phỏng vấn. Điều đó đơn giản có nghĩa là tôi cần học hỏi nhiều hơn nữa để theo đuổi công việc trong lĩnh vực đó.


2

Nhận được câu trả lời đúng không phải là phần quan trọng của bài kiểm tra này. Những gì bạn đang đo lường là cách tiếp cận giải quyết vấn đề của ai đó, cách họ tham gia vào câu hỏi, bất cứ điều gì sáng tạo hoặc thú vị mà họ đưa ra trên đường đi; những thứ đó Ngay cả khi họ nhận được câu trả lời sai, họ vẫn có thể khả thi theo các tiêu chí này.

OK, không biết toán tử mod là không thể tha thứ được, và theo các số liệu tôi đưa ra, ứng viên này dường như vẫn là một người bị xóa sổ, nhưng tôi không tin rằng việc đưa ra câu trả lời đúng cho ứng viên này sẽ là bất kỳ lợi ích.

Điều này đi xuống ý kiến ​​cá nhân của bạn từ đây. Bạn có muốn đưa ra phản hồi phỏng vấn với mục đích giúp ứng viên làm tốt hơn trong các cuộc phỏng vấn trong tương lai (và để những người phỏng vấn trong tương lai không phải chịu đựng những gì bạn vừa trải qua)? Nếu vậy, hãy phản hồi phản hồi của bạn theo các thuật ngữ tôi vừa nêu ở trên: nói với họ rằng đó không chỉ là câu trả lời đúng mà là cách họ làm việc để đi đến câu trả lời là một yếu tố quan trọng.


+1 cho nhận xét của how they work to arrive at the answer is a critical factor. Mặc dù tôi mong đợi một toán tử mô đun sẽ được sử dụng, nhưng đó chỉ là vì đó là cách tôi sẽ giải quyết nó. Tôi đã rất cởi mở để xem bất kỳ cách tiếp cận nào khác đã giải quyết vấn đề mà không tạo ra các lỗi điều kiện biên rõ ràng (xem các bình luận khác nhau của tôi về cách tiếp cận với đệ quy ....).

2

Tôi cảm thấy mình nên chỉ cho anh ấy cách giải quyết vấn đề để ít nhất anh ấy có thể học hỏi kinh nghiệm. Nhưng một lần nữa, anh không hỏi. Cách đúng đắn để xử lý tình huống đó là gì?

Cách tôi nhìn thấy, không có tình huống để xử lý. Giả sử rằng bạn đã từ chối đơn đăng ký của anh ấy, sự thiếu quan tâm (rõ ràng) của ứng viên không phải là điều bạn cần quan tâm.

Thật vậy, ngay cả khi anh ta hỏi, bạn không nợ anh ta một lời giải thích. Và nếu bạn đã nói chuyện với những người nhân sự của bạn về vấn đề này, họ có thể khuyên bạn rằng các cuộc thảo luận thêm với ứng viên là không hợp lý vì lý do pháp lý.


Cũng cần lưu ý rằng vấn đề FizzBuzz có câu trả lời "tốt nhất" khác nhau tùy thuộc vào cách bạn hỏi nó. Nếu bạn yêu cầu giải pháp "đơn giản nhất" và giải pháp "hiệu quả nhất", câu trả lời tốt nhất hoàn toàn khác nhau. Và điều này có thể tô màu cho phán đoán của bạn không công bằng ... nếu bạn không rõ ràng theo cách bạn đặt câu hỏi. (Mặt khác, một ứng viên giỏi / có kinh nghiệm sẽ có tầm nhìn xa để làm rõ điều đó trước khi bắt đầu viết mã ...)


2

Để trả lời câu hỏi của bạn, không tôi sẽ không đưa ra câu trả lời. Nếu người đó muốn trở thành một kỹ sư phần mềm tốt hơn, họ sẽ tìm thấy câu trả lời. Nếu bạn cho họ câu trả lời, bạn đang cướp mất cơ hội này.

Câu hỏi phù hợp hơn là khi nào bạn có thể gọi cho mình một nhà phát triển cao cấp? Điều này khác nhau giữa các tổ chức và quốc gia. Ví dụ, một công ty tôi đã làm việc với các Kỹ sư phần mềm được coi là có 5 năm kinh nghiệm làm người cao niên. Không có sự nhấn mạnh về chất lượng của trải nghiệm, chỉ là độ dài.

Cho đến khi chúng tôi đưa ra một tiêu chuẩn sẽ phân loại tất cả các Kỹ sư phần mềm bất kể ngôn ngữ của họ, chúng tôi chỉ còn lại cá nhân quyết định mức độ kỹ năng của họ. Và chúng tôi sẽ tiếp tục nghe về "Kỹ sư cao cấp" thất bại trong bài kiểm tra kỹ năng thô sơ nhất.

Một vài tuần trước, câu hỏi đã được hỏi "Khi nào bạn nên tự gọi mình là Nhà phát triển cao cấp" . Tôi cũng đã viết một bài blog về chủ đề này.


Bạn có vui lòng xem lại liên kết blog của bạn?
André

@ Liên kết André được cập nhật.
Chuck Conway
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.