Mock - собеседование от ведущего разработчика из Ozon (секция С++)

Подготовка к собеседованию на C/C++ Developer

Транскрипция видео:

  • привет смотри сегодня у нас секция после плюс плюс порешаю несколько задачек и подкачай на некоторые опросы так готов я готов давай тогда начнем с первой задачки смотрели есть вот такой код и давай посмотрим что здесь вообще происходит в этом попробуй понять попробуем понять что будет выведена есть винтовой массив состоящий из восьми элементов значит и есть указатели типа 18 ти значит то есть 8-битный 1 байт им вот и мы его значит указываем им на начало массива и дальше двигаем его на три позиции и

    00:00:00 - 00:01:34

  • пытаемся вывести то что получится в винтовом видим да все так а вот что будет выведена смотрим предположительно мы до поскольку массив им-то вы это соответственно размер ячейки рассчитывается как четыре байта для 32-разрядных операционных систем ну да будем считать чувство стыда будем считать что in стрельба это у нас то поскольку указатель значит int 8-ти то он соответственно buy to pay и когда мы прибавляем вот у прибавляем по одному байту и мы будем указывать на третий байт значит от начало массива

    00:00:50 - 00:02:01

  • [музыка] насчет посчитать вот я не знаю то есть как как можно пить материал может сможешь иллюстративно представить то как у нас там хранятся данным при массива по байтам по байтам байтом ну например смотри смотри давай под пример покажу допустим у меня будет две черты это граница интер же рада и между in the jerome у меня здесь будет по батику то есть соответственно смотри как-нибудь вот так и под страж представить вот это один интеджер соответственно это второе это третье это джерри тут какой-то cries in the

    00:01:30 - 00:02:37

  • джерарда и вот только у меня единичка будет представлена если сообщение и само значение генетики да если ну то есть как как 1 1 1 гб между двойной одинарный смотри на то есть я что имею ввиду ин-т джером это четыре байта мы определились правильно да совершенно верно 10 число 1 можно поместить в 1 байт во представления да да да вот вот как один будет выглядеть не надо бинарный вид просто скакуна есть просто подскажу сейчас я тебе покажу и расскажу где мы молча бит то есть вот здесь будет единица так ну смотри 70 того какая

    00:02:07 - 00:03:39

  • какой бордюр если де квинси и да только немного перепутались абекен dance конце окей да вот это как раз таки я хотел услышать то есть давай поговорим вообще пролетал и big endian стоит такое чтобы все рассказать little big endian еще есть mixed in der там его и металл еще называют это ориентируем это порядок расположения значит бит в байте то есть 50 этого мы будем считать младшими байтами либо левые крайне левые либо крайне правые начинать отсчет x5 либо слева либо справа да да окей а где что применяется сможешь

    00:02:57 - 00:04:15

  • сказать мы там понятно дело что можно встретить это это каких-то отдельных частях но вытер чаще что-то используется не знаешь нет у большинства сейчас процессора популярных и архитектуры потому что пикантному большинства элита водяной ромов нет сейчас большинство процессор будет именно светлы антеннам то есть практика показывает что это вот допустим вот вы им там бега энди на не знаю может в новых стандартах они что-то перевели но был там big endian вот хорошо давай тогда поговорим про разницу ссылки

    00:03:37 - 00:04:38

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

    00:04:11 - 00:05:41

  • если передавать ее в функцию к 1 копирование не происходит то есть она является таким же адресом вот если допустим у меня в мейбери класса есть and reference на что-то ну то есть member грубо гребнем структур к ее в этой структуры and reference есть я не уверен на самом деле мне кажется что угол бы это практически тоже самое что указать это будет окей да да хорошо давай дальше тогда еще различие какие как ты как это были 7 остальные развлечения указывай арифметика есть ссылок услуг нету указатели есть

    00:04:55 - 00:06:08

  • массив ссылок можно делать думаю нет окей хорошо отдавай тогда пойдем следующие задачки тут быстро закончили мы придем контейнером хорошо так давят этот код посмотрим здесь есть две из есть листы виктора и и и все из контейнеров все есть шаблонная функция принимающая значит некий общий тип [музыка] что мы делаем у нас есть в мае не мы стоим ли стентов и закидываю его функцию implementation есть и также то что мы с вектором мы кладем в туда пусть бег в конец забрасываем 0 создаем итератор на начало и

    00:05:39 - 00:07:26

  • и значит бежим до 1000 тыс тысячу шагов делаем поэтому в этом контейнеру и закладываем число в конец и я во первых я думаю что наверно это не будет работать потому что у листов лесов есть позже когда есть окей тогда тогда вопрос снимается да но он будет закладывать в этот контейнер равен этот жалкий все верно написал как это работает два посмотрим есть ли здесь какие-то потенциальные проблемы у этого кода [музыка] для того чтобы пробега я хотел или же ничего такого что давая закомментирую вот это давай посмотрим

    00:06:36 - 00:08:05

  • сузим так сказать тебе место для блеска давайте свет его только вы ищем ада и все понял и завить волхва но то дело в чем дело в том что когда мы будем добавлять по оператору вектор там и соответственно можем исчерпать capacity и вектор будет релакс ирован вот таким образом мы потеряем значит потеряем область и but now online by heather это будет я думаю на этого бреда потому что память предыдущий чистится то есть выделяется буфер как правило два раза больше и старый буфет прошла чистится вот ну то есть временем

    00:07:33 - 00:08:49

  • называется и выделит и соответственно да это память уже грубо говоря может указывать непонятно куда и непонятно что там будет этого бы наверно с листом а это будет корректно или нет христом да он хранит думаю да он бы он хранит значит непоследовательно свои свои данные не разбросанные в памяти в рандомных местах связаны указателями там или или ссылками до указателя мин то есть это какой-то список односвязанны 2 связанный список ну как конкретно этот еду средства список 1 связанной с стандарта библиотеки да он вызвать форвард отлично

    00:08:28 - 00:09:43

  • отлично отлично хорошо давай тогда мы и это называется инвалида центраторов давай поговорим о вот допустим возьмем маккуин ордер ритма по там инвалиде руется итератора или нет я думаю нет потому что an ordered map это собственно хотя и был если есть панин во лидировали что невозможно было бы решать проблему коллизии цепочками а вот давай поговорим как вообще там устроено все внутри вот хэш таблица на на основании чего устроена хэш-таблица устроен она снова то есть как как как именно работает сама хэш

    00:09:05 - 00:10:16

  • таблица ну вот смотри дерево грубо говоря да это какая-то абстрактная концепция которая как были построены на pointer модель то есть у нас грубо говоря указать на лифте на райт и хэш-таблица как бы такой абстрактной модели на под собой использовать какую-то структуру данных и это mi vida окей я думаю что это массив массив denote динамический массив простой да и вот вектор есть ли локация да когда заканчивается capacity согласен да а в хадисах и нет такого понятия как tps эти потому что мы можем уходить в корице

    00:09:47 - 00:10:53

  • образовываться могут связанные списки дано чтобы кризиса двигаться за то есть такое понятие как вот сектора даже штандарт даже этом функцией такая member на этот сектор можно вызвать это индекс но коэффициент точнее заполненности и твои хэш-таблицы и вот когда вот фактор стремится конце восьмидесятых как правило как правило то в этот момент происходит такой операции как решишь то есть я понял встретились всех еще до это выделение памяти тоже можно в два раза больше выделить буфер и потом перри индексировать все хэши в этот буфер и

    00:10:20 - 00:11:22

  • старый буфер удалить соответственно тогда nor do with map январь лидирует оператора или нет в таком случае да я думаю да да окей хорошо быть дома по мо по она сделана на самом балансирующих деревьях красно-черных скорее но может быть я был не уверен да на стандарте не сказано какие чаще всего красно-черной используются да да еще знаешь какие-нибудь алгоритма балансировки деревьев ну свопами смысле левую левый поворот правый поворот но этот и выдайте давида вильи регистрируется как раз таки на поворотах деревьев есть красно-черной

    00:10:51 - 00:12:07

  • деревья еще есть какие вот алгоритмы построения ну то есть очень структуры данных и не знаю как то крик не назвать декарта вы на доминирование деревья не слышал нет нет атакуя я не сожаление хорошо так ну и тогда вопи дворянин варьируется ты сказала erringo не или января дерутся в мак и нет потому что не видно сна ну как там там на указателе все сделано поэтому вряд ли хорошо отлично давайте дальше пойдем давай поговорим с тобой вот сейчас у нас есть лист вектор про разницу вектора листа да хорошо

    00:11:29 - 00:12:43

  • вектор это динамический массив вот соответственно он хранит свои значение однотипные значения соседних ячейках то есть должен быть непрерывный блок лист хранит соответственно в разных местах но ты связаны между собой значит указателями а [музыка] если я хоть и смотри если я хочу хранить но ты так в листе чтобы не были рядышком у меня есть такая возможность или нет ну иди на что пришли здесь или приблизительно рядом то есть будет ли у меня такая возможность вообще не понятно дело мне придется что-то написать но

    00:12:07 - 00:13:24

  • будет ли у меня такая возможность честно говоря не знаю провокаций слышал что можно в контейнер и передать свои локатор где они будут ну то есть можно передать локатор который будет рядышком располагать твое зрение связанного списка думаю да думаю там можно так сделать до сочи тьма перекрутить view нет new там просто дополнительные шаблоны параметры можно передать через запятую там на катар то есть еще чтобы говоря свою структуру uri класса передаешь какие локаторы окей хорошо давай тогда еще разницу я

    00:12:49 - 00:13:53

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

    00:13:21 - 00:14:41

  • последовательности вот тоже линейная для для листа вставками еще раз повтори пожалуйста авка удаления константа опять любое место [музыка] обращение по индексу линейная отлично 2 запер за век то поговорим в векторе ставка в конец последней последнего элемента это константа вы только в просто константа или что то еще забыл сказать столько в конец да но смотри мы вставляем в конец конец вставляем вставляем вставляем и в определённый момент у нас поплатятся за око твое будет копирование какой-то из предыдущих значит

    00:14:00 - 00:15:32

  • побеседуем их сказал что будет поэлементно и копирована я думаю что все таки тут блочных копирования так хочется там там кот идет нет там только не так и не так просто конечно копия то есть это можно викторине есть мем себя который детализировано вот мем себя и можно использовать на его ты можешь использовать только для на travel типов даны тривиальных типов данных потому что иначе тебе иначе ты грубо говоря если у тебя объект какой-то то не можешь поблочно это копирует должен вызывать конструктор копирования нос вот

    00:14:47 - 00:15:54

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

    00:15:20 - 00:16:32

  • для элементов для для типа и передавать их через 300 домов то есть трансформировать ссылку в правую но не совсем просто конструктор перемещения оператор превращения стоит пометить как но except a точно и ясно объяснить почему это будет работать а почему допустим с конструктор перемещений оператора при общении не помечено как но акцепт это не будет работать и будет приоритетным то можете выбросить включение нет нет слышно про гарантии безопасности исключения сможете рассказать что-нибудь есть базовый гарантии исключение

    00:15:56 - 00:17:10

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

    00:16:35 - 00:17:55

  • можно проще охарактеризовать как транзакционных либо операции появляется полностью либо происходит откат до предыдущего состояния и соответственно ее строго гарантия на подразумевает в себе наличие базовой еще гарантии гранте отсутствие исключения гарантия того что значит исключение не будут сгенерированы ну то есть но except a что были три средств у нас помечена как но и все полетит исключение отлично отлично хорошо так давай тогда дальше вернемся к векторам вот мы вставка вконец до разобрались давай поговорим теперь про

    00:17:16 - 00:18:28

  • ставкам начала например это будет n есть общий метод пусть фронт векторе нет методы page фронт есть метод insert или импульса нет сорта этого можно строить хорошо давай про ударения тогда поговорим векторе элемент удаление объекта ну соответственно то есть в конец диск 1 в любом другом месте вы им да а представим что я хочу удалить и сначала векторы за константу и мне порядок элементов на три вектора него жена могу и как-то это сделать может быть это можно хотя нет я не знаю нет наверное нет ну можно свапнуть

    00:17:51 - 00:19:13

  • последним если мне порядок не важен окей и потом удалить последний сказал что за константа окей срочно да хорошо ладно давай тогда давай еще последнее про итератор немного поговорим есть сценарного или отёки такая функция как сорт то есть сортирует да кстати знаешь как алгоритм сортировки под капотом там нет чаще всего крик сорт ночью в ручках для досок структур данных разных задач и счет реализации вот смотри я могу передать сорту два ядра таро то есть на вектор b и вектор b и вектор н да и он

    00:18:38 - 00:19:45

  • отсортирует смогу ли я точно также сделать это с листом и думаю нет потому что у него нет random access трата рада отлично отлично хорошо так ладно давай тогда вектор есть пока оставим давая еще поговорим о что будет про множество 0 3 c the north но она в 3цет eset асимптотика то есть мы уже разобрались это под капотом допросим . поговорим вшить и это будет графическая сложность для вставки удаление поиска в авторитете это будет соответственно у 1 ну то есть константа для вставки для поиска нечетных константа

    00:19:12 - 00:20:32

  • амортизированной тоже вижу потому что принципу . потому что нужно считать хотя из операции решишь . конвекторы нас амортизируя константа в конец так и тут из-за того что иногда может произойти решишь ну то есть при индексе i россии таблицы переводить они памяти так хорошо давай тогда сам смотри посмотрим такой случай и представим что мы пишем приложение для брокерской какой-то дай ли для крипто бирже ну то есть хотим работать с денежками до этого я представляете такую структурка представим что у меня есть an ordered

    00:19:52 - 00:21:00

  • map ну то есть хэш-таблицы да практически ключом у меня будет денежка то есть это грубо говоря еквивалент денежной акции ну то есть например 100 рублей 10 копеек 50 рублей 30 копеек и в качестве значения мне будет вектор и строк ну то есть грубо говоря чтобы лицевой структуру дано председатель есть цена и этой цене соответствие допустим вектор строк допустим клинков и газпром акции да допустим 100 рублей с копейками стоит тиньков и газпрома вот я хочу сказать заключая хранить цену и хочу помнить и рубли и копейки какую какой

    00:20:29 - 00:21:38

  • тип не стоит использовать в кости ключа зависит от требуемой точности есть замужних флот или или дому давай поговорим про числа с плавающей точкой хорошо ли будет хранить их качестве ключами думаю не очень потому что для них для них мантиссы и порядок хранятся отдельно про пара потери точности слышно с вещественными числами да да то есть нельзя складывать два и честно числом надежде получить точную то есть 0 до 0 01 на честь даже если получить ультре да а давай посмотрим вот смотри складывать мы внутри хэш-таблицы ничего не

    00:21:03 - 00:22:16

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

    00:21:42 - 00:22:47

  • допустим ты пишешь функцию язык вала который принимает слот и флот и тебе нужно сравнить равными float или нет как бы ты это сделал как бы ты реализовал эту функцию там есть там есть такой секрет что нужно общем некоторым диапазоне его сравнивать что где возу ты вызываешь функцию ips внутри функции abs того читаешь одно из другого из и сравнимся меньше с опционом то есть определенной погрешности есть это меньше этой определенной погрешности начитает всеславный соответственно хранить слот внутри ключа она говорит мэр хорошая

    00:22:16 - 00:23:26

  • идея ну не очень требуется дополнительно операцию до на то есть за потери сложностей это как то не очень а давай подумаем что что тогда можно придумать на замену слово может быть можно хранить какой-то сложный тип который состоит из двух end of вот хороший 10 структур ко мне будет грубо говоря джимбори рынке рублей копейки рублей копейки то есть давай рассмотрим пока это случай структур карруби копейки если я хочу хранить структур q в качестве ключа вану говорит мэр какому какой то есть что я должен

    00:22:50 - 00:23:48

  • сделать чтобы я смог running структуру кавказской чем она говорит мэр перекрестить оператор сравнения меч наверное нет меньше здесь не нужно в 1 доброго до равно равно а еще что и не равно возможно нет не равно не нужно ни равно можно вывести из равно окей шаг 8 что еще нужно перегрузить или что еще нужно воткнутой скушай еще что-то добавить потому что это низ компилируется и сколько будет равно равно вот как работает хэш таблица 2 и поэтапно рассмотрим алгоритм что происходит нам приходит ключ что дальше

    00:23:22 - 00:24:27

  • с ним производится с этим ключом его считаются хорошо давай здесь остановимся на некоторую хэш-функцию для а то есть либо ты должен и дополнительным параметром ван алгоритмы передать и структурка хит-шоу который будет functor называться для того чтобы считать хэш либо ты можешь явно специализировать std хадж для своего типа данных то есть hash должен считаться это парохода адвайс твой тогда поговорим мапо если хочу внутри мапри хранить в кальции ключа эту структуру что мне нужно соответственно ну то есть тоже оператор

    00:24:02 - 00:25:10

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

    00:24:40 - 00:25:58

  • может что имея сюда подвид операциями но может разбить in то есть 4 4 байта мда выделить два байта для хранения рублей и два байта для хранения да отлично хорошая идея это байт вариант подходит а математический вариант сможем придумать тоже горит какой-нибудь если может быть световыми масками ну очень ранит у меня допустим перед тем как сохранить значение я это флот умножено что и положил ranger туда а когда я буду доставать я просто это значение разделен на 100 и то есть у меня будет хранятся int и

    00:25:19 - 00:26:30

  • перед ставкой буду умножать на что после извлечения буду делить на что-то хорошо тоже пришлось да тоже как вариант окей давай тогда еще поговорим несколько немного точнее а структуры данных в этой структуры данных priority киеву что там через три кордона это очередь которое хранит сортированный отсортированный набор значений вот да под капотом подкапотного сим только только интересует значит там добавление соответственно в очередь там один но один тоже давай давай сначала победы достаточно поговорим какая структура данных под

    00:25:56 - 00:27:11

  • капотом исходя из этого уже будем разбираться под капотом какая структура данных в презике я думаю что это лист куча слышал бинарная куча нет я суть я слышал но никогда не видел окей ладно хорошо тогда пропустим этот вопрос давай тогда поговорим про степку какой контейнер там под капотом можно в любом построить но да но какой по дефолту фонотеки не скажешь какой я не знаю может быть лист вот там против по дефолту там написано dk то есть там принципе ты точно так же при помощи шаблона аргумента можешь передать другой

    00:26:38 - 00:27:48

  • контейнер если ты хочешь построить стыка регион на другом колени на полив опытом dk стоит и выдавая вопрос вытекающие что такое dk тогда дак это двусторонний очередь очередь зубья концами значит соответственно ставка удаления в начало или конец 1го стальными стал и очень хорошо давай тогда с контейнерами закончим не думаю достаточно как я снегопад точкой был опыт нет видел да но значит схватиться то есть библиотеки through it мне довольно маус видеть в основном я поддерживал в старые приложения давай

    00:27:16 - 00:28:40

  • давайте там поговорить да давай вот этот код посмотрим попробуем поговорить что не происходит значит мы сохраняем константу says в цикле бежим по улице создание и печатаем да и техники трейдов функций print функций мы стаем 23 до для одной и той же функции и и да а то чем среды если это возможно да ну здесь будет косяк потому что они не синхронизированы да почему они не со ранжированы как под капотом что под капотом seal то там под капотом tell the standard поток вывода вот куда он пишет куда он пишет

    00:27:58 - 00:29:31

  • этот салат куда есть тут да и кто такое вести расчет что такое стадо вот тогда побери на эту full только концу нас консоль пишет дано вот это да вот это что такое поток вывода стыда вот это некоторый pipe когда открывается процесс с ним с файлом дескриптором сразу то есть когда ты запускается процесс всегда ему существует из ада и настя daughtry cd-r это файл агент виктор и то есть файлы дескрипторы соответственно и вовсе а вот сразу пишет файлов боготворила дескриптор или нет ну возможно и искать путь до чему равно

    00:28:49 - 00:30:06

  • 3 га буфер есть утилизирован да и в общем они все равно будут мешаться то есть раскалывались death ray семена для записи в этот буфер дабы люди the race то есть мешанина будет это различные хорошо давай тогда поговорим с тобой на тему а затем вызвать джо и но потока или detech что будет если я не вызовут желание ринге течь если вызвать значит не вызвать джоинт а если основной треть закончится то есть из которого были вызваны и дочерние то они тоже отвалятся но термина это вызывается только и не закончится когда

    00:29:33 - 00:30:47

  • деструктор вызовется у потока то у него вызывается термина it как почти а как я могу копировать потоки и что это фред я смогу скопировать я не знаю если честно есть нет к 1 или нет да ну вот join и был затем я пишу условия join a было но если его возможно прятать когда вы будет невозможно прятать если основной тренд уже завершился соответственно например я замучил его то есть от 31 заманил в какой-то другой объект ip отряд одним там скрывается системные ресурсы то есть под я просто кладу потому что поток нельзя копировать ее

    00:30:14 - 00:31:31

  • можно загубить и когда может я забираюсь него системные ресурсы и потом но то есть нельзя будет вызвать join на замулин объекте окей хорошо давай тогда поговорим как можно это синхронизировать можно синхронизировать это делаю так сам давай щас я напишу мьютекс и посмотрим сейчас 2 так напишем яндекс сейчас все будет хорошо работать или нет ну во-первых пью так должен быть снаружи он должен быть общим для всех отлично отлично хорошо да она вопросы вот какие сегменты процесса шарится между потоками

    00:30:58 - 00:32:10

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

    00:31:43 - 00:33:14

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

    00:32:35 - 00:33:49

  • вот так наверное это будет какой умник exception наверное будет захочется каждое это б знаком что такое спинном блок да я знаю но как это тоже может сказать примитив синхронизация значит он основан на идее того что на текст и переключать и надо для задач которые стартуют то есть для которых время ожидания пренебрежительно мало можно просто крутить постоянно в активном ожидании освобождения экранизируют там какого то элемента да один лак от блока до состояния взаимная блокировки когда два там или более бьют иксов

    00:33:11 - 00:34:36

  • захватывает ресурсы необходимы и друг другу да давай тогда ты днем к практике и попробуем с тобой написать вектор нового смотреть мы будем писать не все операции то есть мы начнем просто поэтапно реализовать определенный ряд операций буду говорить пока просто я хотел бы чтобы ты написал интерфейс этого вектора и написал только один метод пучок все окей и да я поэтапно мы будем просто смотреть нужно кого-то playpen один да только класс внутри внутри треугольник скобочек темплейт он вне треугольных

    00:33:58 - 00:35:20

  • клубочек находится нет здесь здесь писать и нужно это и то есть ты интерьерный специализирусь нет для виктора у нас допустим этот самый конструктор по умолчанию да вот домой сейчас будем пытаться с тобой реализовывать до точную копию вектора не совсем точное да да просто вот векторе желез конструкты по умолчанию или нет вектре есть да да и вот нам тоже хочется иметь тоже конструктор по умолчанию до [музыка] нужна пушка давай начнем с пульта ok перегрузку не будем делать для лили дайверы просто по значению будем ты

    00:34:52 - 00:36:05

  • принимать и поэтому я говорю почти почти идеальный аналог почти то есть некоторое это будем опускать не просто будет интересно немного другое хотя 4 нам нужно не внутри создать некоторые хранилища это видимо будет что это будет кстати наверное это должен быть некий массив динамический потому что сделать вот так нам нужно текущие capacity хранится нужно хранить текущий размер [музыка] вроде бы вроде бы все туда все только-только , чем в конце и вот определение окраса не хватает до передавай мне то тогда просьба писать

    00:36:24 - 00:38:01

  • должны проверить значит должны ли мы проверить лакированный память уже или нет давай по дну смотри я могу сделать же письмо и сперва пустой вектор то есть он может пустим мне нужно учитывать все случаи то есть мы когда пишем с тогда вектора и просто взялись конструирование он же память никакой не будет аллоцировать точно так же как у тебя сделано то есть вот здесь мы молодцы ремни какой память до когда мы пришли я соответственно тебе тоже это нужно учесть ok наверно бы создать какую-то переменную

    00:38:12 - 00:39:17

  • для хранения дефо в размера его квадратный скобочек только не хватать скорее всего ты это хотел бы написать ну и там указать размер то есть такой размером от мы должны наверное где-то здесь здесь все будет ли хорошо что мы для каждого объекта будем хранить еще дополнительно четыре байта эрде очень можно хоть адрес можно константа да какую то делать ну и вот макрос это же лучше не использовать может на константу сделать внутри самой функции написать любой recon стек спор окей да чтобы не засорять глобальную область видимости

    00:38:56 - 00:40:08

  • имен только после конца экспорт типа еще не хватает тип должно быть окей давай вот здесь я прерву посмотрим такой пример сейчас секунду предаваясь вот это лишнего беру чтобы было лучше видно нам представим что мне сколько эта структурка дата то есть мы будем писать такой вектор который потенциально можно будет использовать с различными типами данных езда то и нам неизвестен какой код там да и грубо говоря я беру этот вектор пришел твой м вектор с датой с даты дата и потом в эту дату я делаю пусть back

    00:40:10 - 00:41:37

  • пусть big data вот так представь такую ситуацию что конструктор в dota очень тяжелый но выбор и ряд там какая-то локации идет на гигабайт и вот здесь нам действительно ее нужно сделать согласен но зачем мы будем делать ей девять раз для других то есть new помимо того что выделяет память он еще зовет конструктор защиты что можно пользоваться какими то другими стилист выделение памяти но это как бы первый момент второй момент представим что структур key data структур кида ты примеру у него есть конструкторы для

    00:41:08 - 00:42:22

  • интеджер а вы а дефо и конструкторы у нее удаленно и вот вектор и стандартной библиотеки те позволит хранить данные то есть придадим сюда 10 у которых нет дефолтного конструктора в данной реализации у тебя просто кот низ компилируется потому что здесь у тебя будет вызываться дефолты construct a perfect раз вот сможем как-то пофиг той смотри мы сразу бы я просто да чет именно вектор выбрал можно много моментов смотреть и сразу пытаться как-то их постепенно решать отдавая миксе сосиску не будем использовать полюсами сможем еще не

    00:41:49 - 00:43:06

  • делать в любом случае будет вызывать конструктор в ад не в любом есть и примитивные типы данных у которых нет конструктора согласен а вот какие то типа данных и чьи которые встроены да и мы можем соответственно выделить память не твоих типов данных такое же корицы памяти только встроенных типов данных например я понял например например на unit 8 т то есть однобайтовых ok если нужно посчитать сколько будет играю то есть весит тип ты и я ведь только да да нет смотри вот здесь ты должен именно указать тип как какой-то приз уделять

    00:42:34 - 00:44:06

  • вместо ты должен стоять тип алкей а вот здесь да ты должен защитать int 8 и смотри int 8t это будет наш массив тип нашего массива и [музыка] и совсем понимаем в одном смотрителями виду нет смотрели я имею ввиду сделать вот так например будет винт 8 т мы сейчас uint8 т то есть у меня здесь будет контейнер вот так руки и потом а здесь я уже буду считать сколько мне нужно чтобы приводить какие нибудь да да [музыка] так секунду я на количество на количество на размер значит ну давай у нас есть менса из это корица

    00:43:30 - 00:45:00

  • элементов правильно 10 элементов соответствует 10 элементов нам на что нужно умножать на размер соответственно типом типа который да да да на только только не только не неправильно написал сейчас здесь нет нет смотри у нас тип т соответственно нам нужно набрать размеры на типа ты они and 8 т теперь умножать то естественном пришли интеджер и мы должны 4 умножить на 10 получит 40 байт нам нужно если нам пришел грубо говоря дабл который я представил восемь байт нам нужно восемь байт вот понятно хорошо

    00:44:38 - 00:46:05

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

    00:45:32 - 00:47:24

  • сейчас дата но при солдатах да ты-то мне нужно четыре байта тебе нужно в четыре байта поместить это значение знаком с такой штукой как placement неё это перемещение уже созданного объекта но не совсем существующего какое-то определенное место ну да как бы да практически на мы сможем сейчас placement здесь использовать нам нужно соответственно сначала нужно здесь его создать твои он и запутался в в том что что и как я делаю ну смотри давай давай поэтапно пойдем у меня есть буфер так то есть выделенный пышным и вот здесь правда

    00:46:58 - 00:48:16

  • фиксировали буфера то того размера минимальной размера которые нам нужен теперь соответственно мне нужно брать и вставлять этот элемент в этот буфер и placement то есть new это просто размещающие него то есть обычно небес размещения он просто берёт и лоцируется be happy но сейчас тебя не нужно лоцировать теперь потому что память у тебя уже по рации репарации про извиняясь prolazi равана тебе просто нужно взять и указать указатель в то место где у тебя да все правильно только не совсем так у тебя будет вот примерно вот такой конт

    00:47:54 - 00:49:05

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

    00:48:38 - 00:49:49

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

    00:49:17 - 00:50:43

  • по зовется течет ну это ладно давай тогда это вы да вернемся к этому хорошо давай тогда может продолжать пока сайтом займитесь [музыка] после после добавления соответственно хотя мы здесь мы не проверяем наш нить и нет людей ну нам во первых сайта инкремент тебя когда мы вставляем элемент согласен а и во-вторых мы же если несколько раз буду пусть бог делать то я получается в данном коде буду всегда вставлять в первый элемент действе нужно использовать арифметика указателей то есть здесь и группа горя должен

    00:50:16 - 00:51:39

  • написать плюс плюс сайт и еще что нужен да да да все верно вот и давай смотри это мы написали cape узбек но представим что мы вставляем 11 элемент что произойдет должен быть ресайз было попробуем начать и описать должна быть в начале видимо здесь перед перед ставкой видимо должна вызвать отдельный метод из окей давай здесь только на право писать потом есть и чтобы нести разную функцию начал он ведь мы использовать не будем мы будем мы великим значится tasty movie быть или многую память сначала скажем увеличить вдвое

    00:51:53 - 00:53:37

  • то есть мы должны как бы лика почти вещи посвятить на самом деле да но еще не дошли до этого да можно сейчас сделать внутри у нас получается такая ситуация что вот вот эти два слоя можно объединить в одном видишь как это можно сделать еще дописать но смотри нет смотри когда наш объект пустой у него capacity says равны 0 и вам согласен соответственно вот это условие можно убрать полностью давай верна только вот это смотри видно вот это и теперь можно сделать в принципе вот так это capacity равен std max

    00:53:46 - 00:55:06

  • min says попасть умноженное на 2 согласен и сюда соответственно передавать к пасте то есть чтобы не дублировать код вот давай тогда дальше писать и значит здесь вот если мы должны внутри есть и возмещение туда же ну смотри размещение у нас должно работать лифте момента когда нам релокации не нужно мыть или память или riot сервилии и посмотри многих для память но нам еще нужно скопировать элементы потом удалить старую память и потом присвоится в новый год ничего нам не хватает но здесь получается что здесь и

    00:54:39 - 00:56:05

  • здесь нужно положить вторую по стандартам указателю или как ну давай будем просто ты помнишь говорит что менты аллокации элементы копируются да вот у тебя еще не от копирования daypack писать самое простое копирование поэлементно я не будем считать не будем использовать викторе zero ванную версию для примитивных типов и так далее просто будем элемента копировать списки через цикл ну можно через только можно с тогда копии использовать я не знаю к сожалению там места да копы принимает три оператора первые откуда 2 докуда и 3

    00:55:42 - 00:56:54

  • куда до ну то есть и тротро указатели здесь на принципе может только так работать не откуда откуда у тебя откуда это конт ну то есть старый буфера и докуда дохода да да нет да куда второй параметр докуда нет нет док докуда есть но получается дисконт плюс says и теперь куда и теперь нужно изменить точнее очистить старую делиться толпой дрова того клинок по крайней мере лук - лайк тоже тоже вологда до остановит просто вопрос это ткать в моменте нужны будут соответственно не умеем почистили нет почему не умеем старый и мин до

    00:56:26 - 00:58:12

  • скопировать делить только с кабачками пишет две скобочки только вот эти лета вот и смотри тут да вы у нас уже время вард вот смотри тут просто если вы тоже такая проблема есть у нас здесь моменте копирования полететь исключение вот эта память потечет там память бы допустим почистил от вы в деструкторы я поспешил всем ответам эти вопросы а вот здесь у нас потечет видишь если у меня представим что у меня в копировании вылетел из куч или вот эта память просто взяла и утекла каким-то другим небесам соответствует и

    00:57:58 - 00:59:03

  • делать но можно прочесть здесь добавить просто что еще раз строке строки что за то есть ракет ловим чистим ее обратно пробрасываем это исключение хорошо смотри у нас время заканчивается есть какие то вопросы по результатам результатом нет вопрос

    00:58:47 - 00:59:26

Менторы

Специалисты своей области, которые смогут помочь вам

  • Нигма Нурия
    Нигма Нурия

    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

© 2024 HireGuru. Сделано в Санкт-Петербурге с hireguru.ru