С++ для интервью
37 subscribers
10 photos
Готовься к собеседованиям по C++ эффективно: реальные вопросы, типичные HR уловки, примеры кода и объяснения.
Каждый пост — один шаг ближе к офферу 💼
Download Telegram
🎯 Добро пожаловать в “C++?” — канал о подготовке программистов C++ к собеседованиям!

Здесь ты найдёшь:

🧠 Реальные вопросы из интервью — от junior до senior

💻 Разборы задач и кода

⚙️ Советы и типичные ловушки на собеседованиях

Всё — кратко, по делу, с примерами кода.

📘 Подписывайся, чтобы каждый день становиться ближе к офферу 💼

💬 Хочешь разбор конкретного вопроса? Напиши его в комментариях, а мы подготовим соответствующий пост 👇
🧠 Вопрос из реального интервью для понимания отличий языка 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
💻 Код-задача: что выведет программа? (junior)
❓ Ответ и разбор в следующем посте

#cpp_challenge
✅ Ответ к задаче из предыдущего поста:
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
💬 auto — зло или добро?

💡 Тема: Осознанное использование auto
🎯 Цель: показать, как auto влияет на читаемость, безопасность и оптимизацию

Когда-то auto использовали для вывода типа переменной, теперь же — почти повсюду.
Но стоит ли всегда полагаться на него?

⚙️ Пример 1 — где auto реально помогает

std::unordered_map<std::string, std::vector<int>> data;
// ...
for (auto& [key, values] : data) {
std::cout << key << " → " << values.size() << "\n";
}

Здесь auto делает код чище и читабельнее.
Без него пришлось бы писать много нечитабельного кода:

for (std::pair<const std::string, std::vector<int>>& entry : data)


⚠️ Пример 2 — где auto вредит

std::vector<int> v = {1, 2, 3};
auto sum = std::accumulate(v.begin(), v.end(), 0.0);


На первый взгляд всё нормально, но sum — это double, а не int.
Если заменить 0.0 на 0, тип поменяется — и можно незаметно получить другую арифметику.

❗️ Иногда auto скрывает ошибки типов, особенно с const, &, && и decltype.

✅ Используй auto, когда:

1) Тип очевиден из правой части;
2) Хочешь избежать дублирования и повысить читаемость.

❌ Не используй auto, когда:

1) Важно сохранить const / &;
2) Выражение возвращает временный объект с неочевидным типом;
3) Тип влияет на поведение.

#cpp_tips
🧠 Мини опрос. Что выведет данный код?
👇 Проходите опрос ниже

#cpp_challenge
Что выведет данный код?
Anonymous Quiz
0%
11
50%
10
50%
Ошибка компиляции