seniorcpp | Неотсортированное

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

13626

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

Подписаться на канал

Senior C++ Developer

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

Константные переменные инициализируются при объявлении и их значение не может быть изменено в течение выполнения программы.
Это позволяет защитить значение переменной от случайного изменения.

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

Использование const делает код более безопасным и понятным, явно указывая на неизменяемость данных.

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

Senior C++ Developer

std::strong_ordering

std::strong_ordering — это перечисление, введенное в C++20 для упорядочения элементов. Оно используется в алгоритмах сравнения, например std::sort, для определения порядка элементов.

Возможные значения:
std::strong_ordering::less — первый элемент меньше второго.
std::strong_ordering::equal — элементы равны.
std::strong_ordering::greater — первый элемент больше второго.

В примере мы сравниваем две строки s1 и s2 с помощью метода compare(), который возвращает std::strong_ordering.
В зависимости от результата выводим сообщение о том, какая строка идет раньше.

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

Senior C++ Developer

🥶 Забудь о Web2 Программировании: Переходи на Web3 и Зарабатывай От $60,000!

Если ты разработчик, но до сих пор не в теме Web3, то упустил множество возможностей. Middle Web3 разработчики уже зарабатывают от $5,000 до $8,000 в месяц!

🔎 Что такое Web3 в двух словах, и как стать мастером блокчейн-разработки?
🔎 Какие перспективы ждут именно тебя на рынке Web3, учитывая твой текущий стек?
🔎 Вакансии, зарплаты и требования к блокчейн-разработчикам: разберем на реальных примерах с рынка.
🔎 Как за 2 года увеличить доход до $5,000+ и стать Middle в Web3?
🔎 Апгрейд: как стать более востребованным, не меняя текущий стек?

✈️ И даже поделимся секретами релокации и работы в международной компании!

🗺 Построим личный роадмеп и разберем все это на 30-минутной бесплатной консультации:

Как действующему программисту расширить стек до Web3 и стать блокчейн-разработчиком на Solidity, увеличив доход в $ за несколько месяцев!

👨‍💼 Кто проводит?

Рекрутеры Crypton Studio — крупнейшей студии блокчейн-разработки в Европе (6 лет на рынке, более 160+ сотрудников, в числе которых 63% разработчиков, огромное портфолио из более чем 100 успешно реализованных проектов для клиентов из 20 стран). Они запустили новый проект MarniD и телеграм-канал, где можно учиться на их опыте!

Места на консультацию ограничены

Если ты действующий разраб, то переходи на сайт и оставляй заявку
ссылка

Команда свяжется с тобой и забронирует слот на Zoom! Узнай о своих возможностях на рынке будущего!

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

Senior C++ Developer

#вопросы_с_собеседований
Как соотносится класс и объект?

Класс и объект в C++ соотносятся как проект чего-либо и его конкретная реализация.
То есть, класс — это описание, а объект — реальная сущность.

Если говорить подробнее, то класс — это как бы "чертеж", который описывает структуру объекта, его данные и поведение. В классе определяются поля данных, методы, конструкторы и другие члены. Но сам по себе класс — это лишь абстракция, своего рода тип данных.

Объект же представляет конкретный экземпляр класса, созданный в памяти программы. При создании объекта выделяется память, в которой хранятся его данные, и этот объект уже может использовать методы класса для работы с этими данными.

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

Senior C++ Developer

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

К стандартным методам класса в C++ относятся:

— Конструкторы и деструктор: используются для создания и уничтожения объектов класса соответственно.

— Операторы присваивания: для копирования и перемещения объектов.

— Геттеры и сеттеры: для доступа к данным класса.

— Операторы сравнения: для сравнения объектов класса на равенство/неравенство.

— Операторы приведения типов: для неявного и явного преобразования типа.

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

Senior C++ Developer

co_await, co_yield и co_return

co_await, co_yield и co_return — это ключевые слова, которые используются для реализации корутин (coroutines).

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

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

co_return используется для завершения корутины и возврата результата.

В этом примере используются все три ключевых слова:
co_await приостанавливает корутину create_task в начале.
co_yield можно было бы использовать для дополнительных приостановок.
co_return завершает корутину в конце.

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

Senior C++ Developer

Шаблон Voodoo

Шаблон Voodoo — это шаблон проектирования, который используется для связывания объектов во время выполнения программы.
Шаблон довольно гибкий и позволяет создавать сложные отношения между объектами.

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

#это_база

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

Senior C++ Developer

Разработчик, аналитик, дизайнер?

⚡️ Регистрируйся на масштабный онлайн-хакатон MORE.Tech 5.0 с призовым фондом 1 100 000 рублей от Банка ВТБ!

🟣 Треки:

Metaverse: создай элементы виртуального пространства для взаимодействия пользователей с продуктами банка.

Mobile+Web: разработай сервис для подбора оптимального банковского отделения;

Что тебя ждет:

🔹 Познакомишься с опытными ИТ-экспертами ВТБ;
🔹 Прокачаешься в разработке за 3 дня как за месяц.

Помимо главного денежного приза в 1 100 000 рублей, тебя ждут: фирменный мерч, нетворкинг и другие приятные бонусы.
 Если нет своей команды — поможем ее собрать!

Регистрируйся и вступай в чат участников, получи ответы на волнующие вопросы, найди команду или создай свою.

▶️ Регистрация уже идет, успевай подать заявку по ссылке

Реклама. ООО "ФИЗТЕХ ДЖЕНЕЗИС". ИНН 7735184156. erid: LjN8KL8nv

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

Senior C++ Developer

requires clause

requires clause в С++20 — это новый синтаксис для задания требований к шаблонам, альтернативный requires-выражениям.

requires clause позволяет задавать требования к типам непосредственно при объявлении шаблона. Это делает код более читабельным и понятным.

Requires clause применяется для:
— Проверки наличия определенных возможностей у типов-параметров шаблонов.
— Ограничения допустимых типов-параметров.
— Условного компилирования шаблонов в зависимости от типов.

В примере requires clause гарантирует, что функция add будет работать только с целочисленными типами.
Это делает намерения программиста явными и позволяет лучше контролировать вызовы шаблона.

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

Senior C++ Developer

Пространство имен

Пространства имен позволяют группировать объекты (классы, функции, переменные) под общим уникальным именем.
Это избавляет от конфликтов имен при использовании кода из разных библиотек.

Пространства имен объявляются конструкцией namespace, а чтобы использовать объект из пространства имен, нужно указывать полное имя с именем пространства.
Чтобы не писать префикс каждый раз можно импортировать пространство имен в начале файла.

#это_база

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

Senior C++ Developer

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

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

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

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

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

Мяу-новость от «Лаборатории Касперского» 🙀 

Начинается набор на оплачиваемую стажировку SafeBoard по направлению Разработка на C++. Если ты живешь в Москве или МО, учишься в вузе или школе № 21 и готов(а) работать от 20 часов в неделю, смело запрыгивай в команду и приземляйся сразу на четыре лапы в IT 🐈

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

Ты можешь учиться и работать одновременно, пользоваться спортзалом с сауной в офисе, кабинетом массажа, библиотекой, игровыми и музыкальными комнатами, прокачать навыки программирования и получить приглашение на работу в Kaspersky после стажировки. 
Мы принимаем студентов любых университетов и специальностей с 1 курса. Главное — пройти тестирование и собеседование 😎

Прием заявок закончится 12 октября, успевай 🐾

Реклама. АО "ЛАБОРАТОРИЯ КАСПЕРСКОГО". ИНН 7713140469. erid: LjN8KMSHP

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

Senior C++ Developer

Алгоритм mismatch

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

Он принимает 4 параметра:
— Итераторы на начало двух диапазонов для сравнения.
— Итераторы на конец этих диапазонов.
— Бинарный предикат для сравнения элементов (по умолчанию используется оператор ==).

Алгоритм идет по двум диапазонам параллельно и сравнивает элементы с помощью предиката. Как только элементы не совпадут, алгоритм вернет пару итераторов на эти элементы.
Если диапазоны закончились, а элементы так и не отличились, то возвращаются итераторы на конец диапазонов.

Этот алгоритм полезен для поиска различий в двух последовательностях.

#это_база

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

Senior C++ Developer

#вопросы_с_собеседований
Что будет, если забыть вызвать delete?

Если в программе забыть вызвать оператор delete при динамическом выделении памяти с помощью new, это приведет к утечке памяти.

Выделенная динамически область памяти не будет возвращена системе и останется занятой до завершения программы. При многократном выделении памяти без освобождения может закончиться свободная память в куче и программа аварийно завершится.
Также "зависшая" память может привести к фрагментации кучи. Это усложнит выделение крупных последовательных блоков памяти в дальнейшем.

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

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

Senior C++ Developer

std::weak_ordering

std::weak_ordering — это перечисление, введенное в C++20 как упрощенная версия std::strong_ordering. Оно также используется для упорядочивания элементов в алгоритмах сравнения.

Возможные значения:
std::weak_ordering::less — первый элемент меньше второго.
std::weak_ordering::equivalent — элементы эквивалентны.
std::weak_ordering::greater — первый элемент больше второго.

Отличие от std::strong_ordering в том, что здесь нет значения равенства, вместо него используется эквивалентность.

std::weak_ordering часто используется, когда не важно различие между строгим равенством и эквивалентностью.

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

Senior C++ Developer

Алгоритм prev_permutation

Алгоритм prev_permutation — это стандартный алгоритм из заголовочного файла algorithm, который трансформирует диапазон элементов в предыдущую лексикографическую перестановку (переставляет элементы в обратном порядке).

Он принимает два параметра:
— Бидирекциональный итератор на начало диапазона элементов.
— Бидирекциональный итератор на конец диапазона элементов.

Алгоритм меняет порядок элементов на предыдущую возможную перестановку в лексикографическом порядке.

Если предыдущей перестановки не существует, то элементы остаются неизменными, а алгоритм возвращает false.

#это_база

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

Senior C++ Developer

Алгоритм compare

Алгоритм compare — это стандартный алгоритм из библиотеки algorithm, который сравнивает два объекта или значения и возвращает результат сравнения.

Он принимает три параметра:
first — первый объект или значение для сравнения.
second — второй объект или значение для сравнения.
comp — функция сравнения, по умолчанию less<T>, которая возвращает true, если first меньше second.

Compare позволяет легко сравнивать объекты, для которых определен оператор <.

#это_база

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

Senior C++ Developer

Серия бесплатных митапов от Яндекс Еды и Лавки для бэкенд-разработчиков.

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

Программа:
📢 12 октября, Новосибирск. Стартапы внутри фудтеха: как мы придумываем новое и развиваем бизнес.
📢 26 октября, Екатеринбург. Продуктовая разработка в фудтехе.
📢 9 ноября, Нижний Новгород. Дипдайв в фудтех: как устроены сервисы.
📢 26 ноября, Казань. Инфра и хайлоад в фудтехе.

Количество мест ограничено. Регистрация началась.
Подробнее

Реклама. ООО "ЯНДЕКС.ЕДА". ИНН 9705114405. erid: LjN8KE4yy

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

Senior C++ Developer

std::partial_ordering

std::partial_ordering — это перечисление, введенное в C++20 для упорядочения значений.

Оно может принимать одно из трех значений:
std::partial_ordering::less — первое значение меньше второго.
std::partial_ordering::equivalent — значения эквивалентны.
std::partial_ordering::greater — первое значение больше второго.

Это позволяет реализовывать трехзначное сравнение, когда не все значения можно однозначно упорядочить.

std::partial_ordering часто используется в качестве возвращаемого значения от операторов сравнения (operator<=>, operator< и т.д.).
Также применяется в алгоритмах сортировки, поиска, структурах данных, основанных на сравнении.

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

Senior C++ Developer

Алгоритм find_if_not

Алгоритм find_if_not — это алгоритм поиска в диапазоне, который ищет первый элемент, НЕ удовлетворяющий условию.
Он принимает начало и конец диапазона, а также унарный предикат (условие), возвращает итератор на первый найденный элемент, не соответствующий предикату. Если такого элемента нет — возвращает итератор на конец диапазона.

Алгоритм работает с разными типами контейнеров, поддерживающих итераторы.

#это_база

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

Senior C++ Developer

#вопросы_с_собеседований
Что такое "идиома remove-erase"?

Идиома remove-erase — это распространенный прием работы с контейнерами, позволяющий эффективно удалять элементы, соответствующие некоторому условию.

Суть идиомы заключается в следующем:

1. С помощью алгоритма std::remove или std::remove_if элементы, подлежащие удалению, перемещаются в конец контейнера.
2. Затем с помощью метода erase удаляется диапазон элементов от нового конца контейнера до старого, содержащий элементы для удаления.
3. Такой подход позволяет избежать лишних копирований, так как при удалении с помощью erase порядок оставшихся элементов сохраняется.

Эта идиома часто используется для эффективного удаления элементов из вектора или других последовательных контейнеров.

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

Senior C++ Developer

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

В C++ есть несколько способов инициализации полей класса:

Конструктор: в конструкторе класса можно присвоить начальные значения полям.

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

Инициализационный список: позволяет проинициализировать поля до вызова тела конструктора.

Значения по умолчанию: для базовых типов компилятор сам присвоит значения по умолчанию, если не указано иное.

Статическая инициализация: для статических полей класса можно задать начальное значение непосредственно при объявлении.

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

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

Senior C++ Developer

requires-expression

Requires-выражение в С++20 позволяет задавать требования к типам параметров шаблонов.
Это дает возможность выполнять проверку типов во время компиляции и позволяет создавать перегруженные шаблоны функций и классов с разными требованиями к типам.

Requires-expressions помогают создавать более гибкие и безопасные шаблоны, улучшают читаемость кода и помогают компилятору генерировать более качественные сообщения об ошибках.

В примере для каждой перегрузки функции add используется requires-выражение, которое накладывает ограничения на тип параметра T.
Это позволяет компилятору выбрать нужную перегрузку в зависимости от типа аргументов.

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

Senior C++ Developer

Алгоритм lower_bound

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

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

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

#это_база

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

Senior C++ Developer

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

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

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

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

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

Senior C++ Developer

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

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

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

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

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

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

Senior C++ Developer

is_sorted_until

Этот алгоритм проверяет, отсортирован ли заданный диапазон данных.
Он возвращает итератор на первый элемент, нарушающий порядок сортировки.

Алгоритм принимает 3 параметра:
— Итератор на начало проверяемого диапазона.
— Итератор на конец диапазона.
— Компаратор для сравнения элементов (по умолчанию less).

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

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

#это_база

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

Senior C++ Developer

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

Делегирующий конструктор — это конструктор, который вызывает другой конструктор того же класса для инициализации объекта.
Это позволяет избежать дублирования кода инициализации при написании нескольких конструкторов для одного класса.

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

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

Senior C++ Developer

⬆️ На курсе «Профессия Архитектор ПО» вы вырастете как разработчик и повысите свой доход. Разберёте реальные кейсы от ведущих разработчиков «Альфа-Банка» и сможете проектировать масштабируемые и отказоустойчивые приложения.

За 4 месяца вы научитесь:

✅ применять архитектурные стили и паттерны проектирования — API Gateway, CQRS и «Сага»;
✅ выявлять и проверять нефункциональные требования и характеристики систем;
✅ строить распределённые системы на основе микросервисов и создавать cloud-native-приложения;
✅ принимать архитектурные решения исходя из контекста;
✅ учитывать вопросы кибербезопасности при проектировании.

Навыки отточите на реальных задачах, а в конце курса презентуете итоговый проект.
Спешите приобрести курс со скидкой!

Подробнее по ссылке https://epic.st/7_t7z
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880

Читать полностью…
Подписаться на канал