Có phải Giải thích về thành ngữ RAII là một câu hỏi sàng lọc C ++ tốt? [đóng cửa]


13

Một công ty mà tôi làm việc cùng đã yêu cầu tôi thực hiện sàng lọc điện thoại cho ứng viên để đảm bảo họ không hoàn toàn xấu hổ khi gửi ai đó đến một khách hàng tiềm năng.

Nó chỉ ra rằng một số lượng lớn người đã được đặt cho vai trò nhà phát triển C ++. Tôi không dành nhiều thời gian cho C ++, nhưng tôi đã thực hiện một vài dự án tầm thường và không tầm thường bằng ngôn ngữ. Tôi hình dung rằng "Giải thích thành ngữ RAII" sẽ là một câu hỏi bóng mềm hay mà hầu hết các nhà phát triển C ++ nghiêm túc có thể trả lời trong khi ngủ, và sẽ cho phép tôi chuyển sang những câu hỏi thú vị hơn về trải nghiệm. Nhưng hóa ra những người có hơn 10 năm kinh nghiệm C ++ không nhận ra thuật ngữ này, ngay cả khi tôi mở rộng từ viết tắt thành "Thu nhận tài nguyên là khởi tạo". Một ứng cử viên đã đi xa đến mức nói rằng anh ta cảm thấy không thực tế khi áp dụng kỹ thuật phát triển Windows, điều mà tôi nghĩ là một tình cảm kỳ quặc, nhưng tôi có thể thấy một vài ví dụ có thể hỗ trợ cho dòng suy nghĩ đó.).

Ngay cả một vài nhà phát triển C ++ mà tôi biết đủ để đánh giá năng lực của họ nói rằng họ không nhận ra thuật ngữ này, nhưng khi đọc một bản tóm tắt về kỹ thuật này, nói "Ồ, vâng, tôi không biết rằng có tên. Tôi chỉ biết nghĩ về những điều đó như một việc bạn phải làm . " Tôi nhớ thuật ngữ từ ấn bản thứ hai của cuốn sách Stroustrup, mặc dù tác động đầy đủ không chìm vào thời điểm đó.

Vì vậy, là "Bạn có thể giải thích thành ngữ RAII cho tôi?" một câu hỏi sàng lọc công bằng? Có hợp lý không khi mong đợi tất cả các nhà phát triển C ++ có thẩm quyền hiểu nó? Là thuật ngữ bí truyền hơn tôi nghĩ? Giả sử một ứng cử viên không biết thuật ngữ này, liệu có câu hỏi tiếp theo nào có thể giúp tôi trêu chọc liệu họ ít nhất đã nội tâm hóa các thực tiễn làm cho RAII hoạt động không? Có câu hỏi "cỏ dại" thay thế nào tốt hơn để trả lời cho ứng viên một số độ trễ trong việc trả lời và giúp ứng viên thể hiện sự hiểu biết của họ về phát triển C ++ không?

Chỉnh sửa để thêm : Để làm rõ, tôi không phải là loại người phỏng vấn không đủ tiêu chuẩn vì họ không biết từ thông dụng và từ viết tắt. Tuy nhiên, tôi nghĩ thật hợp lý khi hy vọng rằng một lập trình viên C ++ có kinh nghiệm đã nội tâm hóa các thực tiễn tốt để quản lý tài nguyên. Tôi cũng nghĩ rằng điều quan trọng là phải xác minh rằng một ứng viên hiểu một số "điều cơ bản" về công nghệ mà họ yêu cầu chuyên môn trước khi chuyển sang các câu hỏi thú vị hơn về thiết kế, giải quyết vấn đề, v.v. Tôi nghĩ rằng những gì tôi đang tìm kiếm là một cách tốt để hỏi một câu hỏi mở, phù hợp để sử dụng trong sàng lọc điện thoại ngắn, mà tôi có thể sử dụng để đánh giá sự hiểu biết cơ bản của ứng viên về thực hành quản lý tài nguyên tốt trong C ++, trước khi tôi đặt câu hỏi "khó".


3
"Ngay cả một vài nhà phát triển C ++ mà tôi biết đủ để đánh giá năng lực của họ nói rằng họ không nhận ra thuật ngữ này". Được chứ. "Vì vậy, là" Bạn có thể giải thích thành ngữ RAII cho tôi không? "Một câu hỏi sàng lọc công bằng?" Hỏi làm gì? Bạn không thể tìm thấy những người biết về nó. Bạn cần biết thêm gì nữa mà bạn chưa biết? Có lẽ bạn nên xem nhẹ chủ đề này (vì bạn đã biết câu trả lời) và tập trung vào "Có câu hỏi" cỏ dại "thay thế nào tốt hơn có thể thú vị không. Ngoại trừ đó là một ý kiến ​​bắn ra, mà không được dung thứ tốt.
S.Lott

9
Thành ngữ thay đổi, thực hành tốt không. Thay vì hỏi về một thành ngữ cụ thể, hãy hỏi đơn giản, "bạn sẽ thực hiện những bước nào trong việc thiết kế một lớp để đảm bảo nó không bị rò rỉ?"
Blrfl

Đủ công bằng, mặc dù kích thước mẫu của tôi thấp và tôi không tích cực tham gia vào cộng đồng C ++ nữa, vì vậy tôi không biết cộng đồng coi những kiến ​​thức thiết yếu ngày nay là gì. Về cơ bản, tôi đang cố gắng tìm ra cách mở rộng tiết mục của mình cho các câu hỏi có thể được sử dụng để đánh giá kiến ​​thức C ++ thực sự, ví dụ, những điều cơ bản về cú pháp.
JasonTrue

2
vấn đề của bạn không phải là những gì tôi mong đợi. Tôi giả sử bạn sẽ tìm thấy một người biết RAII là gì, được tuyển dụng và chỉ sau này bạn mới phát hiện ra họ vẫn còn mải mê viết mã.
Kevin

1
@JasonTrue: Tôi nghĩ rằng các câu hỏi fizz buzz được cho là các câu hỏi lập trình thực tế như đảo ngược một chuỗi. Nhưng dù sao tôi nghĩ đó là một câu hỏi hay. Bạn cũng có thể cân nhắc hỏi những tính năng nào trong c ++ - 0x mà người được phỏng vấn cho là thú vị hoặc quan trọng nhất. Khó hơn một chút nhưng nếu bạn nhận được câu trả lời tốt thì có lẽ điều đó có nghĩa là điều tốt. Và câu hỏi luôn có thể quay trở lại, 'thư viện tăng cường nào là quan trọng / thú vị nhất' nếu bạn có một cái nhìn trống rỗng.
Kevin

Câu trả lời:


24

Bạn dường như đã phát hiện ra rằng các nhà phát triển C ++ mà bạn biết từ kinh nghiệm có thẩm quyền không quen thuộc với từ viết tắt đó hoặc thậm chí là biểu thức đầy đủ. Điều đó một mình dường như chỉ ra rằng câu hỏi không phù hợp như một câu hỏi sàng lọc trong một cuộc gọi điện thoại.

Mặt khác, bạn có thể đến cùng một điểm thông qua con đường vòng hơn bằng cách đặt ra một kịch bản. Một cái gì đó như: "Bạn đang triển khai một lớp Nhật ký sẽ ghi thông tin đăng nhập vào một tệp. Rõ ràng, bạn sẽ cần phải có một biến thành viên là một tệp xử lý (std :: FILE *). Bạn phân bổ và giải phóng tệp này ở đâu xử lý?" Nếu ứng viên bắt đầu nói về việc tạo phương thức open () và close () thay vì phân bổ tay cầm tệp trong hàm tạo và xử lý tay cầm trong hàm hủy, bạn có thể theo dõi bằng cách hỏi về những thứ như lớp của họ sẽ hành xử thế nào nếu gọi mã ngoại lệ, vv


Một gợi ý tuyệt vời. Tôi thích cách tiếp cận này.
JasonTrue

Mất quá nhiều thời gian trong một cuộc phỏng vấn qua điện thoại.
HelloWorld

15

Tôi không nghĩ rằng đó là một câu hỏi thực tế vì nó được đề xuất. Tôi nghĩ rằng bạn sẽ tìm thấy rất nhiều nhà phát triển sẽ rơi vào trại "oh, vâng, tôi không biết rằng có một cái tên" trại. Tôi sẽ đề nghị bạn kiểm tra các ứng cử viên về khái niệm này chứ không phải tên của khái niệm này. Cung cấp cho họ một ví dụ mã và hỏi tại sao nó không đầy đủ hoặc để họ chứng minh rằng họ biết khái niệm này.


3

Tôi nghĩ là một câu hỏi hợp lệ. Mặc dù tôi không biết thuật ngữ RAII phổ biến như thế nào (trong nhóm của tôi, chúng tôi sử dụng thuật ngữ RAII mọi lúc) nhưng khái niệm xử lý tài nguyên rất quan trọng đặc biệt nếu bạn cũng muốn an toàn ngoại lệ và đa luồng .


3

Chà, tôi biết rằng khi tôi muốn biết ai đó có năng lực, điều đầu tiên tôi làm là kiểm tra kiến ​​thức về từ viết tắt của họ. Khi đã được thiết lập, tôi chắc chắn rằng họ biết tên của các công nghệ khác mà tôi nghĩ nghe hay. Nếu sau đó họ vẫn ở đó, thì tôi yêu cầu họ cho một danh sách các màu sắc yêu thích của họ.

Tôi không thể chịu đựng được điều này. Ý tôi là, vào cuối cuộc phỏng vấn, đây là tiếng còi báo động và tiếng chuông cảnh báo. Tôi không muốn làm việc ở một nơi thực sự quan trọng mà tôi biết những câu thần chú kỳ quái mà ông chủ của tôi nghĩ là "cơ bản". Tôi không thể bận tâm tìm hiểu tên người mà tôi đã xử lý trong nhiều năm, vì vậy tôi chắc chắn rằng địa ngục không lãng phí không gian não với các từ viết tắt dễ thương mô tả các thực tiễn tốt nhất.

Nhìn vào mã của tôi Hỏi tôi làm thế nào. Tôi sẽ vẽ nguệch ngoạc trên một tấm bảng trắng cho đến khi những con bò về nhà. Tôi sẽ mã cho bạn một ứng dụng. Đừng cho tôi những câu hỏi vớ vẩn. Trivia luôn luôn bị đánh hoặc bỏ lỡ, và nó không bao giờ cơ bản.


Tôi không có xu hướng hỏi nhiều câu hỏi kiến ​​thức bí truyền trong các cuộc phỏng vấn sàng lọc, nhưng có một chút siêng năng mà tôi dự kiến ​​sẽ làm để đảm bảo ai đó không hoàn toàn bất tài. Theo đó, tôi đang tìm kiếm một câu hỏi mở cho phép tôi xác minh một số mức độ kiến ​​thức trong khi cho phép ứng viên thể hiện nền tảng của chính họ. Tôi mong đợi "một số" kiến ​​thức ngay thẳng nếu ai đó nói rằng họ biết công nghệ X trong sơ yếu lý lịch của họ; Câu hỏi của tôi sôi nổi, tôi nên mong đợi kiến ​​thức gì về một lập trình viên C ++, một cổng thông tin hữu ích cho cuộc trò chuyện tiếp theo?
JasonTrue

4
@jason: Chà, có lẽ tôi sẽ có thể nhớ từ viết tắt RAII trong vài tháng. Kiến thức phù du đó có khiến tôi thành thạo không, mặc dù tôi đã không chạm vào C ++ trong nhiều năm? Đó là chuyện vặt vãnh. Hỏi họ cách họ xử lý ổ khóa và đảm bảo rằng họ hiểu KIẾN THỨC thực tế, chứ không phải từ viết tắt kỳ lạ.
Satanicpuppy

1
@jason: Tôi đồng ý. Tôi chỉ không đồng ý rằng những điều cơ bản bao gồm loại chuyện nhỏ này. Một thằng ngốc có thể biết điều đó, còn một chuyên gia thì không. Bạn đang dựa trên quá trình lựa chọn của bạn về một cái gì đó không liên quan đến kỹ năng.
Satanicpuppy

5
Biết RAII được gọi là gì không phải là kiến ​​thức thiết yếu. Nhưng tự động đạt đến mô hình là.
btilly

2
RAII là một khái niệm nền tảng của C ++ tốt, và thuật ngữ này đã tồn tại ít nhất 20 năm. Tôi nghĩ rằng việc gạt bỏ nó như những chuyện vặt vãnh có phần không công bằng. Mặc dù bạn có thể có những nhà phát triển C ++ giỏi, những người không biết thuật ngữ này, nhưng đối với tôi, nó có mùi của một người không nghiên cứu về nghề của họ.
Kaz Dragon

1

Nếu mục đích của bạn là sàng lọc nhanh chóng những kẻ bất tài, hãy thử một cái gì đó như thế này:

Kiểm tra FizzBuzz

Sau đó, bạn có thể để các khái niệm và thực tiễn về C ++ cho những người ở vị trí tốt hơn để đánh giá chuyên môn về C ++.


1
Tôi đã sử dụng và nhận được câu hỏi này thường xuyên và đã đề cập nó ở trên trong nhận xét của tôi, nhưng tôi cảm thấy khó xử khi hỏi trong một cuộc trò chuyện điện thoại 25 phút.
JasonTrue

0

Đó là một câu hỏi hợp lệ, nhưng không phải để sàng lọc. Tôi đã sử dụng nó như một câu hỏi bằng văn bản, sẽ được thảo luận tại cuộc phỏng vấn. Bạn có thể nhận được nhiều cái nhìn sâu sắc về các kiểu suy nghĩ được thông báo trước. Như một câu hỏi sàng lọc, nó chỉ là một cái bẫy khó chịu.

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.