C++ собеседования
839 subscribers
106 photos
222 links
Подготовка к собеседованиям на позицию C/C++ разработчик

Еще больше на сайте https://frontview-it.ru

Backend собеседования - @frontview_backend
C/C++ работа - @frontview_cpp_vacancies
Все IT вакансии - @frontview_all_vacancies
Download Telegram
Профилирование — это процесс анализа производительности программы с целью выявления узких мест и оптимизации использования ресурсов, таких как процессорное время и память. Оно необходимо для повышения эффективности и скорости работы приложения, особенно в ресурсозатратных системах.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
📝 std::enable_if — это шаблон, используемый для реализации SFINAE (Substitution Failure Is Not An Error). Он позволяет включать или исключать функции и классы из перегрузки на этапе компиляции в зависимости от выполнения определённых условий.


#include <type_traits>

// Функция доступна только для целых типов
template <typename T>
typename std::enable_if<std::is_integral<T>::value, T>::type
foo(T value) {
return value * 2;
}

// Функция доступна только для вещественных типов
template <typename T>
typename std::enable_if<std::is_floating_point<T>::value, T>::type
foo(T value) {
return value / 2;
}


➡️ std::enable_if помогает создавать более безопасный и гибкий код, контролируя доступность функций на основе типов.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
Файл открывается с использованием потоков ввода-вывода, таких как `ifstream` для чтения и `ofstream` для записи, которые предоставляются библиотекой `<fstream>`. Для открытия файла необходимо создать объект потока и вызвать метод `open()`, указав имя файла и режим открытия, либо использовать конструктор потока с теми же параметрами.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61🔥1
🔥 vector и list — это контейнеры STL, но они имеют разные структуры и характеристики.

▶️ vector — это динамический массив, который обеспечивает быстрый доступ к элементам по индексу и эффективное добавление элементов в конец. Однако вставка или удаление элементов в середине может быть медленной, так как требует сдвига элементов.

▶️ list — это двусвязный список, который позволяет быстро вставлять и удалять элементы в любом месте, но доступ к элементам по индексу медленный, так как требует последовательного обхода.

Выбор между ними зависит от требований к производительности операций доступа и модификации.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62
Std::tuple из библиотеки <tuple> позволяет хранить несколько значений разных типов в одной структуре. Для создания и использования tuple применяются функции std::make_tuple для инициализации и std::get для доступа к элементам по индексу.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
⚡️ Полиморфизм — это концепция объектно-ориентированного программирования, позволяющая объектам разных классов обрабатывать вызовы методов через общий интерфейс. Это достигается с помощью виртуальных функций и наследования.


#include <iostream>
using namespace std;

class Base {
public:
virtual void show() { // Виртуальная функция
cout << "Base class" << endl;
}
};

class Derived : public Base {
public:
void show() override { // Переопределение функции
cout << "Derived class" << endl;
}
};

int main() {
Base* obj = new Derived();
obj->show(); // Вызов функции Derived
delete obj;
}


☑️ Полиморфизм позволяет использовать один интерфейс для работы с разными типами объектов, улучшая гибкость и расширяемость кода.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
std::runtime_error — это класс исключений, который используется для представления ошибок, возникающих во время выполнения программы. Он наследуется от std::exception и позволяет передавать сообщение об ошибке, которое можно получить с помощью метода what().

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1💯1
API (Application Programming Interface) бывают нескольких типов, каждый из которых имеет свои особенности и применение.

😎 REST API — основан на архитектурном стиле REST. Использует HTTP методы (GET, POST, PUT, DELETE) и работает с ресурсами, идентифицируемыми URI.

😎 SOAP API — протокол, использующий XML для обмена сообщениями. Обеспечивает высокий уровень безопасности и надежности, но более сложен в реализации.

😎 GraphQL API — позволяет клиентам запрашивать только необходимые данные. Гибкий и эффективный, особенно для сложных запросов.

😎 gRPC API — использует HTTP/2 и Protocol Buffers. Поддерживает двунаправленную потоковую передачу и высокую производительность.

Каждый тип API имеет свои преимущества и ограничения, подходящие для различных задач и архитектурных решений.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3
Основное различие между структурой и классом заключается в уровне доступа по умолчанию: у структуры он публичный, а у класса — приватный. Кроме этого, структуры и классы функционально идентичны и могут содержать методы, конструкторы и деструкторы.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥3
💡 std::thread::detach используется для отделения потока от объекта std::thread, позволяя потоку продолжать выполнение независимо. После вызова detach, объект std::thread больше не связан с потоком и не может быть использован для управления им. Это полезно, когда поток должен работать в фоновом режиме, но важно помнить, что необходимо обеспечить завершение потока до завершения программы, иначе поведение будет неопределённым.


#include <iostream>
#include <thread>

void backgroundTask() {
// Фоновая задача
std::cout << "Фоновая задача выполняется\n";
}

int main() {
std::thread t(backgroundTask);
t.detach(); // Отделяем поток
// Поток продолжает выполнение независимо
std::cout << "Главный поток завершён\n";
return 0;
}


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
Для открытия файла используется класс std::fstream, который предоставляет возможность работы с файлами в различных режимах, таких как std::ios::in для чтения, std::ios::out для записи, std::ios::app для добавления в конец файла, std::ios::binary для бинарного режима и std::ios::trunc для обрезки файла до нуля при открытии. Эти режимы могут комбинироваться с помощью побитового оператора OR (|) для достижения нужного поведения при работе с файлами.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
✏️ lvalue (left value) — это выражение, которое ссылается на область памяти и имеет адрес, позволяя присваивание. rvalue (right value) — это временное значение, не имеющее адреса, используемое в выражениях.


int x = 10; // x — это lvalue, 10 — это rvalue

int y = x + 5; // x + 5 — это rvalue, результат временный

int &ref = x; // ref — это lvalue-ссылка на x


lvalue может стоять слева от оператора присваивания, а rvalue — только справа.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101👀1
Указатель на указатель — это переменная, которая хранит адрес другого указателя, тем самым позволяя косвенно ссылаться на данные, находящиеся в памяти. Это часто используется для работы с динамическими структурами данных, такими как двумерные массивы или для передачи указателей по ссылке в функции.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
👉 Для создания объекта класса сначала необходимо определить класс. Например:

class Car {
public:
std::string model;
int year;

// Конструктор класса
Car(std::string m, int y) : model(m), year(y) {}
};


👉 После определения класса объект создается следующим образом:

Car myCar("Toyota", 2020); // Создание объекта myCar с использованием конструктора


👉 Объект myCar теперь имеет доступ к членам класса Car, таким как model и year.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🤔2🔥1
Паттерны проектирования — это проверенные решения общих проблем проектирования программного обеспечения, которые помогают создавать более гибкие, понятные и поддерживаемые системы. Они способствуют стандартизации подходов к решению задач, упрощая процесс разработки.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
💥 Популярные библиотеки для работы с базами данных на C++ включают в себя SOCI, которая предоставляет простой интерфейс для взаимодействия с различными СУБД, и libpqxx, которая является клиентской библиотекой для PostgreSQL. Также часто используются MySQL Connector/C++ для работы с MySQL и SQLite для легковесных встроенных баз данных.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83
📌 Inline функция — это функция, которая предлагается компилятору для встраивания в место вызова, что может уменьшить накладные расходы на вызов функции и повысить производительность. Однако компилятор может игнорировать это предложение, если встраивание нецелесообразно или невозможно.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
В C++ list и deque — это контейнеры из STL, но они имеют разные характеристики и применения.

😎 std::list — это двусвязный список. Он позволяет эффективно вставлять и удалять элементы в любом месте, но не поддерживает произвольный доступ к элементам. Это делает его идеальным для сценариев, где часто требуется вставка или удаление.

😎 std::deque — это двусторонняя очередь. Она поддерживает произвольный доступ, а также быструю вставку и удаление элементов с обоих концов. Это делает deque более универсальным, чем list, но с немного большей сложностью для операций вставки и удаления в середине.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82
Массив указателей представляет собой структуру данных, где каждый элемент массива хранит адрес объекта или переменной, что позволяет эффективно управлять динамически выделенной памятью и объектами. Использование массива указателей упрощает доступ и манипуляцию множеством объектов, особенно при работе с динамическими структурами данных и полиморфизмом.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
👉 В C++ set и multiset — это контейнеры из библиотеки стандартных шаблонов (STL), которые хранят элементы в отсортированном порядке.

1⃣ set хранит уникальные элементы, не допускает дубликатов.

#include <set>
#include <iostream>

int main() {
std::set<int> s = {1, 2, 3};
s.insert(2); // Дубликат не добавится
for (int x : s) {
std::cout << x << " "; // Вывод: 1 2 3
}
}


2⃣ multiset позволяет хранить дубликаты.

#include <set>
#include <iostream>

int main() {
std::multiset<int> ms = {1, 2, 3};
ms.insert(2); // Дубликат добавится
for (int x : ms) {
std::cout << x << " "; // Вывод: 1 2 2 3
}
}


Основное отличие в том, что set не допускает дубликатов, а multiset — допускает.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91🤔1