Тестовые вопросы и задания для собеседования на позицию программиста в ЦП ИС. Вопросы разбиты по блокам. Если Вы не знаете ответа на какой-либо вопрос, пропустите его. Pure C: 1) Расскажите, для чего предназначены следующие секции линковщика: code, data, rodata, bss, heap, stack. 2) Что происходит в Си программе до вызова функции main? 3) В какую секцию попадают глобальные переменные? 4) В какую секцию попадают static переменные? 5) В чем разница между обычной глобальной переменной и static глобальной переменной? 6) Где выделяются не глобальные и не статические переменные? 7) Как выделяется память на heap? 8) Что означает ключевое слово volatile? Приведите различные примеры его использования. 9) Может ли линковщик исключить функции, которые оказались вне иерархии вызовов, но их исходный код прописан в файлах проекта? 10) Есть ли проблема с кодом данной функции? int* decrement (int value) { int a = value; a--; return &a; } 11) Следующий код завершается с ошибкой сегментации. Объясните, почему? #include <stdio.h> int main(void) { char *str = "Hello world!"; *str = "Goodbye!"; printf("%s\n", str); return 0; } RTOS/Threads: 1) 2) 3) 4) 5) Как происходит переключение между потоками в типичной Real-time OS? Чем mutex отличается от semaphore? Привести пример программы, которая попадает в deadlock. Разница между «жесткими» и «мягкими» RTOS? Чем отличается процесс от потока? 6) Что будет быстрее на одноядерной системе: поочередно исполнить foo_1, foo_2, foo_3 или исполнить foo_1, foo_2, foo_3 параллельно при помощи threads/tasks? Linux/UNIX/Posix 1) 2) 3) 4) 5) 6) Расскажите кратко своими словами об архитектуре ОС GNU/Linux. Как пользователь может взаимодействовать с драйвером Linux? В чем разница между procfs и sysfs? Что такое тасклеты, workqueue, Protothread? Что такое socket? С какими POSIX совместимыми библиотеками знакомы? Hardware: 1) 2) 3) 4) Вы работали с интерфейсом UART? Расскажите его основные особенности. Вы работали с интерфейсом SPI? Расскажите его основные особенности. Вы работали с интерфейсом I2S? Расскажите его основные особенности. Вы работали с интерфейсом I2C? Расскажите его основные особенности. С++: 1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11) Чем класс отличается от структуры в C++? Чем структура в C++ отличается от структуры в Pure C? Для чего используются ключевые слова public и private? Что такое virtual функция? Что такое абстрактный класс? Как компилятор определяет какую перегруженную функцию вызвать? Что такое исключение? Что такое функторы? Что такое шаблон? Чем new отличается от malloc? Чем отличается ссылка от указателя? Приведите пример для Инкапсуляции Наследования Полиморфизма 12) Какие контейнеры STL Вы знаете? 13) Расскажите про умные указатели. 14) В каком порядке будут вызваны конструкторы и деструкторы классов в процессе создания и разрушения объектов z и x? class A {}; class B {}; class Z { public: A a_; B b_; }; class X : public B, public A { }; int main(int, char* []) { Z z; X x; } Задачи: 1) Написать функцию, которая принимает 1 байт и возвращает количество единичных бит в этом байте. Функция должна быть максимально быстрой. 2) Написать функцию, которая принимает целое число типа int, переворачивает его и возвращает перевёрнутое значение. Например, на входе 43857, на выходе 75834. 3) Реализовать на Си аналог контейнера queue с функциями push_back(), pop_front(), size().