Возможно, мне вскоре придется провести несколько собеседований на программиста С/С++ для ембеддинга (и не только)
Думаю, как лучше это сделать?
Пока мысли такие:
Рассказать о будущей работе, ответить на вопросы (~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
Покритикуйте, плиз.