Я вот раз взял на работу чувака провалившего обращение списка и не пожалел. Правда парень хорошо подходил под наши требования, по собеседованию было видно что толковый ну и задачу мы задали в самом конце. Понятия не имею почему он её провалил... то ли переволновался, то ли мы за час общения переключили его в какой-то не тот режим. Вобщем отлично поработал он на нашем проекте, потом забрали у нас его на другой с повышением и карьерными перспективами.
Вообще проваленная задача на кодирование — жирный минус, но не сказал бы что моментальный отсев... ну реально всякое бывает. Как проводить собеседование: в самом начале задачу на написание кода, потом вопросы.. Если вдруг провалился на связном списке — поспрашивать что-то другое, важное, если после пары вопросов плывёт — вежливо прощатся, есле есть таки надежда что человек подойдёт — забываем про провал и продолжаем разговор.
Re[2]: Задача на собеседовании - обращение списка.
On 08.02.2013 12:59, superman wrote:
> Понятия не имею почему он её провалил... то ли переволновался, то > ли мы за час общения переключили его в какой-то не тот режим. Вобщем > отлично поработал он на нашем проекте, потом забрали у нас его на другой > с повышением и карьерными перспективами.
Ему повезло, что не все идиоты на вашей конторе.
> Вообще проваленная задача на кодирование — жирный минус, но не сказал бы > что моментальный отсев... ну реально всякое бывает. Как проводить > собеседование: в самом начале задачу на написание кода, потом вопросы.. > Если вдруг провалился на связном списке — поспрашивать что-то другое, > важное, если после пары вопросов плывёт — вежливо прощатся, есле есть > таки надежда что человек подойдёт — забываем про провал и продолжаем > разговор.
То есть в переводе на местный язык вы ищите кодеров. То бишь тех, кто
чисто механически нечто кодирует.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>То есть в переводе на местный язык вы ищите кодеров. То бишь тех, кто V>чисто механически нечто кодирует.
кто такие, эти самые мифические кодеры о которых все говорят, но никто их не видел? Люди, которые будут писать от забора и до обеда код типа if Число = 1 then Четное := False else if Число = 2 then Четное := True else if ...
Re[4]: Задача на собеседовании - обращение списка.
On 08.02.2013 13:38, jhfrek wrote:
> Люди, которые будут писать от забора и до обеда код типа if > Число = 1 then Четное := False else if Число = 2 then Четное := True > else if ...
Да. Да неважно что, главное быстро.
Posted via RSDN NNTP Server 2.1 beta
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
>> Люди, которые будут писать от забора и до обеда код типа if >> Число = 1 then Четное := False else if Число = 2 then Четное := True >> else if ... V>Да. Да неважно что, главное быстро.
а где-то такие работают?
Re[6]: Задача на собеседовании - обращение списка.
Можешь мне объяснить — зачем его вообще разворачивать, если можно по нему пробежаться итератором в обратном направлении? .end() -> .begin() Или если это массив указателей на объекты — просто в обратном порядке по указателям... Процессорное время девать некуда?
Я подобные вопросы считаю абсурдными, меня бы интересовал только вопрос как удалить или вставить элемент... А вообще меня мало интересуют подобные вопросы... Меня больше интересует практическое применение... понимание объектов ядра, процессов, потоков, понимание дедлоков, работа с сокетами, сигналами и работа с памятью — механизмы защиты и с каким проблемами сталкивался человек... На это есть ряд задачек — причем часто имеющих несколько правильных очевидных ответов — по ним я понимаю, что человек из себя представляет... Иногда я даю отрицательное заключение даже при 100% правильных ответах, просто наблюдая за психологией человека — как он отвечает на вопросы... как он относится к постановленной задаче даже самой легкой, внимательность, аккуратность, острота ума...
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, ishmakov, Вы писали:
I>Можешь мне объяснить — зачем его вообще разворачивать, если можно по нему пробежаться итератором в обратном направлении? .end() -> .begin() Или если это массив указателей на объекты — просто в обратном порядке по указателям... Процессорное время девать некуда?
Речь идет о линейном односвязном списке. Каждый элемент хранит указатель на хвост списка.
I>Я подобные вопросы считаю абсурдными, меня бы интересовал только вопрос как удалить или вставить элемент... А вообще меня мало интересуют подобные вопросы... Меня больше интересует практическое применение... понимание объектов ядра, процессов, потоков, понимание дедлоков, работа с сокетами, сигналами и работа с памятью — механизмы защиты и с каким проблемами сталкивался человек... На это есть ряд задачек — причем часто имеющих несколько правильных очевидных ответов — по ним я понимаю, что человек из себя представляет... Иногда я даю отрицательное заключение даже при 100% правильных ответах, просто наблюдая за психологией человека — как он отвечает на вопросы... как он относится к постановленной задаче даже самой легкой, внимательность, аккуратность, острота ума...
Троеточия в конце фраз уже давно не в моде.
Re[3]: Задача на собеседовании - обращение списка.
G>Речь идет о линейном односвязном списке. Каждый элемент хранит указатель на хвост списка.
В исходной задаче об этом не сказано — сказано "список", но не сказано какой — односвязанный или двухсвязанный... И зачем использовать односвязанный список, если когда встает такая задача как разворот — можно использовать двухсвязанный список... и пробежаться итератором в обратном направлении... В STL все списки двухсвязанные, и есть уже готовые функции, а в своей реализации превратить односвязанный список в двухсвязанный — это дописать около 10 строчек кода, который не будет в последствии тратить ресурсов процессора на никому не нужную задачу разворота.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, ishmakov, Вы писали:
I>В исходной задаче об этом не сказано — сказано "список", но не сказано какой — односвязанный или двухсвязанный... И зачем использовать односвязанный список, если когда встает такая задача как разворот — можно использовать двухсвязанный список... и пробежаться итератором в обратном направлении... В STL все списки двухсвязанные, и есть уже готовые функции, а в своей реализации превратить односвязанный список в двухсвязанный — это дописать около 10 строчек кода, который не будет в последствии тратить ресурсов процессора на никому не нужную задачу разворота.
потому что в книжках типа алгоритмов и структур данных, список — это набор рекордов вида (ссылка на данные; ссылка на следующий элемент) и для набора существует стандартный набор операций: добавить, найти, добавить после/перед найденным, удалить, развернуть и т.п., реализация которых требует некоторой сообразительности для понимания как правильно выполнить процедуру обмена над ссылками, что бы список не потерял элементы и умение работать с граничными элементами списка.
люди имеющие институтский бэкграунд эту задачу мгновенно решают, не имеющие — недоумевают в чем подвох при наличии метода Reverse и итератора умеющего бегать в обе стороны у стандартных типов языка.
Так что, при грамотно сформулированном условии (список — это структура данных вида..., решите операцию обращения списка для данной структуры), задача имеет право на жизнь на собедовании, без этого условия — выдает узость мышления и незнание современных языков и библиотек у интервьюера
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Так что, при грамотно сформулированном условии (список — это структура данных вида..., решите операцию обращения списка для данной структуры) задача имеет право на жизнь на собедовании, без этого условия — выдает узость мышления и незнание современных языков и библиотек у интервьюера
Глядя на таким образом сформулированное условие, я бы подумал, что интервьюер не знаком с общепринятой терминологией в структурах данных. Уточнение подразумеваемой структуры данных может иметь место после того как интервьюемый продемонстрировал "ширину" мышления и не понял, о чем речь.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, ishmakov, Вы писали:
I>>В исходной задаче об этом не сказано — сказано "список", но не сказано какой — односвязанный или двухсвязанный... И зачем использовать односвязанный список, если когда встает такая задача как разворот — можно использовать двухсвязанный список... и пробежаться итератором в обратном направлении... В STL все списки двухсвязанные, и есть уже готовые функции, а в своей реализации превратить односвязанный список в двухсвязанный — это дописать около 10 строчек кода, который не будет в последствии тратить ресурсов процессора на никому не нужную задачу разворота.
J>потому что в книжках типа алгоритмов и структур данных, список — это набор рекордов вида (ссылка на данные; ссылка на следующий элемент) и для набора существует стандартный набор операций: добавить, найти, добавить после/перед найденным, удалить, развернуть и т.п., реализация которых требует некоторой сообразительности для понимания как правильно выполнить процедуру обмена над ссылками, что бы список не потерял элементы и умение работать с граничными элементами списка.
Вот и ответ — потому что в книжках... на практике все это не нужно или давно реализовано и два раза изобретать велосипед не нужно... Умение работать с ссылками и указателями проверяется другими методами... Вы задаете вопросы на собеседовании — для чего? Эрудицию проверить или определить навыки с которые вам будут полезны в проекте и в компании?
Для эрудиции была такая передача — Своя Игра
У вас не шоу — а поиск человека, который займется конкретной работой.
J>люди имеющие институтский бэкграунд эту задачу мгновенно решают, не имеющие — недоумевают в чем подвох при наличии метода Reverse и итератора умеющего бегать в обе стороны у стандартных типов языка.
Вот вы и получите юниора, который легко ответит на этот вопрос, но никогда человека с опытом, который не использует вообще этот метод за ненадобностью...
Я их могу спокойно озвучить, и если кто-то подготовится и найдет для себя понимание — это будет плюс х)
Расскажите как устроена операционная система, что такое процесс, что такое поток, как ОС работает с потоками, с какими библиотеками работали, что такое память на стеке, что такое динамическая память, что такое объекты синхронизации, что они лочат и как, что такое файлы, можно ли файл сделать блоком памяти, что такое сигналы и eventы, что такое сокеты, как они работают, модель OSI, как работает UDP и TCP с какими проблемы в сетевой передаче вы сталкивались... Что такое динамическая библиотека... Когда она вызывается. Что из себя представляет объектный файл, библиотека, в чем разница между статической и динамической библиотекой. По языку есть ряд секретный вопросов по которым я понимаю с какими архитектурами работал человек — ничего сложного (но не скажу — до собеседования)... Есть хитрые вопросы — например рассчитать ответ логических операций... по ним я понимаю — либо человек аккуратный и считает, либо проявляет смекалку... и умение оперировать с двоичными числами и учитывает где я хочу получить результат в С или С++... Обычные часто встречающиеся моменты в проектах... как установить 1 в двоичном числе на определенном месте... как определить, что на этом месте 1, а не 0... ну и дальше в чем отличии ссылки от указателя, что такое односвязанный список, что такое двухсвязанный, как туда добавляется или удаляется элемент, что будете если... например вызвать исключение в конструкторе или конструкторе... В общем и все... я беседую, что бы понять с чем действительно имел опыт человек... и так по разным темам — язык С, С++, системное программирование Windows/Linux, GUI или MacOS... Ибо по MacOS тоже есть ряд хитрых вопросов... которые знает человек только работающий с этой ОС...
Для меня не страшно, если где-то человек не ответит на вопросы... если у меня сформируется представление о том, что человек 100% подходит для решения тех или иных задач — я буду готов его рекомендовать взять... А бывает по тому, как человек отвечает, правильно — я понимаю, человек раздолбай и слишком высокого о себе мнения... с ним будет трудно работать и это будет мешать коллективу — я даже при 100% правильных ответах рекомендую не брать...
p.s. Вообще у меня последнее время при собеседованиях создается одно желание, дарить людям ряд книг... В первую очередь, что хочется подарить 99% собеседуемым:
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).
Такое впечатление что 9 из 10 присутвующих в этой ветке в программировании совершенно случайные люди.
Элементарная, блин, задача. На пять минут делов-то. И какая, нахрен, рекурсия ???
struct list
{
int v;
struct list* next;
list(): v(),next() {}
};
void printlist(const char* cap,list* p) {
printf("%s:",cap);
for( ; p ; p = p->next)
printf("%d ",p->v);
printf("\n");
}
int main(int argc, char* argv[])
{
list* root = 0;
for( int n = 0; n < 10; ++n )
{
list* t = new list;
t->v = n;
t->next = root;
root = t;
}
printlist("original",root);
list* r = 0;
for( list* t = root; t;)
{
list* tt = t->next;
t->next = r;
r = t;
t = tt;
}
printlist("reversed",r);
return 0;
}
Re[2]: Задача на собеседовании - обращение списка.
Это очевидно — но теперь объясни мне зачем тратить ресурсы? — у тебя триллион таких вот элементов... сколько времени займет этот разворот, и какова цена превратить этот список в двух-связанный, что бы пробегаться в обратном порядке
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, ishmakov, Вы писали:
J>>люди имеющие институтский бэкграунд эту задачу мгновенно решают, не имеющие — недоумевают в чем подвох при наличии метода Reverse и итератора умеющего бегать в обе стороны у стандартных типов языка. I>Вот вы и получите юниора, который легко ответит на этот вопрос, но никогда человека с опытом, который не использует вообще этот метод за ненадобностью...
вы перепутали адресата или необоснованно решили что я — Паблик Морозов
Ну или у вас шамано-ориентированное мышление, раз вы считаете что человек озвучивший гипотезу является причиной событий
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
J>>Так что, при грамотно сформулированном условии (список — это структура данных вида..., решите операцию обращения списка для данной структуры) задача имеет право на жизнь на собедовании, без этого условия — выдает узость мышления и незнание современных языков и библиотек у интервьюера S>Глядя на таким образом сформулированное условие, я бы подумал, что интервьюер не знаком с общепринятой терминологией в структурах данных. Уточнение подразумеваемой структуры данных может иметь место после того как интервьюемый продемонстрировал "ширину" мышления и не понял, о чем речь.
Человек, который программировал по требованиям заказчика должен знать что даже общепринятая терминология может различаться у разных людей. Даже здесь значительная часть программистов считает что список — это структура данных из библиотеки. А каждый кто сдавал экзамены (участвовал в олимпиадах и т.п.) знает что условие задачи формулируется максимально подробно и однозначно.
Так что не уподобляйтесь Паблику Морозову и не думайте за других. Видите какой срач развернулся из-за того что он думал как и вы.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
J>Человек, который программировал по требованиям заказчика должен знать что даже общепринятая терминология может различаться у разных людей. Даже здесь значительная часть программистов считает что список — это структура данных из библиотеки. А каждый кто сдавал экзамены (участвовал в олимпиадах и т.п.) знает что условие задачи формулируется максимально подробно и однозначно.
Формулировка задачи не была привязана к конкретным языкам и библиотекам. Потому, считать что это структура данных из какой-то конкретной библиотеки немного наивно.
J>Так что не уподобляйтесь Паблику Морозову и не думайте за других. Видите какой срач развернулся из-за того что он думал как и вы.
ИМХО, срач развернулся из-за незнания фундаментальных вещей.