Співбесіда з C++. 400+ запитань для Junior, Middle, Senior

Пропонуємо список технічних запитань, які, ймовірно, вам поставлять на співбесідах з C++. Питання надали фахівці, що проводять технічні інтерв’ю з цієї мови. Врахуйте, що є широкий спектр спеціалізацій, а тому обирайте свій напрям і готуйтесь.

Junior

Загальні питання

1.У чому полягають основні принципи ООП?
2.Що таке складність алгоритму?
3.Код працює неправильно. Що робити?
4.Поясніть такі структури даних, як стек і черга.
5.Які книги, пов’язані з програмуванням, читали? Чого з них навчились?
6.Що цікавого знайшли в нових стандартах С++17, С++20?
7.Що таке таблиця ASCII?
8.Що таке Unicode?
9.Що таке патерни проєктування та для чого їх використовують?
10.Патерни Singleton, Strategy, Template-Method, Decorator?
11.Для чого потрібні модульні тести?
12.Яка різниця між модульними та інтеграційними тестами?
13.Що таке TDD?

Метапрограмування

14.Що таке шаблонний клас і шаблонна функція?
15.Що таке конструктори? Які типи знаєте?
16.Чи може конструктор бути шаблонною функцією?
17.Чи може віртуальна функція бути шаблонною?
18.Що таке інстанціація шаблону?
19.Що таке спеціалізація шаблону? Часткова спеціалізація шаблону?
20.Розкажіть про імплементацію шаблонних класів у срр-файлі?

Препроцесор і компіляція

21.Як проходить процес компіляції срр-файлів у бінарний файл?
22.Що таке препроцесор?
23.Як працює препроцесор?
24.Які знаєте його команди?
25.Як працює директива include?
26.Як працює директива define?
27.Що саме лінкує лінкер?
28.Що таке оптимізація компілятора?
29.Що таке прапорці компіляції?
30.Як захистити хедер від повторного включення?
31.Що робить директива include?
32.Як працюють макроси?

C

33.Як static впливає на глобальні/локальні змінні?
34.Як сonst впливає на змінну?
35.Які варіанти використання extern знаєте?
36.Які варіанти використання volatile знаєте?
37.Які є бітові операції?
38.Що таке булева алгебра?
39.Розкажіть про етапи розробки бібліотеки або програми.
40.Що таке алгоритми сортування та які знаєте?
41.Які алгоритми роботи з рядками знаєте?
42.Які алгоритми на графах знаєте?
43.Де може зберігатися змінна?
44.Яка різниця між calloc і malloc?
45.Для чого використовують realloc?
46.Що таке вказівник?
47.Який розмір вказівника і від чого він залежить?
48.Які є операції з вказівниками?
49.Що таке struct?
50.Як визначити розмір структур?
51.Що таке вирівнювання в структурах?
52.Що таке union?
53.Який розмір union?

C++/OOP

54.Що таке клас?
55.Які є основні типи даних у C++?
56.Що таке інкапсуляція? Як вона реалізується в C++?
57.Які є вбудовані типи в С++?
58.Що таке enum?
59.Як співвідноситься клас і об’єкт?
60.Яка різниця між структурою і класом?
61.Різниця між private/protected/public та де вони використовуються?
62.Які методи класу є стандартними для класу?
63.Що таке абстрактний клас і навіщо він?
64.Скільки займає пам’яті об’єкт порожнього класу class A{};?
65.Що стане з функцією, якщо до неї додати ключове слово static? У контексті члена класу? У контексті методу класу?
66.Які особливості статичних полів класу?
67.Яка особливість константних методів-членів класу?
68.Як змінити поле класу в константному методі класу?
69.Які методи можна викликати з константних об’єктів?
70.Що таке купа та стек? Відмінності, принцип роботи.
71.В чому різниця між вказівником s посиланням?
72.Для чого потрібен вказівник на функцію? Як його оголосити?
73.Що буде, якщо забути викликати delete? Коли звільниться та пам’ять?
74.Що таке розумний вказівник? Які розумні вказівники є в стандартній бібліотеці?
75.Як працює std::unique_ptr?
76.Як працює std::shared_ptr?
77.Розкажіть про константність змінної, посилання, вказівника? Що таке константний вказівник і вказівник на константу? Розмір вказівника в пам’яті?
78.Розкажіть про передачу аргументів за значенням, посиланням і вказівником?
79.Розкажіть про порядок обчислення аргументів функції?
80.Що трапиться, якщо повернути посилання на тимчасовий об’єкт?
81.Що таке перевантаження функції? Види перевантаження.
82.Що таке явне та неявне приведення типів у С++? Розкажіть про функції явного приведення типів у C++?
83.Що таке ініціалізація змінної в if?
84.Що таке ліниві обчислення в С++?
85.Розкажіть про цикли for та range-for.
86.Що робить ключове слово auto? auto-визначення return-типу, аргументів функції?
87.Чим відрізняються delete та delete[]? Що трапиться, коли викликати delete в об’єкта, створеного через new[]?
88.Обробка помилок у С++? Які конструкції використовують під час обробки exception?
89.Чи можна викидати exception з конструктора? Які поля будуть сконструйовані, які поля будуть зруйновані?
90.Що таке memory leak?
91.Чи можна викидати exception з деструктора?
92.Як відловити ділення на 0 в С++?
93.Як працюють константні методи?
94.Що таке лямбда-функція у С++? Як отримати доступ до змінних у зовнішній ділянці видимості?
95.Для чого використовувати namespace, anonymous namespace?
96.Яе викликати об’єкт з nested namespace?
97.Як працюють inline-функції? Чи може така функція бути рекурсивною?
98.Що таке поліморфізм?
99.Для чого використовується наслідування?
100.Які бувають типи наслідування?
101.Для чого використовують віртуальне наслідування?
102.Як можна розв’язати проблему ромбоподібного наслідування без використання віртуального наслідування?
103.Що трапиться, якщо клас-спадкоємець передати за значенням у функцію, яка приймає базовий клас?
104.Що трапиться, якщо успадкуватися від базового класу, який не має віртуального конструктора?
105.Що трапиться, якщо викликати перевизначену virtual function з конструктора? Чи може конструктор бути віртуальним?
106.Чи може мати імплементацію pure virtual function? Що трапиться, якщо викликати pure virtual function з конструктора?
107.Які методи генеруються для класу за замовчуванням? В якому випадку такі методи не будуть генеруватися? Як змусити компілятор додати/видалити ці методи?
108.Як заборонити успадковувати клас?
109.Який порядок конструювання та руйнування класів в ієрархії? Порядок ініціалізації полів класу?
110.Які є способи ініціалізації полів класу?
111.Чи може деструктор бути віртуальним?
112.Що робить ключове слово virtual?
113.Для чого використовують віртуальний деструктор?
114.Що таке глибоке копіювання?
115.Що таке віртуальні функції та навіщо вони потрібні?
116.Як захистити об’єкт від копіювання?
117.Що таке семантика переміщення?

STL/Algorithms

118.З чого складається STL?
119.Які алгоритми застосовували з STL? В чому перевага використання алгоритмів перед власноруч написаними функціями?
120.Розкажіть про контейнери стандартної бібліотеки vector, list, map, unordered_map.
121.Які знаєте типи ітераторів? Чим вони відрізняються? В яких контейнерах використовуються?
122.Яка різниця між std::set, std::map std::unordered_multimap?
123.Що таке ідіома remove-erase?
124.Як отримати найменше значення типу?
125.Яка різниця між std::map та std::hashmap?
126.Як підрахувати кількість елементів у std::list?
127.Що таке складність алгоритму та від чого вона залежить?
128.В чому різниця між vector та list і у яких випадках їх краще використовувати?

Багатопотоковість

129.Що вам відомо про багатопотоковість?
130.Що спільного і відмінного в процесах і потоках?
131.Як синхронізувати передачі інформації між потоками?
132.Яка різниця між м’ютексом і семафором?
133.Що таке deadlock?
134.Чи є С++ thread-safe?
135.Що таке race-condition?
136.Які уникнути стану гонитви?
137.Що таке атомарна операція?
138.Як працювати із std::mutex?

Networking

139.Що таке сокет?
140.Які операції можна робити з сокетом?
141.Яка інформація потрібна, щоб створити сокет?
142.Які бувають моделі мереж?
143.Розкажіть про рівні моделі OSI.
144.Розкажіть про рівні моделі TCP/IP.
145.Що таке IP-адреса?
146.Для чого використовується маска підмережі?
147.Яка різниця між IPv4 та IPv6?
148.Скільки пам’яті необхідно для зберігання IPv4?
149.Навіщо порт?
150.Скільки максимально може бути портів?
151.Яка різниця між TCP і UDP?
152.Для чого такий ненадійний UDP-протокол?

OS/Linux

153.Що таке менеджер пакетів?
154.Які бувають менеджери пакетів?
155.Які бувають дистрибутиви Linux?
156.Що таке PID?
157.Для чого використовують файлові дескриптори?
158.Розкажіть про стандартні файлові дескриптори процесу.
159.Що таке Pipe?
160.Що таке Named Pipe?
161.Що таке UID?
162.Розкажіть про команди bash.

SCM/CI/CD

163.Які є види SCM?
164.Для чого використовують системи контролю версій?
165.Які є команди git?
166.Які етапи під час коміту змін?
167.Різниця між git fetch і git pull?
168.Які є етапи вирішення merge conflict?

Практичні завдання

169.Порахуйте кількість одиниць у довільному числі.
170.Є структура за типом «однозв’язний список». Напишіть функцію, яка розгортає список. Тобто перший елемент стає останнім, а останній — першим.
171.Напишіть реалізацію функції int atoi(const char *str); перетворення рядка в число.
172.Для структури типу однозв’язний список напишіть функцію вставки елемента.
173.Реалізуйте клас vector.
174.Реалізуйте бінарний пошук у масиві.
175.Реалізуйте будь-яке сортування.
176.Реалізуйте макрос для порівняння двох рядків.
177.Реалізуйте реверс рядків.
178.Реалізуйте переведення числа з рядка в int.
179.Реалізуйте підрахунок слів у реченні.
180.Реалізуйте підрахунок чисел Фібоначчі.
181.Знайдіть такі елементи двох масивів, які трапляються тільки в кожному з них. Бажано використовувати STL.
182.Видаліть з unordered_map елементи, які діляться на 2, і виведіть ключі цих елементів.
183.Напишіть клас для логування, який міг би логувати до консолі або файлу.
184.Напишіть функцію для визначення, чи є певний рік високосним.
185.Напишіть функцію для визначення, чи є певне слово паліндромом.
186.Напишіть реалізацію патерну Singleton.
187.Напишіть реалізацію std::vector з операціями: push_back, push_front, pop_back, pop_front, size, clear.
188.Напишіть рекурсивний пошук значення в дереві бінарного пошуку.
189.Напишіть функцію, яка перевіряє, чи є дерево збалансованим.
190.Напишіть функцію для пошуку унікального елемента в масиві.

Middle

Загальне

1.Які курси пройшли чи книги прочитали за цей рік? Чого навчились?
2.Що подобається та не подобається в С++? Чого бракує?
3.Що цікавого знайшли в нових стандартах С++17, С++20 (конкретні фічі)?
4.Розкажіть про фічі, які з’явилися в різних версіях мови.
5.Розкажіть про модель пам’яті, яка з’явилася в С++11 стандарті.
6.Що таке серіалізація? Які бібліотеки знаєте?
7.Які знаєте патерни проєктування?
8.Що таке операційна система? Які існують типи за призначенням?
9.Назвіть основні складові та принципи роботи ОС Linux як приклад системи загального призначення.
10.Що таке SFINAE та PIMPL?
11.Назвіть породжувальні, структурні та поведінкові патерни програмування та наведіть приклади їх використання.

Препроцесор і компіляція

12.Розкажіть про системи автоматизації білд-процесу.
13.Яка різниця між статичною і динамічною бібліотеками?
14.Яка різниця між виконавчим файлом і динамічною бібліотекою?
15.Що таке DLL hell?
16.Що таке прапорці компіляції (fPIC)?
17.У чому різниця між дебажною та релізною збіркою?
18.Що потрібно для використання сторонньої бібліотеки?
19.Що таке internal linkage?

C

20.Що буде, якщо двічі викликати free?
21.Як відбувається виклик функції?
22.Як відбувається передача параметрів у функцію?
23.Як опрацьовується константність змінних?
24.Що означає ключове слово inline?
25.Для чого використовують вирівнювання, чи можна його контролювати?
26.Розкажіть про бітові поля.
27.Для чого потрібен extern «C»?
28.Що буде, якщо у двох файлах зробити функцію з однаковим ім’ям і параметрами? На якому етапі виникне помилка?
29.Як експортувати/імпортувати функції з динамічної бібліотеки?
30.Яка різниця між С-style приведенням типів і C++ приведенням?

C++

31.Що таке явне та неявне приведення типів у С++? Навіщо робити explicit-конструктор?
32.Що таке Uniform initialization? Aggregate initialization?
33.Що таке Reference to temporary object? Як продовжити час життя тимчасового об’єкта?
34.Що таке делегуючий конструктор?
35.Що таке список ініціалізації?
36.Який порядок ініціалізації полів класу? Що трапиться, якщо конструктор ініціалізує поля в іншому порядку?
37.Що трапиться, якщо ініціалізувати поле іншим полем?
38.Що таке copy elision? Скільки разів буде викликано конструктор/деструктор в об’єкта, який повертають за значенням?
39.Що таке move-семантика?
40.В яких випадках не буде згенеровано конструктор копіювання?
41.Чим відрізняється конструктор копіювання від оператора присвоєння?
42.За яких умов в конструкторі можна викинути exception?
43.Що таке конструктор за замовчуванням? Для чого потрібні default та delete?
44.Чим відрізняється інтерфейс від абстрактного класу?
45.Які види поліморфізму в С++?
46.Як реалізовне успадкування в більшості компіляторів?
47.Множинне успадкування: за та проти?
48.Віртуальне спадкування та порядок конструювання?
49.Навіщо використовувати override?
50.Які є правила виведення типу при використанні auto? В яких випадках auto може призвести до небажаного копіювання об’єкта?
51.Розкажіть про всі можливі способи використання ключового слова static в С++? Що таке static initialization order fiasco?
52.Що робить виклик throw; в блоку catch?
53.Чим відрізняється constexpr від const?
54.Що таке const correctness?
55.В якому випадку можна використовувати const_cast?
56.Що таке ключове слово mutable і коли його потрібно використовувати?
57.Що таке ключове слово friend і коли його потрібно використовувати?
58.Розкажіть про лямбда-вирази у С++ і доступ до змінних у зовнішній області видимості, захоплення this у лямбду та час життя лямбди та захоплених змінних?
59.Що таке функтор? Напишіть приклад.
60.Що таке спеціалізація шаблону?
61.Що таке dynamic_cast та run-time type identification?
62.Що таке exception? Як кинути та зловити?
63.Що буде, якщо кинути exception з конструктора? А з деструктора?
64.Що буде, якщо не зловити exception?
65.Що станеться, якщо exception вийде за межі блоку noexcept функції?
66.Для чого можна використовувати приватне успадкування?
67.Що таке контракт функції?
68.Що таке vptr і vtable?
69.Де міститься vptr?
70.Де міститься vtable?
71.Яка різниця між overload and override?
72.Як компілятор розрізняє члени класу та звичайні змінні в функціях?
73.Навіщо використовують exceptions?
74.Що таке блоки try-throw-catch?
75.Розкажіть про логіку catch-блоків.
76.Що таке move constructor?
77.У чому різниця між константним методом і неконстантним?
78.Що таке О-нотація та як визначити складність будь-якого алгоритму?
79.Що таке таблиця віртуальних методів?
80.Які функції класу автоматично генерує компілятор, якщо їх не визначити?
81.Що таке вирівнювання даних?
82.Що таке exception?
83.Які є стандартні контейнери та на основі яких структур вони побудовані?
84.Що таке Undefined behavior? Наведіть приклади.
85.Як визначити, що в програмі є memory leak?
86.Для чого потрібен std::make_shared? Чим він кращий за створення std::shared_ptr через конструктор?
87.Що буде, якщо виділити один обсяг пам’яті, а записати більше?
88.Що таке переповнення stack?

Патерни проєктування

89.Навіщо потрібні патерни? Які типи патернів розрізняють?
90.Недоліки патерну Singleton? Коли він доречний?
91.Переваги та недоліки PIMPL?
92.У чому різниця між патерн-фабрикою та фабричним методом? Коли використовувати який з них?
93.Що таке патерн Observer?
94.Як контролювати стан програми? Машину станів? Патерн стан?
95.Що таке патерн Visitor?

Метапрограмування

96.Які є правила виведення типу в шаблоні?
97.Чим відрізняється using від typedef?
98.Скільки пам’яті займає довільна структура? Що таке вирівнювання об’єкта?
99.Чому порожня структура займає 1 байт? Яка мінімальна одиниця адресування у С++?

OOP/OOD

100.Що таке SOLID? Що означає кожен з цих принципів?
101.Розкажіть про патерни проєктування.
102.Що таке Dependency Injection? Наведіть приклад.
103.Які переваги та недоліки функціонального підходу?
104.Що таке принцип RAII?
105.Що таке принцип DRY?
106.Що таке принцип KISS?
107.Які переваги композиції перед успадкуванням?

STL/Algorithms

108.Які алгоритми з STL використовували? Яких не вистачає?
109.Якими особливостями має володіти клас, щоб він був ітератором?
110.Які бувають ітератори?
111.Розкажіть про інвалідацію ітераторів.
112.Як оптимізувати видалення елемента з середини вектора?
113.Як реалізований vector?
114.Як реалізований list?
115.Як розширити STL-контейнери?
116.Які є алгоритми в STL?
117.В чому різниця між vector, deque, list, set e STL?
118.Коли треба використовувати map? Коли — unordered_map? Яка складність пошуку і вставки в цих контейнерах?
119.Як перевірити, чи є в контейнері елементи? Чому виклик container.size() є поганою практикою?
120.Що таке exception safety guarantee? Яку exception safety guarantee мають STL-контейнери?
121.Розкажіть про типи розумних вказівників і підрахунок посилань у них?

Багатопотоковість

122.Чи є С++ thread-safe?
123.У чому різниця між багатопотоковістю та асинхронністю?
124.Що таке багатопотоковість? Яку функціональність надає С++ для розробки багатопотокових застосунків? Які основні проблеми багатопотокових застосунків?
125.Як передати інформацію між кількома процесами?
126.Як синхронізувати між собою кілька процесів?
127.Які є особливості роботи з shared memory?
128.Як працює spinlock?
129.Які ви знаєте особливості використання recursive mutex?
130.Розкажіть про read-write mutex.
131.Що таке race-condition? Взаємне блокування? Що таке критична секція?
132.Які уникнути стану гонитви?
133.Чим відрізняється м’ютекс від семафора?
134.Які примітиви синхронізації реалізовані в C++? Переваги lock_guard?
135.Що трапиться, якщо exception вийде за межі потоку? Які інструменти є для безпечної асинхронності в С++?
136.Чим відрізняється std::launch::async від std::launch::deferred?
137.Що таке атомарна операція? std::atomic?
138.Як працювати з std::conditional_variable?
139.Як створити потік за допомогою std::thread?
140.На скільки потоків найкраще розбити задачу? Від чого це залежить?
141.Як працювати з std::async?
142.Thread-safe гарантії контейнерів в С++? Чому недолік інтерфейсу front() + pop_fornt()?

Networking

143.Що таке TCP handshake?
144.Яка різниця між TCP та UDP?
145.Розкажіть про протоколи верхнього рівня.
146.Яка різниця між HTTP та HTTPS?
147.Розкажіть про SSL/TLS handshake.

SCM/CI/CD

148.Розкажіть про процеси CI.
149.Як відредагувати коміт?
150.Розкажіть про інтерактивний rebase.
151.Які можуть бути способи дебагінгу коду?
152.Для чого потрібні Unit test? Чим відрізняється від Functional Test?
153.Як тестувати код? Який використовуєте фреймворк?
154.Які бібліотеки знаєте для написання тестів?
155.Що таке mock?
156.Скільки тестів потрібно написати на одну функцію?
157.Що таке побічний ефект, ідемпотентність і чисті функції?
158.Що таке контейнеризація і в чому переваги та недоліки? Що таке Docker чи інший інструмент контейнеризації?
159.Що таке CI/CD і які переваги приносить для розробника?
160.Які принципи ітеративних методологій?
161.Які переваги та недоліки code-convention?

Практичні завдання

162.Напишіть максимально коректну реалізацію класу string з конструктором копіювання та оператором присвоєння.
163.Напишіть реалізацію черги.
164.Реалізуйте функцію, яка за один прохід знайде унікальний елемент в контейнері.
165.Напишіть thread-safe пул потоків.
166.Напишіть гру життя в ООП стилі.
167.Напишіть клас, який дістає з бази список товарів за фільтром і показує на консолі. Напишіть тести для нього.
168.Будь-яке завдання на написання коду, щоб перевірити вміння проєктувати інтерфейси та дотримуватися принципів SOLID, DRY, KISS.
169.Напишіть свою реалізацію std::atomic.
170.Напишіть програму для аналізу графів: знаходження циклів, deadlock-станів, циклів, недосяжних станів.
171.Напишіть програму, яка б перевіряла, що у системі запущено лише один її екземпляр. Рішення має бути cross-platform.
172.Проаналізуйте C++ код з погляду якості: виявити потенційні memory leak, нераціональне використання STL-контейнерів, алгоритмів, неоптимальні конструкції тощо.
173.Напишіть код для розв’язання судоку.
174.Напишіть код, який знайде зациклення в однозв’язному списку.

Senior

Загальне

1.Як ви розумієте SOLID?
2.Як розробити систему плагінів на С++?
3.Що таке RPC? Які бібліотеки знаєте?
4.На що звертати увагу під час проведення code review?
5.Які є проблеми під час написання кросплатформенного коду? На що звертати увагу?
6.Що робити, якщо код працює повільно?
7.Які є способи та методологія вимірювання швидкодії коду? Як можна усунути/зменшити вплив замірів на швидкодію?
8.Що таке SFINAE? Для чого використовується?
9.Що таке метапрограмування? За допомогою чого реалізується на С++?
10.Як використовувати variadic templates?
11.Як тестувати закриті методи?
12.Як рахувати покриття тестами? Чи потрібно це робити?
13.Що таке cache miss і як це виявити?
14.Що таке SIMD-інструкції? Які є необхідні умови та способи їх використання?
15.Що таке покриття коду і як забезпечується?
16.Опишіть принципи lock-free структур даних і свій досвід роботи з ними.

Препроцесор і компіляція

17.Розкажіть про побудову білд-системи.
18.Як працювати з білд-системами: Make, CMake.
19.Як інтегрувати third-party в проєкт?
20.Що таке бар’єри пам’яті?
21.Розкажіть про роботу з сирими вказівниками та ручне управління пам’яттю.
22.Що таке статичний аналізатор коду? Які знаєте?
23.Що таке динамічний аналізатор коду? Які знаєте?
24.Проєкт повільно збирається. Як можна прискорити?

C/C++

25.Розкажіть про використання realloc в контейнерах.
26.Як працюють темплейти?
27.Розкажіть про спеціалізацію темплейтів.
28.Як працює RTTI?
29.Чи можна використовувати exception в конструкторі/деструкторі?
30.Що таке rvalue та lvalue?
31.В чому особливості контейнерів std::set, std::map, std::unordered_map, std::hash?
32.Що таке placement new? Для чого використовують? Як зробити placement delete?
33.Як розміщується в пам’яті клас з множинним успадкуванням та віртуальними функціями?
34.Як працюють точки зупинки?
35.Що таке вразливості? Який механізм їхньої роботи?
36.Як написати власний std::shared_ptr?
37.Що таке curiously recurring template pattern?
38.Опишіть призначення та принцип роботи std::shared_ptr, std::unique_ptr та std::weak_ptr.
39.Яке призначення та відмінності використання std::variant та std::any?
40.Які покращення отримав std::search з С++17?
41.Що таке copy elision і коли стає можливим? Які є особливості для різних стандартів?
42.Що таке Return Value Optimization?

OOP/OOD

43.Поясніть принципи SOLID.
44.Поясніть принципи KISS.
45.Поясніть принципи YAGNI.
46.Які є підходи до оптимізації коду?
47.На що варто звертати увагу під час code review?
48.Які є патерни проєктування? Чому не радять використовувати Singleton?
49.Що таке статичний поліморфізм?

STL/Algorithms

50.Коли std::vector може використовувати std::move?
51.Розкажіть про свій улюблений алгоритм пошуку.
52.Що таке lock-free та wait-free алгоритми? У чому їхні відмінності та способи реалізації?
53.Опишіть призначення execution policy для паралельних алгоритмів.

Багатопотоковість

54.Розкажіть про побудову API, розрахованих на багатопотокове використання.
55.У чому різниця між kernel-level та user-level потоками?
56.Що таке coroutine?
57.Що робить специфікатор thread_local?
58.Як реалізувати синхронізацію в задачі producer-consumer?
59.Як синхронізуватися між різними процесами?

SCM/CI/CD

60.Розкажіть про налаштування процесу менеджменту гілок репозиторію.
61.Розкажіть про стратегію бренчування.

Практичні завдання

62.Напишіть базову реалізацію std::shared_ptr.
63.Реалізуйте алгоритм сортування.
64.Реалізуйте алгоритм хешування.
65.Реалізуйте shared_ptr з розширенням для weak_ptr.
66.Реалізуйте найпростіший producer-consumer, використовуючи умовні змінні.
67.Опишіть якомога детальніше, що відбувається в системі, коли застосунок робить мережевий запит.
68.Детально описати дизайн програмного компонента, наприклад, системи голосування — врахувати при цьому високе навантаження і зробити його розширюваним і відмовостійким.


Дякуємо за участь у статті Олександру Жакуну, Ярославу Пушку, Назару Семенишину, Сергію Подоброму, Володимиру Кочуну, Володимиру Новікову, Сергію Крівоносу, Марку Цирульнику, Кирилу Пшеничному, Віктору Шуму, Сергію Братусю.

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

👍НравитсяПонравилось12
В избранноеВ избранном8
Подписаться на тему «C++»
LinkedIn



Підписуйтесь: Soundcloud | Google Podcast | YouTube


Лучшие комментарии пропустить

Ладно, досить тут критикувати. Треба (без сарказму) подякувати редакції ДОУ за працю. Це один з найбільших списків питань по С++ українською мовою, досі такого не було. З цих питать десь 30% цілком нормальні, а ще десь 30% можуть бути легко переформульовані в цілком нормальні. А 60% нормальних питань це, знаєте, побільше буде, ніж на багатьох реальних співбесідах!
Джунам буде на що орієнтуватися, лінивим інтерв’юверам буде звідки брати основні питання. Так що користь є.

Багато-багато років тому проходив через усі «такі» питання, як тоді модно було казати, стандард C++. Інтервюер приніс страуструпа, і я переконавшись, що це таке ж саме видання, як і у мене, відповідав — номер сторінки і дослівно цитата з книжки (я не заучував, і пам’ять у мене не дуже, але воно само так виходило). До сих пір пам’ятаю ті квадратні очі. Але мені відмовили, хоча контора зірок з неба не хапала. Мене перемкнуло, і я навмання пішов на співбесіду по Java. А шо? там такі ж самі фігурні дужки, успадкування, класи, цикли. Якось прорвавшись через питання по J2EE/GC/Jetty/tomcat, я отримав офер з ЗП х2. Як виявилось Java набагато приємніша, замість дебагу сегфолтів з’явився час на каву з співробітницями і можливість регулярно отримувати $500 підвищення. Мораль — інколи для х2 ЗП потрібно просто розслабитись)

115 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

И где всеми любимые полиморфные аллокаторы ? Монотонные пулы ?
Если серьезно, то про алокаторы, шаблоны, оптимизацию часто спрашивают на серьзеные позиции, а вот про полиморфизм — врядли.

Автор! Нет понятия «лямбда-функции», а есть просто «лямбда».

Ну, якщо пристібатися до кожного слова, то в стандарті і просто лямбди немає теж. Є «lambda-expression»

Балять маи ноги... Походу, я бы собес с такими вопросами не прошел бы. 30 лет работы на С, С++, Асм. Написал и поддерживаю SIP server, а вот хендшейк TCP не знаю. А нахиба это знать вообще? Чтобы что? Вы этот хендшейк кроме как в вайршарке не увидите вообще. А вот чем имплементация TCP на винде и на линуксе отличается — это был бы интересный вопрос. Вот только я думаю сами интервьюеры хрен это знают. Я случайно обнаружил, когда наши тестеры флад-тест на сервер натравливали.

30 лет работы на С, С++, Асм. Написал и поддерживаю SIP server

youtu.be/lj96YnI9El8

В профиль линкдина религия не позволяет заглянуть?

Дякую.
Можливо дурне питання, але навіщо в 2021-му році потрібно використовувати C++ для нових проектів, якщо є Java і C#?

і руст і джава ацтой бо є котлін

То кацапи

Embedded тоже на Java/C#?

Embedded, gamedev, якісь рішення для яких критичний перфоманс

Ок, а чому гри не можна писати на C #?

можна звісно і його використовують, наприклад для розробки на юніті. Але якщо глянути на такі двигуни як Unreal Engine чи CryEngine — там плюси ібо треба максимальний перфоманс мабуть. Хоча наче той же minecraft написаний на джаві. Тому хз.

бо віртуальна машину то купа ресурсів в попу. І ваша гра буде все ж не 60 fps, а 6 fps.

Цікаве питання. Ви коли небудь цікавились на чому написані самі JVM і C#/.NET/Mono ? Як прискорити критично навантажених участок коду і т.і. для .NET Або Java програм? C++ як і assembly це рівень абстракції, який дає більше можливостей за ціну більшої небезпеки. Тому код писати і відпрацьовувати довше і складніше ніж в: Java,C#,Python і т.і. — які спеціально розроблені щоб пришвидшити програмування звичайних рутинних прикладних задач. Безперечно в загалом код написаний на C++ — працює швидше і використовує меньше пам’яті за рахунок більшого контролю за ціною абстракцій (пряме керування пам’ятю, віртуальні функції, платформо залежні трюки тощо). Тому C++ буде спів існувати з мовами з більшим рівнем абстракцій (і меньшим контролем за їх вартістю) ще дуже довго. P.S. Через особливості попиту та пропозиції C++ вакансій в Україні дещо меньше ніж іньших, це іньша справа в загалі і стосується ринку — а не мов програмування.

Навіть в Python коли виникає необхідність щось прискорити то переписують пакет на C/C++.

А Ви це питання в якому браузері, наприклад, написали? А на чому він написаний?

Я от ще думаю, що на Вас (як і на нас всіх) трохи впливає інформаційна бульбашка, в якій кожна конкретна людина живе. Певно, Ви пишете на Java, і все життя писали, і все життя будете, і у вас є 100500 знайомих програмістів на Java і купа проєктів за плечами і ще багато попереду і ще багато таких, в яких хотілося б попрацювати, але немає часу. І все на Java. І тому здається, що весь світ такий. Але ні, якщо взяти програміста на С++ — в нього буде все точно так само: купа знайомих, роботи. І все на плюсах. І от в цьому світі нікому не прийде в голову щось писати на Java. Бо те, що пишеться на плюсах, не напишеш на Java, бо воно з’їсть всю пам’ять, процесор і все-одно не запрацює.

А ось і ні. Ви знаєте, може я і живу в своєму інформаційному просторі, але ще постійно цікавлюся тим, що відбувається в ІТ.
В останні пару років з’явилися дві дуже перспективні технології:
— GraalVM
— Kotlin/Native
Вони обидві вміють компілювати Java/Kotlin проекти в машинний (нативний) код, при цьому виконуючи AOT компіляцію (видаляючи невикористаний код) і на виході ми отримаємо бінарник 20-40 мегабайт, якому вже не потрібна буде JVM і який спокійно запуститься на Alpine Linux.

Я пам’ятаю першу презентацію .NET в якомусь там 2001 році. Так от там, відразу після розповіді про байт-код і віртуальну машину, десь на 15 хвилині презентації, сказали що «але це все не важливо, воно при першому ж запиті зкомпілюється в нативний код і далі буде працювати лише він!», так що історія не нова :)
З іншого боку ось дивіться на рівень типової маніачності в екосистемі С++:
www.youtube.com/watch?v=NH1Tta7purM — люди обговорюють оптимізації на рівні одиничних наносекунд, або й часток наносекунди. Коли котлін з граалем доберуться до того ж рівня — ну, може щось і буде з них.

В останні пару років

Як вже правильно написали ці технології вже років 15 як не нові. Те що вони лише з’явилися для Java доволі дивно.

В кожної мови є своя специфіка, на жаль С++ програє як мова для загальних задач, але інструментів для написання застосунків від GUI до RESTfull API через OpenAPI специфікацію достатньо. Якщо в вас є готова команда плюсовиків то не бачу жодних перешкод писати на С++

Я теж з цим згоден. Але абсолютно впевнений, що написати більшість таких додатків на Java займе менше часу і ресурсів

швидше писати, але і працює в деяких задачах до 10 разів повільніше. Писати що, всякі GUI? а бекенд буде знаєте на чому?

задачі де враховується fps, якщо почати писати на джаві то прийдеться все переписати..

Дивно бачити такі речення від людини яка пише книги і вчить людей програмувати. Не знаєте різниці між компільованим кодом і віртуальною машиною?

1) На Qt UI дуже швидкий. На відміну від того ж WPF чи що там зараз.
2) Код той самий на фронт- і бек-енді

Ну напиши кернел-моуд драйвер на джаве. Потом обсудим результат

Ладно, досить тут критикувати. Треба (без сарказму) подякувати редакції ДОУ за працю. Це один з найбільших списків питань по С++ українською мовою, досі такого не було. З цих питать десь 30% цілком нормальні, а ще десь 30% можуть бути легко переформульовані в цілком нормальні. А 60% нормальних питань це, знаєте, побільше буде, ніж на багатьох реальних співбесідах!
Джунам буде на що орієнтуватися, лінивим інтерв’юверам буде звідки брати основні питання. Так що користь є.

Мені при прочитанні статті здалося, що всі питання, відповіді на які я знаю, нормальні, а ті питання, відповіді на які я не знаю, це привід покращити свої знання.

джуны должны матчасть учить, а не ответы на вопросы. им не стоит ориентироваться на этот список.
для ленивых интервьюеров вопросы (выше джуна) не подходят — они почти все гейты (всего один правильный ответ), как следствие этого, их, вопросы, невозможно калибровать — то есть, например один кандидат у вас ответит принцип YAGNI а второй расскажет, что такое thread_local — что с того? вам как-то от этого проще стало из двух кандидатов выбрать того, которого нужно нанимать?

Багато-багато років тому проходив через усі «такі» питання, як тоді модно було казати, стандард C++. Інтервюер приніс страуструпа, і я переконавшись, що це таке ж саме видання, як і у мене, відповідав — номер сторінки і дослівно цитата з книжки (я не заучував, і пам’ять у мене не дуже, але воно само так виходило). До сих пір пам’ятаю ті квадратні очі. Але мені відмовили, хоча контора зірок з неба не хапала. Мене перемкнуло, і я навмання пішов на співбесіду по Java. А шо? там такі ж самі фігурні дужки, успадкування, класи, цикли. Якось прорвавшись через питання по J2EE/GC/Jetty/tomcat, я отримав офер з ЗП х2. Як виявилось Java набагато приємніша, замість дебагу сегфолтів з’явився час на каву з співробітницями і можливість регулярно отримувати $500 підвищення. Мораль — інколи для х2 ЗП потрібно просто розслабитись)

У Java набагато більше областей застосування, ніж у C ++

Що, наприклад, можна писати на Java такого щоб це не можна було написати на С++?

А що такого можна написати на C ++, що не можна написати на ASM?

А я хіба десь стверджував, що у ASM більше областей застосування ніж у C++? Наче ні. А от стосовно

У Java набагато більше областей застосування, ніж у C ++

у мене виникає питання.

Можно, но не всегда нужно.

Java — це в основному бекенд для web. А С++ — це все інше, окрім web.

Я вас здивую, але на Java (і JVM-based мовами) написано купа серверів і runtime, в тому числі і для високонавантажених систем.

І це не буде бекендом для web? Цікаво подивитися на приклади.

Наприклад, Apache Kafka. 73% написано на Java, 23% на Scala.

Меседж брокер — той же web бекенд (якщо грубо). Apache Lucene більш гарний приклад. Але відсоток таких проектів незначний. Ще я зовсім забув за додатки для Android. З десктопного софта на Java знаю тільки різні IDE. У кожної мови своя ніша.

А що тодi не бекенд ?

Наприклад, математичний софт, всякі AI, прошивки для мікроконтролерів, драйвери, ігри, кодеки для стиснення аудіо/відео, браузери.

Сколько провела интервью, а 90% этих вопросов не спрашивала. Опыт показывает, что можно ответить на всё, что угодно, а потом не уметь написать простейший код🤣

Бред, особенно удивил вопрос по Тдд для джуна. Если на проекте тдд не применяется на кой о немм вообще спрашивать ?

Чтобы знать, куда не надо идти :)

Даже немного стыдно, что принимал в этом участие. Для middle+ на интервью как правило просто дают сделать код ревью и решить связанную с проектом задачу.

125.Яка різниця між std::map та std::hashmap?

Это, пожалуй, худшее.

15.Що таке DLL hell?

От жалко пацана ©

ого. причем вопросы не сверх-сложные, обычные гейты,
но где вы, блин, нанимаете, и кто к вам приходит, что такое спрашиваете.

вообще конечно тема пятничная чисто полгумиццо риальным ыкспертам ))

Розкажіть про SSL/TLS handshake.

а ну ок а в чём разница между SSL и TLS знаешь? )) а между TLS 1.2 и TLS 1.3? ай яй яй как ни харашо а зачем спрашивал? а диффи хелмана изобразишь? а какие ещё примения ssl/tls кроме https знаешь?

Собрали вопросов у собеседующих, смерджили, ешьте не испачкайтесь)

Які є види SCM?

ж... )) это реально кто-то такое спрашивает? кто вообще все эти люди?

Реалізуйте алгоритм хешування.

сирёзно? )) я в этом месте просил «интервьюера» математически доказать пригодность конкретного «алгоритма» но при чём тут «алгоритм хеширования» вообще к «вопросам на си++»?

Опишіть якомога детальніше, що відбувається в системі, коли застосунок робить мережевий запит.

интересно что такое «мережевий запит»? и кстати да это одна из ключевых проблем «отечественного языка» исходя из которой вы занялись «изобретением отечественного языка» вместо того чтобы изучать и озобретать новые «мережевий запит»

Як розробити систему плагінів на С++?

а никак )) в самом си++ нет ровно ни какого именно си++ механизма который бы б позволял бы б «делать плагины» в самом си++ вообще нет ничего что подсказывало бы б возможность загрузки кода динамически + си++ никак не стандартизирует ABI

У чому різниця між kernel-level та user-level потоками?

омг какое сра.ное г.но )) кто это сделал?

Розкажіть про SSL/TLS handshake.

на уровне мидла ага ага карочи догорая редакция ... это туда ))

Як компілятор розрізняє члени класу та звичайні змінні в функціях?

б.дь ))

Розкажіть про команди bash.

на уровне джуна да и потом вы точно имеете в виду bash а не shell и должен ли ваш джун разбираться в сортах command-line interpreters?

а никак )) в самом си++ нет ровно ни какого именно си++ механизма который бы б позволял бы б «делать плагины» в самом си++ вообще нет ничего что подсказывало бы б возможность загрузки кода динамически + си++ никак не стандартизирует ABI

Я б не був таким категоричним. Цю задачу успішно розв’язують за допомогою extern «C» та інтерфейсів. Той же самий СОМ так побудований.

COM це щоб бінарніки написані різними мовами та видані різними компіляторами могли одне одного використовувати. Щось типу assembly в .net чи Java Beans за кілька років до того.

COM це щоб бінарніки написані різними мовами та видані різними компіляторами могли одне одного використовувати.

дайте вгадаю усі «різні компілятори» виключно ms specific proprietary ))

усі «різні компілятори» виключно ms specific proprietary

Якраз навпаки — сумісність на бінарному рівні, мова і компілятор значення не мають.

гм... є спєка у відкритому доступі для COM ABI? хоча доречі може бути і так насправді C ABI має бути той що зветься __stdcall але це спільний ABI Win32 API і це «сішний» API а от що до сі++ я вже не так впевнений і так сам мікрософт зробив свій сі++ ABI прямо сумісним з власним же ж MS COM ну молодці харний хід

ок я пас бо у мене є підозра що я сперечаюся з рівня експерта як воно все влашноване всередині і тому веду суперечку фактично сам з собою з рівнем рекламних проспектів за якими воно все продається

але суто теоретично такі да існуює же ж mingw і cygwin і навіть ActiveQt але чи справді це відношення має прямо до сі++? ще раз наголошую що у питаннях було питання про linux shell/bash але не було питань за той самий activex

Спеки — docs.microsoft.com/...​ortal?redirectedfrom=MSDN.

Але так, я розумію здається про що мова. MS додали підтримку технології у свої компілятори, але інші виробники це зробили теж. І можна з якогось Delphi використовувати компоненти написані на VC++, VB чи Intel Fortran.

Згодом це все було покращено в COM+ та доповнено міжкомп’ютерною підтримкою в DCOM.

Більше того — .NET та PowerShell якраз усю свою магію на основі цих механізмів і роблять. А набор різних компонентів просто велетенський — як UI елементи, так і фрагменти бізнес-логіки, розподілені системи повідомлень і таке інше.

Згодом це все було покращено в COM+ та доповнено міжкомп’ютерною підтримкою в DCOM.

Слухайте, ну Алекс же правий, Ви дійсно розмовляєте мовою рекламних проспектів. Я от писав з використанням DCOM. Так от, цю технологія варто загорнути у щось м’яке, вивезти на полігон і підірвати направленим вибухом.

цю технологія варто загорнути у щось м’яке, вивезти на полігон і підірвати направленим вибухом

Я згоден і не намагався її рекламувати взагалі :)

Але треба пам’ятати, що на момент її виникнення адекватних альтернатив не було і до того ж світ був набагато більш windows-центричний.

Той же самий СОМ так побудований.

угу це тому що MS знає власний ABI )) а CoCreateInstance відноситься до Win32 API а ніяк не до сі++ бо до останнього є ATL

The Active Template Library (ATL) is a wrapper library that simplifies COM development and is used extensively for creating ActiveX controls.

і знову же ж таки це жодного разу не сі++ хоча якщо поглянути платформенно то чимала частина «віндоуз сі++» і 50/50 доведеться мати справу з нею якщо мова за «віндоуз сі++» тіко шото я не бачу жодного питання за ATL/WTL/MFC та різні там TPL але ніяких згадок про це все у «питаннях» нема

MS знає власний ABI

Кожна ОС має власний ABI, який компілятор С++ має підтримувати, якщо він підтримує цю платформу.

звісно ж ні хіба що system api такої ос представлено саме на сі++ і не на «класичному сі»

... доречі такою фактично є macos(x) фактично розширюючи «базовий сі» до власного objective-c і представляючи його на рівні офіційного системного API

звісно ж ні хіба що system api такої ос представлено саме на сі++ і не на «класичному сі»

Неправильна відповідь. С++ компілятори мають забезпечувати сумісність з С інтерфейсами. Давайте тільки не впадати в казуїстику на рахунок того, що це С чи С++ чи С/C++.

С++ компілятори мають забезпечувати сумісність з С інтерфейсами.

саме «мають»? а чому тоді тільки компілятори сі++? ))

ЗЫ: я не знаю за казуїстику я знаю лише за extern «C» і то такі речі є не лише у сі++ а як от у джаві JNI та PInvoke у сішарп і питання тут конкретно лише у контексті компілятора сі++ чи саме _має_ компілятор сі++ мати сумісніть з сі інтерфейсами

JNI та PInvoke

Ці речі працюють тільки для споживання (імпорту) функцій.

Junior
Загальні питання
...
Код працює неправильно. Що робити?

«пиши 3 конверта» (к)

По-моему надо два конверта, или три это в случаи C++?

хм... давай проверим работает ли ))

№ 1 сваливай всю вину на предшественников
№ 2 бери всю вину на себя
№ 3 пиши 3 конверта

вроде работает ))

Второй пункт абсолютно не обязателен

«молодой ишшо» )) эти все пункты чистая цель которых это тянуть время и соотв. +1 пункт просто позволяет протянуть +1 времени и соотв. продолжить получать з.п.

вон в японской ветке правильно пишут когда человек вообще эксперт в этом деле и давно умер но на работе смогли заметить это только через не сколько дней ))

Більшість питань в стилі «один раз вивчив, здав і забув», тобто для проведення співбесід в стилі екзамену.

більшість питань на справді ацькі таргани у голові «інтервьюєра» помножені на ацьку «рідну мову у національному перекладі»

Що таке таблиця ASCII?
Що таке Unicode?

на рівні джуна ага ага

я з рівня експерта спитаю в лоб скіко юнікодів знаєш і як реалізується rtl

Що трапиться, якщо успадкуватися від базового класу, який не має віртуального конструктора?

LIL

Що трапиться, якщо успадкуватися від базового класу, який не має віртуального конструктора?

гг)

Альфред Юхимович. Ха! А ну пророки шо з нами буде!
Пророк Самуїл. А шо буде? Нічого не буде — Піздєц буде!!!

остані пару тижнів проводив інтервью на с\с+ лінукс програмера. на питання «є буфер в 24 байта скільки символів в utf8 в нього влізе» обгрунтовaноі відповіді від мідл-сініорів майже не чув :)

От трех

от 4-х но современный стандарт не поддерживает 5-ти и 6-байтные последовательности и соотв. если говорить от стандарте то только от 6

собственно потому «дискуссия об utf-8» не имеет принципиального смысла вне контекста разве что нужен конкретно специалист по utf-8 и unicode не побоюсь этого слова эксперт но экспертов обычно таки не «собеседуют» ))

«а чорт його знає» — нормальна відповідь? Ось люди зклепали UTF-8 символ з 17 байтів: hsivonen.fi/string-length І ніхто не довів, що це максимум.

прикольно але ніт ))

The string that contains one graphical unit consists of 5 Unicode scalar values.
А діакритика?
обгрунтовaноі відповіді від мідл-сініорів

аб том и вапрос что на этом уровне вопрос не имеет смысла )) лично я совсем не обижусь если человек не сможет описать или даже придумать «с потолка» как в этом месте реализовать запись справа на лево именно на уровне технического стандарта с другой стороны его идеи как реализовать чисто программную поддержку spell checking для нескольких языков в одном и том же ж тексте подряд я таки с интересом послушаю

Я взаалі не розумію, яким боком С++ до стандарту Unicode

:) тобто для вас нормльно що людина на позицію сішного лінукс апп девелопера та ще і «сініора» не розуміє що кодировка multi-byte? і що вона ніколи не зустрічалася з локалізаціею програм? Ок, робити це не може і не було протреби, але не розуміти роботу з подібними стрічками це трошки занадто. програми не лише з англійською працюють, а сішники таки мають розуміти як на рівні байтів виглядають дані.

Ну такое...Есть вопросы интересные, есть не очень. Например «Які види поліморфізму в С++?» Вот реально, не перечислю их названия, потому что в работе это никогда не пригождалось и не пригодится. Вот если бы было «продемонстрируйте разные способы полиморфизма» — другое дело

Наверное, имели в виду динамический и статический.

либо сompile_time/run_time полиморфизмы, хз, хотя вроде одно и то же, названия только разные. Вобщем как тут приведено к примеру
www.geeksforgeeks.org/polymorphism-in-c
Мне проще было бы кодом объяснить такие вещи...

доречі, подібні питання чогось почали з’являтися коли жабаскріпт став популярним. До того простопитали про поліморфізм == віртуальні ф-ціі. А ці статичні-динамічні це все теорія для задротів, бо якщо програмер знає як і де використовувати віртуальні ф-ціі, темплейти і перегружені ф-ціі. То сенсу просити це описати в стили «пишу дісертацію» жодного. І навпака — якщо він вам завчить і назве ці види поліморфізма, нема жодноі гарантіі що на практиці це буде коректно використано

А ці статичні-динамічні це все теорія для задротів

Не обов’язково бути задротом, щоб відрізняти віртуальну функцію від набору overloaded функцій чи якого-небудь CRTP.
Знати, що перше називається «динамічним», а друге «статичним» поліморфізмом, і, головне, чому, буде корисно не тільки задротам. Бо це напряму стосується розуміння програмістом того, де і за що він «платить» перформансом у рантаймі.

«якщо програмер знає як і де використовувати [...] то сенсу просити це описати в стили „пишу дісертацію“ жодного»

А це справедливо стосовно майже будь-якої теми в C++ і не тільки.
Ціль співбесіди — зрозуміти, чи знайомий девелопер з певними речами, а не заставити його «писати дисертацію» чи викласти купу сухої теорії (яку, погоджуюсь, зубрити нафіг не потрібно — головне розуміння і вміння використовувати).

Багато питань вкрай сумнівних, і ще багато таких, які релевантні лише для розробників дженерік бібліотек (ніби ви фейсбук/ЕА, пишете свою folly/eastl і шукаєте у цей відділ нових девелоперів), а не для простих смертних «прикладних» програмістів, що працюють з бізнес-логікою.

Ось про це питання мені було б цікаво послухати розумних людей:

Розкажіть про використання realloc в контейнерах

(не на співбесіді, а так, для общєґо развітія)

Наскільки мені відомо, реаллок в std контейнерах взагалі не використовується, і коли вектору потрібно переїхати в нове місце, від виділяє повністю новий кусок пам’яті, а вже потім видаляє старий (бо ж exception safety) — а отже «реаллокуватися» у те саме місце, де він і був, просто «розширивши» дозволений діапазон пам’яті, він не може. На відміну від випадку, якби він використовував malloc/realloc/free, при умові, що його value_type є trivially relocatable (як мінімум для примітивних типів це можна спеціалізувати, поки не стандартизували) і що alignof(value_type) не перевищує alignof(std::max_align_t).

А что только миддл по C++ может знать разницу между HTTP и HTTPS? Для джуна там непостижимое?
Еще хотелось бы увидеть кто на серьезных щах у джуна спрашивает «Что нового нашли для себя в стандарте С++17, С++20». Джун которого вы спрашиваете в 99,9% случаев понятия не будет иметь что есть какие-то другие стандарты, потому что он учить начал когда они уже в обиходе. Да и не джуна этот вопрос. В общем-то очередной бред из разряда как зае**ть пришедшего на собеседование. И очень хотелось бы видеть героев приславших эти вопросы.

Ваш второй абзац отвечает на вопрос в первом.

Кожне питання можна задати на різних рівнях, але якщо джуніор може відповісти що HTTPS секьюрно а HTTP не дуже і цього буде достатьно то для просунутих розробників цього буде замало.

Джун которого вы спрашиваете в 99,9% случаев понятия не будет иметь что есть какие-то другие стандарты

То ви кажете за стажерів які практику проходять, а джуніор як мінімум повинен знати з яким стандартом він працює, щоб не йти кудись де 98й стандарт.

Напишіть максимально коректну реалізацію класу string

Ага. Он у всіх компіляторах досі її покращують, в конторах типу Facebook пишуть свої реалізації і читають на CppCon лекції по тому, як їх використовувати, а тут ми попросимо це на співбесіді мідла написати.

дійсно, мабуть краще не писати ;)

Писати можна — але не на співбесіді, і не в рамках тестового завдання. А якщо справді є на це «час та натхнення», якщо ти любиш і вмієш писати якісні дженерік велосипеди, ну й бачиш в цьому якусь практичну потребу (наприклад, застосувати на реальному проекті).

То був сарказм. Насправді непогана задачка яка зразу покаже хто ти і що ти.

А я вважаю, що для співбесіди — погана. Саме в такому формулюванні, тіпа, написати повну і «максимально коректну реалізацію» такого громіздкого класу.
Та й що таке «максимально коректна»? Реалізація стрінга без small buffer optimization або підтримки кастомних алокаторів теж буде абсолютно коректною — просто не дуже ефективною в більшості сценаріїв.

задачка на справді з одного боку банальна щоб справді щось показати окрім доволі узагальнених навичок кодування а з іншого боку має 100500 мільонів corner cases скажімо реалізації c_str() або copy-on-write і тоді виходить що «зразу покаже хто ти і що ти» лише для автора такої ліби який пише її у фейсбук та їздить з нею виступати на різні конференції щоб поділитися що він нарив та «показати хто він і що він» а на рівні «співбесіди» це лише повна єрунда яка «зразу покахує хто він і що він» лише стосовно самого «інтервьюера» який вочевидь не розуміє справжнього обсягу та справжньої складності задачі

прямо цитатою одного мужика «для атоса це занадто багато а для графа де ля фер це занадто мало» (к) (тм)

Придумать свой метод сортировки тоже норм задача...для собеседования? На рынке дефицит специалистов — а тут такую муторную хрень спрашивают как будто 30 дипломированных кандидатов на 1 рабочее место. Есть отличный мемас — на первой картинке — шикарный мост самый высотный и инженерно сложный мост в мире подпись — «вопросы на собеседовании», след картинка трухлявый мост из говн@ и палок через двухметровую сточную канаву, подпись — «код на продакшене». Вы компания из Фаанга с ЗП 20к в месяц чтоб такое спрашивать? Выглядит как тролинг от ДОУ.

typedef std::string maksimalno_korrektnaja_stroka;
typedef std::wstring escho_bolee_maksimalno_korrektnaja_stroka;

> 142.Thread-safe гарантії контейнерів в С++? Чому недолік інтерфейсу front() + pop_fornt()?
Недолік в тому, що виклик pop_fornt викличе помилку компіляції

Хз, дуже дискусійні питання.
Більша половина питань, ніяким чином не характеризує кандидата як програміста і ніяк не підкаже вам чи може він/вона виконувати поставлені задачі і як взагалі буде писати код.

Дуже мало практичних запитань і повно сумнівної теорії, яку задрочують аби посамостверджуватись.

Наведені практичні задачі теж не дуже ок.

Статью надо было назвать «как сбить зп программисту»

Или как отбить у него желание работать в такой (жлобской) компании

Так, я не зрозумів, а де відповіді? :)

125.Яка різниця між std::map та std::hashmap?

В том, что std::hashmap не существует, а std::map существует

Гадаю, малось на увазі std::unordered_map .

Звичайно, що малось. Але, формально кажучи, відповідь Владислава абсолютно вірна :)

Правильність відповіді на співбесіді залежить виключно від того, що конкретний інтерв’ювер хоче почути.

Есть древнючий MSVC extension с похожим названием, под windows существует до сих пор вроде бы docs.microsoft.com/...​h-map-class?view=msvc-160

Подписаться на комментарии