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

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

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

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Ответьте на 3 вопроса, чтобы получить демо-доступ к курсу «Алгоритмы и структуры данных»

⚡️Получить демо, ответив на 3 вопроса – https://proglib.io/w/53cd405b

В бесплатной части вас ждут:

1. Лекция «Производительность алгоритмов» от руководителя разработки Яндекс.Самокатов

2. Лекция «Итеративные сортировки и линейные сортировки» от аспирант департамента искусственного интеллекта ВШЭ

3. Практические задания после лекций

4. Ссылки на дополнительные материалы для самостоятельного изучения

Переходите и начинайте учиться уже сегодня!
Что такое SIMD?

SIMD (Single Instruction, Multiple Data) инструкции представляют собой набор команд и возможностей, предоставляемых аппаратным средством процессора, которые позволяют выполнять одну операцию над несколькими элементами данных одновременно.

Это используется для параллельной обработки данных и повышения производительности в различных приложениях, включая обработку изображений, звука, видео, математические вычисления и многие другие.
Что такое std::tie?

std::tie — это функция, которая создает кортеж ссылок на lvalue из своих аргументов или экземпляров std::ignore.

Она может использоваться для распаковки кортежей или пары значений в отдельные переменные. Например, если у вас есть функция, которая возвращает std::pair или std::tuple, вы можете использовать std::tie, чтобы присвоить значения этого кортежа отдельным переменным.

В этом примере мы используем std::tie для распаковки результата вызова set_of_s.insert(value) в две переменные: итератор iter и логическую переменную inserted.
Это позволяет нам проверить, было ли значение успешно вставлено в набор.
Что такое флажки компиляции?

Флажки компиляции — это специальные опции, которые можно указать при компиляции кода, чтобы включить или отключить определенные возможности языка или библиотек.

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

Например:
— std=c++11: включает поддержку стандарта C++11.
— O2: включает оптимизацию кода на уровне O2.
— g: добавляет отладочную информацию в скомпилированный файл.
— Wall: включает предупреждения обо всех возможных ошибках.
— DDEBUG: определяет макрос DEBUG, чтобы можно было использовать условную компиляцию.
— I: добавляет директорию по указанному пути в поиск заголовочных файлов.
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Что такое SIMD-инструкции?

SIMD-инструкции — это специальные команды процессора, которые работают с векторными регистрами и могут выполнять одну операцию над несколькими элементами данных параллельно.

Например, при сложении двух векторов из 4 float чисел, вместо 4 инструкций сложения, с SIMD можно выполнить одну команду, которая сложит эти вектора за одну операцию.

Основные преимущества SIMD:
— Повышение производительности за счет параллельных вычислений.
— Эффективное использование пропускной способности процессора.
— Уменьшение количества инструкций за счет векторизации.
— Оптимизация алгоритмов обработки массивов, матриц, фильтрации, графики.
Как работают константные методы?

Константные методы — это методы, которые помечены модификатором final. Это означает, что тело метода не может быть переопределено в подклассах.

Константные методы часто используются, когда нужно предоставить клиентам неизменяемую реализацию некоторой функциональности. Например, утилитные классы часто содержат константные методы.

Основные характеристики константных методов:
— Могут вызываться на экземплярах класса, так как не являются статическими.
— Может обращаться к полям класса, даже нестатическим, т. к. вызывается на объекте класса.
— Может вызывать другие методы класса, в том числе не константные.
— Сигнатура константного метода в подклассе должна полностью совпадать с сигнатурой в суперклассе, иначе это будет перегрузка, а не переопределение.
Что делает данный код?

Правильный ответ: ничего не делает.

int main() // Функция main без аргументов.
{
[] // Объявление лямбда-функции без списка захвата...
() // ... с пустым списком аргументов ...
{} // ... и пустым телом, ...
(); // ... которая тут же вызывается.
}
Алгоритм compare

Если вызывающая строка меньше строки s, то функция возвращает -1 (отрицательное значение). Если вызывающая строка больше строки s, функция возвращает 1 (положительное значение). Если две строки равны, функция возвращает 0.
🧠Чему вы бы хотели научиться?

Расскажите нам о ваших пожеланиях: какие навыки вы хотели бы прокачать в ближайшее время или какую профессию хотели бы приобрести?

За прохождение опроса вы получите промокод на скидку 15% на все наши курсы до конца 2024 года.

👉Опрос по ссылке👈
Создайте класс Rectangle с двумя закрытыми членами данных для длины и ширины. Добавьте конструктор по умолчанию, конструктор с параметрами и методы для расчета площади и периметра прямоугольника. Затем напишите функцию main, в которой создается объект класса Rectangle, используя динамическое выделение памяти, и выводятся площадь и периметр прямоугольника.

1) Класс Rectangle: Класс имеет два закрытых члена для длины и ширины. Он включает в себя конструктор по умолчанию и конструктор с параметрами.
2) Методы area и perimeter: Эти методы вычисляют площадь и периметр прямоугольника соответственно.

3) Динамическое Выделение Памяти: В функции main создается объект rect класса Rectangle с использованием оператора new. Это позволяет объекту сохранять свое состояние во время выполнения программы до явного освобождения памяти.
4) Вывод и Освобождение Памяти: Выводятся площадь и периметр, после чего освобождается память, выделенная для rect, с помощью оператора delete.
Метод find_last_not_of

Ищет в данной строке последнее появление символа, отличного от символов строки str. Способы вызова и возвращаемое значение аналогичны методу find_first_of.
libpq

libpq — это библиотека, предоставляющая интерфейс для работы с PostgreSQL на уровне языка C. Для использования libpq в C++ вы можете взаимодействовать с библиотекой так, как если бы это был код на C, но также можно воспользоваться некоторыми возможностями C++, чтобы упростить код.

Обратите внимание, что обработка ошибок является важной частью кода при работе с базой данных. Этот пример просто демонстрирует основные шаги, и в реальном приложении вам, вероятно, потребуется более тщательная обработка ошибок.
insert_or_assign

insert_or_assign — это функция из стандартной библиотеки языка C++, добавленная в C++17. Она используется для вставки элемента в ассоциативный контейнер (например, std::map) или обновления значения элемента, если ключ уже существует.

Преимущества перед operator[]:

— Более безопасна, так как проверяет существование элемента.
— Избавляет от лишнего кода для проверки наличия ключа.
Функция value_or

Функция value_or используется для получения значения из объекта типа std::optional.

Класс std::optional позволяет хранить значение или отсутствие значения.
Чтобы получить это значение из optional, обычно используют метод value(). Но если значения нет, это выбросит исключение.

Чтобы избежать исключения при отсутствии значения, можно воспользоваться функцией value_or. Она принимает объект std::optional и значение по умолчанию.
Если в optional есть значение — возвращается оно. Если значения нет — возвращается значение по умолчанию.
В чем разница между статической и динамической библиотеками?

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

Статические библиотеки:
— Имеют расширение «.lib» (на платформе Windows) или «.a» (на платформах, таких как Linux).
— Код из статических библиотек копируется в исполняемый файл (или в другую статическую библиотеку) в момент компиляции. Это означает, что код библиотеки становится частью исполняемого файла.
Преимущества: Приложение не зависит от внешних библиотек во время выполнения, что делает его более портативным и проще в распространении.
Недостатки: Увеличивает размер исполняемого файла, и любые изменения в коде библиотеки требуют повторной компиляции всего приложения.

Динамические библиотеки:
— Имеют расширение «.dll» (на платформе Windows) или «.so» (на платформах, таких как Linux).
— Код из динамической библиотеки загружается в память во время выполнения программы. Это означает, что библиотека остается внешней и может быть загружена и выгружена во время выполнения.
Преимущества: Экономия памяти, так как код библиотеки не дублируется в каждом исполняемом файле. Легче обновлять библиотеки без перекомпиляции всего приложения.
Недостатки: Приложение зависит от наличия соответствующих динамических библиотек в системе во время выполнения. Требуется управление версиями и обработка конфликтов.
-35% на курс по алгоритмам

🎄 Новый год начинается с подарков, а хороший подарок для себя — новые знания со скидкой 35%!

🌟«Алгоритмы и структуры данных» — 23 390 ₽ (вместо 35 990 ₽)

Полугодовая программа от преподавателей МФТИ и НИУ ВШЭ, которая включает в себя все необходимые знания по алгоритмам для работы.

Самое ценное — это развернутая обратная связь по всем вашим домашним заданиям, а также ссылки на полезные дополнительные материалы.

У вас не будет шансов не усвоить какие-то темы курса👌

🔥 Переходите и активируйте вводные занятия курсаhttps://proglib.io/w/ff97c30a
libusb

libusb — это библиотека, предназначенная для взаимодействия с устройствами через USB. Она предоставляет программный интерфейс для работы с USB-устройствами на низком уровне. Если вы хотите использовать libusb в своем проекте на C++, вам нужно будет включить соответствующие заголовочные файлы и использовать функции из библиотеки.
Как запретить наследовать класс?

Чтобы запретить наследование класса в C++, вы можете объявить класс как final.

Ключевое слово final указывает компилятору, что класс не может быть использован в качестве базового класса для других классов. Если попытаться наследовать от класса, объявленного как final, компилятор выдаст ошибку.

class Base final {
// ...
};

class Derived : public Base {
// ...
};
// Ошибка компиляции: класс Base объявлен как final