seniorcpp | Unsorted

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

13626

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

Subscribe to a channel

Senior C++ Developer

ACID (Atomicity, Consistency, Isolation, Durability)

В языке C++ концепция ACID может использоваться при работе с базами данных, например, при использовании библиотеки SQLite. ACID гарантирует, что транзакции будут выполнены одновременно и когда они закончатся, база данных находится в согласованном состоянии.

Atomicity гарантирует, что транзакция будет выполнена как одно целое и либо полностью, либо не выполнится вообще.

Consistency гарантирует, что данные в базе будут согласованы с правилами и ограничениями базы данных.

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

Durability гарантирует, что данные в базе данных сохранятся даже в случае сбоев или отказа оборудования.

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

Senior C++ Developer

Метод exchange()

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

В данном примере значение переменной a было заменено на 10, а старое значение (5) было сохранено в переменной b, которую вернул метод std::exchange().

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

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

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

Senior C++ Developer

Есть ли преимущества одного фрагмента кода перед другим? Если да, то какие?

Хотя оба варианта выполняют одно и то же, второй вариант лучше с точки зрения производительности. Это связано с тем, что оператор постинкремента itr++ дороже, чем оператор предварительного инкремента ++itr. Базовая реализация оператора постинкремента создает копию элемента перед его увеличением, а затем возвращает копию.

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

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

Senior C++ Developer

Кортежи

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

Иногда удобнее использовать std::array вместо кортежа. Такой массив подобен обычному массиву в Си вместе с несколькими функциями стандартной библиотеки C++. Эта структура данных была добавлена в 11 версии C++.

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

Senior C++ Developer

Разрабатываешь на С++?

❗️Освой кроссплатформенную разработку на Qt и ОС Аврора

🔥 Пройди тест и проверь свои знания.

Ответишь
— пройдешь на продвинутый курс "Разработка прикладного ПО на Qt и ОС Аврора" от OTUS по специальной цене! .

👉 ПРОЙТИ ТЕСТ: https://otus.pw/TKWu/

Нативная интеграция. Информация о продукте www.otus.ru

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

Senior C++ Developer

Механизм синхронизации mutex

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

Синтаксис:
Заголовочный файл | #include <mutex>
Объявление | std::mutex mutex_name;
Захват мьютекса | mutex_name.lock();
Освобождение мьютекса | mutex_name.unlock();

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

Senior C++ Developer

Применение указателя unique_ptr<T>

В функции foo1 мы выделяем память для указателя ptr и затем освобождаем ее с помощью оператора delete. Однако, если произойдет исключение во время работы функции, то память не будет освобождена, что приведет к утечке памяти.

Во втором примере мы используем std::unique_ptr, который выделяет память при инициализации и освобождает память при уничтожении объекта.
Таким образом, мы можем гарантировать, что ресурсы будут корректно освобождены, даже в случае исключения.

Данный тип указателей полезен, когда нужен указатель на объект, на который НЕ будет других указателей и который будет удален после удаления указателя.

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

Senior C++ Developer

#вопросы_с_собеседований
Напишите алгоритм обхода графа в глубину.

Результатом
должен стать код, который представляет из себя алгоритм обхода графа в глубину (DFS - Depth First Search). Пример представлен на изображении.

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

Senior C++ Developer

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

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

По соглашению имена typedef объявляются с использованием суффикса "_t".
Это помогает указать, что идентификатор представляет собой тип, а не переменную или функцию, а также помогает предотвратить конфликты имен с другими типами идентификаторов.

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

Senior C++ Developer

#вопросы_с_собеседований
В чем различия между dynamic_cast и reinterpret_cast?

Правильный ответ может звучать так:

Динамическое приведение - это безопасное приведение по иерархии наследования, в том числе и для виртуального наследования. Проводит преобразование типа, предварительно убедившись (с помощью RTTI), что объект expression_from в действительности является объектом типа type_to. Если нет: для указателей возвращает NULL.

При reinterpret_cast результат не гарантирован, проверки не осуществляются.
Ограничения на expression_from: порядковый тип (логический, символьный, целый, перечисляемый), указатель, ссылка.
Ограничения на type_to: для порядкового типа или указателя — порядковый тип или указатель. Для ссылки — ссылка.

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

Senior C++ Developer

Как зарабатывать в IT без собеседований, стажировок и тестовых заданий?

Для этого не нужно быть Senior или Middle. Заработать может и Junior из маленького города, без огромного стека и послужного списка от работодателей.

Для этого не надо пыхтеть годами, читать книги, проходить курсы и конференции от разработчиков - все на много проще.

Просто заходи в мой телеграм канал Код на миллион - где я выберу одного новичка в IT и за 45 дней помогу ему заработать первые 300 000 рублей за счет создания своих софтов в IT.

🔥Всё будет происходит на твоих глазах – это реалити-шоу.

Ты сможешь по шагам скопировать схему заработка в IT и заработать первые деньги вместе с героем реалити.

🙋Меня зовут Александр Линков и с нуля за 6 месяцев я заработал более 1 000 000 рублей в IT без стажировок, тестовых заданий и собеседований.

📌Если герой не заработает денег, то разыграю 100 000 рублей среди своих подписчиков. Ты с нами? Жми👇
/channel/+uTz2z15cOyczNTAy
/channel/+uTz2z15cOyczNTAy
/channel/+uTz2z15cOyczNTAy

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

Senior C++ Developer

Алгоритм upper_bound

Он возвращает итератор, указывающий на первый элемент в диапазоне [first, last), который больше значения, или last, если такой элемент не найден.

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

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

Senior C++ Developer

Boson — разработка СУБД «с нуля» (часть II)

Смотреть статью

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

Senior C++ Developer

Boson — разработка СУБД «с нуля» (часть I)

Смотреть статью

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

Senior C++ Developer

💪 Разрабатываете на С++?

Время повышать квалификацию — научитесь разрабатывать кроссплатформенное прикладное ПО!

🔥OTUS запускает онлайн-курс «Разработка прикладного ПО на Qt и ОС Аврора».

За 5 месяцев
вы освоите одну из лучших кроссплатформенных библиотек для разработки UI на С++ — Qt, а также научитесь работать с развивающейся ОС Аврора. Благодаря этим навыкам вы сможете участвовать в проектах, разрабатывающих мобильные приложения для госкомпаний и крупного бизнеса.

После обучения вы сможете:
— Спроектировать и реализовать приложение на Qt+QML, при необходимости масштабировать и видоизменять их.
— Создавать графические приложение для ОС Аврора на Qt+QML.
— Реализовать приложение, взаимодействующее с системными сервисами ОС Аврора.

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

➡️ Пройдите вступительный тест, чтобы записаться в группу: https://otus.pw/9yH6/
На курс действует рассрочка.

Нативная интеграция. Информация о продукте www.otus.ru

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

Senior C++ Developer

На языке C++ можно создавать с нуля самые разные программы: от беспилотных автомобилей и робототехники до веб-браузеров, микроконтроллеров, серверов и видеоигр. Если вы когда-нибудь мечтали менять мир, то проще всего начать делать это в цифровом виде и на этом языке. А ещё С++ даёт крепкую базу знаний. Выучив его, вам будет проще освоить любой смежный инструмент.
Обучиться языку можно на курсе Яндекс Практикума «Разработчик C++».
На курсе вы:
научитесь писать эффективный код;
разберётесь в стандартной библиотеке C++;
начнёте работать с Git, IDE и компиляторами;
познакомитесь с базовыми алгоритмами и структурами данных;
создадите действующие сервисы и добавите 3+ проекта в портфолио.
На всех этапах вас будут сопровождать опытные разработчики: мы не дадим просесть по учёбе и поможем выкроить время на образование. Вы будете практиковаться на реальных кейсах и положите в портфолио работающие проекты. А карьерные консультации подготовят вас к разговору о повышении или помогут с поиском новой работы. 
Пройдите первый бесплатный урок с 1 по 14 мая и получите скидку 7% на оплату курса.

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

Senior C++ Developer

#вопросы_с_собеседований
Возможно ли иметь рекурсивную встроенную функцию?

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

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

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

Senior C++ Developer

SFINAE (Substitution Failure Is Not An Error)

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

В этом примере функция my_function будет компилироваться только для типов данных, которые являются целочисленными. Если мы передадим в функцию строку, то компиляция завершится неудачей, потому что std::enable_if_t не сможет замениться на допустимый тип.

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

Senior C++ Developer

Стажировка Deep Dive: что это, кого ищут и почему это может быть интересней, чем классическая стажировка 🤔

Deep Dive — оплачиваемая стажировка от Яндекс Маркета, которая проходит
в формате буткемпа. Это интенсив, где участники в течение 3–4 месяцев могут поработать сразу в двух разных командах и выбрать ту, что нравится больше.

Стажёров ищут по трём направлениям:
— бэкенд (С++, Java)
— фронтенд (JavaScript)
— мобильная разработка (iOS, Android)

Что вас ждёт?
1️⃣ Знакомство с технологиями Яндекса, особенностями процесса разработки, программами и инструментами.
2️⃣ Работа над реальными задачами в первой команде и комплексная обратная связь, по итогам которой вам подберут вторую команду.
3️⃣ Работа над новыми задачами во второй команде.

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

Выход на стажировку 31 мая
📎 Подать заявку

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

Senior C++ Developer

#вопросы_с_собеседований
Что такое хеш-функция? Объясните на примере

Хеш-функция
- это функция, которая принимает на вход некоторые данные и возвращает фиксированный размер выходных данных, называемый хешем. Такие функции широко используются в C++ для решения задач с поиском и индексированием данных. Они позволяют быстро находить элементы в массивах или хранилищах данных.

Рассмотрим применение на примере кода выше:
Мы создаем объект хеш-функции для строки и используем его для вычисления хеша для строки "Hello, world!". Результатом выполнения программы будет вывод на экран хеш-значения для этой строки.

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

Senior C++ Developer

🔥 Пройди тест по Rust и проверь свои знания.

Ответишь
— пройдешь на продвинутый курс "Rust Developer. Professional" от OTUS по специальной цене + получишь доступ к записям открытых уроков курса🎁 .

👉 ПРОЙТИ ТЕСТ: https://otus.pw/KYp6/

Нативная интеграция. Информация о продукте www.otus.ru

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

Senior C++ Developer

System Design — это одна из ключевых компетенций любого опытного разработчика. Хотите улучшить свои навыки в разработке на Golang? Приглашаем вас 🗓 3 мая в 20:00 на открытый урок «System Design» в OTUS.

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

Спикером выступит 👨‍💻 Владимир Балун, ведущий разработчик в Ozon. Сейчас Владимир занимается разработкой высоконагруженных сервисов Observability platform.

👉 Пройдите вступительный тест, чтобы участвовать — https://otus.pw/ruC7/

Вебинар приурочен к старту онлайн-курса «Golang Developer. Professional» в OTUS. Курс доступен в рассрочку.

Реклама. Информация о рекламодателе на сайте
www.otus.ru.

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

Senior C++ Developer

assert()

assert()
- макроопределение для вывода отладочных диагностических сообщений. Используется для включения в программу диагностических операторов и принимает один аргумент (int expression).

Аpгyмент expression должен быть выражением, которое принимает значение истина (не ноль), если программа работает так, как вы предполагаете.
Когда expression ложно (ноль), assert вызывает abort, предварительно выведя сообщение, показывающие, какая и где произошла ошибка:

assertion failed: expression, file filename, line lineno

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

Senior C++ Developer

⚙️ Курс «Введение в реверс-инжиниринг» от Академии Кодебай

Старт: 8 мая
Длительность: 4.5 месяца

Одна из сильнейших команд по информационной безопасности Codeby School представляет онлайн-курс «Введение в реверс-инжиниринг». Данный курс будет полезен вирусным аналитикам, реверс-инженерам, программистам, разработчикам ПО, багхантерам и пентестерам.

ℹ️ Преимущества курса REFB:
✔️ Помощь куратора и других учеников при возникновении сложностей в обучении;
✔️ Проверка всех Д/З куратором и подсказки по решению заданий;
✔️ Ничего лишнего – только базовая информация для введения в реверс-инжиниринг;

🤔 Интересно знать! Специалисты с навыками реверс-инжиниринга могут зарабатывать от 100 до 350 тыс. руб. в месяц. Начните становиться одним из них – записывайтесь на онлайн-курс «Введение в реверс-инжиниринг»!

🔥 Имеется промо-доступ на 7 дней!

Узнать подробнее о курсе: https://reverse-intro.codeby.school/

Реклама. Информация о рекламодателе на сайте https://codeby.school/

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

Senior C++ Developer

Wt

Wt — это фреймворк веб-приложений, который позволяет разработчикам создавать веб-приложения с использованием C++. Его встроенные виджеты и компоненты позволяют легко создавать сложные веб-приложения с минимальными усилиями.

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

https://www.webtoolkit.eu/wt

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

Senior C++ Developer

Алгоритм merge

Объединяет две отсортированные последовательности, ограниченные диапазонами [first1,last1) и [first2,last2), в единую отсортированную последовательность, начинающуюся с позиции result.

Шаблон:
merge (initer1 beg1, initer1 end1,
initer2 beg2, initer2 end2,
outiter res).

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

Senior C++ Developer

На языке C++ можно создавать с нуля самые разные программы: от беспилотных автомобилей и робототехники до веб-браузеров, микроконтроллеров, серверов и видеоигр. Если вы когда-нибудь мечтали менять мир, то проще всего начать делать это в цифровом виде и на этом языке. А ещё С++ даёт крепкую базу знаний. Выучив его, вам будет проще освоить любой смежный инструмент.
Обучиться языку можно на курсе Яндекс Практикума «Разработчик C++».

На курсе вы:
• научитесь писать эффективный код;
• разберётесь в стандартной библиотеке C++;
• начнёте работать с Git, IDE и компиляторами;
• познакомитесь с базовыми алгоритмами и структурами данных;
• создадите действующие сервисы и добавите 3+ проекта в портфолио.
На всех этапах вас будут сопровождать опытные разработчики: мы не дадим просесть по учёбе и поможем выкроить время на образование. Вы будете практиковаться на реальных кейсах и положите в портфолио работающие проекты. А карьерные консультации подготовят вас к разговору о повышении или помогут с поиском новой работы.

Записаться на курс можно здесь: https://practicum.yandex.ru/cpp/

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

Senior C++ Developer

Успей подать заявку в Школу бэкенд-разработки от Академии Яндекса!

Мы приглашаем специалистов с опытом коммерческой разработки не менее года, готовых получать новые знания о бэкенде высоконагруженных сервисов и не только. В этом году обучение пройдет по четырем трекам: Python, Java, C++ и Go.

Обучение состоит из двух этапов:
🔸 с 6 июня по 31 июля — лекции и практические задания в онлайн-формате;
🔸 с 1 по 27 августа — офлайн-этап: студенты соберутся в команды, чтобы реализовать настоящий проект от Яндекса в офисах в Москве, Белграде и Алматы.

Участие в школах бесплатное, занятия можно совмещать с работой или учёбой. Иногородним студентам школы Яндекс оплатит проживание и билеты во время офлайн-этапа. Лучшим студентам по итогам школы — офер в штат Яндекса.

Подать заявку можно до 27 апреля: https://clck.ru/34C7VQ

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

Senior C++ Developer

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

lvalue - это всё, что имеет имя, rvalue - это то, что имени не имеет. Исторически сложились такие названия, потому что lvalue всегда было то, что писалось с левой стороны присваивающего выражения, а rvalue - это то, что появлялось только справа от этого выражения.

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

Senior C++ Developer

Пишем простые крестики-нолики на C++

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

Смотреть статью

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