C++ собеседования
846 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
Поток — это объект, который позволяет выполнять параллельные вычисления. Создать поток можно с помощью класса std::thread, передав ему функцию или лямбда-выражение, которое будет выполняться в этом потоке.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
🪅 nullptr — это ключевое слово, введенное в стандарте C++11, которое представляет собой указатель на нулевой адрес. Оно заменяет использование NULL, который в C++ является просто макросом, определенным как 0. Использование nullptr улучшает безопасность и ясность кода, так как он имеет тип std::nullptr_t, что позволяет избежать неоднозначностей при перегрузке функций.


void foo(int* ptr) {
// Функция принимает указатель на int
}

void foo(double val) {
// Функция принимает double
}

foo(nullptr); // Вызовет foo(int*), так как nullptr имеет тип указателя


🪅 nullptr помогает избежать ошибок, связанных с неявным преобразованием типов, и делает код более читаемым.

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

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

〰️ Структуры могут содержать переменные (поля) и функции (методы). В отличие от классов, по умолчанию все члены структуры имеют публичный доступ.


#include <iostream>

// Определение структуры
struct Point {
int x;
int y;

// Метод для вывода координат
void print() {
std::cout << "Point(" << x << ", " << y << ")" << std::endl;
}
};

int main() {
// Создание экземпляра структуры
Point p;
p.x = 10;
p.y = 20;

// Вызов метода структуры
p.print(); // Вывод: Point(10, 20)
}


〰️ Структуры полезны для моделирования объектов с несколькими свойствами, таких как точки, координаты и т.д.

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

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

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

🔹 Синтаксис лямбда-выражения включает в себя захват переменных, параметры, тело функции и возвращаемый тип.


auto sum = [](int a, int b) -> int {
return a + b; // Возвращает сумму a и b
};


🔹 Лямбда-выражения часто используются в алгоритмах стандартной библиотеки, таких как std::for_each или std::sort.

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

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


#include <iostream>
using namespace std;

// Базовый класс
class Animal {
public:
void eat() {
cout << "Eating..." << endl;
}
};

// Производный класс
class Dog : public Animal {
public:
void bark() {
cout << "Barking..." << endl;
}
};

int main() {
Dog dog;
dog.eat(); // Наследованный метод
dog.bark(); // Собственный метод
return 0;
}


Производный класс Dog наследует метод eat() от базового класса Animal.

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

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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92👨‍💻1
⬇️ Поток — это абстракция для работы с последовательностями данных, таких как файлы, консольный ввод/вывод и строки. Потоки позволяют читать и записывать данные в унифицированной форме.

🔵Для создания потока в C++ можно использовать стандартные библиотеки, такие как <iostream> для консольного ввода/вывода и <fstream> для работы с файлами.Пример создания потока для чтения из файла:


#include <fstream>
#include <iostream>
#include <string>

int main() {
std::ifstream file("example.txt"); // Создание потока для чтения из файла
std::string line;
if (file.is_open()) {
while (getline(file, line)) { // Чтение файла построчно
std::cout << line << std::endl; // Вывод строки на консоль
}
file.close(); // Закрытие файла
} else {
std::cerr << "Не удалось открыть файл" << std::endl;
}
return 0;
}


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

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

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

Объявление шаблона функции начинается с ключевого слова template, за которым следует список параметров шаблона в угловых скобках. Пример:


template <typename T>
T add(T a, T b) {
return a + b; // Функция складывает два значения типа T
}


*️⃣ В данном примере T — это параметр шаблона, который будет заменен на конкретный тип данных при вызове функции add.

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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
STL (Standard Template Library) — это библиотека шаблонов, предоставляющая набор стандартных классов и функций для работы с коллекциями данных. Основные компоненты STL включают контейнеры (такие как векторы и списки), алгоритмы (например, сортировка и поиск) и итераторы, которые обеспечивают доступ к элементам контейнеров.

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

🛑weak_ptr используется для проверки существования объекта и получения shared_ptr, если объект еще существует. Для этого применяется метод lock(), который возвращает shared_ptr.

#include <iostream>
#include <memory>

class Node {
public:
std::weak_ptr<Node> next; // Слабая ссылка на следующий узел
};

int main() {
auto node1 = std::make_shared<Node>();
auto node2 = std::make_shared<Node>();

node1->next = node2; // Установка слабой ссылки

if (auto sharedNext = node1->next.lock()) {
std::cout << "Next node is alive\n";
} else {
std::cout << "Next node is expired\n";
}
}


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

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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
😎 Механизм обработки исключений позволяет управлять ошибками и исключительными ситуациями в программе. Он основан на ключевых словах try, catch и throw.


try {
// Код, который может вызвать исключение
if (errorCondition) {
throw std::runtime_error("Error occurred");
}
} catch (const std::exception& e) {
// Обработка исключения
std::cout << "Exception caught: " << e.what() << std::endl;
}


😎 try блок содержит код, который может вызвать исключение. throw используется для генерации исключения. catch блок перехватывает и обрабатывает исключение, предоставляя возможность восстановить выполнение программы.

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

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

✈️ С++ собеседования
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