Лаборатория Касперского · ноябрь 2025

Тех собес на middle-senior C/C++ Разработчик в Лаборатория Касперского

middle-senior Тех собес 4 вопроса 4 задачи

1. Задача: Определить порядок вывода в консоль при выполнении кода

struct A { A() { std::cout << "A()" << std::endl; } ~A() { std::cout << "~A()" << std::endl; } };
struct B { B() { std::cout << "B()" << std::endl; } ~B() { std::cout << "~B()" << std::endl; } };
struct C { C() { std::cout << "C()" << std::endl; } ~C() { std::cout << "~C()" << std::endl; } };
struct D { D() { std::cout << "D()" << std::endl; } ~D() { std::cout << "~D()" << std::endl; } };

struct E : private D {
    E() : c(), b(), a() {
        std::cout << "E()" << std::endl;
        a.reset(new A);
        throw std::runtime_error("err");
    }
    ~E() { std::cout << "~E()" << std::endl; }
    std::unique_ptr<A> a; B b; C c;
};

2. Как изменится поведение, если объект E будет создан динамически через new?

3. Задача: Анализ функции подсчета битов

int f(int n) {
  int i = 0;
  while (n) {
    n &= n - 1;
    ++i;
  }
  return i;
}

4. Как оптимизировать функцию f(n)?

5. Достаточно ли оптимизировано решение с использованием массива результатов?

6. Как оптимизировать подсчет битов на архитектуре x86?

7. Задача: Code-review реализации FileCollector

Необходимо проанализировать предложенный фрагмент кода для сбора файлов из чанков в многопоточной среде (multiple producers — single consumer) и указать на недостатки.

class FileCollector {
public:
    void CollectFile(uint32_t fileId, size_t fileSize) noexcept { storage_[fileId] = std::string(fileSize, '