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

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

Backend собеседования - @frontview_backend
C/C++ работа - @frontview_cpp_vacancies
Все IT вакансии - @frontview_all_vacancies
По рекламе - @frontviewit
Download Telegram
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
Основное различие между структурой и классом заключается в уровне доступа по умолчанию: у структуры он публичный, а у класса — приватный. Кроме этого, структуры и классы функционально идентичны и могут содержать методы, конструкторы и деструкторы.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 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
Для открытия файла используется класс 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
✏️ 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
Указатель на указатель — это переменная, которая хранит адрес другого указателя, тем самым позволяя косвенно ссылаться на данные, находящиеся в памяти. Это часто используется для работы с динамическими структурами данных, такими как двумерные массивы или для передачи указателей по ссылке в функции.

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

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
Паттерны проектирования — это проверенные решения общих проблем проектирования программного обеспечения, которые помогают создавать более гибкие, понятные и поддерживаемые системы. Они способствуют стандартизации подходов к решению задач, упрощая процесс разработки.

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

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

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

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

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

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

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

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

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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👉 В 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
Конструктор — это специальный метод класса, который автоматически вызывается при создании объекта и инициализирует его начальное состояние. Он может принимать параметры для настройки объекта и не имеет возвращаемого типа.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👉 map — это контейнер, реализующий ассоциативный массив, где каждый элемент представлен парой "ключ-значение". Ключи уникальны и автоматически сортируются.

👉 map основан на сбалансированном дереве поиска (обычно красно-черное дерево), что обеспечивает логарифмическое время доступа, вставки и удаления.

#include <iostream>
#include <map>

int main() {
std::map<int, std::string> m;
m[1] = "one"; // Вставка пары ключ-значение
m[2] = "two";

for (const auto& pair : m) {
std::cout << pair.first << ": " << pair.second << std::endl; // Вывод ключа и значения
}
}


map автоматически сортирует элементы по ключам.

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

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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ delete и delete[] используются для освобождения памяти, выделенной в куче, но применяются в разных контекстах.

delete освобождает память, выделенную для одного объекта:

int* ptr = new int(5);
delete ptr; // Освобождает память для одного int


delete[] освобождает память, выделенную для массива объектов:

int* arr = new int[5];
delete[] arr; // Освобождает память для массива int


🙅‍♂️ Использование неправильного оператора может привести к неопределенному поведению. delete для массива не вызовет деструкторы всех элементов, а delete[] для одиночного объекта может вызвать ошибки.

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

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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
▶️ Union — это специальный тип данных, который позволяет хранить разные типы данных в одном и том же месте памяти. Все члены union используют одну и ту же область памяти, и в каждый момент времени может быть активно только одно значение.


#include <iostream>

union Data {
int intValue;
float floatValue;
char charValue;
};

int main() {
Data data;
data.intValue = 10; // Устанавливаем значение int
std::cout << "Int: " << data.intValue << std::endl;

data.floatValue = 3.14f; // Перезаписываем значение float
std::cout << "Float: " << data.floatValue << std::endl;

return 0;
}


Union полезен для экономии памяти, но требует осторожности, так как изменение одного члена может затронуть другие.

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

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

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


#include <type_traits>

template<typename T>
void check() {
// Проверка, является ли тип целочисленным
if (std::is_integral<T>::value) {
// Логика для целочисленных типов
}
}


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

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