Подготовка к собеседованию на 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 каналы и чаты
Транскрипция видео:
Как реализовать синглтон Я хочу ответить развёрнутое хочу рассказать какую-то историю юзер там Иван равно New User это как бы секретная информация на своим детям я расскажу В чём разница между списком и массивом вот здесь я хочу отсортировать людей по цвету глаз вот здесь по росту Если вы джун не делаете так никогда пока это не написал сеньор Можешь ли ты объяснить концепцию сборки мусора у-у это опасная Тема мы идём это маленькая проблема но проблема вас заметили сеньоры и пытаются проверить насколько Вы хороший сеньор Какова цель
00:00:00 - 00:01:01
ключевого слова Lock все Sharp редко когда лоб вспоминает просто ну вы знаете Раз уж начал делать хорошо В чём суть экстеншин методов поэтому Call Step супер важная штука только я знаю либо я и мои дети Привет вы на канале эти школы Tech Miss Kills Я ведущий рубрики натив Илья Рублевский сегодня вечером мы будем говорить обойти и не только Ну что ж этот выпуск должен был состояться многие ждали его продолжения поэтому сегодня вместе с моим гостем вместе с Пашей львовами продолжим разбирать вопросы
00:00:30 - 00:01:32
собеседований по шарпам идут на эту отдельное спасибо нашему подписчику вагифу к который прислал нам целую громаду классных вопросов мы с Пашей посмотрели эти вопросы Мы отсортировали поэтому сегодня будет бомбезно Да мы стали доступнее нас теперь можно не только смотреть но и слушать теперь есть в разделе Подкасты на Apple и Яндексе Подписывайтесь на наш канал ставьте свои лайки комментарии смотрим ролик погнали [музыка] Привет Привет Ну что я скажу такую штуку ты в представлении не нуждаешься вот тут
00:01:03 - 00:02:15
появится картинки с роликами в которых ты у нас принимал участие внизу Также будут ссылочки давай так этот ролик должен был состояться Сегодня мы продолжим проходить собеседование по сишарпу дуднету Поэтому ты как всегда будешь максимально конкретным доходчивым друзья смотрите данное интервью готовьтесь собеседованию Обязательно оставляйте комментарии можно и вопросы также не проходите стороной Наш курс подут на эту шарпу на нем как раз преподает Паша его коллеги поэтому Приходите приходите обязательно Ну Паша
00:01:43 - 00:02:53
давай мы погнали Можешь ли ты объяснить концепцию сборки мусора сборщик мусора для этого нужно понять что сборщик Мыса у нас работает исключительно в куче вот наша большая красивая куча кого он там собирает потому что вы насоздавали вы нас создавали там переменный У нас есть некий колл-стек где мы создаем ссылочки на переменные а перемены у нас лежат в куче то есть в колл-стрики у тебя появилась информация о том что по адресу номер 7 лежит мой юзер и где-то в куче по адресу номер 7 лежит информация про
00:02:18 - 00:03:33
нашего пользователя там куча полей его возраст его имя и так далее и в какой-то момент времени мы понимаем что переменную номер 7 нам она вместе переменная с юзером нам больше не нужна соответственно и скол удаляем и ссылочки у нас больше нету и в какой-то момент времени у нас в куче остался объект на который никто не ссылается Это значит что он больше никому не нужен Это значит что его можно будет удалить удалять его прямо сейчас нам не обязательно сборщик мусора придуман для того чтобы облегчить нам
00:02:56 - 00:04:03
жизнь в том числе там куча оптимизации есть например у тебя никогда не запустится сборщик мусора пока ты не пытаешься воспользоваться новой памятью То есть это уже что-то создал оно там лежит тебе текущей памяти свободный хватает он не будет пытаться запускать дорогостоящую по большому счету операцию с точки зрения сил и времени машины чтобы просто сэкономить время она тебе не надо Зачем тебе эту программу останавливать лишний раз поэтому кстати Иногда вы можете заметить странную вещь что как бы много приложений вы не
00:03:31 - 00:04:31
пользовались Вот пример одинаковое количество оперативки занято на самом деле часть из этой оперативки уже могут быть освобождена до тех пор пока тебе Ты во что-то не уткнешься тебе не потребуется удалять чистить уже неиспользуемые ресурсы соответственно вот мы идем состояние когда у нас постепенно все больше объектов появляется все больше объектов создаем в какой-то момент времени нужно создать новый объект а место не хватает И вот в этот момент все замораживается мы такие не двигайтесь пошел чистить
00:04:02 - 00:05:09
мусор как это происходит Мы заглядываем в наши объекты и каждому из них ставим условно говоря метку смерти что мы тебя собираемся удалить После этого мы идем по нашему кол стеку и берем Все переменные все ссылочки которые мы там коллтеке находим Например у нас была ссылочка на 6 Объект который говорит что вот это перемена я собираюсь пользоваться если нам она нужна если у нас холстек есть на нее ссылка значит этот объект хороший мы ему метку смерти убираем тебя удалять не будем все хорошо живи дальше в этом же
00:04:34 - 00:05:44
объекте который мы только что пометили что ты хороший живой Мы спрашиваем А у тебя что-нибудь кем ты пользуешься Не из толстека А уже в самом этом объекте может быть ссылка на какое-то другой объект Например у тебя есть объект юзер который знает что у него есть список адресов где он путешествовал из его полей есть ссылочки на другие объекты Соответственно по всем ссылкам которые есть в этом объекте на котором мы попали из колл-стека такой как цепочка выходит Мы тоже проходимся и помечаем их что
00:05:10 - 00:06:08
метка смерти убираем все хорошо Вы живы вам можно продолжать существовать после того как мы прошли по колл-стоянку до самого конца Значит все переменные которыми человек может сейчас пользоваться мы оставили в покое сказали Живите мы проходимся по нашим кучи смотрим У кого-то метка осталась Если осталась метка Значит тебя нужно удалять удаляем этот объект очищаем Его память проводим дефрагментацию когда мы все объекты которые живы выстраиваем в линию подряд Итак соответственно когда мы пол стеку до конца прошли
00:05:38 - 00:06:42
мы убедились что все кто нам еще потребуется у них метка смерти снята Значит все кого у нас метка смерти осталась их никто не использует их можно убивать их эти объекты стираются все живые объекты выстраиваются при помощи дефрагментации их подряд выставляют после чего у нас новое место есть создаем новые переменные на этом месте Это в общем есть детали зачастую можно услышать от Джуна такую фразу что мы смотрим на какие объекты есть ссылки их оставляем в покое после этого совсем правильно Да после
00:06:10 - 00:07:18
этого я на собеседование всегда задам вопрос У вас есть объект а У вас есть объект Б объект а ссылается на объект б а объект B ссылается на объект А кого оставим на каждый из этих объектов есть ссылка но мы этими объектами уже не пользуемся получается Если следовать логике Джуна что они навсегда останутся в памяти ответ так как же мы их убьем механизм который описывал изначально пометил все объекты под уничтожение и объекта и объект б а дальше Идя по колл-стреку то есть спасение вот от этой проблемы в том
00:06:44 - 00:07:58
что если нету ссылки ни на а не на б то значит не первый не второй объект мы им эту метку смерти не сотрем А значит сколько бы у тебя ссылок на эти объекта не было Если к тебе нельзя прийти из колл-стека Значит ты не нужен То есть это наш источник истины он знает кому жить всех остальных убиваем Это ответ на вот такой нюансы просто часто проскакивает дальше из особенностей у нас есть вот это красиво фраза где фрагментация это когда мы все наши объекты которые есть кучу скидываем наш колл-стейк просто для красоты с большими
00:07:20 - 00:08:30
объектами есть особенность когда ты создал огромный объект перекладывать его дорогостоящая операция То есть когда у тебя есть большая строка она лежит в памяти занимает там 10 мегабайт то для того чтобы переложить тебе побитым ну по байтам придется его куда-то другое место выставлять это операция дорогостоящая поэтому пытаемся этого не делать поэтому дорогостоящие объекты большие объекты в дефрагментации не участвуют Ну Казалось бы ну ладно хорошо их не трогаем какой из этого проблемы следует это наверное одна из немногих вещей
00:07:56 - 00:09:06
которые действительно нужно знать на практике которая важно про сборщик мусора если у тебя вот такая ситуация сложилась У тебя есть два объекта каждый из них Занимает какое-то место он не двигается дальше Мы спрашиваем Сколько у тебя осталось свободного места ты смотришь что у тебя вот здесь вот осталось два байта и вот здесь вот остался один байт всего три байта Можешь ли ты подряд выделить место под объект размером в 3 байта не можешь потому что они у тебя в разных кусочках лежат за счет того что
00:08:31 - 00:09:30
ты дефрагментацию больших объектов не проводил между ними остается небольшой могут остаться вот эти небольшие пространства как бы они свободны но занять их нормальным объектом ты не можешь туда Просто не помещается и что делать из этого следует не запихивайте по возможности большие объекты в память А что за большие объекты большие объекты в большинстве случаев если ты считал огромную строку это происходит например когда ты парсишь какие-нибудь Джейсон и так далее делают при помощи стримов делает это по частям не запихивает
00:09:00 - 00:09:57
Большой объект память это создаст тебе проблемы Вот это из второй особенности Дальше можно какие-то детали рассказывать про поколение Но это уже совсем совсем нюансы Да они не требуются для понимания того что там происходит то есть основная Наша задача интерес в том что у нас есть Call Stack У нас есть куча колл-стек знает кому жить в куче накида На всякого мусора просто и Понятно надеюсь ребят в нашей школе skills есть замечательный курс который называется sharpnet-разработчик Паша Львов в том числе один из менторов на
00:09:28 - 00:10:40
данном курсе в его экспертизе в правильности его подходов Я думаю что вы уже можете удостовериться либо могли удостовериться ранее собственно по данному промокоду будет скидка в размере 20 процентов на данный курс ссылка на курс будет находиться в описании помните что мы обучаем ребят из более чем 30 стран мира поэтому границы нам не помеха и возвращаемся к нашему ролику тогда будет следующий вопрос Какова цель использования операторов C Sharp по поводу операторов это уже в такие де прилезим Дело в том что просто удобство
00:10:07 - 00:11:23
то есть операторы не добавляют ничего в язык программирования это такой синтаксический сахар то есть более привычная для людей запись функции то есть любой оператор это функция отрицание то есть восклицательный знак это оператор Он работает с одним объектом Это просто функция Куда ты передаешь один объект он возвращает его обратное значение плюсик это оператор это обычная функция Куда ты передаешь два объекта А и B и возвращает их сумму он просто выглядит необычно у тебя оператор посередине слева справа могут
00:10:44 - 00:11:48
быть какие-то значения Но это все еще функция для того чтобы людей не заставлять писать так как думает программа а программа думает название функции в круглые скобочки передай параметры мы разрешили чтобы людям было легче писать а плюс б а уже сам компилятор превратит Сложи функция такая Сложи Вот тебе AB 2 параметра и он там внутри как-то считает Так что все операторы которые у вас есть тернарные неважно там или еще что-то это просто функции такие очень необычные функции и Самый наверное наглядный способ как вы
00:11:16 - 00:12:21
можете это прочувствовать Если вы пытаетесь попытайтесь их переопределить самое наглядный такой который людям глаза бросается пример ты переопределяешь Как складываются там определяешь Как можно писать сложить два юзера то есть ты можешь написать в классе юзер переопределение что это там статичный метод это оператор Это сложение и дальше в скобках так и указывает что если мне передали там юзера и юзера что я должен ответить Так что это всего лишь для удобства понимания того что происходит людям
00:11:49 - 00:12:54
которые не так сильно знакомы с внутренностями в принципе без них вообще можно жить тогда растут помимо простатичный метод создавать так можешь ли ты объяснить разницу между статичными методом и методом экземпляра опять-таки если мы лезем в теории то есть точки зрения практики Там просто статичный метод лежит в классе и не имеет доступа ни к чему Кроме того что у тебя другого статичного валяется и у тебя есть метод внутри объекта он имеет доступ к полям объекты все что связано с объектом с точки зрения программы нет никаких
00:12:21 - 00:13:26
статичных методов и объектов объекта это все просто функции просто у метода который ссылается на объект методы объектов есть такой секретный параметр который ты напрямую не пишешь а сейчас про него знает это объект This То есть это от имени какого объекта ты хочешь выполнить эту функцию То есть если заглянуть внутрь исходника там какой-нибудь El cod залезть то все твои методы объекта они принимают нулевым параметром они принимают тот самый объект с которым ты дальше будешь работать ты можешь через потом обратиться к его полям ты
00:12:54 - 00:14:11
можешь через обратиться каким-то другим его объект методом этого объекта то есть нет никакой разницы это просто методы но метод статичный ты можешь передал тему пользуется метод экземпляра то есть метод объекта он имеет всегда вот этот секретный доступ к самому объекту кто его вызвал и ко всему тому что ты ему передал то есть разница вот в этом одном дефолтном параметре на объект от имени которого ты вызвал метод Хорошо давай тогда про виртуальный метод в чем его суть тогда состоит это придется вспоминать У нас есть типы
00:13:33 - 00:14:45
Например у нас есть юзер мы можем пронаследоваться Например у нас есть необычный юзер а модератор у него есть дополнительные ограничения там с какими полями он работает Наследник юзера у юзера есть свой метод там Представьте он возвращает свое имя а модератора мы этот метод пытаемся переопределить то есть мы хотим чтобы когда у модератора спрашивают Кто ты такой он говорил Я великий модератор и только после этого добавлял свои имя и фамилию То есть у нас модератор Наследник как юзера и все Что умеет делать юзер умеет делать модератор
00:14:08 - 00:15:17
это как бы введение теперь где проблема кроется И зачем виртуальный метод придумали если ты создашь переменную и скажешь что это переменная типа юзер то ты можешь Туда положить как самого юзера так и любого из его наследников то есть объект типа модератор ты можешь положить переменную типа юзер пока ничему не противоречит наследование работает ope хорошее замечательном порядке Но в тот момент когда ты у этого объекта который модератор но лежит в переменной типа User попытаешься вызвать метод Представься вот здесь возникает
00:14:43 - 00:15:48
вопросы у компилятора у него есть два метода один описан в юзере другой описан в модераторе меня только что попросили представиться есть метод представиться и в первом и во втором какой вызвать по умолчанию компилятор посмотрит Какого типа твоя переменная А ты сказал что это юзер переменная юзер значит он пойдет в класс юзер и попытается использовать его метод то есть Он попытается сделать так что модератор представиться так как будто он юзер что плохо и неправильно И вот вирту ключевое слово когда ты
00:15:15 - 00:16:16
добавляешь ты после этого как бы намекаешь или требуешь что ли Вот компилятора что когда у него спросят попросят вызвать какой-нибудь метод он возьмет не впрямую У какого типа переменная в тот классы иду а он посмотрит какого типу твой объект внутри лежит видит что Это модератор и пойдет уже к методу модератора чтобы он там успел представиться что он модератор как его зовут то есть это помощь в наследовании но не просто чтобы ты мог переопределить метод А чтобы потом когда ты будешь вызывать ты всегда вызвал
00:15:46 - 00:16:52
именно нужный метод альтернатива то есть Virtual всегда идет в комплекте с овирайт То есть у родителя ты говоришь что этот метод виртуальный как бы говоря что Если кто-то из моих детей его переопределит то его решение Как выглядит метод важней то есть что его решение бери чуть что если ты этого слова Виртуал Не использовал не использовал то у ребенка когда ты попытаешься создать метод который называется так же как и у родителя у тебя прям сам скажет что за фигня ну то есть ты пытаешься метод создать А ты
00:16:19 - 00:17:22
перекрываешь то есть альтернатива переопределению перекрытия тогда тебя заставит написать слово New это будет плохой плохой шаг не делайте так это создаст вам будущим проблемы что есть и с точки зрения практики то есть Virtual + override работают вместе Это хорошо потому что вот метод ребенка будет всегда вызываться метод реальный и с точки зрения того как оно внутри есть тоже можно себе представить что компилятор пытается всегда выбрать Какой из методов мне использовать типа переменной или типа реального объекта
00:16:50 - 00:17:53
что там лежит Давай еще немного про методы разница между защищенным и закрытым методом трафик протектор Это был один из самых сложных вопросов Я долго пытался понять что такое защищенный метод То есть мне пришлось перевести это на английский потом прочитать и понять так вот что имелось ввиду Это скорее всего про правила ты протектор Я до сих пор Слегка не уверен в этом Потому что русскую версию никогда не видел приватные методы это методы которые не должны никто нигде видеть Кроме этого класса то есть
00:17:22 - 00:18:28
приватное поле только внутри этого класса ты можешь к нему Достучаться получить данные или положить данные если есть приватный метод Ты только внутри этого класса Можешь вызвать этот метод чтобы у тебя не было со словом приватный Ты только внутри этого класса можешь получить к нему доступ обычно в альтернативу ему ставят паблик паблик это значит кто хочет публично снаружи тот нему доступ имеет есть между ними промежуточный вариант протектор он потребовался потому что у вас есть такие нередко системы классов когда есть
00:17:55 - 00:19:01
какое-то поле снаружи про него знать не должны Но если сделаю его приватным и кто-то от меня пронаследуется то мои дети тоже к нему доступ поиметь не будут то есть приватным полям даже мои дети доступа не имеют они не знают что у меня есть этот метод они не могут его вызвать или какую-нибудь переменную взять там прочитать положить новые значения вместо того чтобы я и все мои дети такой потом да могли Достучаться до этого метода и придумали протектор Ну или поле или Property неважно чего там конструктора то есть протектор Это
00:18:28 - 00:19:37
значит что это как бы секретная информация своим детям я расскажу вот это как я понял защищенный метод скорее всего из перевода по крайней Ну да Так что правила ты протект Это насколько это секретная информация либо прям только я знаю либо я и мои дети ты вот мне скажи ты ребята которые к нам приходит заниматься группа точно также Вот подготовка к собеседованию конечно А сколько времени вы на это убивается чтобы это вот чисто на бесед подготовку к собеседованию последнее приходит чтобы они уже тогда вот чувствуют что
00:19:03 - 00:20:12
последний рывок остался и по ходу занятия всегда когда я даю теория отдельно Рассказываю что нам нужно и попрактиковались после того как практиковались мы еще раз вспоминаем что это было И вот я еще даю теорию которая вам потребуется на собеседованиях то есть теория на собеседованиях она редко пересекается с тем что ты прям сейчас должен знать чтобы этим пользоваться Ну конечно поэтому двумя волнами идет первое этим пользуемся второе вот что у Вас могут спросить смотрите правильный ответ голова не пухнет у них вообще Пух
00:19:38 - 00:20:35
Нет это значит я все хорошо делают если у студенты нет никаких мучительных шестерён там скрежета в голове то значит ты ничего ему нового не рассказал значит нет смысла занятия Хорошо давай продолжим В чем разница между Это сложный вопрос потому что я хочу ответить развернутое хочу рассказать какую-то историю А это максимально скучный ответе Дело в том что когда у вас упала ошибка и вы написали просто срок и сразу точку запятой поставили это значит что Ошибка какая пришла Вот точно также наверх и пробрасывает внутри этой
00:20:06 - 00:21:19
ошибки есть информация о том Какого типа эта проблема какой-то от разработчиков что ему не понравилось есть Волшебный колстек колл-стек это последовательность методов которая привела к этой проблеме Очень полезная вещь совершенно непонятно для Джуна на первых этапах но без нее понять что происходит невозможно потому что в каждый метод что у тебя есть в твоем коде в большинстве случаев ты можешь прийти разными путями и когда ошибка уже случилось принципиальное значение имеет о том как я пришел к этой проблеме То есть
00:20:44 - 00:21:51
например человек пытается отрицательное количество денег на счету у него появилось а почему то есть это мы создавали человека и он сказал что у него -20 монет сразу на счету или это кто-то забирал у него деньги и мы забыли ему там что-то перечислить он забрал слишком много или еще миллион вариантов и вот этот колл-стек он говорит последовательно что мы выполняли какие методы и в итоге последний кусочек это собственно А вот здесь вот упал уже ошибка Почему ты можешь воспроизвести все эти шаги чтобы посмотреть на каком
00:21:17 - 00:22:17
из этапов ты свернул не в ту сторону поэтому колстек супер важная штука Но это же и может быть минусом играть Например если у меня есть какая-то секретная информация там в базе данных у меня дополнительная информация или какие-то через секретные места проходил когда авторизацию проводил или еще Бог знает что у меня в колл-стрики Все записано какие методы у меня срабатывали если я это в таком виде кому-то отдам то он сможет хотя бы базу представить что у меня за структура Какие у меня есть классы Какие у меня есть методы как я
00:21:48 - 00:22:47
провожу какую-нибудь валидацию данных если я хочу сказать тебе что за проблема но не хочу тебе рассказывать а как ты к этой проблеме пришел то есть не хочу показывать свои внутренности слишком много то для этого я использую строу и просто экс в этом случае всю информацию про в чем была проблема Я тебе предоставлю то есть там мало денег на счету но весь в этот холстек как я сюда пришел я тебе не покажу я его отрублю и скажу вот прям здесь ошибка да то есть разница о том мы сохраняем или прячем хорошо но это будет часто перед начало
00:22:17 - 00:23:22
фразу уже прозвучало часто началом фразы В чем разница между структурой и классом Это вопрос потребовал меня обдумывания потому что я изо всех сил искал что у них общего Ну то есть смысле что у них чем они отличаются всем всем Ну то есть и у них общего то что и там и там ты в теории у тебя есть поля вот как бы все ну хорошо Может ты решишь что и там и там есть методы но структура это value Type Значит все то что мы знаем права летает потому что они целиком копируются то что они хранятся у нас стейки это все про
00:22:50 - 00:24:06
нашу структуру У тебя есть классы классы это максимально общее понятие референс тайп они у тебя лежат в кучу У тебя есть куча ссылочек Ты передаешь ссылочку на них то есть у них пересечение практически нету из какой-нибудь пример если у тебя Ты хочешь запомнишь У тебя есть пользователь ты создаешь в большинстве случаев что это класс юзер потому что у него будет много ссылочек на другие объекты потому что у него хранится внутри сильно разрозненная информация которую ты из разных частей можешь подтягивать Ты часто этого юзера
00:23:27 - 00:24:25
будешь по методам и в одном методе изменил все должны сразу увидеть эти изменения это собственно наш класс то как мы им пользуемся То как ему относимся Самый наверное адекватный пример структуры это какой-нибудь Вектор То есть у тебя есть три Циферки раз два три И по отдельности они Бессмысленны всем бессмысленно А вот то что это там по иксам один по y8 по Z7 то это именно структура данных и вместе Ты их будешь перекладывать они у тебя есть будут храниться в стеке то это не проблема здесь сектор создал что-то поменял и
00:23:57 - 00:25:00
дальше ответил Там подходит нам это значение или правильное направление удара или неправильно То есть это такой вот Или например Date Time То есть у тебя есть день месяц год это вот вместе хранится в структуре там еще часовой пояс еще всякие данные Но это именно структура То есть это все еще что-то близкое к базовому типу близкая к тому что я прям в этом методе буду использовать менять считывать и принимать на этом решений и скорее всего не то что я буду передавать куда-то дальше много вас тем более Так что ответ
00:24:28 - 00:25:28
такой что да у них общего нету ничего Что такое лямда выражение в США и как оно используется Это примерно из области оператора то есть для того чтобы понять что такое лямда нужно узнать или вспомнить что такое function и Action То есть у нас есть такие типы переменных которых мы храним ссылочку на методы это непривычно в каком-нибудь джесе фронтенде намного чаще этим пользуются в шарпах это пореже бывает когда мы в чистом виде фанк и экшен делаем замысел в чем мы нередко хотим передать в качестве входного параметра в качестве
00:24:59 - 00:26:10
данных в другой метод инструкцию что делать Не кусочки данных именно вот какие-то шаги например самый такой типовой вариант у меня есть массивчик Я хочу чтобы ты его отсортировал то как я сортирую это отдельный сложный последовательность сорт или склеиванием еще чем-нибудь то есть набор действий которые необходимо совершить для того чтобы если предоставить все в правильном порядке Чем сделать это максимально быстро он сложный поэтому он лежит в отдельном методе так и называется сортировка но то
00:25:34 - 00:26:33
по каким параметрам Я хочу сортировать у меня всегда отличается вот здесь я хочу отсортировать людей по цвету глаз здесь по росту А вот здесь то по количеству их друзей то есть сам способ как я сортирую одинаковый но то как мне отличить вот мне дают два человека первый второй они сейчас должны быть в такой последовательности или в обратной то есть надо их менять или нет И вот эти вот правила то Надо ли менять людей я им должен каждый раз передавать То есть ему должен передавать нет какой-то кусочек
00:26:04 - 00:26:58
данных какой-то кусочек поведения для этого для этого мы собственно функции и Передаем в качестве параметров то есть мы создаем переменную говорим что это функцию эту функцию тебе передадут юзера Ты должен ответить да нет да если надо менять двух юзеров тебе придут двух юзеров А ты должен сказать Да или нет Да надо менять Значит один больше другого нет не надо значит первый меньше и нам это часто нужно было и вот для того чтобы не создавать эту переменную типа функции чтобы не создавать это отдельную
00:26:31 - 00:27:34
функцию которую ссылается и были придуманы лямбды то есть лямбда это максимально короткий в одну строку запись в какой-нибудь функции в большинстве случаев эта функция очень маленькие там с одной с двумя переменных или вообще без переменных которые ты буквально вот действительно в одну строку можешь указать ответ то есть вот на вход тебе X вот на выход X точка Edge Минус что-нибудь Там -7 это мой ответ и дальше это настолько хорошо пошло что намного где разрослось у нас и в базу данных очень много чего интересного
00:27:03 - 00:28:00
пошло и все что мы про коллекцию дальше с ними начали работать короткая версия Как ты можешь одни коллекции другие превращать склеивать что они там разрывать данные доставать короче оказался что это хорошо когда у тебя есть возможность коротко и сразу глазами считываемая функция когда у тебя есть по большому счету это просто красивый сахар синтаксический от функций но очень полезный как оказалось сахар в чем разница между War и Dynamic Sharp Хороший вопрос начнем немножко издалека это строго типизируемый язык из этого должен
00:27:31 - 00:28:51
последовать вопрос А Какие еще бывают бывают динамический типизируемые языки и тут же просто в чем разница в любом статическом статическим языке когда ты создаешь переменную ты должен сказать какого она типа то есть это переменную типа число из этого следует что до конца жизни ты в эту переменную можешь положить либо число либо а нету второго варианта то есть искал число значит ничего другого ты ни разу туда не положишь и не выпендривайся Да ты сказал хорошо клади большое клади маленькое число клади нолик но ничего
00:28:11 - 00:29:21
кроме числа там быть не может когда мы говорим слово Var на самом деле это может выглядеть как будто мы туда можем положить что угодно Это не совсем правда Вар означает Догадайся сам по первому шагу То есть ты не можешь написать War A точка запятой Потому что ты сказал создал переменную но не указал на основе чего может догадаться что там лежать будет Вот если ты скажешь War A равно 12 он посмотрит что справа написано число значит А это у нас будет число Значит мы создаем переменную число а если скажешь
00:28:46 - 00:29:54
равно и там в кавычках напишешь слово привет он скажет справа у меня строка значит это переменная было типа строка записываю себе до конца жизни это переменная только строка это Стандартный вариант то есть Вар это просто такой помощь для программиста чтобы он каждый раз написал стринг а равно и после чего указываю еще один стринг или юзер там Иван равно New User во второй части ньюзеры так понятно что там будет юзер это то к чему Мы все шахты должны привыкнуть так вот есть другие типы языков тот же наш любимый Джесс Раз уж
00:29:20 - 00:30:24
Мы фронтентом где-то рядом в Джесси когда-то создал переменную у тебя никаких ограничений Нет что-то туда положишь ты сказал что это переменная там лежит объект хорошо следующая строчка ты говоришь я в эту переменную кладу функцию он такой хорошо следующую переменную туда кладешь undefined который вообще ничего такой Ну и ладно Потом число потом int потом строку потом к этой строки какие-нибудь свойства добавляешь то есть с точки зрения динамически типизируемых языков походы выполнения программы тип перемены может
00:29:52 - 00:30:52
меняться его это вообще не смущает Вот мы пришли к тому что у нас есть один тип вот у нас есть другой тип Sharp это строго типизируемый язык единый дайнек это попытка сломать эту систему Да иными когда ты пытаешься сделать объект Куда Куда ты можешь положить Да вот как javascripty разные типы по ходу жизни не то чтобы это активно используемое фича Я даже сказал Что пытаются так изо всех сил не делать Это плохой вариант но узких случаях может быть вас не сильно поругают Если вы такое Напишите Но если
00:30:22 - 00:31:34
вы джун не делаете так никогда пока это не написал сеньор написал сеньор тогда можно скопировать это с разрешения Давай тогда перейдем ключевым словам Какова цель ключевых слов реф и аут это наверное ностальгия по себе плюс Я бы так дело в том что у нас есть переменные они у нас референс тайпы передаются по ссылочке то есть ссылочка на объект есть вылью тайп который передаются просто целая копия и если у тебя есть переменная возраст там лежит 20 Ты передаешь эту переменную в качестве входного параметра в какой-нибудь метод
00:30:58 - 00:32:07
и в этом методе его там меняют ты об этом не узнаешь это как бы стандартно поведение тайпов и там копия на тебя никак не влияет но при помощи ты можешь механизм сломать Ну или как мне нравится получается Если ты укажешь что у тебя есть int но не просто а реф int это будет означать что-то передаешь не число Как таковое как мы раньше делали копию числа передавали ты туда передаешь ссылку на то место где будет лежать число То есть ты пытаешься скопировать поведение референс То есть ты передашь ссылку на объект А значит если в этом
00:31:32 - 00:32:46
методе ты изменишь объект Ты будешь узнавать его по ссылке Значит его изменишь и у родителя что иногда достаточно удобно Например где-то можно использовать стандартный библиотеках Когда вы пользуетесь trypars то вы передаете туда число или кого-нибудь объект и говорите если получится вот из этой строки сделать мой объект вот сюда его и запишу То есть она в принципе бывает когда используется Но это вот такая попытка с выльютать обращаться как с референсами конкретно реф Out отличается буквально мизером один из них
00:32:09 - 00:33:15
требует чтобы ты объект сначала у себя проинициализировал то есть взял какой-нибудь int положил туда уже готовое число и только потом тебе можно его отдать это значит если в этом методе его хотят изменить они могут это делать если не хотят то и ладно То есть ты можешь пройти ничего там не трогать Насколько помню Я помню говорит следующее ты можешь отдать мне вообще не проинициализирован про сказать что из числа какой я еще не знаю передать его в метод но в этом случае в методе ты вынужден будешь его
00:32:43 - 00:33:45
проинициализировать то есть положить туда хоть какой-нибудь ответ Какова цель ключевого слова Lock C Sharp у этого опасную тему мы идем это про многопоточность Чтобы сильно не углубляться скажем так у нас есть многопоточность то есть один и тот же метод одновременно могут выполнять два и более потоков в этом методе ты можешь делать какие-то опасные то есть шаги с общими ресурсами которые одновременно два потока выполнять не должны например ты открыл Файлик и записываешь туда по очереди буковки раз два там Циферки 1 2
00:33:16 - 00:34:24
3 если одновременно два потока попытаются это делать записать в файлик 123 это сломает всю твою структуру Потому что первый запишет один два а потом замрет замрет и второй поток начнет туда записывать в тот же Файлик 1 у тебя получится строка 1 2 и 51 что может вам этого бизнес логику Что плохо Мы пытаемся этого избежать Поэтому вот эту критическую секцию ты оборачиваешь ее в тот самый Лог и в блоке говорит что этот блок за раз один поток только выполняет есть туда первый поток зашел и начал понять вот эту записал один записал 2
00:33:49 - 00:35:09
даже если этот поток уснет А это нормальное состояние то второй третий пятый Сколько у тебя там не было потоков внутрь этой секции даже не попытаются зайти они посмотрят скажу что Нет она занята и снова уснул передадут как бы очередь дальше в итоге вернется Очередь к первому потоку он допишет свое три выйдет из критической секции скажет Свобода Кто первый захочет Вот запрыгивайте снова начинать выполнять этот код это вот самый простейший способ синхронизации потоков Но если вы про упомянули или у вас про это спросили то
00:34:29 - 00:35:29
готовьтесь отвечать Что такое семафоры какие у вас еще и способы синхронизации они всегда идут вместе то есть редко когда Лог вспоминают просто ну вы знаете Ну и ладно Но как бы уже если взялись за многопоточность Значит она зачем-то нужно Слушай а вот вообще изученных тем с какими чаще всего бывают проблемы у студентов А с проблемами во время прохождения собеседования или когда они кот пишет с пониманием вообще даст прохождением собеседования я ни разу не слышал Чтобы хоть один joom полноценно
00:35:00 - 00:36:00
отвечал на вопрос про сборщик мусора и здесь она не Джуна а в том что у него про это спрашивают сборщик мусор Это вопрос А главное он совершенно бессмысленность практически с точки зрения То есть как бы ты хорошо не знал что как внутри работает на то как ты пишешь что-то но мало Когда будет влиять Но это продолжают спрашивать соответственно к этому пытаются готовиться такая ноша не по себе не по силам для Джуна поэтому на нем часто спотыкаются Ну вот так сложилось в нашей сфере почему-то Все хотят чтобы joom
00:35:29 - 00:36:36
знал условно больше чем должен знать Да тут очень сильный от компании зависит то есть один и тот же человек в разных компаниях будет оценен как сеньор а в другой как джун И это не метафора это реальные люди реально компания вещей которые вот здесь вот его с позиции сеньора он уходит к нам компании мы его ну максимум на Джуна возьмем потому что для нас важен вот такой набор знаний для нас важно чтобы ты там умел с какими-то библиотеками работать чтобы у тебя были понимание того как ты вот с этими
00:36:03 - 00:37:04
конструкциями будешь работать других компаниях это не нужно в других компаниях важнее там какой-нибудь поджарил чтобы ты хорошо понимал то есть это не плюс-минус это процессы просто да настроена еще раз в чем разница string string Builder это как со структурами и классами них общего ничего нет то есть строка это действительно данные то есть string это ссылочка на где-то область памяти где у тебя массив чаров лежит твоя строка Стинг Билдер это такой класс при помощи которого ты можешь ему рассказывать намерение которое можно
00:36:33 - 00:37:42
собрать чтобы построить в итоге хорошую строку То есть когда ты передаешь в string у него есть метод куда-то Закидываешь данные он когда ты ему сказал там Добавь строку один добавьте строку 2 Добавь строку три Добавь число 7 он все то что ты ему накидал он так отдельный хранит хорошо запомнил ты просил один два три семь но строку из этого не создаст пока ты не попросишь Он просто будет знать про это намерение Поэтому если следующим шагом он попросит о А еще Последний символ удали ты такой Ну ладно
00:37:07 - 00:38:12
Значит это ты больше не хотел добавлять то есть Билдер позволяет тебе не изменяя строку А мы знаем что строки неизменяемые то есть нельзя их создать нельзя их изменить приходится создавать каждый раз новые то есть не делая вот эту дорогостоящую операцию по созданию переменных по кусочкам накидывать пожелания накидывать намерение Как должна выглядеть итоговая строка после чего нажимаешь В конце один метод говоришь А теперь собирай и он все эти намерения которые ему накидал он их склеивает и за один раз тебе выдает уже
00:37:40 - 00:38:45
готовую строку без всяких промежуточных результатов Что хорошо и удобно в чем суть extention методов синтаксический сахар у нас это у тебя Ключевой вопрос В чем разница у меня ключевой ответ Это просто для красоты это странный способ дополнить класс к которому у тебя нет доступа для чего У нас есть класс лист в этом классе уже есть набор методов эту библиотеку писал не я но мне очень часто вот в моей там какой-нибудь игре нужно чтобы я ему передал массив врагов он мне оттуда случайного достал для этого написал
00:38:12 - 00:39:22
метод этот метод ему передаешь лист он тебе возвращает оттуда Случайный объект там буквально пару строчек но тем не менее этот метод Мне кажется приходится вызывать я пишу название метода и внутрь в круглые скобочки там метод называется Рандом и внутри ему передаю свой массивчик свой лист и может быть по эстетическим причинам мне хочется это дело наоборот чтобы я к названию своего массива врагов массива каких-то объектов писал точечка и говорил Рандом Почему мне возвращает случайного объекта То
00:38:47 - 00:39:49
есть это когда ты чисто синтаксический пытаешься поменять местами то как ты вызываешь этот метод чтобы он выглядел не так как будто это отдельный метод А внутрь передаешь параметр как будто у самого объекта есть такой метод Как взять случай И для этого ты пишешь этот метод который у нас был он внутри выглядит абсолютно Так же ты просто делаешь его статиком и Первый параметр ты помечаешь как This Это значит что в этот параметр в первый ты будешь его передавать не как нормальный метод круглых скобочках А он с другой стороны
00:39:19 - 00:40:16
будет стоять то есть там вот слева от названия этого метода через точку будет называться стоять твой объект Господи какая осложнёнка это если махать руками а если входит то не Ну понятно Да они намного проще Когда ты их вызываешь то есть они выглядят так как будто ты у объекта вызываешь просто его внутренний метод хотя на самом деле этот метод снаружи ты сам его придумал Паша у меня будет такой вопрос каковы преимущества при использовании внедрении зависимости от их много сразу уточню что если вам этот вопрос
00:39:47 - 00:40:54
задали то вы настолько хорошо отвечаете что вас заметили синьоры и пытаются проверить насколько Вы хороший Синьор пощупать на семью да Потому что это не с ним Джуна и скорее всего даже не медовский вопрос внедрение зависимости Это здорово Они нам нужны для того чтобы облегчить себе жизнь как всегда мы все делаем чтобы силы времени то есть мы считаем что у нас какой-нибудь большой класс сервис Он умеет жонглировать нашими пользователями он умеет находить хороших пользователей которые отлично подходит конкретно тебе
00:40:20 - 00:41:29
вот в данный момент в качестве друзей у него там есть куча методов для того чтобы он свою работу выполнял ему в качестве входных зависимостей Тех самых зависимостей которые мы собираемся внедрять то есть чтобы он работал ему еще нужно во-первых доступ к твоей базе данных То есть ему нужен какой-то объект типа репозитории например который будет ходить в базу почему еще нужно какая-нибудь библиотека с математикой на вход ему будешь передавать Ту самую библиотеку которая отлично высчитывает он среднее значение по большому
00:40:55 - 00:41:56
количеству параметров и так далее и так далее То есть у тебя вот этих входных зависимостей Что тебе нужно чтобы вычислить свою работу может быть много и Бог с ним что их много но у каждой зависимости что ты попросил Например у репозитория у него могут быть свои зависимости если у тебя нет того самого дядя нет внедрения зависимости то ты можешь руками писать Ты можешь сказать создать новый репозиторий пишешь круглые скобочки он говорит чтобы создать репозитории нужно создать какой-нибудь веб-контекст Ладно такой выше напишу
00:41:26 - 00:42:24
создать новый контекст А чтобы меня создать пожалуйста мне передать там какую-нибудь Connection string Ладно обращаясь к методу который может в конфиге есть еще и получается такую огромную портянку пишешь из того что тебе нужно создать чтобы в итоге получить свой один метод который я буду дальше использовать что неудобно Например я кстати узнал что в Game davy такое часто происходит потому что у них для производительность важная фича а диай контейнер работает чуть медленнее чем есть вот это дело руками Поэтому у
00:41:55 - 00:42:59
них иногда бывает что они вот все руками прописывают жалко мне вас но вот конкретно вебе у нас есть И как мы это решаем Мы в одном месте рассказываем что когда нужно создать вот какой-нибудь репозиторий на вход передай ему веб-контекст это вот одна строчка вторая строчка будет когда кто-то просит контекст на вход ему передает какой-то параметр и мы просто расписываем кому из наших классов какие объекты нужны Пусть Расписал Просто кто с кем связан там где тебе уже нужно его использовать ты говоришь Дай мне и берешь всего один
00:42:27 - 00:43:36
из них и тянешь за него как будто бы после чего сам дядя контейнер смотрит все Какие зависимости ему нужны создает эти объекты создает объекты которые нужно для этих объектов и он вот это все портянку которая за ним тянется делает за тебя после чего ты попросил один объект он тебе увернул Ты тут же пользуешься Это первый шаг это только начало все нормально Да дальше когда это уже реализовали посмотрели что уже хорошо уже удобно возник второй вопрос У нас есть такое понятие как время жизни это что-то из области Когда можно уже
00:43:04 - 00:44:11
удалять объект то есть сколько мы собираемся пользоваться вот конкретно этим объектом пример у нас есть какой-нибудь класс который ходит в базу данных чтобы сходить в базу данных тебе нужно открыть Connection и соответственно когда ты вот этот объект создаешь он открывает Connection это не так Ну допустим просто для примера он открывает Connection и пока этот объект он через этот Коннект Все хорошо вопрос А когда этот объект можно убирать то есть если мы будем вот один из воспользовались им и потом сразу
00:43:37 - 00:44:40
выбрасывать то у нас будет дорогостоящая операция по открытию Connection выполняться много раз Что нехорошо если мы его один раз открыли и через него гоним все данные то это данные от разных запросов от разных пользователей идут через один поток и есть шанс что ты чужие данные можешь получить что плохо Секьюрити так нельзя поэтому для того чтобы вот как-то промежуточный вариант установить придумали что давай сделаем такое время жизни как время запроса то есть до тех пор пока мы для одного человека Один запрос обрабатываем мы
00:44:08 - 00:45:09
второй раз создавать Connection этот не будем вот один человек пришел ему можно То есть он конечно все свои данные Пусть получает и тогда мы для какой-нибудь перемены даем время жизни пока не закончишь обрабатывать один запрос Или например у тебя есть там какой-нибудь вариант время жизни на каждый запрос или синглтон то есть мы этот когда мы рассказывали ему Как создавать вот эти объекты мы тут же указываем сколько здесь каждый из этих объектов должен жить то есть ты говоришь что вот тебе инструкция как создавать
00:44:39 - 00:45:39
репозитории и вот тебе информация что жить Он должен там один запрос красиво это вторая часть была уже на этом этапе У вас должны появиться куча вопросов там про Можно ли из одного из сервиса с одним временем жизни вызывать другим временем жизни ответ не всегда но можно туда же начали добавлять что в принципе части Security можно через di-контейнеры проверять То есть когда кто-то запрашивает объект Мы перед тем как тебе его выдать можем проверить от тебя вообще можно им пользоваться потому что какие-нибудь репозиториям который ходит
00:45:09 - 00:46:22
в админские таблицы тебе как пользователь вообще не надо никогда класть то есть идея контейнер это стало достаточно хорошим сосредоточением некоторых задач скажем так поэтому пользу от него очень много Ну сразу Из минусов я вот упоминал он чуть медленнее чем если ты руками делал но это не для бы точно проблема Ну и требует освоения как обычно в чем разница между списком и массивом Но это как разница между водой и стаканом с водой Ну то есть у нас есть массив И у нас есть коллекция практически за каждой
00:45:45 - 00:46:56
коллекцией у вас спрятан какой-то массив справедливо но при этом нельзя сказать что массив равен коллекции И даже нельзя сказать что за каждой коллекции спрятан массив например в Когда вы реализуете какой-нибудь а именно то есть перечисление все что вас внутри будет это метод Как взять следующий и в принципе ты можешь быть особо извращенцем и написать себе три метода 1 2 3 и в первый раз вызывать первое поле во второй раз вызвать второе поле в третий раз третье поле у тебя массива не будет но перечисление будет то есть
00:46:21 - 00:47:22
принципе ты можешь пытаться придумать коллекцию без массива но в подавляющем большинстве случаев коллекция это красивая обертка над каким-то массивом с дополнительным функционалом самый простой вариант у тебя массив жесткой длины что там будет 4 элемента ты добавил 1 2 3 4 и понял что слушай надо 5 добавить в этом случае ты должен создать новую коллегу новый массив с длиной уже 5 переложить туда первых 4 элементы только после этого ты сможешь добавить 5 это дополнительная операция что руками писать селение в коллекции
00:46:51 - 00:48:06
лист когда ты вызываешь метод at он тоже самое сделает Он создаст тебе сначала массивчик фиксированной длины если не хватит места он создаст новый более длинный туда переложит значение старого и добавит новые но тебе об этом думать не надо ты у этого листа вызываешь точка и он сам добавит Туда уж придется То есть как бы лист это оберточка Над нашим она дает удобный функционал для стандартных задач и в большинстве случаев коллекции Это оберточки для удобного решения каких-то задач базовыми типами
00:47:28 - 00:48:36
что это диккшина ли это все просто оптимизация для конкретных задач Так что в чем разница в условно говоря одна обертка над другим но есть очень постараться Можно даже и как-нибудь развести чтобы они сильно отличались люблю это слово Ты знаешь мы Когда проходили тоже собеседование на другом языке программирования говорю что всегда когда мы произносится мне такое замирание Как реализовать синглтон хочу ж тогда не однотипный шаблон или как привычные Ну хорошо первый правильный ответ не надо Ну то есть Неважно как не надо
00:48:02 - 00:49:18
этого делать это анти паттерн это плохо и могу даже сразу объяснить почему когда вы делаете синглтон вы нарушаете два важных Табу Первое это единственность ответственности то есть мы пытаемся сделать так чтобы каждый класс отвечал за какую-то одну фичу и сингл том если ты его правильно записал он отвечает за то чтобы никто не мог создать второй объект твоего типа но тут же внутри этого синглутона у тебя лежит какая-то логика и он получается получается отвечает и за то как себя создать и зато что внутри должно
00:48:42 - 00:49:58
происходить что плохо это маленькая проблема но проблема вторая проблема самая большая из-за чего очень часто страдали Да я тоже когда у тебя на проекте что-то называется сингл тоном реализовано как синглтон во всем проекте ты используешь его как будто он точно один будет приходит заказчик через Там пять лет после начала проекта говорит Слушайте вот у нас был чатик на главной странице я вам клялся что он будет один можно будет второй после чего тебе нужно весь твой проект перелопачивать и переделывать его Потому что ты думал что
00:49:20 - 00:50:24
он один будет то есть синглтон это по какой-то причине ты веришь человеку что вот этот объект точно не потребуется 2 Такого не бывает не потребуется на ближайшие пару лет может быть может пару месяцев хорошо десять но потом потребуется и чем больше ты оттягиваешь тот момент когда переделывать чем больше у тебя будет проблем поэтому самый правильный способ как создать синглтон это использовать Die контейнер где при создании объекта ты скажешь это у этого объекта будет время жизни синглтон Если тебе это больше не потребуется в
00:49:51 - 00:50:54
какой-то момент времени ты там заменишь в одном месте одну строчку и у тебя больше не синглтон супер будет конечно Но если очень уж настаивать спрашивать Ну нам просто из любопытства как же его сделать ответ просто шаг 1 если мы хотим чтобы нельзя было создать объекты данного типа нужно заблокировать конструктор К сожалению удалять конструкторы мы не умеем зато мы можем сделать их приватными То есть у вас у объекта внутри класса написано что это приватный конструктор значит за пределами класса никто попытаться
00:50:23 - 00:51:26
создать этот объект данного типа не сможет Это первый шаг второй шаг Когда вы больше не можете создать объект данного типа не один вам нужно найти ладейку чтобы можно было хотя бы один создать собственно первый это тебе нужно статичный метод который когда ты вызываешь он загадывает свои внутренности и смотрит а у меня уже есть хотя бы один объект данного Типа если нету так уж выйти я создам поскольку этот метод лежит внутри твоего класса то у него доступ к приватным полям есть то есть их приватному конструктору тоже
00:50:54 - 00:51:52
есть второе что ты должен тут же задуматься О многопоточности тушь не знаю зачем ты такой странный человек синглтон пишешь но Раз уж начал делать хорошо дело в том что когда ты внутри этого метода будешь заглядывать у него первая строчка там проверить не существует ли этот объект допустим его нет первый поток в него заходит спрашивает этот объект есть говорят нет он делает следующую строку после чего засыпает приходит второй поток то же самое спрашивают объект данного типа есть а его все еще нет и он тоже заходит
00:51:24 - 00:52:32
внутрь этого после чего получилось что у тебя два потока зашли внутрь той самой критической секции где они пытаются создать объекты и они создадут два объекта данного типа что плохо не делай так поэтому противоречит нашему синглутону поэтому внутри первого Ифа ты делаешь Лог чтобы больше внутри никто не заходил внутри этого лока еще раз перепроверяешь а точно никто не создал объект пока здесь гулял и уже внутри этого создаешь объект данного типа подкладываешь какую-нибудь приватную статичную переменную и дальше
00:51:57 - 00:53:04
пользуешься зачем-то своим синглтоном Так что Да можно дать вот так работает Если вы вообще с этой внутренней лезете то вспомните то что у вас есть оптимизация на уровне процессоры Там есть специальные слова которые отменяют чтобы он не проскочил Даже сквозь эти защиты но основная мысль не делайте так Хоть это и сделать не сложно и будет вам хорошо Да ну и последний вопрос Какие типы шаблонов проектирования есть шар не любишь Да нет просто это опять-таки если вопрос задали Это замечательно значит
00:52:31 - 00:53:35
вас подозревают сеньора Ну то есть шаблоны проектирования это то что тебе когда ты проектируешь свое приложение не проектирует приложение это во-первых во-вторых нету шаблонов проектирования для языка Ну это общая информация что у нас вот здесь есть какой-то там Билдер вот здесь у нас есть какой-нибудь сервер этой информации она как бы меж языков неважно на чем ты пишешь это общие подходы а не на то и общие поэтому Какие у тебя есть шапину любые какие тебе надо такие есть да все что ты про шаблоны
00:53:03 - 00:54:19
проектирование прочитаешь оно в том или ином виде будет применяться в любом языке программирования конкретно уже есть и тебе хоть какие-то рамки нужны то это поскольку на сей Sharp это объект ориентированный язык программирования бери какой-нибудь Там гонку Банда 4 и читай все что там есть точно работает но шаблоны проектирование Это стандартные решения для стандартных задач Поэтому в принципе ты ничем особо-то не скован это просто общие подходы к решению какие-то Может тебе подойдут больше какие-то меньше они не
00:53:41 - 00:54:51
ограничат тебя языком программирования Так что какие Все что я могу сказать что точно дважды пройдено собеседование только уже жириновская ты как всегда на высоте блистал я реально жду комментариев жду комментарии к нему вопрос обязательно спасибо большое ребят Я надеюсь что сегодня была годнота поэтому ссылка на курс shardnet разработчик будет находиться в описании ваши лайки комментарии подписка на наш канал все приветствуется и мы еще увидимся пока
00:54:16 - 00:55:24