Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 371новая вакансия за сутки·54 593вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 604
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 396 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python8 800
  • Облачные технологии6 644
  • QA вакансии2 164
  • Android1 317
  • Инженер данных868
  • Продакт-менеджер314

Разработка

  • iOS1 229
  • Backend вакансии1 199
  • AI вакансии548
  • Fullstack вакансии495
  • Frontend вакансии424
  • Mobile вакансии28

По стеку

  • Go5 236
  • Java3 132
  • Kotlin1 120
  • Node.js1 005
  • Rust852
  • .NET659
  • PHP319
  • C++268
  • C#207

DevOps и инфраструктура

  • Kubernetes3 909
  • Linux-инфраструктура2 843
  • DevOps вакансии2 675
  • Terraform / IaC2 175
  • Мониторинг и Observability1 072
  • CI/CD915
  • SRE305
  • Кибербезопасность33

Аналитика и данные

  • Аналитик данных532
  • Data Scientist435
  • Бизнес-аналитик400
  • Системный аналитик68

Другие направления

  • Проджект-менеджер105
  • UI/UX дизайн68
  • Ручное тестирование14

По регионам

  • Вакансии в США25 825
  • Вакансии в Европе10 301
  • Работа в России3 618
  • Вакансии в Канаде2 268

По формату

  • Удалённые вакансии42 661
  • Релокация в США25 825
  • Гибридная работа5 655
  • Офисная работа4 428

По уровню

  • Senior вакансии22 630
  • Middle вакансии11 534
  • Junior вакансии3 862

Сейчас нанимают

Все компании
  • Rakuten189 вакансий
  • Wise187 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis47 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen27 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме C++Все вопросы
C++MiddleТеория

Что такое templates в C++ и что такое template specialization?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Шаблоны генерируют код на этапе компиляции для каждого типа-аргумента. Полная специализация задаёт реализацию для конкретного типа (template<>); частичная специализация (только для классов) — для паттерна типов.

Шаблоны (Templates)

Шаблоны — механизм генерации кода во время компиляции. Компилятор создаёт отдельную копию функции или класса для каждого набора типовых аргументов (instantiation). Это статический полиморфизм без накладных расходов runtime.

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

// Функциональный шаблон
template<typename T>
T max_of(T a, T b) {
    return (a > b) ? a : b;
}

// Шаблон класса
template<typename T, size_t N>
class FixedArray {
    T data_[N];
public:
    T& operator[](size_t i) { return data_[i]; }
    const T& operator[](size_t i) const { return data_[i]; }
    constexpr size_t size() const { return N; }

    // Шаблонный метод внутри шаблонного класса
    template<typename U>
    void fill(U value) {
        for (auto& elem : data_) elem = static_cast<T>(value);
    }
};

void demo_basic() {
    auto m1 = max_of(3, 5);           // int
    auto m2 = max_of(3.14, 2.71);     // double
    auto m3 = max_of<std::string>("apple", "banana");

    FixedArray<int, 5> arr;
    arr.fill(42);
    std::cout << arr[0] << '\n';  // 42
}

Полная специализация (Full Specialization)

Полная специализация задаёт конкретную реализацию для конкретного набора аргументов:

// Основной шаблон
template<typename T>
struct TypeInfo {
    static const char* name() { return "unknown"; }
};

// Полная специализация для int
template<>
struct TypeInfo<int> {
    static const char* name() { return "int"; }
};

// Полная специализация для double
template<>
struct TypeInfo<double> {
    static const char* name() { return "double"; }
};

void demo_full_spec() {
    std::cout << TypeInfo<int>::name() << '\n';     // "int"
    std::cout << TypeInfo<double>::name() << '\n';  // "double"
    std::cout << TypeInfo<char>::name() << '\n';    // "unknown"
}

Частичная специализация (Partial Specialization)

Частичная специализация применяется только к шаблонам классов (не функций), позволяет специализировать по паттерну:

// Основной шаблон
template<typename T, typename U>
struct Pair {
    T first;
    U second;
    void print() { std::cout << "generic\n"; }
};

// Частичная специализация: оба типа одинаковы
template<typename T>
struct Pair<T, T> {
    T first;
    T second;
    void print() { std::cout << "same types\n"; }
};

// Частичная специализация для указателей
template<typename T>
struct Pair<T*, T*> {
    T* first;
    T* second;
    void print() { std::cout << "pointers\n"; }
};

void demo_partial_spec() {
    Pair<int, double> p1;  // generic
    Pair<int, int> p2;     // same types
    Pair<int*, int*> p3;   // pointers

    p1.print();  // generic
    p2.print();  // same types
    p3.print();  // pointers
}

Подводные камни

  • Code bloat: каждая instantiation генерирует отдельный код — 100 типов = 100 копий функции в бинарнике. Используйте explicit instantiation или type erasure для горячих путей.
  • Ошибки компиляции нечитаемы: сообщение об ошибке внутри шаблона выдаёт несколько экранов текста. В C++20 requires (concepts) делает сообщения понятнее.
  • Частичная специализация функций: функции не поддерживают частичную специализацию — вместо неё используют перегрузку или вспомогательный шаблон класса.
  • Порядок специализаций: специализации должны быть объявлены до использования; компилятор выбирает «наиболее специфичную» — неоднозначность приводит к ошибке компиляции.
  • typename и template в зависимых контекстах: typename T::type и obj.template method<U>() — ключевые слова обязательны, иначе парсер трактует как сравнение.
  • Экспорт шаблонов в .cpp: тела шаблонов должны быть в заголовочных файлах (или явно instantiated в .cpp) — определение в .cpp без явной instantiation не сгенерирует код для других TU.
  • SFINAE vs Concepts: до C++20 для ограничения типов использовали std::enable_if — сложно и хрупко. В C++20 предпочитайте requires и concepts.

Типичные ошибки

  • Объяснять templates и specialization только по синтаксису, без жизненного цикла и стоимости.
  • Игнорировать ошибки, null/empty состояния, порядок инициализации или режим сборки.
  • Давать пример, который работает в демо, но ломается при изменении владельца ресурса.
  • Показывать сырой указатель без объяснения владельца и момента освобождения.

Что проверяет интервьюер

  • Кандидат формулирует точную модель для templates и specialization, а не только определение.
  • Пример компилируем, безопасен по lifetime и соответствует версии технологии.
  • Названы trade-off, ограничения и диагностируемые симптомы ошибки.

Как вы знаете этот вопрос?

Проверить себя по теме C++ →

Источники

  • https://en.cppreference.com/w/cpp/language/templates
  • https://en.cppreference.com/w/cpp/language/template_specialization
←Предыдущий вопросКакие production-риски чаще всего возникают в проектах на C++: производительность, зависимости, конкурентность, деплой или observability?Следующий вопрос→Что такое `std::move` и `std::forward`?

Связанные темы

C++Debuggingmemory-managementperformance-tradeoffs

Частые вопросы на собеседовании

  • Что такое undefined behavior в C++ и приведите примеры?
  • Что такое smart pointers в C++? Объясните unique_ptr, shared_ptr и weak_ptr.
  • Что такое правило трёх / правило пяти / правило нуля (Rule of Three / Five / Zero)?
  • Что такое RAII (Resource Acquisition Is Initialization) и почему это важно?