Junior
Общие вопросы
-
В чем заключаются основные принципы ООП?
-
Что такое сложность алгоритма?
-
Код работает неправильно. Что делать?
-
Объясните такие структуры данных, как стек и очередь.
-
Какие книги, связанные с программированием, вы читали? Что почерпнули для себя?
-
Что интересного нашли в новых стандартах С++ 17 С++ 20?
-
Что такое таблица ASCII?
-
Что такое Unicode?
-
Что такое паттерны проектирования и для чего их используют?
-
Паттерны Singleton, Strategy, Template-Method, Decorator?
-
Для чего нужны модульные тесты?
-
Как разница между модульными и интеграционными тестами?
-
Что такое TDD?
Метапрограммирование 14. Что такое шаблонный класс и шаблонная функция?
-
Что такое конструкторы? Какие типы вы знаете?
-
Может ли конструктор быть шаблонной функцией?
-
Может ли виртуальная функция быть шаблонной?
-
Что такое инстанциация шаблона?
-
Что такое специализация шаблона? Частичная специализация шаблона?
-
Расскажите об имплементации шаблонных классов в срр-файле.
Препроцессор и компиляция 21. Как проходит процесс компиляции срр-файлов в бинарный файл?
-
Что такое препроцессор?
-
Как работает препроцессор?
-
Какие знаете его команды?
-
Как работает директива include?
-
Как работает директива define?
-
Что именно линкует линкер?
-
Что такое оптимизация компилятора?
-
Что такое флажки компиляции?
-
Как защитить хедер от повторного включения?
-
Что делает директива include?
-
Как работают макросы?
C 33. Как static влияет на глобальные / локальные переменные?
-
Как сonst влияет на переменную?
-
Какие варианты использования extern вы знаете?
-
Какие варианты использования volatile вы знаете?
-
Какие есть битовые операции?
-
Что такое булева алгебра?
-
Расскажите об этапах разработки библиотеки или программы.
-
Что такое алгоритмы сортировки и какие вы знаете?
-
Какие алгоритмы работы со строками знаете?
-
Какие алгоритмы на графах знаете?
-
Где может храниться переменная?
-
Какая разница между calloc и malloc?
-
Для чего используют realloc?
-
Что такое указатель?
-
Какой размер имеет указатель и от чего он зависит?
-
Какие есть операции с указателями?
-
Что такое struct?
-
Как определить размер структур?
-
Что такое выравнивание в структурах?
-
Что такое union?
-
Каков размер union?
C++ / OOP 54. Что такое класс?
-
Какие основные типы данных в C++?
-
Что такое инкапсуляция? Как она реализуется в C++?
-
Какие есть встроенные типы в С++?
-
Что такое enum?
-
Как соотносится класс и объект?
-
Какая разница между структурой и классом?
-
В чем разница между private / protected / public и где они используются?
-
Какие методы класса являются стандартными для класса?
-
Что такое абстрактный класс и зачем он нужен?
-
Сколько занимает памяти объект пустой класс class A{}; ?
-
Что станет с функцией, если к ней добавить ключевое слово static? В контексте члена класса? В контексте метода класса?
-
Какие особенности статических полей класса?
-
В чем особенность константных методов-членов класса?
-
Как изменить поле класса в константном методе класса?
-
Какие методы можно вызвать из константных объектов?
-
Что такое куча и стек? Различия, принцип работы.
-
В чем разница между указателем и ссылкой?
-
Для чего нужен указатель на функцию? Как его объявить?
-
Что будет, если забыть вызвать delete? Когда освободится та память?
-
Что такое умный указатель? Какие умные указатели есть в стандартной библиотеке?
-
Как работает std::unique_ptr?
-
Как работает std::shared_ptr?
-
Расскажите о константности переменной, ссылки, указателя. Что такое константный указатель и указатель на константу? Размер указателя в памяти?
-
Расскажите о передаче аргументов по значению, ссылке и указателю.
-
Расскажите о порядке вычисления аргументов функции.
-
Что случится, если вернуть ссылку на временный объект?
-
Что такое перегрузка функции? Виды перегрузки.
-
Что такое явное и неявное приведение типов в С++? Расскажите о функциях явного приведения типов в C++.
-
Что такое инициализация переменной в if?
-
Что такое ленивые вычисления в С++?
-
Расскажите о циклах for и range-for.
-
Что делает ключевое слово auto? auto-определение return-типа, аргументов функции?
-
Чем отличаются delete и delete[]? Что случится, если вызвать delete у объекта, созданного через new[]?
-
Обработка ошибок в С++. Какие конструкции используют при обработке exception?
-
Можно ли выбрасывать exception из конструктора? Какие поля будут сконструированы, какие поля будут разрушены?
-
Что такое memory leak?
-
Можно ли выбрасывать exception с деструктора?
-
Как отловить деление на 0 в С++?
-
Как работают константные методы?
-
Что такое лямбда-функция в С++? Как получить доступ к переменным во внешней области видимости?
-
Для чего использовать namespace, anonymous namespace?
-
Как вызвать объект с nested namespace?
-
Как работают inline-функции? Может ли такая функция быть рекурсивной?
-
Что такое полиморфизм?
-
Для чего используется наследование?
-
Какие бывают типы наследования?
-
Для чего используют виртуальное наследование?
-
Как можно решить проблему ромбовидного наследования без использования виртуального наследования?
-
Что случится, если класс-наследник передать по значению в функцию, которая принимает базовый класс?
-
Что случится, если унаследоваться от базового класса, не имеющего виртуального конструктора?
-
Что случится, если вызвать переопределенную virtual function из конструктора? Может конструктор быть виртуальным?
-
Может ли иметь имплементацию pure virtual function? Что случится, если вызвать pure virtual function из конструктора?
-
Какие методы генерируются для класса по умолчанию? В каком случае такие методы не будут генерироваться? Как заставить компилятор добавить / удалить эти методы?
-
Как запретить наследовать класс?
-
Каков порядок конструирования и разрушения классов в иерархии? Порядок инициализации полей класса?
-
Какие есть способы инициализации полей класса?
-
Может ли деструктор быть виртуальным?
-
Что делает ключевое слово virtual?
-
Для чего используют виртуальный деструктор?
-
Что такое глубокое копирование?
-
Что такое виртуальные функции и зачем они нужны?
-
Как защитить объект от копирования?
-
Что такое семантика перемещения?
STL / Algorithms 118. Из чего состоит STL?
-
Какие алгоритмы применяли с STL? В чем преимущество использования алгоритмов перед собственноручно написанными функциями?
-
Расскажите о контейнерах стандартной библиотеки vector, list, map, unordered_map.
-
Какие знаете типы итераторов? Чем они отличаются? В каких контейнерах используются?
-
Какая разница между std::set, std::map std::unordered_multimap?
-
Что такое идиома remove-erase?
-
Как получить наименьшее значение типа?
-
Какая разница между std::map и std::hashmap?
-
Как подсчитать количество элементов в std::list?
-
Что такое сложность алгоритма и от чего она зависит?
-
В чем разница между vector и list и в каких случаях их лучше использовать?
Многопоточность 129. Что вам известно о многопоточности?
-
Что общего и отличного в процессах и потоках?
-
Как синхронизировать передачи информации между потоками?
-
Какая разница между мьютекс и семафором?
-
Что такое deadlock?
-
Является ли С++ thread-safe?
-
Что такое race-condition?
-
Как избежать состояния гонки?
-
Что такое атомарная операция?
-
Как работать с std::mutex?
Networking 139. Что такое сокет?
-
Какие операции можно делать с сокетом?
-
Какая информация нужна, чтобы создать сокет?
-
Какие бывают модели сетей?
-
Расскажите об уровнях модели OSI.
-
Расскажите об уровнях модели TCP/IP.
-
Что такое IP-адрес?
-
Для чего используется маска подсети?
-
Какая разница между IPv4 и IPv6?
-
Сколько памяти необходимо для хранения IPv4?
-
Зачем порт?
-
Сколько максимально может быть портов?
-
Какая разница между TCP и UDP?
-
Для чего такой ненадежный UDP-протокол?
OS / Linux 153. Что такое менеджер пакетов?
-
Какие бывают менеджеры пакетов?
-
Какие бывают дистрибутивы Linux?
-
Что такое PID?
-
Для чего используют файловые дескрипторы?
-
Расскажите о стандартных файловых дескрипторах процесса.
-
Что такое Pipe?
-
Что такое Named Pipe?
-
Что такое UID?
-
Расскажите о командах bash.
SCM / CI / CD 163. Какие есть виды SCM?
-
Для чего используют системы контроля версий?
-
Какие есть команды git?
-
Какие этапы во время коммита изменений?
-
Разница между git fetch и git pull?
-
Какие есть этапы решения merge conflict?
Практические задания 169. Посчитайте количество единиц в произвольном числе.
-
Структура по типу «односвязный список». Напишите функцию, которая разворачивает список. То есть первый элемент становится последним, а последний — первым.
-
Напишите реализацию функции int atoi(const char * str); преобразования строки в число.
-
Для структуры типа односвязный список напишите функцию вставки элемента.
-
Реализуйте класс vector.
-
Реализуйте бинарный поиск в массиве.
-
Реализуйте любую сортировку.
-
Реализуйте макрос для сравнения двух строк.
-
Реализуйте реверс строк.
-
Реализуйте перевода числа из строки в int.
-
Реализуйте подсчет слов в предложении.
-
Реализуйте подсчет чисел Фибоначчи.
-
Найдите такие элементы двух массивов, которые встречаются только в каждом из них. Желательно использовать STL.
-
Удалите из unordered_map элементы, которые делятся на 2, и выведите ключи этих элементов.
-
Напишите класс для логирования, который мог бы логировать в консоль или файл.
-
Напишите функцию для определения, является ли указанный год високосным.
-
Напишите функцию для определения, является ли заданное слово палиндромом.
-
Напишите реализацию паттерна Singleton.
-
Напишите реализацию std::vector с операциями: push_back, push_front, pop_back, pop_front, size, clear.
-
Напишите рекурсивный поиск значения в дереве бинарного поиска.
-
Напишите функцию, которая проверяет, является ли дерево сбалансированным.
-
Напишите функцию для поиска уникального элемента в массиве.
Middle
Общие вопросы
-
Какие курсы прошли или книги прочитали за этот год? Чему научились?
-
Что нравится и не нравится в С++? Чего не хватает?
-
Что интересного нашли в новых стандартах С++ 17 С++ 20 (конкретные фичи)?
-
Расскажите о фичах, которые появились в разных версиях языка.
-
Расскажите о модели памяти, которая появилась в стандарте С++ 11.
-
Что такое сериализация? Какие библиотеки знаете?
-
Какие знаете паттерны проектирования?
-
Что такое операционная система? Какие существуют типы по назначению?
-
Назовите основные составляющие и принципы работы ОС Linux в качестве примера системы общего назначения.
10.Что такое SFINAE и PIMPL?
- Назовите порождающие, структурные и поведенческие паттерны программирования и приведите примеры их использования.
Препроцессор и компиляция 12. Расскажите о системах автоматизации билд-процесса.
-
В чем разница между статической и динамической библиотеками?
-
В чем разница между исполнительным файлом и динамичной библиотекой?
-
Что такое DLL hell?
-
Что такое флажки компиляции (fPIC)?
-
В чем разница между дебажной и релизной сборками?
-
Что нужно для использования сторонней библиотеки?
-
Что такое internal linkage?
C 20. Что будет, если дважды вызвать free?
-
Как происходит вызов функции?
-
Как происходит передача параметров в функцию?
-
Как обрабатывается константность переменных?
-
Что означает ключевое слово inline?
-
Для чего используют выравнивания, можно ли его контролировать?
-
Расскажите о битовых полях.
-
Для чего нужен extern «C»?
-
Что будет, если в двух файлах сделать функцию с одинаковым именем и параметрами? На каком этапе возникнет ошибка?
-
Как экспортировать / импортировать функции из динамической библиотеки?
-
Какая разница между С-style приведением типов и C++ приведением?
C++ 31. Что такое явное и неявное приведение типов в С++? Зачем делать explicit-конструктор?
-
Что такое Uniform initialization? Aggregate initialization?
-
Что такое Reference to temporary object? Как продлить время жизни временного объекта?
-
Что такое делегирующий конструктор?
-
Что такое список инициализации?
-
Каков порядок инициализации полей класса? Что случится, если конструктор инициализирует поля в другом порядке?
-
Что случится, если инициализировать поле другим полем?
-
Что такое copy elision? Сколько раз будет вызван конструктор / деструктор у объекта, который возвращают по значению?
-
Что такое move-семантика?
-
В каких случаях будет сгенерирован конструктор копирования?
-
Чем отличается конструктор копирования от оператора присваивания?
-
При каких условиях в конструкторе можно выбросить exception?
-
Что такое конструктор по умолчанию? Для чего нужны default и delete?
-
Чем отличается интерфейс от абстрактного класса?
-
Какие виды полиморфизма в С++?
-
Как реализовано наследование в большинстве компиляторов?
-
Множественное наследование: за и против.
-
Виртуальное наследование и порядок конструирования.
-
Зачем использовать override?
-
Какие есть правила вывода типа при использовании auto? В каких случаях auto может привести к нежелательному копирования объекта?
-
Расскажите обо всех возможных способах использования ключевого слова static в С++. Что такое static initialization order fiasco?
-
Что делает вызов throw; в блоке catch?
-
Чем отличается constexpr от const?
-
Что такое const correctness?
-
В каком случае можно использовать const_cast?
-
Что такое ключевое слово mutable и когда его нужно использовать?
-
Что такое ключевое слово friend и когда его нужно использовать?
-
Расскажите о лямбда-выражениях в С++ и доступе к переменным во внешней области видимости, захвате this в лямбду и времени жизни лямбды и захваченных переменных.
-
Что такое функтор? Напишите пример.
-
Что такое специализация шаблона?
-
Что такое dynamic_cast и run-time type identification?
-
Что такое exception? Как бросить и поймать?
-
Что будет, если бросить exception из конструктора? А из деструктора?
-
Что будет, если не поймать exception?
-
Что произойдет, если exception выйдет за пределы блока noexcept функции?
-
Для чего можно использовать приватное наследование?
-
Что такое контракт функции?
-
Что такое vptr и vtable?
-
Где содержится vptr?
-
Где содержится vtable?
-
Какая разница между overload и override?
-
Как компилятор различает члены класса и обычные переменные в функциях?
-
Зачем используют exceptions?
-
Что такое блоки try-throw-catch?
-
Расскажите о логике catch-блоков.
-
Что такое move constructor?
-
В чем разница между константным методом и неконстантным?
-
Что такое О-нотация и как определить сложность любого алгоритма?
-
Что такое таблица виртуальных методов?
-
Какие функции класса автоматически генерирует компилятор, если их определить?
-
Что такое выравнивание данных?
-
Что такое exception?
-
Какие есть стандартные контейнеры и на основе каких структур они построены?
-
Что такое Undefined behavior? Приведите примеры.
-
Как определить, что в программе есть memory leak?
-
Для чего нужен std::make_shared? Чем он лучше создания std::shared_ptr через конструктор?
-
Что будет, если выделить один объем памяти, а записать больше?
-
Что такое переполнение stack?
Паттерны проектирования 89. Зачем нужны паттерны? Какие типы паттернов различают?
-
Недостатки паттерна Singleton. Когда он уместен?
-
Преимущества и недостатки PIMPL.
-
В чем разница между паттерн-фабрикой и фабричным методом? Когда использовать какой из них?
-
Что такое паттерн Observer?
-
Как контролировать состояние программы? Машину состояний? Паттерн состояние?
-
Что такое паттерн Visitor?
Метапрограммирование 96. Какие есть правила вывода типа в шаблоне?
-
Чем отличается using от typedef?
-
Сколько памяти занимает произвольная структура? Что такое выравнивание объекта?
-
Почему пустая структура занимает 1 байт? Какая минимальная единица адресации в С++?
OOP / OOD 100. Что такое SOLID? Что означает каждый из этих принципов?
-
Расскажите о паттернах проектирования.
-
Что такое Dependency Injection? Приведите пример.
-
Какие преимущества и недостатки функционального подхода?
-
Что такое принцип RAII?
-
Что такое принцип DRY?
-
Что такое принцип KISS?
-
Какие преимущества композиции перед наследованием?
STL / Algorithms 108. Какие алгоритмы с STL использовали? Каких не хватает?
-
Какими особенностями должен обладать класс, чтобы он был итератором?
-
Какие бывают итераторы?
-
Расскажите о инвалидации итераторов.
-
Как оптимизировать удаление элемента из середины вектора?
-
Как реализован vector?
-
Как реализован list?
-
Как расширить STL-контейнеры?
-
Какие есть алгоритмы в STL?
-
В чем разница между vector, deque, list, set e STL?
-
Когда надо использовать map? Когда — unordered_map? Какова сложность поиска и вставки в этих контейнерах?
-
Как проверить, есть ли в контейнере элементы? Почему вызов container.size() является плохой практикой?
-
Что такое exception safety guarantee? Какую exception safety guarantee имеют STL-контейнеры?
-
Расскажите о типах умных указателей и подсчете ссылок в них.
Многопоточность 122. Является ли С++ thread-safe?
-
В чем разница между многопоточностью и асинхронностью?
-
Что такое многопоточность? Какую функциональность предоставляет С++ для разработки многопоточных приложений? Каковы основные проблемы многопоточных приложений?
-
Как передать информацию между несколькими процессами?
-
Как синхронизировать между собой несколько процессов?
-
Какие есть особенности работы с shared memory?
-
Как работает spinlock?
-
Какие вы знаете особенности использования recursive mutex?
-
Расскажите о read-write mutex.
-
Что такое race-condition? Взаимная блокировка? Что такое критическая секция?
-
Какие избежать состояния гонки?
-
Чем отличается мьютекс от семафора?
-
Какие примитивы синхронизации реализованы в C++? Преимущества lock_guard?
-
Что случится, если exception выйдет за пределы потока? Какие инструменты есть для безопасной асинхронности в С++?
-
Чем отличается std::launch::async от std::launch::deferred?
-
Что такое атомарная операция? std::atomic?
-
Как работать с std::conditional_variable?
-
Как создать поток с помощью std::thread?
-
На сколько потоков лучше разбить задачу? От чего это зависит?
-
Как работать с std::async?
-
Thread-safe гарантии контейнеров в С++. В чем недостаток интерфейса front() + pop_fornt()?
Networking 143. Что такое TCP handshake?
-
В чем разница между TCP и UDP?
-
Расскажите о протоколах верхнего уровня.
-
В чем разница между HTTP и HTTPS?
-
Расскажите о SSL/TLS handshake.
SCM / CI / CD 148. Расскажите о процессах CI.
-
Как отредактировать коммит?
-
Расскажите об интерактивном rebase.
-
Какие могут быть способы дебаггинга кода?
-
Для чего нужны Unit test? Чем они отличаются от Functional Test?
-
Как тестировать код? Какой фреймворк используете?
-
Какие библиотеки знаете для написания тестов?
-
Что такое mock?
-
Сколько тестов нужно написать на одну функцию?
-
Что такое побочный эффект, идемпотентность и чистые функции?
-
Что такое контейнеризация и в чем ее преимущества и недостатки? Что такое Docker или иной инструмент контейнеризации?
-
Что такое CI/CD и какие преимущества дает разработчику?
-
Каковы принципы итеративных методологий?
-
Какие преимущества и недостатки code-convention?
Практические задания 162. Напишите максимально корректную реализацию класса string с конструктором копирования и оператором присваивания.
-
Напишите реализацию очереди.
-
Реализуйте функцию, которая за один проход найдет уникальный элемент в контейнере.
-
Напишите thread-safe пул потоков.
-
Напишите игру «Жизнь» в ООП-стиле.
-
Напишите класс, который получает из базы список товаров по фильтру и показывает на консоли. Напишите тесты для него.
-
Любая задача на написание кода, чтобы проверить умение проектировать интерфейсы и придерживаться принципов SOLID, DRY, KISS.
-
Напишите свою реализацию std::atomic.
-
Напишите программу для анализа графов: нахождение циклов, deadlock-состояний, циклов, недоступных состояний.
-
Напишите программу, проверяющую, что в системе запущен только один ее экземпляр. Решение должно быть cross-platform.
-
Проанализируйте C++ код с точки зрения качества: выявить потенциальные memory leak, нерациональное использование STL-контейнеров, алгоритмов, неоптимальные конструкции и тому подобное.
-
Напишите код для решения судоку.
-
Напишите код, который найдет зацикливание в односвязном списке.
Senior
Общие вопросы 1.Как вы понимаете SOLID?
-
Как разработать систему плагинов на С++?
-
Что такое RPC? Какие библиотеки знаете?
-
На что обращать внимание при проведении code review?
-
Какие есть проблемы при написании кроссплатформенного кода? На что обращать внимание?
-
Что делать, если код работает медленно?
-
Какие есть способы и методология измерения быстродействия кода? Как можно устранить / уменьшить влияние замеров на быстродействие?
8.Что такое SFINAE? Для чего используется?
-
Что такое метапрограммирование? С помощью чего реализуется на С++?
-
Как использовать variadic templates?
-
Как тестировать закрытые методы?
-
Как считать покрытие тестами? Нужно ли это делать?
13.Что такое cache miss и как это выявить?
-
Что такое SIMD-инструкции? Каковы необходимые условия и способы их использования?
-
Что такое покрытие кода и как оно обеспечивается?
-
Опишите принципы lock-free структур данных и свой опыт работы с ними.
Препроцессор и компиляция 17. Расскажите о построении билд-системы.
-
Как работать с билд-системами: Make, CMake.
-
Как интегрировать third-party в проект?
-
Что такое барьеры памяти?
-
Расскажите о работе с сырыми указателями и ручном управлении памятью.
-
Что такое статический анализатор кода? Какие знаете?
-
Что такое динамический анализатор кода? Какие знаете?
-
Проект медленно собирается. Как можно ускорить?
C / C++ 25. Расскажите об использовании realloc в контейнерах.
-
Как работают шаблоны?
-
Расскажите о специализации шаблонов.
-
Как работает RTTI?
-
Можно ли использовать exception в конструкторе / деструкторе?
-
Что такое rvalue и lvalue?
-
В чем особенности контейнеров std::set, std::map, std::unordered_map, std::hash?
-
Что такое placement new? Для чего используют? Как сделать placement delete?
-
Как размещается в памяти класс с множественным наследованием и виртуальными функциями?
-
Как работают точки останова?
-
Что такое уязвимости? Механизм их работы?
-
Как написать собственный std::shared_ptr?
-
Что такое curiously recurring template pattern?
-
Опишите назначение и принцип работы std::shared_ptr, std::unique_ptr и std::weak_ptr.
-
Каково назначение и различия использования std::variant и std::any?
-
Какие улучшения получил std::search в С++ 17?
-
Что такое copy elision и когда становится возможным? Какие особенности для разных стандартов?
-
Что такое Return Value Optimization?
OOP / OOD 43. Поясните принципы SOLID.
-
Поясните принципы KISS.
-
Поясните принципы YAGNI.
-
Какие есть подходы к оптимизации кода?
-
На что стоит обращать внимание при code review?
-
Какие есть паттерны проектирования? Почему не советуют использовать Singleton?
-
Что такое статический полиморфизм?
STL / Algorithms 50. Когда std::vector может использовать std::move?
-
Расскажите о своем любимом алгоритме поиска.
-
Что такое lock-free и wait-free алгоритмы? В чем их отличия и способы реализации?
-
Опишите назначения execution policy для параллельных алгоритмов.
Многопоточность 54. Расскажите о построении API, рассчитанных на многопоточное использование.
-
В чем разница между kernel-level и user-level потоками?
-
Что такое coroutine?
-
Что делает спецификатор thread_local?
-
Как реализовать синхронизацию в задаче producer-consumer?
-
Как синхронизироваться между различными процессами?
SCM / CI / CD 60. Расскажите о настройке процесса менеджмента ветвей репозитория.
- Расскажите о стратегии ветвления.
Практические задания 62. Напишите базовую реализацию std::shared_ptr.
-
Реализуйте алгоритм сортировки.
-
Реализуйте алгоритм хеширования.
-
Реализуйте shared_ptr с расширением для weak_ptr.
-
Реализуйте простейший producer-consumer, используя условные переменные.
-
Опишите как можно подробнее, что происходит в системе, когда приложение делает сетевой запрос.
-
Детально описать дизайн программного компонента, например, системы голосования — учесть при этом высокую нагрузку и сделать его расширяемым и отказоустойчивым.