Библиотека собеса по C++ | вопросы с собеседований
رفتن به کانال در Telegram
Вопросы с собеседований по C++ и ответы на них. Как запустить своего ии-агента: https://clc.to/tvpmDQ По рекламе: @tproger_sales_bot Учиться у нас: https://proglib.io/w/9ccf302b Для обратной связи: @proglibrary_feeedback_bot
نمایش بیشتر4 601
مشترکین
-324 ساعت
-27 روز
-930 روز
آرشیو پست ها
Чем make_shared отличается от shared_ptr, созданного через new?
Ответ: При std::make_shared<T>(args...) объект и служебный блок управления обычно размещаются в одном выделенном блоке памяти. При std::shared_ptr<T>(new T(args...)) память под объект выделяется отдельно от блока управления.
Объединённое выделение уменьшает накладные расходы. Но формулировка «make_shared всегда делает ровно одно выделение» слишком категорична: стандарт рекомендует реализации обходиться не более чем одним.
Есть и нюанс с weak_ptr. Объект уничтожается, когда исчезает последний сильный владелец. Однако при объединённом размещении память общего блока может оставаться занятой, пока существуют слабые указатели. Это не означает, что сам объект продолжает жить.
Ещё одно отличие: конструктору shared_ptr можно передать собственную функцию удаления. У make_shared такого параметра нет.
Подробнее в проекте стандарта C++
🐸 Библиотека собеса по C++
📌 Один курс — хорошее вложение в себя. Два по той же цене — ещё лучше.
В Proglib Academy действует акция: покупаешь один курс, а второй получаешь в подарок.
Например, можно совместить два направления по работе с ИИ:
💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.📍 Разница в цене — почти 50 тысяч рублей. Можно освоить больше, не выходя за рамки запланированного бюджета. А если тебе интереснее Python, алгоритмы, backend или DevOps — выбирай другую пару курсов из каталога. Акция действует до 31 октября включительно ⏳ ⏮️ Пора прокачать свой стек
Какие требования должен выполнять пользовательский ключ std::unordered_map?
Ответ: Для ключа нужны согласованные хеш-функция и проверка эквивалентности.
По умолчанию контейнер использует std::hash<Key> и std::equal_to<Key>. Для собственного типа можно передать свои функциональные объекты в параметрах шаблона: специализировать std::hash необязательно.
Главное правило: если два ключа считаются эквивалентными, их хеши обязаны совпадать. Обратное неверно — одинаковые хеши у разных ключей допустимы, это коллизия.
Например, если строки сравниваются без учёта регистра, хеширование тоже должно игнорировать регистр. Иначе равные для контейнера ключи могут попасть в разные корзины.
Проверка эквивалентности должна быть согласованной, а результаты сравнения и хеширования ключей — оставаться стабильными, пока ключи находятся в контейнере.
Подробнее в проекте стандарта C++
🐸 Библиотека собеса по C++
Когда push_back делает итераторы std::vector недействительными?
Ответ: Если при добавлении произошла реаллокация, недействительными становятся все прежние итераторы, указатели и ссылки на элементы, а также старый end().
Реаллокация требуется, когда новый размер превышает прежнюю ёмкость capacity(). Вектор получает другое хранилище, поэтому сохранённые адреса элементов больше использовать нельзя.
Если свободной ёмкости хватило, итераторы, указатели и ссылки на уже существовавшие элементы сохраняются. Однако старый end() всё равно становится недействительным: конец последовательности изменился.
Поэтому ответ «push_back всегда ломает итераторы» неверен. Но и проверять только указатель на первый элемент недостаточно: сохранённый end() требует отдельного внимания.
Подробнее в проекте стандарта C++
🐸 Библиотека собеса по C++
Что именно потокобезопасно в std::shared_ptr?
Ответ: Безопасность совместного владения не означает безопасность любых действий с указателем и объектом.
Разные экземпляры shared_ptr, которые владеют одним объектом, можно копировать, сбрасывать и уничтожать в разных потоках: управление общим счётчиком владельцев согласовано библиотекой.
Но если несколько потоков обращаются к одному и тому же экземпляру shared_ptr и хотя бы один меняет его, нужна синхронизация. Например, нельзя без неё выполнять reset() в одном потоке и копировать этот же указатель в другом. С C++20 для такого сценария есть std::atomic<std::shared_ptr<T>>.
Отдельный вопрос — сам объект T. Умный указатель не защищает его поля от гонки данных: для совместного изменения объекта нужны собственные меры синхронизации.
Подробнее в проекте стандарта C++
🐸 Библиотека собеса по C++
😎 Выбираешь один курс, второй получаешь бесплатно. Баг? Нет, акция!
До 31 октября в Proglib Academy можно выбрать два курса и заплатить только за один.
Например, можно совместить:
💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.Вместе курсы стоят 108 000 ₽, но по акции оба обойдутся в 59 000 ₽. Экономия — 49 000 ₽ 🔥 Интересуют Python и ИИ или алгоритмы и архитектура? Можно выбрать любые два курса из каталога. Акция действует до 31 октября включительно ⏳ ⏬ Собрать свой учебный билд
Можно ли передать std::unique_ptr в функцию по значению?
Ответ: Да, но именованный std::unique_ptr нужно передать с перемещением: consume(std::move(ptr)).
Копирование у unique_ptr запрещено. При передаче по значению параметр функции получает владение объектом, а исходный указатель после успешного перемещения становится пустым. Сам объект при этом не обязан перемещаться в памяти: меняется его владелец.
Важно: один лишь вызов std::move(ptr) ничего не передаёт. Он позволяет выбрать перемещающий конструктор, который и выполняет передачу владения.
Если функция должна только поработать с объектом, обычно достаточно передать T& или const T&. Принимать unique_ptr по значению стоит, когда функция действительно забирает владение.
Подробнее в проекте стандарта C++
🐸 Библиотека собеса по C++
Repost from Библиотека программиста
👀 Как вы смотрите видео?
Разбираете урок, слушаете интервью фоном или начинаете на телефоне, а продолжаете на большом экране?
Хотим узнать, что делает просмотр удобным для вас. Вспомните последнее видео — ролик, урок, фильм или серию сериала — и расскажите о своём опыте. Если детали не запомнились, можно так и ответить.
🕰️ Опрос займёт около 3 минут.
В результатах сможете сравнить свои привычки с ответами других участников. А разработчики и инженеры видеоплатформы расскажут, что происходит по ту сторону экрана, пока вы смотрите видео.
🔗 Поделиться опытом
🐸 Библиотека программиста
Приложение собрано, но при запуске .NET всё ещё компилирует код. Почему так происходит и что изменится, если подготовить машинный код заранее?
1 октября в 20:00 на открытом уроке курса «C# разработчик. Экспертный уровень» разберёте JIT и AOT в .NET и попробуете ReadyToRun и NativeAOT на практике.
Проследите путь от C# до IL и машинного кода. Узнаете, какую работу JIT выполняет во время исполнения приложения, и сравните обычную JIT-компиляцию с ReadyToRun и NativeAOT. Рассмотрите, что каждый подход меняет на этапе сборки и запуска.
На практике соберёте одно приложение в нескольких режимах. Сравните получившиеся файлы, размер приложения и время запуска, а затем разберёте результаты. Отдельно обсудите ограничения NativeAOT и сценарии, в которых его применение оправдано.
Урок проведёт Виктор Дзицкий.
Зарегистрироваться: https://otus.pw/Vi1t/?erid=2W5zFJ4cMgM
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
🩹 Задача: const-итерация по Range
#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 невозможен в принципе, а не по недосмотру комитета.😭 Как не потратить недельный лимит AI-кодинга за три дня?
Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода.
🔘 Поговорим о том:
— когда дорогая модель действительно нужна, а когда хватит дешёвой;
— сколько стоит один прогон и куда уходят токены;
— какие задачи можно отдавать субагентам;
— как настроить маршрутизацию моделей;
— что проверять в AI-коде перед merge.
✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после.
⬇️ 18 сентября, 19:00 МСК
⬇️ 1,5 часа · бесплатно
⬇️ Арсений Харланов и Олег Лайок
💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре.
🔗 Зарегистрироваться на вебинар
Какая сложность у std::map::insert?
Repost from Proglib.academy | IT-курсы
👅 Самое сложное — выбрать не курс, а направление
Сегодня хочется разобраться в AI-агентах. Через пару недель появляется задача, где нужны алгоритмы. Потом понимаешь, что неплохо бы освежить Python или математику для Data Science.
🔜 Именно поэтому подписка на обучение многим оказывается удобнее отдельных курсов. Можно спокойно переключаться между темами, когда меняются задачи, а не покупать новую программу каждый раз.
В подписку Proglib Academy входят все основные направления — AI, ML, Python, алгоритмы, математика для DS и другие курсы, а ещё закрытый видеохаб с вебинарами практиков.Начать можно с пробного месяца. Если решите остаться, его стоимость зачтётся при оформлении подписки 😎 🔗 Узнать подробнее 🏃♀️ Proglib Academy
Покупать новый курс каждый раз, когда меняется рабочая задача, — довольно странная механика. Нашли альтернативу 👇
Какая ошибка возникнет при попытке использовать std::ranges::to для конвертации range в контейнер, не поддерживающий требуемый интерфейс?
Repost from Proglib.academy | IT-курсы
🎯 У разработчика, DevOps-инженера и техлида разные причины задуматься о системной работе с AI-агентами
Но цель одна: перейти от случайных удачных запусков к управляемому процессу на реальном проекте — с понятными правилами, ревью, контролем расходов и безопасности ✔️
На курсе «ИИ для разработчиков» участники выстраивают такой процесс на практике: подключают инструменты, задают границы для агента и учатся понимать, где ему можно доверять работу, а где требуется проверка.
⚡️ Предзапись на осенний поток уже открыта
🏃♀️ Proglib Academy
Разработчик, DevOps-инженер или техлид — у каждого своя причина навести порядок в работе с AI-агентами.
Разбираем, чем отличаются их задачи 😊
Где по умолчанию размещается кадр (frame) корутины?
