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

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

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

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

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
⚙️ Почему нужно использовать extern «C» в коде?

Ключевое слово extern «C» используется для указания компилятору C++ на использование соглашения о вызовах функций, аналогичного тому, что используется в языке C. Это необходимо, потому что ABI (Application Binary Interface) C++ отличается от ABI C

Ключевое слово extern «C» сообщает компилятору C++, что функции, объявленные внутри этого блока, должны использовать соглашение о вызове, аналогичное C. Это гарантирует, что компилятор C++ не будет применять к ним особенности C++ ABI, и они будут корректно вызываться из C++ кода
⚙️ Зачем нужен std:string_view?

std::string_view — легковесный способ работы с неизменяемыми последовательностями символов, представленными строками, без копирования их данных

std::string_view — это просто пара значений, указатель на последовательность и размер

Так как std::string_view не является владельцем данных, то если строка исчезнет, то никто не информирует, что std::string_view перестал быть валидным

‼️ Основная идея — это дёшево хранить и передавать строки
🔮 Что такое decltype?

decltype — это оператор в C++, позволяющий вам получить тип выражения во время компиляции. Это означает, что вы можете использовать decltype, чтобы определить тип переменной, неявно указывая его явным образом
🧨 Почему decltype((var)) это ссылка?

Если a — это переменная, то (a) — это уже lvalue выражение, поэтому decltype((a)) и порождает ссылку

Здесь нету выражения как такового, выведение производится просто из грамматики (синтаксиса определения выражения)
🔮 Что такое std::apply?

std::apply — функция, введенная в C++17. Она принимает кортеж и callable-объект и возвращает результат выполнения функции
🧨 Что такое семафор?

Семафор (semaphore) — примитив синхронизации, основанный на счётчике, который поддерживает атомарные операции: инкремент и декремент, при этом операция уменьшения для нулевого значения счётчика является блокирующей

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

В основном служат для построения более сложных механизмов синхронизации
🧨 Что такое type_traits?

type_traits — это библиотека, которая предоставляет удобные средства для работы с типами во время компиляции. Она позволяет нам проверять и извлекать свойства типов, такие как const-квалификаторы, ссылочность, и многое другое

Документация
cppreference
microsoft
🔮 Что такое std::unique_lock?

std::unique_lock — это класс из стандартной библиотеки, который предоставляет механизм блокировки мьютекса (mutex) для обеспечения безопасности при доступе к общим данным из нескольких потоков

У std::unique_lock есть альтернатива — это std::lock_guard. Их главное отличие в том, что std::unique_lock можно заблокировать и разблокировать, а std::lock_guard разблокируется только при уничтожении
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

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

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
😏 Зачем нужен виртуальный деструктор?

Виртуальные деструктор нужен только когда мы пользуемся наследованием. Он необходим в первую очередь, чтобы не было утечки памяти (memory leaks)

Если ключевое слово virtual к деструктору в предке, то и во всех потомках он тоже будет виртуальным

Если есть хотя бы одна виртуальная функция в классе, то деструктор тоже нужно сделать виртуальным
🔮 Статья об constexpr, consteval и constinit

Вышла небольшая обзорная статья о том, как constexpr, consteval, и constinit позволяют реализовывать компиляцию на этапе выполнения. Компиляция на этапе выполнения позволяет ускорить выполнение кода за счет выполнения расчетов на этапе компиляции, а не в рантайме

👉 Ссылка
-35% на полугодовой курс по алгоритмам!

🌟 Алгоритмы и структуры данных🌟

23 390 рублей 35 990 рублей до 1 апреля

Курс для тех, кто хочет научиться работать с алгоритмами, подготовиться к собеседованию крупную IT-компанию и начать брать более сложные проекты.

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

Вас ждут:

– 150 практических заданий и 47 видеолекций

– бессрочный доступ к обучению

– поддержка преподавателя в чате

А также очень харизматичный спикер из Яндекса 🙌🏻
💡 В чем различия между delete и delete[]?

delete уничтожает объекты, которые были созданы при помощи new()

delete[] уничтожает объекты, которые были созданы при помощи new[](). Также будут вызваны деструкторы для всех элементов


‼️ Если операторы использовать не правильно, то будет undefined behavior😜
⚡️Proglib запускает каналы про нейросети

По каждому направлению отдельно! А именно:

Библиотека нейрозвука — здесь все, связанное с транскрибацией, синтезом речи, ИИ-музыкой
Библиотека нейротекста — классические ИИ-помощники вроде ChatGPT, Gemini, Bing
Библиотека нейровидео — здесь пишем про нашумевшую Sora AI, а также про Runway ML, дипфейки и другие видеотехнологии
Библиотека нейрокартинок — генерируем изображения и рассказываем про Midjourney, DALL-E, Stable Diffusion
⭐️Библиотека робототехники и беспилотников — наконец, тут мы рассказываем не столько про ИИ, сколько про роботов, беспилотные технологии и интернет вещей

И все это — максимально подробно: с пошаговыми инструкциями, промтами, инструментами и лайфхаками.

Подписывайтесь!
🧨 Spinlock

Spinlock (спин-блокировка, циклическая-блокировка) — по своей сути просто бесконечный цикл с проверкой для выхода. Необходим для синхронизации доступа к общему ресурсу в многопоточных приложениях


Spinlock даёт максимальную нагрузку на CPU. Так как по задумке он выполняется очень ограниченное время, то это не заметно

Значительно дешевле mutex
🧨 Трюк с битовыми операциями

Значения двух переменных можно поменять местами без дополнительной переменной
с помощью битовой операции XOR (исключающее или)

Если к числу a применить XOR b два раза, то получим тоже самое число а. На этом и строится способ обмена переменными
🔮 Сколько памяти занимает структура?

Ответ
Размер всех членов + Выравнивание (по умолчанию 4 байта) + Размер указателя на таблицу виртуальных методов + Указатели на классы предков (Размер указателя * количество предков)