Что я могу сделать, если интервьюер не знает ответа на свой вопрос? [закрыто]


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 и комментарий на аналогичную тему удален.
Steve314

3
Это еще один хороший момент. Однажды я доказал свою оценку на тесте, потому что я показал своему профессору, что код, который я написал на тесте, будет компилироваться. Компилятор не лжет ... никогда ...
jmort253

3
Это была именно моя мысль. Просто сказав «да, может», без разъяснений, мне кажется, что интервьюер думал, что не понял вопроса. Расширяя ответ, вы даете понять, что а) вы понимаете вопрос и б) вы действительно знаете ответ. Я не думаю, что интервьюер был не прав, когда пытался настаивать на этом, либо, очевидно, довольно распространенное заблуждение, что люди думают, что чисто виртуальные функции не могут иметь определения.
Дин Хардинг

10
@ Скажи, что ты получаешь путешествие во времени от 500 представителей, должно быть, ты пропустил уведомление
Pekka поддерживает GoFundMonica

Я сделал то же самое несколько лет назад на интервью C ++ (для высокопроизводительной системы), где я объяснил, что использование функционального объекта может иметь лучшую производительность, чем использование указателя на функцию из-за встраивания, и объяснил это ему. Я также процитировал книгу «Эффективный C ++». Он на самом деле встал, чтобы проверить книгу, и сказал, что не знает этого и был впечатлен. Это хорошо, чтобы объяснить ваш ответ.
софтведа

10

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

На самом деле, я бы хотел, чтобы вы были здесь, потому что я тоже не знаю, как это сделать.


5
Вы просто объявляете функцию чисто виртуальной, а затем предоставляете реализацию. Это довольно необычная практика, но в «Эффективном C ++, 3-е издание» Скотт Мейерс описывает несколько сценариев, где это полезно. В частности, поскольку функция является чисто виртуальной, класс, в котором она объявлена, является абстрактным, но поскольку она имеет реализацию, она предоставляет подклассам реализацию по умолчанию, которую они могут явно выбрать для использования, если захотят.

1
Ну, это не объясняет, КАК это сделано. Если кому-то интересно, загляните на en.wikipedia.org/wiki/… . В любом случае, я все еще думаю, что объяснение, как это сделать, было бы лучшим ответом.

1
+1 - и я вторую твою вторую строчку. Хуже того, если бы у меня не было исключительно «но иногда плохого» настроения, я бы встал на сторону интервьюера. Беда в том, что вы можете лишь в какой-то степени угадать свои убеждения, иначе вы фактически ничего не узнаете.
Steve314

1
@ Steve314: Хех, я считаю, что чем старше я становлюсь, тем больше я открыт для того, чтобы ошибаться. Всегда есть кто-то, кто знает больше меня. :-)

@Jonathon - да, но без 100% точного указания того, насколько я должен быть уверен во всех моих различных мнениях, как я узнаю, какие из них следует подвергнуть сомнению? И чтобы быть открытым для того, чтобы быть неправым, значит ли это, что я всегда должен предполагать, что другие люди правы, а я неправ? Мы все время от времени можем быть уверены, но не правы, но значит ли это, что мы никогда не должны утверждать нашу уверенность? И если мой уровень уверенности не должен быть моим руководством к тому, придерживаюсь ли я свое оружие, пока не увижу убедительные доказательства, что должно?
Steve314

6

Много раз, когда я беру интервью у кандидата, я смотрю, как человек справляется с неопределенностью или сталкивается с конфронтацией. В следующий раз, когда вы проводите собеседование, будьте внимательны к этому и постарайтесь конструктивно ответить на вопрос или объяснить свою позицию. Это может быть важнее, чем правильный ответ.


Это отличный ответ.
Нил Дж

+1: так я беру интервью Меня больше волнует, как мы взаимодействуем и больше обмениваемся мыслями о том, что правильно, а что нет. Укажите свою позицию и / или объясните причины этого, и вы продемонстрируете, что вы не только компетентны, но и являетесь «командным игроком».
мамочка

Еще +1: я думаю, что важно нанимать людей, которые могут хорошо спорить . Если новый наем не сможет отстоять его или ее идеи, они не добьются успеха в команде с другими волевыми людьми!
Zan Lynx,

5

Я был на интервью, где я знал больше, чем мой интервьюер. Тем не менее, они хотели, чтобы кто-то исполнил роль, и не было никого (конечно), кто мог бы взять интервью на этом уровне.

В вашем случае, вы чувствуете, что это было слепое невежество или подлинное недоразумение? Возможно, последующее письмо с примерами и ссылками: посмотрите, как они реагируют, прежде чем принимать решение.

Я склоняюсь к «слепому невежеству», хотя, основываясь на твоем вопросе, и останусь вполне ясным…


Интервьюер задал только этот вопрос и выслал меня. Я не могу связаться с ними, так как у меня нет идентификатора электронной почты.
bjskishore123

@ bjskishore123: через агентство? Тем не менее, я бы
держался

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

+1 Это обычный опыт. У меня только один раз было интервью с кем-то, кто знал достаточно, чтобы проверить мои навыки правильно.
Orbling

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² как му является константой, доказанной таким образом.
CashCow

2

Я думаю, что вы должны были перенести интервью со стола на компьютер с компилятором. Это решило бы проблему.


1

РЕДАКТИРОВАТЬ: очевидно, я совершенно не прав, см. Комментарии ниже этого ответа. Оставьте ответ здесь в образовательных целях.

К сожалению, вы ошибаетесь. Виртуальная функция может иметь определение; чисто виртуальная функция не может. Недостаток определения - вот что делает его чистым.


8
Нет извини. Он прав.
GManNickG

1
BZZT !!! Неправильно! = 0 это то, что делает его чистым. Такие функции могут иметь определения.
Эдвард Стрэндж

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

3
Википедия объясняет, что «хотя чистые виртуальные методы обычно не имеют реализации в классе, который их объявляет, чистые виртуальные методы в C ++ могут содержать реализацию в своем объявленном классе, обеспечивая откат или поведение по умолчанию, которому производный класс может делегировать, если это необходимо. " Таким образом, даже если для чисто виртуальной функции необычно или нетипично определять ее реализацию, это возможно.
Коди Грей

1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.