seniorcpp | Unsorted

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

13626

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

Subscribe to a channel

Senior C++ Developer

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

Работа с разделяемой памятью (shared memory) предполагает использование операций чтения и записи данных в общую область памяти, которая разделяется между несколькими процессами.

Среди особенностей можно выделить основные:

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

Кроме того, при работе с shared memory необходимо учитывать, что изменения данных в одном процессе автоматически не отображаются в других процессах. Для обновления данных необходимо явно синхронизироваться между процессами.

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

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

Senior C++ Developer

#вакансия #удалённо #job #remote #parttime #наставник #с

Компания:
OTUS – образовательная платформа🦉
Мы 6 лет специализируемся на курсах для IT-специалистов разного уровня: от junior до senior.

Вакансия: наставник на курс "Программист С"

Локация: удаленно; сами выбираете нагрузку.

Наставник:
- проверяет домашние задания и дает фидбек на английском языке;
- взаимодействует со студентами;
- отвечает на вопросы;
- помогает при подготовке проектной работы.

Условия:
Проверка 1 домашнего задания - от 300 до 400 руб.

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

Вы сможете:
-проходить наши курсы со скидкой;
-набирать себе команду из лучших студентов;
-совмещать с текущей фулл-тайм загрузкой.

Хотите узнать больше? @anna_phoenix7

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

Senior C++ Developer

#вопросы_с_собеседований
Что случится, если exception выйдет за пределы потока?

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

Чтобы избежать данной ситуации, необходимо обернуть код, где может возникнуть исключение, в try-catch блок на том же уровне, что и поток, с которым он связан.

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

Senior C++ Developer

template

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

В этом примере мы определяем шаблонную функцию max с типом данных T. Эта функция принимает два аргумента типа T и возвращает значение типа T, которое является максимальным. В вызове функции T будет заменено на фактический тип данных, переданный в качестве параметра шаблона.

Несмотря на то, что template используется для объявления шаблонных классов и функций, он может также применяться для реализации SFINAE.
Это означает, что при использовании шаблонов и при неудачной попытке их инстанцирования компилятор не сгенерирует ошибку, а будет искать альтернативные варианты. Использование этой концепции позволяет более гибко управлять перегрузками функций и классов, что может быть особенно полезно при написании библиотек или фреймворков.

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

Senior C++ Developer

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

Композиция в c++ позволяет создавать новый класс из более мелких существующих классов, тогда как наследование от других классов позволяет использовать существующие свойства класса.

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

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

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

Senior C++ Developer

👩‍💻 Тест на знание языка

— Ответьте на 20 вопросов и проверьте, насколько хорошо вы знаете язык C++. Сможете сдать — пройдёте на продвинутый онлайн-курс "C++ Developer. Professional" со скидкой!

👉 ПРОЙТИ ТЕСТ ОНЛАЙН-КУРСА "C++ Developer. Professional"

Курс доступен в рассрочку.

🎁 Пройдете успешно тест, получите доступ к открытым урокам курса.

Хотите посмотреть как проходит обучение? Приходите на открытый урок курса.

📢📢 31.05 - регистрация на открытый урок "Обзор современных инструментов разработки на C++"

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

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

Senior C++ Developer

Хотите бесплатно и эффективно выучить C++ или прокачать свои навыки программирования?

В канале ребята 24/7 пишут код, тестируют разные библиотеки, копаются в их настройках и применяют в работе. А потом делятся с подписчиками.

Учиться бесплатно: @cpluspluc

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

Senior C++ Developer

#вопросы_с_собеседований
Можно ли использовать exceptions в конструкторе / деструкторе?

Да, в C++ можно использовать исключения (exceptions) в конструкторе и деструкторе класса. Однако, следует быть внимательным при использовании исключений в этих частях кода и учитывать некоторые особенности.

В конструкторе:

- Если конструктор выбрасывает исключение, объект не будет полностью сконструирован, и память, выделенная под него, не будет освобождена автоматически. Это может привести к утечке ресурсов или некорректному состоянию программы. В таких случаях следует использовать RAII (Resource Acquisition Is Initialization), чтобы гарантировать правильное освобождение ресурсов при исключениях.
- Конструкторы должны быть безопасными в отношении исключений. Если конструктор может выбросить исключение, стоит использовать try-catch в самом конструкторе или передать исключение дальше в коде.

В деструкторе:

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

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

Senior C++ Developer

Sockets

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

Для работы с сокетами в C++ вы можете использовать библиотеку сокетов, такую как BSD Sockets или Boost.Asio.

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

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

Senior C++ Developer

ЧЕ, АЙТИШНИК, ДА? КРАСАВЧИК!

Сделали для вас самую полезную подборку каналов по программированию. В ней собраны официальные русскоязычные каналы самых популярных языков. Там только топовая информация, которая потом появляется на платных курсах. Надо подписаться: @it

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

Senior C++ Developer

std::set

Представляет собой контейнер, который содержит уникальные элементы, расположенные в отсортированном порядке.
Он реализован в виде сбалансированного дерева (обычно красно-черного дерева), что обеспечивает высокую эффективность операций вставки, удаления и поиска элементов.

Некоторые особенности std::set:

- Уникальность элементов: Каждый элемент в std::set является уникальным, в контейнере не может быть несколько одинаковых элементов.

- Сортировка элементов: std::set автоматически сортирует элементы по их значениям при вставке, это позволяет эффективно выполнять операции поиска.

- Динамическое изменение: std::set позволяет добавлять и удалять элементы из контейнера в любое время.

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

Senior C++ Developer

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

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

Для обеспечения безопасного доступа к критической секции в C++ используются механизмы синхронизации, такие как мьютексы (std::mutex) и блокировки (std::lock_guard, std::unique_lock). Перед выполнением критической секции поток должен захватить мьютекс, блокируя его для других потоков. После завершения работы в критической секции мьютекс освобождается, позволяя другим потокам получить доступ к ресурсу.

Использование критических секций и мьютексов позволяет избежать состояний гонки (race conditions) и обеспечить корректную и безопасную работу с общими данными в многопоточных приложениях.

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

Senior C++ Developer

#вакансия #удалённо #job #remote #parttime #наставник #с

Компания:
OTUS – образовательная платформа🦉
Мы 6 лет специализируемся на курсах для IT-специалистов разного уровня: от junior до senior.

Вакансия: наставник на курс "Программист С"

Локация: удаленно; сами выбираете нагрузку.

Наставник:
- проверяет домашние задания и дает фидбек на английском языке;
- взаимодействует со студентами;
- отвечает на вопросы;
- помогает при подготовке проектной работы.

Условия:
Проверка 1 домашнего задания - от 300 до 400 руб.

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

Вы сможете:
-проходить наши курсы со скидкой;
-набирать себе команду из лучших студентов;
-совмещать с текущей фулл-тайм загрузкой.

Хотите узнать больше? @anna_phoenix7

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

Senior C++ Developer

👁‍🗨 Каких навыков ждут работодатели от С++ разработчиков в 2023 году?

👨‍💻 Ответ — навык разработки кроссплатформенного ПО на Qt и ОС Аврора. Особенно это важно для работы в госсекторе и компаниях, работающих с госсектором.

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

🚀 За 5 месяцев на курсе вы изучите:
🟠 структуру библиотеки Qt
🟠научитесь писать программы на Qt + QML
🟠 освоите широкий спектр технологий, которые необходимы для создания мобильных приложений на ОС Аврора

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

🔵Старт курса — 30 мая. Возможны разные способы оплаты курса.

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

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

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

Senior C++ Developer

Dependency Injection

Dependency Injection (DI) — это паттерн проектирования, который позволяет управлять зависимостями между объектами.
Он помогает разделить создание объектов от их использования и обеспечить более гибкую и тестируемую архитектуру программы.

В DI объекты получают свои зависимости не напрямую, а через внешний источник, который их предоставляет. Этот источник называется контейнером внедрения зависимостей. Контейнер отвечает за создание и управление зависимостями, а объекты получают их через конструкторы, методы или свойства.

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

Senior C++ Developer

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

В с++ реализовано множество примитивов синхронизации, ниже представлены их предназначения:

Mutex - используется для блокировки мьютекса при доступе к разделяемому ресурсу.

lockguard и uniquelock - используются для автоматической блокировки и разблокировки мьютекса.

condition_variable - используется для уведомления потоков о состоянии разделяемого ресурса.

atomic - используется для атомарной операции с переменными.

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

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

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

Senior C++ Developer

PIMPL (Pointer to Implementation)

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

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

В данном примере пользователь класса MyObject не видит внутреннюю реализацию объекта, что позволяет добавлять/удалять поля без необходимости изменять интерфейс класса. Работа с внутренними данными осуществляется через методы класса Impl, которые вызываются в функциях-членах класса MyObject.

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

Senior C++ Developer

Хотите разрабатывать игры, обучать нейросети или создавать приложения наподобие Telegram и Skype? Тогда вам стоит изучать C++.

📆Не знаете, с чего начать? Приходите 7 июня в 20:00 мск на вебинар, приуроченный к старту онлайн-курса «Специализация С++ Developer» в OTUS.

Тема открытого урока: «Ускоряем матричное умножение на C++».

На занятии мы:
— Рассмотрим способы хранения матриц в памяти
— Сравним по скорости исполнения различные алгоритмы умножения
— Обсудим причины отличий во времени исполнения.

В результате научитесь писать микробенчмарки на C++ с использованием библиотеки Google Benchmark, узнаете, как ускорить операции умножения матриц.

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

Продолжить обучение на онлайн-курсе можно в рассрочку.

➡️Для участия нужно только зарегистрироваться: https://otus.pw/JwrK/

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

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

Senior C++ Developer

Хочешь работать в крупной IT-компании, но не горишь желанием проходить 100 500 этапов собеседования? Тогда регистрируйся на One Day Offer от разработчика офисного ПО МойОфис и получи предложение о работе всего за один день.

Кто может принять участие в отборе?
Программисты C++ из любого региона страны.
Обязательные требования – хорошее знание C++ 11/14, STL, Boost, QT и опыт работы от 3-х лет.

Чем предстоит заниматься?
Разработкой редакторов (текст, таблица, презентации), мобильной почты или календаря.

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

Как принять участие в отборе?
Подай заявку на сайте проекта до 10 июня и выполни тестовое задание.
В случае успешного прохождения тестирования тебя пригласят на онлайн-собеседование, которое пройдет 17 июня. А уже вечером того же дня будут объявлены результаты.

Все подробности тут.

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

Senior C++ Developer

std::thread

std::thread является частью стандартной библиотеки C++ и предоставляет возможность создания и управления потоками выполнения.
Он позволяет запускать функции в отдельных потоках, обеспечивая параллельное выполнение кода.

Обратите внимание, что после создания потока std::thread, вы должны вызвать join() или detach() для корректной обработки завершения потока.

В приведенном примере мы использовали join(), чтобы основной поток дождался завершения потока t1. Если вы вызываете join() после завершения потока, программа может выдать исключение или вызвать неопределенное поведение.

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

Senior C++ Developer

#вопросы_с_собеседований
В чем заключается недостаток интерфейса front() + pop_front()?

*Речь идет о недостатке интерфейса front() + pop_front() в контексте thread-safe гарантий.

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

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

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

Senior C++ Developer

std::weak_ptr

std::weak_ptr является частью стандартной библиотеки и представляет собой "слабый указатель" на объект, управляемый std::shared_ptr.

Он позволяет получать доступ к объекту, на который ссылается std::shared_ptr, но не влияет на его счётчик ссылок. Такой подход полезен в ситуациях, когда мы хотим избежать возможности утечек памяти из-за циклических ссылок между объектами.

В этом примере мы создаем два объекта типа Node, а затем устанавливаем циклическую ссылку между ними. Если бы мы использовали std::shared_ptr вместо std::weak_ptr для хранения ссылок, объекты node1 и node2 никогда не были бы удалены, поскольку они бы взаимно ссылались друг на друга и счётчики ссылок не достигали бы нуля.

*На втором изображении представлен результат работы кода.

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

Senior C++ Developer

⚙️ Курс «Реверсивный инжиниринг ПО под ОС Windows»
Старт: 5 июня
Длительность: 6 месяцев

🎓 Курс позволяет подробно изучить основные направления реверсинга приложений под Windows. В курсе подробно рассматриваются команды языка Ассемблера, детальный анализ приложений различного уровня сложности, от специальных задач типа crackme до рабочих приложений. Также изучаются образцы вредоносных приложений и различные техники, используемые исследователями.

ℹ️ Кому будет полезен курс:

✔️ Пентестерам, желающим лучше изучить направление реверсинга приложений;
✔️ Вирусным аналитикам и исследователям кода занимающимся изучением вредоносного ПО;
✔️ Программистам, разрабатывающим продукты в области ИБ;

*Для прохождения курса необходимы базовые знания реверса

🏆 Выдаём сертификат при успешной сдаче экзамена

В честь четвертой безоговорочной победы Codeby на Standoff, команда Академии дарит скидку 10% на оплату курса до 15 июня. Промокод: REWWIN0623

📌 Узнать подробнее о курсе

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

Senior C++ Developer

Pipes

В C++ пайпы (pipes) представляют собой механизм для односторонней связи между процессами.
Они позволяют передавать данные из одного процесса в другой, где один процесс выступает в роли писателя (write end), а другой процесс выступает в роли читателя (read end) пайпа.

Для работы с пайпами вы можете использовать системные вызовы, такие как pipe, fork и функции чтения/записи (read и write), доступные в POSIX-совместимых операционных системах.

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

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

Senior C++ Developer

std::map

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

Особенности std::map в сравнении с std::set:

- std::map является контейнером, который хранит пары ключ-значение, где каждый ключ уникален, в отличие от std::set, который хранит уникальные значения без дополнительных значений.
- В std::map операции вставки, удаления, поиска элементов, а также автоматической сортировки, осуществляются по ключу, а в std::set это происходит по самому значению.
- В std::map вы можете обновлять значения элементов, используя их ключи. В std::set невозможно обновить значение элемента, поскольку значениями являются сами элементы.

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

Senior C++ Developer

Visitor

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

Основная идея паттерна Visitor заключается в том, чтобы объекты классов принимали "посетителя" и передавали себя в качестве аргумента методам "посетителя", соответствующим своему классу. "Посетитель", в свою очередь, реализует различные методы для обработки разных типов объектов.

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

Senior C++ Developer

Серия видеоуроков по созданию игры на C++

Смотреть видео

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

Senior C++ Developer

move constructor

Move-конструктор — это специальный конструктор, который позволяет эффективно перемещать ресурсы из одного объекта в другой, без необходимости копирования данных.
Он используется для реализации семантики перемещения (move semantics) и оптимизации работы с временными объектами.

Move-конструктор принимает rvalue ссылку (&&) на объект, который будет перемещен, и выполняет простое копирование указателей на данные, а не их фактическое копирование.

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

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

Senior C++ Developer

паттерн Observer

Это паттерн проектирования, который позволяет объектам автоматически оповещать другие объекты об изменениях в своем состоянии.
В этом паттерне есть два основных компонента: наблюдаемый объект (subject) и наблюдатели (observers).

Когда состояние наблюдаемого объекта изменяется, все зарегистрированные наблюдатели уведомляются об этом изменении и автоматически обновляются.

В этом примере, когда вызывается метод setData, он обновляет данные и вызывает метод notifyObservers, он уведомляет всех зарегистрированных наблюдателей, вызывая update и передавая новые данные.

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

Senior C++ Developer

🔥 Тест на знание языка

— Ответьте на 20 вопросов и проверьте, насколько вы готовы к углубленному изучению Rust. Сможете сдать — пройдёте на продвинутый онлайн-курс "Rust Developer. Professional" со скидкой!

👉 ПРОЙТИ ТЕСТ ОНЛАЙН-КУРСА "Rust Developer. Professional"

Курс доступен в рассрочку.

🎁 Пройдете успешно тест, получите доступ к открытым урокам курса.

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

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