Как лучше построить собеседование?
От: enji  
Дата: 30.08.12 20:58
Оценка: -3 :)
Возможно, мне вскоре придется провести несколько собеседований на программиста С/С++ для ембеддинга (и не только)

Думаю, как лучше это сделать?

Пока мысли такие:

Рассказать о будущей работе, ответить на вопросы (~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


Покритикуйте, плиз.
Re: Как лучше построить собеседование?
От: sysenter  
Дата: 30.08.12 21:04
Оценка: +1
Здравствуйте, enji, Вы писали:

E>Рассказать о будущей работе, ответить на вопросы (~5-10 мин)

E>Спросить о прошлом опыте, если он есть — поговорить поподробней о каких-то решениях, их последствиях (~5-10 мин)

Можно увеличить время до получасу-часу.

E>Несколько простых вопросов на знание языка (~15-20 мин):


Вопросы так себе, слишком простые.

E>Дать "домашнее задание" по теме работы (~2-4 часа).


Сколько вы готовы заплатить за выполнение "домашнего задания"?
Re: Как лучше построить собеседование?
От: carpenter Голландия  
Дата: 30.08.12 21:19
Оценка:
Здравствуйте, enji, Вы писали:

E>Возможно, мне вскоре придется провести несколько собеседований на программиста С/С++ для ембеддинга (и не только)


E>Думаю, как лучше это сделать?


думаю тестовая задача должна быть не долгой и зависеть от того какую работу надо делать ... заодно можно посмотреть проявляет
ли человек интерес к этой области
Весь мир — Кремль, а люди в нем — агенты
Re[2]: Как лучше построить собеседование?
От: enji  
Дата: 30.08.12 21:38
Оценка:
Здравствуйте, sysenter, Вы писали:


E>>Рассказать о будущей работе, ответить на вопросы (~5-10 мин)

E>>Спросить о прошлом опыте, если он есть — поговорить поподробней о каких-то решениях, их последствиях (~5-10 мин)

S>Можно увеличить время до получасу-часу.


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

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

E>>Несколько простых вопросов на знание языка (~15-20 мин):


S>Вопросы так себе, слишком простые.


Забыл добавить еще пару вопросов про исключения и безопасность исключений.

А какие надо задавать? Знание всяких стл\бустов (лично у меня очень ограниченное знание и того и другого. Когда надо что-то нетривиальное — лезу в хелп) ? Алгоритмы (лично мне за последние 5 лет больше пригодился Макконел, а не Кнут)? Ромбовидное наследование (юзаю крайне редко, в основном для boost::exception)?

E>>Дать "домашнее задание" по теме работы (~2-4 часа).


S>Сколько вы готовы заплатить за выполнение "домашнего задания"?

А за что тут платить? Этот протокол давно реализован, код соискателя отправится прямиком в мусорку. Задание не слишком трудозатратное, зато позволяет посмотреть на код, который чел пишет в спокойной обстановке...

Может быть кстати дать это задание до собеседования? А на собеседовании обсудить его реализацию?
Re[2]: Как лучше построить собеседование?
От: __kot2  
Дата: 30.08.12 21:40
Оценка:
Здравствуйте, sysenter, Вы писали:
S>Вопросы так себе, слишком простые.
не знаю, я бы во многих вопросах бы плавал

E>>Дать "домашнее задание" по теме работы (~2-4 часа).

S>Сколько вы готовы заплатить за выполнение "домашнего задания"?
оно на один вечер — не думаю, что тут оплата имеет смысл
Re[3]: Как лучше построить собеседование?
От: Piko  
Дата: 30.08.12 22:25
Оценка:
Здравствуйте, __kot2, Вы писали:

S>>Вопросы так себе, слишком простые.

__>не знаю, я бы во многих вопросах бы плавал

У Страуструпа в белой книжке есть ответы почти на все эти вопросы, буквально на первых 100-150 страницах. Вопросы действительно простые.
НО, учитывая инфляцию кадров, я думаю вряд ли больше 10%-15% смогут на них ответить

2 enji, интересно, а на такие вопросы, примерно какая з.п. предусмотрена?
Re: Нет такого языка "С/С++"
От: os24ever
Дата: 30.08.12 22:48
Оценка: +1 -1
E>Думаю, как лучше это сделать?

Для начала определиться, 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>Покритикуйте, плиз.


— Товарищи космонауты. Кхм. Американцы вот — на Луну. Человека. Высадили. Так мы вас — НА СОЛНЦЕ. Высадим.
— Леонид Ильич, мы же там все сгорим!!!
— А!.. Вы думаете — что? В Политбюро — м***ки сидят?! Мы вас — ночью. Кхм. Высадим.


преждевременное планирование корень всех зол
Re[2]: Нет такого языка "С/С++"
От: Piko  
Дата: 30.08.12 23:01
Оценка:
Здравствуйте, os24ever, Вы писали:

E>>- чему равен размер struct {int a; char c;}

O>Это зависит от выравнивания, от разрядности и "pragma pack". Нечётко поставлена задача — минус собеседующему.

а она и не должна быть сверх чётко поставлена, это же собеседование, в смысле разговор.
если что-то не чётко, или двусмысленно, то просто скажи про это — "зависит от компилятора/платформы, но большинстве случаях на дефолтных настройках будет X"
Re[3]: Нет такого языка "С/С++"
От: Piko  
Дата: 30.08.12 23:05
Оценка: :))
Здравствуйте, Piko, Вы писали:

P>Здравствуйте, os24ever, Вы писали:


аа, всё, вспомнил я этого пациентика:
http://www.rsdn.ru/forum/flame.comp/4785174.1.aspx
Автор: os24ever
Дата: 19.06.12

В том-то и дело, что не только. Код библиотек должен быть реентрабельным, чтобы несколько процессов или потоков могли войти в одну и ту же функцию одновременно. Следовательно, нельзя внутри библиотек хранить состояние. Следовательно, от "объектов" придётся отказаться.

И тогда что остаётся? Си и Паскаль. Не Фортран же.

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

Re: Как лучше построить собеседование?
От: THESERG  
Дата: 31.08.12 00:16
Оценка:
Здравствуйте, enji, Вы писали:

E>Спросить о прошлом опыте, если он есть — поговорить поподробней о каких-то решениях, их последствиях


это + кусок реального кода с ошибкой, которую долго искали

теор. вопросов не надо вообще

ИМХО
Re: Как лучше построить собеседование?
От: SkyDance Земля  
Дата: 31.08.12 00:19
Оценка: +2
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 часа и "наличие тестов" вы меня прямо позабавили.
Re[3]: Как лучше построить собеседование?
От: SkyDance Земля  
Дата: 31.08.12 00:21
Оценка:
__>оно на один вечер — не думаю, что тут оплата имеет смысл

Это лукавство.
За один вечер production code с тестами не пишется.
Re[4]: Как лучше построить собеседование?
От: __kot2  
Дата: 31.08.12 01:43
Оценка:
Здравствуйте, SkyDance, Вы писали:
__>>оно на один вечер — не думаю, что тут оплата имеет смысл
SD>Это лукавство.
SD>За один вечер production code с тестами не пишется.
тесты для лохов
Re: Как лучше построить собеседование?
От: _AND Российская Империя За Русский мир! За Русь святую!
Дата: 31.08.12 03:15
Оценка:
Здравствуйте, enji, Вы писали:

E>Возможно, мне вскоре придется провести несколько собеседований на программиста С/С++ для ембеддинга (и не только)


E>Думаю, как лучше это сделать?


E>Пока мысли такие:


E>Рассказать о будущей работе, ответить на вопросы (~5-10 мин)

E>Спросить о прошлом опыте, если он есть — поговорить поподробней о каких-то решениях, их последствиях (~5-10 мин)

Этого достаточно.

Если очень уж хочется посмотреть на код, то вот это ДО собеседования:

E>Дать "домашнее задание" по теме работы (~2-4 часа). К примеру: "Вот описание протокола управления устройством. Напишите программу, которая принимает стандартный ввод, выделяет из него команды и отвечает на них в стандартный вывод. Пока требуется реализовать поддержку только указанных команд (скажем, 4 или 5). Предусмотрите возможность добавления новых команд."
Re[5]: Как лучше построить собеседование?
От: SkyDance Земля  
Дата: 31.08.12 04:21
Оценка:
SD>>За один вечер production code с тестами не пишется.
__>тесты для лохов

ТС требует:

enji>И оценить как работу проги (написать простой автотестер, который скормит кривые пакеты, случайный мусор, а также правильные команды и посмотрит на ответы), так и исходный код, наличие тестов, сборочного скрипта, репозитария dvcs


Так что уж не обессудьте. Рискну предположить, тесты должны быть как минимум автоматическими, из серии make test.
Re[6]: Как лучше построить собеседование?
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 31.08.12 04:26
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>Так что уж не обессудьте. Рискну предположить, тесты должны быть как минимум автоматическими, из серии make test.


Все это можно сделать крайне просто, если собрать в кучу CMake, CTest и, допустим, BOOST test. Хотя, даже с учетом этого, делать тестовое задание не для очень уж приглянувшейся компании не стал бы, хотят поглядеть на мой код — всегда есть репозитории на GitHub.
Re[4]: Как лучше построить собеседование?
От: enji  
Дата: 31.08.12 04:58
Оценка: :))
Здравствуйте, Piko, Вы писали:

P>2 enji, интересно, а на такие вопросы, примерно какая з.п. предусмотрена?


Пока фиг его знает, зп не я буду устанавливать. Думаю тысяч 40. Если опыта не будет — меньше. Предупреждая возмущение — мы не в москве
Re[4]: Как лучше построить собеседование?
От: sysenter  
Дата: 31.08.12 05:14
Оценка:
Здравствуйте, Piko, Вы писали:

P>У Страуструпа в белой книжке есть ответы почти на все эти вопросы, буквально на первых 100-150 страницах. Вопросы действительно простые.


Верно, позавчера очередной раз листал, со страницы 100 по 300 все ответы есть))
Re[2]: Нет такого языка "С/С++"
От: enji  
Дата: 31.08.12 05:18
Оценка: :)
Здравствуйте, 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>— А!.. Вы думаете — что? В Политбюро — м***ки сидят?! Мы вас — ночью. Кхм. Высадим.

Ты вообще о чем?
Если есть чего сказать по теме — говори, буду благодарен.
Re[3]: Нет такого языка "С/С++"
От: sysenter  
Дата: 31.08.12 05:23
Оценка:
Здравствуйте, enji, Вы писали:

E>>>- зачем нужен volatile

O>>Вопрос с открытым окончанием — ещё один минус собеседующему.
E>Гм, что тут открыто?

Найдите например статью Александреску про volatile и использование его в качестве примитива синхронизации.

E>И чего? Вот лежит там проект на 10000 строк. Как мне его оценить? Чтобы в нем разобраться, надо убить пару дней. Оно мне надо?


Это вы серьёзно? В первые минут 15 просмотра проекта всё сразу станет ясно...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.