Накидайте плиз задачек на знание языка Си++
От: C0x  
Дата: 04.04.25 07:46
Оценка: :)
Коллеги накидайте плиз задачек для собеза по Си++. Нужно провести скрининг кандидатов примерно на 30 минут. Я никогда не проводил, да и на плюсах давненько не писал.
Основные требования: стандарт 2003 год — это кодовая база с которой кандидату придется работать.
Примерно, как я себе это представляю: мы с кандидатом открываем онлайн редактор (с совместным доступом к коду), там список задачек в виде кода и вопроса: what is wrong with this code? How to fix? Таким образом проверяются различные аспекты языка и статистически выбираем лучшего кандидата который закроет наибольшее кол-во. К примеру,
============================================
Problem 1: what is wrong here? Plz fix.
#include <iostream>
using namespace std;

int main() {
int* arr = new int(5);
delete[] arr;
return 0;
}
============================================
и т.д.
Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.
Re: Накидайте плиз задачек на знание языка Си++
От: Pavel Dvorkin Россия  
Дата: 04.04.25 07:54
Оценка: 6 (1)
Здравствуйте, C0x, Вы писали:

C0x>Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.


У меня нет, но поиск дал вот это

http://www.gotw.ca/gotw/
With best regards
Pavel Dvorkin
Re[2]: Накидайте плиз задачек на знание языка Си++
От: C0x  
Дата: 04.04.25 07:56
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, C0x, Вы писали:


C0x>>Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.


PD>У меня нет, но поиск дал вот это


PD>http://www.gotw.ca/gotw/


А он открывается у тебя? У меня пишет This page isn’t working
Re[3]: Накидайте плиз задачек на знание языка Си++
От: C0x  
Дата: 04.04.25 07:56
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Здравствуйте, C0x, Вы писали:


C0x>>>Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.


PD>>У меня нет, но поиск дал вот это


PD>>http://www.gotw.ca/gotw/


C0x>А он открывается у тебя? У меня пишет This page isn’t working


А сорри, видимо из-за VPN.
Re[3]: Накидайте плиз задачек на знание языка Си++
От: Pavel Dvorkin Россия  
Дата: 04.04.25 07:58
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>А он открывается у тебя? У меня пишет This page isn’t working


Вполне нормально.
Попробуй из Инкогнито, из иного браузера, иного провайдера.

Там, кстати, http, не https, может, в этом причина ?
With best regards
Pavel Dvorkin
Re: Накидайте плиз задачек на знание языка Си++
От: sergii.p  
Дата: 04.04.25 08:22
Оценка: 4 (1)
Здравствуйте, C0x, Вы писали:

C0x>Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.


я всегда кидаю подобную задачу. С описанием "сделайте ревью кода и приведите исправления, если потребуются"

struct Base
{
    virtual void foo() const { std::cout << "base\n"; }
};

struct Derived: Base {
    virtual void foo() { std::cout << "derived\n"; }
    private: std::string trash {"123456789123456789"};
};

int main() {
    std::vector<Base> vec;
    vec.push_back(Derived{});
    for(const auto el: vec) {
        el.foo();
    }
}


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

Ещё бывает по шаблонам спрашиваю. Прошу написать функцию sum, которая суммирует различные типы

sum(std::string{""}, "abc");
sum(0, 1.0);


но это если кандидат отвечает бодро и говорить особо уже не о чем. Большинству хватает первой задачи. К тому же тут всего полчаса — маловато.
Отредактировано 04.04.2025 8:24 sergii.p . Предыдущая версия .
Re[2]: Накидайте плиз задачек на знание языка Си++
От: alpha21264 СССР  
Дата: 04.04.25 08:30
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>но это если кандидат отвечает бодро и говорить особо уже не о чем. Большинству хватает первой задачи. К тому же тут всего полчаса — маловато.


Ну с первой задачей я справлюсь.
А про шаблоны честно скажу, что не умею.
Откажете?

Течёт вода Кубань-реки куда велят большевики.
Re[2]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 04.04.25 08:43
Оценка: 3 (2) :)
Здравствуйте, sergii.p, Вы писали:

SP>Ещё бывает по шаблонам спрашиваю. Прошу написать функцию sum, которая суммирует различные типы


SP>
SP>sum(std::string{""}, "abc");
SP>sum(0, 1.0);
SP>


http://coliru.stacked-crooked.com/a/c4b88d70e5067c24

#include <iostream>

template <typename T, typename...X>
decltype(auto) sum(T&& t, X&&...x)
requires requires {(std::forward<T>(t) + ... + std::forward<X>(x));}
{
    return (std::forward<T>(t) + ... + std::forward<X>(x));
}

int main() {
    std::cout << sum("Hello", std::string(", World"), '!') << std::endl;
}


Так норм?

Это, скажем так, параноидальный уровень обобщенности. Этот вариант учитывает, что operator+ может быть перегружен пользователем и иметь побочные эффекты и самую безумную семантику. Например, модифицировать операнды.

Если считать, что операция сложения — это всегда rvalue без каких-либо побочных эффектов и гарантирует неизменность операндов, тогда всё упрощается, конечно:

http://coliru.stacked-crooked.com/a/245d934bcd9b9088

#include <iostream>

auto sum(const auto& t, const auto&...x)
requires requires {(t + ... + x);}
{
    return (t + ... + x);
}

int main() {
    std::cout << sum("Hello", std::string(", World"), '!') << std::endl;
}
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 04.04.2025 9:49 rg45 . Предыдущая версия . Еще …
Отредактировано 04.04.2025 9:45 rg45 . Предыдущая версия .
Отредактировано 04.04.2025 9:38 rg45 . Предыдущая версия .
Re[4]: Накидайте плиз задачек на знание языка Си++
От: C0x  
Дата: 04.04.25 09:11
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, C0x, Вы писали:


C0x>>А он открывается у тебя? У меня пишет This page isn’t working


PD>Вполне нормально.

PD>Попробуй из Инкогнито, из иного браузера, иного провайдера.

PD>Там, кстати, http, не https, может, в этом причина ?


выше отписал, проблема оказалась в моем VPN.
Re: Накидайте плиз задачек на знание языка Си++
От: DiPaolo Россия  
Дата: 04.04.25 09:12
Оценка:
Есть конечно такие полезные ресурсы:
https://github.com/notescs/notes/tree/main/C-CPP-OOPS-for-Interviews
https://github.com/DopplerHQ/awesome-interview-questions?tab=readme-ov-file#c

Но лучше исходить из своих целей. Что за человек и с какими навыками нужен. От этого и выбирать задачи и вопросы. Одно дело, когда надо с нуля по архитектуре что-то делать. Другое – копипастить и поддерживать пятилетний продукт и там главное – аккуратность и не накосячить. Одно дело: числодробилка в сишном стиле, другое – асинхронный сервер и работа с базами.
Патриот здравого смысла
Re[2]: Накидайте плиз задачек на знание языка Си++
От: C0x  
Дата: 04.04.25 09:36
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>Есть конечно такие полезные ресурсы:

DP>- https://github.com/notescs/notes/tree/main/C-CPP-OOPS-for-Interviews
DP>- https://github.com/DopplerHQ/awesome-interview-questions?tab=readme-ov-file#c

DP>Но лучше исходить из своих целей. Что за человек и с какими навыками нужен. От этого и выбирать задачи и вопросы. Одно дело, когда надо с нуля по архитектуре что-то делать. Другое – копипастить и поддерживать пятилетний продукт и там главное – аккуратность и не накосячить. Одно дело: числодробилка в сишном стиле, другое – асинхронный сервер и работа с базами.


Спасибо. Там несколько этапов интервью, мне нужно для скриннига, чтобы понять что человек не просто так Си++ в резюме написал для полноты картины
Re[3]: Накидайте плиз задачек на знание языка Си++
От: sergii.p  
Дата: 04.04.25 10:23
Оценка:
Здравствуйте, rg45, Вы писали:

R>Так норм?


R>Это, скажем так, параноидальный уровень обобщенности.


вот на это я и рассчитываю. Задачу можно всегда покопать вглубь. Но обычно для меня достаточно чего-то проще

template<typename T1, typename T2>
auto sum(T1 v1, T2 v2) {
    return v1 + v2;
}


если человек показывает что-то лучшее — только плюс. Если просто укажет моменты для улучшения — то тоже ок.

Но обычно то я вижу что-то такое:

template<typename T>
T sum(T v1, T v2) {
    return v1 + v2;
}


и потом с интересом наблюдаю как человек разбирается в простыне ошибок. Тоже небезынтересный навык.
Re[3]: Накидайте плиз задачек на знание языка Си++
От: sergii.p  
Дата: 04.04.25 10:42
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Ну с первой задачей я справлюсь.

A>А про шаблоны честно скажу, что не умею.
A>Откажете?

я вообще никогда не отказываю. Я говорю уровень кандидата. А уже руководство принимает решение: соответствует ли уровень запросам. Но вообще если senior говорит, что в шаблоны не умеет, то большой вопрос почему он считает себя сеньёром.
Re[4]: Накидайте плиз задачек на знание языка Си++
От: kov_serg Россия  
Дата: 04.04.25 11:06
Оценка: +1
Здравствуйте, sergii.p, Вы писали:

SP>Но обычно то я вижу что-то такое:


#define SUM(a,b) a+b

Re[5]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 04.04.25 11:08
Оценка: +1
Здравствуйте, kov_serg, Вы писали:

_>
_>#define SUM(a,b) a+b
_>

_>

Мы Вам перезвоним.
--
Справедливость выше закона. А человечность выше справедливости.
Re[6]: Накидайте плиз задачек на знание языка Си++
От: kov_serg Россия  
Дата: 04.04.25 11:37
Оценка:
Здравствуйте, rg45, Вы писали:

_>>
_>>#define SUM(a,b) a+b

R>Мы Вам перезвоним.

Re[7]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 04.04.25 11:42
Оценка: +2
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, rg45, Вы писали:


_>>>
_>>>#define SUM(a,b) a+b

R>>Мы Вам перезвоним.

_>[url=https://i.imgur.com/eRxF3jP.png]Image: eRxF3jP.png[/url]


К этому нужно ещё задавать вопрос: "что выведет эта программа:"

#include <iostream>

#define SUM(a,b) a+b

int main() {
    std::cout << SUM(1<<1, 1) << std::endl;
}
--
Справедливость выше закона. А человечность выше справедливости.
Re[8]: Накидайте плиз задачек на знание языка Си++
От: kov_serg Россия  
Дата: 04.04.25 11:45
Оценка:
Здравствуйте, rg45, Вы писали:

R>К этому нужно ещё задавать вопрос: "что выведет эта программа:"

Вообще-то это был ответ на "Но обычно то я вижу что-то такое"
Re[9]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 04.04.25 11:55
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Вообще-то это был ответ на "Но обычно то я вижу что-то такое"


Ладно, не оправдывайся.
--
Справедливость выше закона. А человечность выше справедливости.
Re[6]: Накидайте плиз задачек на знание языка Си++
От: alpha21264 СССР  
Дата: 04.04.25 11:56
Оценка: :))
Здравствуйте, rg45, Вы писали:

_>>
_>>#define SUM(a,b) a+b
_>>

_>>

R>Мы Вам перезвоним.


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

#define SUM(a,b) (a)+(b)

Течёт вода Кубань-реки куда велят большевики.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.