Библиотека C/C++ разработчика | cpp, boost, qt
19.9K subscribers
1.87K photos
55 videos
16 files
4.09K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
Download Telegram
Pipes

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

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

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

Используется для генерации чисел на основе функции генератора, а затем присваивает эти значения элементам в контейнере в диапазоне [first, last).
#вопросы_с_собеседований
👍9
Что выведет код сверху?

Ответ:
10 99 40 99

В этой программе мы меняем местами определенные значения в двух векторах с помощью iter_swap.
#вопросы_с_собеседований
Предполагая, что buf является валидным указателем, в чем проблема в приведенном на картинке коде? Каким был бы альтернативный способ реализации этого, который позволил бы избежать этой проблемы?

Проблема в коде заключается в том, что условие --sz больше либо равно 0 всегда будет истинным, поэтому вы никогда не выйдете из цикла while (поэтому вы, вероятно, в конечном итоге испортите память или вызовете какое-то нарушение памяти или какой-либо другой программный сбой, в зависимости от того, что вы делаете внутри цикла). Причина, по которой условие, что--sz больше либо равно 0, всегда будет истинной, заключается в том, что тип sz равен size_t. size_t на самом деле просто псевдоним одного из основных беззнаковых целочисленных типов. Следовательно, поскольку sz не имеет знака, оно никогда не может быть меньше нуля (поэтому условие никогда не может быть ложным).
#вопросы_с_собеседований
👍142
Как работает std::unique_ptr?

std::unique_ptr — это умный указатель (smart pointer), предназначенный для управления динамически выделенными объектами. Он обеспечивает автоматическое освобождение памяти при выходе объекта из области видимости или при необходимости.

Принцип работы std::unique_ptr заключается в том, что он владеет указателем на выделенную память и следит за временем жизни этой памяти. Когда объект std::unique_ptr выходит из области видимости, он автоматически освобождает память, на которую он указывает, путем вызова оператора delete для хранящегося указателя.
#вопросы_с_собеседований
Когда Вы должны использовать список инициализации?

Ответ:
1) когда в классе есть ссылки,
2) когда есть константы,
3) когда у базового и выведенного класса есть конструктор с набором аргументов.
#вопросы_с_собеседований
7
Что выведет код сверху?

Ответ:
10
Объяснение:
Подобно struct и class, union может иметь методы. Подобно struct и в отличие от class, члены union по умолчанию являются общедоступными.

Поскольку данные-члены объединения совместно используют память, значение b становится таким же, как a.
#вопросы_с_собеседований
👍133
Проверить, найден ли элемент в массиве С++

В С++ вы должны использовать std::findи проверить, указывает ли результирующий указатель на конец диапазона.
#вопросы_с_собеседований
🔥8👍2
Можно ли выбрасывать exception из конструктора? Какие поля будут сконструированы, какие поля будут разрушены?

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

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

Важно помнить, что только те поля, которые были успешно сконструированы, будут разрушены. Если исключение выбрасывается в процессе конструирования поля, то это поле не будет разрушено, так как его конструктор не был успешно завершен.
#вопросы_с_собеседований
👍8
Что такое рефакторинг?

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

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

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

Рефакторинг особенно важен при работе над большими проектами, где код многократно изменяется и расширяется. Он позволяет поддерживать кодбейз чистым, современным и масштабируемым.
#вопросы_с_собеседований
👍10🔥2
Как тестировать закрытые методы?

Проверка закрытых методов в C++ может быть осуществлена путем написания тестовых случаев, которые используют публичные методы, которые в свою очередь вызывают закрытые методы. Этот подход называется "тестирование черного ящика" и позволяет тестировать функциональность закрытых методов, не раскрывая их реализацию.
#вопросы_с_собеседований
👍62
Как подсчитать количество элементов в std::list?

Чтобы подсчитать количество элементов в std::list, можно использовать следующие способы:

1. Вызвать метод size() самого списка. Он вернет количество элементов.
2. Проитерировать список циклом и считать элементы.
3. Воспользоваться алгоритмом std::distance, передав ему начало и конец списка.
4. Применить алгоритм std::count_if с условием, которое всегда истинно.
#вопросы_с_собеседований
👍8
Что такое деструктор?

Деструктор — это экземпляр функции-члена, который вызывается автоматически, если какой-либо объект собирается быть уничтоженным. Используется в основном для освобождения памяти.

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

Они могут быть объявлены как виртуальные или чисто виртуальные, но не как константные, изменчивые, константные изменчивые или статические.
#вопросы_с_собеседований
7👍1
Что такое SIMD-инструкции?

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

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

Основные преимущества SIMD:
— Повышение производительности за счет параллельных вычислений.
— Эффективное использование пропускной способности процессора.
— Уменьшение количества инструкций за счет векторизации.
— Оптимизация алгоритмов обработки массивов, матриц, фильтрации, графики.
#вопросы_с_собеседований
🔥12👍7🤔1
Возможно ли иметь рекурсивную встроенную функцию?

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

Компилятор с хорошим оптимизатором может встраивать рекурсивные вызовы до некоторой глубины, зафиксированной во время компиляции (скажем, три или пять рекурсивных вызовов), и вставлять нерекурсивные вызовы во время компиляции для случаев, когда фактическая глубина будет превышена во время выполнения.
#вопросы_с_собеседований
👍2
Что такое CI/CD и какие преимущества дает разработчику?

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

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

Непрерывное развертывание (или Continuous Delivery) направлено на автоматизацию процесса развертывания программного обеспечения в производственных средах. Он включает в себя автоматизацию шагов, необходимых для упаковки, развертывания и настройки приложения.

Вот некоторые преимущества CI/CD для разработчиков C++:

1. Раннее обнаружение ошибок.
2. Более быстрый цикл обратной связи.
3. Качество и ремонтопригодность кода.
4. Сотрудничество и коммуникация между разработчиками.
5. Автоматизация сборки, тестирования и развертывания кода.
6. Непрерывное развертывание.
7. Масштабируемость.
#вопросы_с_собеседований
👍7
В чем разница между многопоточностью и асинхронностью?

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

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

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

Таким образом, многопоточность эффективнее использует ресурсы процессора, а асинхронность проще в реализации и избегает проблем синхронизации.
#вопросы_с_собеседований
👍201
Какие есть способы инициализации полей класса?

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

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

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

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

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

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

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