13626
Изучаем C++. По вопросам сотрудничества: @adv_and_pr
☄️Как устроено автодополнение в поисковых системах?
🗓 8 октября в 20:00 МСК приглашаем на открытый урок OTUS «Как вырастить префиксное дерево». На вебинаре мы пошагово построим префиксное дерево (Trie) для слов из большого текста, добавим счётчики частот и реализуем автодополнение. Вы увидите, как по первым буквам мгновенно находятся все слова с этим префиксом и выводятся самые популярные варианты продолжений.
Урок будет полезен разработчикам, которые хотят глубже понимать работу алгоритмов и применять их для оптимизации поиска, обработки текста и построения быстрых интерфейсов.
Открытый урок проходит в преддверие старта курса «Алгоритмы и структуры данных». Все участники получат скидку на обучение.
👉Зарегистрируйтесь сейчас и узнайте, как вырастить своё первое Trie-дерево: https://otus.pw/wgfC/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Оффер за 3 дня: будущее инженерии начинается в YADRO.
Запускаем SPRINT OFFER для C++ Software Engineer!
Мы ждем:
Талантливых инженеров с опытом работы на C/С++, уверенным знанием сетей TCP/IP и Linux.
Как принять участие?
1️⃣ Оставьте заявку до 19 октября и пройдите HR-скрининг
2️⃣ Пройдите техническое и менеджерское интервью
3️⃣ Получите оффер в течение 3 дней
О направлении:
Инженеры разрабатывают комплексную платформу для построения современных узлов сотовых сетей, включая базовые станции LTE и GSM. Создаваемая платформа обеспечивает управление всей телеком инфраструктурой: от прикладных компонентов до сетевой топологии.
💙 Не упускайте шанс присоединиться к интересному проекту и работать с инженерами мирового уровня! Успейте подать заявку до 19 октября по ссылке!
Ускоряем рабочие процессы: оплачивайте Cursor через МТС Оплату ✨
Покупайте подписки для работы в пару кликов через СБП и с минимальной комиссией. Так же можно оплачивать ещё 150+ зарубежных сервисов: Replit, Sentry, Qodo, Warp, Windsurf и другие.
Весь процесс займёт не больше 5 минут. Пароли и лишние данные не нужны — только ваша почта. Оплачивайте сервисы и исправляйте баги вместе с МТС Оплатой 🤗
#вопросы_с_собеседований
Что будет выведено и почему?
Ответ:
4294967271, предполагая 32-битные целые числа.
Почему так происходит?
Существует иерархия: long double, double, float, unsigned long int, long int, unsigned int, int. И когда два операнда определены как 25u (unsigned int) и 50 (int), 50 также будет интерпретироваться как беззнаковое целое число, то есть 50u.
Кроме того, результат операции также будет иметь тип операндов. Следовательно, результат 25u - 50u и сам является беззнаковым целым числом. Таким образом, результат -25 преобразуется в 4294967271.
Пример UB (Undefined behavior)
Ярким примером UB и ошибочного кода является повторное использование (в том числе повторное изменение) изменяемой переменной при вычислении выражения, когда относительный порядок вычисления термов не определен (то же касается фактических параметров функции в точке вызова).
⚠️ WMI — это не только удобный инструмент администратора, но и один из самых скрытных векторов атак в Windows.
🔎 На открытом вебинаре вы узнаете, как работают такие атаки и как вовремя их выявлять.
Разберем:
- Что такое WMI и как он применяется в администрировании.
- Почему WMI так любят злоумышленники.
- Какие методы мониторинга помогают обнаружить скрытные атаки.
📅 Урок пройдёт 6 октября в 20:00 МСК в преддверии старта курса «Reverse Engineering». Присоединяюсь и получите скидку на обучение: https://otus.pw/crgG/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Функция std::stold
Функция std::stold из стандартной библиотеки C++ преобразует строку, представляющую десятичное число с плавающей запятой, в тип long double.
Возвращаемое значение:
Возвращает значение типа long double, полученное из преобразованной строки.
#для_начинающих
Функция std::atomic_store
Функция std::atomic_store используется для атомарного изменения значения атомарной переменной. Это означает, что изменение значения происходит мгновенно и не может быть прервано другими потоками.
В примере на картинке функция atomic_store используется для атомарного увеличения значения счетчика counter на 1. Функция atomic_load используется для получения нового значения счетчика.
#для_продвинутых
Функция std::count
Функция std::count используется для подсчета количества элементов в диапазоне, которые совпадают с заданным значением. Она работает с итераторами, что позволяет использовать ее с различными типами контейнеров, таких как массивы, векторы, списки и т.д.
#для_начинающих
«Код-ревью — это когда твои комментарии в интернете действительно читают»: дискуссия с разработчиками на C++
Смотреть статью
Функция ptsname()
Функция ptsname() возвращает имя подчиненного псевдотерминального устройства, соответствующего главному устройству, на которое ссылается файловый дескриптор fd.
Функция ptsname_r() является реентерабельным эквивалентном ptsname(). Она сохраняет имя устройства подчинённого псевдо-терминала в виде строки (завершающейся null) в буфер, указанный в buf. В аргументе buflen задаётся количество байт, доступных в buf.
#для_начинающих
Интервью на C ++ с инженером Google: Closest Coin (с русскими субтитрами)
Смотреть видео
#вопросы_с_собеседований
Что выведет код сверху?
Ответ:
10 99 40 99
В этой программе мы меняем местами определенные значения в двух векторах с помощью iter_swap.
⁉️Хотите, чтобы интерфейсы ваших приложений выглядели профессионально и динамично, а пользовательский опыт стал на порядок выше?
🎓Qt — это мощный инструмент, а QtStateMachine открывает новые возможности для построения логики и создания сложных анимаций. На открытом уроке мы разберём, как моделировать поведение интерфейса с помощью состояний и переходов, и шаг за шагом создадим несколько анимаций.
Вебинар будет особенно полезен разработчикам, которые уже знакомы с Qt и хотят научиться создавать более интерактивные приложения.
➡️ Регистрируйтесь на открытый урок курса «Разработка прикладного ПО на Qt и ОС „Аврора“» 22 сентября в 20:00. Участники получат скидку на обучение: https://otus.pw/QHZS/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Алгоритм compare
Если вызывающая строка меньше строки s, то функция возвращает -1 (отрицательное значение). Если вызывающая строка больше строки s, функция возвращает 1 (положительное значение). Если две строки равны, функция возвращает 0.
Подробнее про алгоритм можно почитать здесь.
Нам действительно нужно неопределенное поведение?
https://www.ralfj.de/blog/2021/11/24/ub-necessary.html
#вопросы_с_собеседований
Что такое класс хранения?
Класс, который определяет срок существования, компоновку и расположение переменных/функций в памяти.
В C ++ поддерживаются такие классы хранения: auto, static, register, extern и mutable.
Обратите внимание, что register устарел для C++11. Для C++17 он был удален и зарезервирован для будущего использования.
Алгоритм inner_product
Вычисляет сумму поэлементного умножения двух диапазонов и добавляет ее к указанному начальному значению либо вычисляет результат обобщенной процедуры, где бинарные операции суммы и умножения заменены на другие указанные бинарные операции.
🔥 Qt остаётся одним из самых востребованных инструментов для создания кросс-платформенных приложений. Хотите научиться писать программы, которые действительно работают и востребованы в бизнесе?
Приглашаем на бесплатный открытый урок «Пишем приложение органайзер на Qt»
🗓 6 октября, в 20:00 мск.
🆓 Бесплатно. Урок в рамках старта курса «Разработка прикладного ПО на Qt и ОС «Аврора»».
Регистрация: https://otus.pw/hSko/
✔️ Разберем процесс создания приложения-органайзера с нуля, используя популярный фреймворк Qt.
✔️ Вы узнаете, как разрабатывать пользовательский интерфейс с помощью основных инструментов Qt.
✔️ В ходе занятия вы получите практические навыки работы с сигналами и слотами, проектированием архитектуры приложения, подбором структуры данных и т.д..
🔗 Ссылка на регистрацию: https://otus.pw/hSko/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Функция minmax_element
Находит самый маленький и самый большой элемент в диапазоне [first, last).
Корутины C++ для чайников: пишем асинхронный веб-клиент
Смотреть статью
#вопросы_с_собеседований
Как можно использовать лямбда-выражения в C++ для создания анонимных блоков кода, которые могут изменять переменные захваченного контекста без изменения сигнатуры лямбды?
В C++ можно использовать лямбда-выражения с захватом по ссылке, чтобы анонимный блок кода мог изменять переменные из внешнего контекста. Захват по ссылке указывается с помощью символа & в списке захвата лямбды. Это позволяет лямбде изменять значения переменных, не меняя при этом сигнатуру лямбды.
В этом примере лямбда modifyX захватывает переменную x по ссылке и изменяет её значение. Такой подход позволяет лямбдам влиять на состояние переменных в области видимости, где они были определены, без необходимости изменять сигнатуру лямбды.
Функция std::find_end
Функция std::find_end в С++ используется для поиска последнего вхождения подпоследовательности элементов в заданном диапазоне. Она работает с итераторами, что делает её универсальной для различных контейнеров, таких как массивы, векторы, списки и т.д.
Синтаксис:
template < class ForwardIterator1, class ForwardIterator2 >
ForwardIterator1 find_end ( ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, ForwardIterator2 last2 );
#вопросы_с_собеседований
Как работает механизм перегрузки операторов в C++ и какие ограничения существуют при его использовании?
В C++, перегрузка операторов позволяет программистам определять поведение стандартных операторов (например, +, -, *, /) для пользовательских типов данных. Это делается путем определения функций или методов класса с специальным именем: operatorX, где X - это оператор, который нужно перегрузить. Однако существуют ограничения: нельзя перегружать операторы для встроенных типов данных (только если одним из операндов является пользовательский тип), нельзя создавать новые операторы, и некоторые операторы (например, ?:, .) не подлежат перегрузке. Перегрузка операторов должна использоваться с осторожностью, чтобы не нарушить интуитивные ожидания от работы этих операторов.
Библиотека <pty.h>
Библиотека <pty.h> используется для работы с псевдотерминалами (PTY — Pseudo Terminal). Псевдотерминалы предоставляют средство для создания пары устройств, одно из которых может использоваться как мастер (master), а другое как рабочее (slave). Процессы могут обмениваться данными между этими устройствами, эмулируя терминальные взаимодействия.
#для_начинающих
Функция div()
Функция div() вычисляет величину numerator/denominator и возвращает частное и остаток в структуре div_t, которая содержит два целочисленных поля (в неопределённом порядке) quot и rem. Частное округляется до ближайшего нуля. Результат равняется quot*denominator+rem = numerator.
Функции ldiv(), lldiv() и imaxdiv() выполняют эту же функцию, деля числа соответствующего типа и возвращая результат в структуре с соответствующим именем, всегда с полями quot и rem того же типа, что и аргументы функции.
#для_начинающих
Узнаем размер файла с помощью C++
В этом примере мы открываем файл example.txt с помощью ifstream, перемещаем указатель на конец файла с помощью функции seekg, а затем получаем текущую позицию (размер файла) с помощью функции tellg. Результат выводится на экран.
Видеоуроки по созданию игры на C++
Серия видео, в которой автор по шагам рассказывает, как написать свою игру на C++.
Смотреть статью
#вопросы_с_собеседований
Какие специальные функции-члены может генерировать сам компилятор? Напишите их сигнатуру?
Ответ:
Компилятор может сам генерировать шесть функций.
• Конструктор по умолчанию;
Object();
• деструктор;
~Object();
• копирующий конструктор;
Object(const Object& oth);
• оператор копирующего присваивания;
Object& operator=(const Object& oth);
• перемещающий конструктор;
Object(Object&& oth);
• оператор перемещающего присваивания;
Object& operator=(Object&& oth);
Удаление всех вхождений элемента в массив
В этом методе сдвиньте нецелевой элемент в левую сторону.
• Проверьте, является ли текущий элемент целевым элементом или нет.
• Если это целевой элемент, увеличьте переменную cnt.
• После этого элемента все нецелевые элементы сдвинутся влево с промежутком (n-cnt).
Временная сложность: O(n)
Сложность пространства: O(1)
На картинке приведена программа на C ++ для удаления всех вхождений элемента из массива с использованием оптимизированного подхода.