Возможно, мне вскоре придется провести несколько собеседований на программиста С/С++ для ембеддинга (и не только)
Думаю, как лучше это сделать?
Пока мысли такие:
Рассказать о будущей работе, ответить на вопросы (~5-10 мин)
Спросить о прошлом опыте, если он есть — поговорить поподробней о каких-то решениях, их последствиях (~5-10 мин)
Несколько простых вопросов на знание языка (~15-20 мин):
— напишите функцию реверса строки
— чему равен размер struct {int a; char c;}
— зачем нужен volatile
—
char buf[20]={0};
*(unsigned*)(buf+5)=123456;
чем чревато, как лучше?
— #define MAX(a,b) — как написать, чем чревато?
— как написать шаблонную функцию max? Что она должна возвращать?
—
//a.cpp: struct S{ string a; int b; } sa;
//b.cpp: struct S{ int b; string a; } sb;
чем чревато? Как обойти?
— зачем нужен виртуальный деструктор? Как обойтись без него в случае, когда надо удалить объект, не зная его точного типа?
— Есть устройство, у которого могут быть разные каналы передачи данных (посл порт, tcp, twi, ...) и разные протоколы (отличаются форматом пакетов). Как бы вы спроектировали программу для него?
Дать "домашнее задание" по теме работы (~2-4 часа). К примеру: "Вот описание протокола управления устройством. Напишите программу, которая принимает стандартный ввод, выделяет из него команды и отвечает на них в стандартный вывод. Пока требуется реализовать поддержку только указанных команд (скажем, 4 или 5). Предусмотрите возможность добавления новых команд."
И оценить как работу проги (написать простой автотестер, который скормит кривые пакеты, случайный мусор, а также правильные команды и посмотрит на ответы), так и исходный код, наличие тестов, сборочного скрипта, репозитария dvcs
Здравствуйте, enji, Вы писали:
E>Рассказать о будущей работе, ответить на вопросы (~5-10 мин) E>Спросить о прошлом опыте, если он есть — поговорить поподробней о каких-то решениях, их последствиях (~5-10 мин)
Можно увеличить время до получасу-часу.
E>Несколько простых вопросов на знание языка (~15-20 мин):
Вопросы так себе, слишком простые.
E>Дать "домашнее задание" по теме работы (~2-4 часа).
Сколько вы готовы заплатить за выполнение "домашнего задания"?
Здравствуйте, enji, Вы писали:
E>Возможно, мне вскоре придется провести несколько собеседований на программиста С/С++ для ембеддинга (и не только)
E>Думаю, как лучше это сделать?
думаю тестовая задача должна быть не долгой и зависеть от того какую работу надо делать ... заодно можно посмотреть проявляет
ли человек интерес к этой области
E>>Рассказать о будущей работе, ответить на вопросы (~5-10 мин) E>>Спросить о прошлом опыте, если он есть — поговорить поподробней о каких-то решениях, их последствиях (~5-10 мин)
S>Можно увеличить время до получасу-часу.
Ну может быть , надо попробовать как пойдет. Сильно раздувать время неохота.
Да и о чем тут много говорить? Делаем тото и тото. Ты будешь заниматься вот чем-то таким. А может и чем-то другим
Рассказывать о каких-то подробностях особого смысла нет — начнет работать — узнает...
E>>Несколько простых вопросов на знание языка (~15-20 мин):
S>Вопросы так себе, слишком простые.
Забыл добавить еще пару вопросов про исключения и безопасность исключений.
А какие надо задавать? Знание всяких стл\бустов (лично у меня очень ограниченное знание и того и другого. Когда надо что-то нетривиальное — лезу в хелп) ? Алгоритмы (лично мне за последние 5 лет больше пригодился Макконел, а не Кнут)? Ромбовидное наследование (юзаю крайне редко, в основном для boost::exception)?
E>>Дать "домашнее задание" по теме работы (~2-4 часа).
S>Сколько вы готовы заплатить за выполнение "домашнего задания"?
А за что тут платить? Этот протокол давно реализован, код соискателя отправится прямиком в мусорку. Задание не слишком трудозатратное, зато позволяет посмотреть на код, который чел пишет в спокойной обстановке...
Может быть кстати дать это задание до собеседования? А на собеседовании обсудить его реализацию?
Здравствуйте, sysenter, Вы писали: S>Вопросы так себе, слишком простые.
не знаю, я бы во многих вопросах бы плавал
E>>Дать "домашнее задание" по теме работы (~2-4 часа). S>Сколько вы готовы заплатить за выполнение "домашнего задания"?
оно на один вечер — не думаю, что тут оплата имеет смысл
Здравствуйте, __kot2, Вы писали:
S>>Вопросы так себе, слишком простые. __>не знаю, я бы во многих вопросах бы плавал
У Страуструпа в белой книжке есть ответы почти на все эти вопросы, буквально на первых 100-150 страницах. Вопросы действительно простые.
НО, учитывая инфляцию кадров, я думаю вряд ли больше 10%-15% смогут на них ответить
2 enji, интересно, а на такие вопросы, примерно какая з.п. предусмотрена?
Для начала определиться, C это или C++
E>Несколько простых вопросов на знание языка (~15-20 мин):
Такого знания в природе не существует. Спрашивать надо указатели и рекурсию.
E>- напишите функцию реверса строки
Проще надо быть, проще:
1) Нарисуйте алгоритм реверса строки
2) Опишите его на псевдокоде
3) Начните писать на C
4) Достаточно
E>- чему равен размер struct {int a; char c;}
Это зависит от выравнивания, от разрядности и "pragma pack". Нечётко поставлена задача — минус собеседующему.
E>- зачем нужен volatile
Вопрос с открытым окончанием — ещё один минус собеседующему.
E>char buf[20]={0}; E>*(unsigned*)(buf+5)=123456;
"У вас что, весь код такой?"
E>- как написать шаблонную функцию max? Что она должна возвращать?
"Зачем нужен чёрный цвет? Как он должен выглядеть?"
E>чем чревато? Как обойти?
Зело чревато. Тем, что опытный специалист тихо свалит в туман и нанят не будет.
E>- зачем нужен виртуальный деструктор? Как обойтись без него в случае, когда надо удалить объект, не зная его точного типа?
Да не волнует никого ваш плохой код, честное слово... кому вы нужны, косолапые?
E>- Есть устройство, у которого могут быть разные каналы передачи данных (посл порт, tcp, twi, ...) и разные протоколы (отличаются форматом пакетов). Как бы вы спроектировали программу для него?
Да. Этот человек видит вас не только первый раз в жизни.
E>Дать "домашнее задание" по теме работы (~2-4 часа).
Но и в последний.
>К примеру: "Вот описание протокола управления устройством. Напишите программу, которая принимает стандартный ввод,
И ничего-то он вам не должен. Ничего.
E>И оценить как работу проги, так и исходный код, наличие тестов, сборочного скрипта, репозитария dvcs
www.его-личный-сайт.ru и возможно GitHub
E>Покритикуйте, плиз.
— Товарищи космонауты. Кхм. Американцы вот — на Луну. Человека. Высадили. Так мы вас — НА СОЛНЦЕ. Высадим.
— Леонид Ильич, мы же там все сгорим!!!
— А!.. Вы думаете — что? В Политбюро — м***ки сидят?! Мы вас — ночью. Кхм. Высадим.
Здравствуйте, os24ever, Вы писали:
E>>- чему равен размер struct {int a; char c;} O>Это зависит от выравнивания, от разрядности и "pragma pack". Нечётко поставлена задача — минус собеседующему.
а она и не должна быть сверх чётко поставлена, это же собеседование, в смысле разговор.
если что-то не чётко, или двусмысленно, то просто скажи про это — "зависит от компилятора/платформы, но большинстве случаях на дефолтных настройках будет X"
В том-то и дело, что не только. Код библиотек должен быть реентрабельным, чтобы несколько процессов или потоков могли войти в одну и ту же функцию одновременно. Следовательно, нельзя внутри библиотек хранить состояние. Следовательно, от "объектов" придётся отказаться.
И тогда что остаётся? Си и Паскаль. Не Фортран же.
Из этих двух языков удобнее Си: более сжатый код, указатели на функции (а значит, возможность делать сортировки и т.п. с помощью функций высшего порядка) и т.п.
E>Несколько простых вопросов на знание языка (~15-20 мин): E>- напишите функцию реверса строки E>- чему равен размер struct {int a; char c;} E>- зачем нужен volatile
Вы сами можете ответить на эти вопросы? Особенно на последний. Нет, я не про теорию, а про практику. Вы действительно хотите углубиться в обсуждение архитектур CPU, в понимание барьеров? Как мне кажется, лучше все-таки заменить этот вопрос на что-нибудь о sequence points, c какими-нибудь if (++count == 100).
E>- зачем нужен виртуальный деструктор? Как обойтись без него в случае, когда надо удалить объект, не зная его точного типа?
E>- Есть устройство, у которого могут быть разные каналы передачи данных (посл порт, tcp, twi, ...) и разные протоколы (отличаются форматом пакетов). Как бы вы спроектировали программу для него?
IMHO, это единственный осмысленный и хороший вопрос. С него надо начать, и дальше углубляться, в зависимости от того, что будет говорить собеседующий.
E>Дать "домашнее задание" по теме работы (~2-4 часа). К примеру: "Вот описание протокола управления устройством. Напишите программу, которая принимает стандартный ввод, выделяет из него команды и отвечает на них в стандартный вывод. Пока требуется реализовать поддержку только указанных команд (скажем, 4 или 5). Предусмотрите возможность добавления новых команд." E>И оценить как работу проги (написать простой автотестер, который скормит кривые пакеты, случайный мусор, а также правильные команды и посмотрит на ответы), так и исходный код, наличие тестов, сборочного скрипта, репозитария dvcs
Чтобы кто-то начал этим заниматься, вы должны предложить _ОЧЕНЬ_ хорошие условия — как минимум, существенно выше рынка зарплату. Терять день-два времени на тестовые задания — одно из бессмысленных времяпровождений. Про 2-4 часа и "наличие тестов" вы меня прямо позабавили.
Здравствуйте, SkyDance, Вы писали: __>>оно на один вечер — не думаю, что тут оплата имеет смысл SD>Это лукавство. SD>За один вечер production code с тестами не пишется.
тесты для лохов
Здравствуйте, enji, Вы писали:
E>Возможно, мне вскоре придется провести несколько собеседований на программиста С/С++ для ембеддинга (и не только)
E>Думаю, как лучше это сделать?
E>Пока мысли такие:
E>Рассказать о будущей работе, ответить на вопросы (~5-10 мин) E>Спросить о прошлом опыте, если он есть — поговорить поподробней о каких-то решениях, их последствиях (~5-10 мин)
Этого достаточно.
Если очень уж хочется посмотреть на код, то вот это ДО собеседования:
E>Дать "домашнее задание" по теме работы (~2-4 часа). К примеру: "Вот описание протокола управления устройством. Напишите программу, которая принимает стандартный ввод, выделяет из него команды и отвечает на них в стандартный вывод. Пока требуется реализовать поддержку только указанных команд (скажем, 4 или 5). Предусмотрите возможность добавления новых команд."
SD>>За один вечер production code с тестами не пишется. __>тесты для лохов
ТС требует:
enji>И оценить как работу проги (написать простой автотестер, который скормит кривые пакеты, случайный мусор, а также правильные команды и посмотрит на ответы), так и исходный код, наличие тестов, сборочного скрипта, репозитария dvcs
Так что уж не обессудьте. Рискну предположить, тесты должны быть как минимум автоматическими, из серии make test.
Здравствуйте, SkyDance, Вы писали:
SD>Так что уж не обессудьте. Рискну предположить, тесты должны быть как минимум автоматическими, из серии make test.
Все это можно сделать крайне просто, если собрать в кучу CMake, CTest и, допустим, BOOST test. Хотя, даже с учетом этого, делать тестовое задание не для очень уж приглянувшейся компании не стал бы, хотят поглядеть на мой код — всегда есть репозитории на GitHub.
Здравствуйте, Piko, Вы писали:
P>У Страуструпа в белой книжке есть ответы почти на все эти вопросы, буквально на первых 100-150 страницах. Вопросы действительно простые.
Верно, позавчера очередной раз листал, со страницы 100 по 300 все ответы есть))
Здравствуйте, os24ever, Вы писали:
O>Для начала определиться, C это или C++ O>Такого знания в природе не существует.
Формально оно то так, но имеющиеся проекты написаны на смеси того и другого.
O>Спрашивать надо указатели и рекурсию.
Рекурсия имхо не сильно востребована. Указатели = реверс строки, если его на С писать.
E>>- напишите функцию реверса строки
O>Проще надо быть, проще: O>1) Нарисуйте алгоритм реверса строки O>2) Опишите его на псевдокоде O>3) Начните писать на C O>4) Достаточно
Ну хз, имхо так сложнее. Там функция из 5 строчек...
E>>- чему равен размер struct {int a; char c;} O>Это зависит от выравнивания, от разрядности и "pragma pack". Нечётко поставлена задача — минус собеседующему.
Это ж не тест. Мне интересен ответ и его обоснование, а не конкретное число.
E>>- зачем нужен volatile O>Вопрос с открытым окончанием — ещё один минус собеседующему.
Гм, что тут открыто?
E>>char buf[20]={0}; E>>*(unsigned*)(buf+5)=123456; O>"У вас что, весь код такой?"
Встречается и такое Более того, если писать (непереносимо) скажем под 8-битник, это просто и работает. Задача типичная для нас — положить число в буфер байт и выплюнуть его наружу. Как это лучше сделать и почему мой способ кривой — вполне тема для разговора
E>>- как написать шаблонную функцию max? Что она должна возвращать? O>"Зачем нужен чёрный цвет? Как он должен выглядеть?"
Не понял твоего возмущения. Если max получает однотипные аргументы — все просто. Стоит ли дать возможность получать разнотипные и что при этом она будет возвращать — вполне себе тема для разговора. Ну и базовые знания о шаблонах проверим
E>>чем чревато? Как обойти? O>Зело чревато. Тем, что опытный специалист тихо свалит в туман и нанят не будет.
Потому что не знает? Потому что так не пишет? Еще раз — это же не тест, интересны ответы...
O>www.его-личный-сайт.ru и возможно GitHub
И чего? Вот лежит там проект на 10000 строк. Как мне его оценить? Чтобы в нем разобраться, надо убить пару дней. Оно мне надо?
Как сравнить www.иванов.ru и www.петров.ru?
Если задача наша — тупой тестер выдаст число ошибок у иванова и число ошибок у петрова.
O>Да. Этот человек видит вас не только первый раз в жизни. O>Но и в последний. O>И ничего-то он вам не должен. Ничего. O>
O>— Товарищи космонауты. Кхм. Американцы вот — на Луну. Человека. Высадили. Так мы вас — НА СОЛНЦЕ. Высадим.
O>— Леонид Ильич, мы же там все сгорим!!!
O>— А!.. Вы думаете — что? В Политбюро — м***ки сидят?! Мы вас — ночью. Кхм. Высадим.
Ты вообще о чем?
Если есть чего сказать по теме — говори, буду благодарен.
Здравствуйте, enji, Вы писали:
E>>>- зачем нужен volatile O>>Вопрос с открытым окончанием — ещё один минус собеседующему. E>Гм, что тут открыто?
Найдите например статью Александреску про volatile и использование его в качестве примитива синхронизации.
E>И чего? Вот лежит там проект на 10000 строк. Как мне его оценить? Чтобы в нем разобраться, надо убить пару дней. Оно мне надо?
Это вы серьёзно? В первые минут 15 просмотра проекта всё сразу станет ясно...