Подготовка к собеседованию на 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 каналы и чаты
Транскрипция видео:
всем привет мы возвращаемся своей рубрика публичный собес и сейчас у нас начали уже писать после первого видео несколько людей 700 хотят прийти собесы и в общем-то собственно вы тоже не опускаетесь q возможность пока не так много людей пишут 20 вы можете также принять участие в пасть видео и там попробовать свои силы может ли вы там пройти соответственно миду на junior и так далее вот сейчас у нас в гостях на у человек мы сегодня будем с ним себе с зовут аллен взрос на всем привет кто смотрит в общем мы сегодня будем средств на
00:00:00 - 00:01:26
позицию металл скорее всего это на заморин gps раза бочка звучит до поисков и приложения у вали на есть опыт можешь рассказать про свой опыт вообще как ты ушёл любимый где работаешь мой опыт начался через этом году тогда я ещё не решился на каком языке ну первый языка камня будет скажем так потом скажем так у меня появилась такая возможность работать можно сказать неким интерном вот заморим forms приложений в проекте да вот вот я там поработал это была неофициальная работа просто знакомый человек дела проекты и никакие задачки
00:00:42 - 00:02:17
давал я решил на за моей forums вот потом я смог взять заказана впф проект вот кстати я потом после стрима гусар как весна этот проект на гитхабе вот он реальный то есть он на самом деле очень плохо написана из вспоминаю то есть я просто шел посмотрел там очень все плохо по всему но он работал и все было хорошо потом я пришел на бирже варну онлайн бирже таких как но в основных это порки февр файл и вот до сих пор работаю и перу эти заказы делаю и в основном дура заказана замори forums понятно сейчас ты ни за кем не закреплён
00:01:30 - 00:03:25
просто бежишь заказы который есть понятно понятно а ты помог участвовать какие-то со бесах не знаю вилью рынок слишком пусть для этого ну то есть нет места на самом деле опробовал последний раз я пробовал но у меня я сейчас понимаю сейчас должен уже подтягивать потому что так как я не особо углублял углублялся скажем так сишарпе у меня ученик блок глубокие знания в сишарпе и просто вдохните и из-за этого у меня противоположен проблем это фреймворка все хорошо там заманил forums знание о с языками с
00:02:30 - 00:04:07
языком сишарпе тот на этом да именно эти знания мне вот этим проблемы и все понял ну сегодня мы пробуем увидеть может быть знает четко где у тебя какие-то пробелы ты можешь более точная поработай ними и собственных устранить но я вот не услышал так в итоге ты получается не пробовался без из того чтобы тело понимаешь что ты особо не шаришь так не я пробовал и после со бесов понимал что у меня проблемы бывают у ok не будем терять время перейдем значит сразу к сабису смотри дается вот такая конструкция кода ну где-то на внутри
00:03:19 - 00:04:55
написано в общем то есть некий сам класс он существует и он присутствует в таком блоке using может ли ты описать что это все за штука что это означает стоп а я кот в этом в той козью который я кидал ну да я не вижу код обновил сейчас вот это видно вот собственно спас так using сам класс с весом класс но using можем использовать скажем так объект этого класса сам класс и по окончании визинга ну скажем так сам класс будет память член скажу так [музыка] закидывать для явно примера чтобы более подробно понять что в этом выражении
00:04:09 - 00:06:08
вами быть очищено означает скажем что у нас здесь вот какая штука стоит чуть-чуть с с stream ну а на стрим томским райтер вот и тут собственно тампере написано и собственно для конструктора в общем то здесь у нас удается великий объект для того чтобы записать что-то файл и что будет здесь происходить по окончанию деньга ну просто будет удаляться из памяти субъект-объект хорошо api cf у нас еслиб не бывает его конструкции using the как бы ты делал это вручную [музыка] но создал бы экземпляр этого класса и
00:05:17 - 00:07:05
ну какой то мета применить применял бы увозим ретро то есть советом видал ли чуть ноги да ты сделал значит там спорит о ту and что такое не помню точно вот тебе такой штекер хей ты это сделал когда у нас допустим эту zynga нету и что нам ну ну можно за лечение которое защищает но я просто не понимаю зачем нет ну окей там будет какой-то записано неважно мне главное понять во что этот using вообще преобразуется что он делает то что сказал а ну насколько я знаю он с using страйфа не файлы преобразуется так
00:06:26 - 00:08:29
и [музыка] вот [музыка] именно [музыка] а вот именно что там происходит я не знаю имя точно знаю что едем сейчас refine но как именно работает муки кейс такой представив что у тебя есть две программы которые запущены и там оба из них в одно время ну ладно через периодом через одну секунду 1 делать запись и все еще делают там стрельба и тогда какой-то запись его производит потом другой поток включается и хочет сделать то же самое с тем же файлом что произойдет если все еще сомневается 1 работает
00:07:35 - 00:09:09
так то есть вдвоем одновременно хотят сделать какие то действия с одним файлом до 2 наши повезет ну хорошо они везут очнись уже ошибка давай хорошо чуть другой кейс у нас значит первый завершил работу у нас вот это ничего нет вот он сделал какую-то работу там с в там запись кстати тут тут нет нельзя было вызвать этаж если брать в общем то он записывающими the bright какую-то информацию там и он свою работу допустим завершил и далее мы делаем еще один стрим войти два с тем же файлом и делом пример такую же операцию что будет
00:08:33 - 00:10:14
в этом случае вот если вот так вот подряд такие два кода идут с одним и тем же файлом ничего не будет запишет как раз таки дело в том что помимо просто как говорится очистки он делает ещё дополнительную штуку позволяющую освободит этот файл освоит и не значит его просто чистить он держит этот файл для записи и его не отпуская потуши тут мы не указали что мы завершили с ним работу первое что нужно сделать это упадочном завершились ними работу чтобы это сделать мы вызываем метод клаус называемые но сотни ну не совсем в этом
00:09:28 - 00:11:04
дело в том что если мы эта штука не вызовем то есть голос не напишем то будет править то ошибка потому что этот все еще не говорит о том что он завершил работу а этот пытается с ним тоже работаю проделать он слушает начать работать и здесь он скажет чувак типа я не могу тебе позволить потому что он занят другим процессом вот вот собственно для этого здесь нужен клаус да и то только просто стрим брайта представь есть еще допустим допустим вы писаки это когда мы связываемся со строгими там там портами 1 этаже сервера и 2 пытается
00:10:27 - 00:11:53
ровно такой же канал типа создать ингрид слушая так это я есть ну и разные вот такие вот случаи когда нам по идее нужно закрывает соединение нам нужно убирать связь процесса каким-то нам нужно постоянно вызывать определенный метод здесь это клаус в других местах это вызов там не знаю экзит и так далее вот в нашла такие штуки у каждого свое название метода и чтобы там не запоминать у кого какой вид метод чтобы об этом особо не задумываться есть такая использую как сервисах вот этот using но помимо этого using a еще
00:11:10 - 00:12:37
в чем его особенность он вот как ты и говорил преобразует действительно вот этот рай файна ли где в трою он пускает он здесь сначала создает экземпляр выше затем финале работает вся логика который внутри using a база данных здесь будет писаться а далее в самом финале дописывается вызов методе сполз вот этого объекта который мы здесь собственно и обращаюсь и везде это де сполз есть ну эти объекты как у которых реализован интерфейс ади способов вызвать смерти спас и уже там заданная лойко по освобождению тех самых ресурсов вот
00:11:53 - 00:13:29
собственно никого такого удобства было придумано и она работает таким макаром так и сразу спрошу а вообще ты что-то слышал про интерфейс спайди способом слушал но не применяла сразу по 2 помимо sharp точно каком-то языке писал ну за мол если только но не понял понял понял значит ну пойми ты свалилась тоже особо ничего не слышал ai файл с это же в классе называется при если при по моему удаление из памяти этого класса сборки мусора когда быть избит до притворно тут ok хорошо да попробуем как-то этого губится
00:12:41 - 00:14:42
вот в этом сборки мусора когда вообще эта сборка мусора происходит давай так когда [музыка] россии компиляции ну сборка мусора не происходит когда ты собираешь проект ну когда bот и срам тайме короче именно в какой момент что ли не знаю когда он поделюсь что вот сейчас будет сборка мусора часы гони не могу сказать наверное так весна честно [музыка] а поколения там 012 все сша какие принципе такой достаточно углублено вопрос их обычно задает нормальных компаний при серьезных на миду позициях вот
00:13:52 - 00:15:51
там компаниях пониже так сказать там в принципе только сеньоров таким образом сдаются потому что обычно скажем так эта информация нужна когда ты допустим пробуешь обратиться к объекту а потом он говорит по все у меня уже нет вот или же чтоб понять как эта штука оптимизировать сама сборка мусора например когда ты понимаешь что вот здесь все-таки лучше я возьму ответственность за себя и сам уже управляешь этим кароч коллектором а так вообще шарфах его постарались сделать максимально оптимальным ну да ладно это такая я в принципе сам
00:15:13 - 00:16:39
редко очень видел что кто-то юзал эту штуку так давай пробуем ещё какие такие базы вещь спросить которые практически везде спрашивают вот есть у нас два класса string и stringbuilder в чем отличие между ними а как стрелка из young пилота [музыка] то луч меж inner и понимаешь что это наверно база вопрос меток если я это не использовал то я этого то есть вас ланда использовал string пока ты задумался о том как вообще допустим кейс такой тебя значит там в с с1 равно там а.б. потом s2 равно а и такое говоришь
00:15:58 - 00:17:52
white line у него же с1 + s 2 что здесь происходит мы шапка с точки зрения к в углубление программу ну там типа выделяется память так далее ну мне кажется вот тут вот использовать team builder честно говоря но с 1 то есть строка b создать наверное секунд еще зашли зачем + s 2 но я предполагаю что это будет не правильно ответ но наверное стоит новый объект с стингом а b&b то есть да и третья беда да так и есть так собственно а вот если я вот так вот сделаю вот скажем вот этих строчек нет вот если вот
00:17:23 - 00:19:23
так или сейчас чтобы чуть-чуть упростить здесь происходит и наверное оба превращается и в площадь новый объект и с 1 будет равняться с1 то есть то же самое по сути но с добавлено добавлением с этим на самом деле если это мы написали во время написания кода то есть не в рандоме у нас такие вещи передались а при написании кода то эта штука в итоге возьмет компиляторы сам преобразуют вот это в другие вот так он сделает но иногда компилятор он такой умный он понимает что слушай вот здесь зачем мне вон той
00:18:41 - 00:20:15
мет обрабатывать не могу сейчас вот так что здесь в runtime это он уже создает отдельный объект и вот здесь да здесь будет один объект вот он не понимает что зачем мне постоянно когда я вот эту строчку вижу его там два объекта создавая делать один потом сделать 2 который будет делать из сложения вот этих двух вот он в этом плане немножко оптимизирован vod-ok [музыка] в чем штука stringbuilder есть такая фигня станем сказал вообще не работал до окей а фишка в том что он в основе своей лежит не просто такие вот строки которые
00:19:31 - 00:21:10
стринги заданы у него массив символов то есть массив чаров и имея такую штуку он может менять символы в определенном месяце допустим если я сделаю допустим у меня тут a b c я такой ентам риплейс там а бы руки то здесь этот метод вернет новую строку а исходно он не изменит потому что строгие в шляпах являются имут обильными соответственно в чем важность вот этого вопроса который я хочу отметить то что если люди будут постоянно использовать там риплейс и в где захотят если постоянно будут и за чисто стрим кто таким образом будет
00:20:28 - 00:22:03
получать неоптимизированные приложения где у нас постоянно идет утечка памяти из вот вот таких вот вещей где постоянно мы идем риплейс и а если это еще в цик и спорта дай бог здоровья этому человеку как говорится потому что постоянно будет создаваться новенькая строка вот в этом и проблема что лучше стрим билл гарь и когда ты будешь использовать или place тот же метод replace the он тебе просто в массиве символов изменит конкретно твою силу она б например да и все все больше не будет производиться не будет
00:21:23 - 00:22:40
выделяться дополнительно память не будет там обращаться к этому стояку кучи чтобы да у меня память на него и так далее вот то есть в таких кейс когда ты хочешь изменить там набор кита symbol of the stream builder прошу любить и жаловать другое дело есть второй кейс когда тебе нужно добавлять символы там складывается такие тому подобное здесь уже стрим builder как бы будет постоянно иногда там если у тебя слишком много и ты не знаешь сколько будет производиться запросов складывание stringbuilder уже будет
00:22:01 - 00:23:31
очень часто запрашивает дополнительную память в куче чтобы хранить этот самый массив символов и он там допустим выделил сначала написать его в такой он не хватает он так блин это опять надо обращаться к памяти опять запрашивать в общем то есть много тонкостей штуках поэтому стрим компьютер очень желательно поподробнее изучить так теперь вопрос такой а зачем с шапок нужны интерфейсы когда но в других языках программирования там допустим плюс опять интерфейс нету и люди и сайт абстрактные классы и живут все спокойно
00:22:45 - 00:24:08
так ну во-первых sharp ах нету множестве наследования просто его нету и чтобы например [музыка] скажем так применять нож но там это не может множеств наследования это просто реализация многих классов интерфейсов чтобы это применять у нас есть интерфейс и вот например у нас есть класс который должен делать вот это вот это но на же нету множеством исследования можем создавать интерфейс и и наследуется от класса чтобы он эти тесте делал [музыка] так теперь поговорим о таких вещах как рефрен стапель
00:23:30 - 00:25:12
вылетай можете что такие выражение да и то в чем это жизнями ну отличие что я не хранятся вот так расширен состав хранится в медленной памяти о валютах в быстрой на самом деле в reference type храните то есть храниться быстро пометить особенно ссылка значение хранится в мире на память от меня значение то есть принц мэрилин память так какие а меня мы смотрим я вот никогда не что так называем типа медленно или быстро память а вот и на идиш нам сленге так сказать как его обычно называют их ой я сейчас я
00:24:23 - 00:26:07
путаю в штыки куча я и замедлить его spyrian'а существа так назвали в общем встык это быстрая куча это медленно вопрос вот смотри у нас есть рей лист есть просто лист который дженериков в чем вообще отличие между этими двумя и почему бы не использовать рэй потому что ну так как вот допустим листам ты только одного типа можешь быть объекты авария ты можешь иметь любой объект может а и цифры не цифры пихать вообще к без проблем вообще не задумывайся чем отличие между ними ну в том что в рай мы должны же задать
00:25:18 - 00:26:55
статическое количество объектов сколько и ну по-моему рей надо задать именно всячески количество объектов которая может хранить вот этот лист можно сколько угодно добавлять то есть не указать статичные количество на самом деле у них отличие практически нету единственное что это в реализации всех методов офиса и лист например тот же it at хочешь добавить элемент v-ray лист или в лист допустим если ты добавляешь в лист то у тебя ты можешь добавить только того типа которые тебе ну ты изначально создал
00:26:12 - 00:27:51
пусть у ментов да а если ты в раю хочу запихнуть ты туда что угодно пишу пихаешь не может там хоть число хоть буквы хоть цифр ну короче в общем но казалось бы всякие бери используют там массив из того что можно чего угодно пихать но есть некие проблемы как ты думаешь какие проблемы возникают при использовании там эры листа например ну [музыка] ну множество проблем то есть шар же это динамический язык то есть три статически то есть как мы можем понять например [музыка] взяли лист откуда-то можем понять там
00:27:08 - 00:28:44
что в нем находится то есть структура скажем так статической типизации я просто использую то есть ты не можешь поесть пример где вообще этот шелест может быть пригодился бы прикатился бы на самом деле тут нет ничего страшно потому что когда ты работаешь под мобилки то в принципе это и не столь приходится наверно с этим работать даже не могу себе представить например когда нужно обращаться к деликт созданные там плюсом коды например да это там другой язык все такое и ты хочешь из него методы вызвать
00:27:56 - 00:29:28
с помощью средства сишарп так вот когда ты его вызываешь то там используешь данный мектеп и ты не знаешь ну в общем один миг это как обжиг ты не знаешь что там за тип на самом деле какие у него меты и тому подобное в таком случае ты не знаю что там возвращает это метод и всякие вот вот такие вот штуки учитывая эти нюансы релиз тут может помочь собственно лист который generico ты не знаешь какой то не можешь сказать ему слушай да давай мне там я не закрутив но ты как не разберусь там нам нужно строки тип передавать но и
00:28:55 - 00:30:18
рэй лист можно и юзать как и обычный лист если же наоборот лист можно и зайка крыльев если в качестве generic передать объект это будет ровно копия вот но есть одна большая проблема собственно если не знаете тот нюанс то опять же если ты в коде будешь встречать релиз то там когда ты будешь писать вот какой-то монолит нам кучу написанное где-то возможно лишь действительно используется если ты не в курсе там этого нюанса отличия то может упасть производительность в чем нюанс как я сказал отличие в том что у одного отжиг
00:29:36 - 00:31:04
а у другого 0 там же никто какой-нибудь это указал и предыдущий вопрос был задан неспроста ну которые про вылета перев instyle дело в том что если ты будешь передавать в рей лист число а число является чем white валютой то есть ты в референта передаешь валютой ну ошибок не будет он сильно запишется но чтобы это опирать произошло ты себя там происходит кучу операции где он делает упаковку этого типа и превращает тип как будто превращает этот вылетает reference type вот и соответственно из этих операций
00:30:22 - 00:32:07
выделяется лишняя память личная производительность и в итоге как бы ты усложняешь работу свое же приложение створ использовать тот же лист вот соответственно из этого также вытекает что есть куча и других примеров где мы юзаем эту упаковку распаковку и способ они спрашивают и собственно там это вопрос довольно редко почему-то задают на самом деле какие-то очень важная тема потому что если мы эту штуку не знаем то капец как часто мы теряем это сам производительность вот кстати один из примера сейчас будет
00:31:15 - 00:32:46
так вот для пример код то значит и примера первом примере мы создаем вылетает дальше создаем режим стэп лоджик и него пихаем вот этот 0 далее в нем при своем 12 и тут вопрос что вообще будет здесь выводиться ну 5 есть в а так для нас каждая а почему как это вообще работает ну создали валютой на м5 создали объект а позже который сохранился уже этом скотча под номером 5 вот и нам поменяли на 12 но кучей же уже пять лежит то есть ссылка жоржа лежит на пятерки так то есть обжиг хранит информацию о новом
00:32:00 - 00:34:14
упакованном объекте в куче а нам он лежит также на стыке и это разные вещи имя так паки втором случае у нас есть reference type далее мы здесь делаем явно и преобразование через and далее в нам при своем 12 и что будет выведено tags объект у равна 5 . 511 да потому что здесь у нас опять же идет просто распаковка мы преобразуем его в int достаем оттуда значение вылью и плавном дали его меня и мы вводим а сам reference то есть у объекта мы его не меняли именно поэтому у нас так это на два разных объекты идет ссылочка то
00:33:16 - 00:35:00
там про знание и собственно распределились так ну а третье пример ты хотел показать и собственно различными разговоры листы листом ну практически тоже самое только в другом указываем generic цепи и операция того же добавление с учетом знаний которые выше были описаны в released у нас просто так пятерку не запишешь то есть у нас будет заводить сначала reference type туда запихивается этого производиться упаковкой только потом эта упаковка добавится и ссылочка отправиться в лист а сам листе все хранится на стыке никаких
00:34:17 - 00:35:42
преобразований упаковок делать не нужно здесь отправилась вот поэтому если пробовать сравнивай даже там час performance monitor то можно увидеть что лист будет отобрать вот и generic будет отрабатываться могу быстрее в работ немножко серию кода вот смотри есть вот некий код который сейчас вставил сейчас мы придем слышать вообще ники комментарии может быть ты видишь какие-то косяки что можешь сказать по коду мне пас которые открываются его не так то есть ну вроде бассано мам все в порядке куру кей
00:35:00 - 00:36:32
так нам так то есть тут шибко я должен сказать ну код будет работать тут нет еще такого но есть некий знаешь нюанс который на кадре view по шапке по надавали ну во-первых названия рапорте но название этих на паблик но написан маленькую то есть на им не с большой буквы н то есть там же bremi то отлично дописать но это же там play среди локэйшн то же самое так ну плюс к этому вот когда вот с этим делаем вот этот проверяем именно на нем то есть property проверять знаем какой это я не за это по-моему неправильно потому что я ни
00:36:13 - 00:38:22
разу не видел чтобы прям в заверяли такая ситуация что вот place да это некая таблица в базе данных и вот этот name поле она ну соответственно если мы видим вот эту и на то наверное такие же причисляю должны быть в отдельной таблице мы там из рода категория товары да например она связана другой из таблицы и значений должны ей соответствовать вот знаю что эта таблица 2 есть как бы ты может быть по другому что реализовалась что здесь вот неправильно конкретно в этом примере наши сорок шестой строке
00:38:26 - 00:39:52
урок 6 ну просто сделал бы найм и нам типом то есть здесь у меня в например property type так и он был бы нам чипом type и питерс эту вот какая штука вот и просто точно не знаю так особо за марине не работал просто такое приходилось ли тебе работать инте frotcom где ты делаешь код first вот на самом деле от ни разу не бывало новая немножко изучалась войдут нет примерно понимаю ну очень мало в общем я про вот такую штуку вот мне например нужно сделать чтобы точно совпали структуры как реализованная бды как у
00:39:11 - 00:41:15
меня написано в коде чтобы у меня связь какое значение может быть в поле name она строго зависимо от того что есть другой таблицы из понимаешь к чему намек то есть это [музыка] всегда таблицы таблицы применить какие виды связи есть таблицами но один ко многим они виды связи полей таблицы фито связи с типы например я хочу чтобы поле категории той пойди был строго язычником и с таблицей у другой [музыка] ну [музыка] только я по ней честно говоря я давно нет сама не пользовался этим меркам но по моему можно написать
00:40:23 - 00:42:21
его идиш никогда например найма иди и объект этого класса чтобы он понимал откуда надо лишь не против моим как работал но я честно говоря ну примерно до указывается как фори кен кей может помнишь есть нужен для этого использовать отдельно атрибут и чтобы эту связку собственно задать здесь соответственно вместо этого было реализовано что человек просто написал и нам сам эту логику себе задолбает вот должен быть так не как начать здесь же сделал проверку через skaters этого из-за этого ему пришлось еще создавать
00:41:33 - 00:42:56
две переменные окей с этим разобрались есть еще второй нюанс ну такой он достаточно тонкий и мало кто эту логику распиливают так сказать вот если обратимой на namespace например можно ли что-нибудь сказать сейчас ok но ну насколько я знаю это неправильно делать то есть я бы как сделал вот я бы создал бы отдельный отдельный по библиотек классов и там бой держал бы модели которая будет храниться именно в базе а как называются модели которые строго для базы я не показывается отпад раме вообще его включать в паттерн отдельно ну вот
00:42:16 - 00:43:57
многие пишут обычно такая архитектура где у нас есть чисто модели ездить и ушки и тому подобное но на entities не делят и из-за этого у нас получается прямая зависимость там какого-то сервиса от модельки которая привязана прям строго кбд и из-за этого у нас без отсутствует и прослойки иногда бывают резко что-то может упасть если там поле поменять либо вбд либо наоборот сама сервиса вот поэтому штука полезная так кстати наказан за марине тоже так делается создается деле модель которая будет принимать
00:43:17 - 00:44:33
модельку на час он формате потом уже при определяется для вьюшки чтобы использовать так пробуем сейчас уже чуть перейти к вопросам которые зачастую при всегда задают а за бочек которые идут работает над за марине ли вы пи и фи в общем типичный вопрос привязок данных и когда какой применяется ну еды по моему в поясе есть только one way твой по моему но на за марине счетам он эту соус такой то есть нужно всего вот я не принимаю применять на ну а новый биндинг он изначально дефолтный биндинг то есть если мы тоже
00:43:54 - 00:45:34
ничего не пропишешь ими пропишем там подошел то будет стоять в новой вот это будет означать что то есть как это объяснить [музыка] то есть ну на самом деле сама он высказывает не знаю как это объяснить все ну то есть от тарань односторонний binding да есть и двусторонняя это означает что property может применяться и скажем так но он даст двусторонний давай для примера вот где ты использовал двухсторонний бензин но вода односторонне там например почему было принято решение допустим его использовать именно
00:44:54 - 00:46:45
ну односторонний биндинг он же двухсторонний посторонние например ну или пища есть такая штука как в теннисе против рапорте вот и чтобы например ну условно говоря у нас есть какой-нибудь control копов как в котором есть и панда сип рапорте и этот теперь здесь property может и [музыка] скажем так меняться из в самой контроле меняться с фуке который лет который используется и в этом смысле мы конечно же должны использовать твой чтобы понимал ну чтобы мы смогли изменять из контрола из фишки через pending
00:46:00 - 00:47:40
так вот по поводу основу такого патрона объем что ты можешь принял сказать но это офигенный патрон который помогает делать масштабируемые проект скажем так на что он вообще делиться а модуль wi-fi мотор то есть моделька фишкой или модель а если подробнее что где находится на языке детей так сказать а ну моделька это ну модельки юшка это наш интерфейс приложение do you моделек эта штука которая просто соединяет интерфейс с модельками и логически тесто совершает вот может как-то так те почему не сделать
00:46:57 - 00:48:53
моду view не знаю например и вот эта вот прослойка не знаю для чего ну что соединять куртку и модельку но если сделаем view и modulo как будем соединяться до модель на постройку в модельку вперед тут же поля ну это же ну это же очень плохо то есть проект становится вообще очень масштабным громоздким тяжело сопровождаем да да тяжело но масштабируем просто довольно часто наблюдают такой интерфейс как на енотиха и подключение для чего это вообще нужно для того чтобы скажем так сказать вьюшки что у нас пропасть изменилось вот то
00:48:07 - 00:49:58
есть если например and binding стоит там например на им и мы имеем этот поменяли ходим другое значение вот она автоматом не применяется потому что юшка же не знает и да и через пример этот интерфейс вот и ну чтобы просто идешь к узнал что у нас поменялось свойствах а если этот интерес не реализовывать что будет ну просто не узнает задвижки не поменять значение pending все так посмотрим на существовал кода значит здесь у нас есть два вида такие че-почем один другой включен и хотелось бы узнать себя вообще
00:49:09 - 00:50:53
что здесь будет происходить 2 по порядку секунду [музыка] так [музыка] ой тра кетч [музыка] подстелем троне ассистом стране у нас exception поняла ну зайдет в кэш с 1 ну то есть внутри которой стол антон он делает на по-моему просто о нет [музыка] по-моему просто вот troll этого 3 2 3 ну хорошо тут подскажу она и строчки это равносильно вот такой вот записи темы сюда передаем сама исключением или [музыка] антон на эту тему это редко запись но в общем дальше очень так хочу дальше так [музыка] но мы же
00:50:02 - 00:52:32
так заходит во второй ключ который этот и в конце лию вводится x то есть моделька просто exception а если говорить про stack trace то с какой строке он будет его выводить вот у нас есть вариант 17 строка 21 строка или 26 стоп стоп раки будет ввк собрать ленте не нет водиться stack trace то есть откуда возникла ошибка но возникла 21 на самом деле нет да потому что он то это тот же самое касается на тот же самый эксепшен ну просто ссылка на него где истории вообще не изменилось это тот же самый эксепшен
00:51:46 - 00:53:38
у него stack trace изначально был здесь и вся информация об этом исключения отсюда вот его и днем информацию собственный будет выводить это сфера случае что во втором с во втором я думаю ром ой . 7 videos ошибка и [музыка] кстати кстати кстати тут и немножко наврал по поводу вот этой строке если мы будем делать то же самое какие ниже то есть у фрау тот же exception to исключение она тоже самое будет осинская штамм index out ну там допустим в первом случае так exception но стык trace'ом сожалению поменяется и тут информация
00:52:48 - 00:54:28
пойдет стык трейси начинающий с 21 с таким как ты говорил изначально действительно он его как будто новенький создает хоть даже сущего того чтобы поточить создаем передаем вот это собственно то что вот ниже треки большое сделан тут stack trace к сожалению поменяется потому что здесь будет создаваться новое исключение вот но информация о том что эта сеть индексов trout exception это как бы будет что хотелось бы подчеркнуть здесь важный момент том что многие типа используя вот этот фрол внутри печи в чем и вообще цель знаешь
00:53:55 - 00:55:29
почему кое-чему этого используем чтобы показать где ошибка у нас ну чтобы передать его выше ну например там не знаю если это обращение идет к серверу да вот этот представим что все-таки внутри где-то заложено где-то очень внутри а мы хотим пользователю сказать о том что у нас прошла некой ошибка на сервере поэтому пожалуйста подождите и вместо того чтобы продолжить работу мы выше кидаем это это исключение чтобы она там не пошло дальше обрабатываться вот и соответствие передам эту необходимую информацию
00:54:41 - 00:55:51
пользователю чтобы не потерять всю историю в логах где происхож ип как ее решить очень вот это stack trace не терять есть два решения либо именно stack trace менять на вот-вот этом шаге да вот здесь типа чтобы он передал тот же эффект рейс либо вязать вот этот синтаксис который был указан 19 строке вот как то так теперь задача на оптимизацию писатель тебя есть некий такой кот не говорит что он достаточно долго работает чтобы ты здесь изменил [музыка] а все это в первый класс матриц так tags ну во-первых
00:55:18 - 00:56:57
ордер buy аккаунт потом [музыка] так ордер buy x шепарда но первый орден прийти можно делить не тут на самом деле он по разным диодор да и ну если тот убрать чуть лойко нарушаются а [музыка] там skip бесед . ключ и мне кажется что с и лекции наверное что то поменять надо мне кажется потому что чем задавать новый объект можно да это как оптимизирует вот как если у тебя что-то возвращается с помощью ленку там допустим узор рыбой а ты потом с этим списком как-то работаешь это вообще список чего будет ну из
00:58:46 - 01:00:43
скажем типов [музыка] насколько а я ним ripple здесь это будет ордеров skil ну в общем зачастую когда ты получать какой-то список ты перед тем как [музыка] его прям юзает сразу же ты его преобразует в другой там типа ту что-то турист например да но есть проблема есть турист истории есть у них и так далее и в этом на самом деле есть некий нюанс для примера ты допустим на 64 строки видишь у тебя есть вызов элемент it вот если ты будешь юзать той или турист вот в чем отличие будет вызова этого метода
01:01:13 - 01:02:59
элемент от вот у даля если что элемент это такая отель ну да то есть понимаем но я думаю что диспут быстрее работать но именно не знаю именно почему из-за наверно методы элемент от тут чтобы ответ на вопрос нужно знать разницу структур данных как реализовано рей и как реализован лист есть понимание этого а рэй рэй уже этот динамик точнее лист это динамический тип динамической может добавлять сколько угодно элис точного расчета фиксирован количество него жену нам этаж неважно мы тут поиск элемента у нас тут
01:02:22 - 01:04:15
от важно понять но я так понимаю если мы используем элемент от но появились и просто был указали мир там объект то есть скобках так связаны список как он реализован связанный список честно не знаю так ткнул вот допустим морей там и друг за другом идут каждый элемент там по четыре байта допустим если этой новый массив raid там друг за другом они идут эти элементы а листе они все динамические расположены в разных местах и там идет хранятся через указатель на следующий элемент с помощью метода next
01:03:54 - 01:05:28
собственно идет переход к следующему элементу не через индекса из обращения к указателю соответственно чтобы найти последний допустим элемент в списке где указатель всегда стоит на начале он должен пройти время а.н. и соответственно максима количество время потратить чтобы дойти найти этот самый последний элемент и жили в массиве есть доступ по индексу где-то это будут вышел четвертый элемент он такой берет 4 умноженное на сайтов этого типа и все и вот он оказался ровно на том месте где этот объект и задан
01:05:03 - 01:06:19
то есть тут доступа и рея за 1 соответственно различия мы же где и что лучше поменять [музыка] ну наверное я обычно надо применять если у нас есть там словно говоря значение и поэтому значение мы хотим мы хотим взять число вот вопрос именно вот в коде нашим собственная какой метод применить ускорить наше приложение тоже и где ордер buy flagyl да да да именно банально вот этой штуки в принципе будет достаточно чтобы это как-то ускорить естественно можно еще допустим в тут оптимизировать добавить чтобы это
01:05:39 - 01:07:31
условия просто был в одном блоке в select celik select здесь ну в общем эти штуки особенном погода не сделали если мы просто добавим their и это все как бы ждет в небо перейдём к вопросам частым про многопоточность пацан у нас есть в общем три разных реализации асинхронных операций один из них первое это просто добавление симка к методу воет другое здесь добавляется чисто task возвращение типа в другом generic task вот если эти методы мы все вызовем метод обращения в методе main просто как вообще этот код отработает
01:06:49 - 01:08:37
но есть опрос кому метод тот он не будет ждать завершения наших действий вот я просто продолжит они не не стоп стоп стоп то есть если так я неправильно сказал если просто у меня то есть расинг то есть без тоска да он если ну которую мы делаемся хрому который мы добавляем ведь если в этом ведь нет и методе будет какая-то ошибка то мы не узнаем об этом просто продолжишь метод то есть штука выполняться синхронно и issue а если датском то ошибка вылезет наша ну я если то есть такском делать то есть 2 места white возвращать stask
01:07:48 - 01:09:38
мам и так и последнее это task от зачин эриком но он просто будет возвращать скажем так значение вот которым перри перед или но если то есть если например в методе там task to метод до вызов и ждал впишем в кавычках например на общем то мы можем сделать там пару объект равно white и так то есть условно будет все будет но если делать асинхронном там вы добавить да вот в c у нас будет значение ok какой результат у 1 2 будет если так добавить так так ошибка будет ошибка тайми или compilation компиляции
01:08:47 - 01:10:49
ну в компиляции просто в ну там же пустой метод уж ничего не вращать в первом случае такие а если вот так во втором та же ошибка будет потому что ну насколько я знаю тасс пишут про и того чтобы [музыка] ошибка чтобы если выявилось какая-то ошибка то программа остановилась и они продолжал на работу [музыка] вообще вот вот эта конструкция имеет она во что компилируется компилировать сам ну наверное дополнять дополнительный какой-то поток берется этим вряд ли не на это уже углубление я имею виду ч
01:10:32 - 01:12:16
ну раньше таких слов не было и место них использовали явные штуки хиты физический сахар еще по два по другому вот и weight вообще если мы встречаем и weight ну поток идет идет и видит и weight что для него значит это за что основной поток приложения то есть право же не затухнет то есть там будет работать он будет ждать ответа от этого метод какие можно ли вызвать и weight для первого так для 8 место там ну да можно на самом деле нет потому что у него нет тоски просто си хён операция в при таком сеток ситом не предусмотрено
01:11:43 - 01:13:14
вообще его и вообще там зависимости от конструкции он здесь вызывает метод get и вейдер вот сюжет ветра он говорит подожди пока я выполню место гиты вейдер он есть только у task-ов так как этот метод task не возвращает как и указано во второй методе то он такой я у вайда не могу гиты вейдер на эти туши у него нету он воет поэтому эта штука кроме как вот так он не может использоваться но за счет осинка он понимает что да это сихан операция но я запрещаю этому потоку ну пусть она синхронный работает поток но я ему
01:12:47 - 01:14:13
запрещаю давать возможность останавливаться ну типа ждать его вот второй случай здесь есть тасс он возвращает task эта штука работает и баг в игре вот это его это он преобразуется и здесь пишется гиты вейдер потому что он тоски у него этот метод есть всю емкость все жди меня я выполнишь потом пойдешь дальше в третьем случае место и weight пишется тоже штука гейта вейдер и после этого вызывается резалт формой золотого не помню точно могу ошибаться ну в общем то я возвращается тот самый значение которые дженерики был передан
01:13:31 - 01:15:07
вот как то вот так то все компилится довольно тоже опять же важная штука много где встречаются все эти три разные вещи и понимание того что каждый из них значит очень важно иначе можно как-то не так написать код кстати использовал просто резал ну то там по моему есть там и зовут вот просто результат до и использовал быть тоска чтобы он просто возможна такая штука там есть наверное вот так [музыка] вот хорошо далее у нас есть несколько методов синхронизации потоков на 1 тебя есть один метод который часто
01:14:19 - 01:16:15
обращают связанной потоки и твоя задача там иногда сделать так чтобы у тебя допустим допустим допустим не знаю есть некое поле const аккаунт опять и и она с каждым запросом тут допустим увеличиваются здесь какая-то операция происходит этот каунт используется и он тебе здесь очень нужен именно вы конкретно для этого потока крякает конкретно вот это данное значение ну или не здесь неважно где тот аккаунт используется и тебе нужно как-то контролировать такую штуку чтобы у тебя вот консоль . write line
01:15:19 - 01:16:53
водил нормальный каунт для данной операции вот именно для данного потока то есть ну представь опять же повторю у тебя сотни запросов к этому методу и для каждого из них нужно именно его аккаунт и выводить там ну его номер обращения так сказать будет какой const да я хотел в общем как будто это что контролировал так и так понимаю две отдельные потоки и делают обращайтесь комет 1 там есть сотни допустим из за этого у тебя аккаунт вот в данном контексте если ничего не менять он постоянно меняется и для конкретного
01:16:08 - 01:17:43
поток они его значение счетчика может вывестись ну во-первых возможно то тоже white использовать подождите до первых петухов закончится потом второе использовать надо потом tab 3 ok а как ещё можно это синхронизировать используя ну не просто там таскает и так далее что еще можно вязать кстати говоря . и создавали в одном собеседованием есть буква и мид и синхронизации потоков основных потоков то есть я должен иметь эти до ну это супер какой-то метод призывает макет в общем есть мьютекс и которые работают как
01:17:04 - 01:18:42
блок лак может помнишь есть мониторы и из семафоры я очень редко ну практически вообще не видел чтоб и заливки это специфические штуки кроме как клоков или мьютекс а вот кроме них я не помню что что-то еще юзали за редким исключением дин раз жизни видел семафор вот душа обычно стараются подписи таким образом чтобы разделении его явно и никаких таких коллизий потоков не происходило ok представим такую ситуацию в общем у тебя есть некий код который выполняется очень долго и у тебя он задан вот такой вот
01:18:28 - 01:20:12
там знаю лог объект сюда вот это мы сотрем он же имиджа вот такая вот штука [музыка] пальцы какой-то сам метод и вот этот метод довольно но асинхронный какой-нибудь он очень долго выполняется очень долго что ну прям вообще не можем ждать к этому методу утаскивает это очень много кто обращается вот с разных мест и из-за этого блока лог они ожидают когда этот метод выполнится вопрос как например самостоятельно решить проблему с тем чтобы при там допустим если операция идет больше двух минут то освобождаем
01:19:24 - 01:21:04
этот лак и дай другим этот метод вызвать в минут по-моему там можно через тоска делаете лодзь [музыка] ну так главы assigned о нет нет нет это возможно вот этого у этого сам это то есть какой-то метод который баннер так будет со месяца есть метод который позволяет устанавливать время и которые он должен завершать ну невозможно добиться всего нет наш edge ok [музыка] предстану поставим вот реально есть он наверняка в жизни принципе с этим сталкивался когда у тебя долго не отвечает сайт что происходит
01:20:26 - 01:22:09
ашик у кота как она этом долго сервер а как еще не английский именует часто дать request еще подроб подробности что пишет по результатам [музыка] тайм аут ну да лишь сказка данном пишешь но я примерно по моим помню так вот и спишешь time по которой должен метод скажем так что пирс такой ну я честно не использование разных я понял да ну некий поймал да после которого если там метод не завершится то вылетает glass timer если этого можно не вызывать да на пир для этого потом идем освобождения и все мы живем шоколаде и
01:22:25 - 01:24:30
довольно популярный вопрос а в чем отличие фрида фото scanf так я это учил я помню так сейчас [музыка] помой ческие тебе дает свободный поток для использования от 3 это trek ну и но и ask лучше использовать но по-моему из за того что там лучше оптимизирован а как должен как как процент система выдает потоки там как-то оптимизированных британские более крутые то почему бы фриды собрать на совместимостью не переписать на использование чисто task-ов не знаю вот тут я не скажу нет в общем-то хорошо а вот есть ли грыж
01:23:44 - 01:25:49
вот о том что в task of берется свободный поток а свободного так откуда берется первая система подает да ну есть некий пеппу аки в общем то иногда все-таки фриды стоит использовать если ты уверен что какой-то какая-то операция будет выполняться довольно долго едет потом будет всегда тебе нужен чем прикол фриды у тебя если ты поток выделю он всегда твой он никуда не убежит и вот тебе нужно прямо сейчас ты его прямо сейчас и используешь ну если заранее выслеживал там запросил у тебя он есть a task это как этот самый не
01:25:13 - 01:26:32
знаю идешь такой на каток а там мест нету хотя ты знаешь что если чё у тебя будут свободны и там напрокат коньки ну ты приходишь некой подожди сейчас мы там догадаемся от дома через вот отв ред это ты свои коньки взял и все вот примерно такая история покерфэйс так и довольно часто при знакомства по точностью важный момент бывает с пониманием как тоску отменить вот то есть например внезапно ты понял что блин вот эту тоску не надо дальше выполнять и по хорошему она это сделала такую кучу что лучше принципе выбросить
01:25:58 - 01:27:34
исключения как бы эту тоску отменить в prince мощным выдать исключение тогда она отмениться что за исключением кивер разве не обычно просто не если эксепшен выбросишь не становится разве конечно на сам в идут нити эта штука оптимизированной и если там не знаю в using его оберну например или же если ты снаружи еще это кое-как с помощью паттерна consolation атаки на отловил то это нормально пройдет иначе task будет жить до тех пор пока эта штука не выключишь а возможно пока не присуще ты запустишь комп то что
01:26:47 - 01:28:16
он будет считать что у него там не стоится специальный статус в процессах я вам такое так но он занят он мне не сказал что там проблема хоть exception вылез но не то что нужно есть вспомню по моему разве метод abort делает не останавливать да это за борт [музыка] хорошо а есть понимание когда нет аборт срабатывает то есть если вызовешь просто аборт то он на самом деле не вести выполнится вот есть такая тонкость там по моему да да да там еще есть метод который ожидает окончания потока ну манси по то есть
01:27:49 - 01:29:31
есть некие места небезопасные где в данный момент типа делать аборт нежелательно допустим это конструкторы там сейчас вспомните еще в общем есть такие места где вообще аборт делать вообще нежелательно так не называем небезопасны для потоков места вот хорошо есть фото борт до но есть второй момент где мы допустим хотим отменить тоску но принципе не завершить работу а продолжить дальше выполнять этот поток ну не прям так вы сказать в общем у нас вы войска этой оси х на операция ну вызвали методом
01:28:44 - 01:30:27
какой-то асинхронный идет дальше поток и там в какой-то момент мы поняли что он слушаю от того надо остановить он сейчас там что-то делает как это контролировать которого то синхронно код выполняется дальше ну можно же вызвать slip метод клип казани вслух это если он просто спать будет а я хочу его в принципе отменить работа субботу на заре вот это ardo он как бы для конкретного поток работает ты вот на месте решил его аборт нуть а если ты хочет мне тоску который где-то там оси х на выполняются от и дальше идешь по коду
01:29:39 - 01:31:04
своему ну вот тут вот наверное все таки эксепшен будет работать но не просите просто эксепшен нельзя the exception ты же как-то этот exception зачислить асинхронно выполняется тоска алексашин другом месте только вы же делать тому что я хочу управлять им тем потоком если захочу его отменить которые там выполняется выполняется в другом месте хочу его отменить вместе [музыка] скрываем [музыка] я даже это повинностью есть концевые шин токен количество концов с помощью этой штуки передавая их метод ты можешь это тоску отменять ну там
01:30:26 - 01:32:05
привязывая конце что кинг определенному тоску ты можем управлять с чего отменить часто это слышу такое ну на самом деле довольно часто меня спрашивали даже в конце лишь таки даже без подвоха так которые были до этого вот [музыка] так но в принципе по вопросам все 2 и немножко пройдёмся потому что было задано и поймем на чем работу работать на самом деле есть много на чем в общем то нужно поизучать во первых очень часто вопросы то по using во что компилируется а ну для начала лучше начать с места dis pas les интерфейс айди
01:31:41 - 01:33:13
способов как оба дмитрий финала из когда он вызывается тому подобное далее идет углубление в джесси нуга ручка лектор как он работает пока лень джесси сборка мусора когда отрабатывает это ну не то чтобы я бы сказал обязательно знать не знаю что все как твоим приложению но просто это часто спрашивают а так это редкая вещь когда пригождается ну именно про поколений джесси и тому подобное редко пригождается но спрашивают ну прям часты вот дальше отличие остренько стрим builder очень важная тема просто ну капец много
01:32:32 - 01:33:55
где вещей где явно я думаю в ты свое приложение мог использовать бетон о использовал string из-за этого у тебя падает производительность в целях того чтобы делать качестве продукт прям очень советую и в принципе постоянно спрашивают про stringbuilder далее там что еще что еще про generic type ну это же самом деле тоже редкая вещь когда спрашивают различие между там рай листы листом но например на три раза меня наверно спросили а я собирался в сумме но не буду врать но много но три раза спрашивали это где-то
01:33:13 - 01:34:46
может быть может быть с 5 по 10 процентов случаев спрашивают такое далее ну в принципе вему особая ничего не спрашивал но в целом в этом плане знаний достаточно бывают еще раз ставит вопросы про как получить доступ к элемент когда ну различные виды способы доступа к элементов управления допустим как мне получить доступ control у если я обращаюсь не через их сны им что мне использовать ну всякие вот такие вещи вот там есть разные способы доступа контрового вот и спрашивают как допустим это получить здесь какие-то оптимально
01:34:01 - 01:35:28
вечно есть какие-то которых называют грн а к цт вам дальше дальше дальше по поводу квадре view который мы смотрели там допустим что не так в коде ну здесь кроме того как сказать практика и практика ничего не сказать просто надо побольше пробовать и как вариант очень советую есть один канал ссылочку я оставлю в описании лес джексон он дает довольно много архитектурных в классный подходов у него есть еще свои книги в принципе если ты будешь там переписывать его приложение там под себя и ты увидишь
01:34:47 - 01:36:12
что блин как же классно удобно у него все сделано и у тебя как в практике это очень хорошо заводится и ты будешь писать реально качественный масштабируемый код вот и стресс из review будет намного проще взаимодействовать смотреть что лучше что хуже видеть код насквозь так многопоточность тут очень важная тема это право конце лично токен вот этот подход довольно хорошо на дугу виться и прозвища фред a task of попробовать по использовать таймер и ну у меня принципе сейчас приходилось перед такой штуки
01:35:29 - 01:36:56
баланс вот ну и метать экранизации потоков хотя бы знать о них как они работают вот использовать но если поймешь что нужно использовать то так это он придешь вот так это достаточно редкая вещь ну и в принципе тоже довольно часто спрашивали могу сказать вот как-то так принципе у меня вопросом все может быть есть у тебя а opirus сказать спасибо за интервью верно все понял что все-таки надо побольше там изучать именно то есть не именно фреймворк там самарин моментом и подноготную sharp но не подноготной просто растут легкий объем
01:36:12 - 01:37:49
действительно сколько не смотрю там себе с ним происходило всегда вместо того чтобы спрашивает по углублению в саму платформу спрашивают в частности на мидл это архитектурные подходы как ты пишешь код и углубление в язык там как работает ленку как работает внутри какие-то класс методы и тому подобное вот больше вот эти лишь спрошу потому что остальное ты либо перенять но будешь перед перенимать этого опыта просто писать копипаста дальше что то свое до принципе все обычно так выглядит есть конечно не вставляя пишешь приложение а
01:37:05 - 01:38:34
медуз 0 обычно не дают что-то писать поэтому обычно только такие вопросы тебе будут задавать и углубляться платформ он вряд ли может по дождь ну в принципе на самом деле вопросов нет еще один вопрос когда видос выйдет [музыка] ну возможность сегодня да возможно сегодня там сидит а вот там будет местом к даме если чем можешь там хоть сто раз пересмотреть чего как там из чего подчекнуть какие-то моменты список вопроса кстати я наверно прямо сейчас вот прям выгоду чтобы можно было ну а таковы кстати вы можете вы увидите
01:37:49 - 01:39:19
его в описании вот совсем у меня завтра интервью так что до ну будет сегодня вот буквально сейчас займусь его же здесь человек буду на связи тебе скину вот ну на этом у меня все если звуки предложения сразу отмечу что некоторые варианты может быть некоторые устроит как я помню коммент прошлое видео были не которыми согласны все может быть вот их не бывает всегда точного ответа всем людям можем ошибаться тут наши дела учить вы напишете всегда критикуйте это очень важно если вы не будет критиковать то можно научиться
01:38:36 - 01:39:58
чему-то может быть неправильному поэтому спасибо вам за то что оставлять такие комментарии очень полезно всех читаю смотрю вот так же если у вас будет желание получаса обследование пишите обязательно где-нибудь там в телеграме инстаграме ссылочки там указаны в описании так же он есть на самом канале в правом ну или там на канале в информации можете писать всем отвечаю вот и все можем пройти собеседник пока что это не такой большой наплыв в принципе работать можно и я могу устраивать бесплатные собеса вот
01:39:21 - 01:40:37
спасибо что смотрели оставить комментарий подписка на старте лайки всем спасибо и удачи
01:39:59 - 01:40:12