seniorcpp | Unsorted

Telegram-канал seniorcpp - Senior C++ Developer

13626

Изучаем C++. По вопросам сотрудничества: @adv_and_pr

Subscribe to a channel

Senior C++ Developer

Плюсовики, отмечаем 2 августа в календаре: Яндекс проведет C++ Zero Cost Conf

Участников ждет прикладной C++ и десятки докладов от экспертов из Яндекса, Ozon, VK, Авито и других компаний. Конференция пройдет в трёх городах — Москве, Санкт-Петербурге и Белграде.

В Санкт-Петербурге Ваня Ходор, руководитель бэкенда каталога в
Яндекс Лавке, выступит с докладом на тему «i, j, k и шаблоны: вспоминаем линейную алгебру». Там же разработчики из VK, Кирилл Гарманов и Илья Кокорин, расскажут, с какими проблемами специалисты сталкиваются, когда пишут конкурентные структуры данных и как значительно облегчить боль от проверки и отладки конкурентного кода.

В Москве Антон Полухин, руководитель группы разработки общих компонентов в Техплатформе Городских сервисов Яндекса, расскажет, как использовать C++20 модули в больших существующих проектах с поддержкой старых стандартов.

Посмотреть полную программу докладов во всех городах и зарегистрироваться можно на сайте конференции.

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Что такое SIMD-инструкции?

SIMD-инструкции — это специальные команды процессора, которые работают с векторными регистрами и могут выполнять одну операцию над несколькими элементами данных параллельно.

Например, при сложении двух векторов из 4 float чисел, вместо 4 инструкций сложения, с SIMD можно выполнить одну команду, которая сложит эти вектора за одну операцию.

Основные преимущества SIMD:
— Повышение производительности за счет параллельных вычислений.
— Эффективное использование пропускной способности процессора.
— Уменьшение количества инструкций за счет векторизации.
— Оптимизация алгоритмов обработки массивов, матриц, фильтрации, графики.

Читать полностью…

Senior C++ Developer

Алгоритм equal_range

equal_range — это алгоритм поиска из стандартной библиотеки, который находит диапазон элементов, эквивалентных заданному значению.

Принимает отсортированный диапазон, искомое значение и возвращает пару итераторов, задающих найденный диапазон.
Диапазон содержит все элементы, эквивалентные значению. Если элементов нет — итераторы будут указывать на один элемент.

Применение:
— Поиск всех элементов, соответствующих значению.
— Получение диапазона для последующей обработки.
— Высокоэффективная альтернатива линейному поиску.

#это_база

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Расскажите о работе с сырыми указателями.

Работа с сырыми указателями (raw pointers) требует внимания к управлению памятью:

— Сырой указатель содержит только адрес памяти, без информации о длительности владения.

— Память под указатель выделяется вручную с помощью new и освобождается вручную с delete.

— Опасность утечек памяти при потере последнего указателя на объект.

— Нужно следить за правильностью вызовов new/delete во избежание ошибок.

— Может привести к проблемам при копировании указателей (неявное копирование объекта).

— Предпочтительно использовать умные указатели вроде unique_ptr для безопасности.

— Сырые указатели полезны для низкоуровневых оптимизаций производительности.

— Требуют явного кодирования работы с памятью в стиле Си.

Читать полностью…

Senior C++ Developer

static_assert

static_assert — это механизм проверки условий компиляции. Он позволяет выдавать ошибку компиляции, если не выполняется некое условие.

Основные случаи использования:
— Проверка размера типов данных.
— Проверка наличия функций или методов у классов.
— Верификация определенных свойств на этапе компиляции.
— Проверка корректности шаблонных параметров.
— Выявление ошибок в зависимостях между типами данных.

Преимущества:
— Выявляет ошибки на этапе компиляции, не дожидаясь выполнения.
— Позволяет проверить условия, которые нельзя проверить во время выполнения.
— Улучшает читаемость кода за счет явных проверок.

static_assert широко используется в шаблонах и метапрограммировании.

Читать полностью…

Senior C++ Developer

🦀 Хотите стать Middle Rust-разработчиком?

Присоединяйтесь к открытому уроку «Техническое собеседование на Middle Rust разработчика» 24 июля в 20:00 МСК. В режиме онлайн разберем:

— Типичные вопросы, которые вам зададут на собеседовании.

— Задачи, которые дают кандидатам на уровне Middle.

— Частые ошибки на собеседованиях и способы их избежать.

❗️Этот урок — отличная подготовка к карьерному росту в разработке.

👉 Записаться на вебинар курса «Rust Developer. Professional»https://otus.pw/Mc6s/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Senior C++ Developer

17 июля в 19:00 (Мск) приглашаем на онлайн-встречу, посвященную профессиональному развитию в сфере разработки электронных устройств.

Наша Академия программирования электронных устройств занимается повышением квалификации инженеров-радиоэлектронщиков.

На встрече обсудим:
- Кто занимается разработкой электронных устройств сегодня
- Самые востребованные направления в отрасли
- Актуальные возможности для профессионального старта
- Разные форматы работы в этой сфере

Также у вас будет возможность:
- Получить ответы на свои вопросы от эксперта
- Познакомиться с программами дополнительного профессионального образования в этой сфере

Регистрируйтесь прямо сейчас – количество мест ограничено!

После регистрации Вам придет бонус - "Принципы работы радиоэлектронщиков"

Ждем Вас!

Реклама. ООО "РСВ Электроникс", ИНН 7810939507
erid: 2SDnjcuEfj4

Читать полностью…

Senior C++ Developer

Токенизация строки

Токенизация строки — это процесс разбиения строки на токены (лексемы) — отдельные элементы, например слова, числа, операторы.

Для токенизации нужно:

— Разбить строку на токены при помощи разделителей, например пробелов.
— Классифицировать каждый токен — определить его тип (число, строка, оператор и т. д.)
— Преобразовать токены к нужному типу, например из строки в число.
— Сохранить результаты в подходящей структуре данных.
— Обрабатывать ошибки, например неверный формат числа.

Для разбиения строки на токены в С++ удобно использовать stringstream.
Для хранения результатов часто используют структуры или классы, хранящие тип и значение токена.

Токенизация нужна для разбора входных данных, конфигурационных файлов, математических выражений и т. д.

#это_база

Читать полностью…

Senior C++ Developer

rvalue

Rvalue — это временный объект, который может быть перемещен или скопирован. Например, результат выражения или возвращаемое значение функции — это rvalue.
Rvalues являются временными объектами, которые разрушаются после использования. Перемещение ресурсов из rvalue более эффективно, чем копирование.

Константные ссылки или ссылки на const (const T&) могут связываться только с lvalues.
Неконстантные ссылки (T&) могут связываться как с lvalues, так и с rvalues.

*Lvalue — объект с именем, например переменная.

#это_база

Читать полностью…

Senior C++ Developer

Ключевое слово auto

autoэто тип вывода, который позволяет компилятору автоматически определять тип переменной на основе выражения инициализации.
Он был введен в C++11 для упрощения объявления переменных, избавляя от необходимости указывать длинные и сложные типы.

При использовании auto тип переменной выводится компилятором во время компиляции и не может меняться во время выполнения.
Работает для любых типов данных — встроенных, пользовательских, шаблонов.

Переменная, объявленная с auto, всегда инициализируется при объявлении.

auto полезен при работе с итераторами, с функциями возврата сложных типов, для упрощения кода.

#это_база

Читать полностью…

Senior C++ Developer

Ключевое слово const

Ключевое слово const используется для создания констант и неизменяемых объектов.

- Const для объявления переменных: запрещает изменение объекта после инициализации.

- Const указатели и ссылки: указатель или ссылка на константный объект. Нельзя изменить объект через них, только читать.

- Функции, возвращающие const значения: гарантируют, что функция не изменит объект.

- Const члены класса: нельзя изменить через объект класса.

- Const методы класса: не меняют члены класса. Часто применяются к getter-методам.

#это_база

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Что такое union?

Union - это специальный класс, который позволяет хранить данные разных типов в одной области памяти.
Основные характеристики:

- Объявляется с ключевым словом union.
- В каждый момент активно только одно поле.
- Размер равен наибольшему полю.
- Позволяет интерпретировать одну область памяти разными способами.
- Экономит память.
- Доступ к полям как в обычном классе.

Читать полностью…

Senior C++ Developer

msg_ptr (message pointer)

msg_ptr это указатель на структуру или класс, который содержит данные сообщения. Обычно это просто указатель void*.
Он используется в многопоточном программировании для передачи сообщений между потоками.

Использование указателей вместо копирования данных позволяет избежать лишних копий и ускорить передачу сообщений между потоками.

Если запустить код из примера, можно увидеть, что данные успешно передаются между потоками через очередь с использованием указателей на сообщения.

Читать полностью…

Senior C++ Developer

Библиотека концепций

Библиотека концепций (concepts library) — это новая библиотека, добавленная в C++20 для работы с концепциями.

Концепции позволяют формально определять требования к типам. Они похожи на шаблоны, но проверяют не только наличие определенных операций, но и семантику этих операций.

Концепции используются для:
— Проверки корректности типов в шаблонах функций и классов.
— Ограничения диапазона допустимых типов.
— Улучшения сообщений об ошибках компиляции.
— Возможности оптимизации кода компилятором.

В примере концепция equality_comparable используется для проверки, что тип T поддерживает операцию ==, необходимую для сортировки. Это позволяет выявить ошибку на этапе компиляции.

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Какая разница между calloc и malloc?

Основное различие между функциями calloc и malloc заключается в том, как они инициализируют выделенную память.

malloc просто выделяет указанный объем памяти и возвращает указатель на него. Содержимое выделенной памяти при этом не инициализируется.
calloc, помимо выделения памяти, также инициализирует всю выделенную память нулями. Таким образом после вызова calloc вся выделенная память будет заполнена нулевыми значениями.

Кроме того, в calloc размер выделяемой памяти задается в элементах, а не в байтах. Calloc умножает количество элементов на размер одного элемента, чтобы определить общий размер памяти для выделения.

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Что такое variadic templates?

Variadic templates — это функция шаблонов, которая позволяет определить функцию или класс с переменным количеством аргументов.
Эта возможность появилась в C++11.

Variadic templates позволяют создавать функции, которые могут принимать произвольное количество аргументов, не зная заранее их типов.
Это достигается за счет использования упаковки аргументов (pack expansion) и рекурсивных шаблонов.

Проще говоря, variadic templates расширяют возможности шаблонов и позволяют создавать гибкие и универсальные компоненты.

Читать полностью…

Senior C++ Developer

Алгоритм partial_sort

partial_sort — это алгоритм сортировки из стандартной библиотеки, который упорядочивает только часть контейнера.
Сортирует элементы в диапазоне [first, middle). Элементы справа от middle остаются без изменений

При работе с частью данных эффективнее полной сортировки. Внутри использует алгоритм quicksort.

Применение:
— Быстрый поиск K наибольших/наименьших элементов.
— Сортировка только части большого массива данных.
— Оптимизация производительности по сравнению с полной сортировкой.

#это_база

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Расскажите об использовании realloc в контейнерах.

realloc
используется в контейнерах динамической памяти, таких как vector, для изменения выделенной памяти при добавлении или удалении элементов.

realloc вызывается при заполнении текущего буфера в контейнере и память перевыделяется большими блоками (обычно в 2 раза больше). Это позволяет избежать постоянного выделения памяти заново.
Само перевыделение происходит автоматически, скрыто от разработчика.

При частых вызовах может привести к фрагментации памяти.

Читать полностью…

Senior C++ Developer

🎉 Большой розыгрыш от крупнейшего IT-медиа 1337, легендарного паблика Рифмы и Панчи, канала Техно.

Победителей будет много, а для участия нужны лишь пара кликов:

1. Подписаться на Рифмы и Панчи, 1337 и на Техно.

2. Нажать «Участвовать» под этим постом

Что по призам:

1 место - Iphone 16 Pro
2 место - PS5 Slim
3 место - Nintendo Switch 2
4-10 места - 10 000 рублей на карту


Победителей определим 21 июля в 18:00 МСК. Всем удачи!

Читать полностью…

Senior C++ Developer

Декомпозиция при объявлении (structural bindings)

Structural bindings — это возможность С++17 разложить объект на отдельные переменные прямо в месте объявления.
Позволяет избежать временных объектов при разборе структур, сокращает и упрощает код при работе со структурами.

Structural bindings активно используется в модульном тестировании для проверки структур и классов.
Также применяется для деструктуризации данных в функциональном программировании.

Читать полностью…

Senior C++ Developer

std::array

std::arrayэто шаблонный контейнерный тип данных, представляющий собой статический массив с фиксированным размером.
В отличие от обычных C-style массивов, std::array является полноценным объектом со всеми преимуществами ООП.

Основные характеристики:
— Размер массива задается шаблонным параметром и не может изменяться во время выполнения.
— Элементы хранятся в последовательной памяти, что дает хорошую локальность и производительность.
— Поддерживает итераторы, можно использовать в циклах range-for.
— Имеет полезные методы — size(), front(), back(), data() и др.
— Автоматически инициализирует элементы по умолчанию.
— Передается по значению, в отличие от сырых указателей.

Читать полностью…

Senior C++ Developer

buf указатель

buf — это указатель на буфер (массив байтов), часто использующийся для работы с бинарными данными.
Объявляется как u_char *buf или unsigned char *buf. Хранит данные типа unsigned char. Используется для указания на выделенный буфер памяти, куда будут помещаться данные.

В основном используется совместно с функциями memcpy, memset и др. для копирования данных.

Часто применяется в сетевом программировании, криптографии.

Читать полностью…

Senior C++ Developer

🎮 Киношный рендер в UE5 для 3D-художников

Современный геймдев требует от 3D-художников не только умения создавать качественные модели, но и навыков работы с продвинутыми инструментами рендеринга. В этом уроке мы погрузимся в мир кинематографического рендеринга в Unreal Engine 5 – технологии, которая позволяет создавать впечатляющие визуальные эффекты, достойные большого кино.

👉Что вы узнаете:
- Основы кинематографического рендеринга в Unreal Engine 5
- Работа с Movie Render Queue и настройка параметров рендера
- Создание реалистичных эффектов освещения и постобработки
- Техники создания кинематографических бликов и боке
- Настройка глубины резкости и фокусных эффектов
Бесплатный вебинар проходит в рамках курса “3D Artist“

Регистрация и подробнее о курсе 3D Artist - https://otus.pw/pOPz/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Как работают константные методы?

Константные методы — это методы, которые помечены модификатором final. Это означает, что тело метода не может быть переопределено в подклассах.

Константные методы часто используются, когда нужно предоставить клиентам неизменяемую реализацию некоторой функциональности. Например, утилитные классы часто содержат константные методы.

Основные характеристики константных методов:
— Могут вызываться на экземплярах класса, так как не являются статическими.
— Может обращаться к полям класса, даже нестатическим, т. к. вызывается на объекте класса.
— Может вызывать другие методы класса, в том числе не константные.
— Сигнатура константного метода в подклассе должна полностью совпадать с сигнатурой в суперклассе, иначе это будет перегрузка, а не переопределение.

Читать полностью…

Senior C++ Developer

🤔 Что делать, если в компании нет SRE в чистом виде? В Яндекс Маркете считают, что инженерия надёжности — это общая ответственность, а не задача отдельной команды.

Они выпустили отличный разбор, где рассказали, как эта культура надёжности устроена у них на практике и почему их инженеры по надёжности — это часто бывшие «инфраструктурщики».

В статье много интересного:

🧠 Почему в war room самый опытный инженер не чинит сам, а направляет команду.
🧠 Как автоматизированный бот избавляет инженеров от рутины во время инцидента.
🧠 Почему сервис никогда не сможет достичь заветных четырёх девяток аптайма, если платформа под ним нестабильна.

Очень полезный взгляд на организационную сторону SRE и культуру надёжности.

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Что такое рефакторинг?

Рефакторинг - это процесс изменения внутренней структуры программы без изменения ее внешнего поведения.

Рефакторинг кода может применяться в следующих ситуациях:

- Улучшение читаемости и понятности кода.
- Оптимизация производительности.
- Устранение дублирования кода.

Рефакторинг особенно важен при работе над большими проектами, где код многократно изменяется и расширяется. Он позволяет поддерживать кодбейз чистым, современным и масштабируемым.

Читать полностью…

Senior C++ Developer

Нейронка VEO 3 от Google теперь в Telegram!

Нейросеть для создания видео теперь доступна напрямую. Можно генерировать видео по запросу и даже оживлять фотографии.

Ссылка: @veo3

Читать полностью…

Senior C++ Developer

Алгоритм lower_bound

Алгоритм lower_bound — это алгоритм поиска в отсортированном массиве или контейнере элемента, который не меньше заданного значения.

lower_bound возвращает итератор на первый элемент в диапазоне, который не меньше заданного значения. Если подходящий элемент не найден, возвращается итератор на конец диапазона.
При этом массив или контейнер должен быть отсортирован.

Алгоритм имеет логарифмическую сложность O(log n).
Может применяться для поиска элемента или вставки нового элемента в отсортированный массив

#это_база

Читать полностью…

Senior C++ Developer

std::size_t

std::size_t — это тип данных без знака, предназначенный для хранения размера объектов в памяти.
Он определен в заголовочном файле <cstddef> и обычно представлен как unsigned int или unsigned long в зависимости от платформы.

std::size_t используется для:
— Представления индексов массивов и размеров контейнеров в стандартной библиотеке.
— Возврата значений размера из функций, например size(), length().
— Указания размера при выделении памяти.
— Предотвращения переполнения при вычислениях размеров.

std::size_t гарантирует достаточный диапазон значений для адресации всей доступной памяти.

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Что такое список инициализации?

Список инициализации — это способ инициализации переменных, при котором переменные инициализируются прямо в месте их объявления через список инициализаторов в фигурных скобках {}.
При использовании списка инициализации переменные инициализируются сразу при объявлении, а не в отдельном операторе присваивания.

Преимущества списка инициализации:
— Переменная всегда инициализирована, нет возможности использовать неинициализированную переменную.
— Компилятор может выполнить оптимизации, т. к. знает значение переменной при инициализации.
— При инициализации классов вызываются нужные конструкторы.
— Код становится более читабельным, инициализация видна сразу при объявлении.

Читать полностью…
Subscribe to a channel