LINUX.ORG.RU

Junior vs Senior C++, who is who-детектор

 ,


3

1

Какие бы вы задали вопросы на собеседовании для начинающего (без опыта) и матерого плюсовика?
Чтобы не глядя в резюме, только слушая ответы на вопросы, понять кто из собеседуемых есть (не)осилятор?

Junior - это типа не осилятор?

anonymous
()

меня спрашивали: напишите аналог getopt с длинными и короткими опциями.

По факту написанного вопросы по stl/управлению памяти. Сразу будет видно кто неосилятор, кто матёрый.

ihanick
()

Сортировку пузырьком и вопрос про виртуальный деструктор. 90% джуниоров отсеет.

Сам как-то засыпался на вопросе, что же такое виртуальная функция. До сих пор стыдно.

Для матёрых можно шаблоны, виртуальные наследования, поведение на разных архитектурах. Указатели и различные идиомы типа RAII, PImpl.

Знание STL ещё помогает выявить матёрого задрота :)

Вообще, насколько могу судить по (относительно небольшому) опыту, джуниору необходимо и достаточно знать, как пользоваться языком, а сеньору - как он работает изнутри. В т.ч. библиотеки.

З.Ы. А самый правильный вопрос - «почему C++ говно?».

schizoid ★★★
()

Junior-а бы спросил в возрастающем порядке о: циклах, рекурсии, указателях, классах, виртуальных методах, шаблонах, некоторых вещей из стандартной библиотеки (пара коллекций, пара алгоритмов), побеседовать о том, как реализовать std::vector, побеседовать о том, как реализовать std::shared_ptr. Попросить реализовать небольшую программку, где посмотреть, как он управляет памятью, обрабатывает ошибки, вообще на общий стиль разработки.

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

Legioner ★★★★★
()
Ответ на: комментарий от Harald

для кого-то тонкий, а большинство argc и argv назвать не может

env ещё была когда-то.

yoghurt ★★★★★
()

Это джуниоров надо гонять по языку. Сениора нужно спросить в чем он сам силен, пообщаться по основным проблемам в этой сфере, как решали. Без всякого тупняка «Вот вопрос. И только попробуй ответить не таким ответом, как в ящичке в моей голове»

И да, архитектура собсно

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от Harald

Ты часто её пишешь то? Или каждый день туда заглядываешь?

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

Какие есть примитивы синхронизации между трэдами.

Gorthauer ★★★★★
()
Ответ на: комментарий от Gorthauer

Не показатель совершенно. Это любой нормальный выпускник нормального вуза ответит как таблицу умножения. Ибо (у нас по крайней мере), оно из года в год под разным соусом повторялось.

invy ★★★★★
()

Матёрого можно прогнать по паттернам проектирования и поспрашивать, какие преимущества он видит в тех или иных паттернах (ведь был же у него в этом какой-то личный опыт).

Можно попросить оценить алгоритмическую сложность данного кода

void fixBraces(char *input)
{
    for (int i = 0; i < strlen(input); ++i) {
        if (input[i] == '{')
            input[i] = '(';
        if (input[i] == '}')
            input[i] = ')';
    }
}

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

quiet_readonly ★★★★
()
Ответ на: комментарий от quiet_readonly

На сложность кода я могу ответить легко и могов много не надо. Первое что бросилось в глаза нет continue сразу же после превого if'а.

gh0stwizard ★★★★★
()

Встречный вопрос

А насколько адекватным поступком будет человеку [со стажем/специально обученному] сразу развернуться при требовании написать код?

Вообще Цэпэпэ кодеры живут в каком-то замкнутом мирке. Какие-то виртуальные деструкторы, шаблоны и прочий лютый писец. Я бы на такую работу не пошел, просто не выдержал бы.

anonymous
()

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

m0rph ★★★★★
()
Ответ на: комментарий от gh0stwizard

без оптимизации компилятором - O(N^2), strlen вычисляется strlen раз. если компилятор поймет, что длина не меняется и вынесет strlen за цикл - то O(N). А эти ваши «сложности кода из-за if» - никого не интересует. Речь об алгоритмической сложности.

TakeOver
()
Ответ на: Встречный вопрос от anonymous

Вообще Цэпэпэ кодеры живут в каком-то замкнутом мирке. Какие-то виртуальные деструкторы, шаблоны и прочий лютый писец. Я бы на такую работу не пошел, просто не выдержал бы.

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

Лично я ограничиваюсь двумя случаями:

  • RAII, который будет использоваться с различными классами.
  • Шаблонная функция, которую никогда не придётся специализировать и которая не даёт конфликтов
    // Мне нравится, к тому же автодополнение от libclang
    // распознаёт такие случаи и не подставляет placeholder
    // для специализации шаблона, просто выдаёт 'void handle(#T *ptr#)'.
    template <class T>
    void handle(T *ptr)
    {
    }
    
    // Мне не нравится из-за min(2, 0.5),
    // который надо переделывать в min<float>(2, 0.5).
    template <class T>
    T min(const T &a, const T &b)
    {
    }
    
quiet_readonly ★★★★
()
Последнее исправление: quiet_readonly (всего исправлений: 1)
Ответ на: комментарий от m0rph

джуниор - паттерны проектирования? я как человек, который ищет сейчас вакансию джуниора, немного в затруднении от этого. обычно говорят про структуры, алгоритмы, общие для с++ вещи(ооп и обобщенное) ну и знание stl обычно просят.

arcticblues
()
Ответ на: комментарий от arcticblues

strlen(input) - ещё O(N), как ниже сказали «если оптимизатор допрёт...».

invy ★★★★★
()
Ответ на: комментарий от arcticblues

джуниор - паттерны проектирования?

С матёрым, там так написано.

я как человек, который ищет сейчас вакансию джуниора, немного в затруднении от этого. обычно говорят про структуры, алгоритмы, общие для с++ вещи(ооп и обобщенное) ну и знание stl обычно просят.

У нас с человека попросили вообще тестовое задание под android на java, потом поставили на один проект со мной. И ничего, через полтора месяца стал вполне прилично справляться кучей унаследованного C++/ObjectiveC кода, даром что шаблонный RAII класс делал по образцу. XCode с clang животворящим и не на такое способен.

quiet_readonly ★★★★
()

матерые обычно знают предметную область, а юниоры только язык, да и то не весь

Deleted
()
Ответ на: комментарий от arcticblues

джуниор - паттерны проектирования?

Где ж я такое написал-то? Паттерны для матерых, т.е. сеньоров.

m0rph ★★★★★
()

Самый вменяемый комментарий, кака ни странно у vertexua.

Юнца ака кодера, следует гонять по языку.
Старшого - по архитектуре.

Чтобы понять, с кем имеешь дело - спроси кандидата, в чем отличие сложности алгоритмической от цикломатической. :)
Джуниор будет знать только что такое алгоритмическая сложность. Сеньор - в довесок, что такое цикломатическая. Тимлид сможет аргументированно показать, почему цикломатическая сложность важнее.

d_Artagnan ★★
()
Ответ на: комментарий от d_Artagnan

Тимлид

Несколько раз прочитал как «талмид». Бля, задолбали ужо своим сленгом ети ваши погромисты.

anonymous
()

Шел 2013-й год, а watefall-метод найма и управления командой стабильно и надежно работал, как швейцарские часы. Не проще сформировать список четких требований к кандидату на конкретную вакансию, без этих ваших ярлычков?

alienclaster ★★★
()
Ответ на: комментарий от alienclaster

Юнга-программист (по пожеланиям одного упоротого анонима ITT) - это это не только безвольный кодинг кодирование алгоритмов, но и низкая зарплата. А ваш метод дает команду программистов с ничем по факту не обоснованной разной ЗП.

d_Artagnan ★★
()
Последнее исправление: d_Artagnan (всего исправлений: 1)
Ответ на: комментарий от d_Artagnan

А ваш метод дает команду программистов с ничем по факту не обоснованной разной ЗП.

«Мой метод» дает закрытие вакансии с зп, напрямую связанной со стоимостью конкретных скилов конкретного сотрудника в разрезе необходимости этих скилов для компании.

alienclaster ★★★
()
Ответ на: комментарий от quiet_readonly

Они, родимые (развечто в .net звать их ограничениями).

d_Artagnan ★★
()
Ответ на: комментарий от d_Artagnan

Паттерны - для юнцов.

Конечно использовать паттерны просто ради того, чтобы было - смысла нет. Но со временем каждый разработчик накапливает опыт использования некоторых приемов и бывает уже на стадии проектирования перебирает варианты подходящей реализации. Эти приемы и есть паттерны проектирования, просто некоторые из них задокументированы в литературе. Такие простые вещи, как observer, visitor, factory method, да даже singleton - многими изобретаются самостоятельно в том или ином виде и в работе используются довольно часто. Неужели вы ничего такого не применяете?

PS Вы сами-то хоть раз chain of responsibility или generation gap применяли?

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

m0rph ★★★★★
()
Последнее исправление: m0rph (всего исправлений: 1)
Ответ на: Встречный вопрос от anonymous

А насколько адекватным поступком будет человеку [со стажем/специально обученному] сразу развернуться при требовании написать код?

зависит от вопроса, конечно, но вообще - неадекватно, значит давно не писал

PS а вообще можешь просто исключение бросить, рантайм сам развернёт

shty ★★★★★
()
Ответ на: комментарий от d_Artagnan

Ничего не поделаешь

На самом деле, кое-что сделать можно (правда, если не сравнивать разных потомков класса :()

#include <type_traits>

template<class T, class S>
typename std::common_type<T, S>::type min(T const& a, S const& b) 
{
    return a < b ? a : b;
}
BlackHawk
()

сколько и о чём книжек у Страустропа. :)

это чисто нулевой срез.

qulinxao ★★☆
()
Ответ на: комментарий от invy

ха ха ха не факт . если strlen стандартная то да квадрат .

однако ...

qulinxao ★★☆
()

дать сырцы из ioccc.org и проанализировать реакцию

также дать куски кода из stl|boost (c «перебитыми номерами» - чисто что бы структура кода сохранилась но нельзя бы по именам понять одкуда код) и попросить расказать что делает код

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

чтобы программист не понял, что код из boost или stl, одним «перебитием номиров» не отделаешься, его надо полностью переписать :))

ха ха ха не факт . если strlen стандартная то да квадрат .

я что-то не припомню более быстрого способа найти длину null-terminated строки, нежели перебрать все символы и найти 0.

invy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.