Подготовка к собеседованию на 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 каналы и чаты
Транскрипция видео:
Всем привет С вами илип сегодня у нас очередное МОК интервью Только на этот раз у нас человек который совсем не имеет коммерческого опыта Поэтому будет вдвойне интереснее Виктор тебе слово можешь рассказать немножко о себе Рассказывать особо нечего просто студент просто пытаюсь найти работу Сейчас какой вообще опыт Может быть там не знаю разрабатывал пед проекты свои какие-то или по учёбе приходилось что-то реализовывать какие-то свои сервисы курсовая это магазин интернет-магазин на аспм ВЦ ещё были стажировки где были и
00:00:13 - 00:01:35
впи проекты с многослойной архитектурой Ну на этом всё как бы если говорить про именно про с стажировки ты имеешь в виду практику да да практику Окей А вообще какой стек у тебя Как ты считаешь какой стек ты хочешь найти работу Ну C то есть немножко базы данных Ну сами базы данных я я как-то не особо работал то есть был проект ещ очень давно года два назад а так я через что касается данных ты имеешь в виду вобще это подход к миграция Скорее это ты наверно имеешь в виду сами запросы ты мало писал в основном работал
00:00:53 - 00:02:37
с ука Да Ой хорошо а с какими базами приходилось работать ну Да я лично я работал с проектом с даром а сам через дара ничего не делал Окей хорошо давай тогда сразу перейдём к теории я постоянно начинаю с одного и того же это с типов Вот расскажи мне про классификации типов в си шарпе Какие бывают типы ссылочные и значимые То есть к значим отно целочисленные с плавающей точкой левые это структуры Яна и ссылочные это у нас классы интерфейсы делегаты вроде всё чем чем они отличаются тем что значимые хранятся в стеке ссылочные
00:01:47 - 00:03:37
хранятся в куче Это отличает их поведению тем что если мы изменяем значения значимых типов то мется непосредственно в в стеке и больше нигде а в котором мы работаем а ссылочные они меняются во всей программе Угу А Всегда ли значимые типы хранятся в стейке значимые типы могут как бы в анбоксинг боксинг анбоксинг то есть приведены ссылочные типы там хранится А если без анбоксинг могут ли они храниться Нет ref не будет хранить их в куче есть ещё какие-то варианты так я что-то забыл это поднимался в прошлых
00:02:49 - 00:04:31
видео Вроде я что-то да Если я не ошибаюсь Я уже спрашивал у кого-то по поводу Ну давай Вот рассмотрим конкретный пример Да у тебя есть класс животных Animal Да внутри класса Animal есть свойство возраст типа где будет храниться возраст в стеке или в куче если ты создашь экземпляр класса an Ну он будет храниться в куче Почему это же это же значимый тип Ну он хранится в классе потому что то есть если значимый тип является частью ссылочного ку Ну да Окей хорошо Давай пойдём немножечко дальше Вот мы говорили про типы Давай
00:03:42 - 00:05:22
немножко про стринг поговорим что это за тип такой чем он может быть интересен Чем отличается от остальных типов тем что он считается ссылочный Я забыл кстати упомянуть он считается ссылочный но он используется как значимое значение А почему так вроде как это было задумано из оптимизации чтобы чтобы не дублировать значения но То есть он этот тип неизменяемый поэтому когда мы его изменяем создаётся новый тип то есть создаётся новая строка то есть егда мы складываем две строки то получается третья то есть две другие они остаются в
00:04:42 - 00:06:13
памяти ссылки Ну то есть я забыл в ЧМ вопрос заключается когда мы складываем две строки что создаётся третья ещё предыдущие две понял хорошо да Окей хорошо мы не будем глубоко сегодня идти просто потому что у тебя как бы нет опыта поэтому как бы к тебе поблажки есть некоторые Давай перейдём немножко Вот смотри у на являтся сычны типом но снива да Каким образом мы можем сделать класс сравнить классы не их ссылки а само содержимое например содержимое классов так Ну для этого у нас есть метод СТ и как он называется-то
00:05:27 - 00:07:11
какой ну здесь есть несколько вариантов это при определить оператор то есть сравнение у классов которые мы сравниваем и сравнивать по значениям которые мы хотим допустим по полям которые у нас указаны либо по ст есть ещё я я не очень понимаю какой метод Надо переопределить определить переопределить оператора у самого класса который мы хотим или перегрузка оператора по-моему называется или вот этот метод object у него Как называется я Ты equals имеешь в виду Да equ да я что-то его как-то странно
00:06:19 - 00:07:33
произношу Ага понял угу так хорошо а так ты сказал про перегрузки методов Что такое перегрузка методов если перегрузка операторов я говорил если про методы то это когда мы у каждого метода же есть сигнатура и когда мы меняем у него входящие параметры мы можем дублировать его по имени но при изменении параметров компилятор будет искать подходящий которую мы хотим вызвать угу вот я к чему это спросил к тому что ты сказал что это называется перегрузкой но когда ты пере определяешь методы это не является перегрузкой
00:06:55 - 00:08:27
смотри у тебя есть например метод equals Да ты пишешь Over это перегрузка или при определение Нет я говорил про перегрузка операторов То есть можно же плюс поменять в классе То есть когда мы можем складывать класс Мы можем определить на него оператор Каким образом А каким образом А ну как там у него уже есть специальные у каждого класа можно указать по-моему Я просто Этим никогда не занимался Я просто знаю что есть такое функция это просто у класса пишешь оператор и там указываешь допустим плюс и там уже он
00:07:42 - 00:08:55
будет сравнивать по тому чему укажет допустим по имени или по имени возрасту или там по возрасту Ну короче по полям которые мы укажем в этом методе Угу О'кей хорошо так Окей давай дальше пойдём немножко поговорим про интерфейсы про Давай давай начнём лучше с классов и структур В чём их отличие ну их отличие в поведении потому что они хранятся в разных местах такие кучи то есть одно значение у нас один тип у нас ссылочный другой значимый Поэтому у них поведения разные Ну то есть у нас если мы поменяем Ну то есть нет менять в
00:08:19 - 00:09:47
структуре смысла то особого нет получается потому что ну то есть ты хочешь спросить где мы их должны использовать то есть в этом смысл Э нет начнём с того в чём их вообще основные отличия А там уже как пойдёт Ну структура Мы как и другие значимые типы если мы поменяем в одном месте то в другом месте они не поменяются потому что в другом стеке они просто продублируйте разные обекты совершенно А класс когда мы меняем они меняются во всей программе то есть потому что их значения хранятся в ссылке которы чаются
00:09:02 - 00:10:06
уже разных стех Окей Хорошо давай теперь перейдём к тому когда ты используешь классы А когда структуры начнём с того что структуры мне не приходилось особо использовать Так ну структуры надо использовать когда мы хотим его использовать в одном стеке то есть нам когда не нужно в разных местах использовать потому что передавать структуру из одного стека в другое это будет затратно наверное поэтому проще передать ссылку ссылка она мало весит операция не затратная вот так вот и когда допустим нужно чтобы она менялась
00:09:37 - 00:10:56
допустим то есть изза этих рассуждений То есть когда нам допустим нужно чтобы допустим массив массив значений Ну каких-то сущностей не изменился мы можем в принципе и пренебречь нагрузкой и просто передать в другой стек и структуры то есть здесь может быть несколько соображений Что может быть предпочтительно Угу А можешь какой-нибудь такой живой пример привести когда бы ту структуру использовал Ну ну это какие-то примитивные задачи наверное будут в целом Да не имеет значения Ну в принципе может быть одинаковая
00:10:17 - 00:11:44
задачи просто как я сказал просто чтобы стек степ не гонять чтобы не перегружать машину То есть задачи могут быть примерно одинаковые на самом деле Ну я слышал примеру у тебя видео то что другие называли пример с точкой то есть там по координатам Ну я не вижу причин почему нельзя использовать более сложные приме на самом деле нет почему можно использовать просто нужно дать понять почему в данном контексте используется именно структура а не класс то есть должно быть объяснение Ты же не просто так это
00:11:03 - 00:12:08
делаешь Скорее всего в чём это преимущество будет ну в скорости будет преимущество когда мы в одном стки будем работать Зачем нам нужно использовать класс то есть здесь скорее не Почему мы должны использовать структуру А почему мы должны использовать класс мы говорим Каю точку на координате Да ты говоришь что это простой пример почему мы не можем использовать пример сложнее Давай приведём Пример посложнее например что мы можем использовать Ну какой-нибудь не знаю Юнита какого-нибудь который шахматный шахматный Юнит Я
00:11:38 - 00:12:54
вспомнил Я использовал всё-таки структуру это было в шахматах а что такое Т это нут шка какой-нибудь а поня и почему именно использовал структуры Я так понимаю это осознанный выбор был ну потому что она быстрее работать ну просто захотелось поработать по выпендриваться то что я знаю А какую информацию хра хранили фигуры Ну там принадлежность к игроку тип фигуры и потенциал доста Проша на самом деле принадлежность к ику белый чёрный А я уж я просто подумал сначала Зачем нужна принадлежность к игроку если можно
00:12:18 - 00:13:52
просто цвет указать А ну конечно естественно вот я подумал что там типа какой-нибудь айди ник или что-то ещё нет нет всё проще Угу О'кей Хорошо да давай тогда дальше пойдём по поводу структуры абстрактный класс интерфейс Ну абстрактный классы они если говорить про абстрактный класс у которого нет абстрактного метода абстрактных методов и полей то он от класса будет отличаться только тем от обычного класса тем что его невозможно создать я Я извиняюсь речь про сравнение абстрактных классов интерфейсов а всё
00:13:06 - 00:14:29
Ну если у абстрактного класса есть только абстрактные свойства и методы то от интерфейса он в принципе отличаться ничем не будет кроме того что кроме множественного наследования Ну и кроме назначения то что когда мы объявляем абстрактный класс мы имеем в виду что это какой-то класс базовый А интерфейсов ну то есть это те классы которые будут от него наследоваться они понимает что вот этот абстрактный класс - это как бы то чем они должны являться то есть преимущественно то есть по смысловой нагрузке а интерфейса их может быть
00:13:48 - 00:14:56
много То есть это как дополнительная их нагрузка идёт скажем так ну это для скорее такой вот смысловая нагрузка если мы говорим по функционалу то как я сказал Если только абстрактные свойства и методы то ничем не [музыка] отличается А в каком случае ты бы использовал интерфейс в каком абстрактный класс Ну я сказал только что я понял я про конкретный пример имею в виду мото какая-то сущность [музыка] Допустим Допустим у нас есть какой-то предмет у него есть какое-то основное назначение допустим но мы Мы также можем
00:14:22 - 00:15:49
его использовать Ну допустим в игрушке мы можем подобрать и использовать сковородку как оружие можем ведь можем то есть интерфейс будет как оружие так для готовки используется мне просто что В голову особо что не приходит Ну давай Почему этот пример тоже можно развить хорошо у нас есть некий некая структура данных если можно так сказать оружие Да нет у нас была сковородка но мы можем её использовать как оружие она будет реализовывать интерфейс холодного оружия скажем так прохолодно конечно ты загнул ну
00:15:15 - 00:16:33
ладно оружие просто оружие возьмём да у нас есть какой-то базовый класс грубо говоря оружие Да Угу и конкретный класс - это сковородка или нож Да пускай будет А почему в в конкретном случае что мы используем в качестве базового интерфейса или абстрактный класс то есть мы говорим сейчас то что это является холодным оружием да то есть оно у нас по смысловой нагрузке идёт Ну просто оружие какое-то да Ну пусть будет пистолет и сковородка пистолет сковородка то есть они являются оружием по своей натуре для
00:15:56 - 00:17:03
нас да да Ну у них же может быть ещё и другой функционал у нас же допустим игровой мир не может ограничиваться тем что это может быть просто оружие не знаю это может использоваться в других местах они могут реализовывать другие интерфейсы по сути эти классы могут То есть у нас допустим нож он не может готовить Ну то есть мы не можем использовать как сковородку а сковородку мы можем использовать как сковородку нож мы можем использовать как холодное оружие и сковородку можем а сковородку мы можем использовать как холодное
00:16:30 - 00:17:25
оружие и как для готовки то есть она будет реализовывать интерфейс Э давай давай лучше нож заменим на нож заменим на пистолет потому что нож всё-таки для готовки используется Точно Точно А хорошо а и и тогда в итоге что Ну тем что абстрактный класс в отличие от интерфейса он оружие - это абстрактный класс или интерфейс оружие - это абстрактный класс а интерфейс у нас это инвентарь для готовки скажем так типа приготовить это Интерфейс Да ну у нас какой-то плохой на самом деле пример выходит Я хочу не знаю Хотелось бы
00:16:58 - 00:18:22
что-то более наглядное сказать но что-то в голову ниче не пришло Ну они все будут сводиться к этому просто нужно объяснить почему то есть любой абсолютно любой пример мой любимый пример это кошечки собачки или как показать Интерфейс это вообще лю пример это способы доставки там не знаю у тебя есть посылка Да у тебя есть класс который там не знаю Ну способы доставки пусть будет документов Да можно документ отправить через почту можно курьером можно вообще электронно отправить документ Вот у тебя
00:17:40 - 00:19:06
например один класс который реализует интеграцию с там не знаю С почтой России грубо говоря второй класс - это там с курьерской службы там Яндекс например а третий - это вообще отправка на email да Это вроде как три все эти три объекта связаны друг с другом при помощи действия какого-то определённого они все доставляют документы так или иначе и вот это пря сча ког нужно использовать интерфейс потому что объекты объединены действием если бы объекты были в большей степени объединены свойствами то тогда
00:18:28 - 00:19:55
можно было бы использовать абстрактный класс Слушай ты мне прям напомнил мой пример про принцип разделения интерфейсов Солид е выскажу сва и Солид не знаю неважно Я просто в какой-то момент времени начал его Solid тоже называть но мне кажется solit правильно главное это чтобы понятно было О'кей Ну вот в принципе вот если тебя спросят по поводу вопроса когда использовать Интерфейс это абстрактный класс вот про интерфейс не знаю более понятного примера чем с доставкой чего-либо Мне кажется нет И тут не ограничивается
00:19:12 - 00:20:31
доставкой какого-то документа тут например там я не знаю может быть доставка реально при помощи какого-то транспорта например доставка по суше там по воде и по городу теб нужно реализовать класс который будет там не знаю доставлять в рамках одного города это на машине например в рамках мира это например там не знаю на самолёте или там не знаю на какой-то остров там на третьем объекте интерфейс А какой базовый класс будет тогда нет в данном случае будет интерфейс базовый Опа хорошо Ну у них у всех будет метод
00:19:56 - 00:21:25
Аля доставить Delivery и там А если пример с абстрактным классом то я бы с абстрактным классом пример мой любимый это Кошки собачки просто милый пример у тебя есть клас an Даня чтобы пересека чтобы у него был абстрактный класс интерфейс то есть как-то вот так то есть чтобы смотри Т Смотря в чём В чём смысл вот этих примеров в том то что они ярко выражают выбор То есть ты ярко можешь показать для чего ты это сделал в любом случае для любого случая можно подогнать любой пример просто будет не такой яркий
00:20:39 - 00:21:57
если ты говоришь про вот эти способы доставки какой абстрактный класс можно придумать и как его перевернуть немножко то Ну сложно так прямо однозначно сказать просто Смотри когда мы задаём вопрос что используется абстрактный класс или интерфейс Мы выбираем что-то из этого а не не используем оба понимаешь почему сложно придумать второй пример на один и тот же кейс Ну типа я не могу сказать в одном и том же кейсе используя и абстрактны Лантер из этого есть Солид который я выписал это у нас птица птицы Они же
00:21:21 - 00:22:34
могут реализовывать интерфейс птицы Да ну то есть птица она может плавать летать и ходить то есть какая-то же птица она что-то из этого не может делать правильно Поэтому разделяем интерфейс на Три разных интерфейса каждая птица которая что-то может делать Она будет реализоваться какой-то конкретный интерфейс птицы но при этом то есть какая-то птица будет просто ходить не знаю допустим Ну не знаю тако птица на самом деле кото просто будет ходить ну вполне можно представить птицу которая будет плавать и ходить плавать и
00:22:03 - 00:23:02
летать Я знаю только одну птицу которая может плавать Ну нет не знаю такой и пингвин птица Нет он ходить ещё может Ну да Нет я имею в виду я других птиц не знаю которые умеют летать ой плавать Ну вот они реализовывает разные интерфейсы но при этом эти интерфейсы они могут не быть привязаны просто к птице и при этом все эти птицы будут ни будет базовый абстрактный класс птицами вот как те такой пример А для чего нужен базовый абстрактный класс в данном кейсе не знаю просто приплыл Ну смотри ты создал три
00:22:32 - 00:23:49
интерфейса предположим Да и наделил ими эти классы да А абстрактный класс тут при чём Ну просто для приме при в виду то что вот я привожу пример и говорю что здесь я бы использовал интерфейс я не могу сказать что я бы здесь использовал и интерфейс и абстрактный класс То есть я не могу найти Аргументы и для того и для того потому что ну как бы так не бывает Они же все птицы то есть там ну просто класс бы использовал Ну а а Ну смотри у тебя же м как тебе сказать-то смотри у тебя есть контекст и есть выбор
00:23:14 - 00:24:33
что тебе использовать Вот как я рассуждаю Смотри у меня есть какие-то два объекта Они схожи по там по каким-то свойством своим объекта Да я понимаю что мне нужно объединить эти свойства для какого-то конкретного кейса вот у меня есть какой-то задание Например мне нужно там я не знаю у кошечек собачек использовать его имя там не знаю в зависимости от того Какой объект передали использовать А хотя нет количество лапок например да страшно страшный пример Почему мне нужно мне нужно там не знаю вот для
00:23:57 - 00:25:17
ребёнка приложение делаю он он тыкает на животное пишет количество лапок А мне нужно проверять правильное оно или нет Вот соответственно я использую свойства какого-то объекта а животные могут пить разные там животные могут люди Я не знаю Ну животные могут быть там я не знаю собачки кошечки там и прочие существа Вот и я конкретно использую их свойства объекта это конкретный контекст вот если же я хочу использовать именно действия какие-то общие у объектов то я использую интерфейс как в примере с доставкой это может быть
00:24:40 - 00:26:08
абсолютно разные абсолютно разные какие-то сущности Вот как ты сказал Да с сковородкой вот сложно приплести сковородку к оружию в реальной жизни но важен контекст использования если мы говорим про действия которые которым можно совершить с этим предметом да то понятное дело скорее приоритетнее будет использоваться интерфейс Если же мы говорим про свойства каких-то объектов общие свойства объектов то приоритетнее будет используется абстрактный класс если ты говоришь про твой кейс с птичками то в
00:25:26 - 00:26:49
рамках этого ты используешь абстрактный класс потому что тебе важно выделить их свойства но так как тебе ещё нужно дополнительно что-то сделать Ну хотя вот опять же контекст использования важен здесь для чего тебе нужно объединять их как птичек Ну чтобы допустим чтобы было Ну может чтобы как-то использовать их чтобы не знают там по небу летает именно птичке а не самолёт чтобы понимать это как-то так ну то есть чтобы как-то программа понимала что это птица а не самолёт или какие-то другие объект как-то
00:26:12 - 00:27:28
Так может Ну я просто придумаю сейчас находу Я поэтому тебе и говорю важен контекст то есть конкретный кейс вот поэтому я и объясняю кейс А мне нужно там отправлять документы да Ну вот как я объяснял с интерфейсами вот отправлять документы там электронны через электронную почту там и так далее в этом и суть что я объясняю контек Для чего мне нужен нужны эти классы и для чего мне нужно их объединять Ну например для того чтобы клиент пришёл написал адрес и в зависимости от адреса там это и это конкретный адрес в городе там знаю Или
00:26:49 - 00:28:07
это конкретный адрес в мире в зависимости от этого мы выбрали какую-то интеграцию у Ну мне кажется на самом деле мы очень развали эту тему то есть Ну да в принципе да Окей давай давай дальше пойдём Ты очень хотел про Solid поговорить Давай поговорим про Solid Так ну Solid это первое это в принципе едино ответственности О это открытости закрытости это в принципе Барба - это у нас принцип разделения интерфейсов и это то есть принцип инверсии зависимости у нас короче давай начнём с принцип постановки
00:27:29 - 00:28:52
барбера лисков Ну то есть класс Потомок он должен выполнять тот же функционал что его предок То есть когда мы поем собой жида то что планировалось когда мы меняем тип с я Я очень люблю это определение Давай на конкретном примере Так ну я слышал да то что у тебя были давали пример с квадратом с кубом Ну по вычисление площади Да ну то есть мы должны получить площадь когда мы поставляем ты второй раз говоришь про то что у меня кто-то говорил и мне второй раз кажется что говорил именно я да Ну значит ты говорил Да давай вот по поводу
00:28:15 - 00:29:40
площади там не совсем куб там скорее квадрат и прямоугольник но давай вот этот пример поподробнее Ну короче мы должны то есть мы ожидаем от потомка тоже самое что и ожидали бы от предков То есть он функционал поменять должен Ну может поменять но суть его должна сохранение ожидаемого ответа вот отве Давай давай всё устим давай Вот смотри есть пример с квадратиков ется нарушением принципа подстановки барбер лисков Ну в том что он вернёт не площадь не знаю а что-то другое это будет нарушением счита Ну
00:28:59 - 00:30:28
смотри у тебя есть базовый класс там не знаю фигура да да Или какой у тебя базовый классс в в данном случае ну какой-нибудь многоугольник может быть Ну пускай фигуры будут есть все фигур наверно есть пусть будет Пусть будет прямоугольник родительский класс а база а Наследник квадрат Да мы ожидаем мы нарушаем Принцип барберы лисков если мы Ну то есть цель вычислить площадь фигуры У нас есть прямоугольника квадрат Что является нарушением принципа подстановки Барбара лисков Ну нарушением будет если
00:29:47 - 00:30:53
он вернёт не площадь который он должен почитать А например что не знаю единичку просто единичку т ну это не совсем то это максимально Ну пускай не площадь периметр что-то другое вернёт Но то что нам не нужно то что мы не хотим увидеть Там просто яркий пример как раз таки там тоже площадь там яркий пример с тем то что у тебя там прямоугольник сторона стороны прямоугольника площадь прямоугольника вычисляется использованием двух сторон а площадь квадрата с использованием одной стороны в этом и суть
00:30:20 - 00:31:47
что наследник Ну мы не можем например квадратно от наследовать от Ну точнее прямоугольник от наследовать от квадрата квадрат является прямоугольником квадрат является прямоугольником вот мы можем квадрат от наследовать от прямоугольника квадрат Почему нет Нет почему почему если мы наследуем квадрат от прямоугольника без разницы мы можем передать обе стороны Просто они будут равны Да ну здесь всё нормально а а наоборот мы можем Вот про наоборот это будет Неправильно Поэтому нам нужно будет переопределить То есть мы не можем
00:31:04 - 00:32:29
у прямоугольника одну сторону умножить на себя просто это будет Неправильно А сейчас дашь какой-нибудь пример тоже я Я где-то видел ещё пример какой-то Я у просто не помню ну здесь как бы просто любой который Ну в том числе с реальными объектами допустим в игре То есть если мы какого-нибудь персонажа к себе просим подойти а он этого не делает то это будет нарушением считаю то есть действие Подойди сюда он этого не делает значит он нарушил принци Хотя он должен не выполнил ожидаемое действия значит он его неправильно Ну этол принци
00:31:47 - 00:33:06
постановки барбер лисков не о том скорее наверно ну в какой-то мере можно конечно прицепить это но Ну видимо какие-то плохие примеры сегодня придумываю так а а что какие ещё примеры можно то есть возможно тебе кажется что я неправильно понимаю то есть Возможно это не отом просто я пытаюсь сейчас Найти какие-нибудь примеры яркие Угу Ой блин такие сложные примеры придумывают О боже я я просто запомнил один раз пример с квадратикам и прямоугольником Да и то я про него уже давно забыл А тебе всё напоминает и напоминает
00:32:31 - 00:33:49
Да да я меня на собеседовании не спрашивают про сорит Да меня на собеседовании мало О чём спрашивают на самом деле о том что о чём я спрашиваю сейчас угу вот Окей давай скип нем его и всё дальше пойдём давай про Di Ну принцип инверсия зависимости заключается в том чтобы типа обращаться к классу через интерфейс Ну это пример просто то есть модули верхних уровней они не должны зависеть от модулей нижних уровней абстракции не должны зависеть от детали деталь должна зависеть об абстракции то есть мы когда нам приходит
00:33:13 - 00:34:33
объект какой-то да класс Я очень обожаю эти определения Они настолько абстрактные что никто ничего не понимает Вот поэтому я и даю пример да Поэтому да Поэтому я и спрашиваю пример нам приходит объект какой-то Да мы его приняли Но мы его используем как интерфейс который он реализует вот то есть мы Обращаемся к нему через интерфейс использование интерфейсов уже является Di Блин не знаю но мне кажется да то есть если мы Почему нет мне просто некому на самом деле вопрос задать я как бы Узнаю сейчас об
00:33:56 - 00:35:27
этом Ну окей хорошо Давай дальше глубже пойдём Вот у нас есть dep inversion инверсия зависимости Да есть некоторые механизмы которые позволяют нам не нарушать принцип Какие ты знаешь не нарушать я на самом деле вот это вот принцип D Да я его не люблю потому что я его плохо понимаю поэтому поэтому и спрашиваю про два принципа которые обычно мало кто любит это лисков и Di остальные все очень простые просто в понимание так ну в чём вопрос заключается ещ раз Ну Смотри Вот у нас ты ты считаешь то что использование
00:34:41 - 00:36:15
интерфейсов является Априори не нарушением Дия Ну то есть принципы dep inv Да вот поэтому я пытаюсь узнать каким конкретно образом можно вот блин как бы не сказать ответ и задать вопрос это сложно так Ну вообще вот ты говорил то что он там какие-то объекты низкого уровня не должны зависеть от объекта высокого уровня Там они оба должны зависеть абстракции Да ну то есть вопро Ну да я говорил то что модули верхних уровней не должны зависеть от модулей нижних уровней Да оба должны зависеть от абстракции а
00:35:33 - 00:37:12
абстракции не должны зависеть от деталей детали должны зависеть от абстракции То есть у нас есть методы которые мы реализуем в каком-то Ну допустим репозитории Можно же использовать как пример да то есть у нас есть интерфейс репозитория мы его реализуем и потом когда мы перекидываем репозитории мы используем как интерфейс я бы не сказал на самом деле Ну как базовый пример можно сказать дари что Тае Что такое знаешь знаю давай начнём тогда с АКа Ну нет блин я я хотел его прочитать Но что-то я забыл не
00:36:23 - 00:37:51
знаю хорошо что такое вернёмся к этому вопросу Ну тем что можно я определение пись Дане на самом деле опреде даже тот же самый для Давай по-другому Для чего используется dependency injection Ну для того чтобы передать зависимость этого то есть чтобы в репозитории использовать контекст То есть это будет зависимость А в сам контроллер мы передаём репозитории то есть вот такие вот примеры вот мы зависим от этих классов и они передаются через класс который специально предназначен для этого то есть который создаёт эти жизненные циклы
00:37:12 - 00:38:48
так вот тяжко что-то Хорошо давай по-другому Что такое связанность и связанность какие-то два слова одинаковых я что-то не расслышал связанность и связанность нет не могу сказать наверно как там он кохен и этот и Каплин что ли Каплин Да не слышал Нет ну если вкратце мо ска Давай давай по-другому ещё проще гораздо смотри что такое тесные связи между объектами ответственные связи между объектами тесные связи нет я такое вообще Впервые слышу на самом деле хорошо вот мы говорим про абстракции Да что у
00:38:04 - 00:39:38
нас моду х уровня не должны зависеть от модуля нижнего уровня Да они все должны зависеть от абстракции Что из себя представляет абстракция если абстрагироваться от того что это интерфейс Ну то есть это очертание очертание объекта который мы ожидаем это угу если мы не будем использовать абстракции что может произойти Для чего нужен вообще этот принцип Ну чтобы можно было легко подменить один класс другим В разработке [музыка] значит они будут меньше связаны Да из изменени в одно Ну то есть чтобы
00:38:55 - 00:40:19
можно было более гибко управлять нашим кодом грубо говоря хорошо Для чего нужен Di depend injection вот у нас Что такое мы уже поняли примерно что такое injection для чего он нужен вот вообще абстрактно Для чего люди его используют в принципе почему мы не можем просто писать равно New и всё как бы не проблема же что такого Блин я я думал там это связано с жизненными циклами как-то Ну жизненные циклы как бы можно и реализовать Ну как правило Можно даже использовать всегда транзиент тоже не проблема
00:39:37 - 00:41:07
[музыка] Угу либо же можно Ну то есть нет не жизненно ЦИК возможно как фичу можно использовать но в целом Это скорее необходимость вот если убрать из dependency injection жизненный цикл ты бы стал использовать dependency injection то есть они всегда бы создавались блин загадка Мне кажется что-то мне не приходит ответы на ум ну тут лёгкий ответ да или нет вот можешь капельку подумать предположить какую-то версию Ну я видел что вообще так делают вроде как Ну в примерах Ну не знаю Я просто делаю Как как
00:40:27 - 00:42:13
учили вот а они когда учили объясняли Почему они так учат Нет это не очень хорошо Ну окей Тогда Давай плавне перейдём уже с этой темой солидо Нет давай я хочу узнать ответ это надолго если если хочешь короткий ответ то использование нужен для того чтобы ослабить связи связи говори было подменить Но если ты везде в коде напишешь New легко подменить не будет а Ну да если ты как бы Di пропишет там не знаю что вот для вот этого интерфейса Используй вот этот класс Ну к точнее Да а потом везде будешь инжектить именно
00:41:24 - 00:42:59
там не знаю через конструктор например интерфейс и ему будет подставляться создаваться экземпляр класса то в таком случае когда тебе надо будет изменить реализацию интерфейса ты в одном месте просто меняешь с одного типа на второй Тип и всё Если же у тебя не используется Ты везде где ты создавал этот класс должен заменить этот класс Да я вспомнил Для чего всё это есть к разговору О связанности связанности ну поэтому я нача Так давай тогда дальше пойдём так я хотел по поводу интерфейсов спросить вот эти
00:42:12 - 00:43:30
вот наверное с какого-нибудь абла Ну давай в контексте Link наверное ответы давать да В чём их отличие в контексте Link Ну давай тогда другой интерфейс возьмём например idisposable что это такое idisposable Это нужен для того чтобы производить очистку памяти в классе то есть почиа ссылки Ну то есть блин это интерфейс который позволяет нам создать классс disable и он если мы говорим про у него же шаблон Microsoft Да по которому все работают Слушай ты стал очень громким стал очень громким ужас потише будем так ну то есть обычно
00:42:55 - 00:44:27
к нему ещ прилетает вопрос шаблон Ты про да по и лай В чём отличие Ну тем что лай он вызывается этим сборщиком мусора карпич коллектором а способо мы должны сами вызывать пожеланию ну к этому можно ещё и третий вариант приобрести который Н он тоже мы можем очищать ресурс то есть мы будем сейчас говорить об интерфейсе Ну об интерфейсе можно сказать что он просто заставляет нас реализовать класс если мы говорим в [музыка] контексте он должен запрещать работу очистки этого метода запрещ способо который как раз зачищает
00:43:42 - 00:45:30
Неуправляемый ресурс но при этом отличие должно быть в том что этот метод сборщик Ну вот этот вот способ должен вызывать без зачистки управляемых ресурсов а способ он должен вызывать с очисткой управляемых ресурсов Ну потому что он и так их почистит А когда мы вызываем способо мы должны сами об этом позаботиться Слушай два момента во-первых тише не стало А во-вторых ты очень сложно объясняешь на самом деле Давай попроще тогда как упрощаем Давай лучше со звука начнём звука Да стало тише да да вроде
00:44:57 - 00:46:27
не меняется звук Ты как до этого громко говорил так и сейчас скажи что-нибудь вот говорю очень громко Ты точно там крутишь стало э не знаю скажи Ещё что-нибудь тише стало А ты специально громко говоришь Ну не знаю наверное ну ты прямо ня смущаешь не знаю я просто на на компьютере звук выкрутил уже в 15 и всё равно громко ещё убавлять Да вроде как Нет давай про Да оставляем давай про Я пропо понял просто я ну то есть в принципе я понял подумал посидел и понял но надо упрощать мне кажется если тебя
00:45:44 - 00:47:24
спрашивают пропо Ты просто говори не вот эту теорию всю которую ты где-то вычитал да Старайся сначала сказать короткий ответ если тебя попросят раскрыть раскрывать его то есть короткий ответ в м заключается наме а потом раскрывать дето так всегда то есть начинать с какого-то простого ответа Если ты переживаешь что они подумают что ты ничего не знаешь Ты можешь назвать простой ответ потом сказать нужно подробнее или нет ну то есть уточнять Угу Просто ты начинаешь усложнять и закапывать сразу же а то
00:46:36 - 00:47:48
есть я сейчас закопал Да ну некоторые Ну кое-что там путать начинаешь вот такие вот вещи я я конечно понимаю что там то есть в О чём речь но начинаешь путаться из-за этого могут как бы это спросить так сказать Ну ты можешь спрашивать это мне интересно то есть нет я же понимаю что ты имеешь в виду понимаешь в чём прикол просто ну суть такова что не надо пытаться одну один короткий вопрос отвечать там не знаю 10 минут потому что никакого собеседования для этого не хватит суть такова что Старайся сказать короткий ёмкий ответ
00:47:12 - 00:48:30
если ты переживаешь что они подумают что ты мало знаешь то ты можешь уточнить Но как правило интервьюер сам уточнит если ему это будет нужно вот тоже самое вот Солим когда мы начали обсуждать Sol ты хотел по порядку каждый из них описывать начать вот вообще как выглядит ответ по соду когда те спрашивают про Солид не нужно Каждый каждый при в принципе Тае это некий набор принципов который позволяет не знаю нам писать более красивый качественный код могу рассказать про принципы вот Ну что-то такое то есть не нужно сразу
00:47:52 - 00:49:20
закапывать Вот вот поэтому потому что каждый вопрос Если интервью это нужно он будет уточнять еша поко тея перебивать вот а как бы нужно ВС успеть вот в ЧМ суть Да давай давай пойдём дальше Просто я хотел про асинхронность спросить просто уже время 50 минут А мы как бы на базовых вещах давай про асинхронность чуть-чуть потом чуть-чуть проне чуть-чуть про ом и всё Наверно так очень много выпускаем Короче мы сегодня просто давай сначала про Конкретно что такое класса который на самом деле ни о чём не говорит Кроме того что в НМ может
00:48:40 - 00:50:35
использоваться это уже тот то выражение которое создаёт асинхронно асинхрон мы более эффективно используем поток то есть поток у нас не просто сидит ждт что что-то вернётся он в это время бы на моменте он такой Ладно я пошёл выходит изме Ну вот это асинхронного метода идёт дальше При этом когда закончится он синхронно пойдёт по асинхронному методу дальше пока закот Ну поему обёртка над таском так не очень понял что ты имеешь в виду под обёртка Ну то есть то что компилятор его превращает в нормальный код и там вроде как находится
00:49:39 - 00:51:30
и стоит машина Но об этом м лучше не закапывать себя Ну нет я к торе вместе с Тами Да вот скорее ай - это некий синтаксический сахар ключевое слово который позволяет нам удобно работать с асинхронными задачами то есть по сути Он позволяет нам не блокируя поток дожидаться выполнения метода вот что делает Эй выполнение асинхронного метода Ну я правильно ответил да ну в целом то правильно нигде не обманул просто я мне пришлось Ну саму суть до рассказать вот Окей хорошо Ну а в целом по поводу того что ты сказал всё верно
00:50:43 - 00:52:33
Да Давай пойдём дальше по поводу Давай по поводу многопоточности вот смотри у нас есть проблема Да когда мы Обращаемся К данным из разных потоков ти различные казусы да Как побороть эту проблему казусы - это обращение к одним и тем же ресурсом Ну например мы Обращаемся к одному и тому же объекту Да и мы меняем его из разных потоков одновременно Ну мы создаём в потоке допустим в этом классе Мы создаём какой-нибудь объект по которому мы определяем использует ли какой-то поток уже его и по нему лом То есть пока
00:51:43 - 00:53:07
объект залочен весь код который мы засунули в ЛОК он не будет использоваться а там будут как раз располагаться те ресурсы которые не должны одновременно из нескольких потоков меняться подожди подожди подожди весь код который мы засунули в ЛОК он что он должен обрабатываться только одним потоком А ну вот у нас есть конструкция дало сри секции да Ну да там ну это ког мы Да когда мы вешаем что что ло - Это обёртка над монитором Хорошо давай по-другому у нас есть конструкция Да и критическая секция
00:52:26 - 00:53:47
что мы пишем в локе в локе мы используем как раз тот код [музыка] который скобочки внутрь что-то передаётся что передаётся внутрь лока вот в параметры переда переда какой-нибудь объект Ну просто обыч об можно передать Угу и дальше если за этим объектом обращаются с двух потоков да то что будет ну второй поток будет просто сидеть и ждать пока другой закончит Угу А если он долго будет выполнять что будет будет долго ждать разумно хорошо есть какие ещ механизмы синхронизации потоков с использованием
00:53:06 - 00:54:38
различных данных Ты знаешь там есть коллекции которые потока безопасные Какие знаешь Блин я не помню там я помню что они есть но я не пом не могу о них ничего рассказать К сожалению Ну давай тогда сефор что-нибудь слышал такие слова ну это примерно тоже самое что монитор по-моему ксеноморф он только для несколько семафор ксеноморф он может семафор неважно Ну короче есть есть ещ другие есть другой метод который позволяет сразу несколько потоком получить доступ к этому участку кода скажем так к этим ресурсам А в чём
00:53:55 - 00:55:12
разница вообще между семафором и ксом знаешь Нет симор он по-моему не Ским позволяет а семафор молчу Это это блин Это это некий светофор светофор только семафор это семафоры вот на железных дорогах используются как знаю как Светофор на дороге я буду повторять этой ночью как произношение Ты просто Называешь его ксеноморфов ксенофо нет ксенофо бом его точно нельзя называть Хорошо не будем так вот А вот Извини я тебя перебил семафор и м В чём разница не помню я помню что но морф он может нескольким потоком доставлять
00:54:33 - 00:56:11
доступ к этому уча кода я не могу привыкнуть ксеноморф всё Извини пожалуста несколько потоков могут работать с этим участком кода амкс вроде как есть вроде как смысл в синхронизации потоков в том что с этим объектом работают несколько потоков у них одинако короче запутался что-то запутался вот там Разница в том что можно выстраивать очередь Тот что на с там не могут устраиваются очереди ютекс могут а оэ не могут я Ладно что-то ещё можно ска можешь сказать по этой теме Я могу про аппаратную часть поговорить потому что
00:55:24 - 00:57:07
это больше аппаратная фича Ино многопоточности Я в шоке пока ты точно не напутал по поводу мюк сов и семафоров наоборот Как раз-таки из названия семафор - это Светофор понимаешь то есть один сидит на зелёненькое другом на жёлтенький третий на красненьком И ждёт а у МКС это у него там типа один грубо говоря только красненький понимаешь всё-таки напутал потому что я эту тему не у Да ну то есть да ты немножко перепутал как раз-таки мьютекс у семафора как раз есть очередь грубо говоря угу вот О'кей хорошо А что ты спрашивал
00:56:24 - 00:57:43
Извини ну то что я могу рассказать у многопоточности про аппаратную часть потому что это больше аппаратная фича а не программная А что ты можешь рассказать про аппаратную сть Ну то что потоки Они же находятся внутри процессов процессов у нас много потоков может быть процессов много всё это хранится оперативной памяти процессор постоянно по ним скачет всё это обеспечивает контролер прерывания у Intel это 8259 И вот у него есть таймеры которые позволяет ему как раз скакать по этим потокам и обрабатывать их Я думаю что
00:57:08 - 00:58:11
это не столь принципиально хорошо но но очень интересно что ты это знаешь Ну просто понимаешь это Это хорошо Да чтото ты значит но это Скорее Может быть плюсом нежели Основной причиной предыдущий вопрос он как бы перекрывает то что я его не знаю вот эти все знания Да да да то есть это очень хорошо что ты знаешь устройство процессора в принципе да как работают это всё очень очень хорошо Прекрасно Но если ты не знаешь то как использовать это это плохо Вот о чём я говорю так ты базу знаешь а то как работать с
00:57:40 - 00:58:58
этим не знаешь Понимаешь вот в ЧМ проблема Это не проблема на самом деле просто тебе нужно чуть больше времени Подготовиться и всё тут как бы прочитать про семафоры мьютексы про там коллекции вот эти Аля concur кри это всё ерунда Ну то есть один раз вот у тебя я спросил Ты сегодня или завтра садишься и читаешь про это и всё на собеседование отвечаешь прекрасно Если спросят потому что не всегда спрашивают Может на Джуна вообще не спросят я так чисто ради приличий спросил ВС спрашивают так принципы ВП
00:58:21 - 00:59:49
коллектор будем спрашивать нет нет хорошо Кстати по принципу я про них вообще забыл нуно у тебя спросят если очень хочется то про полиморфизм скажи что это такое Ну полиморфизм он вообще делится на три типа в Доне Ну в си шарпе У нас есть хок полиморфизм есть параметрический полиморфизм есть полиморфизм по типов это уже конкретно к коп относится Что такое хок полиморфизм Ну это у нас к ним как раз относится перегрузки методов к ним относится преобразование одного типа к другому Ну то есть там восходящее преобразование и
00:59:05 - 01:00:29
нисходящее преобразование афигеть это так и называется Нет нет нет про восходящие нисходящее это где-то в определениях было написано Да да я просто никогда не слышал таких слов я обычно называю вот кстати англицизмы вот у тебя много англицизмов поэтому я что-то да я поэтому восходящие я только про солнце знаю восходящий Ну я в первый раз честно говоря сы про восходящее нисходящее Вот Ну вообще Да наверное чаще всего я слышу про акан Касты Окей ну нет это это ни в коем случае не замечание к тебе просто
00:59:52 - 01:01:16
интересное подметил Интересно так есть ещ мне хватит хорош всё всё хорошо я я понял что тып знаешь понимаешь Так примитивы синхронизации потоков такие страшные слова по факту Там как бы ничего нет Да Окей хорошо Давай немножко про поговорим а то только Проша так неинтересно Так ну что там жиз давай не давай начнём с вообще работал сонетом не с кором spnet Я что-то вообще эти разницы не помню В чём разница е честно Ну скорее всего не работал просто ну это было давно и неправда А ну spnet Core стал
01:00:32 - 01:01:58
популярным уже в году се 16м сем уже популярен был поэтому того что ты работал снем не работая нигде ну е только где-то на практике Ну не суть хорошо я просто Можно обычно спросить В чём разница вот Раз ты меня спросил поэтому я не вижу смысла спрашивать Хорошо давай поговорим про не будем говорить Я так понимаю ты это знаешь потому что ты сам говорил про циклы циклы Давай поговорим про Вари Ну важная часть Что такое Вари с чем е едят чего нуж у нас обработка запросов происходит по принципу контейнера то есть эти вот контейнеры
01:01:15 - 01:03:02
они по сути есть Подожди подожди контейнер ты имеешь в виду по принципу [музыка] пайплайн тру поему не па па - это труба А это выстроены по конвейеру не контейнер конве кон так это связующий программный компонент То есть он задействуется до того как данные попадают на сервер но до того как попадут контроллер есть у нас каждый связующий компонент он его обрабатывает и передаёт Следуй конку Что такое Ну Next это как раз Он передаёт следующий связующий компонент то что он если ты пишешь свою варю и не вызвал
01:02:10 - 01:03:47
метод Next внутри метода Вари что будет ну он будет как он как он называется этот сведущий компонент будет последним в таком случае а как обратно смотри там же у нас есть такой пайплайн что он идёт обработка запроса и возврат ответа Каким образом он возвращает ответ там вот на сайте по-моему Microsoft есть такая картиночка красивая где весь конвейер выстроен может видел Нет не видел это вообще я тему узнавал сегодня на самом деле А ну посмотри вот на сайте Microsoft про midle War там очень-очень подробно и
01:03:02 - 01:04:23
хорошо написано Мне нравится очень там и про экшн фильтр хорошо написан ну вот Повтори вот там вот там красиво нарисован вот этот график конвейер обработки запросов запроса а синие такие квадратики Да прямоугольники такие со стрелочкой Я видел это то есть да это довольно-таки популярная картинка она просто чаще всего в голову приходит когда про спрашиваешь то что вот эти вот связующие компоненты могут обращаться к другим перед их выполнением пос выполнения очень сложно задать вопрос вот связанный с тем что вот у нас есть
01:03:43 - 01:05:09
он идт по варим Да как он обратно возвращается почему он не выполняет код или он же всё-таки выполняет код Ну как он возвращает ответ каким образом По конвейеру он идёт обратно наверно в том что он не выходит из предыдущего компонента статью там дофига информации но вот тебе главное понять как он идт по как он идт по конвейеру тебе не нужны детали вот эти Да тебе нужно посмотреть э вот Картино и прочитать про неё как её объясняют Вот давай давай дальше пойдём Профит что-нибудь слышал Так э что ещё
01:04:30 - 01:05:49
экшн фильтры нет в тойже самой статье прота делать Ну как понимаешь Нет ну я примерно представляю зачем они честно говоря на самом деле не понимаю потому что многие делали свои Вари но не знают как они работали работают просто берёшь пример Как сделать Вари он тебе показывает копируешь вставляешь встраивать конвейер Это значит что поставить в нужном месте Да вот поэтому Многие знают делали но не знают что как они работают Не ну как бы если говорить про это Я использовал допустим А привести какую-нибудь
01:05:15 - 01:06:50
ссылку на базу данных это же использовать как раз midle всё Ну то есть из ссылку на базу данных я не очень понял Ну вот это вот из файла upsetting Ты про I configuration Ну да то есть там создаёшь статический класс там туда Закидываешь ссылку по сути ты же Лером пользуешься Нет ты Аком пользуешься Всё я ничего не понимаю Короче смотри у тебя есть Ну наверное ты когда начал изучать Блин ну можно наверно сказать пару месяцев назад а значит ты ещё не застал момент когда были два метода конгур Серви и
01:06:04 - 01:07:27
конгур сейчас для тебя да был стартап и было два метода config се и конгур просто застал вот значит config servic ты регистрируешься ва а гдето тебя метод config у тебя там регистрируется зависимо информа то из контейнера э через его достать в любом классе эти методы для разного нужны Почему почему ты запутался Потому что во-первых сейчас их объединили во-вторых в любом там в любой библиотеке ты пишешь Сначала это что-то а потом use что-то Да одинако короче используется не совсем то есть на самом деле подразумевает что
01:06:47 - 01:08:20
что-то есть наме не зна вот для подразумевается то что ты в I контейнер регистрируешься необходимые классы Для дальнейшего использования этого самого контекста А когда ты в midle Варе пишешь там не знаю use use course например ли use autorisation Это значит что когда твой запрос будет обрабатываться он будет использо ну то есть он он строится в конвейер обработки запросов То есть это совсем две разные вещи и для разного использу но когда ты Подключаешь библиотеку например там вот тот же са Ну вот Какие Ну вот у меня в
01:07:48 - 01:09:17
голову первое что пришло это свар да У тебя что там в коде у тебя сначала пишется Swag а потом Вагер и тебе кажется что это одно и тоже Ну вот Ну если так копать то по факту одно - это Одно второе это как бы совсем другое но оно и то и то нужно для подключения библиотеки грубо говоря Ну примерно понял хорошо да Ну вот прочитаешь про Вари Мне кажется станет сильно понятнее Окей давай для чего они используются Я примерно понял чтобы отсеять часть запросов до попадание в контроллер то есть с этой целью Знаешь
01:08:32 - 01:09:55
мне кажется даже больше ну в том числе и этой но в тойже мере для преобразования запроса так говорить тови можно сравнить его с с билдером То есть у тебя есть то есть Билдер это паттерн всё-таки не поведенческий Это скорее не поведенческий паттерн поэтому про ты его на вход подаёшь на выход он обработал там по-разному какие-то данные изменил заполнил что-то и так далее и на выходе получил там результат Да можно сравнить его с билдером Вот то есть суть Такова это этих лва чтобы из входящего там запроса
01:09:14 - 01:10:49
получить какой-то ответ Вот для чего нужны лва Да там там Если вдруг в коде произошла ошибка например ты Ишь какой-то эфир или свой написал свою ваю написал которая модифицирует ответ то есть у тебя в коде произошел по сути это псо да Но ты можешь заменить е например на тую и описать там в коде произошла ошибка Извините обратитесь к вашему там не знаю менеджеру для решения проблем вместо того чтобы там написать там не знаю Ну я понял да Вот то есть Тем самым ты преобразовал ответ повлиял на него окей Да я просто тоже называл
01:10:13 - 01:11:48
отсева это оказывается преобразование хорошо А что значит отсеивать [музыка] - это что-то было и мы что-то убрали Ну да наверное так правильно называть отсева например пришло много данных а на выходе ты мало данных получил из этих из этого большого грубо говоря отсеивать - это то же самое что фильтрация Ну то есть ну то что выкинешь Короче просто безвозвратно да А тут скорее как бы дополнение что ли Если говорить с этими терминами то короче Ответ должен быть midle он должен давать ответы е если Правильно Потому что я сказал Не
01:11:04 - 01:12:24
сказал неправильно То есть я имел то что он должен в том числе возвращать то что что-то не так с запросом То есть я это тоже имел в виду То есть я чтото пример видел вот сегодня смотрел то что допустим у нас один и тот же пользователь делать запросы и то что этот запрос То есть он будет стоять будет свой АШК То есть он может по нескольким микросервиса работать и если этого ашнико не будет запроса Ну то есть то он должен вернуть ошибку так понятно сказал Ну я пока не понимаю для чего но понятно да
01:11:44 - 01:13:06
Угу Ну можно можно сделать такой можно сделать любой зависит от контекста Да ну Давай перейдём всё-таки от подальше пойдём короче тоже не ответил Ну немножко запутался хорошо Да не ответил Тогда уж да немножко запутался Почитай про на самом деле информации много на том же Microsoft Microsoft вот там очень много и подробно с картиночка просто не углубляя не старайся Выучить все фильтры посмотри са само понимание там вот это Map посмотри там Map там такие базовые штуки какие-то пойми как работают медовые а конкретные
01:12:28 - 01:13:56
экшн фильтры изучать Ну может там один посмотреть какой-нибудь два я не знаю один вот ну мне нравится EX ф есть авф например вот два наверное самых популярных Ну я авторизацию делал неправильно я делаю через сессии а почему неправильно Ну мне кажется это какой-то плохой метод через сессии делать авторизацию аутентификацию идентификацию я бы не сказал что он плохой Он специфический Да ну есть кейсы в которых нужно делать сессионные сессии Например у меня на работе тоже есть сервисы где по сессия
01:13:13 - 01:14:31
Там просто получается токен gvt и этот gvt токен обменивается на сессию Ну это вынужденная мера то есть есть же обёртка над ки а в ки в принципе ничего нет для авторизации А что что ты имеешь в виду что ничего нет для авторизации Ну то есть нет ничего плохого то есть это же использует ки А ну да да да да Ну там там так и работает там на вход приходит gvt а по факту создаётся сессия и сохраняется в Кука угу вот Ну это вот конкретный кейс там есть Окей Хорошо давай по спнет кору аутентификацию делал
01:13:51 - 01:15:14
только по сессия Да gvt ну насколько знаю там есть три типа но использовал только сессию на другим пока не дошли руки не успел Угу Окей слышу что-нибудь Про secs что Про cqrs что-нибудь слышал cqrs наверное нет не слышал а ты мне скидывал вопросы и там есть медиатор Что такое медиатор медиатор Я не знаю кому задавал вопросы тоже никто не знает я посмотрел в интернете вроде Понятно зачем непонятно Ну знаешь это когда смотришь что-то в интернете Ты задумываешься зачем это вообще используется и смотри если ты хочешь узнать что такое
01:14:33 - 01:16:02
медиатор начни с того что такое cqrs ты сам придёшь в понимание того что такое медиатор а у тебя этот видос выходил дадада дада там как раз таки медиатор использовался я я посмотрел его ничего не понял если честно А ну проблема Проблема попробую по другим источникам может понятнее будет хорошо Так тут ещё тут ещё Поли есть это связано с htp Client Factory вроде и нет я я это не отвечу да Ну не совсем его можно использовать вместе с htp клиентом да ну эти два вопроса Я не отвечу поле знаешь с чем связан поле связан с
01:15:18 - 01:16:37
литрами пере отправкой запросов поле нужно для этого для того чтобы запрос пере отправлять Аж тебе клиент нужен для того чтобы в принципе их отправлять понял Ну я понял Я смотрел примеры Просто мне надо как бы в проекте всё это попробовать А как его попробовать я не очень понял Ну я я бы спросил вопросы но я просто и так мы очень много времени занимаем да О'кей Давай быстренько по еф и заканчиваем Угу что такое е ещё раз ти Framework en Framework - это н которая позволяет работать с базой данных задавать миграцию и
01:15:57 - 01:17:14
взаимодействовать вообще с базами данных Окей хорошо Я сразу начну с такого основного момента Это джоны как в ефе мы используем джоны Ну мы погружаем связанные данные Давай поконкретнее скажу то есть как То есть как мы Join используем по итогу вопрос нене не как мы подгружает подгрузить не этот фн А все данные по этому н ну сек используем Нет ещё варианты это связано с Джоном ты понимаешь да так Ну вот смотри у тебя есть две таблицы таблица а и таблица б таблица а ссылается на таблицу б как один ко
01:16:35 - 01:18:17
многим Да вот то есть получается так что в таблице А есть идентификатор таблице б а в таблице б может быть много Ну то есть связь такая что таблица может быть много таблица а суно пер Дада Но вот в как Мы это можем сделать в Да например в Вот ты сказал Нет там этот как там Давай подсказку дам я пытаюсь плавно прийти к НГУ иудин Нет это лучше не спрашивай потому что я тоже не понял что такое я ива [музыка] Да прочитай я знаю что Про это написано очень хорошо на сайте там фреймворка самого если загуглить там найдёшь
01:17:32 - 01:19:31
там сайт называется там прямо написано Хорошо Так ну давай прон что это такое вообще скажу чтобы Да мне не нужен мне не нужен Join честно говоря Ну ты имеешь в виду метод lq Join или что Ну просто как базе данных запросы делаются Ну это короче тебе неинтересно уже А ты про сами запросы в БД имеешь в Ви Да я ждал что вот на эти вопросы Мы же про еф разговариваем мы не про базу данных а ну в ефе Конечно можно сделать запрос сный но как бы тут скорее вопрос про Умку про еф как это при помощи ефа сделать
01:18:38 - 01:19:52
понимаешь Угу Вот хорошо а так так так так так так ну Link я его использовал когда допустим нужно было у продукта атрибут потянуть из АВ таблиц То есть я вот так использовал это атрибут подтянуть не очень понял что значит атрибут подтянуть Ну ев таблица Ну вот а как бы ти атрибут там лу вот это вот архитектурный стиль таблиц А ты про это то есть в таких случаях там использовал То есть если про это вопрос был Ну скорее был вопрос который наводил [музыка] нать хорошо отлично давай так Ну как он используется в
01:19:21 - 01:21:24
линке запросах Ну то есть он отличается давай начнём что это такое для чего он нужен Ну это коллекция которая наследуется от и него отличие в Линк запросах в том что он отправляет запрос в базу данных не сразу забирает данные А вот как паттерн Строитель он принимает разные методы себя погоди секундочку погоди секундочку ты говоришь про различие от Ну я на примере Да различия тоже отложенная коллекция что ещё раз Ну ты говоришь то что I является отложенной коллекцией коллекция отложенного выполнения тоже являтся коллекцией
01:20:27 - 01:22:09
отложенного выполнения об этом есть запрос когда у него просят его ну грубо говоря да грубо говоря да ну I отличается от тем что I выполняется Ну на стороне Ну то что не программа выполняет фильтрацию Ну например например БД например да да в базе данных Он выполняет вопрос да А то что ты говоришь [музыка] прол не знаю можно ли так сказать Ну можно наверное да хотя нет тоже нет по-моему в прошлом видосе ты говорил что материализуется он Ну ну да да Ну это я так называю я не знаю насколько это корректно он мате Ну
01:21:18 - 01:22:56
в моём понимании материализация - это значит преобразование из I во что-то такое сущем конкретное например лист Dictionary ой L Dictionary массив Да во что угодно а действует точно так же Я вот сейчас пальцами делаю кавычки а лизация проходит точно так же да да да я и говорю поэтому они являются обе отложенным коллекциями отложенного выполнения то есть они не сразу выполняются А когда надо грубо говоря это что-то напоминает Lazy Кстати да да что-то напоминает Ну то есть просто в лези там немножко другая суть но в принципе
01:22:09 - 01:23:30
напоминает Да так я на вопрос не ответил по поводу Ну со скидочки 50 на 50 50% какие я ещё не ответил что о было ответить Ну вот то что я тебе сказал по поводу Ну нет Смотри ты начал отвечать просто ты начал отвечать неправильно понимаешь но часть из этого была правильной То есть ты говорил то что отличие Ну то есть ты сказал что I наследуется от и отличается тем что вот он выполняется Ну я дословно не могу сказать что отложено выполняется А я тебе сказал что тоже отложено выполняется То есть это не отличие
01:22:49 - 01:24:03
отличие вот а потом уже возможно я виноват И ты бы это сказал но я тебя прервал а возможно ты ты не сказал бы по поводу того что отличие не в том что они отличаются отложено выполнения а в том что как они отложено выполняются Не ну я это сказал Потому что ты это сказал но в другом видосе Я оттуда списал проложено выполнение или про во понил в м различи а Окей отлично Ну вообще я тебе не помню скидывал ли я видео про 15 вопросов там очень простыми словами Я старался объяснить разницу Между но там получилось так что я
01:23:28 - 01:24:47
слишком детально сказал что там там у тебя не получилось в интервью получилось вот миграции приходилось совать сво при помощи чего Ну с помощью команд в этом как он называется-то печер пакетов Угу понял А Нифига себе этот вопрос прикольный проблема N п1 Я так понимаю очень не спрашивай Да ну а что там рассказываете то что нужно делать немного запросов а один нормальный то есть что ещё можно ответить Я просто не знаю ну коротко вроде как Ясно все здесь типа есть разные вопросы которые отвечаю па слов Ну как и
01:24:08 - 01:25:47
паттерны есть которые вроде очевидные всегда используешь Или как это принцип который называется пересылка сообщений или не повторяемость этоже тоже очевидна ве что е Ну не повторяй ни я ни Мои знакомые не знают я посмотрел в интернете то есть он вроде в аккумулирует репозитории просто вроде так ну часто бывает такое да И я также делал Что юо внутри репы что ещё раз юв делают внутри репы иногда Ну вот я когда раньше часто использовал репу репы я ф делал внутри репы А зачем Ну не знаю вот так вот делал ты говоришь то
01:25:01 - 01:26:43
что они аккумулируют в репозитории Да там то есть у репозитория одна ответственность у е вторая ответственность но я объединял их в один реп То есть я не вижу смысла их не видел смысла Да я не вижу смысла в принципе их разделять Вот Но те кто очень ответственно подходит к ЮФУ Ну как бы видят и объяснят тебе почему вот ну то есть как сказать с фом на самом деле просто там типа смысл про как бы сказать попроще хотя сам говорю что он простой если сказать что он скорее про сохранение данных Это неправда Ну
01:25:58 - 01:27:35
ладно Воже показа что нужно архитектуру описывать как-то бизнес сущностях а не функционально то есть мне тоже пока странно Может я неправильно понял тоже как даже не иди туда вот то что там написано про У тебя вот то что написано архитектура и чистый код Ну блин ну пате пори принци эти трогай угу вот ин Ты про инсон как будто бы говоришь не нун это Насколько я понял Там как бы не событиями как будто оперируют насколько понял Ну знаешь вот в функциональщики с функциями которые приводят к определенному результату а не с данными
01:26:47 - 01:28:44
то есть ВП Мы работаем с объектами А функциональни мы работаем с функциями которые приводят к образованию этих объектов вот сложно это объяснить вот скорее про это то есть события некие события порождают объект так быстро не из учишь Я поэтому и говорю те не трогай ни микросервисы ни ДД ни там ну монолит это деф спрашивают 100% определение прочитай их тебе хватит потому что это ну во-первых это не джунов тема на самом деле Ну мне так кажется вообще архитектура чистый код это не дновски темы вот
01:27:59 - 01:29:27
понимают понимаю что если тебя спросят про Sol это типа попса такая уже Но если тебя будут спрашивать про там микросервис наю архитектуру Как проектировать её там про инсорсинг Ну это уже как бы довольно-таки серьёзные познания я спросил про sec потому что он несложный в понимании вот а работа с ивент сосин например вот если говорить про secs в разрезе без исинга Он простой если добавляется он становится сложным поэтому я спрашиваю только про Вот это в принципе смысл его в том что у тебя методы разделяются на команды и где
01:28:51 - 01:30:16
команда что-то изменяет а что-то отдаёт на чтение то есть на экшены и запрос то есть на запросы грубо говоря вот в этом и смысл C в у меня ни разу у самого не было проекта на инсорсинг это такой редкий зверёк на самом деле Ну по крайней мере на моей практике потому что мало кто его нормально реализует Тоже тоже геморрой блин он не ви когда я ви что он как бы часть Ну это как сод типа каждый видит по-своему каждый применяет по-своему там блин там противо когда мы приходим в реальную жизнь из этих всех вот паттернов принципов
01:29:33 - 01:31:03
становится понятно что часто бывает такое что один принцип сод может противоречить другому в конкретном кейсе и ты выбираешь меньше изол тоже самое с ддд у тебя какой-то кейс конкретный ты идёшь на шаг где ты нарушаешь принцип нарушаешь какие-то правила Но это типа ответственный шаг это подсказки которые бы использу Но слепо им придерживаться и следовать наверное не всегда стоит Ну вот это как многослойная совершенно только мвц неизменная у всех Ты бы ещё сравнил чистую архитектуру и вот этот многослойную
01:30:27 - 01:31:56
архитектуру Они очень похожи прям Один в один смысл объясняется по-разному смысл Ну да то есть много разных определение и при этом те кто вроде бы с одинаковыми работает у них по-разному всё это знаешь я вот открою проект Я знаю что такое чистая архитектура Я знаю что такое многослойная архитектура я открою проект и я не скажу сходу чистая эта архитектура или многослойная Ну вот потому что надо надо углубляться Да понятное дело если я там минут 10 посижу посмотрю и всё я скажу Ну а так сходу я не скажу Мне там надо полистать
01:31:12 - 01:32:26
поиз учать что как используется вызывает Да сейчас вообще используется ты не уверен Ну что ещё асит знаю могу рассказать про [музыка] транзакции ты имеешь в виду Да да Если ты знаешь очень хорошо Ну - это скорее ну по популярности вопрос там отдалённо спрашивают рядышком с паттернами гов и рядышком с солидо но по факту наверное не так часто но могут спросить тоже да ещё спрашивают про нормализацию денормализация данных что это такое спрашивают Ну это в разрезе уже базы данных обычно у вот там принципы нормальные формы Вот
01:31:49 - 01:33:46
это всё там Ух какие выводы будут или дальше продолжать будем нет нет мы уже закругляйся Давай немножко про выводы Да в целом если учитывать что у тебя нет опыта и тебе нужно знать теорию очень хорошо чтобы куда Скорее всего будет сло но как бы есть куда расти даже почему я так говорю ну то есть для каждого человека разные критерии оценки для каждого кейса разные критерии оценки в твоём случае я понимаю что у тебя конкуренция просто сумасшедшая То есть например ты устраиваешься какую-то вакансию Да не знаю стажировка
01:32:55 - 01:34:29
дном или что-то ещё Да вот на эту вакансию будет ещё 10 и а то 20 человек тебе надо с ними конкурировать И к сожалению это как бы сложно будет конкурировать особенно если какая-нибудь известная компания или просто крупные поэтому тебе нужно побольше теории во-вторых наверное тебе нужно побольше практики снем Потому что ты теряешься ты вроде как изучаешь теорию Да но такое чувство что ты у тебя мало практического опыта впра вот поэтому м пе проект магазин интернетмагазин возьми его и начинай пилить просто ошки тебе не нужен фронт
01:33:44 - 01:35:12
по крайней мере на данном этапе Но если ты умеешь во фронт можешь и фронт сделать как бы плохо не будет Угу Просто пиши Вот почему магазин потому что там можно много-много Рудов сделать много Даже думать не надо любой магазин открываешь смотришь у них есть функционал вот maret сделать вот это вот Ире Ну тоже таки были что-то вроде авид какого мне каже даже сложнее чем обы конечно Конечно ты Причём знаешь что будет ты вот так вот посидишь подумаешь что надо сделать Да начнешь делать а потом поймёшь что сделал фигню Это очень
01:34:30 - 01:35:44
хоро вот мап очень хорошо подходит под этот под задачу У меня всегда так было то что что-то делал Ну просто магазин слишком очевидный и вроде вс пом понять что ВС очень плохо Вот очень очень интересная задача на самом деле по поводу матп но не очевидно Не очевидно что могут возникнуть проблемы чем от магазина отличается Да почти ничем тем что там постоянно наверно растёт как бы часто чаще происходят изменения в базе данных Да какая раз из взе данных происходит изго но линто пользу ба данных если в базе данных можно е
01:35:07 - 01:36:37
какую-то такую жёсткую таблицу сделать такую вло сделать то ма там очень много разных товаров будет там будет большая пута сдела мобильных телефонов электрони делай не магазин электроники NV А marketplace где любой желающий может зайти и продавать свой товар электронику свою Угу вроде как разница вообще незначительная Особенно для клиента но по факту для реализации разница огромная Ну этим наверно не буду заниматься если я сегодня уже не скину Завтра напомни мне я тебе посываю статей которые тебе
01:35:57 - 01:37:28
помогут Я уже скидывал себя в канале в телеге несколько статей там про асинхронность про ребит наверное скидывал и про корректная spn моя любимая вот я тебе скину ещё пару ссылок вот Почитай их на досуги Я думаю станет попроще и в любом случае побольше практики когда ты будешь изучать практику тебе нужно будет сделать что-то чтобы сделать что-то тебе нужно будет понять Как это сделать чтобы будеь изучать инструменты Да на ты не ответишь идеально но ты будешь понимать что ты это использовал просто там не знаешь как
01:36:49 - 01:38:13
это теория сможешь хотя бы рассказать как ты это использовал вот в чём прикол Я вот Корс использовал я даже не знал что их использовал вот вчера узнал вот ну то есть если ты знаешь практику теорию потт ние Да но как будто бы на практике эту теорию не применяет же самый вот о котором мы говорили в солиде просто Интерфейс Это не Di Ну так чисто там суть такова что про зависимости конкретных сущностей просто использу интерфейс тебя есть два объекта Да у тебя есть блин это долгое опять объяснение да то есть иде для видео про
01:37:31 - 01:39:21
Di А я не помню объяснял я Di или нет Ну посмотрим наверное нет Скорее всего нет потому что там про сервис локаторы надо рассказывать про АК про АК контейнер про Di темы нудные ного нуя Ну посмотрим может вдохновение придёт Вот в целом А ты давно теорию учишь Да вот недели две наверно ну 2 недели Это очень хороший результат Ну да по 14 часо практически в день Ну да Нифига себе нет для для д недель изучения теории Это очень хороший результат но как бы сам понимаешь что это всё так быстро не учится Если хочешь
01:38:31 - 01:40:04
знать хорошо то ну как бы хотя бы месяц другой надо изучать это всё ну теорию чтоб если у тебя нет базовых каких-то знаний э по этим технологиям теоретически то за 2 недели ты ничего не выучишь Ну для того чтобы устроиться на работу имею в виду Но если тебе поведёт устроишься это будет только очень хорошо очень хорошо Угу Не ну понятно что я что-то знал так куча Я уже наверное полгода знаю что это такое как Тим пользоваться м ну преимущественно я бы не ответил 2 недели здесь практически ни какие
01:39:18 - 01:40:31
вопросы 2 недели назад бы не ответил ни на что Ну вот так вот Не ну то что я здесь то есть сессии Я использовал уже наверно 2 месяца назад и даже меньше Не знаю что сказать ещ просто всё наверное всё что мог сказал я с выключенным микрофоном говорю да да на самом деле Тут и нечего говорить Ну то есть нужно дальше изучать в принципе для двух недель очень даже хорошо но как бы для трудо устройства на работу Мне кажется недостаточно наверно Вот Но если ты также ещё 2 недели позанимаемся думаю картина сильно
01:39:54 - 01:41:20
поменяется Ну так задачу решать не будем время почти 2 часа Какая зада Не жалею не будем если ты вообще хоче ка за хочешь решить Я не знаю Ну задачи вроде не проще даются То есть я в институте нас на это на первом курсе натаски на задачи разные по алгоритмом структурам данных можно да Не у меня никакая задача не подготовлена к сожалению Да и времени У меня к сожалению уже нет мы почти 2 часа уже общаемся Вот такой итог если будет что спросить если будет непонятно може написать Отвечу Вот А спасибо
01:40:38 - 01:42:14
Хорошо тогда пока-пока давай
01:41:26 - 01:41:31