it-swarm-vi.com

Câu hỏi phỏng vấn C ++ tốt nhất là gì?

Nếu bạn có thể hỏi một lập trình viên C++ một câu hỏi để đo các kỹ năng C++ của họ, thì đó sẽ là gì?

Câu hỏi tôi nghĩ là tốt nhất là: Bạn có thể gọi "xóa cái này;" bên trong một hàm thành viên không? (Tôi đặt đây là một liên kết để bạn có thể nghĩ qua trước, sau đó đi đến Câu hỏi phỏng vấn C++ tốt nhất - Bao giờ! để xem câu trả lời đúng.)

Tôi không hỏi điều này bởi vì tôi mong hầu hết mọi người biết câu trả lời. Nếu họ đã làm nó sẽ không phải là một câu hỏi hữu ích. Tôi hỏi để xem liệu họ có thể làm việc theo cách của họ để trả lời đúng và làm thế nào họ làm như vậy.

28
David Thielen

Tôi sẽ hỏi họ về lý do tại sao chức năng thành viên ảo không thể được sử dụng với khuôn mẫu trong C++. Tất nhiên, chỉ có vài người thực sự có thể trả lời câu hỏi ngay lập tức. Nhưng nếu người được phỏng vấn hiểu đúng về cơ chế cốt lõi của C++ (cách mẫu hoạt động trong C++, cách thực hiện chức năng ảo, cách trình biên dịch và trình liên kết tạo ra một tệp thực thi từ mã nguồn, v.v.), bạn có thể nhận được câu trả lời với từng bước phù hợp bước dẫn câu hỏi.

Đã thêm: Hàm thành viên ảo mẫu trong câu trả lời này có nghĩa là hàm mẫu là hàm thành viên ảo của một số lớp - không phải là hàm thành viên thông thường trong lớp mẫu. Xin lỗi vì đã nhầm lẫn :(

8
summerlight

Câu hỏi phỏng vấn C++ tốt nhất sẽ là một vấn đề lập trình, không phải là một câu hỏi đố.

57
Steven Evers

Tôi sẽ hỏi họ những gì họ thích về C++ 0x. Từ đó tôi có thể "xô" chúng thành nhiều khuôn mẫu khác nhau:

  • trường siêu cũ, sử dụng trình biên dịch C++ để biên dịch mã C
  • trường học cũ, sợ (hoặc không thấy điểm nào) STL, đã không theo kịp các thay đổi
  • yêu lambdas, yêu STL nhanh hơn từ các tài liệu tham khảo rvalue, fan hâm mộ RAII lớn, nóng bỏng để sử dụng shared_ptr, unique_ptr, v.v.
  • thật cay đắng vì tất cả các mã tăng được viết trong vài năm qua sẽ cần phải được điều chỉnh để sử dụng tương đương C++ 0x
  • mẫu siêu dữ liệu điên rồ người làm cho đầu tôi nổ tung trong khi trả lời một câu hỏi tương đối ngắn

Rất có thể một số trong những thùng này là hoàn hảo cho bạn và một số là "cảm ơn vì đã vào". Là một câu hỏi giúp bạn có được nhiều thông tin nhanh chóng, đây là người chiến thắng của tôi.

32
Kate Gregory

Tôi hơi bối rối vì tại sao "bạn có thể xóa cái này không?" được coi là một câu hỏi thú vị. Bất cứ ai đã viết mã COM trong C++ đều biết rằng điều đầu tiên bạn học được vào ngày đầu tiên của lập trình COM cơ bản là làm thế nào để sử dụng "xóa cái này" một cách chính xác. Tôi cho rằng có thể hữu ích để xác định xem, có ai đó đang nói dối về lý lịch của họ về việc đã viết chương trình COM hay không, nhưng như một câu hỏi chung về C++, nếu ai đó không thể trả lời ngay lập tức thì họ sẽ không phù hợp cho đội của tôi.

Dù sao, nếu mục tiêu của bạn là đưa ra một câu hỏi đo lường các kỹ năng C++, thì chọn một câu hỏi là con đường sai lầm. Xoay nó lại. Câu hỏi đúng cần hỏi là:

Trên thang điểm từ một đến mười, bạn là một lập trình viên C++ giỏi đến mức nào?

Đây không phải là câu hỏi giúp bạn có câu trả lời bạn muốn. Mọi người đều nói "tám" bất kể. Câu hỏi giúp bạn có câu trả lời bạn muốn là:

OK, vì vậy bạn là một tám. Một lĩnh vực vấn đề mà bạn nghĩ rằng bảy sẽ có một thời gian khó khăn để làm việc với là gì?

boom, giờ bạn đã có chúng. Nếu ứng viên nghĩ rằng "một cái gì đó để làm với đệ quy" hoặc "khi nào nên sử dụng một hàm hủy ảo" là loại thứ mà bảy người gặp khó khăn, thì bạn biết rằng họ biết một chút về đệ quy hoặc hàm hủy hoặc bất cứ điều gì và kiến ​​thức của họ không đi xa hơn thế.

Điều đó sẽ cung cấp cho bạn hiệu chuẩn tốt hơn nhiều so với việc đưa ra một số câu hỏi đố. Nếu bạn buộc tôi phải đưa ra một câu hỏi hay về một sự thật về C++, có lẽ tôi sẽ hỏi một câu như "làm thế nào bạn thiết kế trình phân tích ngữ nghĩa và trình tạo mã cho phần của trình biên dịch C++ liên quan đến các phương thức ảo được gọi trong một hàm hủy lớp cơ sở? " Bạn nên đặt câu hỏi liên quan đến những thứ thực sự mà bạn làm việc và ứng viên có khả năng làm việc. Đó là một vấn đề tôi phải giải quyết một lần và tôi nghĩ nó sẽ cung cấp một cái nhìn sâu sắc khá tốt về cách một người thiết kế các máy phân tích ngữ nghĩa và trình tạo mã, cũng như kiến ​​thức về C++ của họ.

28
Eric Lippert

Chỉ để cho vui, tôi đã có những lập trình viên C++ quay cuồng với đứa con bé bỏng này:

Tại sao điều này chạy vào một vòng lặp vô hạn (và vâng, nó được gõ đúng)?

int x=0;
while (x<3) {
  x = x++;
}

Thật đáng ngạc nhiên khi có nhiều người bị vấp ngã. Tất nhiên, tôi không thể sử dụng nó nữa sau khi nó xuất hiện trên Stack Overflow . Lẩm bẩm ... lẩm bẩm ...

(Để có câu trả lời thích hợp, hãy đọc lời thú tội và chắc chắn đọc các bình luận)

Đã thêm câu hỏi về phần thưởng

Có FizzBuzz cổ điển mọi thời đại (như đặc trưng trong bài viết nổi tiếng hiện nay Bài viết kinh dị về mã hóa ). Bản thân tôi chưa bao giờ sử dụng nó trong một cuộc phỏng vấn, nhưng sau khi nói chuyện với nhóm phát triển vào một giờ ăn trưa, kết quả là ... ừm ... chính xác một cách đáng ngạc nhiên.

Thú nhận

Tôi đã bị cuốn vào phản hồi "x ++ trả về giá trị ban đầu" tiêu chuẩn. Tuy nhiên, câu trả lời đúng là hành vi không được xác định do các điểm chuỗi. Không ai từng đề cập đến các điểm trình tự trong tất cả các lần tôi sử dụng điều này cho đến khi tôi đăng nó ở đây.

Tôi đã được giáo dục và tôi thực sự muốn cảm ơn tất cả những người đã dành thời gian để bình luận.

14
Gary Rowe

Điều đầu tiên cần hỏi là một câu hỏi đơn giản về con trỏ. Tôi đã rất ngạc nhiên khi thấy có bao nhiêu người tuyên bố biết C++ hoặc tệ hơn nữa là C không thể trả lời nó. Sau đó, tôi sẽ hỏi một câu hỏi đơn giản về các chức năng ảo. Sự kết hợp này cho bạn biết rất nhanh cho dù người đó có thực sự biết C++ hay không.

8
Dima

Hãy cho tôi biết về các nhà xây dựng sao chép.

7
fredoverflow

Điều đó phụ thuộc rất nhiều vào loại C++ được viết tại công ty của bạn. (Khi tôi phải thuê lập trình viên C++, tôi chưa bao giờ hỏi về delete, vì tôi đã hỏi họ về các kỹ thuật để tránh phải viết delete hoàn toàn.)

Lý tưởng nhất là bạn muốn thuê những người viết mã trên mức của những gì nhóm của bạn hiện đang viết, nhưng không quá cao, trừ khi bạn muốn kết hợp điều này với việc đào tạo nhóm để đưa nó lên cấp cao hơn.

7
sbi

Câu hỏi hay nhất cho một nhà phát triển C++ tuyệt vời là "Hãy cho tôi biết lý do tại sao chúng ta nên CHỨ KHÔNG PHẢI sử dụng C++?"

6
amadvance

Tôi tin rằng tôi sẽ hỏi họ những gì họ biết, hoặc nhiều khả năng cung cấp cho họ một câu hỏi trong một cái gì đó khá khác nhau.

Quá nhiều lập trình viên C++ về những người có ít kinh nghiệm về các ngôn ngữ khác. Kinh nghiệm hẹp thường hạn chế.

6
Orbling

Tôi không nghĩ có một câu hỏi C++ hay nhất. C++ là một ngôn ngữ lớn như vậy và với C++ 0X, nó đã phát triển, bạn có thể mạnh mẽ trong một tên miền phụ nhất định của ngôn ngữ và không có chút gì về một phần khác của ngôn ngữ. Câu hỏi 'một lần bắn' sẽ chỉ thực hiện kiến ​​thức của một người về một phần nhỏ của ngôn ngữ và có nguy cơ nhìn vào kiến ​​thức của người đó về các khía cạnh khác của ngôn ngữ.

4
sashang
4
karlphillip

Câu hỏi yêu thích của tôi là một câu hỏi đơn giản:

a) Bạn đã bắt đầu với C và sau đó chuyển sang C++?

b) Nếu vậy, thì vài điều đầu tiên bạn học làm khác đi là gì?

Câu trả lời này thường cho tôi một hạt sạn về cách lập trình viên tiếp cận C++ và sự hiểu biết của anh ấy/cô ấy về OOP và C++ nói chung.

không có câu trả lời "Đúng" hoặc "Sai" ở đây, nhưng thường thì đó là một cách tuyệt vời để hiểu được ứng viên đến từ đâu.

3
mohaps

Làm thế nào để bạn thực hiện các chức năng ảo trong C++, giải thích một kịch bản trong thế giới thực.

1
user616

Hiện tại, tôi sẽ nói: "Làm thế nào bạn sẽ thực hiện một hàm tạo di chuyển cho một container?"

Lý do của tôi là, bởi vì các nhà xây dựng di chuyển là một tính năng của tiêu chuẩn tiếp theo chứ không phải là tiêu chuẩn hiện tại, câu trả lời của ứng viên sẽ cho biết liệu nhà phát triển trong câu hỏi có chủ động theo đuổi kiến ​​thức về ngôn ngữ của họ hay chỉ dính vào các thủ thuật mà họ biết.

1
Kaz Dragon

Tôi nghĩ rằng tôi muốn hỏi ý kiến ​​của họ về thiết kế, nói, std::string. Tôi cũng hỏi họ xem họ đã sử dụng các thiết kế khác chưa (ví dụ: MFC/ATL CString, wxString, v.v.) và giả sử họ có, yêu cầu họ so sánh và đối chiếu các thiết kế.

Các chuỗi được sử dụng rộng rãi đến mức hầu như bất kỳ ai có kinh nghiệm thực sự sử dụng C++ nên đã sử dụng ít nhất một hoặc hai trong số trên. Hầu như tất cả các thiết kế thể hiện một số thỏa hiệp giữa độ tinh khiết lý thuyết và sử dụng thực tế. Một số có thể hoạt động thực sự tốt, nhưng chỉ khi được sử dụng chính xác như dự định, trong khi những người khác đánh đổi tính linh hoạt cao hơn cho một số vụng về có thể. Nói tóm lại, hầu như bất kỳ ai có kinh nghiệm thực tế nên đều có thể bày tỏ một số ý kiến ​​có ý nghĩa về thiết kế của họ và những ý kiến ​​đó sẽ cho bạn biết một số tiền hợp lý về cách họ nghĩ, cách họ mã thiết kế, mức độ mà họ coi trọng tính thực dụng so với độ tinh khiết lý thuyết, v.v.

1
Jerry Coffin

Tôi thực sự sẽ trình bày cho người đó một chút mã từ một ngôn ngữ lập trình khác hướng đối tượng và tốt nhất là không có trong danh sách ngôn ngữ họ biết. Mã phải đại diện cho một nhiệm vụ đơn giản được thực hiện trong ngôn ngữ đó.

Quan điểm của việc này sẽ không phải là xác định kiến ​​thức về C++ của họ mà là tìm hiểu xem họ hiểu lập trình tốt đến mức nào. Khi bạn hiểu các khái niệm cơ bản đằng sau lập trình, thì bạn có thể giải quyết vấn đề.

1
Paul