Как пройти СОБЕСЕДОВАНИЕ на C# & .Net РАЗРАБОТЧИКА?

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

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

  • сегодня ты будешь отвечать на джановские вопросы Я вообще молодец Всё программист Вот как сейчас выдам все свои знания Ну я могу лучше у меня в глупости спрашиваете Важно ли разработчику ходить на собеседование то что ты программист - это замечательный но на собеседовании это специально Атмосфера мне это ставила в тупик потому что это теоретический вопрос Расскажи мне про свой Опыт использованияриков о Мы обожаем дженерики что вы там может быть проблемы Ты в трактеберу и проблемы нет Давай немножко про коллекцию Э что такое

    00:00:00 - 00:00:56

  • диккере у меня там проблема с базой Какие не скажу какие-то с базы проблемы были отреагирует вот такой вот всё Я свободен что у меня по очереди о пришёл ответ от сервера А я живу Я существую ради одной цели Привет это натив сегодня вечером поговорим о бойцы не только ребят Мы рады продолжить нашу рубрику это разбор вопросов собеседований Сегодня мы решили сделать такой основательный разбор по сишарпу идет Нет Во всем мне поможет разобраться наш наставник и девелопер с большим опытом Паша Львов и конечно же я

    00:00:29 - 00:01:30

  • Напоминаю что мы очень рады вашим лайкам комментариям еще нас больше радует ваша подписка на канал поэтому не забывайте это делать Это будет нас мотивировать создавать еще более крутой контент и выпускать его чаще и да ссылочка наши курсы именно школу будет находиться в описании А теперь погнали [музыка] Привет Приветствую Ну что снова Мы с тобой в этом чудном месте в описании к этому ролику я специально оставлю ссылки на видео с тобой для того чтобы зрители оценили тебя как нашего гостя как нашего

    00:01:00 - 00:02:06

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

    00:01:36 - 00:02:49

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

    00:02:12 - 00:03:13

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

    00:02:43 - 00:03:46

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

    00:03:14 - 00:04:14

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

    00:03:44 - 00:04:44

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

    00:04:14 - 00:05:14

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

    00:04:44 - 00:05:45

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

    00:05:16 - 00:06:25

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

    00:05:51 - 00:06:58

  • не то что тебя хотят услышать это вопрос в стиле Давай поговорим Потому что если честно и правильно него ответить ты будешь отвечать минут 40 начнем с первого утверждения о том что valu Type хранится в стеке референс в куче это ложь потому что valute может оказаться в куче собственно бокс бокс дальше обязательно спросят именно про этот процесс далее Это для многих шоком бывает что вообще-то стек хранится в куче вот вот это деление обычно представляю что вы здесь одна коробочка здесь другая нифига

    00:06:25 - 00:07:39

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

    00:07:01 - 00:07:58

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

    00:07:30 - 00:08:48

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

    00:08:09 - 00:09:17

  • родительском методе он тоже будет изменен когда ты передаешь им в нашем случае число это valu Type Ты передаешь копию этого объекта если ты копию изменишь оригиналу И от этого не холодно Ни жарко поэтому Разница в том что передавать ссылочный тип Ты знаешь что в нем в методе могут его изменить и после как метод закончится твой первоначальный объект будет изменен А когда ты передаешь вылетайп например число ты его отдал и забыл что там с ним происходит Тебе же не интересно ты знаешь что у тебя он никак не изменится Это вот таких

    00:08:43 - 00:09:53

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

    00:09:17 - 00:10:27

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

    00:09:53 - 00:10:56

  • какой-то вылетает как-то его изменить читать ты пишешь далеко от у тебя он постоянно какие-то методы дергает параметры передаешь у тебя уже не будет такой очевидной пользы Так что нет не надо вылетайп использовать везде подряд со словами Они просто Быстрей Ты уже упоминал боксом бокс я тебя спрошу О чем О том что это И как этого можно избежать бокс это когда у нас есть value Type и мы невероятным образом решили разместить его в кучу собственно boxing это когда ты берешь или так оборачиваешь его в

    00:10:25 - 00:11:28

  • объект и кладешь этот объект в кучу анбоксинг это когда ты берешь объект из кучи разворачиваешь его достаточно вот такой простой механизм как его избежать тут можно опять рассказывать про теорию про то как у тебя приводятся типы А можно ответить однозначно использовать дженерики дженерики наше всё Да это просто удобно и хорошо И это в большинстве подавляющем большинстве случаев самое простое решение в лоб и рабочее Что самое главное для решения этой проблемы поговорим про Такой тип как string он

    00:10:57 - 00:12:08

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

    00:11:32 - 00:12:46

  • метод и в методе пытаешься его изменить твой оригинальный объект не изменится поэтому интуитивно хочет сказать что он выльютайп но это неправда А дело в том что вот это вот свойство неизменяемости очень сильно повлияло на все что работает со стрингом То есть у тебя в голове должны быть реффины стайп и гадский string все что с ним связано очень такое вдумчиво Осторожно То есть если есть переменная в которой лежит строка А ты к ней добавляешь строку Б вместо этого у тебя появляется три строки а б и А Б И в память они все три

    00:12:09 - 00:13:19

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

    00:12:43 - 00:13:50

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

    00:13:17 - 00:14:20

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

    00:13:49 - 00:14:55

  • строки в которой от одного до 100 создал 100 строк который один потом 1 2 потом 1 3 1 4 они все у тебя в памяти хранятся собственно это проблема Ты тут должен вспомнить про стринг Билдер и начать рассказывать в эту сторону Так что вопрос про референсы или value Type требует от тебя начинать записи Описывать как ты работаешь со стрингом вот прям вообще целиком давай еще поговорим немножко про такую сущность как абстрактный класс это класс в котором перед словом класс стоит абстракт и все по сути когда ты

    00:14:22 - 00:15:27

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

    00:14:54 - 00:16:01

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

    00:15:27 - 00:16:45

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

    00:16:06 - 00:17:20

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

    00:16:43 - 00:17:50

  • далее но исходя вот из этого отношения что у меня есть некий абстрактный Объект который очень жестко привязывает меня к функционалу всех моих наследников То есть это уже немножко Шаг в сторону В чем разница между интерфейсами абстрактным классом абстрактный класс он все еще класс если ты от него наследуешь у тебя может быть только один родитель это значит однозначно определяешь ради чего ты живешь ради чего существует твой Наследник Поэтому ты можешь создать абстрактный класс например Бейс Модель которая у тебя ничего вообще

    00:17:20 - 00:18:30

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

    00:17:54 - 00:18:55

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

    00:18:25 - 00:19:34

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

    00:18:59 - 00:20:11

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

    00:19:35 - 00:20:44

  • ради чего ты был создан такой вес небольшой Ну можно упомянуть Я думаю что в абстрактных классах я все-таки реализация может быть а в интерфейсах нет но с новыми версиями си Шарпа у нас могут существовать интерфейсы с уже готовыми реализациями поэтому это не столь актуальный ответ Если есть два разных интерфейса которые мы реализуем в одном классе но у них совпали имена Как быть это один из тех редких случаев когда Ответ простой пишешь название интерфейса точка Название метода удобно Поэтому да там никаких проблем с этим

    00:20:09 - 00:21:16

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

    00:20:43 - 00:22:07

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

    00:21:25 - 00:22:34

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

    00:22:00 - 00:23:12

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

    00:22:36 - 00:23:43

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

    00:23:10 - 00:24:11

  • когда мы создаем genery классы мы намного чаще как-то пытаемся ограничить Что нам можно сюда передать там только классы только классы какими-то конструкторами Ну и так далее если у нас возможность как-то ограничить типы которые пользователь будет передавать через шаблон Да собственно те restriction о которых я упоминал там есть простейшие базы варианты класс не класс есть Наследники от определенного типа то есть ты говоришь что мне подойдут только те кто наследуется Вот от этого класса Или те кто реализует вот

    00:23:40 - 00:24:40

  • этот интерфейс и те что реже используются ограничения в стиле Я хочу чтобы у того объекта что ты мне передал был конструктор без параметров например Это когда мы с рефлексии работаем Нам Иногда нужно так что там достаточно удобный набор инструментов естественно на каждый тип который ты передал свои ограничения могут быть кстати никаких проблем А можно ли использовать более одного шаблонного типа хочешь сказать нужно Но обычно мы один тип используем и в большинстве случаев только один его Видишь Поэтому у Джуна иногда

    00:24:10 - 00:25:16

  • складывается впечатление что он только один может быть нет естественно ты можешь писать туда сколько угодно типов ты в этих restriction можешь как-то переплетать в правилах Так что там никаких ограничений на фантазии нету Паша Расскажи мне про конструкцию трек Edge прекрасная конструкция первая реакция когда я слышу постарайтесь ее не использовать почему она потому что используют неправильно очень часто не смысле что она плохая или не нужна она нужна без нее жить нельзя но Может именно потому что она такая

    00:24:43 - 00:25:56

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

    00:25:19 - 00:26:23

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

    00:25:52 - 00:26:53

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

    00:26:22 - 00:27:22

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

    00:26:53 - 00:28:01

  • блок утра и Кейдж он может создать проблем много это первая часть вторая часть try-tech более медленный И когда ты с ним знакомишься простое ты модельку пытаешься спарсить то есть пришла строка этой строки пытаешься сделать модельку и люди иногда вместо того чтобы проверить в строке если тебе нужны места пытаются ее спарсить в кетчу Если поймали что Ну не получилось но не получилось не получилось скажем что строка плохая Это плохой вариант потому что трактич это достаточно тяжеловесная конструкция

    00:27:27 - 00:28:45

  • внутри Шарпа и если ты при помощи нее будешь какие-то простые вещи делать то ты себе производительность пытаешься убить или альтернативный вариант ты пытаешься создать файл если он говорит что такое файл Там не может быть создан потому что нету папки ты такой Ладно блоки Catch создам папу и попытаюсь Еще раз такое тоже видео очень смеялся вместо этого Везде где ты можешь без тракте провести какие-то проверки проведи без трактечи тяжеловесная конструкция которая должна ловить ошибки и не надо вот все Остальное при помощи

    00:28:05 - 00:29:11

  • нее делать что зачастую пытаются делать А может ли вообще быть несколько блоков кетчуп это как раз признак хорошего кода Потому что когда ты пишешь Try Catch и вкетч указываешь acception то это значит Да мне пофигу что там упало Ну вот упала какая-то ошибка Я даже не буду разбираться Какая упал и упала и дальше стандартный результат там Запиши влоги попробуй еще раз это значит что ты не задумывался о том когда ты писал это трекетч в блоке Кетч ты можешь указать не просто ошибку вообще любую ты можешь

    00:28:38 - 00:29:44

  • Указать специфичный тип ошибки которые ты ожидаешь что здесь упадет или несколько собственно несколько блоков Кетч Это несколько видов ошибки которые ты ожидаешь что могут упасть и естественно Под каждый вид ошибки ты можешь как-то по-своему отреагировать например ты пытаешься что-то сохранить в базу данных если у тебя Connection не открылся то Это один вариант проблемы с сетью если Connection открылся внутри табличку не нашел Это другая проблема наверное в той базе обратился или там что-то случилось со структурой ты забыл

    00:29:12 - 00:30:08

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

    00:29:40 - 00:30:41

  • То есть если вообще какая-то разница В какой последовательности мы их Пишем тут как раз капелька теории не помешает когда у тебя падает ошибка то компилятор делает Так он берет первый Кейтч который он нашел и спрашивает Это ошибка твоего Типа если ты ему говоришь моего он говорит хорошо заходим внутрь обрабатываем и все мы свою работу сделали если не того Типа он обращается к следующему спрашивает твоего типа нет к следующему и так идет по очереди по всем кетчам Исходя из этого если твой первый блок

    00:30:10 - 00:31:12

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

    00:30:40 - 00:31:36

  • запишем как-нибудь отреагируем Что за команда Фрол это вот как раз рядышком это наверное хороший вариант как работать Ладно немножко в сторону можно и без трактечи использовать сурово это когда ты говоришь что хоть ошибки тут и никто не видит Я знаю что она тут есть то есть нарушение да то есть ты посреди кода в любом месте пишешь срок передаешь внутрь после срока пишешь Exception и он говорит что у меня ошибка падает с ошибкой И дальше наверх пробрасываешь у меня здесь проблемы не важно была ошибка

    00:31:09 - 00:32:18

  • не было Я знаю что Ошибка обычно в каком-нибудь и вставишь там если у меня имя Иван А я знаю что таких пользователей не бывает моей системе Все я падаю с ошибкой говорю что ты мне врешь то есть попытка сказать что здесь вот прям здесь и сейчас у нас ошибка есть Я ее чувствую по бизнес логике нередко у тебя срок не посреди года валяется внутри блока трекетч если быть точнее внутри блока Кетч это же более специфичный шаг Ты когда поймал ошибку у тебя там что-то с базой случилось тот же Connection не открылся ты поймал

    00:31:43 - 00:32:53

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

    00:32:19 - 00:33:20

  • сделать где-то Там сверху и при помощи строк эту ошибку прокидываешь наверх это вот простейший когда ты просто строго точку запятой ставишь есть вариант Когда ты поймал ошибку как-то отреагировал на неё хочешь наверх передать Но детали там знать не должны То есть например у тебя что-нибудь с Connection string gome случилось он какой-то неверный неправильный ты не хочешь его прокидывать наверх снаружи об этом знать не должны в какую базу ты лес Поэтому ты можешь написать сроу и указать новую ошибку то есть внутри

    00:32:49 - 00:33:52

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

    00:33:20 - 00:34:32

  • в логике у вас должен храниться потому что на самом деле это Трай Кейдж файнери без блока Кетч То есть using это просто такой красивое оберточка над блоком трай-файно ли зачем нам это нужно нередко У нас есть некие такие специфичные объекты Вот расскажи мне с какими объектами можем ее использовать объект если быть точнее которые реализует себе интерфейс айди spotsball это объекты которые не мы ими управляем это тот самый момент когда нужно вспомнить первый вопрос про то что у нас есть куча что в куче у нас там есть

    00:33:56 - 00:35:11

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

    00:34:33 - 00:35:51

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

    00:35:13 - 00:36:30

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

    00:35:51 - 00:36:50

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

    00:36:21 - 00:37:19

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

    00:36:50 - 00:37:58

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

    00:37:24 - 00:38:38

  • которой ты можешь очень долго подкладывать объект То есть это дорогая операция но это очень быстро оттуда его достанешь А дальше было бы неплохо чтобы ты вот это слово быстрый долго обернув какие-нибудь термины красивые слова формы давай Да у нас есть такое понятие как алгоритмическая сложность Она же от N Ну например Это термин означает что если у тебя в два раза увеличился массив входных данных Во сколько раз у тебя вырастет время выполнения твои функции если у тебя в два раза вырос входные данные в два раза выросло время это

    00:38:01 - 00:39:21

  • Линейная зависимость если у тебя зависимость скажем квадратическая То есть у тебя в два раза больше данных А ты обрабатывал в 4 раза дольше то собственно это квадратическая зависимость там у нас есть много других вариантов всякие константы логарифм и в общем мы тоже математика получается много таких вещей самое важное для нас в том что это зависит или не зависит от входных данных и насколько есть о от единицы Она же константное время это значит что вне зависимости от того сколько вы мне передали данных Я за

    00:38:41 - 00:39:48

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

    00:39:15 - 00:40:32

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

    00:39:54 - 00:41:00

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

    00:40:27 - 00:41:38

  • они нужны просто для того чтобы быстро достать долго положить если с той стороны спросит уточняйте то начинайте уточнять Если нет то как бы отвертелись Понятно так вот когда мы подкладываем мы у каждого объектика высчитываем Хеш Хеш Это какая-то волшебная циферка и у нас есть метод у каждого объекта который класс gethesh и когда мы в дикшнере пытаемся что-то положить Мы берем этот хэш у объекта высчитываем его используем его фактически как индекс то есть мы при помощи этого хэша знаем куда именно его положить поэтому Когда

    00:41:06 - 00:42:24

  • нам нужно будет его туда достать мы взяли объект нам не нужно проходить проверять все которые Да мы Хеш просто у этого объекта высчитываем И после этого мы однозначно знаем куда нам лезть точно здесь лежит а если лежит нельзя не здесь Значит его просто нету то есть мы можем сразу сказать что такого нету то есть это очень такая удобная штука когда ты можешь Глядя на объект сразу сказать он у тебя есть коллекция или нет условно говоря но тут ну собственно Исходя из этого когда ты взял объект и хочешь его

    00:41:47 - 00:42:47

  • хранить Что тебе нужно чтобы у него хэш хорошо считался можешь взять стандартный Хеш лучше переопределить когда ты переопределяешь хэш ты можешь написать Вот так чтобы это вот Волшебная циферка которая создавалась А наверное уже сказать что такое Хеш Какими свойствами он должен обладать Было бы неплохо Кроме того что это волшебная циферка она должна обладать очень важным свойством у одинаковых объектов Хеш должен быть одинаковый всё просто Да А если объект отличается хоть чуть-чуть отличается хоть одним

    00:42:17 - 00:43:24

  • битом то хэш Должен быть другой это невозможно вот реализовать это невозможно поэтому он должен быть Ну желательно чтобы у разных объектов кэш был разный строго важно чтобы одинаково он был одинаковый А у разных чтобы он был как можно чаще разный Почему это невозможно потому что Хеш это цифра int есть у тебя в объекте хранятся хотя бы два разных винта то рано или поздно у них хеши будут пересекаться То есть у двух разных объектов Хеш может быть одинаковый это неприятно это коллизия этому мы пытаемся

    00:42:50 - 00:43:58

  • избежать но такое точно может случиться так вот когда ты Хеш переопределяешь ты его переопределяешь смотришь на весь свой объект пытаешься выделить в нем что для тебя принципиально важно Например у тебя есть юзер у него есть 50 полей имя фамилия цвет глаз своими любимого котика все что угодно для нас есть у него имя и фамилия совпадают имя фамилии год рождения то это один и тот же человек цвет глаз рост и фамилия котика любимого не имеет значения Поэтому в Get Hash я буду использовать имя фамилию год

    00:43:24 - 00:44:29

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

    00:43:57 - 00:45:01

  • них конечно одинаковый тебе нужно просто взять и пройтись уже по всем полям для этого тебе нужно переопределить equals то есть каждый раз когда мы говорим productionary у тебя сразу всплывает что я хочу объектов которые в diction собираюсь хранить перепределить два метода Get Hash и equals Get Hash Потому что при помощи него я буду чаще всего использовать просто вложить доставать хэш высчитывать на случай коллизий ты можешь выдохнуть вроде как основную теорию про дикшнере рассказал Слушай ну да я прекрасно понимаю что как

    00:44:29 - 00:45:34

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

    00:45:02 - 00:46:05

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

    00:45:33 - 00:46:28

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

    00:46:01 - 00:47:11

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

    00:46:39 - 00:47:44

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

    00:47:12 - 00:48:31

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

    00:47:51 - 00:48:52

  • с этим не связано то есть асинхронность может существовать на одном потоке лично для меня синхронность была мучительная тема пока я был джином пока я не встретил джаваскрипт вот я JavaScript ненавидел во многом Я как C Sharp программист бэкен должен это Здрасте это всячески высокомерно относиться к джессу но Джес мне помог разобраться осознать прочувствовать Что такое синхронность и понять что многопоточность для этого не нужна они могут с одновременно быть совмещаться но это никак не связано поэтому начну с

    00:48:23 - 00:49:30

  • примера из JavaScript Давай у нас есть Jack запрос Мы в JavaScript пишем какой-то код человек нажал кнопочку Мы хотим чтобы мы сходили на сервер сервер нам прислал данные эти данные использовали сказали показали пользователю что все хорошо в этом потоке действий У нас есть важная часть когда мы отправили запрос на сервер сервер некоторое время думает а если сервер плохой то думает он долго секунду 210 через час ответит и если у нас обычно однопоточное приложение без асинхронности без всего то в этот момент

    00:48:57 - 00:50:11

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

    00:49:34 - 00:50:40

  • есть функция которая выполнил потом на потом закинул и дальше работать с тем что у него из задач есть когда у тебя придет ответ в этот момент он подождет пока освободится это он может быть чем-то занят этот момент то есть обрабатывает Циферки от одного до 100 пишет Вот он у него там циферка 67 пришел Ответ он не станет его обрабатывать сразу досчитает до 100 такой Все я свободен что у меня по очереди о пришел ответ от сервера в этот момент он берет от сервера и начинает работать с ним дальше обрабатывать отвечать как-то реагировать

    00:50:07 - 00:51:12

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

    00:50:39 - 00:51:49

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

    00:51:15 - 00:52:24

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

    00:51:49 - 00:52:50

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

    00:52:20 - 00:53:27

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

    00:52:53 - 00:54:06

  • собеседований для Junior специалистов что я могу сказать по поводу сегодняшнего то что мне естественно было много новой информации однозначно всё ли я понял Нет но я уверен что наши ребята Это нормально Это нормально Потому что я не изучал себе Sharp есть чему стремиться тебе человеческое спасибо Обязательно ещё увидимся и как всегда удачи всегда пожалуйста Спасибо ребят что посмотрели Данное видео Я очень надеюсь что особенно для шарпистов это будет классная шпаргалка для подготовки к собеседованию смотрите

    00:53:33 - 00:54:34

  • наш канал подписывайтесь на него ваши лайки комментарии и мы еще увидимся пока

    00:54:05 - 00:54:16