Собеседование Middle C++
Всем привет!
Провели собеседование с Владимиром на позицию Middle C++ Developer.
Интервью по большей части состоит из лайв-кодинга.
Левую часть кода обрезало при записи, но вся значащая информация сохранилась.
Приятного просмотра!
Twitch-канал: / ambushedraccoontv
Telegram: t.me/ambushedraccoon
Полезные ссылки:
Три возраста паттерна синглтон:
habr.com/ru/post/147373/
Синглтон Майерса и многопоточность:
ru.stackoverflow.com/question...
Не забудьте поддержать видео :)
Таймкоды:
00:00 Вступление
01:58 Бинарный поиск. Левая граница
23:47 Конструктор копирования
28:49 Конструктор и присваивание. Разница
31:20 Singleton
39:55 Singleton Майерса
41:45 Фидбэк
Пікірлер: 82
Спасибо за видео!
С новым годом, братья
@eliot8707
Жыл бұрын
С новым и тебя! 🎉
Проверка, реализованная кандидатом в цикле в первой задаче приводит к нескольким багам: 1) Если у нас ровно один элемент в массиве и он равен key, то мы не зайдём в цикл и вернём -1, что некорректно. Пример: arr=[3], key=3 2) Возможна ситуация, когда на одной из итераций right станет меньше left и мы наткнёмся на UB или на бесконечный цикл. Пример: arr=[3,3], key=3 В подобных реализациях лучше всегда писать такие проверки, которые гарантируют, что правая граница не стала левее левой и помнить, что вырожденный случай, когда они совпадают, тоже корректен
@ostrov11
Жыл бұрын
... "лучше" враг хорошего
@ambushedraccoon6408
Жыл бұрын
Да, все верно, Спасибо, я проглядел.
Чувак реально молодец!!!! Это первый чувак ,за 10 лет пока я провожу собеседования , от которого я услышал, что singleton решает проблему порядка инициализации глобальных переменных. И кстати именно для этого он и был придуман Маерсом изначально.
@wokeupinthefuture
Жыл бұрын
разве Маерс придумал синглтон?
@s.g.7213
Жыл бұрын
@@wokeupinthefuture А кто по вашему? Он был описан в 94 году в книге "банды четырех", но насколько мне известно авторство принадлежит именно Маерсу.
@articice7342
Жыл бұрын
@@s.g.7213 В книге четырёх в 6.2, 6.3 описано про появление паттернов. Как я понял паттерны (описанные в книге) есть результат совместной работы. В книге также указывалось, что сингелтон был реализован ещё в smalltalk. Если есть ссылка где указано кто конкректно придумал базовые паттерны (хотя бы один), буду признателен если поделитесь.
@s.g.7213
Жыл бұрын
@@articice7342 паттерны есть результат совместной работы, но не только тех людей, которые значатся авторами книги , а близкого к стандарту сообщества в целом, которое общается между собой. Тут есть небольшое недопонимание, потому как я говорил , о синглтоне Маерса в с++ ,а не паттерне в широком смысле этого слова. Если говорить о синглтоне Маерса в с++ .То первая его реализация, не запрещала копирование объекта, потому как решала проблему не однозначности порядка создания глобальных переменных в первую очередь.
@s.g.7213
Жыл бұрын
@@cppdeveloper А вот Александреску - Современное проектирование , у меня кто то спёр из уволившихся сотрудников....
Решение через лямбду часто можно видеть на литкоде, и мне оно тоже не нравится. Что можно улучшить: Интервьюеру: перестать употреблять "как бы" через каждое предложение. Кандидату: придумывать/спрашивать несколько тесткейсов и подробно разбирать их перед тем, как что-то кодить.
Джунам на заметку! Оператор присваивания реализован не оптимально. Сначала необходимо делать проверку не происходит ли самоприсваивание. if(this == &other) return *this .......... Если этого не делать, то на больших объектах будете терять драгоценное время. А время - деньги! Ну и конструктор копирования лучше реализовать через вызов оператора присваивания
@agordov
Жыл бұрын
Вообще для примера из видео достаточно будет и представленной реализации, или даже написать = default. А так гораздо удобнее и красивее (имхо) использовать copy-and-swap, особенно если мы возможно часто копируем, но не самих себя, т.е. проверка будет срабатывать очень редко (мы ведь не хотим каждый раз тратить время на бесполезные проверки (хотя тут скорее всего будет срабатывать бранч предиктор и часто реальная проверка не будет произведена)). А если еще и приходится часто копировать, но не часто менять содержимое, то стоит задуматься о COW, т.к. в этом случае может получиться еще лучше по производительности.
@user-ri8dx3cc1b
Жыл бұрын
@@agordov Всё зависит от уровня кандидата. ИМХО! В рамках поставленной задачи, представленное решение ближе к джуну чем к мидлу. Мидл уже самостоятельная, боевая единица команды, и про принцип DRY лучше не забывать.
@articice7342
Жыл бұрын
Никогда так не делал, ни в одно большом проекте (с которым работал) такого не встречал. С временем работы програмы из-за этого никогда проблем не было. Имхо, больше аремени будет тратиться на постоянные проверки для всех мелких классов, чем на экономию при выполнении присваивания, которого, у хорошего программиста никогда не должно произойти.
Привет подскажи пожалуйста как на программном языке работает античит в играх .Потому что именно этот античит не дает запустить игру на линуксе притом что она качается.Проще говоря можно ли его обойти или обмануть чтобы запустить эту игру на линуксе -игра лост Арк
@ambushedraccoon6408
Жыл бұрын
Привет. Я читами больше не занимаюсь. Да и в любом случае не смогу помочь. Особенно на линуксе.
👍
На 25:40 что не понравилось обоим? Uniform initialization вроде уже давно есть. Можно и так проинициализировать, Нет?
@DadundddaD
Ай бұрын
Тот же вопрос.
Здравствуй, с какой целью ты проводишь собесы??? И как попасть на них???
@ambushedraccoon6408
Жыл бұрын
Привет! Цель - создание обучающего контента. Дабы попасть на собеседование следите за новостями канала в телеграме t.me/AmbushedRaccoon Там я объявляю наборы кандидатов.
Нихрена ты его раскатал! Теперь даже джуном не возьмут!
@ambushedraccoon6408
Жыл бұрын
Ничего не раскатал, нормально кандидат справился.
CopyAssignExample это POD, зачем для него реализовывать ctor и другие самостоятельно? Потом спрашивать кейсы их вызова? У мидла???
большое спасибо за видео,если не сложно,можно тайм коды по вопросам пожайлуста
@ambushedraccoon6408
Жыл бұрын
Таймкоды готовы.
@kimpantnw1834
Жыл бұрын
@@ambushedraccoon6408 спасибо
Кто-то писал, что middle неверно вычисляется? Если оба числа будут близки к максимуму, то будет переполнение, лучше так: int middle = l + (r - l) / 2;
@ambushedraccoon6408
3 ай бұрын
Писали уже, да. В любом случае спасибо.
@yupiter9403
2 ай бұрын
соглы, удивился, что кандидат написал так
А разве не проще в задаче с копированием написать = default?
@ambushedraccoon6408
Жыл бұрын
Проще. Но такая реализация пригодится на случай Deep copy.
Ты хотел сказать рекурсивно а не рекуррентно?
Вообще на видео CodeShares картинка уехала вправо (((
@ambushedraccoon6408
Жыл бұрын
Поправил в следующих видео.
если это уровень Middle то я Senior
Я чего-то не понимаю, или для middle это, мягко говоря, слабовато?
@alexsndralexandr3069
Жыл бұрын
Все вы правильно понимаете,я пока что учусь,но тут до мидла не дотягивает.
Нихера не видно в записи в этом CodeShared
@ambushedraccoon6408
Жыл бұрын
Да мелковато, но с компьютера можно разглядеть. В следующих видео крупнее.
@user-st3fm6bs5j
Жыл бұрын
@@ambushedraccoon6408 Сделай покпупнее, если дальше будешь, у тебя замечательные видео
@ambushedraccoon6408
Жыл бұрын
@@user-st3fm6bs5j Спасибо) хорошо.
Это 5-ти минутка
Фууух я сначала первую задачу решил сам сделать, сделал её как раз просто заменив arr[mid] > value на arr[mid] >= value и сначала испугался т.к. как будто я что-то упускаю, т.к. посмотрел код собеседуемого и послушал комментарии автор, хотя код я протестировал. Но потом отлегло.
Как же долго на простой задаче то
Спасибо за видео, но вот нам в РБ работы нет, как и в Рашке, милой сами устроятся, а что Джуна делать, вечно готовиться ?
@h1ghammcsgo698
Жыл бұрын
Есть вакансии на джунов. Надо искать.
@vasiliypupkin6311
Жыл бұрын
@@h1ghammcsgo698 1 на 1000 человек, обратно на заводик(
@vladimirchizh8853
Жыл бұрын
Это не правда) Вакансии есть. Но их конечно гораздо меньше.
@h1ghammcsgo698
Жыл бұрын
@@vasiliypupkin6311 ну зависит от направления. В ue сейчас есть спрос на джунов. Так как рынок просел и не все тянут запросы мидлов.
@vasiliypupkin6311
Жыл бұрын
@@h1ghammcsgo698 по снг 2 компании кто работает с ue, мой вектор ++
синглтон - это же антипаттерн ))
@goczt
Жыл бұрын
В вопросах проектирования автор застрял где то в 2005-ых, видимо работал в геймдеве и с легаси кодом много
@ambushedraccoon6408
Жыл бұрын
Вброс на троечку. Синглтон позволяет покрыть много интересных для собеседования моментов в познаниях кандидата. А прежде чем спрашивать, что с Паттерном не так я предпочитаю выяснить, что кандидат знает .
@goczt
Жыл бұрын
@@ambushedraccoon6408 может быть и позволяет, но в 2023 году на полном серьёзе отправлять кандидата изучать как реализовывать устаревший паттерн, это практически вредничать. С моей стороны иронии бы не возникло, если бы был хотя бы НАМЁК на то, что с паттерном что-то не так. Да, знать полезно, а ещё полезнее знать, почему от него предпочитают отказываться. Я специально сходил в поисковик и глянул всю первую страницу выдачи. Нигде не сказано ничего не только про то, почему паттерн не стоит использовать, но и что он не соответсвует современному пониманию разработки ПО в принципе. Для тех кто знает английский, рекомендую к просмотру запись с конференции CppCon: Retiring the Singleton Pattern: Concrete Suggestions for What to use Instead
Хрюкнул с гринскрина
@immickful
Жыл бұрын
Ась, о чем речь? Тайминги хоть давайте момента хрюкача.
Интересно а без образования берут?
@ambushedraccoon6408
2 ай бұрын
Берут. Но лучше иметь, чем не иметь. Если вообще нет никакого образования кроме школьного это может показаться странным для работодателя.
Фейспалм с обоих... Я себе лицо рукой разбил из-за вас. Больше из-за интервьюера Пометьте, что это комедийный контент, и что к нему не нужно относиться серьезно. А то новички вас всерьёз будут воспринимать
@arthurlouiskarl
Жыл бұрын
лол, что тебе не нравится в интервьювере-то?
@georgyg1531
Жыл бұрын
@@arthurlouiskarl это даже не уровень новичка. Это уровень "я прошел 2х недельный курс по с++ и алгоритмам"
@raresongs3788
8 ай бұрын
@@georgyg1531 Да какие 2 недели -> за пару часов управиться можно, и то, попутно отвлекаясь на видосы на Ютубе