Что поспрашивать на позицию SWE на тему C++?

User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: Что поспрашивать на позицию SWE на тему C++?

Post by Мальчик-Одуванчик »

voyager3 wrote: 25 Sep 2021 18:48 Кентавр какой-то. Ни указатель, ни массив, ни placement new.
Вот и дадим соискателю возможность реализовать недостающий с его точки зрения функционал.
Заодно поинтересуемся - каким боком тут placement new нарисовался.
User avatar
Херовимчик
Уже с Приветом
Posts: 5284
Joined: 27 Sep 2008 21:48
Location: Moscow-Seattle-SFBA

Re: Что поспрашивать на позицию SWE на тему C++?

Post by Херовимчик »

Говорю вам, это шикарный вопрос для любого интервью, любого уровня. Всякий литкод отдыхает в сторонке :umnik1:
User avatar
M. Ridcully
Уже с Приветом
Posts: 12017
Joined: 08 Sep 2006 20:07
Location: Силиконка

Re: Что поспрашивать на позицию SWE на тему C++?

Post by M. Ridcully »

Мальчик-Одуванчик wrote: 26 Sep 2021 01:11
voyager3 wrote: 25 Sep 2021 18:48 Кентавр какой-то. Ни указатель, ни массив, ни placement new.
Вот и дадим соискателю возможность реализовать недостающий с его точки зрения функционал.
Заодно поинтересуемся - каким боком тут placement new нарисовался.
Про placement new я не понял, если честно, где тут его нашли.
От junior-а я бы ожидал, по-минимуму, пофиксить квадратные скобочки (заменить круглые в new, добавить в delete - а то ведь один char аллоцируем) ну и чего-то сделать с автогенерируемыми конструкторами и операторами присваивания - ведь членом голый поинтер, еб№;%й стыд!
А от senior-а ожидал бы просто недоумения - нафига козе боян, чего хотим в итоге получить? Чем не подошли std::string, std::vector, ну или smart pointers на крайняк?
Мир Украине. Свободу России.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: Что поспрашивать на позицию SWE на тему C++?

Post by Мальчик-Одуванчик »

M. Ridcully wrote: 26 Sep 2021 06:28 А от senior-а ожидал бы просто недоумения - нафига козе боян, чего хотим в итоге получить? Чем не подошли std::string, std::vector, ну или smart pointers на крайняк?
Проверить как соискатель может самостоятельно реализовывать простейшие структуры данных: Вы правильно обратили внимание на правило пяти при отсутствующем конструкторе по-умолчанию.
(обычно все ограничивается квадратными скобками, причем только для оператора new)
Заодно спросить - что нужно поменять в структуре чтобы вектор, стандартная строка не подошли?
как можно обобщить эту структуру для работы с разными буквенными типами?
А если мы добавим в стуктуру адрес регистра порта, в который нужно выводить эту строку, с учетом его особенностей ?

(Мне, например в микропроцессоре ни вектор, ни строка сроду не уперлись из-за ограничений по памяти и нежелательности исключений)
OtherSide
Уже с Приветом
Posts: 15797
Joined: 01 Mar 2008 15:14

Re: Что поспрашивать на позицию SWE на тему C++?

Post by OtherSide »

Мальчик-Одуванчик wrote: 25 Sep 2021 03:47
nickb wrote: 25 Sep 2021 00:58 Я часто использую такой подход ... даю кусок кода и прошу рассказать, что тут происходит. И что можно улучшить.
Ну вот простейший, но уже достаточный для обсуждения, пример класса со строкой:

struct MySmartPrt {
MySmartPrt (char *str): { ptr=new char(strlen(str)+1); strcpy(ptr,str); };
~MySmartPrt { delete ptr; }
private:
char *ptr;
}

А по моему вопрос как раз дебильный

Откуда мне знать что у вас в голове и что вы хотите от меня услышать. Я бы ответил что если бы увидел такой код у вас в компании то просто бы уволился

Если по синтаксическим ошибкам то почему память аллоцируется в переменную char, а не массив

* планируется ли расширять класс и если да почему делит не виртуальный
* не помню как в си копируются строки может параметры и перепутаны
* почему стракт а не класс? В чем скрытый смысл не сделать класс и объявить конструктор/деструктор как паблик
* почему не const char *?

Что нахрен этот класс вообще делает? Принял строку, сохранил ее длину по модулю до 256 и.. что? Доступа к этим данным нет. Там перегрузить модификаторы доступа хотели или что?
Нахрена в плюсах городить операции со строками а не использовать std::wstring

Вообще что вы сцуко у меня проверить хотите хоть бы намекнули
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: Что поспрашивать на позицию SWE на тему C++?

Post by Мальчик-Одуванчик »

Пока что "дескриптор" владеет ресурсом и больше ничего, дальше можно рассуждать об исключительности этого владения.
Заодно хотелось бы услышать для чего подобные обертки вообще применяются и убедиться что соискатель понимает основопологающую идиому языка - RAII.
Как эту конструкцию расширить только для типов char и wchar и может быть услышать о концептах или их заменителях (ну хотя бы static assert).

Ну и потом - чисто по коду видно что этоn дескриптор по сути аналог "умного указателя", не предоставляющий доступа к ресурсу, а только его захватывающий и освобождающий; соответственно и нет смысла городить полиморфизм.
Разницы между структурой и классом ровно никакой, за исключением области видимости по-умолчанию - мне захотелось структуру.
OtherSide
Уже с Приветом
Posts: 15797
Joined: 01 Mar 2008 15:14

Re: Что поспрашивать на позицию SWE на тему C++?

Post by OtherSide »

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

Семантически разницы между структурой и паблик классом да, никакой. Но принято использовать именно классы, на основании соглашения о стиле кода, и лепить структуру там где по смыслу класс - очередной признак говнокода. Опять же мое мнение, и мне похоже надо угадать, а думаете ли вы так же.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: Что поспрашивать на позицию SWE на тему C++?

Post by Мальчик-Одуванчик »

OtherSide wrote: 26 Sep 2021 12:52 Ну и каким образом из вашего говнокода я должен догадаться что вы хотите что бы я вспомнил о темплейтах и static_assert?
Неужели после вопроса как обобщить код до использования с разными типами не догадались бы?
А потом последовал бы вопрос как ограничить использование обобщенного варианта только определенными типами. Кстати смогли бы решить ?
Странно что Вам не удалось увидеть с первого раза пример классической RAII обертки над ресурсом (в данном случае массивом букв)
Возможно аналогичная обертка над мьютексом Вам бы показался более наглядной и позволила бы ответить на вопрос для чего такие штуки применяются.
OtherSide
Уже с Приветом
Posts: 15797
Joined: 01 Mar 2008 15:14

Re: Что поспрашивать на позицию SWE на тему C++?

Post by OtherSide »

Что такое RAII никогда не знал
То что если объект создается в стеке, то деструктор вызывается на сворачивание стека и так очевидно, тоже не догадался что от меня хотя услышать именно это
static_assert не помню использовал ли, но я на плюсах давно не пишу, может это в новых спецификациях появилось. Такие вещи не считаю частью языка, они легко гуглятся. Ну по идее в случае с типами можно и средствами самого языка реализовать, типа какую нибуть private функцию написать с приведением типов, оно не будет компилироваться если типы не совпадают
OtherSide
Уже с Приветом
Posts: 15797
Joined: 01 Mar 2008 15:14

Re: Что поспрашивать на позицию SWE на тему C++?

Post by OtherSide »

Щаз немного подумал как выйти из сиутации со статик ассерт - если не знаешь что он есть.
Можно через #if сделать, на #else какую нибуть некомпилируемую фигню влепить - вот тебе и самодельный статик ассерт
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: Что поспрашивать на позицию SWE на тему C++?

Post by Мальчик-Одуванчик »

OtherSide wrote: 26 Sep 2021 12:52 лепить структуру там где по смыслу класс - очередной признак говнокода. Опять же мое мнение, и мне похоже надо угадать, а думаете ли вы так же.
И где по смыслу класс, а где структура - вот это что к примеру?

Code: Select all

struct Book 
{
    Book( std::string title, std::vector<std::string> authors)  
    :_title(std::move(title)), _authors(std::move(authors))
    {
    }
    std::string _title;
    std::vector<std::string> _authors;
}	
OtherSide
Уже с Приветом
Posts: 15797
Joined: 01 Mar 2008 15:14

Re: Что поспрашивать на позицию SWE на тему C++?

Post by OtherSide »

Структуру используют в c-style коде, а плюсах - class
Я бы использовал еще структуру еще там, где она по смыслу близка к сишному пониманию. Ну т.е. объеденитить несколько публичных полей, без планов объединения с кодом, тем более наследования
Т.е. когда пишешь в коде struct ты как бы намекаешь другим что код тянется со времен си и где-то там требует совместимости и не планирует расширяться.. я бы это так воспринял
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: Что поспрашивать на позицию SWE на тему C++?

Post by Мальчик-Одуванчик »

OtherSide wrote: 26 Sep 2021 14:17 Структуру используют в c-style коде, а плюсах - class
Я бы использовал еще структуру еще там, где она по смыслу близка к сишному пониманию. Ну т.е. объеденитить несколько публичных полей, без планов объединения с кодом, тем более наследования
Т.е. когда пишешь в коде struct ты как бы намекаешь другим что код тянется со времен си и где-то там требует совместимости и не планирует расширяться.. я бы это так воспринял
C вводом С++11 видение поменялось, как и поменялись правила стиля. Если данные изменяются независимо друг от друга и все публичны то используются структуры.
Это удобнее из-за появившейся возможности агрегатной инициализации структур.
OtherSide
Уже с Приветом
Posts: 15797
Joined: 01 Mar 2008 15:14

Re: Что поспрашивать на позицию SWE на тему C++?

Post by OtherSide »

Не знаю как 11 поменял стандарты на оформление кода
Вернулись к тому, что мне мало понятно что от меня хотят на ревью вашего когда и я многое должен угадать
User avatar
Boriskin
Уже с Приветом
Posts: 18906
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: Что поспрашивать на позицию SWE на тему C++?

Post by Boriskin »

Мальчик-Одуванчик wrote: 26 Sep 2021 07:58 (Мне, например в микропроцессоре ни вектор, ни строка сроду не уперлись из-за ограничений по памяти и нежелательности исключений)
Ну про тонкости и ограничения в embedded С++ знают либо те, кто с оным реально работал, либо люди с феноменальной памятью, где-то прочитавшие и запомнившие. А задачка - очень неплоха для начала разговора. :good:

Я люблю спрашивать про проверку linked list на зацикливание (просто, но народ регулярно чудит) и если человек толковый и вся остальная программа исчерпана - если замыкание есть - как найти элемент, на котором замыкается.
Тупизна как Энтропия. Неумолимо растет.

Return to “Работа и Карьера в IT”