Собеседование Middle C++
Всем привет!
Провели тренировочное собеседование с Данилом
на позицию Middle C++ Developer.
Приятного просмотра!
telegram: t.me/AmbushedRaccoon
Не забудьте поддержать видео :)
Всем привет!
Провели тренировочное собеседование с Данилом
на позицию Middle C++ Developer.
Приятного просмотра!
telegram: t.me/AmbushedRaccoon
Не забудьте поддержать видео :)
Пікірлер: 123
Мне одному кажется, что собеседование называется мидл, а вопросы задают на позицию джуниор?
@vladimirchizh8853
Жыл бұрын
@A VP Я согласен с этим, но не полностью, когда вопросы слишком просты то и рассуждать не о чем. Решение лежит на поверхности.
@alexeyfadieiev4070
Жыл бұрын
Согласен, базовые вопросы, больше для Джуна чем на Миддла. Миддл по факту данные темы уже должен знать.
@vilture5706
Жыл бұрын
Если учитывать, что миддл должен в совершенстве знать все основные паттерны, алгоритмы и технологии. А сеньор это миддл умеющий в организацию, то да.
@alazarnfreeman9216
Жыл бұрын
трэйни
@vilture5706
8 ай бұрын
@@drm365 Без опыта разработки нельзя узнать паттерны. Спрашивая паттерны и прося пример их применения сразу 2 зайцев забиваешь.
Данил большой молодец!) Мне понравилось собеседование, прям посмотрел на одном дыхании)) Спасибо Ambushed Raccoon) Особенно часть с архитектурой, т.к. в большинстве случаев от Middle программиста ждут архитектурных решений с принципами SOLID, паттернами и т.д. Надеюсь в скором времени будут вопросы про другие паттерны проектирования, а не только про анти-паттерн SINGLETON))
@FBTEN2501
11 ай бұрын
Синлтон не антипаттерн
@fein7068
Ай бұрын
С каких пор у нас синглтон стал антипатерном?
Спасибо!
Override это не только синтаксический сахар, так как он на уровне компилятора выдаст дополнительную ошибку в случаи не соответствия. Так же забыли сказать про такую деталь про полиморфизм в случаи с интерфейсом и удобную работу с одним типом данных интерфейса, мелочь вроде, но дает более объективный ответ как по мне.
Спасибо за ролик, завтра первый собес, на ваши вопросы вроде ответил)
@Iighter
Жыл бұрын
ну и как?
@dubrovinan
Жыл бұрын
@@Iighter Технический собес прошел успешно,. Пытались завалить теоретическими вопросами, думал долго, но ответил на все. На следующей неделе будет беседа с директором и hrbp, на ней решат, адекватный я или нет)
@Iighter
Жыл бұрын
@@dubrovinan ну красавчик) а вопросы посложнее чем тут или подобные?
@dubrovinan
Жыл бұрын
@@Iighter Спасибо. Вопросы были гораздо сложнее: что такое L1, L2, L3 кэш, кэш линия, как они работают, про C++ задали пару-тройку вопросов (основы), многопоточность (OpenMP), умножение матриц (Написать код на доске, скомпилировать в голове и оптимизировать через OpenMP и перемену местами пары циклов), как числа с плавающей точкой представлены в компьютере, и многое другое. Опыт бесценный, интересный
@Iighter
Жыл бұрын
@@dubrovinan Это что на джуна???
Фига, меддисон стал с++ программистом
kzread.info/dash/bejne/q5qjqNauYpvUZNI.html При наследовании нужно указывать модификатор public, по умолчанию для классов используется модификатор private
@addressmodel2121
10 ай бұрын
12:40 - вот так то! Каждый плюсовик с шарпом в выходные дни балуется!
касательно const_cast и "убрать модификатор const", важный момент, если убрать модификатор const у изначально константного объекта дальнейшее его использование приведёт к undefined behaviour. Это важно понимать, особенно когда зададут вопрос такой на собеседовании. ``` const char *someStr = "const_str"; char *str = const_cast(someStr ); Дальше использование приведёт к undefined behaviour ``` ну и volatile позволяет убирать еще
@bdick8136
Жыл бұрын
За const_cast в коде надо выдавать леща. Как и за volatile. Проектировать надо лучше.
@romanderevyanko520
Жыл бұрын
@@bdick8136 если бы все было бы так просто, то все свелось бы к меньшему количеству языков и к меньшему количеству доступных синтаксических слов и конструкций. Зависит от проекта, архитектуры , code style и вообще подхода команды в целом. В одном проекте да, использование подобных вещей это плохо, в каком-то проекте есть гарантии о «exception safety» например и использование исключений приведет к получению по рукам, а другой проект , какой-нибудь embedded, в котором отключение некоторых оптимизаций необходимо , а так же если очень нужен memory mapped IO, то там volatile будет нужен. Всегда нужно понимать что пишешь, зачем и что это даст…
@bdick8136
Жыл бұрын
@@romanderevyanko520 очень странно конечно пытаться отстрелить себе ногу в приведенных выше примерах. Но впрочем это ваше право :)
@sashkastepashka
Жыл бұрын
@@bdick8136 умничать - это всегда просто. До тех пор, пока в досконально продуманной и задизайненной системе, архитектор, а по-совместительству и программист, в одном из фиксов не написал const_cast. В итоге, ревьювер орёт на архитектора, архитектор орёт на ревьювера. Неделя работы, редизайн компонента и const_cast исчез. Естественно, все дураки и только какой-то челик рандомный на ютубе умный.
@ic6406
Жыл бұрын
@@bdick8136 const_cast можно если это либовый код и ты точно знаешь как был создан объект, в остальных случаях согласен, леща надо
Мне кажется парень слабоват для позиции мидл?
@fein7068
Ай бұрын
Ну есть такое, ничего страшного, подрастет, главное что устроился.
глянув это собеседование, чувствую себя сеньером, но работаю на позиции мидл а получаю зарплату джуна =(
@ambushedraccoon6408
Жыл бұрын
Гляньте другие)
@MegaMitrandir
Жыл бұрын
жиза ))
@dotlvforge5631
Жыл бұрын
Я недавно чуть в такую компанию не попал)0)00)))) Проект с ограниченным бюджетом, стартап хиленький.
@raphaelosipov867
Жыл бұрын
Меня хватило на 13 минут, если это и миддл, то прям джун+, т.к. для виртуального метода писать abstract просто не позволительно:) Дальше смотреть даже не стал, автор молодец, поднимите уровень требований к собеседнику, иначе введете в заблуждение людей:)
@addressmodel2121
10 ай бұрын
@@raphaelosipov867 , человек на Си шарп программирует в выходные дни. У него смесь языков в голове. В Си шарп есть слово abstract. Кстати, на собеседованиях по Си шарп не думайте что будет легче, чем на C++ - просто там синтаксис языка почти не спрашивают - он всё равно простой. А спрашивают методы использования библиотечных классов в каких то реальных задачах. Например, тебе могут задать такие вопросы: 1) напиши как считать веб страницу с интернета; 2) напиши как перечислить в цикле контролы, уже размещённые на форме; выведи названия этих контролов в строку; 3) напиши примерной код, перечисляющий компьютеры в локальной сети; 4) есть некоторый объект класса, созданный в некотором процессе; напиши, как передать этот объект класса в другой процесс на этой же машине и как передать по локальной сети; 5) напиши пример наиболее быстрого рисования квадратов в окне стандартными библиотеками дот нет.
Смешные комментарии, неужели непонятно, что весь ролик это постановка с целью развести любого знакомого с С++ на комментарии? Особенно порадовал момент когда ведущий на "серьёзных щах" называет дву-связный список деревом, а другой пытается обойти его сразу в 2 стороны и при этом ведущий говорит41:32 "да, для меня тоже выглядит рабочим" я так не веселился уж давно, спасибо.
Этот чел точно не мидл, он даже не джун
А это реальные собеседования? Или типо как пример, как они вообще проходят.
@ambushedraccoon6408
Жыл бұрын
Тренировочные. Не постановочные.
@_device
Жыл бұрын
@@ambushedraccoon6408 понял
Про override мне не понравились ответы ни что у первого ни что у второго гражданина. Так прозвучало, что - "что override нужен только чтобы посмотреть и убедится, что какой-то метод переопределяет какой-то другой?" Аллоуэ - Карл! Кому посмотреть куда и зачем?! Слово override придумали для того чтобы ловить непонятки во время компиляции - например так = struct someBase { virtual void foo() = 0; }; template struct extension : T { void foo() override { std::cout foo(); delete a; return 0; } и не недо никуда смотреть уже. То есть тут явно говорится о том что в базовом классе должен быть виртуальный метод с такой-же сигнатурой как и у override
@FBTEN2501
11 ай бұрын
Это и имелось в виду
@mrbibis7229
Ай бұрын
при этом чувак в первом ответе говорит не про override, а override final
@DadundddaD
Ай бұрын
Я уж думал, мне одному кажется, что собеседующий сам не разбирается в виртуальных методах.
5:53 "Объявим метод с такой же сигнатурой" Это про простое наследование так выразился ?
@ambushedraccoon6408
Жыл бұрын
Почему же. Наследование - это наследование. А методы мы можем перекрыть или переопределить. Тут для сохранения интриги в вопросе и сформулировал его как "Объявим метод с такой же сигнатурой". По сути именно это мы и делаем.
11:30 - почему у методов Read нет возвращаемого значения, куда они считывают? Про виртуальные методы собеседующий сказал - override нужен если мы уберем virtual. Зачем? Если не убирать virtual override тоже полезен. В комментариях вы написали что-то про перекрытие, но в видео про это ни слова, и у меня есть сомнения, что вместо переопределения будет перекрытие. 32:32 - название метода некорректное, для проверки, что это одно и то же дерево достаточно сравнить только два указателя, если это корни, кск сказао ведущий. Хотя непонятно, что жто корни, так как имена переменных ни о яем не говорят. Поля x у TreeNode нет, есть поле val. Слабенько.
тайм коды пожайлуста)
Override ..... И сразу такой косяк прямо со входа.... Ой ой ой. Кстати, я против всегда был такого коллапса If в одну строчку. Это красиво , это лаконично, но это сложнее отладить особенно если под рукой только консоль c gdb. Куда в таком случае поставить точку останова , чтобы быстро понять по чему функция вернула не то значение? С одной стороны, когда у нас из функции один выход, то работает return value optimization , и это надо помнить когда мы возвращаем большие объекты по значению, с другой в данном случае это 1 байт. Синглтон в принципе плохо, тем что это глобальная статическая переменная по сути , да проблема инициализации решается , но он продолжает нести все минусы глобальной переменной. Нет контроля доступа , и нет возможности его удалить и очистить память им занимаемую. Например в моей работе есть строгое требование, что после удаления объекта модуля системой, в памяти не должно оставаться ничего после него.
@s.g.7213
Жыл бұрын
@cypherpunks01 "Всё яд ,и всё лекарство." Надо понимать для чего он хорош, а для чего плох. Например для какой-нибудь глобальной системы логирования , или единого генератора случайных чисел, подойдёт идеально.
@ic6406
Жыл бұрын
Синглтон легко "удаляется" через кастомный cleanup метод в конце мейна. Просто надо правильно уметь готовить эти штуки, а не сломя голову всё по солиду делать.
12:40 - вот так то! Каждый плюсовик с шарпом в выходные дни балуется!
@ambushedraccoon6408
8 ай бұрын
Во современных реалиях довольно сложно не затрагивать другие языки программирования.
@addressmodel2121
8 ай бұрын
@@ambushedraccoon6408 , представьте что появилась оконная графическая библиотека для использования в C++ проектах, со следующими характеристиками: 1) весит 100 мегабайт; 2) распространяется в виде одного или нескольких DLL модулей; 3) подключается без особых приключений к проектам буквально вручную; 4) не требует мастера создания компоновки окна элементами управления; 5) элементы на окно компонуются вручную из самого текста программы; 6) дружит с многими средами разработки. Ну станут ли после этого люди обращаться к каким то другим языкам? - Вряд ли станут. Полностью всё на С++ будут делать.
@fein7068
Ай бұрын
Я с шарпа пересел когда на плюсы, обратно чет не тянет)
Спасибо. Мне понравилось, что на каждый момент дается адекватная, расширенная обратная связь - на таких уроках можно учиться.
@ambushedraccoon6408
2 ай бұрын
Спасибо за отзыв)
@alexandrgonzales6503
2 ай бұрын
С такими комментариями реально круто, спасибо
@nnektov
2 ай бұрын
@@alexandrgonzales6503 Данил на самом деле дает вполне позитивную и познатавтельную волну. Вот подчеркну, что позитивную. Как правило собсес - это стрессовая ситуация, с нами по разному обходятся, могут и совсем никакой обратки давать (плавали, знаем. "Вы не тянете на эту позицию" - типа норм ответ). Данила, наоборот, все точно обьясняет - подучи это или то. Кроме того. Осмелюсь сказать, как человек между миддлом и сениором - Данила если не знает что-то, то так и говорит, т.е. не пытается представить из себя того, кем он не является. Если не знает - то не знает. Если недавно узнал - то так и говорит. Если резюмировать - мне нравится _человечность подхода , без потери _точности. Так держать.
С каких пор в Unreal PlayerController это синглтон?)))) Что же интересно делает сервер, у которого сразу несколько плер контроллеров отдельных игроков....
@mrbibis7229
Ай бұрын
Но вообще-то PlayerController не реплецируется ни клиентом, ни сервером. Существует в виде уникального инстанса у каждого (клиента и сервера). Вам нужно почитать про SimulatedProxy, там не будет никакого PlayerController'а. Архитектурного его можно назвать синглтоном, хотя конечно никто не мешает во время игры заменить классы PlayerController'ов.
Как можно решать задачу рекурсивно, не осознав. в чём собственно решение?.. Ведь достаточно просто проговорить «Деревья равны, когда значения корней равны и равны левое и правое поддеревья», чтобы сразу записать решение, вообще не ломая голову)
abstract можно указывать, это синоним =0, указывается конце
@shark9725
Жыл бұрын
чего??? что-то новенькое
@Iighter
Жыл бұрын
ты пьяный?
@billjohnes9380
Жыл бұрын
Вы хотя бы попробовали, прежде чем писать такое?
@nmg_prm
Жыл бұрын
@@billjohnes9380 естественно
@nmg_prm
Жыл бұрын
@@billjohnes9380 поправка: actually keyword abstract exists in C++ (VS2010 at least) and I found it can be used to declare a class/struct as non-instantiated.
Походу промахнулся я когда на middle c++ шёл, надо было уже на синьора идти, раз такие мидлы щас пошли
@ic6406
Жыл бұрын
Честно говоря для middle уровня этот чел это просто жесть. У меня на джуна такие вопросы были несколько лет назад
@user-qp5mu5tc8n
7 ай бұрын
@@ic6406 вопрос про override даже стажеру стыдно задавать - знать должен базу по умолчанию
@mrbibis7229
Ай бұрын
ну без гпт и cppreference каждый 3й мидл становится джуном)))
@ic6406
Ай бұрын
@@mrbibis7229 Не, не согласен. Иначе можно было бы любого человека без знаний программирования и с умением пользоваться гпт считать джуном. Но если человек не знаком с программированием, то у него даже нет в голове знаний концепций переменных или функций, следовательно базовую программу он написать не сможет в разумное время. Я лично оцениваю разработчика по знаниям концепций, а не по знанию языка
Челики все собесятся на мидла, но в норм компанию с такими ответами на столь простые вопросы они еле бы на джуна прошли.
@deuswolf9053
Жыл бұрын
Мда, я бы ему даже jun+ не дал. Просто jun с каким-то опытом..
@alazarnfreeman9216
Жыл бұрын
@@deuswolf9053 трэйни
@egorlazaruk2697
9 ай бұрын
Для мидла мб и слабовато но вы совмем ебанулись те же деревья я не видел ни разу в проекте своем огромном, смысл это просто отбор по зп, в реале он будет решать другие задачи лол
@user-qp5mu5tc8n
7 ай бұрын
@@alazarnfreeman9216 какой трейни, ты угараешь? Override не знать, просто неуч. Даже стажером не взял бы. С первого вопроса сразу можно заканчивать собес. Щас на трейни это все знать надо идеально. ЭТО ЖЕ БАЗА
Проиграл в голос с обоих. Даня на миддла не тянет явно (ну тут обьективно, без обид бро) Самое смешное, автор канала тоже не тянет на миддла. От этого такие ролики вдвойне смешнее смотреть! Жду, когда он про О-сложность узнает, или начнёт работать над реальными проектами )) Требую больше собесов!!!!1
@aanoonymouss
Жыл бұрын
Забыл добавить, пока что один из моих любимых каналов :3
@arthurlouiskarl
Жыл бұрын
а в чём собеседующий был не прав?
@ic6406
Жыл бұрын
Автор канала то нормально спрашивает, а второй чисто джун это без сомнения
@FBTEN2501
11 ай бұрын
У него не будет аргументов. Напишет какую-нибудь агрессию и сольется. Мне, конечно, тоже не нравится, что автор называет автоматическую память стеком, но для собеседования Джуна это норм.
@aanoonymouss
11 ай бұрын
@@FBTEN2501 Да изи. 1. override. Вещь из 11-го стандарта. Это вопрос для Intern уровня 2. IOManager - вопрос для джуна (это база ООП/С++) 3. терминология (GodObject, OpenClose) - для задротов и студентоты. Кроме них никто даже не вспомнит такие названия. У каждой команды будет свой набор таких определений. Нахер 4. про множество мелких файлов - вообще бред. И от Дани, и от автора 5. про возврат ссылки на локальный обьект - для интернов 6. там же про UD. "Может как отработать, так и не отработать". Тут автор тупо не понимает, ПОЧЕМУ может крашнуться, или же выполниться. Такое стыдно не знать миддлу. 7. про Singleton - сразу бред. Хочу посмотреть на лицо автора, когда он узнает, что в нормальной реализации их можно создавать и удалять по желанию. Думаю, автор еще даже не встречал проблему порядка создания/удаления глобальных обьектов, и зависимостей между такими обьектами )) Короче, такие вопросы - для джунов. Если автор их задает в теме "Middle C++" - ну о уровне автора можно сразу делать предположения. Не хейт. Здравая критика.
Не туда...
Вы смешные вы говорите что джун должен знать ооп паттерны 100000 страниц теории , ничего что это начали требовать конда джунов стало дохрена и если вы прошли на джуна то скорее всего вас используют как мидла за зп джуна, а вы этим гордитесь
@egorlazaruk2697
9 ай бұрын
Это слова людей кто нанимает к ним рил приходят парни на уровень выше по знаниям но думают что они проходят на позицию ниже
с первых минут 3 кринжанул чето)
@user-nh4ep7ns2j
Жыл бұрын
Честно говоря, совершенно не считаю возможным для себя подаваться даже на джуна, но с ответа на вопрос про override тоже выпал хД
@hustrik4805
Жыл бұрын
@@user-nh4ep7ns2j Думаю лучше вместо этого вопроса спросили бы его про SFINAE было бы получше, просто джунский вопрос на мидловском собесе и правда кринжовато но что еще более забавно и на override он не ответил.
@mrbibis7229
Ай бұрын
@@hustrik4805 ну справедливости ради override на компиляцию и логику виртуального полиморфизма не влияет, так что это можно было бы простить, просто чел лютый жесткарь и на такую штуку времени не тратит))) Но на некст вопросы он лучше отвечать не стал
Чем больше мелких классов плодится без необходимости, а лишь ради абстрактных вещей которые они перечислили, тем больше геморроя, время сборки увеличивается, читать разбросанную по мелким файлам логику труднее. Это точно плюсовики, в не жабщики ? При модульном тестировании, разве каждый тест не отвечает за свою область, какая разница монолитный это класс или разчленёнка, тесты то не монолитные!
@ambushedraccoon6408
8 ай бұрын
Как вы будете работать в 5-10-20 рук над одни огромным файлам, не спотыкаясь все время на мерж-конфликтах и не чиня бесконечные баги на тестировании?
@fein7068
Ай бұрын
CMake нам зачем?
На 30-й минуте -- вы чего!? Констовые ссылки возвращать можно!! И объект будет жить на стеке, пока жива ссылка. Так что со ссылкой const S& cs -- всё нормально. А вот с не константной ссылкой S& s --- такой номер уже не пройдёт, и там проблема (и ТОЛЬКО там), поскольку объект разрушится при выходе из функции, и ссылка будет не валидна. И тут не надо "пробовать" (закрашится \ не закрашится) -- просто читайте стандарт!
@ambushedraccoon6408
Жыл бұрын
Не ну вот прежде чем писать сами бы и почитали. А еще лучше продебажили бы, чтобы убедиться, что прочитанное правильно поняли. вот код для проверки: class CommentAboutReferences { public: struct Inner { int _x = 5; Inner() { std::cout
@user-cb8nc5to4z
Ай бұрын
Не надо писать бред, maroo. Конст-референс удерживает от разрушения временный объект. Здесь его не создают. Там объект на стеке лежит, он не временный. Если написать так: class A{}; // функция возвращает объект по значению A foo() { return A(); } ... const A & aref = foo(); // временный объект создался // далее проблем с aref нет
Пацан что-то вообще плывёт. Похоже не на собес, а на лекцию ментора
Пацан классно начал, но когда с кодом столкнулся поплыл. Больше практики
@neverhoodJK
Жыл бұрын
поплыл? он же всё решил без особых проблем потратив не так много времени.
@sashkastepashka
Жыл бұрын
Классно начал - это ты про оверрайд в самом начале?
@ic6406
Жыл бұрын
@@sashkastepashka про шарповый abstract наверное) Не знаю как такое можно было не знать на позиции мидла
Чувак шарпист что ли, override, abstract...
Хз я бы не ответил вообще ни на что но программы пишу
@sashkastepashka
Жыл бұрын
Все немножко сложнее, чем "программы писать".
@vilture5706
Жыл бұрын
@@sashkastepashka Смотря какие программы пишет.
И сколько платят за этот фуфел?