С++ для интервью
37 subscribers
10 photos
Готовься к собеседованиям по C++ эффективно: реальные вопросы, типичные HR уловки, примеры кода и объяснения.
Каждый пост — один шаг ближе к офферу 💼
Download Telegram
🧠 Вопрос из реального интервью для понимания отличий языка C++ от C (junior):

👉 Чем отличается new от malloc?

Ответ тезисно:
1️⃣ new/delete используется в C++, а malloc/free — в C
2️⃣ new вызывает конструктор, malloc — нет.
3️⃣ new возвращает указатель конкретного типа, malloc — void*.
4️⃣ new выбрасывает исключение std::bad_alloc, malloc — возвращает nullptr.
5️⃣ delete вызывает деструктор, free — просто освобождает память.

#cpp_question #cpp_tips
✅ Ответ к задаче из предыдущего поста:
lvalue rvalue

❗️Пояснения:
a — именованная переменная → lvalue
10 — временное значение → rvalue

🧠 На интервью часто спрашивают:

Что такое lvalue и rvalue?

Ответ:
lvalue имеет адрес и может стоять слева от =, rvalue — временное значение, которое можно только читать.

#cpp_question #cpp_challenge
⚙️Простой алгоритм для реализации на собеседовании (junior)

🔎 Бинарный поиск
Сложность: O(log n)

❗️Вопрос на собеседовании:

Что будет, если массив не отсортирован?


Ответ: поведение непредсказуемо — алгоритм применим только к отсортированным массивам.

#cpp_algo #cpp_question
💬 Простой вопрос про ООП (Объектно-Ориентированное Программирование) (junior)

Зачем нужен виртуальный деструктор?


Пример виртуального деструктора:
struct Base
{
virtual ~Base() = default;
};


✅ Ответ:
Если в базовом классе нет виртуального деструктора, при удалении через Base* вызывается только базовый деструктор, а деструктор наследника — нет → утечка памяти!

#cpp_question
🧠 Частый вопрос на знание ключевых слов языка

Что делает ключевое слово explicit? (junior)

struct Client {
explicit Client(int x) {}
};

Client a = 5; // ❌ ошибка
Client b(5); // ✅ ок


📘 Ответ: explicit запрещает неявные преобразования.

Используй его, чтобы избежать случайного вызова конструктора при присваивании.

#cpp_question #cpp_tips
📦 Рассмотрим важный концепт языка C++. Move semantics.

💭Основная идея:
Копировать дорого. Перемещать — почти бесплатно


Современный C++ , начиная с C++11, позволяет не копировать объекты,
а просто передавать владение ресурсом. Это и есть move semantics.

std::string a = "Hello";
std::string b = a; // копирование
std::string c = std::move(a); // перемещение


📋 Копирование → создаёт новую строку, копирует все символы.
🚚 Перемещение → "забирает" указатель у a, а a становится пустой.

⚠️ std::move — это не move, это cast
🧠 std::move не перемещает ничего сам по себе!
Он лишь превращает объект в rvalue-ссылку,
давая компилятору понять:
Я больше не буду использовать этот объект — можешь забирать ресурсы.

❗️Важное правило: после std::move — не трогай объект

std::string s = "Hello";
auto t = std::move(s);
std::cout << s; // ❌


❓ Когда использовать std::move

✅ Возврат временного объекта из функции:

std::string make() {
std::string s = "Data";
return s; // RVO или move
}


✅ При передаче в контейнер:

vec.push_back(std::move(obj));


🚫 Не используем при передаче по const& — const запрещает move!

void f(const std::string& s) {
auto t = std::move(s); // ❌ всё равно копия
}


🎯 Что мы имеет в итоге:

1️⃣ std::move — это rvalue cast, не “перемещение”.

2️⃣ Move-конструктор переносит ресурсы, оставляя источник “пустым”.

3️⃣ После move объект можно уничтожать, но не использовать.

4️⃣ const запрещает move.

Пользуйтесь, друзья, и делитесь со своими товарищами программистами 🤝

#cpp_tips #cpp_question
Please open Telegram to view this post
VIEW IN TELEGRAM