Библиотека собеса по C++ | вопросы с собеседований
رفتن به کانال در Telegram
Вопросы с собеседований по C++ и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/9ccf302b Для обратной связи: @proglibrary_feeedback_bot
نمایش بیشتر5 407
مشترکین
-824 ساعت
-13 9517 روز
-13 97630 روز
آرشیو پست ها
Реально ли IT-специалисту переехать в Великобританию без предложения о работе, без высшего образования и без знания английского языка? Ответ: да! Рассказываем, как это сделать.
Виза Global Talent дала возможность более 8000 IT-специалистам переехать в Британию в 2022 году. Она выдаётся на срок до 5 лет, по ней можно работать в любой компании, фрилансить, открывать собственный бизнес и даже претендовать на паспорт!
Чтобы получить эту визу, не обязательно иметь высшее образование, не нужно знать язык на высоком уровне, а заявку можно подать из любой страны. И, пожалуй, самое главное – не нужно обладать каким-то исключительным талантом! Почти все IT-специалисты могут претендовать на эту визу.
Подписывайтесь на наш Telegram-канал, где мы даём массу полезной информации о релокации: https://t.me/movetalent
Пишите нам в WhatsApp: +44 7496 949122 или в Telegram: @relocode_dm. Мы проводим бесплатные консультации, на которых поможем разобрать ваш кейс и подобрать наиболее подходящий способ релокации.
Реклама. Шарова Елизавета Владимировна, ИНН 614008249720. Erid 2VtzqwRtP6pЧасто в C++ при исправление одной ошибки в программе количество ошибок только увеличивается. Как думаете почему это происходит?
👩💻 Что должен знать востребованный разработчик на С++?
Расскажет Александр Ключев — ведущий программист в «Новые облачные технологии». Приходите на бесплатный практический урок «C++20 динамическое выделение памяти во время компиляции» от OTUS.
На вебинаре вы узнаете:
- как работает динамическое выделение памяти на этапе компиляции в С++20;
- зачем это нужно и где можно использовать.
🤝 Встречаемся 15 февраля в 20:00 мск в рамках курса «C++ Developer. Professional». Доступна рассрочка на обучение!
➡️ Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок и получить запись: https://otus.pw/3TFn/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576 Erid 2VtzqwZLKBW🌟 Что такое std::variant?
std::variant — это класс-шаблон в стандартной библиотеке C++, который предоставляет механизм для хранения и обработки значения из списка альтернативных типов. Это позволяет программистам создавать переменные, которые могут содержать значения разных типов, известных заранее
📘 Особенности
Безопасность типов: std::variant гарантирует безопасность типов на этапе компиляции. Это означает, что вся обработка значений будет проверена на соответствие типов на этапе компиляции, что помогает избежать ошибок времени выполнения, связанных с неправильным использованием типов данных
🌟 Что такое std::optional?
Это класс, появился начиная с C++17, который даёт удобный способ работы с «возможно отсутствующим» значением
🌐 Ссылки
• std::optional
• std::optional in C++
• Рефакторинг с использованием C++17 std::optional
• Использование std::optional в С++17
Что такое TDD?
TDD (Test-Driven Development) — это методология разработки программного обеспечения, которая основана на повторении очень коротких циклов разработки: сначала пишется тест, покрывающий желаемое изменение, затем пишется код, который позволит пройти тест, и под конец проводится рефакторинг нового кода к соответствующим стандартам.
TDD означает, что программист сначала пишет модульный тест, который проверяет ожидаемое поведение некоторой части кода. Затем программист пишет код, который заставляет тест пройти. После этого программист может провести рефакторинг кода, чтобы улучшить его читаемость, производительность или другие свойства.
🤔 Что такое structural bindings?
• Данная фитча появилась в C++17
• Это механизм, который позволяет нам декомпозировать структуры данных, такие как tuple, pair, и даже свои пользовательские структуры, на более простые именованные переменные
• Это делает код более читаемым, компактным и легко поддерживаемым
🌐 Ссылки
• Восемь возможностей C++17, которые должен применять каждый разработчик
• Structured binding declaration
• Structured binding in C++ https://habr.com/ru/articles/343622/
co_await, co_yield и co_return
co_await, co_yield и co_return — это ключевые слова, которые используются для реализации корутин (coroutines).
co_await используется для приостановки корутины и ожидания результата асинхронной операции.
co_yield используется для приостановки корутины и передачи управления обратно вызывающему коду.
co_return используется для завершения корутины и возврата результата.
В этом примере используются все три ключевых слова:
— co_await приостанавливает корутину create_task в начале.
— co_yield можно было бы использовать для дополнительных приостановок.
— co_return завершает корутину в конце.
Может ли конструктор быть шаблонной функцией?
Ответ: нет не может
Пояснение
• Если шаблоны будут виртуальными, то вместо перечисления функций в базовом классе надо искать все подстановки шаблона при вызовах функции
• Для этого вместо индексов надо использовать имена, и искать эти имена в хеш-таблице
• Скорость вызова значительно упадет, т.к. надо будет разрешать коллизии
Dependency Injection
Dependency Injection (DI) — это паттерн проектирования, который помогает управлять зависимостями в приложениях. Он особенно важен в объектно-ориентированных языках программирования, таких как C++, где классы и объекты играют центральную роль.
DI предполагает, что зависимости (например, объекты других классов, которые класс использует) должны передаваться в класс извне, а не создаваться им самостоятельно. Это делает класс более независимым и более тестируемым. В C++, DI можно реализовать следующими способами: внедрение через конструктор, внедрение через метод и использование фабрик. В картинке с примером мы используем внедрение через конструктор, так как это самый распространенный способ DI в C++. В конструкторе класса вы передаете зависимости как параметры.
Использование DI в C++ способствует лучшей организации кода, более простой поддержке и тестированию. Он позволяет избегать жестких зависимостей и делает ваш код более гибким и расширяемым.
🔍 Что такое std::thread?
std::thread предоставляет собой интерфейс для взаимодействия с системными потоками
💡Что можно запустить?
• Любой функтор можно превратить в поток
💡Что можно передать при запуске потока?
• Можно передать любое количество параметров, но стоит учитывать, что все они будут копироваться
• Чтобы передать ссылку, её стоит обернуть в std::ref или std::cref
💡Что можно сделать с потоком?
• После создания потока мы можем с ним делать две вещи: вызвать join и ждать завершение потока или вызвать detach, тогда поток просто будет работать (пока сам не завершится)
💡Начиная с C++20 появился std::jthread
• Это тоже самое, но в деструкторе будет вызываться join
📚 std::exception — это базовый класс для всех стандартных исключений в C++
Почему стоит наследоваться от std::exception?
• Единообразие в обработке исключений: Когда вы наследуетесь от std::exception, ваш класс исключения приобретает интерфейс, который делает его совместимым с другими стандартными исключениями
• what() метод: std::exception предоставляет важный метод what(), который возвращает строковое представление исключения. Это позволяет вам предоставлять информативные сообщения об ошибке при обработке исключений
• Легкость в поддержке кода: Если вы используете сторонние библиотеки или фреймворки, они также могут ожидать обработку исключений, производных от std::exception
• Стандартные типы исключений: std::exception имеет несколько стандартных подклассов, таких как std::runtime_error, std::logic_error и другие. Вы можете использовать эти подклассы вместо базового std::exception, чтобы более точно определить характер ошибки
Сортировка контейнеров в заданном порядке
В C++, сортировка элементов в контейнерах может быть легко реализована с использованием std::sort и специализированных функциональных объектов
Какие конструкторы и методы реализуются по умолчанию?
Начиная с C++11 каждый класс, помимо конструктора по умолчанию, имеет следующие 5 дефолтных операций:
1. Конструктор копирования (Copy Constructor):
• Принимает объект своего же типа в качестве параметра
• Создает новый объект, инициализируя его значениями из переданного объекта
2. Оператор присваивания (Copy Assignment Operator):
• Присваивает значения одного объекта другому
• Вызывается при использовании оператора присваивания (=) между двумя объектами
3. Конструктор перемещения (Move Constructor):
• Это нововведение в C++11
• Принимает rvalue-ссылку на объект своего типа в качестве параметра
4. Оператор перемещения (Move Assignment Operator):
• Также нововведение в C++11
• Принимает rvalue-ссылку на объект своего типа в качестве параметра
5. Деструктор (Destructor):
• Освобождает ресурсы, занимаемые объектом, при его уничтожении (выходе из области видимости, удалении из контейнера)
💪 Пройди тест по C++ и проверь свои знания.
Ответишь — пройдешь на продвинутый курс "C++ Developer. Professional" от OTUS по специальной цене + получишь запись мастер-класса от преподавателя курса.
⛔️ ПРОЙТИ ТЕСТ: https://otus.pw/Fylt/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576 Erid 2VtzqvPXm27Вывод типа шаблона (Template Type Deduction)
⚙️ Начиная с C++11 появилась возможность переложить вывод типа на компилятор — вывод типа шаблона (Template Type Deduction)
🔥 Эта фича не только улучшает читаемость, но и делает код более устойчивым к изменениям. Если мы решим изменить тип вектора, нам не нужно изменять сигнатуру функции
Флаги оптимизации
🤔 Что это за флажки?
Флажки оптимизации — это специальные параметры, которые передают компилятору инструкции о том, насколько сильно он должен оптимизировать ваш код при компиляции. Уровень оптимизации может варьироваться от минимального (O0) до максимального (O3).
🔍 Чем отличаются уровни оптимизации?
• O0 (Отсутствие оптимизации): Этот уровень подходит для отладки. Компилятор минимизирует время компиляции, не внося оптимизаций, чтобы облегчить отслеживание багов
• O1 (Базовая оптимизация): Проводит базовые оптимизации, например, устранение мертвого кода и простые inline-функций
• O2 (Средняя оптимизация): Включает более сложные оптимизации, такие как оптимизация циклов и векторизация, что приводит к более эффективному исполнению кода
• O3 (Максимальная оптимизация): Производит максимально возможное количество оптимизаций. Подходит для создания высокопроизводительного кода, но может увеличить время компиляции
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Функция floor
Функция floor в C++ используется для округления числа с плавающей запятой (типа float или double) вниз до ближайшего целого числа, которое меньше или равно исходному числу. Функция floor является частью стандартной библиотеки C++ и объявлена в заголовочном файле cmath.
Функция floor полезна, например, при работе с денежными суммами, когда вам нужно округлить результат вниз до ближайшего целого значения валюты, чтобы учесть минимальные единицы валюты.
Спецификаторы доступа
В C++ используются три спецификатора доступа: public, private и protected. Они определяют, кто может получить доступ к членам класса или структуры.
public — члены с таким спецификатором доступны из любого места программы, включая другие классы и структуры.
private — члены с таким спецификатором доступны только из самого класса, в котором они объявлены.
protected — члены с таким спецификатором доступны из самого класса, в котором они объявлены, а также из производных классов.
По умолчанию все члены класса объявляются с спецификатором private, а члены структуры — с public.
Спецификаторы доступа используются для обеспечения инкапсуляции, то есть отделения внутренней реализации класса от его интерфейса. Инкапсуляция позволяет скрыть детали реализации от пользователя класса, что делает код более понятным и надежным.
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
