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

User avatar
Гоша Хороший
Мистер Привет 2018
Posts: 1853
Joined: 03 Dec 2017 20:31
Location: 3.14ter -> 1qver

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

Post by Гоша Хороший »

лет 15 назад мне задали такую задачку: есть 2 ведра: 3л и 5л, надо отмерить 4л. как вы это сделаете?

на интервью, я эту задачку сразу не решил, очень волновался. но когда ехал домой в скайтрейне решил ее 2-мя способами. один лучше другого.

может, конечно, и старперство и все знают ответы на этот вопрос, но мне тогда было интересно
Гоша хороший, а Маша еще лучше
User avatar
Херовимчик
Уже с Приветом
Posts: 5283
Joined: 27 Sep 2008 21:48
Location: Moscow-Seattle-SFBA

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

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

Oleg-NY wrote: 17 Sep 2021 06:36
Херовимчик wrote: 17 Sep 2021 06:24
Oleg-NY wrote: 17 Sep 2021 06:20
Херовимчик wrote: 17 Sep 2021 06:01 Кстати очень забавно, что к аллегоритмам у вас душа не лежит, а вот о паттернах вы переживаете )))
В плане подхода к интервью или вообще? ))
Если вообще, то не то, чтобы не лежит, но уже давно не так интересно.
А если про интервью, то зависит от позиции. Если Senior/Staff/Principal или там Lead какой-нибудь будет уметь только "пуговицы пришивать", а за костюмчик пусть кто-то другой отвечает, то это как-то странно. Не находите?
Я, кстати, и сам иногда интервьюируюсь, чтобы кровь в жилах не застаивалась, так сказать. И всякий раз меня удивляет как с таким и другим подходом они собираются выяснить что я могу или не могу делать. При том, что про себя-то я все знаю, а также про ту позицию, куда подаюсь, но вот поставив себя на их место, мне совсем не хочется этим (интервьюированием) заниматься! ))
У меня лично травма от кандидатов с гордым званием Staff/Principal. Один прям так и говорил «ну задачу я твою не решил, но я ж вон какой крутой, ты ж мне зачтёшь заслуги прошлого?». Причём нёс полную ахинею и не по теме. Вообщем, слишком гордые птицы… и очень обидчивые и ранимы
(Мы с улицы на такие уровни не берём практически, свои кадры растим. А нанимаем на место «выросших»)
Ну да, ну да... Расказывайте! )) то-то у нас периодически исчезают люди именно с таких гордых позиций и сами знаете куда! ;)
А на место "выросших" тоже сманивают конечно, но это и к лучшему часто - здесь был так себе кодер, но с понтами, а у вас, глядишь, в синиорах ходит!
Я говорю исключительно за свою команду/орг (у нас тут в каждой избушки свои погремушки)
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15477
Joined: 27 Sep 2007 22:53

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

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

M. Ridcully wrote: 17 Sep 2021 03:57
Херовимчик wrote: 31 Aug 2021 04:38 Класс по работе со строкой (разворот строки, изменение поняла слов, и тд). Просто и эффективно, и очень наглядно что потом ожидать в плане качества кода. Очень эффективно в формате, а теперь давай добавим ещё вот этот метод (порядок выбирать так, чтобы требовалось сделать небольшой редактор уже имеющегося кода… если конечно кандидат до этого додумается и не начнёт копи-пастить)
Кстати, еще раз почитал-подумал. Это _очень_ плохая задача. В том смысле, что умного кандидата бы насторожила и отпугнула, у него бы возгикли большие сомнения по поводу адекватности и профессионализма команды, куда он интервьюируется.
"Класс строка" - это идиотизм. Все, что нужно для работы со строками - это функции, интерпретирующие так или этак куски памяти.
Тем не менее стандартная библиотека содержит такой класс, рассматривает его как базовый, специализации которого являются наиболее употребительными строковыми типами, включая string.
Более того, задача на написание простейшего "умного" указателя на массив букв может показать насколько соискатель понимает RAII, правило пяти и другие базовые понятия.
nickb
Уже с Приветом
Posts: 3207
Joined: 08 Aug 1999 09:01
Location: Tampa, FL

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

Post by nickb »

Я часто использую такой подход ... даю кусок кода и прошу рассказать, что тут происходит. И что можно улучшить.

По этому простому тесту видно, как человек думает, понимает ли чужой код. Понимает ли, что оптимально, а что нет.



Sent from my SM-G988U using Tapatalk

Ignorance is bliss
nickb
Уже с Приветом
Posts: 3207
Joined: 08 Aug 1999 09:01
Location: Tampa, FL

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

Post by nickb »

Ещё можно попросить внести какое-то изменение, в связи с новыми требованиями.
Будет видно, как человек будет править ваш код, будет ли он думать, как решить данную КОНКРЕТНУЮ задачу, или внесёт изменения, которые потом будет легко расширять и/или сопровождать.

Sent from my SM-G988U using Tapatalk

Ignorance is bliss
User avatar
kyk
Уже с Приветом
Posts: 31438
Joined: 21 Nov 2004 05:12
Location: камбуз на кампусе

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

Post by kyk »

nickb wrote: 25 Sep 2021 00:58Я часто использую такой подход ... даю кусок кода и прошу рассказать, что тут происходит. И что можно улучшить.
+1. Заодно свои задачи решаешь и новые идеи получаешь :good:
Лучше переесть, чем недоспать! © Обратное тоже верно :umnik1:
User avatar
Komissar
Уже с Приветом
Posts: 65206
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

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

Post by Komissar »

Гоша Хороший wrote: 17 Sep 2021 06:40 лет 15 назад мне задали такую задачку: есть 2 ведра: 3л и 5л, надо отмерить 4л. как вы это сделаете?

на интервью, я эту задачку сразу не решил, очень волновался. но когда ехал домой в скайтрейне решил ее 2-мя способами. один лучше другого.

может, конечно, и старперство и все знают ответы на этот вопрос, но мне тогда было интересно
достану из-за пазухи поллитру, вылакаю, а потом 8 раз ей отмеряю.

серьезно, люди, которые сходу решают (а скорее помнят задачу), редко оказываются годными кодерами.
User avatar
Uzito
Уже с Приветом
Posts: 8230
Joined: 06 Feb 2002 10:01
Location: NJ, USA

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

Post by Uzito »

Гоша Хороший wrote: 17 Sep 2021 06:40 лет 15 назад мне задали такую задачку: есть 2 ведра: 3л и 5л, надо отмерить 4л. как вы это сделаете?
на интервью, я эту задачку сразу не решил, очень волновался. но когда ехал домой в скайтрейне решил ее 2-мя способами. один лучше другого.
может, конечно, и старперство и все знают ответы на этот вопрос, но мне тогда было интересно
Это простая задача, но те, кто сразу бросаются ее решать поступают неверно. Сначала нужно прояснить остальные требования как то, конечен ли источник воды, можно ли воду обратно в источник выливать и т.д.

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

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

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

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;
}
voyager3
Уже с Приветом
Posts: 1951
Joined: 11 Mar 2015 01:12

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

Post by voyager3 »

Мальчик-Одуванчик wrote: 25 Sep 2021 03:47 Ну вот простейший, но уже достаточный для обсуждения, пример класса со строкой:

struct MySmartPrt {
MySmartPrt (char *str): { ptr=new char(strlen(str)+1); strcpy(ptr,str); };
~MySmartPrt { delete ptr; }
private:
char *ptr;
}
Кентавр какой-то. Ни указатель, ни массив, ни placement new.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15477
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: 5283
Joined: 27 Sep 2008 21:48
Location: Moscow-Seattle-SFBA

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

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

Говорю вам, это шикарный вопрос для любого интервью, любого уровня. Всякий литкод отдыхает в сторонке :umnik1:
User avatar
M. Ridcully
Уже с Приветом
Posts: 12003
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: 15477
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)
Заодно спросить - что нужно поменять в структуре чтобы вектор, стандартная строка не подошли?
как можно обобщить эту структуру для работы с разными буквенными типами?
А если мы добавим в стуктуру адрес регистра порта, в который нужно выводить эту строку, с учетом его особенностей ?

(Мне, например в микропроцессоре ни вектор, ни строка сроду не уперлись из-за ограничений по памяти и нежелательности исключений)
User avatar
OtherSide
Уже с Приветом
Posts: 17361
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: 15477
Joined: 27 Sep 2007 22:53

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

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

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

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

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

Post by OtherSide »

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

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

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

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

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

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

Post by OtherSide »

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

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

Post by OtherSide »

Щаз немного подумал как выйти из сиутации со статик ассерт - если не знаешь что он есть.
Можно через #if сделать, на #else какую нибуть некомпилируемую фигню влепить - вот тебе и самодельный статик ассерт
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15477
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;
}	
User avatar
OtherSide
Уже с Приветом
Posts: 17361
Joined: 01 Mar 2008 15:14

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

Post by OtherSide »

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

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

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

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

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

Post by OtherSide »

Не знаю как 11 поменял стандарты на оформление кода
Вернулись к тому, что мне мало понятно что от меня хотят на ревью вашего когда и я многое должен угадать
User avatar
Boriskin
Уже с Приветом
Posts: 18862
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”