gram news
Аватар канала C/C++ | Вопросы собесов

C/C++ | Вопросы собесов

@easy_c_plus

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

4,190подписчиков

Открыть канал

Последние посты

  • C/C++ | Вопросы собесов

    22 сент., 19:23

  • C/C++ | Вопросы собесов

    22 сент., 16:11

    🤔 Как работает new?Оператор new в C++ выделяет память из кучи (heap) для хранения объекта и возвращает указатель на эту область памяти. Помимо выделения памяти, new также вызывает конструктор объекта, если он определен. В случае, если не хватает памяти для выделения, new выбрасывает исключение std::bad_alloc. Для освобождения памяти, выделенной через new, необходимо использовать оператор delete.Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚Базу знаний
  • C/C++ | Вопросы собесов

    22 сент., 11:05

  • C/C++ | Вопросы собесов

    22 сент., 09:05

    🤔 Почему не сделать стек вызова очень большим?Может показаться логичным способом избежать переполнения стека, но в реальности это решение приводит к проблемам🟠Неэффективное использование памяти Если стек слишком велик, это может привести к нерациональному использованию памяти. Память, выделенная под стек, может оставаться неиспользованной, что уменьшает доступное пространство для других частей программы и данных.🟠Ограниченные системные ресурсы Системы имеют ограниченное количество оперативной памяти. Выделение слишком большого размера стека для каждого потока может привести к исчерпанию доступной памяти, особенно в многопоточных приложениях, где каждый поток имеет свой стек.🟠Сложности с отладкой Большие стеки могут затруднить обнаружение ошибок и утечек памяти. Например, если стек слишком велик, ошибка переполнения стека может не проявиться сразу, что усложняет диагностику
  • C/C++ | Вопросы собесов

    21 сент., 10:05

  • C/C++ | Вопросы собесов

    21 сент., 09:05

    🤔 Что такое back_inserter, зачем он нужен?std::back_inserter — это адаптер итератора из библиотеки STL, который позволяет удобно добавлять элементы в конец контейнера при использовании алгоритмов стандартной библиотеки (например, std::copy, std::transform и т. д.).Он создает итератор-вставку (inserter iterator), который при попытке записи нового элемента фактически вызывает метод push_back() у контейнера.🚩Почему он нужен?Обычно алгоритмы STL работают с итераторами и требуют, чтобы целевой контейнер уже содержал достаточно места для копирования или вставки элементов. back_inserter позволяет избежать этого ограничения, автоматически расширяя контейнер по мере необходимости.🚩Пример использованияБез back_inserter (приведет к ошибке!) #include <iostream> #include <vector> #include <algorithm>int main() { std::vector<int> source = {1, 2, 3, 4, 5}; std::vector<int>
  • C/C++ | Вопросы собесов

    21 сент., 00:37

  • C/C++ | Вопросы собесов

    20 сент., 09:05

    🤔 Какая сложность работы с map и unordered_map?В std::map и std::unordered_map используются разные структуры данных, поэтому их операции (insert, find, erase) имеют разную сложность.🚩Почему std::map медленнее?std::map – это самобалансирующееся красно-чёрное дерево, где все операции (insert, find, erase) выполняются за O(log n). std::map<int, std::string> m; m[10] = "ten"; // O(log n) m[5] = "five"; // O(log n) m[20] = "twenty"; // O(log n) m.find(5); // O(log n)Дерево std::map выглядит так 10 / \ 5 20🚩Почему std::unordered_map быстрее?
  • C/C++ | Вопросы собесов

    19 сент., 16:11

    🤔 Что будет, если несколько раз вызвать lock?1. Если используется обычный std::mutex, повторный вызов lock из того же потока вызовет deadlock. 2. Для избежания этой ситуации можно использовать std::recursive_mutex, который позволяет одному потоку многократно блокировать мьютексСтавь 👍 если знал ответ, 🔥 если нет Забирай 📚Базу знаний
  • C/C++ | Вопросы собесов

    19 сент., 09:05

    🤔 Что такое deque?Deque (double-ended queue, двусторонняя очередь) — это последовательный контейнер в C++, который позволяет добавлять и удалять элементы как с начала, так и с конца очереди с постоянной временной сложностью O(1). Контейнер deque является частью стандартной библиотеки шаблонов (STL) и объявляется в заголовочном файле <deque>.🚩Основные характеристики:🟠Быстрый доступ к элементам: deque обеспечивает доступ к элементам по индексу с амортизированной временной сложностью O(1). 🟠Двусторонняя очередь: Позволяет эффективно добавлять и удалять элементы как с начала, так и с конца очереди. 🟠Динамический размер: deque автоматически изменяет свой размер по мере добавления или удаления элементов, подобно vector. 🟠Не требует смежного хранения: В отличие от vector, элементы deque могут быть размещены в различных сегментах памяти, что делает его более гибким для частых
  • C/C++ | Вопросы собесов

    18 сент., 09:05

    🤔 Расскажи о различиях ссылки и указателяСсылки (references) и указатели (pointers) в C++ служат для работы с памятью и позволяют передавать и изменять данные по адресу. Однако у них есть важные различия, которые влияют на использование и безопасность кода.🚩Подробное объяснение с примерами🟠Ссылка – это псевдоним для переменной Ссылка является просто альтернативным именем для существующей переменной. Она не может существовать без объекта, к которому привязана. #include <iostream>void modify(int& ref) { ref = 20; // Меняем значение переданного объекта }int main() { int a = 10; int& refA = a; // refA теперь синоним astd::cout << "До: " << a << std::endl; // 10 modify(refA);
  • C/C++ | Вопросы собесов

    17 сент., 09:05

    🤔 Какова суть принципа подстановки Барбары Лисков?Является одним из пяти принципов SOLID и был предложен Барбарой Лисков в 1987 году. Этот принцип гласит, что объекты базового (родительского) класса должны быть заменяемы объектами производного (дочернего) класса без нарушения правильности программы. Другими словами, если класс S является подтипом класса T, то объекты типа T должны быть заменяемы объектами типа S без изменения желаемых свойств программы.🚩Почему это нужно?LSP помогает обеспечить правильное использование наследования и полиморфизма в объектно-ориентированном программировании. Если принцип подстановки нарушен, то полиморфизм может привести к неожиданным ошибкам и некорректному поведению программы. Следование LSP делает код более гибким, надежным и легким для сопровождения.🚩Как это используется?1⃣Поддерживали контракт, заданный базовым классом. 2⃣Не изменяли
  • C/C++ | Вопросы собесов

    16 сент., 16:11

    🤔 Когда начинают жить и умирают глобальные и локальные переменные в С++?Глобальные переменные живут на протяжении всей программы, начиная с инициализации до завершения. Локальные переменные живут с момента входа в блок кода до выхода из него.Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚Базу знаний
  • C/C++ | Вопросы собесов

    16 сент., 09:05

    🤔 Что знаешь о умных указателях?Умные указатели (smart pointers) в C++ – это классы-обёртки для обычных указателей, которые автоматически управляют временем жизни объектов в динамической памяти. Они помогают избежать утечек памяти и делают код более безопасным, минимизируя вероятность ошибок с указателями.🚩Зачем нужны умные указатели?🟠Управление ресурсами Автоматически освобождают память, когда объект больше не нужен. 🟠Исключение утечек памяти С их помощью можно избежать забывания вызова delete. 🟠Улучшение безопасности Умные указатели предотвращают доступ к освобождённой памяти (dangling pointers). 🟠Снижение сложности RAII (Resource Acquisition Is Initialization) позволяет делегировать управление ресурсами объектам.🚩Типы умных указателей🟠std::unique_ptr Уникальный указатель (unique pointer) обладает единственным владельцем объекта. После передачи владения объектом
  • C/C++ | Вопросы собесов

    15 сент., 16:11

    🤔 Как сделать так, чтобы в shared_ptr были утечки?Утечки возможны при создании циклических ссылок, например, когда два объекта хранят shared_ptr друг на друга.Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚Базу знаний
  • C/C++ | Вопросы собесов

    15 сент., 09:05

    🤔 Что будет если сделать delete для nullptr?В C++ delete nullptr безопасен и не делает ничего. Стандарт гарантирует, что delete не вызывает ошибок при передаче nullptr. int p = nullptr; delete p; // НИЧЕГО НЕ ПРОИЗОЙДЁТ (без ошибки)🚩Почему delete nullptr не вызывает ошибку?Стандарт C++ (C++98, C++11, C++17, C++20) говорит: > Если переданный в delete указатель равен nullptr, то delete ничего не делает. Это сделано, чтобы избежать избыточных проверок в коде: if (ptr) { // Проверка не нужна delete ptr; }🚩Как работает delete внутри?Когда вызывается delete p, компилятор: Проверяет, равен ли p nullptr. Если да → ничего не делает. Вызывает деструктор объекта, если p не nullptr.
  • C/C++ | Вопросы собесов

    14 сент., 16:11

    🤔 Чем отличаются STL-контейнеры vector и array?1. vector: - Динамический массив, размер которого можно изменять. - Управляет памятью автоматически. - Подходит для сценариев, где размер данных неизвестен заранее. 2. array: - Статический массив, размер которого фиксирован при создании. - Не выделяет и не освобождает память динамически. - Быстрее и эффективнее для небольших данных с фиксированным размером.Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚Базу знаний
  • C/C++ | Вопросы собесов

    14 сент., 09:05

    🤔 Как пофиксить проблему, когда mutex является локальной переменной?Использование std::mutex в качестве локальной переменной может привести к различным проблемам, особенно если он используется для синхронизации доступа к общим данным. Локальный std::mutex будет уничтожен при выходе из области видимости, что нарушит работу других потоков, ожидающих блокировку или разблокировку.🚩Проблемы с локальным std::mutex🟠Жизненный цикл локального std::mutex Локальная переменная уничтожается при выходе из функции или блока, в котором она объявлена. Это может привести к неопределенному поведению, если другие потоки все еще используют этот мьютекс.🟠Неопределенное поведение Уничтожение мьютекса, который все еще заблокирован, может привести к неопределенному поведению программы и потенциальным сбоям.🚩Решение проблемыЧтобы исправить проблему, нужно гарантировать, что std::mutex имеет
  • C/C++ | Вопросы собесов

    13 сент., 16:11

    🤔 Что будет, если для беззнаковой переменной, равной 0, сделать декремент?Значение переменной перейдёт в максимальное значение типа (например, UINT_MAX для unsigned int). Это связано с переполнением, так как беззнаковые типы используют арифметику по модулю.Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚Базу знаний
  • C/C++ | Вопросы собесов

    13 сент., 09:05

    🤔 Чем отличаются STL контейнеры vector и array?Это контейнеры из стандартной библиотеки, но у них есть важные различия в управлении памятью, гибкости и производительности.🟠Различия в управлении памятью std::vector использует динамическую память, выделяемую в куче (heap). Его размер может изменяться во время выполнения. std::array использует статическую память, выделяемую в стеке (stack) или в статической области памяти, и его размер фиксирован на этапе компиляции. #include <vector> #include <array> #include <iostream>int main() { std::vector<int> vec = {1, 2, 3}; // Размер может изменяться динамически vec.push_back(4); // Добавляем новый элементstd::array<int, 3> arr = {1, 2, 3}; // Размер фиксирован, нельзя добавить новый элементstd::cout << "Vector size: " << vec.size() << std::endl; // Выведет 4 std::cout << "Array size: " << arr.size() << std::endl; // Выведет 3