Câu hỏi phỏng vấn C ++ tốt nhất là gì? [đóng cửa]


28

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 không;" bên trong một chức năng thành viên? (Tôi đặt này như một liên kết để bạn có thể nghĩ rằng nó thông qua đầu tiên, sau đó đi đến The Best C ++ Phỏng vấn Câu hỏi - Kể . Để 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.

Câu trả lời:


8

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 :(


3
@summerlight: Tôi pha trộn các chức năng và mẫu thành viên ảo và không có gì xấu xảy ra cho đến nay ... Vì vậy, tôi sợ rằng tôi không hiểu bạn đang làm gì. Quan tâm để soi sáng cho tôi :)?
Matthieu M.

2
Câu trả lời này gần như nhưng không hoàn toàn chính xác. Bạn không thể có các hàm thành viên ảo mẫu, nhưng bạn có thể có các hàm thành viên ảo của một lớp mẫu.
catphive

1
@summerlight: ah hiểu rồi! Câu hỏi thú vị có, thường bật lên;)
Matthieu M.

2
@nikie: Đó là một hàm thành viên ảo trong lớp mẫu - không phải là hàm thành viên ảo như mẫu <typename T> virtual void doS SomethingWithGenericTypeT (T arg);
ánh sáng mùa hè

2
@summerlight: Bạn nên đưa ví dụ đó vào bài viết của mình. Tôi không biết bạn có ý gì cho đến bây giờ. Mặc dù vậy, câu hỏi hay, bây giờ tôi đã hiểu nó ;-)
nikie

57

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 đố.


Đã đồng ý. Đừng hỏi về cú pháp có thể tra cứu trên Google. Thay vào đó, yêu cầu ứng viên viết một hàm dễ dàng (mặc dù không tầm thường), tốt nhất là một cái gì đó mà bạn đã viết bằng mã của riêng bạn tại một thời điểm.
chrisaycock

4
Ngay cả một cái gì đó đơn giản như "viết một hàm để đảo ngược một chuỗi" có thể cho bạn biết rất nhiều về một chuyên gia lập trình: làm họ sử dụng CString, char*, std::string, vv .; họ có trả lại một chuỗi mới hoặc đảo ngược tại chỗ không; họ có tự lặp vòng qua các ký tự hay họ gọi hàm thư viện. Và tất nhiên nếu họ không thể làm một cái gì đó đơn giản như đảo ngược một chuỗi, điều đó cũng cho bạn biết rất nhiều về họ! Ngoài ra còn có rất nhiều câu hỏi tiếp theo, như nó có hoạt động với Unicode không, nó có hoạt động với UTF-8, v.v.
Gabe

16
@Ernelli: C ++ chưa bao giờ thực sự cất cánh? Nghiêm túc?
Steven Evers

1
@Gabe - điểm tốt. Ví dụ, thực hiện đảo ngược mẫu tại chỗ với tham số chính sách sẽ không chung chung hoặc (có thể là chính sách chứ không phải hàm) khá phức tạp, khi nói đến chuỗi biến byte-mỗi ký tự. Tôi không biết liệu tối ưu hóa không sớm (tạo ra một chuỗi mới bởi vì nó dễ nói chung hơn) hay nhanh nhẹn (đừng lo lắng về trường hợp đó cho đến khi nó xảy ra, và đảo ngược tại chỗ không khó hơn, có thể là một chút dễ dàng hơn, đối với các chuỗi ký tự có độ rộng cố định) sẽ thắng.
Steve314

1
@Ernelli - bạn đang quên wchar_t và std :: wopes và chúng có nghĩa là những thứ khác nhau trên Windows / Unix
Martin Beckett

32

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 về giá trị, người 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.


1
+1 cho một câu hỏi hàng đầu tốt khuyến khích nhiều cuộc thảo luận xung quanh chủ đề.
Gary Rowe

8
Bạn đã quên danh mục những người không biết C ++ 0x là gì. Tôi đoán đó sẽ là một câu trả lời nhiều hơn, và sẽ phù hợp với hai loại đầu tiên.
Cá nhanh

1
@Fast Fish, vâng, những người giống như C ++ 0-whatnow? nói chung sẽ là một trong hai loại đầu tiên và thường sẽ chiếu sáng điều đó trong câu trả lời của họ.
Kate Gregory

28

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ề việc họ đã 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ó Câu hỏi đúng để 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ì?

bùng nổ , bây 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ế bộ 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à 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ọ.


3
Tôi sẽ bắt đầu sử dụng cái này: OK, vì vậy bạn là 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ì?
David Thielen

10
Một câu hỏi hay khác ở đây: chín người có thể làm gì mà bạn gặp rắc rối?
David Thornley

Điều đó thật tuyệt vời, thật tuyệt vời.
UpAndAdam

14

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õ chính xác)?

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 tiền thưởng

Có FizzBuzz cổ điển mọi thời đại (như đặc trưng trong bài viết Kinh dị mã hóa nổi tiếng hiện nay ). 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.

Lời thú tội

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.


1
Gary Rowe: Trong khi tôi yêu ví dụ đó (lần đầu tiên tôi nhìn thấy nó). Điều đó làm tôi buồn rằng mọi người không thấy điều đó khá nhanh, chứ đừng nói là không biết.
Orble

2
Khi tôi ở Microsoft, tôi bắt đầu yêu cầu ứng viên thực hiện chèn vào danh sách liên kết. Tại sao? Bởi vì khoảng 80% không thể làm điều đó. Thật tuyệt vời ...
David Thielen

43
Đây không nhất thiết là một vòng lặp vô hạn. Bạn đang gọi hành vi không xác định ở đây (x được sửa đổi hai lần mà không có điểm trình tự can thiệp). Và trên thực tế, với trình biên dịch đặc biệt của tôi, gcc (Debian 4.3.2-1.1) 4.3.2 trên vòm đặc biệt của tôi (x86) nó không chấm dứt.
Logan Capaldo

2
@Logan +1 để đề cập đến các điểm trình tự. Chắc chắn bạn sẽ có một cuộc phỏng vấn thứ hai ;-)
Gary Rowe

4
Đây là một câu hỏi phỏng vấn thực sự tốt bởi vì nó cho ứng viên biết liệu có đáng để quay lại cho một cuộc phỏng vấn khác không ;-). Nếu cuộc phỏng vấn thực sự nghĩ rằng mã không dẫn đến một vòng lặp vô hạn (và người phỏng vấn được cho là có năng lực kỹ thuật) thì ứng viên có thể bỏ lỡ "cơ hội" một cách an toàn.
CB Bailey

8

Đ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.


4
phụ thuộc vào nền tảng của họ, không bao giờ gặp ai đó có nền tảng phần cứng không hiểu con trỏ nhưng một số người không thực sự được đóng gói hoặc đa hình
jk.

7

Đ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 không bao giờ hỏi về delete, vì tôi đã hỏi họ về các kỹ thuật để tránh phải viết deletehoà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.



6

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

Câu hỏi tốt 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 KHÔNG nên sử dụng C ++?"


4

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ữ.



3

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, 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.


1

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

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

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

Tôi nghĩ rằng tôi muốn hỏi ý kiến ​​của họ về thiết kế của, nói , std::string. Tôi cũng yêu cầu họ nếu họ đã sử dụng thiết kế khác (ví dụ, MFC / ATL CString, wxStringvv) và giả sử họ có, yêu cầu họ để so sánh và đối chiếu các mẫu 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 cứ ai có kinh nghiệm thực tế nên có thể bày tỏ một số ý kiến có ý nghĩa của thiết kế của họ và những ý kiến nên nói với bạn một số tiền hợp lý về cách họ suy nghĩ, làm thế nào họ thiết kế mã, mức độ mà họ giá trị thực dụng so với độ tinh khiết lý thuyết, vân vân

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.