C++ собеседования
855 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
💥 Популярные библиотеки для работы с базами данных на 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
typedef используется для создания псевдонимов типов данных, что упрощает чтение и поддержку кода. Он позволяет определять новые имена для существующих типов, что особенно полезно при работе с длинными или сложными объявлениями типов.

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


#include <iostream>

inline int add(int a, int b) {
// Простая inline функция для сложения двух чисел
return a + b;
}

int main() {
int result = add(3, 4);
std::cout << "Result: " << result << std::endl;
}


Inline функции полезны для небольших, часто вызываемых функций.

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

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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
❗️Основное отличие между массивами и векторами заключается в управлении памятью и гибкости.

Массив — это статический контейнер с фиксированным размером, который задаётся при создании. Размер массива не может изменяться в процессе выполнения программы.


int arr[5] = {1, 2, 3, 4, 5}; // Статический массив из 5 элементов


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


#include <vector>
std::vector<int> vec; // Инициализация вектора
vec.push_back(1); // Добавление элемента
vec.push_back(2); // Вектор автоматически увеличивает размер


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

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

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

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

- int
: Целочисленный тип, который хранит целые числа без дробной части. Занимает фиксированный объем памяти (обычно 4 байта) и имеет ограниченный диапазон значений (например, от -2³¹ до 2³¹-1).

- float
: Тип с плавающей точкой, который хранит числа с дробной частью. Использует 4 байта памяти и представляет числа в формате IEEE 754. Позволяет работать с дробными значениями, но имеет ограниченную точность из-за особенностей представления.

int a = 5; // Целое число
float b = 5.5f; // Число с плавающей точкой


Основное различие: int подходит для точных целочисленных операций, а float — для вычислений с дробными числами, но с возможной потерей точности.

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

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

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

Функция полезна для оптимизации многопоточных программ, так как позволяет определить оптимальное количество потоков для выполнения задач. Если функция не может определить количество ядер, она возвращает 0.


#include <iostream>
#include <thread>

int main() {
unsigned int numThreads = std::thread::hardware_concurrency();
std::cout << "Number of concurrent threads supported: " << numThreads << std::endl;
return 0;
}


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

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

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