Forwarded from Библиотека собеса по C++ | вопросы с собеседований
Проведи ревью кода и найди проблему (если она есть😉).
#include <mutex>
#include <thread>
#include <vector>
#include <iostream>
std::mutex mtx;
std::vector<int> data;
void producer() {
for (int i = 0; i < 100; ++i) {
std::lock_guard<std::mutex> lock(mtx);
data.push_back(i);
}
}
void consumer() {
while (true) {
std::lock_guard<std::mutex> lock(mtx);
if (data.empty()) {
// Ждём данные...
std::this_thread::sleep_for(
std::chrono::milliseconds(10));
continue;
}
std::cout << data.back() << "\n";
data.pop_back();
}
}
Вопрос: что не так с
consumer()? Почему lock_guard здесь — плохой выбор и как это исправить?📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2🥱2❤1
📰 Свеженькое из мира C++
Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.
😎 Интересное:
• 7 игр сделанных на Unigine Engine — на Unigine Engine всё же пишут игры
• Хочешь работать на зарубежную компанию из России? — советы по поиску работы за рубежом
• Почему std::this_thread::sleep_for не гарантирует точную паузу? — разбираемся почему
📙 Ranges:
• Вложенные диапазоны: views::join и views::join_with
• Ranges: другие полезные адаптеры
🔹📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#свежак
Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.
😎 Интересное:
• 7 игр сделанных на Unigine Engine — на Unigine Engine всё же пишут игры
• Хочешь работать на зарубежную компанию из России? — советы по поиску работы за рубежом
• Почему std::this_thread::sleep_for не гарантирует точную паузу? — разбираемся почему
sleep_for(100ms) это гарантия минимального времени ожидания, но не точного📙 Ranges:
• Вложенные диапазоны: views::join и views::join_with
• Ranges: другие полезные адаптеры
🔹📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#свежак
👍1
Forwarded from Библиотека задач по C++ | тесты, код, задания
Forwarded from Библиотека задач по C++ | тесты, код, задания
🌚3😁1
До 31 мая можно забрать любой курс Proglib Academy со скидкой 40%
Если давно хотели прокачаться в Python, ML, алгоритмах или AI-агентах, сейчас самое время выбрать программу и начать обучение по сниженной цене.
🎁 Разработка AI-агентов — от 49.000 ₽ (вместо 69.000 ₽)
Практический курс по разработке AI-агентов для автоматизации задач, работы и собственных проектов
🎁 Курс AgentOps — 129.000 ₽ (вместо 149.000 ₽)
Для разработчиков и LLM-инженеров, которые хотят внедрять AI-логику в бэкенд и сохранять стабильность сервиса.
🎁 Математика для разработки AI-моделей — 23.990 ₽ (вместо 31.990 ₽)
Практическая база по математике для анализа данных, ML и дальнейшего развития в AI.
🎁 Математика для Data Science — от 29.990 ₽ (вместо 39.990 ₽)
Курс для тех, кто хочет решать задачи, которые дают на собеседованиях на позицию дата-сайентиста в бигтехе.
🎁 ML для старта в Data Science — 28.990 ₽ (вместо 38.990 ₽)
Разберётесь в машинном обучении: от базовых понятий и линейных моделей до ансамблей, бустинга и рекомендательных систем.
🎁 Основы IT для непрограммистов — 16.990 ₽ (вместо 28.990 ₽)
Курс для IT-рекрутеров, маркетологов, проджектов, продактов и всех, кто работает с IT, но не пишет код.
🎁 Архитектуры и шаблоны проектирования — 27.990 ₽ (вместо 37.900 ₽)
Освоите основные паттерны проектирования и прокачаете навыки архитектора программного обеспечения.
🎁 Специалист по ИИ — 89.000 ₽ (вместо 113.900 ₽)
Курс для тех, кто хочет получить профессию в сфере ИИ, собрать портфолио из 5 проектов и научиться разрабатывать сложных AI-агентов.
🎁 Алгоритмы и структуры данных — 33.990 ₽ (вместо 57.990 ₽)
Подготовитесь к алгоритмическим собеседованиям, разберёте структуры данных и научитесь писать более эффективный код.
🎁 Программирование на языке Python — 27.990 ₽ (вместо 47.390 ₽)
Освоите Python на практике: без сухой теории, с пошаговой прокачкой навыков и итоговым проектом в портфолио.
🙌 Выбирайте курс по ссылке, оставляйте заявку, и менеджер поможет подобрать программу под ваши цели — https://clc.to/GHcYlg
Если давно хотели прокачаться в Python, ML, алгоритмах или AI-агентах, сейчас самое время выбрать программу и начать обучение по сниженной цене.
🎁 Разработка AI-агентов — от 49.000 ₽ (вместо 69.000 ₽)
Практический курс по разработке AI-агентов для автоматизации задач, работы и собственных проектов
🎁 Курс AgentOps — 129.000 ₽ (вместо 149.000 ₽)
Для разработчиков и LLM-инженеров, которые хотят внедрять AI-логику в бэкенд и сохранять стабильность сервиса.
🎁 Математика для разработки AI-моделей — 23.990 ₽ (вместо 31.990 ₽)
Практическая база по математике для анализа данных, ML и дальнейшего развития в AI.
🎁 Математика для Data Science — от 29.990 ₽ (вместо 39.990 ₽)
Курс для тех, кто хочет решать задачи, которые дают на собеседованиях на позицию дата-сайентиста в бигтехе.
🎁 ML для старта в Data Science — 28.990 ₽ (вместо 38.990 ₽)
Разберётесь в машинном обучении: от базовых понятий и линейных моделей до ансамблей, бустинга и рекомендательных систем.
🎁 Основы IT для непрограммистов — 16.990 ₽ (вместо 28.990 ₽)
Курс для IT-рекрутеров, маркетологов, проджектов, продактов и всех, кто работает с IT, но не пишет код.
🎁 Архитектуры и шаблоны проектирования — 27.990 ₽ (вместо 37.900 ₽)
Освоите основные паттерны проектирования и прокачаете навыки архитектора программного обеспечения.
🎁 Специалист по ИИ — 89.000 ₽ (вместо 113.900 ₽)
Курс для тех, кто хочет получить профессию в сфере ИИ, собрать портфолио из 5 проектов и научиться разрабатывать сложных AI-агентов.
🎁 Алгоритмы и структуры данных — 33.990 ₽ (вместо 57.990 ₽)
Подготовитесь к алгоритмическим собеседованиям, разберёте структуры данных и научитесь писать более эффективный код.
🎁 Программирование на языке Python — 27.990 ₽ (вместо 47.390 ₽)
Освоите Python на практике: без сухой теории, с пошаговой прокачкой навыков и итоговым проектом в портфолио.
🙌 Выбирайте курс по ссылке, оставляйте заявку, и менеджер поможет подобрать программу под ваши цели — https://clc.to/GHcYlg
❤2😁1
Продолжаем разбираться в диапазонах
std::ranges::* — это переработанные алгоритмы из <algorithm>. Они принимают диапазоны целиком (не нужно писать begin/end) и поддерживают проекции.std::vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6};
// Найти первый элемент, равный 4
auto it = std::ranges::find(v, 4);
if (it != v.end()) {
std::cout << "Найдено: " << *it << "\n"; // 4
}
// Найти первый элемент, удовлетворяющий условию
auto it2 = std::ranges::find_if(v, [](int x) { return x > 5; });
// указывает на 9end(), если ничего не найдено. В отличие от классического std::find, диапазонная версия принимает контейнер целиком — никаких v.begin(), v.end().↗️ ranges::all_of / any_of / none_of — проверки на весь диапазонstd::vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6};
bool all_positive = std::ranges::all_of(v, [](int x) { return x > 0; });
// true — все элементы положительные
bool any_gt_8 = std::ranges::any_of(v, [](int x) { return x > 8; });
// true — есть 9
bool none_neg = std::ranges::none_of(v, [](int x) { return x < 0; });
// true — отрицательных нетТри алгоритма, одна идея: проверить предикат на всём диапазоне. Ленивые —
all_of остановится на первом false, any_of — на первом true.auto count_ones = std::ranges::count(v, 1); // 2
auto count_big = std::ranges::count_if(v, [](int x) { return x > 5; }); // 2 (9, 6)
count — точное совпадение, count_if — по предикату. Возвращают std::ranges::range_difference_t, а не int — на практике это обычно ptrdiff_t.🍪 ranges::minmax_element — минимум и максимум за один проходauto [min_it, max_it] = std::ranges::minmax_element(v);
std::cout << *min_it << " " << *max_it; // 1 9
Возвращает пару итераторов
{min, max}. Один проход вместо двух отдельных вызовов min_element + max_element. Structured bindings (auto [min_it, max_it]) делают код чище.ranges::min_element и ranges::max_element по отдельности. А ranges::min / ranges::max возвращают копию значения (не итератор и не ссылку) — учитывайте это для тяжёлых объектов.struct Person {
std::string name;
int age;
};
std::vector<Person> people = {{"Алиса", 30}, {"Борис", 25}, {"Вера", 35}};
// Найти человека по имени — без лямбды!
auto it = std::ranges::find(people, "Борис", &Person::name);
// it->age == 25
// Самый молодой
auto youngest = std::ranges::min_element(people, {}, &Person::age);
// youngest->name == "Борис"
// Все ли совершеннолетние?
bool all_adults = std::ranges::all_of(people, [](int a) { return a >= 18; }, &Person::age);Проекция — третий (или четвёртый) аргумент. Она «извлекает» нужное поле перед сравнением. Больше не нужно писать громоздкие лямбды вида
[](const Person& p) { return p.age; } — достаточно &Person::age.find мы передаём std::string{"Борис"}, а не строковый литерал. Литерал "Борис" имеет тип const char*, и хотя неявное преобразование в std::string здесь сработает, явная конструкция делает намерение очевидным.std::map<std::string, std::vector<int>> data = {
{"alpha", {1, 2, 3}},
{"beta", {4, 5}},
{"gamma", {6, 7, 8, 9}},
};
// Сколько значений больше 5 во всех векторах?
auto all_values = data | views::values | views::join;
auto count = std::ranges::count_if(all_values, [](int x) { return x > 5; });
// 4 (6, 7, 8, 9)views::values извлекает вторые элементы пар (векторы), а views::join разворачивает один уровень вложенности — склеивает все векторы в единый плоский диапазон. Результат можно передать в любой ranges-алгоритм.📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#константная_правильность
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤2😢1
🤝 Как уволиться грамотно: 8 шагов, чтобы закрыть все вопросы
Если мысль «надо уходить» появляется каждое утро, скорее всего, пора. Но между «хочу уйти» и «ушел грамотно» целая пропасть. Разбираем 8 шагов, которые помогут уйти без скандала, с рекомендациями и чистой совестью.
👉 Подробнее...
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
Если мысль «надо уходить» появляется каждое утро, скорее всего, пора. Но между «хочу уйти» и «ушел грамотно» целая пропасть. Разбираем 8 шагов, которые помогут уйти без скандала, с рекомендациями и чистой совестью.
👉 Подробнее...
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
😁4💯3❤2
⚡️ Знакомьтесь с экспертом Proglib Academy: AI-архитектор Антон Будняк
Антон — мастер превращения сырых AI-идей в отказоустойчивые системы. Он знает, как запустить MVP за неделю и масштабировать его так, чтобы архитектура не рассыпалась под нагрузкой в сотни тысяч юзеров.
За что его ценит IT-комьюнити:
🟣 Опыт в финтехе и крупном бизнесе
🟣 Запуск продуктов на 6.000+ пользователей
🟣 Ускоряет разработку
📚 Где Антон черпает знания (рекомендации эксперта):
- X* — главный источник новостей. Рекомендую блог Бориса Черни (создателя Claude Code) — там база про использование ИИ в разработке.
- Нетворкинг в ТГ: чаты LLM под капотом и AI-чат — здесь можно найти ответ почти на любой технический вопрос.
- Новости AI: каналы Сиолошная и Denis Sexy IT.
На курсе Agentops Антон учит строить «неубиваемый» бэкенд: работать с очередями, таймаутами и балансировкой нагрузки, чтобы ваши агенты работали стабильно 24/7.
🎁 Майские СКИДКИ в Proglib Academy!
До конца мая на все курсы академии (включая AgentOps и разработку ИИ-агентов) действует скидка -40%. Это лучший момент, чтобы войти в AI-разработку под присмотром практиков.
Узнать больше о программе и обучении у Антона:
👉 Курс о том, как внедрять AI-логику в бэкенд и сохранять стабильность сервиса
Продолжаем знакомить вас с командой?
👍 — Да, ждем новых лиц
🔥 — Пойду подпишусь на каналы из списка Антона
🏃♀️ Proglib Academy
* - запрещен в рф
Антон — мастер превращения сырых AI-идей в отказоустойчивые системы. Он знает, как запустить MVP за неделю и масштабировать его так, чтобы архитектура не рассыпалась под нагрузкой в сотни тысяч юзеров.
За что его ценит IT-комьюнити:
Руководил разработкой ML-моделей в финтехе с экономическим эффектом более 100 млн ₽
Антон строит сервисы, которыми пользуются тысячи людей в реальном проде.
Оптимизировал ML-пайплайны и кратно сократил время от начала разработки до релиза
📚 Где Антон черпает знания (рекомендации эксперта):
- X* — главный источник новостей. Рекомендую блог Бориса Черни (создателя Claude Code) — там база про использование ИИ в разработке.
- Нетворкинг в ТГ: чаты LLM под капотом и AI-чат — здесь можно найти ответ почти на любой технический вопрос.
- Новости AI: каналы Сиолошная и Denis Sexy IT.
На курсе Agentops Антон учит строить «неубиваемый» бэкенд: работать с очередями, таймаутами и балансировкой нагрузки, чтобы ваши агенты работали стабильно 24/7.
🎁 Майские СКИДКИ в Proglib Academy!
До конца мая на все курсы академии (включая AgentOps и разработку ИИ-агентов) действует скидка -40%. Это лучший момент, чтобы войти в AI-разработку под присмотром практиков.
Узнать больше о программе и обучении у Антона:
👉 Курс о том, как внедрять AI-логику в бэкенд и сохранять стабильность сервиса
Продолжаем знакомить вас с командой?
👍 — Да, ждем новых лиц
🔥 — Пойду подпишусь на каналы из списка Антона
* - запрещен в рф
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3😁3🥱3👍2🎉2
C++20 разрешил использовать
new и delete в constexpr-функциях. Звучит дико — как можно аллоцировать память, если программа ещё не запущена?constexpr int sum() {
int* p = new int(42);
int result = *p;
delete p;
return result;
}
constexpr int x = sum(); // OK в C++20new создаёт объект в памяти интерпретатора, delete помечает его как освобождённый. Никакой реальной аллокации не происходит.constexpr-контексте, должна быть освобождена до выхода из этого контекста. Нельзя «пронести» указатель в runtime:constexpr int* leak() {
return new int(42); // Ошибка: non-transient allocation
}constexpr std::vector работает: вектор аллоцирует в compile-time, используется, и деструктор освобождает. Но нельзя создать constexpr std::vector как глобальную переменную — деструктор вызовется, данные не переживут компиляцию.📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9👏1🤔1😢1
Forwarded from Библиотека собеса по C++ | вопросы с собеседований
Что такое «срезка объекта» (object slicing) в контексте ошибок C++?
Anonymous Quiz
13%
Обрезание массива до указателя
18%
Удаление части памяти объекта
7%
Разрушение виртуальной таблицы
60%
Потеря данных производного класса
2%
Потеря константности объекта
👍2❤1🤔1
Forwarded from Азбука айтишника
🎓 Халява для новичков: Бесплатная база по Python и C++ с тонной практики
Забирайте отличный микросборник полностью бесплатных курсов на Stepik, где вас заставят кодить с первых минут.
👉 Забираем в закладки:
- C++
- Python
🔹 Курс «Программирование на языке Python»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🏃♀️ Азбука айтишника
#магиякода
Забирайте отличный микросборник полностью бесплатных курсов на Stepik, где вас заставят кодить с первых минут.
Python: Мощный упор на практику 210 тестов и 243 интерактивные задачи. Программа построена грамотно: вас проведут от стартовой настройки PyCharm, систем счисления и таблицы ASCII через нюансы типа Decimal к серьезной работе с матрицами в NumPy и функциональным встроенным инструментам вроде map(), filter() и reduce().з
C++: Тоже не дадут расслабиться внутри 205 тестов и 197 интерактивных задач для жесткой прокачки синтаксиса и алгоритмического мышления.
👉 Забираем в закладки:
- C++
- Python
🔹 Курс «Программирование на языке Python»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#магиякода
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2🔥2👏1
👀 Практический курс «Разработка AI-агентов для автоматизации задач, работы и собственных проектов» со скидкой 40% до конца мая!
Мы поговорили с десятками разработчиков, учли главные боли индустрии и запускаем полностью обновленный курс «ИИ-агенты 5.0». 🎉
Что вы узнаете?
- Как радикально оптимизировать траты на токены.
- Как на практике оценивать качество и точность работы агента.
- Как «докручивать» RAG-системы без потери качества.
- Как обеспечить устойчивость агента к сбоям внешних сервисов без падения всей системы, и про многое-многое другое.
Спикеры — практики с опытом в AI и Data Science в крупных IT-компаниях, таких как Яндекс, Сбер, Raft и Газпромбанк др.
Длительность: 6–12 недель в зависимости от тарифа.
👉 Занимайте место на главном агентском интенсиве по лучшей цене
Мы поговорили с десятками разработчиков, учли главные боли индустрии и запускаем полностью обновленный курс «ИИ-агенты 5.0». 🎉
Что вы узнаете?
- Как радикально оптимизировать траты на токены.
- Как на практике оценивать качество и точность работы агента.
- Как «докручивать» RAG-системы без потери качества.
- Как обеспечить устойчивость агента к сбоям внешних сервисов без падения всей системы, и про многое-многое другое.
Спикеры — практики с опытом в AI и Data Science в крупных IT-компаниях, таких как Яндекс, Сбер, Raft и Газпромбанк др.
Длительность: 6–12 недель в зависимости от тарифа.
👉 Занимайте место на главном агентском интенсиве по лучшей цене
❤1
Продолжаем серию о диапазонах — на очереди сортировка 🙂
Напомню:
std::ranges::* принимают диапазоны целиком и поддерживают проекции. Если пропустили предыдущий пост про алгоритмы поиска — начните с него.std::vector<int> v = {5, 3, 1, 4, 2};
std::ranges::sort(v); // {1, 2, 3, 4, 5}
std::ranges::sort(v, std::greater{}); // {5, 4, 3, 2, 1}Один аргумент вместо пары итераторов. Второй аргумент — компаратор:
std::greater{} для сортировки по убыванию, {} (или ничего) — по возрастанию.ranges::sort требует random access range — std::vector, std::array, std::deque подойдут, а std::list — нет (для него есть метод list::sort()).struct Task {
std::string name;
int priority;
};
std::vector<Task> tasks = {
{"Почта", 2}, {"Код", 1}, {"Тесты", 2}, {"Деплой", 1}
};
std::ranges::stable_sort(tasks, {}, &Task::priority);
// {{"Код", 1}, {"Деплой", 1}, {"Почта", 2}, {"Тесты", 2}}
// Элементы с одинаковым priority сохранили исходный порядокЕсли два элемента «равны» по компаратору,
stable_sort гарантирует, что их взаимный порядок останется таким же, как в исходном диапазоне. Обычный sort такой гарантии не даёт.std::vector<int> v = {5, 3, 1, 4, 2};
std::ranges::partial_sort(v, v.begin() + 3);
// {1, 2, 3, ?, ?} — первые три отсортированы, остальные в произвольном порядкеПолезно, когда нужен «топ-N» без затрат на полную сортировку. Сложность O(N·log(K)) вместо O(N·log(N)), где K — количество нужных элементов.
std::vector<int> v = {5, 3, 1, 4, 2};
std::vector<int> top3(3); // буфер под результат
std::ranges::partial_sort_copy(v, top3);
// top3 == {1, 2, 3}
// v не изменился: {5, 3, 1, 4, 2}Работает как partial_sort, но не трогает исходный диапазон — результат пишется в отдельный контейнер. Размер приёмника определяет K (сколько элементов попадёт в «топ»). Удобно, когда исходные данные нельзя модифицировать.
// Топ-2 самых старших — без изменения исходного вектора
std::vector<Person> oldest(2);
std::ranges::partial_sort_copy(people, oldest, std::greater{}, &Person::age);
std::vector<int> v = {5, 3, 1, 4, 2};
std::ranges::nth_element(v, v.begin() + 2);
// v[2] == 3 (медиана)
// Все элементы слева <= 3, справа >= 3, но внутри групп порядок произвольныйЭлемент на позиции N оказывается тем же, что стоял бы там после полной сортировки. Идеален для поиска медианы или перцентилей. Средняя сложность — O(N).
std::vector<int> a = {1, 2, 3, 4, 5};
std::vector<int> b = {1, 3, 2, 4, 5};
bool ok1 = std::ranges::is_sorted(a); // true
bool ok2 = std::ranges::is_sorted(b); // false
// Найти, где порядок нарушается
auto it = std::ranges::is_sorted_until(b);
// *it == 2 — первый элемент, нарушающий порядокis_sorted — быстрая проверка перед бинарным поиском или мержем. is_sorted_until возвращает итератор на первый элемент, который «ломает» порядок.struct Person {
std::string name;
int age;
};
std::vector<Person> people = {{"Алиса", 30}, {"Борис", 25}, {"Вера", 35}};
// Сортировка по возрасту — без лямбды
std::ranges::sort(people, {}, &Person::age);
// {{"Борис", 25}, {"Алиса", 30}, {"Вера", 35}}
// По убыванию возраста
std::ranges::sort(people, std::greater{}, &Person::age);
// Топ-2 самых старших
std::ranges::partial_sort(people, people.begin() + 2, std::greater{}, &Person::age);is_sorted — быстрая проверка перед бинарным поиском или мержем. is_sorted_until возвращает итератор на первый элемент, который «ломает» порядок.{} на месте компаратора означает std::less{} по умолчанию.📍Навигация: Вакансии • Задачи • Собесы • Канал в Max
Библиотека C/C++ разработчика
#константная_правильность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
🚨 8 признаков, что тебя готовят к увольнению
В IT не принято говорить прямо. Поэтому вместо честного разговора тебе просто перестают давать важные задачи, убирают с ключевых встреч и начинают «оптимизировать расходы». Мы собрали 8 признаков, что компания уже приняла решение и просто ждет удобного момента.
👉 Подробнее...
📍Навигация: Вакансии • Задачи • Собесы • Канал в Max
Библиотека C/C++ разработчика
#буст
В IT не принято говорить прямо. Поэтому вместо честного разговора тебе просто перестают давать важные задачи, убирают с ключевых встреч и начинают «оптимизировать расходы». Мы собрали 8 признаков, что компания уже приняла решение и просто ждет удобного момента.
👉 Подробнее...
📍Навигация: Вакансии • Задачи • Собесы • Канал в Max
Библиотека C/C++ разработчика
#буст
🌚1