⁉Хотите прокачаться в разработке на С++?
Ждём вас на открытом практическом уроке «Условные переменные в С++» от OTUS, где мы разберем:
— что такое std::condition_variable и какие задачи он решает;
— типовые ошибки при его использовании;
— что такое spurious wakeup.
А также напишем несколько concurrency-примитивов на основе condition_variable.
Спикер — ведущий программист с большим международным опытом.
⏰Встречаемся 11 июня в 20:00 мск в преддверии старта курса «C++ Developer. Professional». Все участники вебинара получат специальную цену на обучение и консультацию от менеджеров OTUS!
➡Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок: РЕГИСТРАЦИЯ
Ждём вас на открытом практическом уроке «Условные переменные в С++» от OTUS, где мы разберем:
— что такое std::condition_variable и какие задачи он решает;
— типовые ошибки при его использовании;
— что такое spurious wakeup.
А также напишем несколько concurrency-примитивов на основе condition_variable.
Спикер — ведущий программист с большим международным опытом.
⏰Встречаемся 11 июня в 20:00 мск в преддверии старта курса «C++ Developer. Professional». Все участники вебинара получат специальную цену на обучение и консультацию от менеджеров OTUS!
➡Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок: РЕГИСТРАЦИЯ
➡️ Пользовательские литералы
C++ Learning 👩💻
• По большей части это будут какие-нибудь реальные единицы, такие как kb, mb, км, см, рубли, доллары, евро и т.д. Пользовательские литералы позволяют вам не определять функции, для выполнения преобразования единиц измерения во время выполнения, а работать с ним как с другими примитивными типами.• Очень удобно для единиц и измерения.• Благодаря добавлению constexpr вы можете добиться нулевого влияния на производительность во время выполнения.C++ Learning 👩💻
⚡️В сети начали находить курсы и книги известных онлайн школ в открытом доступе
Вот отсортированная база с тонной материала(постепенно пополняется):
🔗 БАЗА (3385 видео):
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(352 видео, 89 книги) — С++
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL
(163 видео, 29 книги) — Linux
(363 видео, 122 книги) — Python
(415 видео, 168 книги) — Frontend
(143 видео, 33 книги) — Flask
(167 видео, 43 книги) — Django
(197 видео, 49 книги) — Разработка ботов
(137 видео, 93 книги) — Data Science
(113 видео, 82 книги) — GameDev
(129 видео, 73 книги) — QA
Скачивать ничего не нужно — все выложили в Telegram и на YouTube с доступом по ссылке
Вот отсортированная база с тонной материала(постепенно пополняется):
🔗 БАЗА (3385 видео):
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(352 видео, 89 книги) — С++
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL
(163 видео, 29 книги) — Linux
(363 видео, 122 книги) — Python
(415 видео, 168 книги) — Frontend
(143 видео, 33 книги) — Flask
(167 видео, 43 книги) — Django
(197 видео, 49 книги) — Разработка ботов
(137 видео, 93 книги) — Data Science
(113 видео, 82 книги) — GameDev
(129 видео, 73 книги) — QA
Скачивать ничего не нужно — все выложили в Telegram и на YouTube с доступом по ссылке
➡️ Циклы for по диапазону
C++ Learning 👩💻
• Синтаксический сахар для перебора элементов контейнера.std::array<int, 5> a {1, 2, 3, 4, 5};
for (int& x : a) x *= 2;
// a == { 2, 4, 6, 8, 10 }
• Обратите внимание на разницу при использовании int в противовес int&:std::array<int, 5> a {1, 2, 3, 4, 5};
for (int x : a) x *= 2;
// a == { 1, 2, 3, 4, 5 }C++ Learning 👩💻
➡️ Приведение типов
C++ Learning 👩💻
• Приведение в стиле C изменяет только тип, не затрагивая сами данные. В то время как старый C++ имел небольшой уклон в типобезопасность, он предоставлял фичу указания оператора/функции преобразования типа.• Но это было неявное преобразование типов. Начиная с C++11, функции преобразования типов теперь можно сделать явными с помощью спецификатора explicit следующим образом:struct demo
{
explicit operator bool() const { return true; }
};
demo d;
if (d); // OK, вызывает demo::operator bool()
bool b_d = d; // ОШИБКА: не может преобразовать 'demo' в 'bool' во время инициализации
bool b_d = static_cast<bool>(d); // OK, явное преобразование, вы знаете, что делаете
• Если приведенный выше код кажется вам странным, то можете прочитать подробный разбор этой темы — “Приведение типов в С++”.C++ Learning 👩💻
This media is not supported in your browser
VIEW IN TELEGRAM
Yandex DEVent PRO в Питере
Это серия офлайн-митапов для опытных бэкендеров от команды Поиска и Рекламных технологий. Здесь можно в закрытом формате познакомиться с лидами из других команд, обменяться опытом и пообщаться.
В этот раз митап пройдёт в Санкт-Петербурге 19 июня: будет настоящее раздолье для нетворкинга, а ещё обсуждение горячих и спорных тем по разработке в формате speed dating.
Спикеры и доклады:
🟡Константин Гудков, руководитель группы разработки Feature store. Расскажет о процессе создания Feature Store — интерфейса для работы с данными, который используется ML-моделями в Рекламе
🟡Сергей Скворцов, руководитель службы поискового райнтайма. Обсудит, как анализировать производительность нативных программ под Linux под нагрузкой с помощью Perforator
🟡Николай Савушкин, руководитель службы рекомендательных технологий. Расскажет о Real-time processing в рекомендательных системах Яндекса
А после докладов вас ждёт афтерпати: кальяны, аэрохоккей и прочие активности!
Узнать подробную информацию и...
Это серия офлайн-митапов для опытных бэкендеров от команды Поиска и Рекламных технологий. Здесь можно в закрытом формате познакомиться с лидами из других команд, обменяться опытом и пообщаться.
В этот раз митап пройдёт в Санкт-Петербурге 19 июня: будет настоящее раздолье для нетворкинга, а ещё обсуждение горячих и спорных тем по разработке в формате speed dating.
Спикеры и доклады:
🟡Константин Гудков, руководитель группы разработки Feature store. Расскажет о процессе создания Feature Store — интерфейса для работы с данными, который используется ML-моделями в Рекламе
🟡Сергей Скворцов, руководитель службы поискового райнтайма. Обсудит, как анализировать производительность нативных программ под Linux под нагрузкой с помощью Perforator
🟡Николай Савушкин, руководитель службы рекомендательных технологий. Расскажет о Real-time processing в рекомендательных системах Яндекса
А после докладов вас ждёт афтерпати: кальяны, аэрохоккей и прочие активности!
Узнать подробную информацию и...
➡️ Удаленные и дефолтные функции
🗣️ В старом С++ вы должны были сделать его приватным. Но теперь в вашем распоря...
struct demo
{
demo() = default;
};
demo d;
• У вас вполне закономерно может возникнуть вопрос, зачем вам писать 8+ букв (т.е. = default;), когда можно просто использовать {}, т.е. пустой конструктор? Никто вас не останавливает. Но подумай о конструкторе копирования, операторе копирования присваиванием, и т.д.• Пустой конструктор копирования, например, не то же самое, что конструктор копирования по умолчанию (который будет выполнять почленную копию всех членов).• Вы можете ограничить определенную операцию или способ инстанцирования объекта, просто удалив соответствующий метод, как показано ниже:class demo
{
int m_x;
public:
demo(int x) : m_x(x){};
demo(const demo &) = delete;
demo &operator=(const demo &) = delete;
};
demo obj1{123};
demo obj2 = obj1; // ОШИБКА -- вызов удаленного конструктора копирования
obj2 = obj1; // ОШИБКА -- оператор = удален
🗣️ В старом С++ вы должны были сделать его приватным. Но теперь в вашем распоря...
➡️ Делегирование конструкторов
C++ Learning 👩💻
• В старом C++ вам нужно создавать функцию-член для инициализации и вызывать ее из всех конструкторов для достижения универсально инициализации.• Но начиная с C++11 конструкторы теперь могут вызывать другие конструкторы из того же класса с помощью списка инициализаторов.C++ Learning 👩💻
➡️ Диапазоны и итераторы в C++
C++ Learning 👩💻
• В C++ стандартная библиотека шаблонов (STL) предоставляет мощные инструменты для работы с коллекциями данных.• Диапазоны и итераторы позволяют вам легко и эффективно перебирать элементы контейнеров, таких как векторы, списки и множества.• Использование диапазонов и итераторов делает код более чистым и читаемым, упрощает операции перебора и модификации элементов контейнеров.C++ Learning 👩💻
➡️ Концепты (Concepts) в C++
Концепты - это новая возможность в C++20, которая позволяет задавать ограничения на шаблонные параметры. Это позволяет писать более безопасный и читаемый код, поскольку компилятор проверяет соответствие типов требованиям концептов на этапе компиляции.
Использование функции add:
C++ Learning 👩💻
Концепты - это новая возможность в C++20, которая позволяет задавать ограничения на шаблонные параметры. Это позволяет писать более безопасный и читаемый код, поскольку компилятор проверяет соответствие типов требованиям концептов на этапе компиляции.
• template<typename T> concept Arithmetic = std::is_arithmetic_v<T>; определяет концепт Arithmetic, который ограничивает типы, для которых значение std::is_arithmetic_v<T> истинно (т.е. типы, которые являются арифметическими).• template<Arithmetic T> T add(const T& a, const T& b) определяет шаблонную функцию add, которая будет компилироваться только для типов, удовлетворяющих концепту Arithmetic.Использование функции add:
• Примеры с целыми числами и числами с плавающей запятой успешно вызывают функцию add.
• Пример со строками (закомментированный) вызовет ошибку компиляции, так как std::string не является арифметическим типом.C++ Learning 👩💻
➡️ Модули (Modules) в C++
Модули - это система сборки и организации кода, представленная в C++20.
C++ Learning 👩💻
Модули - это система сборки и организации кода, представленная в C++20.
• Они улучшают компиляцию и организацию кода, предоставляя более четкий и эффективный способ управления зависимостями.
• Модули заменяют использование препроцессорных директив #include, улучшая время компиляции и предотвращая проблемы с зависимостями и макросами.
• Модули значительно сокращают время компиляции по сравнению с традиционными заголовочными файлами, так как они компилируются только один раз.
• Модули предотвращают проблемы, связанные с макросами и конфликтами имен, поскольку они предоставляют четкие границы и изолированные области видимости.
• Модули упрощают управление зависимостями и организацию кода, что делает проекты более поддерживаемыми и масштабируемыми.C++ Learning 👩💻
➡️ Погружаемся в мир асинхронного программирования: корутины в C++
Корутины — это функции, которые могут приостанавливать своё выполнение и возобновлять его позже, сохраняя своё состояние. Это полезно для написания асинхронного кода, ленивых вычислений и генераторов.
C++ Learning 👩💻
Корутины — это функции, которые могут приостанавливать своё выполнение и возобновлять его позже, сохраняя своё состояние. Это полезно для написания асинхронного кода, ленивых вычислений и генераторов.
• Корутины облегчают написание асинхронного кода без сложных состояний и обратных вызовов.• Корутины позволяют реализовать ленивые вычисления и генераторы данных.• Код, использующий корутины, часто более читаемый и поддерживаемый, так как логика остается последовательной.C++ Learning 👩💻
➡️ Взламываем многопоточность: atomic_ref в C++
C++20 представил возможность для управления многопоточностью:
C++ Learning 👩💻
C++20 представил возможность для управления многопоточностью:
atomic_ref.• atomic_ref обеспечивает безопасное многопоточное доступ к данным.• Использование атомарных операций позволяет избежать блокировок и улучшить производительность программы.• Использование atomic_ref снижает вероятность ошибок в многопоточном коде.C++ Learning 👩💻
👱🏻♀️Как легко знакомиться с реально классными девушками?
Знакомиться на улицах сейчас — это как звонить другу на домашний телефон. В теории работает, но на практике уже неадекватно.
Какова вероятность, что достойная девушка для отношений попадется тебе в метро?
Вроде, достойные девушки и существуют, но как будто где-то в параллельной реальности с тобой, лишь изредка пересекаясь.
Лови простой лайфхак:
Ты боишься знакомства не потому, что не можешь сказать «привет». А потому, что понятия не имеешь что делать в следующие 5-10 минут и будешь просто щелкать еб@лом. А у тебя тут всего две простых задачи:
— Продемонстрировать свою ценность
— Выстроить нужный контекст общения
Заметь в ней что-то уникальное и свяжи это с историей из своей жизни. Например:
— Привет, я случайно увидел тебя и обратил внимание на твои очки. Тебе идут, я тоже раньше носил такие, чтобы казаться старше, когда только начинал преподавать…
Звучит сложно. Однако на канале Творчество Чувств опытный психолог раскладывает это по поло...
Знакомиться на улицах сейчас — это как звонить другу на домашний телефон. В теории работает, но на практике уже неадекватно.
Какова вероятность, что достойная девушка для отношений попадется тебе в метро?
Вроде, достойные девушки и существуют, но как будто где-то в параллельной реальности с тобой, лишь изредка пересекаясь.
Лови простой лайфхак:
Ты боишься знакомства не потому, что не можешь сказать «привет». А потому, что понятия не имеешь что делать в следующие 5-10 минут и будешь просто щелкать еб@лом. А у тебя тут всего две простых задачи:
— Продемонстрировать свою ценность
— Выстроить нужный контекст общения
Заметь в ней что-то уникальное и свяжи это с историей из своей жизни. Например:
— Привет, я случайно увидел тебя и обратил внимание на твои очки. Тебе идут, я тоже раньше носил такие, чтобы казаться старше, когда только начинал преподавать…
Звучит сложно. Однако на канале Творчество Чувств опытный психолог раскладывает это по поло...
➡️ Smart Pointers в C++
Smart Pointers - это мощный инструмент в C++, предоставляющий автоматическое управление памятью и избавляющий от проблем с утечкой памяти. Давайте рассмотрим, как они работают.
C++ Learning 👩💻
Smart Pointers - это мощный инструмент в C++, предоставляющий автоматическое управление памятью и избавляющий от проблем с утечкой памяти. Давайте рассмотрим, как они работают.
• Автоматическое освобождение памяти при выходе из области видимости, что предотвращает утечки памяти.• Уменьшение возможности ошибок в управлении памятью, таких как двойное удаление или использование нулевого указателя.• Простота и удобство в использовании, так как умные указатели работают подобно обычным указателям.C++ Learning 👩💻
➡️ Путь к эффективности: Range-based for loop в C++
Range-based for loop — это мощный инструмент в C++, который позволяет перебирать элементы контейнера более эффективно и удобно.
C++ Learning 👩💻
Range-based for loop — это мощный инструмент в C++, который позволяет перебирать элементы контейнера более эффективно и удобно.
• Код становится более понятным и лаконичным благодаря использованию Range-based for loop.• Повышается безопасность кода за счет автоматического предотвращения выхода за пределы контейнера.• Автоматически оптимизируется компилятором для достижения лучшей производительности.C++ Learning 👩💻
➡️ Захват переменных по перемещению в C++
C++14 добавила полезную возможность для работы с лямбда-выражениями — захват переменных по перемещению (Capture by Move). Эта фишка позволяет вам захватывать объекты без копирования, что особенно полезно для объектов, которые дорого копировать.
C++ Learning 👩💻
C++14 добавила полезную возможность для работы с лямбда-выражениями — захват переменных по перемещению (Capture by Move). Эта фишка позволяет вам захватывать объекты без копирования, что особенно полезно для объектов, которые дорого копировать.
• Уменьшает накладные расходы, связанные с копированием объектов, особенно для объектов, копирование которых дорого.• Использование семантики перемещения улучшает производительность и снижает потребление ресурсов.• Лямбда-выражения с захватом по перемещению позволяют создавать более гибкие и мощные функциональные объекты.C++ Learning 👩💻
⭐️ Хакатон ARCHI.Tech от ВТБ – уникальный шанс сделать проект в роли ИТ-архитектора. Приглашаем начинающих и опытных ИТ-специалистов – студентов и выпускников технических вузов, разработчиков, архитекторов, аналитиков.
🔹 Выбирайте задачу любого уровня — простую, среднюю или сложную
🔹 Собирайте архитектурные артефакты, спрятанные в заданиях, и зарабатывайте баллы
🔹 Презентуйте свои решения экспертам ВТБ
🔹 Не упустите возможность решить «разминочную» задачу и получить дополнительные баллы
🔹 Заработанные баллы, найденные артефакты и коэффициент сложности задачи помогут определить победителей
🔹 Три категории: «Архитектор стрима», «Архитектор системы» и «Архитектор данных»…
🔹… и три призовых места в каждой
🔹 Лучшие из лучших разделят призовой фонд в 1 200 000 рублей!
Начало предварительного этапа – 14 июня. Соревнование стартует 28 июня – у участников будет 24 часа на решение задачи.
👉 Продемонстрируй свои знания об архитектуре – участвуй в ARCHI.Tech от ВТБ: https://cnrlink.com/architechvtbclearn
Реклама. БАНК ВТБ (ПАО). ИНН 7702070139. erid: LjN8KRDYP
🔹 Выбирайте задачу любого уровня — простую, среднюю или сложную
🔹 Собирайте архитектурные артефакты, спрятанные в заданиях, и зарабатывайте баллы
🔹 Презентуйте свои решения экспертам ВТБ
🔹 Не упустите возможность решить «разминочную» задачу и получить дополнительные баллы
🔹 Заработанные баллы, найденные артефакты и коэффициент сложности задачи помогут определить победителей
🔹 Три категории: «Архитектор стрима», «Архитектор системы» и «Архитектор данных»…
🔹… и три призовых места в каждой
🔹 Лучшие из лучших разделят призовой фонд в 1 200 000 рублей!
Начало предварительного этапа – 14 июня. Соревнование стартует 28 июня – у участников будет 24 часа на решение задачи.
👉 Продемонстрируй свои знания об архитектуре – участвуй в ARCHI.Tech от ВТБ: https://cnrlink.com/architechvtbclearn
Реклама. БАНК ВТБ (ПАО). ИНН 7702070139. erid: LjN8KRDYP
architechhack.vtb.ru
Хакатон ARCHI.Tech от ВТБ
Твой уникальный шанс сделать проект в роли ИТ-архитектора
➡️ Корутины для асинхронного программирования
Корутины упрощают разработку сложных асинхронных программ и позволяют более эффективно управлять ресурсами, позволяя писать асинхронный код в синхронном стиле.
C++ Learning 👩💻
Корутины упрощают разработку сложных асинхронных программ и позволяют более эффективно управлять ресурсами, позволяя писать асинхронный код в синхронном стиле.
• Позволяют более эффективно управлять ресурсами, избегая блокировок и повышая производительность.• Интегрируются с новыми библиотеками и фреймворками, поддерживая современные парадигмы программирования.C++ Learning 👩💻
➡️ Преимущества оператора "auto" в C++
C++ Learning 👩💻
• Оператор позволяет программистам значительно упростить и улучшить читаемость кода за счет автоматического выведения типов.• Оператор "auto" помогает уменьшить объем шаблонного кода, особенно при работе с контейнерами и итераторами.
• Уменьшение необходимости вручную указывать типы переменных делает код более понятным и легким для чтения.
• Использование оператора "auto" делает код менее зависимым от конкретных типов, что облегчает рефакторинг и обновление кода в будущем.C++ Learning 👩💻