Співбесіда з Embedded розробником. 200+ запитань для Junior, Middle та Senior
DOU продовжує публікувати переліки запитань для фахівців різних грейдів, які роботодавці можуть поставити на співбесіді. Цей матеріал присвячений Embedded розробці. Вона цікава тим, що айтівці, які працюють за цим стеком, повинні не тільки вміти писати код, а й розумітися на «залізі».
Традиційно ми опитали досвідчених фахівців та попросили поділитися запитаннями, відповіді на які мають знати Embedded розробники. Цей список не є вичерпним, однак він може допомогти заповнити прогалини у знаннях та якісно підготуватися до інтерв’ю.
Більше матеріалів у рубриці — за посиланням.
Аби швидко перейти до бажаного грейду, скористайтесь рубрикатором:
— Junior
— Middle
— Senior
— Бонус: запитання по Java Core
💡 Junior
С
1.Що таке вказівник?
2.Скільки байтів пам’яті займає вказівник?
3.Чим відрізняється stack від heap?
4.Чим відрізняється malloc від calloc?
5.Як звільнити пам’ять в С?
6.Які проблеми можуть виникнути, якщо не звільнити пам’ять?
7.Яке призначення ключового слова static?
8.Опишіть використання модифікатора static в мовах С і С++.
9.Яке призначення ключового слова const?
10.Які проблеми можуть виникнути, якщо функція повертає вказівник на локальну змінну?
11.Опишіть використання модифікатора volatile.
12.Які існують бітові операції?
13.Як працювати з void?
Embedded
14.В чому полягає різниця між мікропроцесором і мікроконтролером?
15.Як відбувається завантаження програми в мікроконтролері?
16.З якими типами мікроконтролерів вам доводилося працювати?
17.Що таке GPIO?
18.Що таке UART?
19.Як відбувається комунікація через UART?
20.Як працює комунікація RS232?
21.Що таке SPI?
22.Що таке I2C?
23.Що таке PWM?
24.Яка різниця між ОС загального призначення та ОС реального часу?
25.В чому різниця між polling і interrupt?
26.Які типи постійної пам’яті використовуються в Embedded?
27.Що таке watchdog?
28.Які типи сегментів пам’яті ви знаєте?
29.Що таке переривання?
Linux
30.Що таке system call?
31.Які системні виклики ви знаєте?
32.Що таке spinlock?
33.Що таке device tree?
34.Що таке POSIX?
35.Що таке файловий дескриптор?
36.Чим відрізняється процес від потоку?
37.Опишіть використання модифікатора volatile.
Класифікація систем контролю версій
38.Які три основні стани має git?
39.Назвіть основні команди git.
40.В чому полягає різниця між merge та rebase?
41.Що таке інтерактивний rebase?
Практичні завдання
42.Ви маєте зібраний пакет і намагаєтеся запустити його на ARM (наприклад, на Raspberry Pi), але пакет не стартує. Що може бути не так і як розв’язувати цю проблему?
43.Ми працюємо з мікроконтролером, до якого підключено світлодіоди з відповідними розв’язками. Мікроконтролер отримує команду на запалення і вимкнення певної кількості діодів. Як би ви реалізували цю команду, яка надходить мікроконтролеру, і який найшвидший алгоритм для керування діодами відповідно до цієї команди?
44.У нас є мікроконтролер з 8 вільними ногами. Задача — підключити 128 пристроїв (наприклад, світлодіодів) і керувати ними. Як це можна реалізувати?
💡 Middle
С
1.Для чого потрібне вирівнювання структур?
2.Що таке little endian та big endian?
3.Які проблеми можуть виникнути, якщо привести масив байтів до структури?
4.Як репрезентується Union Type в пам’яті?
5.Як працює виділення пам’яті?
6.Як malloc виділяє пам’ять?
7.Як реалізувати ООП, використовуючи C?
8.Які основні принципи ООП ви знаєте?
9.В чому різниця між поліморфізмом та успадкуванням?
10.Яка різниця між статичною та динамічною бібліотекою?
11.Як працює Cmake?
12.Для чого використовують ключові слова static, const, volatile, restrict? Чи можна їх поєднувати? У яких випадках?
13.Порівняйте вказівники та масиви.
14.Як визначити порядок байтів в системі?
15.Що таке бітові поля? Для чого вони використовуються?
16.Як задається розмір бітового поля при описі його в структурі?
17.Для чого використовується вказівник на вказівник?
18.Порівняйте struct та union. Який розмір struct та union?
19.Етапи компіляції. Як зберегти інформацію кожного етапу?
20.Поясніть, як працює утиліта make та makefile.
21.У чому відмінності стандартів C99 та С11?
22.Які існують класи пам’яті в С?
23.Що таке linker?
24.Що таке bootloader?
25.Що таке таймер?
26.Які функції watchdog ви знаєте?
27.Що таке область видимості?
28.Як працює зв’язування?
29.Для чого потрібне ключове слово typedef?
30.Як відбувається виклик функції?
31.Як передаються значення параметрів при виклику функції?
32.Що таке EABI (Embedded Application Binary Interface)?
33.Який розмір цілочисельних типів (знакових і беззнакових) в архітектурі AVR8?
34.В чому суть використання віртуальних деструкторів?
Embedded
35.Для чого потрібна віртуальна пам’ять?
36.Що таке MMU?
37.Як комунікують пристрої, підключені по I2C?
38.Як працюють переривання?
39.Що таке DMA?
40.Яка різниця між UART vs SPI?
41.В чому перевага інтерфейсів з сигналом синхронізації?
42.Як налагоджувати код, використовуючи мікроконтролер?
43.Який розмір цілочисельних типів (знакових і беззнакових) в архітектурі AVR8?
Linux
44.Як комунікує User Space and Kernel Space?
45.В чому різниця між блокуючими і неблокуючими операціями?
46.Які типи IPC ви знаєте?
47.Які способи синхронізації потоків ви знаєте?
48.Що таке сокет?
49.Що таке Mutex?
50.Що таке Semaphore?
51.Що таке Copy on Write?
Операційні системи
52.Що таке операційна система реального часу (ОСРЧ)?
53.З яких частин складається ОС? Поясніть на прикладі Linux.
54.Що таке interrupt latency?
55.Які особливості компіляції статичних та динамічних бібліотек?
56.Що таке файл формату ELF?
57.Що таке міжпроцесова взаємодія (IPC)?
58.Що таке bash?
59.Наведіть приклади абстрактних типів даних.
60.Що таке процес та потік (thread)?
61.Що таке одиниця трансляції?
62.Що таке конвеєр команд? Наведіть приклади.
63.У чому різниця між архітектурою фон Неймана та архітектурою Гарварда?
64.Що таке кроскомпіляція?
Protocols
65.Як відбувається перше підключення до інтернету?
66.Опишіть роботу стеку протоколів TCP/IP.
67.Опишіть різницю між MQTT, RMQ, WebSocket. В якому випадку який протокол краще обрати для передачі даних з IoT-пристрою у хмару?
68.Як працює Bluetooth? Поясніть загальні концепції.
69.Що таке TLS?
70.Що таке SSH?
71.Що таке TCP handshake?
72.Яка різниця між TCP та UDP?
Практичні завдання
73.Контролер керує мотором, але виникає ситуація, коли при старті або роботі мотора контролер зависає або перезавантажується. Що може бути причиною цього і як розв’язати проблему?
74.У вас є енкодер з 1000 імпульсами на оберт, який підключений до мікроконтролера. При низьких обертах (10 обертів на хвилину) все працює належним чином, але при високих обертах (100 обертів на хвилину) мікроконтролер зависає. Зависання відбувається повністю, і мікроконтролер відновлюється лише при зниженні обертів енкодера. Що може бути причиною цього і як виправити цю ситуацію?
75.Обладнання працює через USB-шину, відстань між обладнанням і контролером становить
76.У нас є мікроконтролер з 8 вільними ногами, необхідно зчитати дані з 256 каналів. Як це можна реалізувати?
💡 Senior
C
1.Як ви проводите code review?
2.Як ви тестуєте ваш код?
3.Як написати unit test для коду на мікроконтролері?
4.Які засоби для статичного аналізу коду ви використовуєте?
5.Які засоби для динамічного аналізу коду ви використовуєте?
6.Як ви працюєте з кодом для різних платформ?
7.Як вказати компілятору оптимізувати код?
8.Які є типи оптимізації коду?
9.Як працювати з залежностями в С?
10.Як можна використати Cmake для залежностей?
11.Як реалізована команда «delay»?
12.Що таке ISR?
13.Як відбувається передача параметрів в ISR?
14.Чи можливе повернення результату з ISR?
15.Як працюють таймери?
16.Що таке регістри? Як вони працюють?
CI
17.Чи доводилося вам працювати з Docker?
18.Як налаштувати CI для компіляції коду під різні платформи?
19.Розкажіть про побудову білд-системи.
Linux
20.Які є типи пристроїв у ядрі?
21.Як написати драйвер для ядра Linux?
22.Що таке вектор переривання?
23.Які фреймворки для збірки ядра ви знаєте?
24.Розкажіть про алгоритми планування задач в операційних системах.
Embedded
25.Як забезпечити Continuous Delivery для MCU?
26.Як працює RTOS?
27.Що таке задача в RTOS?
28.Які засоби синхронізації є у RTOS?
29.Як працює комунікація через RS485?
30.Boot sequence на мікроконтролерах.
31.Назвіть особливості периферійних інтерфейсів UART, USART, I2C, SPI.
Мережі
32.Як працює BLE?
33.Що таке OSI model?
34.В чому різниця між Bluetooth Classic and BLE?
35.Як працює Wi-Fi?
36.Які способи існують для оновлення прошивки?
37.Що таке OTA?
38.Розкажіть про протокол ARP.
39.Як працює протокол TCP?
40.Що таке маска мережі?
41.Що таке шлюз за замовчуванням?
42.Що таке комутатор L2? Які його функції?
43.Що таке маршрутизатор L3? Назвіть його функції.
44.Розкажіть про інкапсуляцію пакетів при проходженні по рівнях моделі OSI.
45.Яке призначення протоколу ICMP?
46.Що таке Ethernet Frame?
47.Що таке фаєрвол? Як налаштувати його на Linux?
48.Що таке DHCP та DHCP relay?
49.Які види та алгоритми маршрутизації ви знаєте?
50.Що таке NAT?
51.Що таке MQTT, і як він використовується?
52.Розкажіть про автомобільні шини даних CAN, LIN, MOST, FlexRay.
Практичні завдання
53.Контролер працює на операційній системі Linux (без значення, яка конкретно версія або ядро). В певний момент контролер зависає. Програми і сервіси, які вже були запущені, продовжують працювати, але нові не можуть бути запущені. Для входу на контролер можливо використовувати лише захищений режим (режим відновлення). Під час входу на контролер ви отримуєте повідомлення від сервісу або демона, що вільне місце на диску закінчилось. Однак команда df -h показує, що вільного місця на диску є досить багато. Що може бути причиною цієї проблеми і як її виправити?
54.Необхідно вирішити проблему завади, яка виникає при знятті сигналу з сенсора і відображається на осцилографі. Ця завада перешкоджає нам отримати дані при переході з 0 на 1. Який метод захисту від цієї завади є найпростішим?
💡 Бонус: запитання по Java Core
Ці питання винесені в окремий блок, оскільки вони не є типовими для усіх співбесід на позицію Embedded розробника, однак це базові запитання для позицій, які передбачають роботу зі стеком Java, зокрема mobile development.
Junior
1.Що таке об’єкт в Java?
2.Поясніть різницю між JDK, JRE та JVM.
3.Яка різниця між абстрактним класом та інтерфейсом в Java?
4.Поясніть концепцію успадкування в Java.
5.Яка різниця між оператором «==» та методом «equals()»?
6.Опишіть призначення та використання ключового слова static в Java.
7.Поясніть принципи об’єктно-орієнтованого програмування (ООП) і як вони реалізовані в Java.
8.У чому різниця між TreeSet і HashSet в Java?
9.Яка різниця між конструктором і методом?
10.Яка різниця між ArrayList і LinkedList?
11.Яка різниця між HashMap і HashSet?
12.Яка різниця між синхронізованим та несинхронізованим методом?
13.Що таке спроба з ресурсами (try with resources)?
14.Які види виключень ви знаєте?
15.Поясніть відмінності між перевіреними та неперевіреними виключеннями в Java. Наведіть приклади кожного.
16.Для чого використовуються методи equals() та hashCode() в Java?
17.Як створити потік в Java?
18.Як реалізована багатопотоковість в Java?
Middle
19.Яка різниця між серіалізацією та десеріалізацією в Java?
20.Яка різниця між стеком та купою (heap) в Java?
21.Яка різниця між синхронізованим методом та несинхронізованим методом в Java?
22.Яка різниця між однопотоковим застосуванням та багатопотоковим застосуванням в Java?
23.Патерни проектування GoF (наприклад, поясніть, як реалізувати Singleton).
24.Чи є випадки, коли блок «finally» не буде виконаний (try-catch-finally)?
25.Лямбда-вирази в Java та як вони спрощують код? Наведіть приклади їх використання.
26.Що таке mock?
Senior
27.Поясніть, як би ви оптимізували перфоманс у Java?
28.Як працює Java Garbage Collection?
29.Як кешувати об’єкт у Java?
30.Що таке JVM в Java?
31.Що таке Mbean? Які типи інформації можна отримати з їхньою допомогою?
32.Як контролювати віддалену JVM за допомогою VisualVM?
📝 Дякуємо за технічну рецензію Вікторії Таранюк (Manager in Embedded systems domain, GlobalLogic) та Олексію Вишневському (Senior Software Engineer, SoftServe), за надані запитання Михайлу Майдану (Team Lead в Yalantis), Юрію Глотову (Embedded Software Engineer у TEKTELIC), Сергію Марчуку (Senior Embedded Engineer в Intellias) та Ярославу Клочнику (Java Web Architect у SoftServе, ментор на бакалаврській програмі IoT у Львівському політехнічному Університеті).
Все про українське ІТ в телеграмі — підписуйтеся на канал DOU
73 коментарі
Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.