Що я можу зробити, коли інтерв'юер не знає відповіді на власне запитання? [зачинено]


48

Вчора у мене було жахливий досвід в інтерв'ю.

Інтерв'юер запитав мене про чисто віртуальну функцію. Я сказав: "У базовому класі це може бути, а може і не бути, але похідні класи повинні містити визначення, якщо вони також не хочуть бути абстрактним класом.

Але інтерв'юер продовжував запитувати, що "Чи може віртуальний мати визначення !!! ???" ... Я сказав так.

Знову він сказав "Чисто?"

Я сказав так. Дозволено, похідні класи можуть явно викликати цю функцію, якщо вони хочуть саме цієї поведінки.

Він відправив мене. Я впевнений, що він не знає факту, що чиста віртуальна функція може мати визначення.

Як боротися з таким видом інтерв'юерів?

Запитавши вдруге, чи повинен я брехати, що він не може мати визначення? :)

Або я повинен дотримуватися своїх слів і втратити можливість роботи?


51
Вам слід зв’язатися з ними на прикладі чистої віртуальної функції з визначенням, щоб вони знали.
GManNickG

22
Пропозиція GMan - відмінна ідея. Ви, мабуть, справите враження на інтерв'юера, що ви достатньо дбали про роботу, щоб продовжити, вірить ви чи ні. І якщо ви навчите його чомусь якомога неконфліктнішим чином, добре, що повинно лише спонукати його / її думати про вас як про розробника. Все-таки важке рішення, хочете ви там працювати чи ні.
Коді Грей

47
Але ти справді хочеш працювати на таких людей?

29
Один мій інтерв'юер задав мені питання, що стосувалося цього виразу arr[++i] = i. І коли я сказав, що це закликає до невизначеної поведінки і розповідав йому про точки послідовності , він на хвилину був безмовною, і тоді його вираз обличчя та його подальші запитання змусили мене повірити, що він ніколи раніше навіть не чув цих термінів!
Наваз

10
Вважайте, що інтерв'юерів часто вибирають не за технічною майстерністю, а за здатністю оцінювати комунікаційні таланти респондента. Технічна майстерність легко оцінюється, вміння бути продуктивним і вміти в команді немає. Мені здається, у вас є багато можливостей адаптувати свій погляд і пояснити своє наполягання не робити цього, але не виконали жодного. Це не вдалося.
Ганс Пасант

Відповіді:


82

Ні. І вам слід подякувати щасливим зіркам, що вас пропустили саме цією кулею. Працювати для людей, які відмовляються визнати, що вони можуть не знати все, і відмовляються вчитися у інших, - ДУЖЕ неприємне враження.


7
Точніше процес співбесіди працює обома способами. Поки компанія судить мене як працівника, я суджу їх як роботодавця. Багато хто вважає бажаючих.
ДАЙТЕ МОЕ правильне ДУМКА

Справді. Під час мого телефонного інтерв'ю на посаду кілька днів тому інтерв'юер попросив приклад чогось, що демонструвало б знання того, хто знайомий з мовою, якою він користується. Питання про це було додано в останню хвилину до особистого інтерв'ю. Я знаю цих хлопців і знаю, що вони чудові дияволи, тому я думаю, що хочу працювати з ними. :)
greyfade

49

Приклад чистої віртуальної функції з визначенням:

// object.hpp
struct object
{
    // virtual destructor, to allow use as a public base class,
    // but pure to ensure object itself isn't instantiated
    virtual ~object() = 0; 
};

inline object::~object()
{
    // empty implementation
}

6
Це не просто приклад чистої віртуальної функції з визначенням, а приклад того, як вона може бути корисною. +1.
j_random_hacker

3
Не знав, що ти можеш це зробити. Класно! = D
габлін

2
Це спосіб створення базового поліморфного об’єкта. Потім ви можете використовувати його для динамічного перенесення вниз по ієрархії. Корисний за деяких обставин, наприклад, плагінів, щоб перевірити, чи відповідає плагін очікуваного типу (при припущенні, що він обов'язково походить від вашого базового класу). До речі, чистому віртуальному деструктору ОБОВ'ЯЗКОВО давати визначення.
CashCow

Тепер якби це все ще могло бути банальним , це було б добре.
Дедуплікатор

42

Проблема не в технічній коректності, а в соціальних / комунікативних навичках. Будьте твердими, але визнайте точку зору інтерв'юера і дозвольте їм зберегти обличчя.

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

Поширена думка, що чисті віртуальні функції не можуть мати визначення. Однак, технічно кажучи, для того, щоб віртуальна функція була чистою, вона повинна бути =0в декларації. У ньому ще може бути визначення (спробуйте, воно буде компілювати!). Звичайно, це використовується рідко, і на практиці, коли більшість людей кажуть "чистий віртуальний", вони мають на увазі, що це визначення відсутнє.


3
Ви в основному скопіювали мій коментар 25 хвилин. перш ніж я це написав! Як? - +1 та подібний тематичний коментар видалено.
Стів314

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

3
Це була саме моя думка. Просто кажучи "так, це можна", без уточнення, мені здається зрозумілим, що інтерв'юер вважав, що не розуміє питання. Розширюючи відповідь, ви даєте зрозуміти, що а) ви розумієте питання і б) ви насправді знаєте відповідь. Я не думаю, що інтерв'юер не обов'язково помилявся в спробі натиснути на точку, або, очевидно, досить поширене непорозуміння, що люди думають, що чисті віртуальні функції не можуть мати визначення.
Дін Хардінг

10
@Steve ви отримаєте подорож у часі від 500 повторень, ви, мабуть, пропустили сповіщення
Pekka підтримує GoFundMonica

Я робив те саме кілька років тому на інтерв'ю C ++ (для системи з високою продуктивністю), де я пояснив, що використання об'єкта функції може мати кращу продуктивність, ніж використання вказівника функції через вбудоване, і пояснив це йому. Я також цитував книгу "Ефективний C ++". Він насправді підвівся, щоб перевірити книгу, і сказав, що цього не знає, і був вражений. Добре пояснити свою відповідь.
софтведа

10

Ви могли б пояснити, як оголосити чисту віртуальну функцію, яка має реалізацію.

Насправді, я б хотів, щоб ти тут, бо я також не знайомий, як це зробити.


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

1
Ну, це не пояснює, як це робиться. Якщо когось цікавить, перегляньте en.wikipedia.org/wiki/… . У будь-якому випадку, я все ще думаю, що пояснення, як це зробити, було б найкращою відповіддю.

1
+1 - і я другий твій рядок. Гірше, якби я не був у винятковому ", але іноді неправильному" настрої, я би став на сторону інтерв'юера. Проблема полягає в тому, що ви можете лише вдруге здогадатися про свої переконання певною мірою, інакше ви фактично нічого не знаєте.
Стів314

1
@ Steve314: Хе, я знаходжу, чим старше я стаю, тим більше я відкритий до помилки. Завжди є хтось, хто знає більше, ніж я. :-)

@Jonathon - так, але без 100% точної вказівки на те, наскільки я повинен бути впевненим у всіх моїх різних думках, як я можу знати, які з них допитувати? І щоб бути відкритим до помилки, чи це означає, що я завжди повинен вважати, що інші люди мають рацію, і я помиляюся? Всі ми можемо час від часу бути впевненими, але не так, але чи це означає, що ми ніколи не повинні стверджувати свою впевненість? І якщо мій рівень довіри не повинен бути моїм керівництвом щодо того, чи я дотримуюся зброї, поки не побачу вагомих доказів, що робити?
Steve314

6

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


Це чудова відповідь.
Ніл Г

+1: Ось як я інтерв'ю. Мене більше хвилює те, як ми взаємодіємо та обмінюємось думками більше, що правильно, а що ні. Сформулюйте свою позицію та / або поясніть міркування, що стоять за нею, і ви продемонструєте, що не тільки ви компетентні, але і ви "командний гравець".
матуся

Ще +1: Я думаю, що важливо найняти людей, які можуть добре посперечатися . Якщо новий наймач не зможе відстояти свої ідеї, вони не зможуть зайти далеко в команду з іншими вольовими людьми!
Зан Лінкс

5

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

У вашому випадку, чи відчуваєте ви це сліпим незнанням чи справжнім непорозумінням? Можливо, надішліть електронний лист із прикладами та посиланнями: подивіться, як вони реагують, перш ніж приймати рішення.

Я схильний до "сліпого невігластва", хоча виходячи з вашого запитання, і я б залишався чітким ...


Інтерв'юер задав лише це питання і відправив мене. Я не можу зв’язатися з ними, оскільки у мене немає ідентифікатора електронної пошти.
bjskishore123

@ bjskishore123: через агентство? Однак я б
тримався

так, через консультацію.
bjskishore123

+1 Це звичайний досвід. Я лише один раз провів співбесіду з будь-ким, хто знав достатньо, щоб перевірити правильність моєї майстерності.
Увімкнення

3

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

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


3

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

У моєму випадку інтерв'юер запитав, як обчислити дисперсію великої кількості чисел на багатьох машинах. Я почав з того, що дисперсія - це середнє значення квадратів мінус квадрат середнього. Він втрутився, "ні, так" E[(x - mu)²].

Я сказав: "Так, ти маєш рацію. Але твоя формула така ж, як і моя. Давайте виведемо її разом". А потім ми вивели це разом.

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

Спробуйте уявити речі з його точки зору. Ви один день будете опитувати людей, а іноді помилитесь. Як би ви хотіли, щоб яскравий кандидат відповів на таке запитання?


Середнє значення - E [(x - mu) ²], хоча ви, мабуть, це мали на увазі. Отже, ви можете оцінити, що для E [x² - 2xmu + mu²] = E [x²] - E [2xmu - 2mu²] - E [mu²] E [(x-mu)] завжди дорівнює 0, а E [mu²] = mu² як mu - константа, доведена таким чином.
CashCow

2

Я думаю, ви повинні були перенести інтерв'ю з парти на комп’ютер із компілятором. Це вирішило б питання.


1

EDIT: мабуть, я абсолютно помиляюся, дивіться коментарі нижче цієї відповіді. Залиште тут відповідь у навчальних цілях.

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


8
Ні, вибач. Він правий.
GManNickG

1
BZZT !!! Неправильно! = 0 - це те, що робить його чистим. Такі функції можуть мати визначення.
Едвард Странд

4
так, колір мене здивував. Я ніколи цього не знав.
Філіп Поттер

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

1

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

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