Пробное Middle C# собеседование (мок-интервью)

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

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

  • Приветствую Олег Добро пожаловать на наше собеседование и расскажи пожалуйста немножко про свой опыт Так ну опыт у меня в районе 12 лет наверно Ну больше де плюну изначально То есть я получается разработчик в первую очередь вот затем скать по необходимости стал расширяться и перел на это база данных 4н в основном работал и также ул на фронт сейчас Ну понятно И сейчас на работе мы используем такой как с мыслями переехать на то есть потихонечку начинать [музыка] вотт бы там 10 лет Да но первую половину

    00:00:01 - 00:01:54

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

    00:01:04 - 00:02:21

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

    00:01:43 - 00:03:37

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

    00:02:38 - 00:04:11

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

    00:03:33 - 00:05:09

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

    00:04:21 - 00:06:03

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

    00:05:15 - 00:06:37

  • мы всего лиш сообщаем наше состояние Мы в медиатор отправляем эти данные он уже разруливает всю логику И тем подписанта которы бы это важно Они получают вот ну Затем в принципе стандартные как бы такие [музыка] это получается Ну я точно не помню как называется это это перечисление этопросто когда см обм и мы просто получается перечисляем с проходим по коллекци ВТО затем У нас есть пате наблюдатель это когда Ну по сути это получается сво это когда мы [музыка] смотрим Измени сво состояние получается

    00:05:56 - 00:07:56

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

    00:07:02 - 00:09:02

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

    00:08:07 - 00:09:32

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

    00:08:49 - 00:10:29

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

    00:09:49 - 00:11:28

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

    00:10:45 - 00:12:30

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

    00:11:41 - 00:13:08

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

    00:12:35 - 00:14:12

  • нас нам нужно создать класс а-а издатель у него создат делегат и получается при создани подписчиков мы подключаемся к этому делегат Вот на его изменение Вот и у издателя получается при изменении он делает Вок этого делегата сообщает Том По или может быть как-то Ну можно через ивенты можно Угу о'кей О'кей Отлично Так а я с делегатом не работал вот смотрите практика практика пошла Сейчас я обожаю нормально в тестовых условиях можно [музыка] да [музыка] такс а уж вообще честно говоря не понял как с

    00:13:24 - 00:15:49

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

    00:15:02 - 00:17:29

  • да Угу а это неправильно да так с чтот у тебя уду ивента у него какой идёт этот сигнатура Какая [музыка] медж Что такое жаловаться на способ подписки Я плю да да вот получается нам нужно Т вок Угу супер А ну блин я с делегатами Это моя Да такая больная тема что-то как-то это надо надо с ними подработать чу-чуть Давай немножко подам на больную мозоль Если ты не против Можешь расказать про разницу делегатов и ивентов что вспомнишь Ну ладно чтобы не молчать так скажу что знаю делегаты по большому счёту это Ну

    00:20:40 - 00:22:52

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

    00:24:26 - 00:25:58

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

    00:25:21 - 00:27:02

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

    00:26:11 - 00:27:39

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

    00:26:58 - 00:28:22

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

    00:27:39 - 00:29:02

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

    00:28:20 - 00:29:56

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

    00:29:14 - 00:30:55

  • для того чтобы получить Color ID то есть название метода который вызывает наш метод наши действия это уже такой более Аспект ориентированный Да момент в программировании вот в остальном да в принципе у нас действительно есть массивы массивы методов массивы свойств полей и так далее Всё это получается Окей здесь рассказали разницу между процессами и потоками ты в принципе всё рассказал даже добавить дополнить нечего Всё круто Вот давай вернёмся к нашему коду реализовать пате об были да некоторые сложности с тем

    00:30:10 - 00:31:44

  • чтобы изначально сделать это на делегата у делегатов тоже есть на самом деле массив внутренний вызовов вот этот вот делегат chin который не помню как он называется ну Суть в чём в том что там все ссылки на все методы лежат которые нужно вызвать Вот через него тоже в принципе можно но это не является скорее таким канони правильным его использованием правильно использование когда мы делегат используем как ссылку на какой-то метод Вот иногда Конечно вот мультикаст делегаты они называются Да на английском иногда они используются чтобы

    00:30:57 - 00:32:24

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

    00:31:41 - 00:33:23

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

    00:32:32 - 00:34:00

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

    00:33:19 - 00:34:50

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

    00:34:05 - 00:35:23

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

    00:34:46 - 00:36:07

  • это событие ивент вот когда ты так именует методы Это уже тебя выдаёт скажем что ты не постоянно этим пользуешься и не придерживается каких-то стандартных методологий То есть у тебя не было Работы наверное в таком более-менее устоявшейся крупном проекте с такими паттернами как вот subri через ивенты Ну да Так есть да Да вот тоже предлагаю тебе обратить на это внимание Да и посмотреть как это реализовано в тех же примерах там мне кажется в 99% случаев будет странно если ты найдёшь что-то другое Там будет написано Он и что-то

    00:35:30 - 00:37:03

  • что-то вот совету придерживать методики А ещё кстати здесь я забыл спросить подскажи пожалуйста Event вот этот вопросик точка Зачем вопросик здесь стоит Да это из делегатов как бы что если никто не подписался то он може признал потому что Ошибка Угу угу О'кей Да супер спасибо Ну что как впечатление Поделись Я думал Всё будет намного хуже

    00:36:15 - 00:37:34