Здравствуйте, errest, Вы писали:
PG>>Так оно и есть. Я эту задачу (реверс строки) всегда задаю первой в технической части интервью. И в зависимости от того решает или нет и как решает строится дальнейший разговор. PG>>И я всегда поражаюсь сколько людей не могут решить эту задачу с первого раза (без подсказок). Причём это не всегда студенты, а люди и с 2-3 летним "опытом" на С.
E>то есть надо что-то вроде этого: E>#include <stdio.h> E>#include <string.h>
Сакральный смысл очень прост — умение решать задачки — вполне нормальный proxy ( http://en.wikipedia.org/wiki/Proxy_(statistics) ) для способностей кандидата. То, что кандидату не придется решать такую или подобные задачи в реальном проекте ничего не меняет.
Плохое решение.
1) никто не просил писать программу с вводом и выводом, достаточно написать функцию
const char* strrev(const char *src);
не для майна задачка
2) задача решается in-place, без двух буфферов
3) существуют указатели и *begin++ = *end-- выглядит симпатичней
В реале
char tmp = *begin;
*begin++ = *end;
*end-- = tmp;
LMA>Напишите функцию, вычисляющую среднее значение двух любых значений типа int: LMA>int avg(int x, int y);
Вы нанимаете умственно отсталых инвалидов?
LMA>Предположим, что у Вас есть некий класс, реализующий идиому pimpl. Требуется реализовать для него эффективную специализацию функции swap.
Здравствуйте, kosmik, Вы писали:
K>Сакральный смысл очень прост — умение решать задачки — вполне нормальный proxy ( http://en.wikipedia.org/wiki/Proxy_(statistics) ) для способностей кандидата. То, что кандидату не придется решать такую или подобные задачи в реальном проекте ничего не меняет.
Да неужели? КАКИХ способностей? Решать задачки? Особенно такие — на подсчет битов — наследие тех времен, когда динозавры были большие, вулканы высокие, а все программирование сводилось к "Численные методы решения задач на ЭВМ"?
-Э-э-эй, ты, бородатый! Ты что мне дал?! Это же великая теорема Ферма!
Вы, когда мастеров-плиточников на работу нанимаете, тоже им задачки "собери 2 квадратных метра из 4 плиток" подкидываете? Или летку-еньку станцевать просите?
LMA>>Напишите функцию, вычисляющую среднее значение двух любых значений типа int: LMA>>int avg(int x, int y);
H>Вы нанимаете умственно отсталых инвалидов?
Чисто ради интереса, вот ты бы как реализовал такую функцию?
SA>Да неужели? КАКИХ способностей? Решать задачки? Особенно такие — на подсчет битов — наследие тех времен, когда динозавры были большие, вулканы высокие, а все программирование сводилось к "Численные методы решения задач на ЭВМ"?
Why not? Если человек не способен решить задачку, считающуюся в данной компании показателем некоторого минимального уровня соображения, написания кода, проверки его, какой смысл дальше тратить на него время?
Конечно, в идеале нужно делать хотя бы как мои друзья: сначала задание, потом предварительный отсев у рекрутера и только потом первое собеседование, но не у всех для этого есть хороший бренд на рынке труда.
SA>Вы, когда мастеров-плиточников на работу нанимаете, тоже им задачки "собери 2 квадратных метра из 4 плиток" подкидываете? Или летку-еньку станцевать просите?
Ничего не могу сказать, я в другой области работаю
Здравствуйте, StandAlone, Вы писали:
SA>Ага . И на эту тему с интервьюером можно поговорить столько, что он забудет про все свои дурацкие задачки на подсчеты битов.
Не в обиду, но вы написали два варианта решения элементарной задачи и не один из них не работает, не понятно о чем вообще после этого говорить.
Здравствуйте, errest, Вы писали:
E>Какие тестовые задания могут дать на C/C++? E>Нужны простенькие — типа сортировки массива и найти ошибки
Скажем просто: если у тебя нет практического опыта работы на C++ (и на C), то любой тест может оказаться камнем преткновения. Если есть, то ты всегда найдёшь, как обойти потенциально острые углы.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
E>ИМХО история у всех этих задачь такова — по этим задачам гоняли в институте. Далее, кто-то попал на работу, оказался набирающим. Как определять квалификацию не знает, и не находит ничего лучшего, как использовать те же критерии оценки, какие были в институте. Далее появляются первые люди под его началом, те снова начинают набирать людей. И снова не знают что спрашивать, и спрашивают именно так, как их гоняли в институте. Ситуация усугубляется тем, что часто народ становится начальниками, так и не научившись программировать, так и не поняв, а что же главное в профессии разработчика и что реально ему требуется в работе.
А ты знаешь? Я видел уже пример твоего идеального интервью.
По мне, так перевернуть строку лучше чем радикс сорт. Если ты такой крутой в программировании, то тебе раз плюнуть перевернуть строку. Не так ли?
E>Мне вообще веселит, как набирают. Человека с 10 летним опытом будут гонять по задачкам, которыми в институте гоняют, и наоборот, студента без опыта будут просить спроектировать систему, спрашивать о роли в прошлых проектах и т.д .
Я не думаю что кто-либо будет спрашивать студентов о ролях в предыдущих проектах, но меня откровенно умиляют заявления что человека с 10-летним опытом знания плюсов спрашивать не нужно.
Я тоже давал задачку перевернуть строку на интервью. Один из последних кого я интервьюировал, чувак с многолетним опытом, использовал memcpy() (!) чтобы скопировать char. Сейчас со мной сидит чувак как раз с 10-летним опытом программирования на плюсах и время от времени задает мне вопросы по этому языку. Я, в принципе, не против но некоторые его перлы убивают просто. Один из его перлов: "почему я возвращаю ссылку на локальный объект и код не работает?" И аналогичных вопросов — порядком и я не преувеличиваю. А ты говоришь что синьйоров не надо проверять на знания языка. Впрочем, как погляжу, для тебя это больная тема.
Здравствуйте, Олег К., Вы писали:
ОК>Я не думаю что кто-либо будет спрашивать студентов о ролях в предыдущих проектах, но меня откровенно умиляют заявления что человека с 10-летним опытом знания плюсов спрашивать не нужно. ОК>А ты говоришь что синьйоров не надо проверять на знания языка. Впрочем, как погляжу, для тебя это больная тема.
Он же вроде говорил про алгоритмы, а не знания языка. Лично я например уже около 5 лет на C# пишу, и действительно низкоуровневые алгоритмы мне по работе писать практически не приходится. И получается, что на собеседовании меня сольет какой-нибудь чел, попросивший написать быструю сортировку (ну да, честно скажу — не помню, может лет 5 назад и использовал еще в универе в лабораторной какой-нибудь), и потом еще будет удивляться и тыкать мне как это я 5 лет работаю, когда не знаю даже алгоритма быстрой сортировки.
Здравствуйте, Ulitka, Вы писали:
U>Здравствуйте, errest, Вы писали:
E>>Какие тестовые задания могут дать на C/C++? E>>Нужны простенькие — типа сортировки массива и найти ошибки
U>Мне очень нравятся string similarity алгоритмы (http://www.dcs.shef.ac.uk/~sam/stringmetrics.html). U>Вряд-ли кто-то ответит что-то вменяемое, если никогда с этим не сталкивался
Т.е. сразу дать понять что вы его завалили, и меньше предлагать зп?
Вообще такие споры по поводу вопросов на собеседовании и, в частности, вопросов по различным алгоритмам возникают из-за того, что все мы работаем с разными вещами, и увлекаемся тоже разными вещами. Кому-то по работе часто нужно писать эффективные достаточно низкоуровневые алгоритмы обработки данных, кто-то увлекается решением алгоритмических задач и этюдов, и соответственно будет задавать такие вопросы на собеседовании. А кто-то работает с более высокоуровневыми вещами и решает совсем другие проблемы. Мне, например, сейчас нужно продумать дизайн веб-сервиса для сотен наших клиентов, и продумать его так, чтобы сотни клиентов могли потом долго этим веб-сервисом пользоваться, встраивая работу с ним в свой внутренний софт. И сделать нужно так, чтобы через неделю не оказалось, что что-то не продумано, или что-то надо переделать так, что у клиентов код использующий наш веб-сервис перестанет работать. Или чтобы не пришлось писать через неделю всем клиентам письма, сообщая "вы знаете, мы тут кое что добавили/переделали в нашем веб-сервисе" или "доводим до вашего сведения, что теперь этот метод может выбрасывать такое-то исключение". Но при этом алгоритм быстрой сортировки я не помню. У меня просто другие задачи.
Здравствуйте, Олег К., Вы писали:
ОК>По мне, так перевернуть строку лучше чем радикс сорт. Если ты такой крутой в программировании, то тебе раз плюнуть перевернуть строку. Не так ли?
Мне ни разу не приходилось в своей практике переворачивать строку. Написать переворот я напишу, он будет работать, если буду писать за компом. Если на бумажке, запросто могу и ошибку сделать.
ОК>Я не думаю что кто-либо будет спрашивать студентов о ролях в предыдущих проектах, но меня откровенно умиляют заявления что человека с 10-летним опытом знания плюсов спрашивать не нужно.
По плюсам отдельная тема, там действительно много чего требуется знать. Вопрос только, что считать знанием? Я лично считаю, что под знанием языка должно подразумеваться представление, а во что твой код превратится после компиляции. Обращение строки — это вопрос не на знание языка, это вопрос по алгоритмам, независящим от языка. Если человек много ходит по собеседованиям — он ответ будет знать, если мало, он напишет реализацию в лоб, и возможно она будет неидеальна, скажемс ему до свидания.
ОК>Впрочем, как погляжу, для тебя это больная тема.
У меня не плюсы, а язык на порядок попроще. Никогда у меня не было с ним проблем. Всякие тесты вроде проходил всегда, правда не всегда идеально. У меня тема больная совершенно по другой причине. У меня есть куча сильных сторон, именно практически сильных сторон. Умею бороться со сложностью, умение написать надежно, расширяемо и поддерживаемо. Умудряюсь нормально проектировать в условиях жестких сроков, когда написать по нормальному времени нет, надо все ASAP, приходится идти на компромис, умудряюсь сделать каркас по правильному в рамках мелкой задачи и постепенно, в следующих задачах, перевожу все на нормальный дизайн, а не пишу в лоб, как остальные. Более того, сходу понимаю чужие архитектурные решения, т в состоянии вписывать в чужие решения свои. За счет чего сокращаются как сроки разработки, так и потом практически нет багов при тестировании, а если есть — фиксятся мгновенно, баги не архитектурные, а допущенные по невнимательности. Так вот, сильные стороны мои на собеседованиях никого не интересуют совершенно, вместо этого меня гоняют по слабым сторонам, которые на практике мне не требуются, иначе бы я их подтянул. Слабейшая сторона у меня при прохождении собеседований — многопоточность. А так как у меня одно собеседование в 2 месяца в лучшем случае, то я забываю кое какие детали, так как не используются они у меня в работе. При реальной работе я обставлю всех кандидатов, конкурентов не боюсь, а о них мечтаю. При собеседованиях — приоритет будет у того, кто меньше ошибется в вопросах многопоточности. Отношусь философски — не требуются мои сильные стороны, вам же хуже. А может и лучше, а то если возьмете меня, то по прошествии времени, авторитет будет у меня, а не у вас .