Чи є "Пояснення ідіоми RAII" гарним питанням скринінгу на C ++? [зачинено]


13

Компанія, з якою я співпрацюю, попросила мене зробити скринінг телефону кандидата, щоб переконатися, що вони не збентежилися, коли надсилали когось потенційному клієнту.

Виявляється, на роль розробника C ++ помістили неабияку кількість людей. Я не витрачаю багато часу на C ++, але я зробив декілька тривіальних та нетривіальних проектів з мови. Я подумав, що "Поясніть ідіому RAII" буде приємним питанням софтболу, на яке більшість серйозних розробників C ++ можуть відповісти, поки не спить, і дозволить мені перейти до більш цікавих питань щодо досвіду. Але виявляється, що люди, які мають досвід 10+ років C ++, не визнають цього терміну, навіть якщо я розширюю абревіатуру до "Придбання ресурсів - це ініціалізація". Один із кандидатів пішов так далеко, що він вважав, що застосовувати методику в розробці Windows не завжди практично, що я вважав дивним, але я міг побачити пару прикладів, які, напевно, підтримують цю думку.).

Навіть кілька розробників C ++, яких я досить добре знаю, щоб оцінити їхню компетенцію, сказали, що термін не визнають, але, прочитавши резюме методики, сказав: «О так, я не знав, що це ім’я. Я просто думав про ці речі як про щось, що ти просто повинен робити ». Я пам’ятаю термін із другого видання книги Струструпа, навіть якщо повний вплив на той час не занурився.

Отже, "Чи можете ви пояснити мені ідіому RAII?" чесне скринінг-питання? Чи розумно очікувати, що всі компетентні розробники C ++ зрозуміють це? Чи є термін більш езотеричним, ніж я б думав? Якщо припустити, що кандидат не знає цього терміна, чи є додаткові запитання, які допоможуть мені розібратися, чи вони принаймні інтерналізували практику, яка змушує працювати RAII? Чи є кращі альтернативні питання "бур'яну", які дають кандидату певну широту у відповідях та допомагають кандидату продемонструвати своє розуміння розвитку С ++?

Редагування, щоб додати : Щоб уточнити, я не той тип інтерв'юера, який дискваліфікує людей, оскільки вони не знають модних слів та абревіатур. Однак я вважаю, що доцільно очікувати, що досвідчений програміст на C ++ втілив передовий досвід управління ресурсами. Я також вважаю, що важливо перевірити, чи кандидат розуміє деякі "основи" щодо технології, на яку вони вимагають експертизи, перш ніж перейти до більш цікавих питань щодо дизайну, вирішення проблем тощо. задати відкрите запитання, придатне для використання в короткому екрані телефонного зв’язку, яке я можу використовувати, щоб оцінити основне розуміння кандидатом належних практик управління ресурсами в C ++, перш ніж задати "важкі" питання.


3
"Навіть пару розробників C ++, яких я досить добре знаю, щоб оцінити їх компетентність, сказали, що термін не визнають". Добре. "Отже, чи" Чи можете ви пояснити мені ідіому RAII? "? Чому запитати? Ви не могли знайти людей, які знали про це. Що ще потрібно знати, що ви ще не знаєте? Можливо, вам варто принизити цю тему (оскільки ви вже знаєте відповідь) і зосередитись на питаннях "Чи є кращі альтернативні" питання ", які можуть бути цікавими. За винятком того, що це думка про розстріл, які не переносяться добре.
С.Лотт

9
Ідіоми змінюються, хорошої практики немає. Замість того, щоб питати про якусь ідіому, а як просто запитати, "які кроки ви робите при розробці класу, щоб переконатися, що він не протікає?"
Blrfl

Досить справедливо, хоча розмір вибірки низький, і я більше не активно займаюся спільнотою C ++, тому я не знаю, що громада вважає важливими знаннями в наші дні. Я по суті намагаюся розібратися, як розширити свій репертуар питань, за допомогою яких можна оцінити реальні знання C ++ за межами, наприклад, основ синтаксису.
JasonTrue

2
ваша проблема - це не те, чого я очікував. Я припускав, що ви знайдете когось, хто знає, що таке RAII, наймуть на роботу, і лише пізніше ви дізнаєтесь, що вони все ще піддаються кодуванню.
Кевін

1
@JasonTrue: Я думаю, що запитання про fizz buzz мають бути актуальними питаннями програмування, такими як обернення рядка. Але все одно я думаю, що це прекрасне питання. Ви також можете розглянути питання про те, які функції в c ++ - 0x опитаний вважає найбільш хвилюючими чи важливими. Це трохи складніше, але якщо ви отримаєте хорошу відповідь, це, ймовірно, означає добрі речі. І питання завжди може повернутися до того, "які прискорені бібліотеки є найважливішими / цікавішими", якщо ви придивитесь.
Кевін

Відповіді:


24

Ви, схоже, виявили, що розробники C ++, яких ви знаєте з досвіду, компетентні, не знайомі з цією абревіатурою або навіть повним виразом. Це одне, здавалося б, вказує на те, що це питання не підходить як питання екранізації під час телефонного дзвінка.

З іншого боку, ви можете дістатися до тієї ж точки більш обхідним шляхом, створивши сценарій. Щось на кшталт: "Ви реалізуєте клас Log, який запише інформацію про журнал у файл. Очевидно, вам знадобиться мати змінну члена, яка є ручкою файлу (std :: FILE *). Де ви можете виділити та звільнити цей файл впоратися? " Якщо кандидат починає розмову про створення відкритого () та методу close (), а не про розподіл файлової ручки в конструкторі та про переміщення ручки в деструкторі, ви можете продовжити запитання про речі, як, як би поводився їх клас, якщо виклик коду, який підняв винятки тощо.


Відмінна пропозиція. Мені подобається такий підхід.
JasonTrue

Займає занадто багато часу в інтерв'ю по телефону.
HelloWorld

15

Я не думаю, що це практичне питання, як це пропонується. Я думаю, ви знайдете, що багато розробників потраплять до табору "о, так, я не знав, що має ім'я". Я б запропонував вам протестувати кандидатів на концепції, а не назви концепції. Наведіть їм приклад коду і запитайте, чому він є неповним, або запропонуйте їм продемонструвати, що вони знають поняття.


3

Я думаю, це питання справедливе. Хоча я не знаю, наскільки популярним є термін RAII (в моїй команді ми постійно використовуємо термін RAII), але концепція обробки ресурсів важлива, особливо якщо ви хочете, щоб безпека винятків і безпека була багатопоточною. .


3

Ну, я знаю, що коли я хочу знати, чи хтось компетентний, перше, що я роблю, - це перевірити їх знання з абревіатур. Коли це встановлено, я переконуюсь, що вони знають назви інших технологій, які, на мою думку, звучать круто. Якщо вони все ще там після цього, то я прошу у них список улюблених кольорів.

Я не витримую подібних речей. Я маю на увазі, на моєму завершенні інтерв'ю це сирени та попереджувальні дзвони. Я не хочу працювати в тому місці, де насправді має значення те, що я знаю химерні мнемоніки, які мій начальник вважає "основоположними". Мені не можна заважати дізнаватися імена людей, з якими я маю справу протягом багатьох років, тому я впевнений, що в пеклі не витрачайте простору на мозок з милими абревіатурами, що описують кращі практики.

Подивіться на мій код. Запитайте мене, як би я робив справи. Я зроблю лайно на дошці, поки корови не повернуться додому. Я кодую вам додаток. Не давай мені дрібницьких дрібниць. Дрібниці завжди потрапляють або пропускають, і це ніколи не є принциповим.


Я не схильний задавати багато питань езотеричних знань під час екранізації інтерв'ю, але я повинен зробити належну ретельність, щоб переконатися, що хтось не зовсім некомпетентний. Відповідно, я шукаю відкрите запитання, яке дозволяє мені перевірити певний рівень знань, дозволяючи кандидату показати свій власний досвід. Я очікую, що "якісь" знання будуть спрямовані, якщо хтось скаже, що знає технологію X у своєму резюме моє запитання зводиться до того, яких знань слід очікувати програмісту на C ++, який є корисним шлюзом для подальшої розмови?
JasonTrue

4
@jason: Ну, мабуть, я зможу запам'ятати абревіатуру RAII протягом декількох місяців. Чи це ефемерне знання робить мене компетентним, навіть якщо я не торкався С ++ протягом багатьох років? Це дотепні дрібниці. Запитайте їх, як вони поводяться із замками, і переконайтеся, що вони розуміють власне ЗНАННЯ, а не дивну абревіатуру.
Satanicpuppy

1
@jason: Я згоден. Я просто не згоден, що основи включають в себе такі дрібниці. Ідіот може це знати, а експерт цього не може. Ви базуєте свій процес відбору на чомусь невідповідному для навички.
Satanicpuppy

5
Знання того, як називається RAII, не є істотним знанням. Але автоматично тягнеться до шаблону.
btilly

2
RAII - це основоположне поняття хорошого C ++, і термін його існування принаймні 20 років. Я вважаю, що відкидати це як дрібниці дещо несправедливо. Хоча ви можете мати хороших розробників C ++, які не знають цього терміна, для мене це пахне тим, хто не досліджує їхнє ремесло.
Kaz Dragon

1

Якщо ваша мета - швидко відстежувати загальну кількість некомпетентних, спробуйте щось подібне:

Тест FizzBuzz

Тоді ви можете залишити поняття та практики C ++ тим, хто в кращому стані оцінити експертизу C ++.


1
Я часто використовував це питання і отримував його, і згадував його вище у своєму коментарі, але мені здається, що це було незручно запитати у телефонній розмові за 25 хвилин.
JasonTrue

0

Це дійсне питання, але не для екранізації. Я використовував це як письмове запитання, яке обговорювалося на співбесіді. Ви можете отримати багато розуміння моделей мислення заздалегідь заздалегідь. Як питання скринінгу, це просто неприємна пастка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.