Общие вопросы

Различия разных стандартов?

Что такое таблица ASCII?

ASCII — это таблица кодировки символов, в которой каждой букве, числу или знаку соответствует определенное число. В стандартной таблице ASCII 128 символов, пронумерованных от 0 до 127.

Таблица ASCII создавалась для обмена информацией по телетайпу. В набор были включены непечатаемые символы, используемые как команды для управления телетайпом. Аналогичные команды применялись и в других докомпьютерных средствах обмена сообщениями (азбука Морзе, семафорная азбука), учитывая специфику устройства.

Что такое Unicode?

Юнико́д — стандарт кодирования символов, включающий в себя знаки почти всех письменных языков мира.

ASCII encodes symbols, digits, letters, etc., whereas Unicode encodes special texts from different languages, letters, symbols, etc. It can be said that ASCII is a subset of the Unicode encoding scheme.

Метапрограммирование

Что такое шаблонный класс и шаблонная функция?

Механизм шаблонов в языке С++ позволяет решать проблему унификации алгоритма для различных типов: нет необходимости писать различные функции для целочисленных, действительных или пользовательских типов – достаточно составить обобщенный алгоритм, не зависящий от типа данных, основывающийся только на общих свойствах. Например, алгоритм сортировки может работать как с целыми числами, так и с объектами типа «автомобиль».

Существуют шаблоны функций и шаблоны классов.

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

Также нельзя перегружать функции по типу возвращаемого значения.

Шаблоны классов -– обобщенное описание пользовательского типа, в котором могут быть параметризованы атрибуты и операции типа. Представляют собой конструкции, по которым могут быть сгенерированы действительные классы путём подстановки вместо параметров конкретных аргументов.

Последовательные контейнеры

  • std::array
  • std::list
  • std::vector
  • std::forward_list
  • std::deque
  • std::string
  • iterators

Ассоциативные контейнеры

Ассоциативные контейнеры сопоставляют ключам некоторые значения.

  • std::map

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. В чем разница между указателем и ссылкой?

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. Напишить функцию для поиска уникального элемента в массиве.


Reference:

400+ вопросов на собеседовании по С++

Когда пройду все блоки, то:

Типичные вопросы на собеседовании по C++

Популярные вопросы на собеседовании по C++ и ответы на них