Các câu hỏi cơ bản bao gồm:
Tôi nghĩ việc này thường giúp yêu cầu ứng viên của bạn hoàn thành một bài tập mã hóa đơn giản như:
- Viết lớp danh sách liên kết của riêng bạn mà không sử dụng các lớp tích hợp.
- Viết lớp hashtable của riêng bạn mà không cần sử dụng các lớp dựng sẵn.
- Viết một lớp đại diện cho cây nhị phân. Viết một phương thức đi qua tất cả các nút của cây.
- Viết phương thức để thực hiện tìm kiếm nhị phân trên một mảng mà không sử dụng các phương thức dựng sẵn.
- Vẽ một lược đồ cơ sở dữ liệu cho một blog. Mỗi người dùng chỉ có một blog, mỗi blog có nhiều danh mục, mỗi danh mục có nhiều bài đăng và mỗi bài đăng có thể thuộc về nhiều hơn một danh mục. Yêu cầu ứng viên của bạn viết các truy vấn để lấy thông tin cụ thể ra.
Tiếp theo, tìm kiếm bí quyết kỹ thuật cụ thể:
- (Trình xử lý sự kiện) Tạo một lớp với trình xử lý sự kiện tùy chỉnh, tạo một lớp khác nối vào trình xử lý sự kiện tùy chỉnh.
- (XML) Tải một tài liệu XML và chọn tất cả các nút có thuộc tính x, y và z.
- (Lập trình hàm) Tạo một hàm chấp nhận hàm khác làm tham số. Hàm Map hoặc Fold hoạt động thực sự tốt cho việc này.
- (Reflection) Viết hàm xác định xem một lớp có thuộc tính cụ thể không.
- (Regex) Viết biểu thức chính quy sẽ loại bỏ tất cả các thẻ khỏi một khối HTML.
Không có câu hỏi nào trong số này là những câu hỏi đặc biệt khó để một lập trình viên C # thành thạo trả lời, và chúng sẽ cho bạn ý tưởng tốt về những điểm mạnh đặc biệt của ứng viên của bạn. Bạn cũng có thể muốn làm việc trong một vài câu hỏi / mẫu mã sử dụng các mẫu thiết kế cụ thể.
[Chỉnh sửa để làm rõ] :
Có vẻ như nhiều người không hiểu tại sao tôi lại hỏi những loại câu hỏi này. Hãy để tôi chạm vào một vài bình luận của mọi người (thay vào đó tôi không trích dẫn trực tiếp, nhưng thay vào đó là diễn giải):
Q: Lần cuối cùng có ai sử dụng chất bay hơi hoặc tài liệu tham khảo yếu?
Trả lời: Khi tôi phỏng vấn kỹ thuật, tôi sẽ xem liệu một người có hiểu các tính năng cấp cao và cấp thấp của .NET hay không. Volatiles và tham chiếu yếu là hai tính năng cấp thấp do .NET cung cấp - ngay cả khi các tính năng này không được sử dụng thường xuyên trong thực tế, câu trả lời cho những câu hỏi này cực kỳ tiết lộ:
Một sự hiểu biết tốt về các chất bay hơi chứng tỏ rằng một người hiểu cách tối ưu hóa trình biên dịch thay đổi tính chính xác của mã, cách các luồng giữ các bản sao trạng thái chia sẻ cục bộ có thể không đồng bộ tại bất kỳ thời điểm nào và nhận biết tối thiểu một số sự phức tạp của mã đa luồng .
Một sự hiểu biết tốt về các tài liệu tham khảo yếu chứng tỏ rằng một người biết về các chi tiết thân mật của người thu gom rác và cách nó quyết định khi nào giải phóng bộ nhớ. Chắc chắn, bạn có thể hỏi các ứng viên "làm thế nào một công cụ thu gom rác hoạt động", nhưng hỏi về các tài liệu tham khảo yếu sẽ nhận được câu trả lời tốt hơn, chu đáo hơn.
.NET là một ngôn ngữ khá trừu tượng, nhưng các nhà phát triển ngôi sao hầu như luôn có hiểu biết sâu sắc về CLR và các chi tiết cấp thấp về thời gian chạy của .NET.
Q: Tại sao bất cứ ai cũng cần phải thực hiện danh sách hashtable hoặc liên kết của riêng họ?
Trả lời: Tôi không ngụ ý rằng lớp Từ điển kém hơn hoặc mọi người nên tự tạo ra hashtable của mình. Đây là một câu hỏi cơ bản để kiểm tra xem một người có hiểu biết tối thiểu về cơ sở dữ liệu hay không . Đó là những gì những câu hỏi kiểm tra cho: sự hiểu biết tối thiểu trần.
Bạn tìm hiểu về các hashtables và danh sách được liên kết này vào ngày đầu tiên của Cấu trúc dữ liệu 101. Nếu ai đó không thể viết một hashtable hoặc danh sách được liên kết từ đầu, thì họ có một khoảng cách lớn về kiến thức kỹ thuật.
Q: Tại sao những câu hỏi này rất định hướng?
Trả lời: Bởi vì tiêu đề của chủ đề này là "câu hỏi mà mọi nhà phát triển .NET giỏi nên biết". Mỗi nhà phát triển .NET bắt đầu sự nghiệp bằng cách viết các ứng dụng thô sơ và 90% tất cả những người phát triển ứng dụng kiếm sống đều quan tâm đến các ứng dụng kinh doanh trực tuyến.
Tôi nghĩ rằng các câu hỏi kiểm tra kiến thức của một người về các ứng dụng kinh doanh phù hợp trong hầu hết các trường hợp, trừ khi bạn đang tìm kiếm các nhà phát triển trong các hốc rất cụ thể, chẳng hạn như phát triển trình biên dịch, phát triển công cụ trò chơi, chứng minh định lý, xử lý hình ảnh, v.v. .