Forwarded from Библиотека задач по C++ | тесты, код, задания
🔥 Найди баг: копирование строки сломало указатель
‼️ Задача: найди баг (если он есть), объясни, почему он связан с SSO, и предложи исправление.
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик
#include <string>
#include <iostream>
struct Token {
std::string value;
const char* ptr;
Token(const std::string& s) : value(s), ptr(value.data()) {}
};
int main() {
Token t1("hi");
Token t2 = t1; // копируем
std::cout << t1.ptr << "\n"; // "hi"
std::cout << t2.ptr << "\n"; // ???
}
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
Чем std::unique_lock отличается от std::lock_guard?
Anonymous Quiz
18%
std::unique_lock не освобождает мьютекс автоматически
17%
std::lock_guard поддерживает try_lock, а unique_lock нет
3%
std::unique_lock требует рекурсивного мьютекса
56%
std::unique_lock позволяет отложенный захват, ручное освобождение и перемещение
6%
std::unique_lock работает только с std::condition_variable_any
❤1
Что такое «expression templates» как техника построения DSL в C++?
Anonymous Quiz
18%
Механизм компиляции строк с выражениями C++ во время выполнения самой программы
36%
Техника, откладывающая вычисления до присваивания через дерево типов без временных объектов
6%
Специальный синтаксис для встраивания SQL-запросов непосредственно в C++-код
24%
Способ передачи лямбда-выражений в качестве нетиповых шаблонных параметров класса
15%
Макросы препроцессора, раскрывающиеся в сложные математические выражения кода
Что такое «phantom types» и как они применяются для создания DSL в C++?
Anonymous Quiz
39%
Типы-заглушки без тела, предотвращающие полную специализацию шаблонного класса
5%
Указатели на удалённые объекты, которые компилятор автоматически помечает как невалидные
21%
Анонимные структуры без имени, видимые исключительно внутри одной конкретной функции
22%
Шаблонные параметры, кодирующие ограничения в системе типов, не занимая памяти объекта
12%
Типы, автоматически удаляемые компилятором при отсутствии явных экземпляров в коде
Что вернёт std::filesystem::path("/foo/./bar/../baz").lexically_normal()?
Anonymous Quiz
10%
/foo/./bar/../baz
58%
/foo/baz
23%
/foo/bar/baz
5%
baz
5%
/baz
Для каких операторов оно гарантировано «короткое замыкание» (short-circuit evaluation)?
Anonymous Quiz
11%
Только для &&
3%
Только для ||
11%
Для &&, ||, ?: и оператора запятой ,
30%
Для всех логических операторов включая перегруженные
45%
Для &&, || и тернарного оператора ?:
🤔4
Что такое «частичное упорядочивание» шаблонов функций и когда компилятор его применяет?
Anonymous Quiz
14%
Сортировка шаблонов по количеству параметров для ускорения компиляции
10%
Оптимизация компилятора для инлайнинга шаблонных функций
20%
Порядок инстанциирования шаблонов в единицах трансляции
48%
Механизм выбора наиболее специализированного шаблона при разрешении перегрузки
8%
Механизм ограничения рекурсивных шаблонов через SFINAE
Можно ли использовать концепт рекурсивно — так, чтобы он ссылался на самого себя?
Anonymous Quiz
10%
Да, рекурсия разрешена и автоматически трактуется как false при достижении предела
29%
Да, но только если рекурсия конечна и завершается через отдельную специализацию
6%
Да, но только через вспомогательный шаблонный класс, не напрямую в теле концепта
50%
Нет, стандарт C++20 явно запрещает рекурсивные концепты
5%
Поведение зависит от реализации компилятора, стандарт не регламентирует это
🚀 Челендж на выходных: полный ленивый pipeline
Собери всё вместе: напиши ленивый pipeline обработки данных без лишних копий и временных контейнеров.
✏️ Задача: реализуй весь pipeline. Можно использовать
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик
Собери всё вместе: напиши ленивый pipeline обработки данных без лишних копий и временных контейнеров.
// Дано: файл с числами (по одному на строку)
// Задача: найти сумму квадратов чётных чисел из первых 1000 строк
// Наивное решение (неленивое):
// 1. Загрузить всё в vector<int> — O(n) память
// 2. Отфильтровать чётные — ещё O(n)
// 3. Возвести в квадрат — ещё O(n)
// 4. Просуммировать первые 1000 — O(n)
// Ленивое решение должно:
// - Читать файл построчно (не грузить всё)
// - Фильтровать на лету
// - Трансформировать на лету
// - Останавливаться после 1000 элементов
// Скелет:
auto result = lines_from_file("data.txt") // ленивый итератор строк
| parse_ints() // string -> optional<int>
| filter_valid() // убрать nullopt
| filter([](int x){ return x % 2 == 0; }) // только чётные
| transform([](int x){ return x * x; }) // квадрат
| take(1000) // первые 1000
| sum(); // свёртка
// TODO: реализуй каждый адаптер в цепочке
C++20 Ranges или написать адаптеры вручную. Ключевое требование — в любой момент в памяти хранится не более одного элемента из файла.📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Почему в шаблонном классе обращение к члену базового класса через this->member иногда обязательно?
Anonymous Quiz
4%
Это обходной путь конкретного бага в GCC, в Clang такая запись не нужна
10%
this-> принудительно отключает виртуальный диспатч, ускоряя вызов метода
10%
Стандарт явно требует this-> перед всеми членами внутри шаблонного класса
45%
Без this-> возникает неопределенность при наличии множественного наследования класса
31%
Без this-> компилятор ищет имя на первой фазе, не видя зависимых базовых классов
В чём принципиальное преимущество std::pmr::polymorphic_allocator перед шаблонным аллокатором?
Anonymous Quiz
13%
pmr-аллокатор работает быстрее за счёт отсутствия виртуальных вызовов в горячем пути
9%
pmr-аллокатор автоматически дефрагментирует кучу при нехватке непрерывной памяти
43%
Тип контейнера не зависит от конкретного аллокатора — можно менять стратегию в runtime
23%
pmr-аллокатор совместим только с std::pmr-контейнерами и не работает с legacy-кодом
12%
pmr-аллокатор устраняет необходимость в явном delete для всех выделенных объектов
В первой части постов навалили жесткой базы, чтобы вправить мозги на место. Во второй дали конкретные инструменты, фреймворки и пошаговые инструкции, что нужно кодить прямо сейчас.
Часть 1. Введение, юзкейсы и реальность
Разбираемся с терминами, снимаем розовые очки и смотрим, где ИИ реально приносит бабки, а где только жжет нервы:
1. «Так что вообще считается AI-агентом?»
2. «Где тут бот, а где уже AI-агент?»
3. «Не надо пихать AI-агента в каждую задачу»
4. «Что уже можно спокойно делать через AI-агентов?»
5. «А что через AI-агентов пока лучше не трогать?»
Часть 2. Изнанка, ошибки и архитектура
Как всё это устроено под капотом, чтобы не слить бюджет и не наломать дров на старте:
6. «Можно ли просто сесть вечером и собрать себе AI-агента?»
7. «С чего вообще начать, если хочется попробовать AI-агентов»
8. «Почему AI-агент может внезапно начать творить дичь»
9. «Где AI-агенты реально экономят время, а где только добавляют возни»
10. «Почему они жрут столько денег?»
Часть 3. Хардкорная практика (Что делать руками)
Хватит теории. Открываем ноут, запускаем Cursor и делаем нормальные, отказоустойчивые системы:
11. «Почему одного промпта мало?»
12. «Почему AI-агенту мало просто “дать доступ к данным”»
13. «Если не следить за AI-агентом, он быстро начинает жить своей жизнью»
14. «Собрать демку легко. Но как же сделать нормально»
15. «Как сделать, чтобы это не развалилось через неделю?»
Please open Telegram to view this post
VIEW IN TELEGRAM
👏1
Зачем использовать trailing return type auto f() -> ReturnType вместо ReturnType f()?
Anonymous Quiz
6%
Trailing return type работает быстрее — компилятор не сканирует тело функции дважды
4%
Trailing return type обязателен для всех шаблонных функций начиная со стандарта C++14
7%
Trailing return type запрещает возврат по значению — только ссылки и указатели допустимы
49%
Позволяет использовать параметры функции в выражении типа возврата через decltype
34%
Это исключительно синтаксический сахар без каких-либо семантических отличий от префикса
🔥1
Что хранит std::unreachable_sentinel_t в C++20?
Anonymous Quiz
12%
Адрес последнего элемента бесконечного диапазона
6%
Адрес последнего элемента бесконечного диапазона
31%
Ничего — это пустой тип, сравнение всегда false
44%
Специальный маркер для бесконечных диапазонов чисел
7%
Указатель на следующий sentinel в цепочке диапазонов
🤔3
Могут ли virtual функции быть constexpr в C++23 и вычисляться на этапе компиляции?
Anonymous Quiz
39%
Нет, virtual и constexpr взаимно исключают друг друга
23%
Да, виртуальные функции могут быть constexpr — вызов через объект (не указатель) вычислим
9%
Только чистые виртуальные функции (= 0) могут быть constexpr
11%
Да, но только если все классы в иерархии объявлены с final
18%
Нет, constexpr virtual компилируется, но вызов всегда происходит в runtime через vtabl
В каком сегменте бинарного файла хранятся vtable?
Anonymous Quiz
20%
В сегменте .text вместе с кодом функций
11%
В сегменте .bss — нулевая инициализация
18%
В сегменте .data — изменяемые данные
37%
В сегменте .rodata — только для чтения
13%
В сегменте .stack текущего потока
Что произойдёт, если модифицировать контейнер во время итерации через std::ranges::filter_view?
Anonymous Quiz
7%
Итерация корректно завершится, игнорируя изменения
13%
Представление автоматически обновится и учтёт изменения
7%
Компилятор выдаст ошибку, запрещая модификацию
66%
Поведение неопределено, итераторы могут инвалидироваться
7%
Изменения отложатся до окончания итерации по view
🎉181👍171😍160❤🔥152🥰137
Forwarded from Библиотека C/C++ разработчика | cpp, boost, qt
#include <ranges>
#include <vector>
void process(const auto& view) {
for (auto x : view) { (void)x; }
}
int main() {
std::vector<int> data = { 1, 2, 3, 4, 5 };
auto pred = [](int x) {
return x % 2 == 0;
};
auto filtered = data | std::views::filter(pred);
process(filtered); // ❌ не компилируется
}
Объясни механизм: почему
begin() const невозможен в принципе, а не по недосмотру комитета.📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥182💯169❤150🔥150🥰148
Что такое «виртуальный прокси» в контексте C++?
Anonymous Quiz
37%
Прокси, реализованный через виртуальные функции в базовом классе
4%
Прокси, используемый только в виртуальных машинах и эмуляторах
7%
Прокси, автоматически удаляющийся при уничтожении базового объекта
16%
Прокси, откладывающий создание тяжёлого объекта до момента нужды
36%
Прокси, предоставляющий интерфейс без реальной реализации позади
🤩177👍175🎉168😍164🥰152
Какой паттерн используется для предоставления упрощённого интерфейса к сложной подсистеме?
Anonymous Quiz
9%
Proxy
51%
Facade
28%
Adapter
10%
Decorator
2%
Composite