Задачи и тесты по программированию | proghub
2.42K subscribers
655 photos
16 videos
23 files
915 links
Публикуем задачи и вопросы для подготовки к собесу.

Сотрудничество: @cyberJohnny
Download Telegram
👆Объяснение к предыдущему вопросу

👨🏻‍💻 Если тип T встраивает тип X, то T получает все методы X. В частности, если X является типом интерфейса, вложение заставляет T реализовать X. Программа скомпилируется, но в ходе выполнения выкинет панику с ошибкой переполнения стека.

Задачи и тесты по программированию
👆Пояснение к предыдущему вопросу

👨🏻‍💻 Так как функция call_with вызывается без шаблонов, компилятор попытается вывести тип T сам. Так как lambda не является std::function, то внутренний тип вывестись не может, и компилятор должен выкинуть ошибку.

Условно, C++ не разрешает конвертацию в шаблонный тип, потому что не понимает какая конвертация должна совершиться, какую std::function<void(T)> выбрать.

Задачи и тесты по программированию | proghub
👆Пояснение к предыдущему вопросу

👨🏻‍💻 Это правда, что Stop может не позваться, но за Start может стоять специальная логика, которая может позвать Stop, это не самая важная проблема написанного кода. Самая важная -- при инициализации Derived, periodicclosure не знает, что исполнять, а так как vptr инициализируется после Base конструктора, но до конца Derived constructor, может случиться datarace https://stackoverflow.com/questions/6591859/when-does-the-vptr-pointing-to-vtable-get-initialized-for-a-polymorphic-class

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

Такие Race ловит ThreadSanitizer, см https://github.com/google/sanitizers/wiki/ThreadSanitizerPopularDataRaces#data-race-on-vptr-during-construction

Задачи и тесты по программированию | proghub
Что напечатает программа?
Anonymous Quiz
10%
0
49%
1
25%
2
16%
Не определено
👎1
Какой из вариантов GetByKeyOrDefault является корректным?
Anonymous Poll
38%
1
34%
2
13%
3
16%
ни один
👆Пояснение к предыдущему вопросу

👨🏻‍💻 Отметим сразу, что первый вариант копирует возвращаемое значение и является корректным, проблем с lifetime не будет.

Второй вариант может быть корректным в некоторых случаях, но давайте рассмотрим следующий код.

const auto& v = GetByKeyOrDefault2(m, k, "127.0.0.1") будет типом const std::string& и если вернётся дефолтное значение, то вернётся временный объект, который после вызова функции разрушится, что ведет к неопределённому поведению.

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

Задачи и тесты по программированию | proghub
👍2
Ускоренный отбор в Яндекс – Intern week offer 🔥

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

Направления: Backend, Frontend или Mobile

Условия: стажировка оплачивается, длится от 3 до 6 месяцев, и вы можете выбрать занятость 20, 30 или 40 часов в неделю. Иногородним стажёрам мы оплачиваем проезд и проживание, а тех, кто хорошо себя проявит, будем рады видеть в штате.

Крайний срок подачи заявки и решения контеста – 30 октября.

👉Подать заявку: https://clck.ru/32VXKW
👍3