LINUX.ORG.RU
ФорумTalks

Фрустрация от собеседования в «Яндекс»

 , ,


1

7

Здравствуйте. Некоторое время назад я собеседовался в «Яндекс». Хочу поделиться здесь моими впечатлениями от собеседования и историей неуспеха.

Я расскажу про первое собеседование, поскольку на остальных (их после этого было 3 или 4) никакого треша не было, и отказали мне на основе именно первого собеседования.

Итак, был дан код класса на C++: это контейнер, как std::vector, который должен уметь возвращать случайный объект согласно весам, которые передаются как float.

Код был написан с использованием функции rand() и содержал одну очевидную ошибку, которую я нашёл, и ещё одну неочевидную, связанную с возможной проблемой при округлении с арифметикой над float, которую я тоже нашёл. Я сказал, что rand() непотокобезопасна; её реализация, как правило, низкого качества; RAND_MAX зависит от платформы; получить честный рандом при заранее неизвестном RAND_MAX сложно; и т.д. Сказал, что в C++11 есть std::random. Интервьювер сказал, что std::random слишком громоздко для собеседования, давайте уж использовать rand().

Что-то там написали, пришло время писать тесты. Написали какой-то тест, который 1000 раз генерирует случайные объекты №1 и №2 с весами 1 и 2 и проверяет, что объектов №2 получилось больше. Далее по ролям: я (Я), интервьювер (И).

И: — Да, только тест недетерминированный, как его сделать детерминированным?

Я: — Можно зафиксировать seed. Если бы мы использовали std::random, там у engine есть метод seed(), а тут…

И: — Есть специальная функция srand()!

Я: — Да, только она зависит от платформы, как и rand().

И: — Ну хорошо, а можно передавать указатель на функцию, которая будет генерировать случайные числа…

<примечание>

То есть речь идёт о том, чтобы превратить метод

    T getRandomElement() const { … }
в
    T getRandomElement(int (*custom_rand)()) const { … }
И передавать туда либо настоящий rand, либо свою детерминированнуюю реализацию. Даже без void *userdata, насколько я понял — то есть то ли состояние должно храниться в глобальной переменной, либо оно должно возвращать константу. Да, это C++, не в Си. Указатель на функцию, не лямбду.

</примечание>

Я: — Ну можно, но это какой-то мегакостыль, да и зачем уродовать интерфейс для этого…

И: — Ну хорошо, у нас осталось не так много времени, давайте не будем это писать.

---

И вот потом мне говорят, что это была фатальная ошибка, что я предложил зафиксировать seed, а не лепить указатель на функцию. Сначала снизили грейд до «мидл-минус», потом вообще сказали, что не возьмём никуда.

Я, конечно, знал, что крупные компании очень привиредливые, но это вообще что такое? Какой извращенец пройдёт это интервью?

Эту тему я создаю в том числе для того, чтобы давать на неё ссылку HR из яндекса, если таковые ко мне ещё когда-либо постучатся.



Последнее исправление: shdown (всего исправлений: 4)
Ответ на: комментарий от dmitry237

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

Нет. Я Аполлон Бельведерский.

seiken ★★★★★
()
Ответ на: комментарий от seiken

Я Аполлон Бельведерский

Завышенная самооценка не только полезна, но и вредна.

dmitry237 ★★★★★
()
Ответ на: комментарий от masa

Кстати плюсовки там мне кажется самые снобы считающие себя гениями

Люди онанирующие на один инструмент встречаются везде, название инструмента роли не играет.

anc ★★★★★
()
Ответ на: комментарий от seiken

Нет, это не мой подход к жизни

Как только твой подход к жизни становится проблемой окружающих, становится очевидным, что с тобой что-то не так. Ну а дальше уже - к психотерапевту, разбираться. На ЛОРе тебе тут не помогут, только еще больше травм добавят.

pekmop1024 ★★★★★
()
Ответ на: комментарий от pekmop1024

Как только твой подход к жизни становится проблемой окружающих, становится очевидным, что с тобой что-то не так.

Для тех, кому кажется - да, это их проблема, ведь они либо не понимают ни черта в красоте, потому что валенки и дешёвки, и таков их удел с рождения, либо терпилы и деграданты, готовые терпеть всё, лишь бы заслужить конфетку от боса.

В любом случае, такое окружение меняется, оставаясь в тени своей никчёмности, а я продолжаю жить красиво и непринуждённо.

seiken ★★★★★
()
Ответ на: комментарий от seiken

они либо не понимают ни черта в красоте, потому что валенки и дешёвки, и таков их удел с рождения, либо терпилы и деграданты

Если это не троллинг, то тебе точно к доктору. :)

pekmop1024 ★★★★★
()

От тебя хотели конкретный паттерн, когда реализация фичи подается как аргумент для удобства тестирования. В реальности там мог бы быть не rand, а какая-нибудь функция запроса к БД или REST API. И чтобы в тестах её можно было безболезненно замокать.

Просто rand проще и нагляднее, чем вводить какие-то свои функции. Но твоё предложение с srand исходно валидно.

Полагаю, что дело в душноте. Тебе чётко сказали - делаем максимально просто, главное показать концепцию, а ты соскакиваешь то «а вот если бы использовали std::random...», то «а как же без user_data...». Это просто офтопик.

KivApple ★★★★★
()
Ответ на: комментарий от seiken

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

dmitry237 ★★★★★
()
Ответ на: комментарий от shdown

Потому что вопрос был не про C++, а про паттерн передачи реализации как аргумента. Его можно реализовать хоть принимая указатель на функцию, хоть std::function, хоть класс с виртуальными методами, хоть шаблонный параметр.

Интервьюер сказал «делаем максимально просто» (потому что на собесе ограничено время и его интересует конкретный паттерн, улучшения можно обсуждать, когда спросят «а что можно улучшить?»), значит надо делать просто, это не меняет сути.

KivApple ★★★★★
()

А если ты в принципе никогда не работал с рандомными данными, то ты даже не мидл и тебя в яндекс не возьмут? Смешно как-то, не?

spbzip
()
Ответ на: комментарий от spbzip

Так с ними не надо работать. Вопрос был вообще не про рандом, функция rand уже же была написана. Вопрос был «есть функция которая возвращает разное значение каждый вызов, как тестировать код её вызывающий детерменированно» и ответ «сделаем функцию аргументом, в тестах будем передавать детерменированную реализацию».

Вместо rand может быть вызов REST API, ввод данных от юзера и т. п. Но rand проще всего, потому что его обычно знают (функция стандартной библиотеки), она не требует пользовательского ввода, настройки окружения и т. д. То есть код с ней можно просто запустить в песочнице и она будет из коробки выдавать разные результаты.

KivApple ★★★★★
()
Ответ на: комментарий от anc

Там не то что в инструменте дело, просто плюсовики работают в основной компании и трудятся над «самым важным продуктом» - поиском, этакая элита, имеют всякие дипломы, степени и д. Все остальные это веб макаки.

masa ★★★
()
Ответ на: комментарий от masa

В таком изложении понятно. А то вы начали с инструмента :) Спасибо.

anc ★★★★★
()
Ответ на: комментарий от seiken

так это их проблемы, а не мои. Почему я должен «входить в положение»? Милостыню не подаю.

Дык тебе работник нужен, который будет работу работать конкретно, или тебе нужен предмет интерьера чтобы глаз от него радовался? Если первое, то на второе логично забить. Никакого «входить в положение» тут нет даже близко, смазливая мордашка к деловым качествам аналитика никакого отношения не имеет.

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

No pain no gain. Не получится быстрого роста без выхода из зоны комфорта. Херачить надо, дым коромыслом.

Для большей части таких студентов gain будет заключаться в опыте, что можно на работе жить, но ничего при этом не заработать. Что, безусловно, научит говорить их слово «нет».

Leupold_cat ★★★★★
()
Ответ на: комментарий от Leupold_cat

На фоне студенческой стипендии начальная зарплата студента кажется не такой уж и маленькой. Gain для студента заключается в том, что он за короткое время узнает/осваивает много всего нового - из того, что на самом деле требуется на работе. После чего вполне может претендовать на более высокую оплату труда.

Если тебе кажется, что из студней веревки вьют, то нет, обычно это не так.

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 2)

Скорее всего набивают kpi по проведенным собесам и отказам. По существу похоже на трындец.

bender ★★★★★
()
Ответ на: комментарий от Manhunt

Gain для студента заключается в том, что он за короткое время узнает/осваивает много всего нового - из того, что на самом деле требуется на работе.

А если студент хочет не за короткое время, а нормально?

После чего вполне может претендовать на более высокую оплату труда.

Для не столь уж и большого числа профессий. Зачастую, разница в зарплате определяется званиями/разрядами/категориями - а они в свою очередь определяются в общем случае стажем.

Если тебе кажется, что из студней веревки вьют, то нет, обычно это не так.

Я вот прямо сейчас наблюдаю, как молодые целевики-врачи сидят и заполняют истории. Я то на дежурстве, мне за нахождение на работе деньги платят. А они в статусе полурабов сидят тут бесплатно, вместо того, чтобы заниматься своими делами дома. Я их понемногу пытаюсь согнать домой, но не идут. Они иногда тут и ночевать остаются.

Leupold_cat ★★★★★
()
Последнее исправление: Leupold_cat (всего исправлений: 1)
Ответ на: комментарий от Reset

Плохое пишут только те кого туда не взяли. Я например про Яндекс только хорошее пишу :)

А не то уволят? %)

Nervous ★★★★★
()
Ответ на: комментарий от Leupold_cat

Для не столь уж и большого числа профессий.

До настоящего момента тут обсуждали узко погромистов.

Зачастую, разница в зарплате определяется званиями/разрядами/категориями - а они в свою очередь определяются в общем случае стажем.

Если говорить о крупных софтверных компаниях, то сетка зарплат часто бывает привязана к званиям. Но звания программистам раздают не за стаж, а за достижения (карьерный рост в рамках одной конторы) либо за развитые навыки (при устройстве на новое место работы в другой конторе). И при смене работодателя звания эти нифига не наследуются: на что отсобеседуют, то и предложат.

Я вот прямо сейчас наблюдаю, как молодые целевики-врачи сидят и заполняют истории.

Про медицину, и в частности про её бюджетную ветвь с современными «оптимизациями», я не особо в курсе. Было бы лучше, наверное, если бы они в первую очередь не на бумажках фокусировались, а на действенном обращении с пациентами. С другой стороны, и бумажки ж тоже надо заполнять научиться, эту обязанность в обозримом будущем никто не отменит.

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 2)
Ответ на: комментарий от Manhunt

До настоящего момента тут обсуждали узко погромистов.

Вы правы, я зря всех мешаю в кучу. Прошу прощения за это, просто наложился мой личный опыт с текущим наблюдением за молодыми врачами. Со стороны, сфера IT кажется мне самобытной в том, что касается наема работников и определения их зарплат.

Leupold_cat ★★★★★
()
Ответ на: комментарий от no-such-file

ТС ничего не слышал … про DI

Фрустрация от собеседования в «Яндекс» (комментарий):

Что реализация должна уметь работать с любым генератором рандома, хоть детерминированным, хоть нет, — это понятно, решается передачей генератора в класс ещё одним шаблонным параметром (с дефолтным значением). Собственно, я так и предлагал.

utf8nowhere ★★★★
()
Ответ на: комментарий от Leupold_cat

Они иногда тут и ночевать остаются.

У меня несколько знакомых тимлидов, которые частенько сидят на работе до 12 ночи. Взрослые мужики, с давно купленными квартирами, машинами, etc. Их никто не принуждает, но люди за работу свою отвечают, и делают её наилучшим образом. Если б у них было не такое фанатичное отношение к делу, то и до тимлидов не доросли бы :)

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 1)

Учитывая эту тему и правильно сделали что не взяли.

voltmod ★★★
()

TheNewDragon дал ответ на весь тред. А voltmod подтвердил. Непонятно что тут ещё можно было 2 страницы обсуждать. Остальные комментарии после TheNewDragon и до voltmod выше меня не читал.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 3)

Вообще-то фиксировать seed для тестов на псевдослучайных генераторах очень даже норм подход. Для рандома «свой указатель на функцию» обычно не используется. Последнее («подмена окружения») скорее чаще для «дай текущее время» полезным является. Но там надо реально заморочиться с тем, где этот «текущий указатель на функцию» хранить, так что…

Радуйся, что не попал к тому человеку, с кем вы думаете по-разному. Всегда считал, что собеседует не только компания кандидата, но и кандидат компанию.

Qasta
()
Ответ на: комментарий от bender

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

Reset ★★★★★
()
Ответ на: комментарий от Reset

Собеседователь поставил задачу угадать его мыслю

bender ★★★★★
()
Ответ на: комментарий от Reset

Я даже не понял в чем задача состояла

Ну почитай топик, ну.

контейнер, как std::vector, который должен уметь возвращать случайный объект согласно весам, которые передаются как float.

Написали какой-то тест, который 1000 раз генерирует случайные объекты №1 и №2 с весами 1 и 2 и проверяет, что объектов №2 получилось больше. Далее по ролям: я (Я), интервьювер (И).
И: — Да, только тест недетерминированный, как его сделать детерминированным?

shdown
() автор топика
Ответ на: комментарий от Reset

Тут не видно какой был код, какие были ошибки, как они искались, какая была вторая задача

По памяти я код с точностью до байта не восстановлю.

Ошибки, как они искались, какая-то «вторая задача» — это не имеет отношения к отказу. Причина отказа — детерминированный тест. Всё, что имеет к этому отношение, я изложил в топике. Что ты ещё хочешь, я не знаю.

Что за «вторая задача» — я хз. Вроде как на том интервью был только один класс и несколько — как минимум три — задания по нему, не считая поиск ошибок. Ты не путаешь с интервью на решение алгоритмических задач?

shdown
() автор топика
Ответ на: комментарий от shdown

Ошибки, как они искались, какая-то «вторая задача» — это не имеет отношения к отказу.

Имеют самое прямое отношение

Reset ★★★★★
()
Ответ на: комментарий от Reset

Алё, мне HR-ка на созвоне сказала, что придрались именно к детерминированному тесту, всё остальное отлично. У тебя есть какой-то инсайд, почему мне на самом деле отказали, или что?

С таким же успехом можно утверждать, что никаких собеседований я не проходил («мы этого не знаем»), а создал топик просто для того, чтобы очернить «Яндекс». А что, никаких пруфов же нет у меня.

shdown
() автор топика
Последнее исправление: shdown (всего исправлений: 2)
Ответ на: комментарий от shdown

У меня нет инсайда я просто знаю как это обычно происходит. Тест это одно из, это то что HR для себя выделила в записях интервьювера. HR не общается с интервьювером и делает выводы только на основании его записей. Если это была AA секция, то не имеет значения на сколько хорошо ты прошел все остальное. Жди полгода теперь потом снова пробуй.

а создал топик просто для того, чтобы очернить «Яндекс»

А для чего еще создавать такие топики?

Reset ★★★★★
()
Последнее исправление: Reset (всего исправлений: 1)
Ответ на: комментарий от Reset

А для чего еще создавать такие топики?

А поговорить?

urxvt ★★★★★
()
Ответ на: комментарий от Reset

Тест это одно из, это то что HR для себя выделила в записях интервьювера

Нет, она рассказала, что ходила по командам, там смотрели записи интервьювера и в большинстве команд придрались к тому, что там написано, что до чего-то там не додумался в детерминированном тесте. Другие команды просто искали кандидатов другого уровня, специалистов/имеющих опыт по железу/GPU или что-то такое.

Жди полгода теперь потом снова пробуй.

Ты издеваешься? Я буду давать ссылку на эту тему HR из яндекса, если таковые ко мне ещё когда-либо постучатся, с комментарием, что они фуфлыжники и тридварасы.

shdown
() автор топика
Последнее исправление: shdown (всего исправлений: 2)
Ответ на: комментарий от shdown

Нет, она рассказала, что ходила по командам, там смотрели записи интервьювера

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

Ты издеваешься? Я буду давать ссылку на эту тему HR из яндекса, если таковые ко мне ещё когда-либо постучатся, с комментарием, что они фуфлыжники и тридварасы.

С тем же успехом можно в спортлото писать.

Reset ★★★★★
()
Ответ на: комментарий от shdown

А «АА секция» — это что такое? Это было первое интервью.

Это секция которую проводит интервьювер со специальной лычкой. Она может быть какой угодно по порядку. Если такой интервьювер говорит нет, то значит нет.

Reset ★★★★★
()
Ответ на: комментарий от Reset

С тем же успехом можно в спортлото писать.

Ну, если ничего делать больше не остаётся, можно и в спортлото писать, и топики такие создавать. Авось хоть один человек какие-то выводы для себя сделает.

shdown
() автор топика
Ответ на: комментарий от Reset

А можно как-то понять, какое из 4—5 собеседований было «АА секцией»?

shdown
() автор топика
Ответ на: комментарий от shdown

Я вот все думал, а что такое детерминированный или нет тест? Это значит, что мы функцию случайных чисел не можем протестировать? А что изменится от передачи ее в каком-то виде в тест? Как будто от этого она будет те же значения выдавать. Или реально будет?

hibou ★★★★★
()
Ответ на: комментарий от hibou

Это значит, что мы подсовываем свою реализацию ГПСЧ, который будет всегда одну и ту же последовательность выдавать, поэтому тест не сфейлится из-за фазы луны.

shdown
() автор топика
Ответ на: комментарий от hibou

Мы подсовываем этот «плохой» генератор только в юнит-тесте, чтобы юнит-тест не сфейлился из-за фазы луны. При обычном использовании там будет нормальный генератор.

shdown
() автор топика
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)