Bài kiểm tra phỏng vấn lập trình C # đáng sợ - lời khuyên nào? [đóng cửa]


21

Tôi có một công việc C # dev có thể xếp hàng nhưng trước khi tôi có thể phỏng vấn, tôi cần phải vượt qua một bài kiểm tra với cơ quan tuyển dụng.

Bây giờ mặc dù tôi là một nhà phát triển cao cấp với hơn 10 năm kinh nghiệm lập trình và hơn 3 năm trong số này với c #, tôi thực sự không mong đợi bài kiểm tra này và tôi nghĩ có khả năng tôi sẽ thất bại.

Theo kinh nghiệm của tôi, những bài kiểm tra này không thể đoán trước được, yêu cầu bạn sử dụng những thứ mà bạn hiếm khi sử dụng trong các tình huống công việc hàng ngày.

Tôi cần lời khuyên tốt nhất của bạn về những gì tôi nên xem lại - một cuốn sách hay trang web tốt chẳng hạn. Tôi có ít hơn 1 tuần để chuẩn bị và điều cần thiết là tôi vượt qua điều này.

Cảm ơn trước.

EDIT: Để chứng minh thêm mối quan tâm của tôi khi viết các bài kiểm tra như vậy - Hãy xem xét câu hỏi sau:

12) Một sự kiện là:

   a) The result of a users action - correct answer
   b) The esult of a party
   c) code to force users action

Câu trả lời đúng theo bài kiểm tra là A, nhưng vì tôi đã thực hiện phát triển SOA (thường là khi các sự kiện có thể dựa trên các sự kiện hệ thống (không phải hành động của người dùng) Tôi chắc chắn 100% một sự kiện không phải điều khiển bởi một hành động của người dùng. Đây cũng là một câu hỏi C # (không phải là câu hỏi của ASP.net). Dựa trên sự hiểu biết của tôi, tôi không thể thực sự phát hiện ra một câu trả lời đúng nhưng B có vẻ là câu hỏi hay nhất (nếu định nghĩa về bữa tiệc là: bất kỳ thực thể có thể kích hoạt một sự kiện. Những loại câu hỏi này làm tôi sợ.


4
Nếu bạn là 'nhà phát triển cao cấp' và bạn đã sử dụng C # hàng ngày trong ba năm, bạn sẽ ổn thôi. Những bài kiểm tra này thường nhằm loại bỏ những người không biết ngôn ngữ hoặc cách sử dụng ngôn ngữ đó. Nếu bạn đã sử dụng nó hàng ngày trong 3 năm, thì bạn sẽ gặp phải gần như tất cả những cạm bẫy trong một bài kiểm tra nhất định.
George Stocker

11
@GeorgeStocker - thực sự, tôi đã phải thực hiện một số thử nghiệm này (nhắm nhiều hơn vào khung .NET đầy đủ) và chúng rất chi tiết. Tôi thấy chúng khá khó khăn vì trước tiên chúng đi vào các khu vực của khung (như WCF) nơi tôi không có nhiều kinh nghiệm, ngoài ra bạn phải biết những thứ như tùy chọn cấu hình nào bạn sẽ sử dụng trong tệp .config để bật một số tùy chọn tối nghĩa. Đó là thứ bạn hiếm khi bận tâm ghi nhớ vì có lẽ bạn chỉ từng sử dụng nó một lần và Google ở ​​đó. Tôi tìm thấy một chút bực bội.
Scott Whitlock

7
Ồ, và một trong những câu hỏi tôi đã sai là, "trong VB.NET, từ khóa được sử dụng để khai báo một cấu trúc là gì? A) struct b) Struct c) struct d) Architecture". Tôi đã suy nghĩ "intellisense biết điều này vì vậy tôi không phải làm thế!" Bây giờ, tất nhiên, câu trả lời đã được ghi vào bộ nhớ của tôi.
Scott Whitlock

17
@ScottWhitlock: Không có cách nào bạn có thể chuẩn bị đầy đủ cho một cuộc phỏng vấn được thiết kế kém. Tại một số điểm, bạn phải tin tưởng rằng họ đủ năng lực để hỏi và đánh giá dựa trên các lĩnh vực bạn thực sự tuyên bố là chuyên môn, cũng như một số khả năng khái niệm. Nếu họ không, thì có lẽ bạn sẽ có một thời gian khốn khổ làm việc cho họ.
Aaronaught

2
Đây là bài kiểm tra ngôn ngữ C # hay bài kiểm tra .NET Framework?
Kiến

Câu trả lời:


24

Khá cũ, có thể bài đăng trên blog này hữu ích cho bạn: Những nhà phát triển .NET tuyệt vời cần biết gì (Câu hỏi phỏng vấn .NET nhiều hơn)

Mọi người viết mã

  • Mô tả sự khác biệt giữa một chủ đề và một quá trình?
  • Dịch vụ Windows là gì và vòng đời của nó khác với EXE "tiêu chuẩn" như thế nào?
  • Dung lượng bộ nhớ tối đa mà bất kỳ quá trình đơn lẻ nào trên Windows có thể giải quyết là bao nhiêu? Đây có khác với bộ nhớ ảo tối đa cho hệ thống không? Làm thế nào điều này sẽ ảnh hưởng đến một thiết kế hệ thống?
  • Sự khác biệt giữa EXE và DLL là gì?
  • Gõ mạnh so với gõ yếu là gì? Cái nào được ưa thích? Tại sao?
  • Sản phẩm của Corillian là một "Thành phần chứa." Đặt tên cho ít nhất 3 bộ chứa thành phần được gửi ngay bây giờ với Windows Server Family.
  • Một PID là gì? Làm thế nào là hữu ích khi xử lý sự cố một hệ thống?
  • Có bao nhiêu quá trình có thể lắng nghe trên một cổng TCP / IP?
  • GAC là gì? vấn đề gì nó giải quyết?

Nhà phát triển .NET cấp trung

  • Mô tả sự khác biệt giữa lập trình hướng giao diện, hướng đối tượng và hướng đối tượng.
  • Mô tả Giao diện là gì và nó khác với Lớp như thế nào.
  • Phản xạ là gì?
  • Sự khác biệt giữa các dịch vụ web XML khi sử dụng ASMX và .NET Remote bằng SOAP là gì?
  • Là hệ thống loại được đại diện bởi XmlSchema và CLS đẳng cấu?
  • Về mặt khái niệm, sự khác biệt giữa ràng buộc sớm và ràng buộc muộn là gì?
  • Là sử dụng hội. Tải một tham chiếu tĩnh hoặc tham chiếu động?
  • Khi nào thì sử dụng Association.LoadFrom hoặc Association.LoadFile là phù hợp?
  • Tên đủ điều kiện Asssugging là gì? Nó có phải là một tên tệp? Nó khác biệt như thế nào?
  • Điều này có hợp lệ không? Hội.Load ("foo.dll");
  • Làm thế nào là một hội đồng được đặt tên mạnh mẽ khác với một hội đồng không được đặt tên mạnh mẽ?
  • DateTimes có thể là null?
  • JIT là gì? NGEN là gì? Những hạn chế và lợi ích của mỗi là gì?
  • Làm thế nào để trình thu gom rác thế hệ trong .NET CLR quản lý trọn đời đối tượng? Hoàn thiện không xác định là gì?
  • Sự khác biệt giữa Finalize () và Dispose () là gì?
  • Mẫu sử dụng () hữu ích như thế nào? IDis Dùng là gì? Làm thế nào để nó hỗ trợ quyết toán quyết định?
  • Dòng lệnh hữu ích này làm gì? danh sách nhiệm vụ / m "mscor *"
  • Sự khác biệt giữa in-Proc và out-Proc là gì?
  • Công nghệ nào cho phép giao tiếp ngoài luồng trong .NET?
  • Khi bạn đang chạy một thành phần trong ASP.NET, quá trình đó đang chạy trong Windows XP là gì? Windows 2000? Windows 2003?

Nhà phát triển / Kiến trúc sư cao cấp

  • Có gì sai với một dòng như thế này? DateTime.Pude (myString);
  • PDB là gì? Họ phải được đặt ở đâu để gỡ lỗi để làm việc?
  • Độ phức tạp chu kỳ là gì và tại sao nó quan trọng?
  • Viết một khóa tiêu chuẩn () cộng với kiểm tra hai lần của Wap để tạo một phần quan trọng xung quanh quyền truy cập biến.
  • FullTrust là gì? Các hội đồng GAC'ed có FullTrust không?
  • Mã của bạn nhận được lợi ích gì nếu bạn trang trí nó bằng các thuộc tính yêu cầu quyền Bảo mật cụ thể?
  • Cái này làm gì gacutil / l | tìm / tôi "Corillian"
  • Cái này làm gì sn -t foo.dll
  • Những cổng nào phải được mở cho DCOM qua tường lửa? Mục đích của Cảng 135 là gì?
  • Tương phản OOP và SOA. Nguyên lý của mỗi là gì?
  • XmlSerializer hoạt động như thế nào? Những quyền ACL nào mà một quá trình sử dụng nó yêu cầu?
  • Tại sao bắt (Exception) hầu như luôn luôn là một ý tưởng tồi?
  • Sự khác biệt giữa Debug.Write và Trace.Write là gì? Khi nào nên sử dụng mỗi?
  • Sự khác biệt giữa bản dựng Debug và Release là gì? Có sự khác biệt đáng kể về tốc độ? Tại sao hay tại sao không?
  • JITting có xảy ra trên mỗi lắp ráp hoặc mỗi phương pháp không? Điều này ảnh hưởng đến tập làm việc như thế nào?
  • Tương phản việc sử dụng một lớp cơ sở trừu tượng so với một giao diện?
  • Sự khác biệt giữa a.Equals (b) và a == b là gì?
  • Trong bối cảnh so sánh, nhận dạng đối tượng so với tương đương đối tượng là gì?
  • Làm thế nào một người có thể làm một bản sao sâu trong .NET?
  • Giải thích suy nghĩ hiện tại xung quanh IClonable.
  • Quyền anh là gì?
  • Chuỗi là một loại giá trị hoặc một loại tham chiếu?
  • Tầm quan trọng của mẫu "PropertySpecified" được sử dụng bởi XmlSerializer là gì? Vấn đề gì nó cố gắng giải quyết?
  • Tại sao các tham số ra là một ý tưởng tồi trong .NET? Có phải họ không?
  • Các thuộc tính có thể được đặt trên các tham số cụ thể cho một phương thức không? Tại sao điều này hữu ích?

Nhà phát triển thành phần C #

  • Juxtapose sử dụng ghi đè với mới. Bóng là gì?
  • Giải thích việc sử dụng ảo, niêm phong, ghi đè và trừu tượng.
  • Giải thích tầm quan trọng và cách sử dụng của từng thành phần của chuỗi này: Foo.Bar, Phiên bản = 2.0.205.0, Văn hóa = trung tính, PublicKeyToken = 593777ae2d274679d
  • Giải thích sự khác biệt giữa công cộng, được bảo vệ, riêng tư và nội bộ.
  • Bạn có được lợi ích gì khi sử dụng Hội đồng liên kết chính (PIA)?
  • NUnit biết cơ chế nào để kiểm tra?
  • Sự khác biệt giữa: Catch (Exception e) {throw e;} và Catch (Exception e) {throw;}
  • Sự khác biệt giữa typeof (foo) và myFoo.GetType () là gì?
  • Giải thích những gì đang xảy ra trong hàm tạo đầu tiên: lớp công khai c {public c (chuỗi a): this () {;}; công khai c () {;}} Cấu trúc này hữu ích như thế nào?
  • Đây là cái gì Điều này có thể được sử dụng trong một phương pháp tĩnh?

Nhà phát triển ASP.NET (UI)

  • Mô tả cách POST mẫu dựa trên trình duyệt trở thành sự kiện phía máy chủ như Nút1_OnClick ...

1
Mọi câu trả lời được liệt kê ở đây đều hữu ích và tốt, tuy nhiên tôi đã xem qua mọi câu hỏi trong danh sách của bạn (mất 4 giờ) và viết một bài kiểm tra mẫu trực tuyến và thông qua. Tôi sẽ khuyến khích bất kỳ nhà phát triển .net nào đi qua những câu hỏi đó ít nhất một lần và đảm bảo bạn hiểu câu trả lời và đảm bảo bạn có được ý kiến ​​thứ 2 và thứ 3. Rất nhiều người trả lời các câu hỏi (được tìm thấy trên Google), nhưng rất nhiều câu trả lời không đôi khi thậm chí sai. Vì vậy, hãy cẩn thận. Kiểm tra chéo những gì bạn tìm thấy câu trả lời.
JL01

2
Liên kết tốt! Tôi ngạc nhiên khi biết bao nhiêu trong số những người tôi biết. này.Ego ++;
Justin Tự

@justnS: Điều tương tự cũng xảy ra với tôi khi tôi phát hiện ra bài viết. :-)
Konamiman

Tôi đã đi phỏng vấn vài tuần trước và họ đã in nó ra để tôi trả lời. mà với tôi, phản ánh trên người phỏng vấn.
dbones

1
Khi nào bạn sẽ thêm câu trả lời? ;)
Thijs van Điền

10

Chỉ cần đi đi, Renee

Tôi đã thực hiện các bài kiểm tra như thế này một vài lần. Bây giờ tôi chỉ cần đi bộ. Các bài kiểm tra đo các bit tầm thường nhất của kiến ​​thức lập trình. Bạn có muốn làm việc cho một người nghĩ rằng các bài kiểm tra này là một cách tốt để đánh giá các lập trình viên? Tôi không.


1
Chúng là một cách tốt như một tiêu chuẩn tối thiểu , tức là một điều kiện cần thiết , nhưng không phải là một điều kiện đủ .
Sklivvz

4
@Sklivvz: có thể, nếu họ là những bài kiểm tra tốt . Hầu hết các bài kiểm tra thương mại là những bài tập ngớ ngẩn trong câu đố: "Bạn sẽ sử dụng lớp nào để đọc tệp văn bản?" Một nhà phát triển giỏi có thể nói chuyện trong mười phút về sự khác biệt giữa luồng byte và luồng ký tự và chi tiết về mã hóa UTF và vẫn bỏ lỡ câu hỏi này. Khi thông tin có thể truy cập dễ dàng, không có điểm nào trong việc ghi nhớ nó.
kevin cline

2
Tôi đồng ý với Kevin. Có quá nhiều thông tin không liên quan đến công việc của bạn có thể nằm trong các bài kiểm tra. Đó là lý do tại sao họ đã phát minh ra Google và IntelliSense - khi chúng tôi cần câu trả lời, chúng tôi tìm thấy chúng, trên cơ sở cần sử dụng
ADNow

2
Nó phụ thuộc vào ont anh ấy kiểm tra. Có những bài kiểm tra tôi bỏ đi, nhưng sau đó có những bài kiểm tra tốt. Chúng tôi có một bài kiểm tra câu hỏi lập trình 3 đơn giản. Câu hỏi đầu tiên là viết một ứng dụng C # đơn giản. Câu hỏi thứ hai yêu cầu viết 5 truy vấn SQL đơn giản. Thrid là một câu hỏi không thể trả lời mà không có người kiểm tra yêu cầu thêm thông tin. Các câu hỏi thứ nhất và thứ hai loại trừ các lập trình viên hoàn toàn bất tài. Điều đó giúp chúng tôi tiết kiệm thời gian từ việc phỏng vấn những người không xứng đáng với thời gian của chúng tôi. Câu hỏi thứ ba cho chúng ta cái nhìn sâu sắc về cách lập trình viên tiếp cận giải quyết vấn đề. Những thứ rất có giá trị.
Pete

8

Tôi đã ở trong một tình huống như của bạn năm ngoái. Đã lâu lắm rồi tôi mới tham gia một cuộc phỏng vấn đến nỗi tôi sợ nó. Tôi đã tìm kiếm các câu hỏi phỏng vấn C # và tìm thấy một số trang web (nhiều trong số chúng được liệt kê bởi các áp phích khác) và tôi đã nghiên cứu chúng. Điều đáng ngạc nhiên là 90% các cuộc phỏng vấn là từ chính trang web đó, nguyên văn . Tôi đoán người phỏng vấn cũng sử dụng Google để tìm câu hỏi :)


6

Tôi hoàn toàn đồng ý với bạn về:

kiểm tra là không thể đoán trước yêu cầu bạn công cụ bạn hiếm khi sử dụng trong các tình huống công việc hàng ngày.

..nhưng họ là một phần của quá trình, vì vậy không có gì chúng ta thực sự có thể làm về nó. Tôi là một cái gì đó giống như bạn với khoảng 10 năm kinh nghiệm trong đó khoảng 5 trong .NET C #. Tôi thấy rằng hai cuốn sách RẤT hay này:

C # ở độ sâu

C # trong một Nutshell

nên bao gồm mọi thứ bạn cần biết về C #. Phần còn lại là các kỹ năng và kỹ năng của riêng bạn mà bạn tiếp thu trên các công nghệ cụ thể dựa trên C # như ASP.NET, v.v.


3
nhưng chúng là một phần của quá trình, vì vậy không có gì chúng ta thực sự có thể làm về nó. Làm thế nào về việc ủng hộ không có các bài kiểm tra lập trình ngớ ngẩn tại nơi bạn làm việc như là một phần của quá trình tuyển dụng? Quá trình tuyển dụng nên thể hiện năng lực của bạn, không phải là bạn có thể ghi nhớ những câu đố khó hiểu.
joshin4colours

@ joshin4colours - đó là lý do tại sao tôi tin vào cuộc trò chuyện dài của ol trong cuộc phỏng vấn ... chúng rất tốt để loại bỏ
TheBoyan

2
Tôi thực sự đã phỏng vấn tác giả của một trong những cuốn sách và từ chối anh ta ...
Sklivvz

3

Những bài kiểm tra này đã ngày càng trở thành một phần của các ứng viên sàng lọc trước bởi các công ty tuyển dụng chuyên nghiệp và một số công ty. Chúng được thiết kế để cung cấp cho người phỏng vấn phi kỹ thuật một cách để đánh giá khả năng kỹ thuật của ai đó. Tuy nhiên, về cơ bản, chúng chỉ là những bài kiểm tra không có ý nghĩa gì về khả năng của một lập trình viên ngoài việc loại trừ những người thực sự không biết gì. Thật không may, một số công ty / nhà tuyển dụng đặt quá nhiều trọng lượng vào những kết quả này.

Cách để nghiên cứu cho họ là tìm các trang web câu hỏi phỏng vấn, các trang web hợp pháp chứ không phải những trang cố gắng bán cho bạn câu trả lời, dán quảng cáo bật lên hoặc những thứ vô nghĩa khác, và nhồi nhét vào câu trả lời. Bằng cách đó, bạn sẽ nhận được một số điểm kha khá và vượt qua rào cản. Nếu công ty đang đặt quá nhiều trọng lượng vào những kết quả này, có lẽ họ không phải là công ty tốt nhất để làm việc cho dù sao đi nữa.


2

Nếu đó là một cơ quan tuyển dụng kiểm tra thì nó không nên khó như vậy. Không giống như họ có các chuyên gia ngôn ngữ để phát triển bài kiểm tra. Nhiều khả năng tất cả những gì họ sẽ làm là sao chép / dán câu hỏi từ một trang web.

Miễn là bạn biết cách hoạt động của khung nói chung và các không gian tên / thư viện phổ biến nhất cho các tác vụ, những thứ bạn phải sử dụng cho các tác vụ nhất định, bạn nên làm tốt.


2

Với các bài kiểm tra phỏng vấn, rất nhiều phụ thuộc vào văn hóa doanh nghiệp và người tạo thử nghiệm. Nếu họ có ý định hỏi những câu hỏi mơ hồ và cố gắng làm bạn khó chịu, tôi sẽ chuyển sang một công ty hoặc cơ quan khác quan tâm hơn đến những cá nhân chất lượng cao thông minh và có thể hoàn thành công việc.

Điều đó nói rằng, khi bạn sử dụng c # trong công việc hàng ngày của mình, tôi sẽ tập trung cho bạn những nỗ lực giải quyết vấn đề và logic và ít hơn vào khía cạnh học tập cuốn sách.

Project Euler là một nơi tuyệt vời để thực hành và trau dồi các kỹ năng mà rất có thể đã trở nên hơi gỉ.

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.