Библиотека собеса по C++ | вопросы с собеседований
4.61K subscribers
404 photos
2 videos
184 links
Вопросы с собеседований по C++ и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/9ccf302b

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Какую проблему решает пространство имён?

Пространство имен — это идентификатор, предоставляющий несколько библиотек. Используется для устранения конфликтов имен, когда имя связано с двумя или более библиотеками. Включает внешние объявления библиотеки с уникальными пространствами имен, что исключает возможность конфликта.
👍9
Как проверить, содержит ли строка только буквы в C++?

Мы можем использовать регулярное выражение, чтобы проверить, содержит ли строка только буквы.

Начиная с C++11, мы можем использовать std::regex_match для сопоставления последовательности с регулярным выражением.
🥰9👍3
Бывает такое, что оператор new не выделяет память?

Да, бывает, когда new передаётся указатель на уже выделенную память (например, с помощью malloc). Это называется placement new. И оператор new без изменения возвращает второй параметр — указатель (void* operator new(std::size_t, void*)). Это используется для создания объектов в выделенном "хранилище" или после malloc.

Важно! В этом случае деструктор нужно вызывать самостоятельно!
👍8🔥1
Зачем нужен count_if?

Алгоритм count_if выполняет подсчет количества выполнений условия в последовательности.
👍4🥰4🔥1
Что такое сложность алгоритма и от чего она зависит?

Сложность алгоритма — это количественная характеристика его эффективности, которая показывает, как зависят затраты ресурсов (времени, памяти) от размера входных данных.

Сложность зависит от:
— Объема операций, которые алгоритм выполняет при обработке данных.
— Количества итераций циклов, рекурсивных вызовов.
— Зависимости числа операций от размера входных данных.
— Операций внутри вложенных циклов и структур.

Чем быстрее растёт сложность функции с ростом входных данных, тем менее эффективен алгоритм.
👍9
Что такое чисто виртуальный метод и абстрактный класс?

Чисто виртуальный метод — это метод, у которого отсутствует реализация. Абстрактный класс — это класс имеющий хотя бы один чисто виртуальный метод. Как следствие, экземпляр подобного класса не может быть создан т.к. отсутствует реализация виртуального метода.
#код
👍11👎2
Для чего нужен std::string::at?

std::string::at можно использовать для извлечения символов по символам из заданной строки. Подробнее ознакомиться можно здесь.
👍62
Отличия между указателем и массивом?

Массивы создаются в статической памяти или в стеке. Указатели могут указывать на любой тип в памяти. В массивах можно изменять содержимое, а по указателю не всегда.
👍10😁3👎2
В чем отличие overload и overried?

Ответ:
overload — это перегрузка, два одинаковых имени функций с разными принимаемыми аргументами, override — это переопределение (с помощью таблицы виртуальных функций), изменение поведения функции в выведенном классе (с помощью механизма виртуальных функций).
🤔9👍31
Могут ли ссылки отсылать к недопустимому местоположению в памяти в C++?

В C++ ссылки более безопасны, чем указатели, потому что ссылки должны быть инициализированы, и их нельзя изменить, чтобы ссылаться на что-то другое после инициализации. Но есть исключения, когда у нас могут быть недействительные ссылки.
Но есть пара исключений, когда у нас могут быть недействительные ссылки. Они приведены на картинке.
👍83🌚1
Прямой эфир «Технический этап собеседования: разбор задач и ошибок»

🕐 Когда?

29 августа в 19:00 мск

🗣️ Кто спикер?

Алексей Бочкарев | Engineering Manager at FAANG

🦥 Где регистрироваться?

Здесь – https://proglib.io/w/5e90c859

🌝 О чем поговорим?

Комбинаторика и комбинаторные числа: определение и практические примеры

– Основные идеи динамического программирования

Идеи рекурсии и примеры, включая inorder обход двоичного дерева

Графы и способы их представления

– Примеры различных типов асимптотической сложности

Распространенные ошибки в коде, как избегать обращения за границы массива, разыменования нулевого указателя, некорректная логика

☄️ Регистрируйтесь, будет интересно – https://proglib.io/w/5e90c859
Что дают разные модификаторы при наследовании?

Ответ:
Изменяют зону видимости членов базового класса.
При private наследовании protected и public члены становятся private. При protected наследовании public становится protected. А при public ничего не изменяется.
👍8🔥3😁1
Для чего нужен алгоритм generate?

Используется для генерации чисел на основе функции генератора, а затем присваивает эти значения элементам в контейнере в диапазоне [first, last).
👍10
К чему приводит удаление указателя NULL?

Удаление указателя NULL не приводит к каким-либо изменениям и ошибкам.
👍10
Как сгенерировать pure virtual function call исключение?

Нужно вызвать чисто виртуальный метод в конструкторе родительского класса, то есть до создания дочернего, в котором этот метод реализован. Так как современный компилятор не даст это сделать напрямую, то нужно будет использовать промежуточный метод.
👍5🔥1
Когда следует использовать виртуальное наследование?

Хотя идеально вообще избегать виртуального наследования (вы должны знать, как будет использоваться ваш класс), все же важно иметь четкое представление о том, как работает виртуальное наследование:

Итак, когда у вас есть класс (класс A), который наследуется от двух родителей (B и C), оба из которых имеют общего родителя (класс D), как показано на картинке. Если вы не используете виртуальное наследование в этом случае, вы получите две копии D в классе A: одну из B и одну из C. Чтобы это исправить, вам нужно изменить объявления классов C и B на виртуальные:
class C: virtual public D {
};

class B: virtual public D {
};
👍19
Что быстрее: постфиксные инкрементные операторы или префиксные? Чем отличается их сигнатура?

Префиксные операторы быстрее. В постфиксных операторах производится дополнительная операция сохранения предыдущего состояния объекта, а затем только увеличение на 1, а в префиксном операторе после инкрементирования объекта, сразу возвращается ссылка объект.

Сигнатура их отличается фиктивным параметром int у постфиксного оператора.
👍13
Что такое хеш-функция? Объясните на примере

Хеш-функция — это функция, которая принимает на вход некоторые данные и возвращает фиксированный размер выходных данных, называемый хешем. Такие функции широко используются в C++ для решения задач с поиском и индексированием данных. Они позволяют быстро находить элементы в массивах или хранилищах данных.

Рассмотрим применение на примере кода выше:
Мы создаем объект хеш-функции для строки и используем его для вычисления хеша для строки "Hello, world!". Результатом выполнения программы будет вывод на экран хеш-значения для этой строки.
👍5
Что такое void указатель? Можно ли разыменовать указатель void, не зная его типа?

void указатель — это указатель, который можно использовать для указания на любые данные любого произвольного типа. Указатель void может быть разыменован только после явного приведения. Например:
int a = 5;
void *b = &a;
printf(“%d\n”, *((int*)b));
👍152