Подготовка к собеседованию на C/C++ Developer
Менторы
Специалисты своей области, которые смогут помочь вам
Middle .Net Developer
Senior Product Manager
Middle Python Developer
Ведущий программист
Backend Software Engineer (PHP)
Senior .NET/C# developer
Middle DevOps Engineer | Tbilisi, Georgia
Middle C# .NET
Senior PHP-разработчик
Middle python developer
Каналы
Полезные Telegram каналы и чаты
Транскрипция видео:
я всем привет у нас пробное собеседование с данилом на как бы позицию junior си плюс плюс developer вот и начинаем что же данил привет и как обычно на всех собеседованиях начнем пару слов о себе пожалуйста я учусь по специальности про свой опыт программирование в данной ситуации это сам интересно программирование во втором месте первых месяцев и начал делать они выполняют результаты их ступни и учителю и состоит личных местах потом первый курс подходит концу и возможно дальше у нас но я решил не терять время зря мы
00:00:00 - 00:03:13
начали возвращаться и было очень легко вас ищешь а потому что синтетические не там были очень похожи по началу лет у меня ну после этого и где все получается и обучался на 20 года до 2 недель мне собеседование собеседование успешную группу и теперь довольно долго до печенок занимаемся коммерческий проект проект проект проект пару слов на windows на но на плюсах да хорошо хорошо так нормальной приличный окей тогда все тогда технической части будем переходить естественно с самого стандартного в общем начнем с объектно-ориентированное
00:01:37 - 00:04:10
программирование расскажи мне основные пожалуйста принципы и как ты их понимаешь я выделю и парадигмой основные капитуляции полиморфизмом исследование [музыка] инкапсуляция часто объяснят к мексиканским сокрытием точностью до какой-то класс и сверху это перемена закидываем его вправить секцию делаете что-то типа скрываете данного защищаем и побратим мире телец когда это защита ну это вариация это механизм языка которая позволяет связать медленный и данная работа и данные методы работы сетей генными и
00:03:35 - 00:05:19
детализация ну еще можно там упомянуть про то что объект контролирует изменения своих свойств вот хорошо двое к наследованию исследование такой процесс получается классно является родителям класс класс который расследует нова является начальным класс который понимает все его внимательно с удобством лечебный процесс является расширением методы все его принимая понимает какие то характеристики является вашей сложно нормально сказать хорошо так прям орфизм остался но давайте коротенечко но самое главное полиморфизмом позволяет
00:04:26 - 00:06:20
для различных типов данных здесь это единственное поведение наоборот наоборот или как но различное поведение получается не единственное поведение различное поведение одинаково лишь то есть прямо хоть она и статический и динамический это компиляции динамический соответственную исполнению вот на этапе компиляции перегрузка метода рапторов доме есть динамический полиморфизм это когда мы наследуем сидят на шоу класса переопределяем хорошо такое просто на подумать вот смотри ну конечно обычно такое не спрашивают а
00:05:28 - 00:07:27
джонс камса беседы мы попробуем посмотрим вот какие ты для себя вот видишь часа очень любят говорить что там глупо это плохо и так далее вот какие бы ты для себя например выделил недостатки вот что-то может что-то с чем за столкнулся может первое что приходит в голову что-то выделишь что вот плохо solo pro обычно мне кажется что это обучение по сложнее сорта же функциональные про меня для понимания и осознания когда я известна ну хорошо хорошо пусть будет еще бывает а вот разрастается ну да если
00:06:28 - 00:08:05
плохо спроектировать разрастается до хорошо хорошо ладненько давай разбавим немного теории и немного практики в пожать пожалуйста экран там сверло и надо все видно все хорошо и так тупо и значит что раз мы уже говорим про наследование сразу перейдем к так называемой проблеме ромбовидного наследования реализую пожалуйста побыстренькому эту проблему класса давай по именам покороче a b c вот ну с тракт и да неважно и разберем что происходит и хорошо поле не хватает какого-нибудь аккуратно я стала проблемой окей ну в общем да
00:07:23 - 00:09:23
чтобы не тянуть будет у нас не определенный вызов до 2 инстанция все понятно хорошо давай в общем про инстанции ruim вот эту переменную t попытаемся обратиться получим ошибку и собственно решим эту проблему уже говорит хорошо давай сделаем проблема в том что исследование будет создан 122 окей хорошо без виртуального какая у нас синтаксис существует разгуливающие эту ситуацию визуально раньше как-нибудь расширить мы вам можем по-моему через точку не менее 1 это понятно да будет наверное нему доли той маленькой они классный класс а
00:08:46 - 00:11:15
да только двору берем виртуального наследование чтобы убедиться что все нормально но из избы истца проблема тут очевидная да то есть что дует где по сути две переменные rich нет да ну как скрепили руется это хорошо пока демонстрацию наверное убирать пока что на время как все хорошо вот давай значит поговорим про ключевое слово virtual да расскажи зачем нужна зачем используется для чтобы что-то заметно будет какой-то не является автоматически полиморфным комнатах для клевыми как приморские рассматривать
00:10:16 - 00:12:57
вообще никакой идеально джек испытаний если честно не знаю насчет различных калькуляторов но я считаю что написали виртов значит будет хорошо давай к этому вернемся такое в чуть не надо в сторону про про виртуальный деструктор зачем он нужен и давай наверное давай наверно с примером в везли это разберем сейчас надолго она включается демонстрации не включила включила но и просто тупит [музыка] здесь действуют класс печь будет проводить что хорошо теперь давай воспроизведем ситуацию основной чип это не создать
00:11:37 - 00:13:42
[музыка] ну и утечка утечка памяти длит вызвать здесь потенциальная утечка в данной ситуации как бы нет но логически деструкторы эффективнее че деструктор не вызовется да и хорошо но давай починим достаточно отлично ну и вот ее сразу в стадии порядок деструкторов виде вот хорошо смотри расскажи мне следующую вяжу а пусть он будет вот чисто виртуальный метод да как синтаксис покажи мне с точки зрения синтаксиса но и зачем он вообще нужен где ты его например может привлечь назначается и короче очень удобный синтаксис
00:13:21 - 00:16:22
хорошо но как бы такие вопросы например смотреть но зачем да зачем такое может пригодиться зачем мы просто у нас есть какой-то интерфейс для нас парсов допустим несколько раз и будет иметь один а также метод но все эти методы вот отличаться реализации наш usb адаптеры для этих вот самореализации ему не нужна ведь [музыка] посмотрев получается ну как бы это сказать но понятно что в классе наследники мы не можем в общем инстанциировать класс пока мы ее там не реализовали да смотри пропьет щелкал знаешь расскажешь это допустим не может
00:15:21 - 00:17:36
вызвать чисто виртуальная функция потому что объект наш вообще-то поверхность ну и сконструировал не смотри это вот то что ты говоришь да она на как на этапе компиляции ругнется вот а давай попробуем именно но вот у нас класс-b наследуется до кого уже давай попробуем наверное то деструктор уберем что мне мешали что вместо не занимает попробуем воспроизвести именно exception который может возникнуть не пусть сделать потому что у нас есть чистая давай рядом с этой ситуацией в нот в классе b но и и переопределим что все
00:16:32 - 00:18:17
было красиво хорошо да без разницы окей хорошо но ты говорил про конструкторы до направлением если правильно и хорошо давайте отталкиваться от конструктора класса а создать но давай моей компилятор обманем и например какую-то прослойку для вызова создадим ну да ну то есть как бык кстати ну-ка давай-ка подожди что он попробует собрать пожалуйста странно что не ну давай создадим объектом потому что мне мне всегда казалось что не должно собрать мы попробуем давай создадим а ну точнее в бэ бэ бэ вэ а не создастся
00:17:24 - 00:19:09
[музыка] запусти нет ругается в общем говорить ну что что то не так да но как бы это сказать-то в данной ситуации компилятору это сделать легко и потому что это делается из конструктора вот ну смотри что если мы создадим например просто какой-то метод да и из этого метода получается вызове вот эту функцию то есть мы из конструктора все в классе а класс б уже все жук сделал да вот здесь надо создать какую-то функцию которая называется цикл да да да и вот тут еще но давай пока пишем пишем не на f1 cookies и хорошо в данной
00:18:46 - 00:20:44
ситуации я передано да вот давайте сгенерируем мы видим но точнее запретим увидим отлично да хорошо вот как бы это сказать попробуй объяснить так как ты понимаешь ну например почему это случилось как бы типа почему она увидит например виртуальное в конструкторе а через прослойку не работает но как бы тут более-менее ясно как бы обманули компилятор вот но почему это вообще происходит как ты себе это представляешь почему такое исключение вообще возникает вообще когда создается интернет мы помещаться вызвали функцию собак
00:19:50 - 00:21:50
известный как компиляции реализации то есть не и реализацию появляться по исполнению так наши так на этапе исполнения когда мы запустили многим здесь весь прикол в том что это чисто и определение да вот вот вот верное направление вот давай подобную в сторону конструкторов например порядок вызова конструкторов и что происходит вообще получается когда он пытается вызвать абстрактное пожалуйста вот потому что как бы б еще не вызвали да то есть мы еще не ск не да не положили получается в таблицу хорошо хорошо давай двигаться
00:20:46 - 00:23:59
дальше скажи пожалуйста например такой вот момент ключевое слово static тебе знакомо смотри получается но такое спрашивают спрашивают поэтому спрошу смотри ну предположим у тебя как бы ну ни один такой довольно таки большой проект много цпп файлов много вот этих единиц компиляции получается мы в вот в цпп файле до объявляем вот глобальные перемены ну вот просто объявить глобальную переменную объяви ok хорошо смотри вот что поменяется для этой переменной если мы ее пометим как static если мы отлично
00:22:34 - 00:24:56
отличный ответ да какую-то аналогию этом узнаешь какой то другой аналогичный синтаксис про видимость в рамках цитата файла про видимость ну да можно поделить условную компиляции хотя попроще на проще так пространство имен можно создать зеленые пространстве на к какой мы создадим нам space чтобы была видимость только здесь тогда видимость будет я про но в общем так или иначе со стасиком все хорошо существует еще такая политика к на немного namespace и просто без имени они в принципе делать то же самое что
00:23:50 - 00:25:35
делают static если много таких переменных то в принципе удобнее сделать анонимный namespace и в каждую как бы static не тыкать вот хорошо хорошо так добавить немного к такому можно даже наверно сказать немного хищному до в общем передача параметров функцию да мне сейчас говорим не про не прокол конвенция не прикольно конечно говорим просто про синтаксис на именно какие существуют у нас синтаксис и вот и передать функцию про значение это делается как это делает когда объект небольшой ну это в основном работа на
00:24:47 - 00:26:20
длительность мусора скопируйте их гораздо будет выгоднее производительнее чем брать позже суд за него хорошо ну то есть сразу мы про побочный эффект уже сказали на то что носками копирование происходит ok хорошо давай дальше что еще можно передать показать и сам объект сказать него и в этом случае чтобы получить его данным разминулась также если данные нашего указателя на человек не получается дальше летает и его копировать такой psyche ней старый такой дедовский метод вот хорошо что еще есть еще передачи
00:25:41 - 00:27:34
является наиболее безопасный вариант нравится ощущение стал что если мы меняем какие-то данные и супер его попросили посылки там и если мы меняем это данные внутри нашего метода то эти данные измениться и изме ну если они конечно и декорации из и поставку хорошо храм кали высоких и более безопасному что нам приходится разминалась из но это просто под капотом компилятор делайте ссылки концовку карать отлично хорошо смотри такой вот занятный момент часто его вот упускаю да вот смотри по сути у нас есть например
00:26:41 - 00:28:10
мы же можем сделать к эту константный указатель мы можем сделать констант ную ссылку то есть принципе объект от измен изменения извне будет как бы защищен но почему все равно ссылка в данной ситуации будет безопаснее как ты думаешь потому что у ссылки как бы не надо вызывать куратор давить не надо разминулась она уже и вам не пользоваться так мне кажется что их основной плюс не подожди нет ну хорошо попробуем другой стороны к этому зайти в давай остановимся на получается на различиях ссылок и указатели дано то
00:27:26 - 00:29:01
есть мы сказали что там ссылка под капотом там констант на указатель хорошо что еще чем они еще отличается можности газированную все вот на этом собственно и останавливаемся то есть ну вот к чему вел да то что получается что конечно все равно можно да это си плюс плюс но вероятность выше что данные пришедшую функцию как бы они будут целостной то есть ну не что никто не передаст нам на бтр например ли что-нибудь такое вот то есть это какая-то будет про нецензированная переменная окей хорошо смотри давай значит то из такого
00:28:13 - 00:29:49
давай в общем ключевое слово const да про константные ссылки поговорили про просто константы смысла не вижу говорить двое про методы в общем зачем они нужны и просто так основные методы на шаг не то есть я уже даже какая на примере исправлено так даже лучше того чтобы дать понять программист ивою что ничего нашем объекте на состояние нашего объекта внутри привезли этого медленно меняться так же тут есть несколько город если мы память наш объект который методе то это учатся будем менять данные нашего объекты это
00:29:04 - 00:31:09
смотреть как бы new the bald но так вот при на подумать да получается где вот но часто говорят о минуты было бы ним типа там костыли все такое дело валидная вот это будет прям применением вот в констант нам методе прямо между был прям будет хорошо работать хорошо будет работать случай у нас есть какая-то статическая переменная что-то типа счетчик политическую переменная может можем поменять воно ж не изменят состояния никто ну то есть ну смотри предположим как сказать вот предположим у нас метод
00:30:08 - 00:32:02
наш до какой-то гендер берет он в 1000 значение поздно кому-то условному ключу до яндекс может быть это строка индикатор неважно ключ вот что если операция вот поиска на на прям долго так ощутимо долгая то есть что в таких ситуациях вот принято делать чтобы как-то облегчить жизнь машине чтобы объект жизнь машине можно использовать другую структуру что но ладно хорошо зато остановимся в общем я как бы к кеширование кашира не результатами он то что можно вот нет м проекта егориус то есть допустим у нас
00:31:04 - 00:32:39
есть бинарное дерево и мы ищем настроить винограда и ты нужен нам использовать карту близ но нет нет нет подожди я не про хэширование я про про кэширование то есть вот ладненько хорошо давай так вот у нас константный метод кроме ты был сказали какой еще способ накинешь по обману как бы константа метода изменение состояния можно сделать просто константный раз потому что коля связывать когда вызываем функцию нашего ректора этот механизм компилятор отсюда передается еще и указатель на автомобиль и у
00:31:54 - 00:33:31
контактного дед ну-ка столкнула методом как бы констан можем просто сделать константной краски получить наш отдел не константные не кратно объектами можем поменять да ну то есть использовать как рассказ сбросили модификатор поменяли хорошо допущу все устройства писал вот окей хорошо я думаю я думаю можно пройтись немного по задачка на смотри получается такая задача начнем с простого давай создадим какой-то вектор а и вектор случайных чисел вот пусть будет вектор общем ментов дальше разберемся уже скажу
00:32:48 - 00:34:38
непосредственно условий окей хорошо вот так немного тут остановимся вот смотри получается вот про вектор например у нас вот говорят например есть вот стадо вектор и стадо лист чем они как бы отличаются узкому силу родились на основе связанного списка каждый элемент есть указатель на следующий элемент именно и ведущий хорошо вот получается какой например у вектора будет преимущество перед списком такой самых очевидных имуществом удивляться преимущество на силы и элемента будет ну то есть от одного можно сказать так
00:33:42 - 00:35:59
хорошо шло такая вот сложность доступа у листа будет если убрать у листа получается чтобы дойти до зеленую нужно пройти степени 2 стоят на него и сложность нахождения элемента взять будет логарифм [музыка] нет еще попробуй если все элементы нужно один раз тут какая сложность ну не логарифм логарифма то дерево [музыка] вектор проверки сказать проектор все правильно вот 1 получается лист мы должны вот до какого то конкретного элемента пройти все элементы какая сложность получается сложность до конца
00:35:17 - 00:37:00
отлично отлично ok про доступ разобрались хорошо про то есть у вектора очевидное преимущество доступ как бы константный от одного если мы там хорошо какое преимущество листа перед виктором вместо мы можем закон' стану его элементы разбросанные по станице они имеют показатель следующему предыдущий то есть истина допустим вставлять какой-то новый элемент добавлять все вектор более затратно потому что это не во всех случаях но можно приводить perego si палец paulista поделиться установив ну так какой смотри помимо вот
00:36:19 - 00:38:08
потенциальные локации до вектора какой еще как бы дополнительный эффект у нас происходит гляну на представляем элементы ли удаляем элемент вектора векторы если мы добавляем в конец дня ним середину в конечный интерес конечно частью середине середин если мы добавляем середину то ну соответственно будет происходить это провокация больнице и не обязательно да не обязательно тайский массив из сериала вместимость позволяет добавить еще один элемент все элементы этого захотели какой поставить не сохранятся потому что
00:37:14 - 00:38:41
инструмент ну точно сдвигаться до копироваться хорошо хорошо о киева это все обсудили значит можем переходить как бык задача вот смотри получается задача такого ну прям тут в мы не будем писать будем заморачиваться наиболее оптимально не использую std вот у далее получается определенный элемент но в данной ситуации это будет ну давай добавим пару повторяющихся элементов да ну например порой единицу куда-нибудь в середину в кинем до чтобы на единичку ориентируется на хорошо вот давай наиболее оптимальным
00:37:58 - 00:39:37
способом и получается удалим вот эту вот единицу из нашего тара вектор использую хорошо так на друга вид изделий если какие-то минимальные косяки синтаксисом и так далее типа это не страшно мне главное именно подход верную сторону чтобы пошел все остальное там спектр тоже рейзы вся не самая приятная вещь окей хорошо я ведь все отлично отработала только подожди а ну да у нас но мышь хвостик не обрезали но это как бы не суть на вот давай разберемся что произошло что происходит почему как бы работает если мы начнем смотреть то мы
00:38:48 - 00:41:22
берем на первой итерации получается она любом присваиваем а 0 нет нет на первой итерации часто но на 0 итерации что нас нулевой позиции россии на нулевой позиции в усеяна петли навсегда да да да тот костер на нашем примере разбираем на мизинец и и получается что то есть мы скидываем по сути итерацию разбиваем что в следующей итерации я уже будет значение нитка не поменяла и и победы и как бы к наращиваем да и на раньше хорошо смотрим вот этот вполне единица поэтому мы его и записываю сюда вот и смещаем потом
00:40:05 - 00:43:37
смотрим нашу единицу мы нашли эра как в родном за фестиваль отлично и наращиваем конец но все в принципе понятно в общем такая вещь часто популярная в общем надо надо надо знать и как бы понимать вот хорошо давай наверно немного к другому давай мы создадим какой-то класс и да да да вот и этот класс мы получается защитим от копирования и защитим его от перемещения копирование и что вы ищете есть может скажешь каком стандарт уделит появился перед появится возьмем хорошо оператор перемещений [музыка]
00:41:48 - 00:44:31
вот и вы получается и вот защитили от этого носите парик на уровне и не сможем скопировать переместить ну чего тоже не хватает еще же и способы скопировать объект и переместить ну да такие ну все как много соли в данной ситуации мы защитили например от передачах функцию еще как бы что что еще у нас есть еще оператор присваиваешь до твоих тоже и копирующие присваивание и что осталось не осталось [музыка] еще хорошо защитились отлично отлично и давай получается наверное на сегодня что-то последнее сортировки какие такие
00:43:28 - 00:46:40
знаешь сортировки но есть личную и другие которые которые освоить до 1 питался написал тот же например бинарная сортир он сын сортировка старт местная есть сортировка вставками тут в принципе ничего особо интересного вот бинарное то что под ней подразумеваешь может какое-то другое название мы что-то перепутал может быть но получается у нас массив он уже отсортирован и сколько он форсированным идеально 2 так это поиск картинок хорошо давай тогда реализую и пожалуйста нет во первых из-за стиля что ты будешь вот
00:45:14 - 00:47:03
давай попробуем используя эстель вот данный массив отсортировать и вот у нас уже есть этот рэй да давай сортируем ну да учись везла на высоте как сейчас подсказки здесь есть из стандартов [музыка] [музыка] хорошо как бы но предположим у нас какие-то объекты более сложные как собственном добавить условия получается в эту сортировку условия можно использовать иные функции не хватает параметра опечатка first и ну ничего страшного нокии хорошо хорошо знаешь наш план теперь давай-ка получается пузырьковая сортировка своими руками
00:46:12 - 00:49:09
[музыка] так же ты просто гений и же будет меньше чем вот подожди а где при условии если какой функцию тут можно использовать чтобы не писать лучше на самом деле использовать что эти буферы никого не особо не нужны одну одну проблему хотя от нет нет все ошибся это в другой реализация была бы проблема тут все хорошо да хорошо отлично я думаю в принципе достаточно я думаю где-то час времени у нас заняло довольно таки стандартно такой потом как бы после этого я ищу что-то типа какой-то более подробных и так буду
00:47:57 - 00:50:16
составляет до такое из короткого по теории я доволен до споткнулись получается на задаче с удалением но насколько я помню в первый раз когда мне мне эту задачу задали я тоже в принципе споткнулся так что но не критично но в общем знать надо так частенько такая эту задачку задают если подумать да на собеседованиях но на собеседовании конечно опыт помогает на какие-то именно решение типовых задач либо что-то видел либо что-то похожее видел и так далее вот про константные методы хорошо про указатели
00:49:57 - 00:51:34
про ссылки хорошо ну в общем я доволен хорошо подготовился молодец двай останавливает запись так
00:50:46 - 00:51:09