2010-06-22 35 views
6

Khi phỏng vấn sinh viên tốt nghiệp, tôi thường hỏi họ về cấu trúc dữ liệu, thuật toán và lý thuyết phức tạp. Tôi thực sự muốn hỏi một câu hỏi mà sẽ cho phép họ thể hiện sự quen thuộc của họ với các khái niệm đa luồng, mà không có vấn đề về ngôn ngữ cụ thể.Bất kỳ chủ đề nào liên quan đến câu hỏi phỏng vấn xin việc tốt?

Bất kỳ câu hỏi hay nào? Câu hỏi duy nhất tôi có thể nghĩ đến là viết một Singleton hỗ trợ truy cập đa luồng.

+0

Người đàn ông, tôi đã thất bại trong cuộc phỏng vấn việc làm vì tôi không bận tâm đến ổ khóa, v.v. Sử dụng ngôn ngữ được thiết kế cho đồng thời có lợi thế . –

Trả lời

3

Tôi thấy câu hỏi "viết cho tôi hàng đợi người tiêu dùng-nhà sản xuất" kinh điển là khá tốt. Bạn có thể nói về đồng bộ hóa theo cách handwavy trước đó trong năm phút hoặc lâu hơn (ví dụ: bắt đầu bằng "Object.wait() làm gì? Các phương pháp khác trên Object có liên quan gì? Bạn có thể cho tôi ví dụ về thời điểm bạn có thể sử dụng chúng không? kỹ thuật đồng thời bạn có thể sử dụng trong thực tế [bởi vì thực sự, nó khá hiếm hoi mà thực sự sử dụng chờ đợi/thông báo nguyên thủy là cách tiếp cận tốt nhất]? "). Hãy chắc chắn rằng các địa chỉ ứng cử viên (hoặc ít nhất là làm cho rõ ràng ông nhận thức được) cả hai nguyên tử ("cập nhật bị mất") và biến động (tầm nhìn của giá trị mới trên các chủ đề khác)

Sau đó, sau khi bạn đã có một cuộc trò chuyện về lý thuyết về những điều này, khiến họ mất vài phút để viết mã cho hàng đợi sản xuất hàng tiêu dùng nguyên thủy. Điều này nên đơn giản đối với bất kỳ ai thực sự hiểu những gì họ đang nói ở trên, nhưng nó sẽ loại bỏ những người có thể "nói chuyện" nhưng không thực sự hiểu nó trong thực tế (được cho là nhóm nguy hiểm nhất).

Điều tôi thích về các bài tập mã hóa mini này là chúng thường dễ mở rộng. Ví dụ, nếu ứng cử viên hoàn thành nhiệm vụ một cách dễ dàng, bạn có thể hỏi làm thế nào họ sẽ mở rộng nó cho tình huống XXX - phát minh ra các yêu cầu mà bạn biết sẽ đẩy các giới hạn của giải pháp noddy mà bạn yêu cầu. Điều này không chỉ cho phép bạn điều chỉnh độ sâu các câu hỏi mà bạn yêu cầu mà còn cung cấp thông tin chi tiết về cách ứng viên xử lý các yêu cầu và sửa đổi thiết kế hiện có (điều này khá quan trọng trong ngành này).

1

Ở đây bạn có thể tìm thấy một số chủ đề để thảo luận:

  • đề thi (kernel vs user space)
  • chủ đề local storage
  • đồng bộ hóa nguyên thủy
  • bế tắc, livelocks
1
  • Sự khác biệt giữa mutex và semaphore.
  • Sử dụng các biến điều kiện.
  • Khi không sử dụng đề tài. (ví dụ: ghép kênh IO)
1

Nói chuyện với họ về một chủ đề phổ biến nhưng không nổi tiếng, nơi xử lý chuỗi là điều cần thiết.

Tôi khuyên bạn nên xây dựng một máy chủ web với họ, tất nhiên, chỉ trên giấy hoặc chỉ bằng lời nói. Kết quả sẽ trông giống như thế này: có một chủ đề chính, nó nghe trên một ổ cắm. Khi một cái gì đó đến, nó đi qua ổ cắm vào trong hồ bơi, sau đó luồng này trở về ổ cắm nghe. Hồ bơi có số lượng khe cố định. Các luồng xử lý yêu cầu được dành riêng để lấy công việc từ nhóm. Tìm hiểu, những gì tốt hơn, nếu các chủ đề đang kiểm tra hồ bơi đồng thời, hoặc chủ đề chính listner chọn một khe/thread miễn phí cho các yêu cầu mới đến. Cố gắng viết một mã giả nhỏ, hoặc một đồ thị cho cả hai bên của việc xử lý hồ bơi.

Hãy giới thiệu một ứng dụng nhỏ: truy cập trang, cho biết có bao nhiêu yêu cầu trang đã được thực hiện kể từ khi khởi động máy chủ. Đừng nói với họ rằng bộ đếm phải được bảo vệ chống lại sự sửa đổi đồng thời, hãy để chúng tìm ra cách để làm điều này với các mutex hoặc đồng bộ hóa hoặc bất cứ thứ gì. Có thể bạn có thể bỏ qua phần máy chủ web, ứng dụng truy cập trang dễ xác định hơn.

Ví dụ khác là trò chuyện, với hơn 2 khách hàng và máy chủ, tìm hiểu cách khắc phục sự cố, tất cả thư phải đến theo cùng thứ tự cho tất cả khách hàng. Hoặc trò chơi phản xạ: máy chủ chờ đợi 1,5 giây ngẫu nhiên, sau đó nói "peek-a-boo" và người chơi thắng người nhấn phím khoảng trắng trước. Chỉ định nó với 2 người chơi, sau đó thử mở rộng nó cho người chơi N.


Ngoài ra, hãy lưu ý NPP. NPP là viết tắt: "lập trình viên không lập trình". Có những dudes, những người có thể nói về các vấn đề lập trình, họ biết tất cả các chữ viết tắt 3/4 chữ cái (có trong thế giới Java, EJB, JSP, XSLT và yêu thích của tôi: POJO, có nghĩa là Java thuần khiết Đối tượng, lol), họ hiểu và sửa đổi mã, hoặc thực hiện các chương trình tương tự từ cơ sở, nhưng chúng không thành công ngay cả với các vấn đề nhỏ, nó phải tự làm, ví dụ tìm phần tử gần nhất với một cơ sở trong một mảng. Đôi khi phải mất nhiều tháng, cho đến khi nó quay ra. Họ thực hiện tốt ở các cuộc phỏng vấn, bởi vì họ chuẩn bị cho nó. Có thể họ thậm chí không biết, rằng họ là NPPs, đây là một hiệu ứng đã biết: http://en.wikipedia.org/wiki/Dunning-Kruger_effect

Thật khó để nhận ra những người khác, những người chưa từng nghe về thư viện hoặc mẫu thời thượng. phỏng vấn xin việc. (Nhận xét cá nhân: cuộc phỏng vấn cuối cùng của tôi là vào năm 1999, và có vẻ như tôi sẽ không phỏng vấn nữa. Tôi chưa bao giờ nghe về các trang web động trước đây, nhưng tôi đã tìm ra cụm từ "phiên" trong cuộc phỏng vấn, câu hỏi là làm thế nào để xây dựng một ứng dụng web treo đơn giản. Tôi đã được thuê.)

Các vấn đề liên quan