#вопросы_с_собеседований
Что такое rvalue, lvalue?
lvalue - это всё, что имеет имя, rvalue - это то, что имени не имеет. Исторически сложились такие названия, потому что lvalue всегда было то, что писалось с левой стороны присваивающего выражения, а rvalue - это то, что появлялось только справа от этого выражения.
Что такое rvalue, lvalue?
lvalue - это всё, что имеет имя, rvalue - это то, что имени не имеет. Исторически сложились такие названия, потому что lvalue всегда было то, что писалось с левой стороны присваивающего выражения, а rvalue - это то, что появлялось только справа от этого выражения.
Wt
Wt — это фреймворк веб-приложений, который позволяет разработчикам создавать веб-приложения с использованием C++. Его встроенные виджеты и компоненты позволяют легко создавать сложные веб-приложения с минимальными усилиями.
Кроме того, Wt предоставляет модель событий на стороне сервера, которая позволяет разработчикам писать веб-приложения, обладающие высокой отзывчивостью и интерактивностью.
https://www.webtoolkit.eu/wt
Wt — это фреймворк веб-приложений, который позволяет разработчикам создавать веб-приложения с использованием C++. Его встроенные виджеты и компоненты позволяют легко создавать сложные веб-приложения с минимальными усилиями.
Кроме того, Wt предоставляет модель событий на стороне сервера, которая позволяет разработчикам писать веб-приложения, обладающие высокой отзывчивостью и интерактивностью.
https://www.webtoolkit.eu/wt
www.webtoolkit.eu
Wt, C++ Web Toolkit — Emweb
Emweb provides complete solutions for web-based user interfaces using our popular open source library Wt.
#вопросы_с_собеседований
В чем различия между dynamic_cast и reinterpret_cast?
Правильный ответ может звучать так:
Динамическое приведение - это безопасное приведение по иерархии наследования, в том числе и для виртуального наследования. Проводит преобразование типа, предварительно убедившись (с помощью RTTI), что объект expression_from в действительности является объектом типа type_to. Если нет: для указателей возвращает NULL.
При reinterpret_cast результат не гарантирован, проверки не осуществляются.
Ограничения на expression_from: порядковый тип (логический, символьный, целый, перечисляемый), указатель, ссылка.
Ограничения на type_to: для порядкового типа или указателя — порядковый тип или указатель. Для ссылки — ссылка.
В чем различия между dynamic_cast и reinterpret_cast?
Правильный ответ может звучать так:
Динамическое приведение - это безопасное приведение по иерархии наследования, в том числе и для виртуального наследования. Проводит преобразование типа, предварительно убедившись (с помощью RTTI), что объект expression_from в действительности является объектом типа type_to. Если нет: для указателей возвращает NULL.
При reinterpret_cast результат не гарантирован, проверки не осуществляются.
Ограничения на expression_from: порядковый тип (логический, символьный, целый, перечисляемый), указатель, ссылка.
Ограничения на type_to: для порядкового типа или указателя — порядковый тип или указатель. Для ссылки — ссылка.
Что произойдет в результате выполнения этого кода?
Anonymous Quiz
6%
Ошибка на этапе компиляции
5%
0 1 2 Bye
11%
0 1 Bye
3%
Ошибка на этапе выполнения
75%
Это вечный цикл
Ключевое слово typedef
Это ключевое слово, которое создает псевдоним для существующего типа данных.
По соглашению имена typedef объявляются с использованием суффикса "_t".
Это помогает указать, что идентификатор представляет собой тип, а не переменную или функцию, а также помогает предотвратить конфликты имен с другими типами идентификаторов.
Это ключевое слово, которое создает псевдоним для существующего типа данных.
По соглашению имена typedef объявляются с использованием суффикса "_t".
Это помогает указать, что идентификатор представляет собой тип, а не переменную или функцию, а также помогает предотвратить конфликты имен с другими типами идентификаторов.
assert()
assert() - макроопределение для вывода отладочных диагностических сообщений. Используется для включения в программу диагностических операторов и принимает один аргумент (int expression).
Аpгyмент expression должен быть выражением, которое принимает значение истина (не ноль), если программа работает так, как вы предполагаете.
Когда expression ложно (ноль), assert вызывает abort, предварительно выведя сообщение, показывающие, какая и где произошла ошибка:
assertion failed: expression, file filename, line lineno
assert() - макроопределение для вывода отладочных диагностических сообщений. Используется для включения в программу диагностических операторов и принимает один аргумент (int expression).
Аpгyмент expression должен быть выражением, которое принимает значение истина (не ноль), если программа работает так, как вы предполагаете.
Когда expression ложно (ноль), assert вызывает abort, предварительно выведя сообщение, показывающие, какая и где произошла ошибка:
assertion failed: expression, file filename, line lineno
#вопросы_с_собеседований
Напишите алгоритм обхода графа в глубину.
Результатом должен стать код, который представляет из себя алгоритм обхода графа в глубину (DFS - Depth First Search). Пример представлен на изображении.
Напишите алгоритм обхода графа в глубину.
Результатом должен стать код, который представляет из себя алгоритм обхода графа в глубину (DFS - Depth First Search). Пример представлен на изображении.
Почему код выше выводит числа, а не символы?
Anonymous Quiz
21%
Нет перегрузки basic_ostream принимающей тип chat.
25%
Код ведет себя верно, ведь в массив записаны числа типа int.
54%
Поведение определено перегрузкой operator<< принимающего char.
Применение указателя unique_ptr<T>
В функции foo1 мы выделяем память для указателя ptr и затем освобождаем ее с помощью оператора delete. Однако, если произойдет исключение во время работы функции, то память не будет освобождена, что приведет к утечке памяти.
Во втором примере мы используем
Таким образом, мы можем гарантировать, что ресурсы будут корректно освобождены, даже в случае исключения.
Данный тип указателей полезен, когда нужен указатель на объект, на который НЕ будет других указателей и который будет удален после удаления указателя.
В функции foo1 мы выделяем память для указателя ptr и затем освобождаем ее с помощью оператора delete. Однако, если произойдет исключение во время работы функции, то память не будет освобождена, что приведет к утечке памяти.
Во втором примере мы используем
std::unique_ptr, который выделяет память при инициализации и освобождает память при уничтожении объекта.Таким образом, мы можем гарантировать, что ресурсы будут корректно освобождены, даже в случае исключения.
Данный тип указателей полезен, когда нужен указатель на объект, на который НЕ будет других указателей и который будет удален после удаления указателя.
Механизм синхронизации mutex
Мьютекс блокирует доступ к ресурсу, пока поток не освободит его. Мьютекс может быть заблокирован только одним потоком в определенный момент времени. При попытке другого потока заблокировать мьютекс, он будет заблокирован до тех пор, пока первый поток не разблокирует его.
Синтаксис:
Заголовочный файл |
Мьютекс блокирует доступ к ресурсу, пока поток не освободит его. Мьютекс может быть заблокирован только одним потоком в определенный момент времени. При попытке другого потока заблокировать мьютекс, он будет заблокирован до тех пор, пока первый поток не разблокирует его.
Синтаксис:
Заголовочный файл |
#include <mutex>
Объявление | std::mutex mutex_name;
Захват мьютекса | mutex_name.lock();
Освобождение мьютекса | mutex_name.unlock();#вопросы_с_собеседований
Что такое хеш-функция? Объясните на примере
Хеш-функция - это функция, которая принимает на вход некоторые данные и возвращает фиксированный размер выходных данных, называемый хешем. Такие функции широко используются в C++ для решения задач с поиском и индексированием данных. Они позволяют быстро находить элементы в массивах или хранилищах данных.
Рассмотрим применение на примере кода выше:
Мы создаем объект хеш-функции для строки и используем его для вычисления хеша для строки "Hello, world!". Результатом выполнения программы будет вывод на экран хеш-значения для этой строки.
Что такое хеш-функция? Объясните на примере
Хеш-функция - это функция, которая принимает на вход некоторые данные и возвращает фиксированный размер выходных данных, называемый хешем. Такие функции широко используются в C++ для решения задач с поиском и индексированием данных. Они позволяют быстро находить элементы в массивах или хранилищах данных.
Рассмотрим применение на примере кода выше:
Мы создаем объект хеш-функции для строки и используем его для вычисления хеша для строки "Hello, world!". Результатом выполнения программы будет вывод на экран хеш-значения для этой строки.
Что произойдет в результате работы этой программы?
Anonymous Quiz
26%
Ошибки компиляции
37%
Вывод переменной а
37%
Исключение вызовет Debug error
Кортежи
Как и пара, кортеж представляет собой набор значений фиксированного размера для различных типов данных.
Иногда удобнее использовать
Как и пара, кортеж представляет собой набор значений фиксированного размера для различных типов данных.
Иногда удобнее использовать
std::array вместо кортежа. Такой массив подобен обычному массиву в Си вместе с несколькими функциями стандартной библиотеки C++. Эта структура данных была добавлена в 11 версии C++.SFINAE (Substitution Failure Is Not An Error)
Это механизм в C++, который позволяет компилятору выбирать наиболее специфичный шаблон функции или класса, когда для нескольких шаблонов применимы одинаковые параметры, но с разными типами.
В этом примере функция
Это механизм в C++, который позволяет компилятору выбирать наиболее специфичный шаблон функции или класса, когда для нескольких шаблонов применимы одинаковые параметры, но с разными типами.
В этом примере функция
my_function будет компилироваться только для типов данных, которые являются целочисленными. Если мы передадим в функцию строку, то компиляция завершится неудачей, потому что std::enable_if_t не сможет замениться на допустимый тип.