Здравствуйте, i-maverick, Вы писали:
IM>Здравствуйте, branco, Вы писали:
B>>В этой конторе текучка. Объявления о вакансиях висят постоянно.
IM>На Яндексе тоже постоянно висят. Это ни о чем не говорит.
B>>А как насчёт вот этого теста? Он как раз на вакансию в Яндексе. B>>http://company.yandex.ru/inside/job/music_developer.xml
IM>Это не тест — там нет ответов. Просто список заданий. IM>А вообще, что ты уже второй раз кидаешь ссылку и тихо улыбаешься? Инициатива наказуема: присылай свое решение.
Ну, 1-й вопрос,
На вскидку, не заглядывая в стандарт,доки и.т.д.
Здравствуйте, AndrewJD, Вы писали:
H>>Конечно же, виноват и все такое. Но разве так уж важно, что я не могу с ходу написать конструктор копирования? AJD>Может солидной фирме нужен был специалист по с++ и у нех небыло свободной джунировской позиции.
Значит судя по timeframe этого сообщения, тем кто выгнал человека с собеседования был я.
Могу рассказать как все это выглядело с моей стороны. Возможно забыл детали — можешь поправить.
Человек пишет:
A::A(A a)
{
...
}
Я говорю это не работает — приводит к бесконечной рекурсии. В ответ непонимание.
Спрашиваю наводящий вопрос: если мы передаем класс в функцию по значению, как он туда копируется?
Ответ: конструктором копирования.
Вопрос: а здесь каким конструктором копирования?
В ответ понимающий взгляд, и ответ "ну конечно должно быть так".
A::A(A* a)
{
...
}
Я по-моему задал какой-то еще наводящий вопрос. Какой не помню — помоему спросил почему std::string копируется в синтаксисе
string s(other_string);
Получил опять понимающий взгляд: "ну конечно же!"
A::A(A& a)
{
...
}
Здесь я сказал уже лучше, но все равно чего-то не хватает. И в качестве примера попытался привести следующий код, который не сработает.
const A a;
A a1(a);
Будет ошибка компиляции.
Внимание jazzer-у, стандартов мы не обсуждали, был конкретный класс с написанными членами, и конкретная ситуация в которой конструктор не работал, т.к. не компилился
В ответ полное непонимание. Примерно 2-3 минуты я пытался придумать наводящий вопрос, все мои попытки не увенчались успехов. В результате я пришел к выводу что концепция константных объектов человеку полностью чужда. В этом момент я окончательно принял решение, что я не хочу с этим человеком работать в команде. В тот момент когда я это понимаю я об этом говорю сразу — отказывать людям в глаза меня не напрягает, и лишнего времени на то, чтобы задать человеку еще несколько на порядок более сложных вопросов и убедиться, что он на них тоже не ответит у меня нет.
Плюс я считаю этот метод более честным, чем для вида еще 2 часа мучать человека, чтобы потом ему сказать "ну ок — мы подумаем и напишем наше решение".
Тем не менее из всей этой ситуации сделаны очень неправильные выводы. Разъясню свою точку зрения популярно:
Человек был выгнан не за незнание синтаксиса. Мне вообще глубоко наплевать на знание синтаксиса. Вообще говоря у нас в Яндексе принято, что во время прохождения собеседования можно пользоваться Яндексом и Гуглем(забыл что-то, спроси у человека который тебя собеседует — он ответит). Просто об этом говорят в момент когда переходят от совсем базовых задач к сложным, где хотя бы упоминаются функции у которых имеет смысл узнавать параметры.
Я увидел, что человек ни разу в жизни не написал класс который можно корректно положить в STL-евский контейнер(попытка написать A*) и не понимает, что такое константность объектов(A&). Плюс с очевидных подсказок не может придумать это прямо во время собеседования(я взял на работу пару студентов, которые не знали, но делали несколько логичных предположений на собеседовании и в результате решали задачу — здесь этого не произошло).
Работать с таким человеком я не захотел. Может быть я злой и циничный человек.
P.S. Для информации — задача здесь была вообще не на конструктор копирования — просто я не успел ее задать.
P.P.S. В процессе я по-моему поправил несколько мелких ошибок синтаксиса типа нерасставленных * в теле конструктора, про них не упоминаю т.к. действительно не важно.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте, Hottabych1, Вы писали:
H>Господа из Яндекса! H>Если вы это читаете, то дайте мне еще один шанс. Обещаю, возьмете к себе — не пожалеете!
Я же тебе сказал — приходи через пол года если почувствуешь, что стал круче.
P.S. На 21 минуте точно бы засыпался как говорят. Тебя про map не только бы спросили сортированный он или нет, но и почему он сортированный. И как внутри устроен.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Он кстати очень простой. Такой pre-screening ватоматический. Автор топика его прошел.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте, Anatolix, Вы писали:
B>>А как насчёт вот этого теста? Он как раз на вакансию в Яндексе. B>>http://company.yandex.ru/inside/job/music_developer.xml A>Он кстати очень простой. Такой pre-screening ватоматический. Автор топика его прошел.
Ну судя по его ответам в этой ветке, не решил даже первую задачу.
Здравствуйте, i-maverick, Вы писали:
B>>>А как насчёт вот этого теста? Он как раз на вакансию в Яндексе. B>>>http://company.yandex.ru/inside/job/music_developer.xml A>>Он кстати очень простой. Такой pre-screening ватоматический. Автор топика его прошел.
IM>Ну судя по его ответам в этой ветке, не решил даже первую задачу.
Да брось ты. Этот тест писал я вместе с еще одним хорошим программистом.
В первом вопросы была цель сделать наибольшее количество ошибок в наименьшем куске кода.
Максимум помоему находили 13, совершенно не обязательно найти все для того, чтобы прийти
на собеседование. Вообще по-моему любого нормального человека заломает полчаса сидеть над
куском кода в 15 строчек. Если мы видим что человек понимает, про что это пусть приходит.
Это не тест на то брать/не брать, а на то звать/не звать. Иногда мы приглашаем человека
с явными ошибками, просто потому что в чем то нам его ответ понравился.
А вообще основную мысль которую хотелось донести тестом: вопросы простые, на собеседовании
будут сильно сложнее. Донести удалось не до всех. С другой стороны ничего страшного.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте, Anatolix, Вы писали:
A>Здравствуйте, AndrewJD, Вы писали:
H>>>Конечно же, виноват и все такое. Но разве так уж важно, что я не могу с ходу написать конструктор копирования? AJD>>Может солидной фирме нужен был специалист по с++ и у нех небыло свободной джунировской позиции.
A>Значит судя по timeframe этого сообщения, тем кто выгнал человека с собеседования был я. A>Могу рассказать как все это выглядело с моей стороны. Возможно забыл детали — можешь поправить.
A>Человек пишет: A>
A>A::A(A a)
A>{
A>...
A>}
A>
A>Я говорю это не работает — приводит к бесконечной рекурсии. В ответ непонимание.
A>Спрашиваю наводящий вопрос: если мы передаем класс в функцию по значению, как он туда копируется? A>Ответ: конструктором копирования. A>Вопрос: а здесь каким конструктором копирования? A>В ответ понимающий взгляд, и ответ "ну конечно должно быть так".
A>
A>A::A(A* a)
A>{
A>...
A>}
A>
A>Я по-моему задал какой-то еще наводящий вопрос. Какой не помню — помоему спросил почему std::string копируется в синтаксисе A>string s(other_string); A>Получил опять понимающий взгляд: "ну конечно же!"
A>
A>A::A(A& a)
A>{
A>...
A>}
A>
A>Здесь я сказал уже лучше, но все равно чего-то не хватает. И в качестве примера попытался привести следующий код, который не сработает.
A>
A>const A a;
A>A a1(a);
A>
A>Будет ошибка компиляции. A>
Внимание jazzer-у, стандартов мы не обсуждали, был конкретный класс с написанными членами, и конкретная ситуация в которой конструктор не работал, т.к. не компилился
A>В ответ полное непонимание. Примерно 2-3 минуты я пытался придумать наводящий вопрос, все мои попытки не увенчались успехов. В результате я пришел к выводу что концепция константных объектов человеку полностью чужда. В этом момент я окончательно принял решение, что я не хочу с этим человеком работать в команде. В тот момент когда я это понимаю я об этом говорю сразу — отказывать людям в глаза меня не напрягает, и лишнего времени на то, чтобы задать человеку еще несколько на порядок более сложных вопросов и убедиться, что он на них тоже не ответит у меня нет. A>Плюс я считаю этот метод более честным, чем для вида еще 2 часа мучать человека, чтобы потом ему сказать "ну ок — мы подумаем и напишем наше решение".
A>Тем не менее из всей этой ситуации сделаны очень неправильные выводы. A>Разъясню свою точку зрения популярно: A>Человек был выгнан не за незнание синтаксиса. Мне вообще глубоко наплевать на знание синтаксиса. Вообще говоря у нас в Яндексе принято, что во время прохождения собеседования можно пользоваться Яндексом и Гуглем(забыл что-то, спроси у человека который тебя собеседует — он ответит). Просто об этом говорят в момент когда переходят от совсем базовых задач к сложным, где хотя бы упоминаются функции у которых имеет смысл узнавать параметры.
A>Я увидел, что человек ни разу в жизни не написал класс который можно корректно положить в STL-евский контейнер(попытка написать A*) и не понимает, что такое константность объектов(A&). Плюс с очевидных подсказок не может придумать это прямо во время собеседования(я взял на работу пару студентов, которые не знали, но делали несколько логичных предположений на собеседовании и в результате решали задачу — здесь этого не произошло).
A>Работать с таким человеком я не захотел. Может быть я злой и циничный человек.
A>P.S. Для информации — задача здесь была вообще не на конструктор копирования — просто я не успел ее задать.
A>P.P.S. В процессе я по-моему поправил несколько мелких ошибок синтаксиса типа нерасставленных * в теле конструктора, про них не упоминаю т.к. действительно не важно.
Да, всё так и было... не знаю, почему так получилось. Я правда очень волновался...
Здравствуйте, Anatolix, Вы писали:
A>Здравствуйте, AndrewJD, Вы писали:
H>>>Конечно же, виноват и все такое. Но разве так уж важно, что я не могу с ходу написать конструктор копирования? AJD>>Может солидной фирме нужен был специалист по с++ и у нех небыло свободной джунировской позиции.
A>Значит судя по timeframe этого сообщения, тем кто выгнал человека с собеседования был я. A>Могу рассказать как все это выглядело с моей стороны. Возможно забыл детали — можешь поправить.
A>Человек пишет: A>
A>A::A(A a)
A>{
A>...
A>}
A>
A>Я говорю это не работает — приводит к бесконечной рекурсии. В ответ непонимание.
A>Спрашиваю наводящий вопрос: если мы передаем класс в функцию по значению, как он туда копируется? A>Ответ: конструктором копирования. A>Вопрос: а здесь каким конструктором копирования? A>В ответ понимающий взгляд, и ответ "ну конечно должно быть так".
A>
A>A::A(A* a)
A>{
A>...
A>}
A>
A>Я по-моему задал какой-то еще наводящий вопрос. Какой не помню — помоему спросил почему std::string копируется в синтаксисе A>string s(other_string); A>Получил опять понимающий взгляд: "ну конечно же!"
A>
A>A::A(A& a)
A>{
A>...
A>}
A>
A>Здесь я сказал уже лучше, но все равно чего-то не хватает. И в качестве примера попытался привести следующий код, который не сработает.
A>
A>const A a;
A>A a1(a);
A>
A>Будет ошибка компиляции. A>
Внимание jazzer-у, стандартов мы не обсуждали, был конкретный класс с написанными членами, и конкретная ситуация в которой конструктор не работал, т.к. не компилился
A>В ответ полное непонимание. Примерно 2-3 минуты я пытался придумать наводящий вопрос, все мои попытки не увенчались успехов. В результате я пришел к выводу что концепция константных объектов человеку полностью чужда. В этом момент я окончательно принял решение, что я не хочу с этим человеком работать в команде. В тот момент когда я это понимаю я об этом говорю сразу — отказывать людям в глаза меня не напрягает, и лишнего времени на то, чтобы задать человеку еще несколько на порядок более сложных вопросов и убедиться, что он на них тоже не ответит у меня нет. A>Плюс я считаю этот метод более честным, чем для вида еще 2 часа мучать человека, чтобы потом ему сказать "ну ок — мы подумаем и напишем наше решение".
A>Тем не менее из всей этой ситуации сделаны очень неправильные выводы. A>Разъясню свою точку зрения популярно: A>Человек был выгнан не за незнание синтаксиса. Мне вообще глубоко наплевать на знание синтаксиса. Вообще говоря у нас в Яндексе принято, что во время прохождения собеседования можно пользоваться Яндексом и Гуглем(забыл что-то, спроси у человека который тебя собеседует — он ответит). Просто об этом говорят в момент когда переходят от совсем базовых задач к сложным, где хотя бы упоминаются функции у которых имеет смысл узнавать параметры.
A>Я увидел, что человек ни разу в жизни не написал класс который можно корректно положить в STL-евский контейнер(попытка написать A*) и не понимает, что такое константность объектов(A&). Плюс с очевидных подсказок не может придумать это прямо во время собеседования(я взял на работу пару студентов, которые не знали, но делали несколько логичных предположений на собеседовании и в результате решали задачу — здесь этого не произошло).
A>Работать с таким человеком я не захотел. Может быть я злой и циничный человек.
A>P.S. Для информации — задача здесь была вообще не на конструктор копирования — просто я не успел ее задать.
A>P.P.S. В процессе я по-моему поправил несколько мелких ошибок синтаксиса типа нерасставленных * в теле конструктора, про них не упоминаю т.к. действительно не важно.
И еще хочу искренне поблагодарить за честность. Потому что я тоже предпочитаю, чтобы мне прямо сказали — "ты нам не подходишь".
На самом деле, поверьте, во время собеседования я начал сомневаться буквально во всем,правда очень сильно переволновался. Потому что много думал об этом собеседовании и о его важности накануне. Вероятно, это тоже сыграло свою роль. Ладно, прошлого уже не вернуть... буду штудировать Си++ и надеяться снова попасть в Яндекс через полгода. Это та контора, где мне действительно хочется работать.
Здравствуйте, i-maverick, Вы писали:
IM>Здравствуйте, Hottabych1, Вы писали:
H>>На первый (про класс Foo):
IM>Эх... Еще бы ты мог объяснить то, что процитировал.
IM>И ты не увидел самых простых и очевидных ошибок: IM>1. Деструктор невиртуальный -> утечка; IM>2. Некорректное удаление массивов -> неопределенное поведение; IM>3. Ф-ия main — void -> несоответствие стандарту.
+ Отсутствие copy-ctor'а в классе с полем-указателем.
Здравствуйте, Hottabych1, Вы писали:
H>Но я над ними долго и внимательно корпел, с компилятором и документацией, а также книжкой Кернигана. H>Вот, к примеру, мой ответ на второй вопрос (там, где галочки проставлять):
H>2) Сортированный vector позволяет, при использовании бинарного поиска, на каждом шаге отсеивать половину элементов, т.е. его сложность будет O(log2(n)) -- логарифм по снованию 2 от n (а не O(ln(n))).
Что такое временная сложность ты очевидно тоже плохо понимаешь. Константным множителям там делать нечего, а основание логарифма это ничто иное как константный множитель.
Здравствуйте, Hottabych1, Вы писали:
LM>>>>И чего Вы хотели? Вы обманули Яндекс на первом этапе. На втором Вас порезали H>>>Какая разница, как я получил верный результат? Почему бы на собеседовании не давать воспользоваться интернетом и компилятором? LM>>Потому, что некоторые вещи нужно помнить. Если ты этого не помнишь, то ты нам не нужен H>Хорошо, теперь я это помню. Возьмете?
"Ну спросите меня еще раз! Я же учил. А-а-а-а!" (с) Студент.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, i-maverick, Вы писали:
IM>Здравствуйте, branco, Вы писали:
B>>Ну, 1-й вопрос, B>>На вскидку, не заглядывая в стандарт,доки и.т.д. B>>... B>>А можно вот так:
IM>Ну раз уж мы отошли от исходной задачи "найти все ошибки" и перешли к задаче "переписать правильно", то вот мой вариант:
IM>
и глядя на твой код можно найти следующие ошибки:
1. Функция main не по стандарту
2. Доступ к базовому классу из производного установлен неправильно
3. Деструктор базового класса невиртуальный -> утечка памяти
4. Не определён конструктор по умолчанию у базового класса,а в конструкторе производного нет явной инициализации базового 5. Не применили STL(хотя — ничего смешного)
S>>Яндексу +1 раз он так быстро тебя забраковал. Я видел компании где за неимением лучьших брали и таких, но это совсем не "солидные компании" H>Напротив, очень зря меня Яндекс не взял . Да, многого не знаю, но главное, что голова есть на плечах и в сильной команде я, уверен, быстро дорасту до соответствующего уровня. А если не давать никому шанс, то скоро просто неоткуда будет брать хороших специалистов. Так как, чтобы стать таким надо пройти определенную школу, работая с сильными коллегами. А потом самому привлекать новичков, передавая им знания.
Молодой человек!(если такое обращение коробит — извиняюсь сразу)
Я за свою жизнь не написал ни строчки на плюсах (по работе, для себя кропал когда-то что-то).
В плюсах я не смыслю ни бельмеса. Я довольно слабо понимаю умные вещи, которые в этой ветке обсуждают умные люди.
Но! Мне и то понятно, что не взяли Вас правильно. Не обижайтесь, но мне кажется, что Вы делаете довольно типичную ошибку —
не усвоив и не осознав базовые концепции, видите проблему в частностях. Человек способен заучить огромный объем материала, но без понимания это мертвый груз. Практический совет — изучая что-то(собственно, неважно что именно) регулярно задавайте себе вопрос — а почему это именно так, а не иначе и что будет если сделать по другому. Помогает пониманию, знаю по опыту
В целом — удачи, уверенности в себе Вам, похоже, хватает