2010-05-06 23 views
15

Tôi hỏi một câu hỏi như thế này trong một cuộc phỏng vấn cho một lập trình viên cấp nhập cảnh:Tại thời điểm nào bạn nên hiểu Tài liệu tham khảo?

var instance1 = new MyObject{Value = "hello"} 
var instance2 = instance1; 

instance1.Value = "bye"; 

Console.WriteLine(instance1.Value); 
Console.WriteLine(instance2.Value); 

Người nộp đơn đáp lại bằng "hello", "tạm biệt" như đầu ra.

Một số đồng nghiệp của tôi nói rằng "con trỏ" không quan trọng nữa hoặc câu hỏi này không phải là một thẩm phán thực sự về khả năng.

Họ có đúng không?

EDIT: Điểm đã được thực hiện mà MyObject có thể là cấu trúc. Đó là một điểm tốt. Tuy nhiên, tôi không đăng câu hỏi đầy đủ mà tôi đã trao cho người được phỏng vấn. Câu hỏi đầy đủ có một lớp rõ ràng là một lớp (không phải là một cấu trúc). Nó có thể được tìm thấy here.

+10

Đó không phải là con trỏ. Đó là những tài liệu tham khảo. –

+6

Con trỏ, có thể không. Đó là quản lý bộ nhớ mức thấp mà một nhà phát triển LOB thường không cần. * Tham khảo *, mặt khác, là hoàn toàn quan trọng. –

+0

Tôi thích câu hỏi này. Tôi có thể sử dụng nó một ngày. 1 và được yêu thích. :) – EMP

Trả lời

16

Một số đồng nghiệp của tôi nói rằng "con trỏ" không phải là quan trọng nữa

Hiểu sự khác biệt giữa ngữ nghĩa tham khảo và ngữ nghĩa giá trị là rất quan trọng. Đó là nền tảng cho thiết kế ngôn ngữ và hệ thống kiểu. Hiểu rằng các tham chiếu có thể được thực hiện với các con trỏ không có liên quan đặc biệt đến các lập trình viên C# mức nhập cảnh; hiểu sự khác biệt giữa việc sao chép bằng cách tham chiếu và sao chép theo giá trị có liên quan cao.

hoặc câu hỏi này không phải là đánh giá thực sự về khả năng.

Điều đó tùy thuộc vào khả năng bạn đang thử nghiệm. Nếu khả năng nhanh chóng và chính xác dự đoán hành vi của các chương trình C# tầm thường có liên quan đến công việc của bạn thì tôi muốn nói rằng đó là một thử nghiệm tốt về khả năng.

Nếu khả năng xác định khi không có đủ thông tin để giải quyết vấn đề và đặt câu hỏi phù hợp để gợi ý thông tin đó, thì có, đây là thẩm phán về khả năng liên quan. (Một ứng cử viên tốt sẽ yêu cầu xem việc triển khai kiểu myObject và giá trị thành viên thay vì giả định rằng myObject là một lớp và Giá trị là một thuộc tính có thể thay đổi của chuỗi kiểu.)

Tôi nói rằng tất cả các khả năng đó đều có liên quan và đây là một câu hỏi hợp lý đầu tiên cho một vị trí nhập cảnh cấp.

18

Chúng hoàn toàn sai. Bên cạnh đó, đây là một câu hỏi về tài liệu tham khảo, không phải con trỏ. Nếu bạn không nhận được nó, bạn không xứng đáng được viết một công việc có trả tiền C#.

+0

Tôi đã có một ông chủ đã ở trong trò chơi một thời gian dài, và tôi bắt gặp anh ta một cách rõ ràng đi qua C# container bằng cách tham khảo. – mikerobi

+1

@mikerobi, chính xác "C# container" là gì? –

+1

@ unforgiven3 Tôi có nghĩa là bộ sưu tập như ArayList. – mikerobi

10

Đây thực sự là công cụ cơ bản. Câu hỏi không phải là ngay cả về con trỏ, đó là về ngữ nghĩa tham khảo trong C#, đó là một trong những khía cạnh quan trọng nhất của ngôn ngữ. Bất cứ ai tự gọi mình là lập trình viên C# phải hiểu điều này.

5

Bạn nên hiểu các con trỏ tham chiếu trước khi bạn rời trường đại học.

Tôi đã viết ở trên trước khi nhận thấy rằng câu hỏi này đã được gắn thẻ C#.

Bạn không cần biết bất kỳ điều gì về con trỏ để lập trình trong C#. Điều đó nói rằng, tôi giữ lời tuyên bố ban đầu của tôi theo nghĩa chung là một lập trình viên chuyên nghiệp.

Bên cạnh đó, như những người khác đã nói, câu hỏi này thực sự là về tài liệu tham khảo. Bạn thực sự phải hiểu tài liệu tham khảo là một lập trình viên C#.

+0

Con trỏ không còn quan trọng nữa. Tôi muốn xem xét mã không an toàn trong C# khá tiên tiến. – dtb

+5

@dtb Con trỏ là cơ sở để lập trình và cách máy tính hoạt động, ngay cả khi ngôn ngữ bạn chọn thiếu chúng. Tôi thậm chí sẽ không bao giờ xem xét việc thuê bất cứ ai không hiểu con trỏ. –

+0

Có một đại dương giữa sự hiểu biết con trỏ và lập trình với chúng. – spender

3

Biết cách tham chiếu đối tượng hoạt động trong C# Tôi cho là quan trọng. (Người ta chắc chắn có thể tồn tại một chặng đường dài mà không biết bất cứ điều gì ... nhưng hiếm khi mã OO mà bạn muốn thanh toán)

Con trỏ khác, không quá nhiều.

4

Bạn nên hiểu tài liệu tham khảo trước khi bắt đầu đưa ra các phỏng vấn C#.

+0

lol. Điểm tốt. Tôi nên đã sử dụng "tham chiếu" chính xác. – Vaccano

+0

Câu trả lời này có ý định rõ ràng để giải thích sai câu hỏi và xúc phạm người đã tạo ra câu hỏi đó. Nó không thêm bất cứ điều gì để thảo luận. –

+0

Nhận xét của tôi có vẻ ý nghĩa hơn dự định. Câu hỏi ban đầu được hỏi bởi OP (kiểm tra lịch sử chỉnh sửa) rõ ràng là ít rõ ràng hơn, và nó có vẻ là một sự hiểu lầm chính xác của con trỏ so với tham chiếu. Xin đừng quá nhanh để đánh giá một cái gì đó một năm trong bối cảnh. –

1

Chuyển câu hỏi đó không nói nhiều về khả năng của ai đó, nhưng không nó nói rất nhiều về khả năng thiếu của người đó. Hiểu ngữ nghĩa tham chiếu và giá trị là cơ bản để biết cách lập trình.

Nếu một người có sai mental model về cách chương trình sẽ hoạt động, tốt nhất anh ấy sẽ có thể thực hiện "lập trình do tai nạn". Khi mọi thứ sai, anh ta sẽ không thể tìm ra lý do tại sao mọi thứ đã đi sai.

2

Tôi nghĩ đó là câu hỏi hợp lý.

Hãy chắc chắn rằng bạn không chỉ đơn giản là chấm điểm câu hỏi này trên cơ sở PASS/FAIL đơn giản. Theo dõi các câu hỏi như "Tại sao?" và "Dòng chính xác 'instance1.Value =" bye "; ' hoặc dòng 'var instance2 = instance1;' thực sự làm gì?"Bắt đầu một hộp thoại về những gì đang xảy ra dưới mui xe. Bạn sẽ tìm hiểu rất nhiều về một ứng cử viên bằng cách họ có thể thực hiện chuyển đổi sâu sắc như thế nào và họ có thể theo dõi các giải thích của bạn hay không."

2

ứng cử viên không thể trả lời câu hỏi này cho thấy sự thiếu hụt lớn trong kiến ​​thức cơ bản của họ về C#. Cho họ thấy cánh cửa và nói bye bye!

2

Thậm chí nếu bạn không sử dụng con trỏ và mã không an toàn, bạn chắc chắn nên hiểu Nếu bạn sẽ làm việc trong C#, tôi có thể tha thứ không biết số học con trỏ, bởi vì bạn rất có thể sẽ không sử dụng nó và hầu như không nên sử dụng nó. chúng tôi ev vi trong thế giới C# được quản lý.

string s = "abc" 
int a = 3; 

Một trong hai biến này, thực sự là một con trỏ (Tham khảo. Bất kỳ điều gì). Cái nào? Thành thật mà nói, một người không biết rằng cần phải có được một công việc bằng cách sử dụng C trong một năm, sau đó anh ta sẽ hiểu điều này cho chắc chắn.

Hãy tưởng tượng bloke này phải viết một hàm có chuỗi ref. Đó là:

  1. Không thể thay đổi.
  2. Tham chiếu đến đối tượng bất biến.
  3. Tham chiếu đến tham chiếu đến đối tượng không thay đổi được. (Sự bất biến không liên quan gì đến con trỏ. Nó sẽ càng trở nên khó hiểu hơn nếu nó không thay đổi ^^)

Người đàn ông sẽ phát điên khi cố gắng tìm ra nếu anh ta không mất con trỏ trinh trong C trước. Hoặc thậm chí tệ hơn, hãy tưởng tượng một số phần quan trọng trong mã của bạn sử dụng một từ điển có chứa một số thông tin có giá trị trong một lớp, và anh chàng này thay đổi một trong những giá trị của nó, thay đổi GetHashValue của đối tượng và khiến bạn "mất" ví dụ.

Thậm chí nếu nhà phát triển C# không sử dụng con trỏ rõ ràng trong mã của họ, điều đó không có nghĩa là con trỏ không được sử dụng ngầm.

Mọi lập trình viên giỏi cần phải hiểu chính xác ngôn ngữ của họ trừu tượng ra sao, nếu không anh ấy sẽ không bao giờ có thể hiểu ngôn ngữ một cách chính xác. Để làm C# đúng, bạn cần phải biết C, và để làm C đúng, bạn cần phải biết lắp ráp.

Ngoài ra, câu hỏi của bạn - Đối với tất cả những gì bạn biết, người được phỏng vấn của bạn giả định myObject là một cấu trúc. Anh ta hầu như không, nhưng vẫn vậy.
Chỉnh sửa: Có, các tham chiếu không cố định, không giống như con trỏ. Nhưng khái niệm thực sự không có sự khác biệt.

1

Thành thật mà nói, tôi đã tốt nghiệp với toàn bộ khóa học của Microsoft khoảng 2 tháng trước. Phải thừa nhận rằng, tôi đã lập trình trong một thời gian lâu hơn thế, nhưng tôi sẽ nói trong C# tôi đã đi được khoảng 2 năm.

Tôi biết thực tế, Những câu hỏi này xuất hiện nhiều lần trong quá trình nghiên cứu của tôi, và điều tuyệt đối là 100% là mọi người trong lớp đều biết điều này. Infact Tôi sẽ nghĩ rằng Microsoft thi thậm chí có một vài trong số này trộn lẫn với nó.

Từ quan điểm của sinh viên (Mặc dù vậy, quan điểm sinh viên cấp cao), mọi người nên biết điều này. Và nếu họ không thì họ không biết đủ lập trình cốt lõi (Hoặc logic) để làm cho nó xa trong lập trình.

Một lưu ý phụ, Công việc hiện tại của tôi đã có một bài kiểm tra nhỏ trong cuộc phỏng vấn thứ hai. Họ làm cho tôi viết một ứng dụng để kiểm tra số nguyên tố, thừa kế, viết LastIndexOf của riêng tôi và một cái khác mà tôi không thể nhớ ra khỏi đỉnh đầu của tôi.

Tôi nghĩ logic là quan trọng nhất trong lập trình. Và hơn cả việc biết ngôn ngữ C#, đây là một câu hỏi logic hơn.

1

Đây không phải là dấu hiệu tốt cho bất kỳ ai có bất kỳ trải nghiệm nào trong C#.

Trừ khi ứng cử viên là chỉ cần học ngôn ngữ và có vẻ rất rực rỡ, nó sẽ gần với một người chia bài đối với tôi.

Ở mức tối thiểu, lỗ hổng trong kiến ​​thức như thế này sẽ cho tôi biết rằng cần phải huấn luyện nhiều.

0

Chúng tôi có một danh sách các câu hỏi kỹ thuật được yêu cầu của tất cả các ứng cử viên phát triển trong quá trình phỏng vấn. Trong số những câu hỏi đó, một số lượng nhất định phải được trả lời chính xác để ứng viên được xem xét, hiểu được các tham chiếu C# sẽ là một trong những câu hỏi.

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