Подготовка к собеседованию на Java 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 каналы и чаты
Транскрипция видео:
друзья Привет вы на канале дизбаб и с вами снова Макс Добрынин и настала пора та самая Когда мы будем разбирать с вами типичное интервью Какие вопросы Там задают нетипичные вопросы и какие ответы в принципе на них можно было бы дать или хотя бы в каком направлении новичкам и уже продвинутым разработчиком стоило бы двигаться но как всегда друзья я вас призываю Подписывайтесь Наш канал ставьте колокольчик оставляйте ваши крутые комментарии это офигительно помогает нам продвигаться вперед на просторах YouTube и делать все более
00:00:10 - 00:01:15
более крутой контент которого хотите именно выявить именно вы настраиваете ну что ж пришла пора окунуться в мир информационных технологий и разобраться что там происходит на технических интервью поехали друзья [музыка] сегодняшний случай очень даже интересен к нам приходит кандидат который обладает очень большим опытом работы это более 10 лет исчисляется несколькими проектами интереснейшими проектами где применяются разнообразные технологии которые сегодня между прочим очень популярны и тем не менее сама компания не выставляет
00:00:43 - 00:01:49
никаких требований к этому кандидату то есть мы как бы вроде собеседуем человека на позицию Однако непонятно это Мидл девелопер Синьор девелопертим Лид техника арки так или кто там угодно то есть задача очень простая познакомиться с человеком потыкать его палочкой узнать какими знаниями он обладает узнать его слабые стороны узнать его сильные стороны и в конечном итоге позволить рекрутёрам и другим техническим специалистам на основании этого интервью принять решение Имеет ли смысл с этим человеком разговаривать дальше Отвечает
00:01:17 - 00:02:17
ли он требования и интересом нашим компании и в конечном итоге сработаются ли технические специалисты с новым сотрудником что ж поехали до разберёмся Какие вопросы в этом случае можно задать и что вообще делать в случае когда ты приходишь на собеседование и ты не знаешь чего ожидать от этого собеседования у тебя нету Элементарно даже описание позиции потенциально на которой этот сотрудник может работать погнали [музыка] такого рода интервью довольно таки Непростые но здесь несколько причин Ну первое как минимум потому что ты не
00:01:47 - 00:02:52
знаешь требования к проекту тебе приходится придумывать буквальном смысле слова Что задать и смоделировать какую-то ситуацию при которой максимально сможешь раскрыть этого самого кандидата Да здесь стоило бы отметить компании которые выдвигают требования на абстрактные позиции стоил бы иметь какой-нибудь сценарий с каким-то критерием оценивания Ну допустим если человек знает это Он скажем Сильвер А если он знает Вот это он нифига не Сильвер А почему это так важно Это в целом помогает интервьюеру
00:02:21 - 00:03:21
сориентироваться Какие вопросы задавать и не заниматься выдумыванием космических вопросов из головы или создания в голове у себя каких-нибудь абстрактных проектов подгоняя под того кандидата другая Проблема в том что в таком случае кандидат немного стрессует он видит что ему задается огромное количество вопросов которые могут быть сложно не очень сложные скорее всего эти не про проект скорее всего эти вопросы конкретно индивидуально приходят от интерьера и они могут быть так называемые вкусовщины Однако чтобы
00:02:51 - 00:03:54
решать вкусовщину опять же могу сказать что большие компании хорошей компании которые уделяют достаточно времени интервью имеет свой собственный большой квашенарий уже с градацией Junior Middle sinner и так далее и никакой проблемы в этом не заключается Ты просто идёшь по этому списку формируешь на основании этого тактику при которой ты задаешь вопросы и раскрываешь кандидаты Вот и у нас друзья точно такая же ситуация так что поехали моделировать тот самый абстрактный проект без какого-либо квашенария на основании индивидуальный
00:03:23 - 00:04:25
вкусовщины и посмотрим как кандидат с этим справится сегодня друзья наша интеграционная и нет я вам не буду рассказывать про крутые курсы поэтам которые так всё нужен Однако не так уже просто найти работу в этом Поэтому вместо этого я вам расскажу про крутую новость которая очень сильно хочу вам поделиться и сто процентов она будет вам интересно при поддержке моих коллег и партнёров мне удалось основать тренировочную платформу ты можешь просто называть её тренинг-центр Но давай-ка лучше я тебе расскажу чем мы там на ней
00:03:54 - 00:04:54
занимаемся и какие проблемы решаем а фишка является очень лакомным кусочком и все стремятся в нее попасть и в этом ничего плохого нет в этом удивительного тоже ничего нет Однако времена Пионеров прошли ведь современный клиент он же работодатель четко знает чего он хочет Какие технологии применять И как это все должно быть реализовано соответственно это существенно понижает цену вновь испеченных новичков которые закончили ВУЗы прошли курсы Нет не подумайте я не буду здесь рассказывать том что ВУЗы
00:04:28 - 00:05:27
плохие или курсы плохие это всё круто и курсы нужны и ВУЗы нужны одна коричневается о том чтобы получить работу для современного новичка необходимо обзавестись опытом работы и выходит здесь у нас Замкнутый цикл чтобы получить работу Мне нужно получить работу чтобы получить работу опять не нужно получить работу а где взять работу если для этого нужна работа кажется что какая-то безвыходная ситуация ведь получить первую работу не так уж и просто Либо ты должен быть каким-то реально выдающимся вундеркингом что тебя
00:05:01 - 00:05:55
и без опыта работы возьмут на работу но решение есть для обхода щепетильной ситуации и давай-ка я тебе расскажу как мы решаем эту проблему при помощи тренировочной платформы iprose решение базируется на многолетнем опыте преподавании работы в различных it-компаниях и реализации современного программного обеспечения Все это позволяет осознавать проблематику современного новичка it ведь Как показывает опыт время лишь активная практика в кругу специалистов позволяет достичь крутых результатов в Короткие
00:05:28 - 00:06:23
сроки тренировочная платформа iprody позволяет погрузиться в разработку реальных клиентских проектов для получения столь желаемого и необходимого коммерческого опыта Весь процесс построен таким образом что вы становитесь членом команды из пяти шести разработчиков под наблюдением высококвалифицированного Тим Лида Все это позволяет принять участие в разработке реальных клиентских проектов вы решаете задачи среднего и высокого уровня сложности принимаете участие в обсуждении этих самых задач то есть в их
00:05:56 - 00:06:48
анализе и дизайне принимаете участие в разнообразных командных митингах И разумеется в код ревью Где вы можете получить реально свежую обратную связь о том как вы что-то реализовали И разумеется ис есть свое положение до того как его кто-то заметит другой и конечно же принимаете активное участие в код ревью что позволяет вам получить быструю обратную связь что ведет свою очередь к улучшению ваших навыков и повышению вашего уровня квалификации все это в конечном итоге ведет повышению уровня вашей экспертизы при реализации
00:06:21 - 00:07:21
клиентских проектов что соответственно влияет на уровень вашей привлекательности ведь таким образом вы автоматически становитесь лакомным кусочком в глазах работодателя и конечно же HR рекрутеры теперь не хотят обходить вас стороной поскольку Они видят что вы потенциально новый сотрудник в компанию который уже с первых дней работы в этой компании сможет приступить к реализации задач которых так ждет работодатель или его клиенты А все это потому что теперь ты не просто джун ты джун с большой буквы ты джун плюс что я вижу тебя Это
00:06:52 - 00:07:52
заинтересовало хочешь присоединиться к команде современных разработчиков решать крутые задачи и получать таски посложнее так еще и побольше никакой проблемы в этом нет это очень просто переходи по ссылке в описании озна комьтесь с детальными программами повышения квалификации заполни контактную форму нажми кнопку отправить и в кратчайшие сроки мы с тобой свяжемся помни что путь мечте начинается с первых шагов Так давай же реализовывать вместе на тренировочной платформе Ай против Да друзья кто еще не понял это реальное
00:07:22 - 00:08:19
интервью которое относительно недавно для меня случилось и начнем мы с базы данных с моей точки зрения базы данных это всегда щепетильная штука потому что современные разработчики как правило от нее удалены либо идут очень поверхностно но здесь нет задачи утопить нашего кандидата в знании всех супер крутых вещей про баз данных начнем с самого простого и звучал вопрос следующим образом представим себе ситуацию У нас есть приложение мы нашли тонкое место где у нас проседает производительность и это место оказалось запрос в базу данных
00:07:55 - 00:08:56
там несколько запросов в общем что-то там идет не так как бы ты решил эту проблему на самом деле здесь ответ очень простой нам всего лишь необходимо обратиться к такой замечательной штуке которая называется квери план наслание квери план мы сможем получить информацию о том Действительно ли наш запрос который написан вручную или Запрос который генерирует какой-нибудь фреймворк хороший по производительности да далеко не всех фреймворки генерирует производительно крутые запросы но здесь не об этом речь Мы говорим о том как
00:08:25 - 00:09:26
установить эту проблему Конечно же можно ответить и по-другому что А давайте мы возьмем эти запросики начнем их видоизменять чем будет отключать подключать подключать подключать Я имею ввиду модифицирует запрос и попробовать выполнить его из снова и снова Но на самом деле это не дальновидное решение потому что во-первых можем отключить что-то важное А в конечном итоге можем упереться в ситуацию что отключать уже будет нечего а работать Все будет хреново либо сломается бизнес логика поэтому друзья здесь единственный
00:08:55 - 00:09:47
правильный ответ Это квери план смотрим туда смотрим Что там происходит на основании query плана принимаем уже решение Все мы в современности живём в мире и огромного количества данных обновления получений и так далее и всё Это обусловлено тем что одновременно транзакции выполняются Ну как мы с вами знаем во время транзакций параллельных транзакций возникают аномалии и это тот вопрос который стоило бы задать вот жена до тех ли Да чтобы разобраться Действительно ли человек понимает слышал знает и здесь может быть на самом деле
00:09:21 - 00:10:19
несколько вариантов но с моей точки зрения отвечать стоило бы следующим образом первая Аномалия это Lost update потом это Dire terrate потом это Нон репита был Рид потом это фантомрит И последнее сериал зейшн Аномалия да на самом деле как правило все называют только три То есть это дёртеры Phantom read и Non repitable read и это в принципе неплохой ответ но если вы действительно разбираетесь базах данных хотите показать свой опыт и намекнуть На то что помимо трёх стандартных типовых аномалий есть ещё другие то можно было
00:09:50 - 00:10:50
бы вот таким образом ответить конечно же следующим уколом спину нашего собеседника будет вопрос А как же бороться с этими аномалиями и здесь опытный разработчик скажет Ну всё на самом деле зависит от уровней изоляции транзакции но в том числе стоило бы обратить внимание на конкретную базу данных Да почему так можно было бы ответить всё просто потому что в некоторых базах данных определённая аномалии просто невозможно по своей природе но если мы откатимся во все возможные потенциальные аномалии которые
00:10:20 - 00:11:23
сегодня мы мы с вами знать то потенциально ваш ответ звучал бы следующим образом Ну первое Это retant committed следующий Red committed затем у нас репетита был рейд и потом сериал из мол и вот эти четыре уровня транзакции сверху вниз Разумеется Вполне себе достойный ответ понятное дело Если вы хотите блеснуть своими знаниями то стоило бы вложить еще описание к этим уровням изоляции Ну или как минимум сказать что я перечислил в порядке от самой слабой до самой сильной где сериал Айза был это самая сильная транзакция и
00:10:52 - 00:11:57
закрывает все потенциальные аномалии которые вот только что были объявлены конечно же следующим вопросом уже будут вопросы с подвохом Все мы прекрасно знаем что уровни изоляция - Это не единственный способ Каким образом можно бороться с параллельными транзакциями и проблемами которые они могут приносить Да здесь у нас появляются Локи и блокировка конечно же этим самым вопросом будет вопрос а слышал ли ты что-то про блокировку как минимум здесь можно было бы сказать что Есть два вида блокировки это shared locks и Эксклюзив
00:11:25 - 00:12:32
Локс и Это хороший ответ на самом деле это достойный ответ от жена до синьора Ну конечно же если мы варьируем между метлом и синьором то было бы неплохо сказать какая разница между ними Ну как минимум всё на ладошке Шерлок Локс - это такой вид блокировки который позволяет блокировать информацию но при этом всём Когда в неё вносятся изменения Вы можете всё ещё прочитать э эти заблокированные данные Эксклюзив Локс - это максимально жёсткая форма блокировки при котором если определённые данные Ну допустим ряд
00:11:58 - 00:13:04
наш Роу тот самый заблокирован то к нему выступ уже никак не получите ни на чтение ни на запись придётся просто ждать Конечно если мы говорим опять же про производительность про какого-нибудь нашего синьора или выше специалиста то необходимо было бы ещё добавить что нужно быть очень Вайс или достаточно рассудительным а при применении э-э shareit или Эксклюзив Локс абсолютно очевидно что бывает транзакция очень простые получил доступ к одной записи обновил и всё закончил но бывает транзакции которые затрагивают несколько
00:12:31 - 00:13:40
таблиц и это Разумеется уже влияет на производительность представим себе что обычная транзакция затрагивает несколько таблиц и в конечном итоге и вы делаете максимально жёсткую блокировку тот самый Эксклюзив Локс конечно В итоге это очень сильно повлияет на производительность в таком случае рекомендуется не использовать Эксклюзив Локс Да это всё зависит от ситуации к ситуации но когда ваши транзакция действительно очень тяжёлая затрагивает огромное объём связи с другими таблицами максимально рекомендуется рассмотреть Шерлок чтобы
00:13:05 - 00:14:08
развязать все другие параллельные транзакции хотя бы на чтение следующим ударом ниже пояса про базы данных звучит типичный но такой вот не всегда простой вопрос В чём разница между оптимистикой и пессимистик локинг Привет друзья Все просто здесь не про то что одна транзакция унылая а другая такая позитивная нет речь идет не об этом и это будет ответ приблизительно кого-нибудь интерна или Джуна но такой вопрос очень часто слышишь на уровне Middle sener и конечно же понимание этой проблемы очень сильно отражается на том
00:13:37 - 00:14:42
Какой опыт с базами данных у вас был или по крайней мере знаете Вы что это такое И когда его применять ну здесь на самом деле все просто и ответ может быть точно таким же простым оптимистическая блокировка позволяет нескольким транзакциям выполнять операцию над какими-то данными и суть проста Когда у нас есть две транзакции они что-то обновляют изменяют Разумеется в этом случае если первая транзакция уже внесла изменения то вторая транзакция неизбежно должна подтянуть эти изменения только потом Вносить свои изменения И это всё
00:14:10 - 00:15:09
штука простая работает на таймс темпах то есть по сути мы имеем отпечаток которые оставила новая транзакция отпечаток состояния в которой находится вторая транзакция и если они не соответствуют то Разумеется происходит сообщение о том что вторая транзакция Эй давай-ка необходимо обновиться потому что первое вот уже что-то закомитила Да вот так все просто с пессимистинг локинг все довольно таки уныло потому что пока одна транзакция что-то делает Вторая конечно же ничего сделать не может и опять же мы откатываемся в развитие
00:14:39 - 00:15:43
проблемы и тут на обратно сливаемся в более высокие вопросы о чем здесь говорим об обеспечении производительности или о консистенции данных соответственно это вопрос уже с подвохом конечно же мудрый разработчик скажет что оптимистическую пессимистическую блокировку нужно применять грамотно поскольку обеспечение полной блокировки может сильно повлиять на нашу производительность но в том числе при применении оптимистического блокировки в случае огромного количества запросов на обновление может также
00:15:11 - 00:16:06
сказаться негативно на нашей производительности Именно поэтому применение блокировки Это вопрос конкретного проекта конкретные задачи которую мы с вами решаем это действительно ответ хорошего разработчика скажем на уровне Windows sinner который понимает что мы не можем применить здесь какой-нибудь Silver Bullet это просто не работает нам нужны конкретные требования конкретные спецификации и конкретные цели которых мы хотим достичь после такого бравого прохода по базам данных и Да это не все они исчерпывающие вопросы можно задавать
00:15:38 - 00:16:45
еще больше но это конкретная ситуация через которую мы с вами проходим и да следующая пачкой вопросов стали вопрос о масштабирования Все мы как разработчики понимаем необходимость масштабирования Однако Давайте поговорим о конкретных вопросах и как в них можно отвечать и в целом как можно понять сильно ли разбирается тот самый разработчик от мало до велика в масштабировании или он только о нём слышал где-то в новостях и входящем вопросом стал следующий Что такое репликация баз данных на самом деле вопрос очень часто применяемый
00:16:12 - 00:17:11
особенно на позицию Север давалопер и выше причём Это не связано ни с какими языком программирования это в целом вопрос Если у вас есть база данных что с ней мы можем делать Как повысить производительность собственно репликация позволяет нам скопировать данные и разместить их по разным серверам баз данных что это значит в сути своей что у нас как правило в самом простом варианте есть так называемый мастер сервер который принимает запросы и работает на запись А есть другие сервера которые просто отдают информацию то есть они
00:16:41 - 00:17:49
работают только на чтение в тот момент когда поступает запрос на обновление данных то он непосредственно проходит через этот самый мастер сервер он Разумеется данное обновляет и потом происходит процесс репликации то есть распространение данных на другие ноды так называемые или инстанции если можно так выразиться соответственно при доступе к данным нам не обязательно ходить всегда на мастер мы можем ходить на наши реплики это и есть повышение производительности и тут мы говорим про такие крутые вещи как highwalability с
00:17:15 - 00:18:14
другой стороны мы говорим про ноудаун тайм поскольку если что-то отвалилось то мы с лёгкостью можем подменить разва сервер на другой с другой стороны если у нас идет какая-то потеря данных на одном сервере то мы с легкостью сможем их восстановить через другой сервер то есть по сути Это хороший механизм не только для производительности Ну и в целом про хранение данных надежном форме видите наши клиенты будут очень огорчены когда придет сообщение Извините мы потеряли ваши данных Заполните профайл пожалуйста
00:17:45 - 00:18:47
снова То же самое Я испытывал лет 15-20 назад когда играл в Lineage мне приходило сообщение через неделю мы все удалим и ваши игроки удаляться в том числе такой за что я блин там полгода вкалывал разрабатывал от вас был сингера и тот бам все развалилось Господи за что все мне эти наказания вот тогда никто Судя по всему никакой репликации думаю всем было просто насрать был сервер игровой с одной какой-нибудь базилькой в лучшем случае я надеюсь они не писали ничего в текстовые файлы И разумеется потом они это всё чистили и приходилось
00:18:15 - 00:19:24
всё начинать с чистого листа это очень друзья печально Да вот так оно было но сегодня мы же абсолютно другом мире не супер сложным вопросом была ситуация представим себе что у нас есть сервер он начинает испытывать огромное количество входящих запросов в определенный период времени но предположим Все начинают заказывать еду где-то ближе к обеду логично то есть Разумеется в этот момент служба доставки разрывается и возникает так называемый Час пик или Спайк что в этом случае можно предпринять самое
00:18:50 - 00:19:56
простое быстрое непринужденное решение Ну и конечно же ответом является конечно же то самое масштабирование чтобы мы автоматически могли набрасывать новых наших сервисов разворачивать их и при помощи лоуд балансера соответственно направлять туда входящие запросы да на самом деле это очень простое ответ поскольку под капотом много других вопросов а как допустим Лол балансер поймет что какой-то сервер вот-вот начнёт испытывать напряжение конечно же для этого мы должны использовать разнообразные холст чеки метрики и так
00:19:23 - 00:20:26
далее другой вопрос хороший откуда конечно не понимает что у него есть не два сервиса развернутых а 22 конечно же для этого существует конфигурация или так называемый конфигурационный сервис из которого лоуд балансер может получить доступ к информации и понять куда ему запросы соответственно направлять Это довольно таки непростой вопрос этот вопрос относится не только к программированию и просто к масштабированию Это вопрос инфраструктуры знание того как устроено все на вашем конкретном Проекте в
00:19:55 - 00:20:54
конкретной компании и конечно же мудрый разработчик начнет задавать контр-вопросы А что вы используете Как у вас там устроено и вы сразу сможете понять человек все-таки понимает о чем он речь везет и можно уже развиваться дальше в направлении этого вопроса опять же мы тут говорим с Вами про масштабирование и в современности мы знаем вот этот весь гиперпсихоз по поводу кавка Мне нужна Кафка Мне нужна Кафка и как будто больше кроме катки ничего в мире не существует друзья очнитесь кроме Кафки Есть огромное
00:20:24 - 00:21:28
количество разнообразных брокеров э который вы можете использовать для асинхронного обмена сообщениями Ох как много здесь я сказал на самом деле я ответил на кучу вопросов которые можно было бы задать дальше Да чему это всё на самом деле всё просто друзья Что такое message брокер любой разработчик от мало до Великая неважно синим джуниорн миддл или кто-нибудь другой космический разработчик супергерой он должен знать что такое месседж брокер какая его цель и какая у вас задача на самом деле это банальный обмен сообщениями То есть у
00:20:56 - 00:21:56
нас есть какой-то почтовый ящик по простому туда сваливают сообщения А те кто на эти сообщения подписаны оттуда эти сообщения вытягивают мне все спрашивают Да А причём здесь вообще масштабирование Ну это же просто обмен сообщениями ну можно так же самые почту использовать Но суть-то на самом деле на ладони когда мы используем парадигму поближе в саб-страйбер которое между прочим лежит в основе Тех самых message брокеров Ну допустим той же самой Кафки которую все так любят но никто не понимает Когда необходимо её применять и
00:21:26 - 00:22:22
действительно стоит оно того или нет смысла заключается в том что тот кто отправляется сообщение абсолютно не заинтересован в Информации о том кто эти сообщения будет читать или вообще кто-либо на них подписан с другой стороны Подписчик тоже ничего не знает о том кто эти сообщения производит и откуда они вообще приходят его задача просто заглянуть в почтовый ящик то есть в тот самый бокс с этими сообщениями или правильно говорит событиями и их извлечь и просто прочитать потому что я на них подписан со стороны паблишера точно
00:21:55 - 00:22:59
такая же ситуация мы всё равно кто его читать он просто что-то изготовил положил своё сообщение события что вот оно произошло вот оно в ящике кому интересно забирается и опять же Причём здесь масштабирование ведь это всё про обмен сообщениями всё независим друзья всё просто Ведь это и есть преимущество масштабирования Ведь мы можем добавлять сколько угодно паблишеров можно добавлять какого угодно количество саб-скрайберов ведь всё очень абстрактно и прозрачно в том числе нам не важно знать источник происхождения информации
00:22:27 - 00:23:30
соответственно мы на него не завязаны соответственно мы можем создавать сколько угодно наших подписчиков без какой-либо опаски в том что а вдруг у нас развалится наш паблишер с другой стороны паблишу ровно также по боку сколько у него subскреберов он просто создает эти сообщения отправляет их в Бокс А кому интересно их прочитать и соответственно Когда нам понадобится больше количество подписчиков мы с лёгкостью это можем сделать ведь это никоим образом не отражается на наших саб-скрайберах другим исходящим вопросом является
00:22:58 - 00:24:05
вопрос о том что из себя представляет асинхронные сообщения на самом деле все просто когда мы с вами говорим о месседж брокерах или падаешь сам скрайбер парадигме Мы уже в принципе сливаемся в эту историю что когда мы отправляем запрос когда мы получаем ответ мы не ограничены не пространством ни времени это знает что один сервер располагаемый где-нибудь в космосе отправляет запрос а другой сервер вообще располагаемый в другой галактике в другом пространстве времени получает этот ответ и они вовсе
00:23:32 - 00:24:28
не должны находиться в одной и то же времени в одном и том же пространстве и в одной и той же галактике Да Галактика Это вымышленный пример но все-таки он позволяет понять что коммуникация между точкой а точкой б вовсе не связаны между собой ничем главное была бы точка в которую запросу можно было бы отправлять и из которого запросу можно было бы извлекать с другой стороны мы здесь говорим про грамотное использование ресурсов Ведь мы плавно с вами сливаемся вопрос а Что такое не блокирующие алгоритмы на самом деле все просто не
00:24:00 - 00:25:04
блокирующий алгоритмы это такой который умный использует ресурсы под ресурсами мы подразумеваем с вами потоки конечно же в многопоточной среде У нас есть множество потоков А теперь представим ситуацию Когда вы выполняете запрос и ответ на этот запрос ну скажем секунд 30 ждать и что вы действительно будете держать этот драгоценный ресурс 30 секунд Нет я так не думаю Хотя раньше так делали и никого это не напрягало Но сегодня Другой мир соответственно идея Не блокирующих алгоритмов в комбинации с
00:24:32 - 00:25:33
асинхронными запросами подразумевает то что для выполнения запросов является ресурс этот ресурс выполняет запрос и уходит делать что-нибудь другое в то время пока запрос выполняется долгое время или быстрое время никто не тратит дорогостоящее время на ожидание как только ответ на запрос будет получен в этот самый момент будет выделен на ресурс может быть тот же самый может быть другой Ну здесь под ресурсом мы подразумеваем потом и он ворвётся и обрабатывает и затем также гордо как он ворвался он и уйдет и это друзья не
00:25:02 - 00:26:06
блокирующий алгоритмы в комбинации с асинхронными запросами Да вот такой вот ответ может последовать от мидла и синьора И на самом деле в современности наверняка многие джины уже могут этим похвастаться поскольку тема масштабирования производительности реактивного программирования на слуху каждый день и конечно же ее необходимо знать и Да я не зря вспомнил про реактивное программирование Было бы неплохо тоже узнать Имеет ли человек опыт с ним Однако здесь хочется отметить не стоит мучить человека по поводу
00:25:34 - 00:26:36
вопросов с реактивным программированием Что лежит в основе манифеста реактивного программирования и так далее Для начала просто Спросите знает ли он что-либо про реактивное я уверен он вам ответят Да он знает затем Спросите имел ли реально он с ним опыт потому что человек который открестится и скажет не друзья я с этим не работал только слышал и здесь ничего плохого нет Далеко не каждый разработчик должен или знает то самое реактивное программирование Однако с моей индивидуальной точки зрения такой себе
00:26:05 - 00:27:09
имхо да то есть in my Humble opening я бы сказал что было бы неплохо прочитать манифест о реактивном программировании между прочим тот самый упомянутый асинхронный обмен сообщениями или же в основе реактивного программирования Однако Там есть много чего другое Так что загляните в реактивный манифест и посмотрите что там есть интересного Я вас уверяю вам очень понравится Однако если все-таки разбираешься немножко в реактивном программировании то здесь все равно всё Немного витиевато ведь есть разнообразные фреймворки для реализации
00:26:36 - 00:27:41
того самого реактивного программирования И если мы сливаемся в ту же джаву то очень популярный Project реактор и здесь закономерный вопрос В чем разница между моно и флаксом ну здесь опять же всё довольно-таки просто моно Это всего лишь одно событие на которое ты можешь подписаться ться Это значит что в нём будет всего лишь один объект который при выполнении этого события ты можешь получить Флекс напротив это набор Тех самых объектов которые ты можешь получать от определённого события Ну это как обойма
00:27:09 - 00:28:21
Ладно тут Мы закончили с масштабированием производительностью и всей этой интересной штукой вещь так можно закопаться Очень надолго и толком ничего не узнаешь напротив Было бы неплохо затронуть что-нибудь связанное с конкретным языком а мы точно знаем что собеседование было связано с языком Java Ну или хотя бы jbm Base языками такими как котлин и Вопрос самый непринужденный Что такое волотал в чем его преимущество и в чем его недостатки это базовый вопрос и мой личный совет если никогда не читал про это не вникал то лучше его
00:27:45 - 00:28:52
избегать то есть не нужно выдумывать всякую херабору лишь бы ответить на этот вопрос знает что такое valtel ну не уверен что Понимаешь самый простой ответ который можно предоставить волотайл позволяет нам считывать данные непосредственно из памяти в обход кейшей таким образом наши данные будут постоянно актуальны и я вам скажу это вполне себе нормальный ответ на уровень жена Однако если вы Middle или Было бы неплохо немножечко поднять свой уровень и рассказать чуть-чуть в деталях Ну допустим сразу прилетает удар
00:28:19 - 00:29:24
ниже пояса А расскажи мне что будет если я применю валатау предположим К объекту ничего Друзья хорошего не будет представим себе типичную ситуацию У нас есть свойства на котором висит волотел это свойство примитивного типа данных int Ну то есть обычно integer Но примитивного типа данных Разумеется Когда мы будем обновлять это свойство Каждый раз когда потоки разнообразные будут с ним взаимодействовать то у них должно быть обновленное состояние то есть потери данных или искажений этих данных происходить не будет Однако
00:28:51 - 00:29:51
представим себе другую ситуацию в качестве свойства на котором висит валатайл выступает какой-нибудь лист то есть да представитель коллекции и в этом случае Мы выполняем отдельные операции связанные с его методами Эд рэмов и так далее и так далее вот здесь волотал нам ни фига не поможет потому что волотайл на это не рассчитан Следующий вопрос самый простой спад к выручка представим себе У меня есть приложение которое работает многопоточном режиме есть какой-то sharable object Ну то есть есть какой-то
00:29:21 - 00:30:27
объект который хранится состояние и это состояние шарится между потоками внутри этого объекта хранится какой-то список этот список Не синхронизирован ну то есть он потока небезопасный И что мне необходимо для этого сделать чтобы не терялись данные все работало нормально то есть было бы обеспечена ордаринг консистенции в изобилити а там миссисити и Всё езжу с ним Ну конечно же простым ответом будет Давайте применим что-нибудь из канканси пакета где у нас в принципе находится а потока безопасной коллекции и это правильный ответ почему
00:29:54 - 00:30:59
бы нет Давайте заменим не синхронизированную коллекцию на коллекцию синхронизированную и Тут закономерно другой вопрос А какую коллекцию Если Вы ответите копию лишь Конечно будет божественно все знают этот крутой список если бы не одно но потому что человек который реально разбирается в проблематике копии он райт лист или хотя бы в многопоточности или хотя бы в производительности или хотя бы хоть раз её применял и прошел код ревью с этим проклятым копием лист Он бы сказал бы Окей А какую ситуацию Мы собираемся
00:30:26 - 00:31:29
решать да ведь мудрый человек который читает название копии он райт эрей лист наверняка бы задумался Почему коллекция так называется Да потому что каждый раз когда вы пытаетесь что-то записать в эту коллекцию она снимает копию и тут возникает Хороший вопрос что если это копия хранить 10.000 элементов Каждый раз когда мы будем обновлять свою коллекцию будет создаваться кофе ой Ладушки как прикольно ну вроде как бы не проблема Да ну я делаю запись э один раз в день хорошо нормально вопросов никаких
00:30:58 - 00:31:54
нет А что если в конкретной ситуации запись делается каждый 2 минуты или каждый 2 секунды конечно же такой подход не подойдёт ведь это будет усаживать нас по производительности ведь как я уже отметил Каждый раз когда будет учиться обновление этой коллекции то будет с неё сниматься копию Для обеспечения той самой синхронизации И как вы понимаете это опять же вопрос сливается в вашу экспертизу джунер предоставляет очень быстро этот копии он райт a-ray Ну конечно же оно синхронизирована почему бы нет она же находится в пакете
00:31:26 - 00:32:32
конкаенсе Мидл напротив скажет Окей Давайте попробуем его применить но здесь есть кое-какие нюансы которые нам стоило бы учесть сеньор же перед тем как предоставлять какой-либо Ответ скажет о чем она за ситуация что у нас производительностью как часто Мы собираемся делать запись в эту коллекцию как мы часто будем из него читать И вероятно вообще копии он райт лист Здесь нам не подходит и на основании этого заключения вопросов обмена информации сбора технических спецификаций расскажет Нет это нам не подойдёт надо
00:31:59 - 00:33:03
что-то другое и что-то другое это вон то да как вы поняли этот вопрос Он очень широкий в этом-то и смысл таких вопросов и это действительности позволяет понять человек с большим опытом работы понимает что-то на точности Или он просто рядом плавал и знает что есть такие структуры данных которые синхронизированы и многопоточности теоретически их можно применять в вишенкой на торте является вопрос специфический для Java А что такое ключевое слово или ключевой блок singerlist и какие в нем проблемы
00:32:31 - 00:33:30
базовый ответ ключевое слово всем коронавист или блог Неважно как мы их применяем В каком смысле они обеспечивают нам синхронизацию синхронизация обеспечивает нам консистенцию атомарность визабилити и так далее так далее все что необходимо в многопоточной среде Когда у нас есть общий ресурс который эксплуатируется несколькими потоками Однако это не отвечает на вопрос Какие в нем есть проблемы ведь проблема в нем есть одна проблема заключается в том что это блокирующий алгоритм это значит что пока
00:33:00 - 00:34:02
один поток проваливается в синхронизированную область самый блок сингрона есть или имеет все другие синхронизированные места связанные с этим же объектом или с этим же классом если мы простатические методы будут тоже заблокированы это запретить доступ к этому классу или к этому объекту другими потоками таким образом синхронайз блок синхронайз метод вырождает всю многопоточность в линейность пока Один что-то делает все остальные в очереди ждут А потом когда он высвобождает начнется драка кто зайдет туда первым
00:33:32 - 00:34:41
разумеется это не сильно про производительность хотя и про многопоточность и про обеспечение синхронизацию и тут было бы неплохо добавить что в принципе пакет канканси о котором мы уже говорили неплохо справляется с этой проблемой и можно было бы применить самые Локи допустим readride Lock Да тот самый красивый интерфейс который позволяет вам заблокировать ресурс на чтение и на запись И что это означает Да все просто когда потоки врываются в Один шар был ресурс они могут его считывать в параллель хоть по диагонали хоть
00:34:06 - 00:35:06
зигзагом Да как угодно никто им этого не запрещает Но как только поступает сигнал на запись от из потоков то все потоки приостанавливают свое чтение Они ждут пока эта запись произойдет и конечно же дождутся после завершения записи они сорвутся как гончие и опять в параллель начнут считывать один ресурс и это уже грамотный ответ на уровне метла или севера о том какие преимущества приносит нам синкана из блок и какие недостатки в то же время он собой несет [музыка] после того как мы затронули Java
00:34:36 - 00:35:49
многопоточно много коллекций как они работают можно бы задать вопрос о том как развертывать наше приложение и здесь не идет при использовании каких-то крутых ВИЧ мы здесь поговорим с вами про докер хорошим вопросом будет в чем разница докер файл и докер компом Ну вроде как бы разницы для нас особый и не применяем либо то либо другое все отлично работает особенно из среды разработки лучшая идея круто кнопочку нажал все забежала Однако это далеко не так докер файл предназначен для подготовки конкретного имиджа то есть
00:35:14 - 00:36:17
что этот имидж себя будет включать Какие скрипты в нем Внутри будут использоваться Как будут запускаться этот имидж и простым примером является ну Наша базовое приложение У меня есть сервис RS5 какой-нибудь Мне необходимо подготовить его к упаковке И разумеется к развертыванию после того как этот имидж будет собран и где-нибудь запущен конечно же внутри мы укажем какая будет легенькая операционка внутри запускаться какие мы будем использовать переменные окружения Или допустим Как найти переменные окружения будем устанавливать
00:35:45 - 00:36:44
Что необходимо собственно запустить допустим наш исполняемый файл ну скажем жарко если это про джаву и много-многое другое то Что необходимо для функционирования Ну допустим подключить какой-нибудь еще имидж как я уже отметил не только им связан с операционкой А может быть какой-нибудь дополнительный но только тоненький Да не сильно жирненький чтобы не раздувало наш имидж до космических размеров А вот как раз докер компус это его продолжение ведь представим себе нам необходимо запустить несколько имиджей на они у нас уже
00:36:15 - 00:37:20
готовы и благодаря docker compose мы можем как раз эти имиджи запустить предположим хотя бы в тестовом режиме очень часто наши сервисы работают с базами данных и мне быстренько необходимо поднять сервисы базу данных нему А еще бы какой-нибудь визуализацию для баз данных ну какой-нибудь графический интерфейс чтобы удобно функционировать базы данных напрямую и не танцевать танцы с бубном через консоль вот здесь как раз докер compose очень подходит поскольку мы можем предположим скомбинировать ним запуск 3G
00:36:47 - 00:37:48
Ну простой пример наш растопиай какая-нибудь база данных к нему допустим постгресс и допустим какая-то визуализация для работы с базами тоже самое для пост ГРЭС и вот это самое в докер compose мы с вами можем провернуть более того мы можем указать там переменное окружение которое будет необходимо для конкретного имиджа связать их мы можем указать последовательность запусков контейнеров поскольку один может Всё зависит от другого Ведь мы знаем мы не можем с вами запустить приложение если база данных
00:37:17 - 00:38:20
еще не развернута ведь просто будет у нас Connection Error Да поскольку наше приложение попытаются присоединиться к базе которая в принципе в сети еще нет ну и многое другое что нам необходимо вот такое простой вопрос и простой ответ другим здесь вопросам исходящим из контейнера Конечно будет справедливо спросить предположим У тебя есть сервисы база данных к нему ты будешь разворачивать их в одном контейнере или по отдельности и здесь конечно же вопрос уже из опыта работы с этим настройки и конечно впитывания экспертизы из нашего
00:37:49 - 00:38:56
рынка самым плохим ответом будет сказать да давайте развернем все в одном контейнере локально можно делать все что угодно друзья если это ваш тестовый ресурс вам так удобнее доделать и как угодно но если мы говорим про Production Ready Solution если мы говорим о том что вы на интервью если мы говорим о том что вы готовите ваше приложение для вашего клиента которые будут то ни в коем случае не разворачивайте несколько имиджей в одном контейнере как минимум потому что они начнут делить ресурсы между собой и если один начнет отжирать
00:38:22 - 00:39:26
ресурсы от другого то Разумеется у одного просядет производительность то есть это неэффективно или например если с одним имиджем что-то пойдет не так в рамках одного контейнера и каким-то образом он нарушит внутреннюю систему изолированную в этом контейнере то это драматично может сказаться на другом имидже бегущем в этом же контейнере в конечном итоге если мы говорим про позиции мило ли синер мы же говорим про масштабирование как я буду масштабировать что-либо если мой контейнер такой жирный там несколько
00:38:54 - 00:39:53
сервисов А что если для масштабирования необходимо накинуть только базу данных Но когда я начинаю запускать контейнер в котором и сервисе базы данных то сервис почему-то не поднимается Разумеется от этого валится всё внутри непонятно что происходит таким образом вы сами себе стреляете в ногу пилите Сук на котором сидите И разумеется ограничиваете себя по всем и прочим иным основанием друзья не стоит ни в коем случае создавать в контейнер в котором работает несколько имиджей Создайте изолированные уникальные
00:39:24 - 00:40:27
контейнер для конкретного имиджа и размножайте его сколько хотите изолировано и независимо от других сервисов приложений которые бегут в вашей инфраструктуре конечно же когда мы не имеем требования к конкретной позиции на которую происходит собеседование то было бы неплохо затронуть И микросервисную архитектуру опять же не стоит слишком заморачиваться с ней но все-таки какие-то вещи прояснить Было бы неплохо начнем с базы вопроса слышал ли ты что-либо про шаблон Data Service здесь на самом деле все просто когда мы
00:39:55 - 00:41:06
дизайним наши сервисы очень важно понимать что сервис должен быть Согласно идее микро сервисной архитектуры не связаны ничем изолированным не зависящим от других сервисов и так далее именно здесь появляется шаблон Database он говорит о том что у каждого сервиса должна быть своя собственная база данных однако Это довольно таки простой ответ Так бы мог бы ответить Junior Middle Но если вы север то было бы неплохо отметить о том что шаблон Database можно разделить на другие подвиды Ну допустим скима
00:40:30 - 00:41:39
это означает господин сервис можешь обращаться только к своей конкретно индивидуальной схеме к которой ему предоставлен доступ и с другими схемами он взаимодействует не может ну и соответственно другие сервисы имеют индивидуальный доступ уже к своим схемам и между друг другом они не пересекаются Коль уж мы тут заговорили про шаблоны в микро сервисной архитектуры таким очень популярным вопросам является ивент сорсинг Расскажи мне что такое шаблон ивент Source и тут тоже довольно таки Все просто это шаблон при котором мы
00:41:05 - 00:42:09
можем создавать ивенты А на основании этих ивентов мы можем полностью воссоздать состояние объекта вы той последовательности в котором оно обновлялось ну простая ситуация предположим у нас с вами есть ордер сервис и customer Service customer сервису очень важно получать актуальную информацию о том что ордер был обновлен в нем что-то поменялось его статус заменился и так далее и так далее Разумеется ордер сервис непосредственно и делает эти обновления А каким образом кастомер сервис о них узнают и особенно
00:41:37 - 00:42:36
если мы говорим в той последовательности в котором оно должно быть чтобы не получилось ситуации когда кастомерсервис получил ивент об отмене ордера а потом он получил ивент о создании ордера Конечно сначала ордер должен создаться а потом каким-то образом он должен видоизменяться вплоть до его удаления В этом заключается идея even soursing что есть такой себе пул этих событий куда мы эти события отправляем то есть постим эти события есть и сервисы которые на эти события собственно подписаны как только что-то происходит сервис который
00:42:07 - 00:43:17
подписан на события получает это уведомление такой подход очень круто подходит для аудирования но и не только Ну что такое аудирование аудирование это по сути Лог хронологической цепочки того Какое состояние какой-то бизнес объект переживал от стартовой точки до текущей точки кстати очень важно помнить что мы всегда говорим про это в прошедшей форме то есть события уже произошло то есть по сути от стартовой точки до точки текущая -1 ну или что-то в таком духе Если уж мы затронули отслеживание состояния то было
00:42:42 - 00:43:49
бы неплохо задать вопрос А что такое дистрибьюты трейсинг и Да очень многие называют дистрибьютор трейсинг это дистрибьютор логинг но друзья это далеко не одно и то же самое трейсинг и логинг это разные вещи Ну во-первых логинг это процесс логирования А трейсинг это процесс отслеживания Да они вместе работают и вот такой ответ будет нормальным ответом с точки зрения мидла или синего потому что Junior еще может в этом немножко путаться Но ведь действительности смотришь Все говорят дистрибьютон logging вроде как бы про
00:43:15 - 00:44:22
одно и то же и приходишь на проект и смотришь какие-то там айдишки той самой Спан ID Или допустим Trace ID слушаешь Они же логировании участвуют и думаешь Да вот это логирование Но это два отдельных механизма То есть первый дистрибьютор трейсинг предназначен для отслеживания запросов и сам себе базовую ситуацию наш запрос переходит из точки А в точку N точка N это где-то там через 5 сервисов Как нам среди этих сервисов отследить вот этот конкретный запрос Ведь мы говорим о бизнес-запросе Клиент
00:43:49 - 00:44:51
не понимает что под капотом может быть огромное количество сервисов для него это один бизнес-запрос и вот мы можем так и построить этот ответ Чтобы отследить всю историю бизнес-запроса которые протекал от сервиса к сервису и обратно нам как раз и необходимо тот самый дистрибьюты трейсинг Он позволяет работать нам со Спан ID или Trace ID это уже отдельная история которая в этом вопросе не покрывается тем не менее Однако где мы это будем отслеживать Ну то есть в космосе непонятно да то есть как байтики бы он где-то сохранять тоже
00:44:20 - 00:45:25
непонятно да Именно поэтому здесь и приходят идея логирования дистрибутивного логирования а которое в комбинации с дистрибьюцией трейсинг позволяет нам в каждом сервисе отразить тот самый Трейдинг в котором мы можем отследить историю запроса и конечно когда мы займемся с вами корреляцией логов то есть сбором логов с разных сервисов вытягивая у нас будет фигурировать одна и та же ID которая будет идентифицировать Что окей этот кусочек логов с этого этого сервиса относится как раз к тому запросу который
00:44:52 - 00:46:01
нам необходимо проанализировать это особенно важно когда мы испытываем огромное количество запросов одновременно проходящий через все эти сервисы Да есть такие специалисты которые скажут а давайте-ка Посмотрим в таймс Темп друзья но timestemp не всегда работает timestemp может подойти если действительности сервера где развернутое приложение бегут в одной тайм-зоне Представьте себе что у них немножечко меняется тайм-зона на 45 минут на 15 минут есть и такие случаи и конечно же в этом случае трейс испан ID могут нам
00:45:27 - 00:46:36
существенно в этом помочь с другой стороны это не только про зоны это просто про отслеживание запроса и его анализ ведь таким образом после корреляции логов мы можем собрать все воедино отследить запросы от его стартовой точки до финальной и проанализировать проблемы принять какое-то решение и главное что это короткий путь как это сделать Ведь если не будет рейс ID не будет Спан ID мы по сути сможем добиться рано или поздно желаемого результата проанализировать где проблемы произошла Наверняка есть
00:46:01 - 00:47:05
какие-то данные в запросе за которые мы можем зацепиться Однако это более длинный путь Поэтому дистрибьютон трейсинг в комбинации с логированием позволяет нам этого достичь особенно в микросервисной архитектуре и таким бы ответом неплохо было бы похвастаться на уровне метла и синера конечно не один разработчик не может обойти вопрос связанный с дизайном паттернс да те самые шаблоны проектирования и было бы неплохо рассказать про Некоторые из них причем неважно Север ты Middle поэтому арки так или Junior Было бы неплохо хотя
00:46:33 - 00:47:44
бы помнить что они существуют и рассказать о том какие ты знаешь какие ты применял и почему бы стоило применить этот а не другой или хотя бы писать Ситуацию которая тебя сподвигнула к применению этого шаблона проектирования может быть даже и неправильно но уже тоже довольно таки неплохой результат Ну и здесь традиционно поскольку любой разработчик шаблоны проектирование должен знать должен щелкать он должен понимать когда я что применять он должен буквально их видеть в коде Было бы неплохо рассказать о нескольких из них
00:47:09 - 00:48:06
полно ему индивидуальному критерию на основании опыта Junior Может рассказать и реально описать от одного до двух максимум шаблону проектирования Я не говорю рассказать о том что такое шаблон проектирования что он есть а реально постоять за него То есть когда его применять Какие он проблемы решает Какие в нем есть проблемы и почему его тут следует помнить А тут его следует избежать и было бы неплохо рассказать допустим пробилдер да можно упрекнуть Ты же любишь Билдер Он тебе так нравится Да я люблю Билдер но мы очень часто его
00:47:37 - 00:48:44
используем но здесь вопрос не столько про шаблон проектирования сколько про язык с которым ты будешь работать поскольку многие языки программирования уже давным-давно избавили нас от необходимости использовать шаблон проектирования Билдер и вот здесь проявляется нутро мидла или синьора но как минимум если мы говорим про Java можем применить Project lombok да Все знают что там есть аннотация Билдер и можно было бы рассказать что Зачем нам писать свой шаблон проектирования Да мы знаем о том чтобы он проектирование это
00:48:11 - 00:49:14
про сложность конструирования объектов Да мы избавляемся от телескопических конструкторов мы избавляемся от множества опциональных параметров которые по сути всегда нал который нам не нужны и многое другое Ну опять же повторюсь сложность конструирования объектов Однако за нас уже это все благополучно решил Project lambok со своим решением аннотация просто вешаешь аннотацию на класс не доставляются неплохой удобный белберг с другой стороны если мы говорим про другие языки программирования если опять же мы
00:48:42 - 00:49:46
привяжемся к jwmbase языкам котлин в нем есть дефолтные параметры дефолтные параметр избавляет нас от необходимости устанавливать это значение явно если вы считаете что она может быть нал пожалуйста явно Укажите что там нал и в указании этого параметра явно не будет необходимость до тех пор когда это необходимость реально возникнет то есть по сути некоторые языки избавляют от необходимости реализации шаблона проектирования Билдер а с другой стороны некоторые языки способствуют облегчению его создания поскольку мы здесь говорим
00:49:14 - 00:50:13
о том что у человека опыт работы уже был конечно же было бы неплохо услышать что-то больше чем Builder и более чем один шаблон проектирования с его обоснованием да И опять по моей индивидуальной шкале на основании опыта и многих интервью которые я прошел или вел сам могу повторить что у Джуниора как правило знания от одного до двух шаблонов проекти максимум он реально Может их описать рассказать и за них постоять умидла Это что-то вроде двух-трех у синьора это три и более Но как правило это 35 и выше но опять же
00:49:44 - 00:50:51
это очень сильно зависит от экспертизы каждый индивидуального человека я бы сказал бы эта градация очень очень плавающая что она может быть так А может быть не так но опять же как я отметил это на основании моего индивидуального опыта и Я не претендую здесь на последнюю инстанцию или супер крутой источник что вот только так и никак иначе Если ты не знаешь ни одного шаблона то ты блин не синер не видел и не Junior Нет все конечно очень индивидуально но какие-то цифры базовые должны быть иначе Как нам оценивать
00:50:18 - 00:51:17
людей Именно поэтому следующим вопросом был Расскажи мне пожалуйста что такое шаблон проектирования стратегия да здесь никто не спрашивал о том какие ты знаешь шаблоны проектирования тут конечно же удар был под дых с конкретным шаблоном шаблон не самый простой но не такой страшный как может показаться здесь на стояли Все просто Ну да у меня почему-то все просто Ну на самом деле это всего лишь вопрос экспертизы и как много кода ты пишешь и как много разных шаблонов проектирования себе удается применить
00:50:47 - 00:51:47
или когда ты реально выискиваешь место для применения какого-то конкретного шаблона проектирования или наоборот пытаешься свою ситуацию подогнать под шаблон проектирования тем самым определив подходит этот шаблон здесь или нет Однако возвращаясь к стратегии здесь действительно не все так сложно как может показаться Это всего лишь набор разнообразных алгоритмов при помощи которых можно выполнить одну конкретную операцию Ну представим себе типичная ситуация у нас есть входящий запрос у него есть какие-то данные по которым мы
00:51:17 - 00:52:13
можем этот запрос оценить в зависимости от этих данных нам нужно выполнить либо то либо иное действие и здесь конечно же хотелось бы избежать всякой хераборы типа Switch типа If EOS А если это А если то хотелось бы иметь какую-то абстракцию и Вполне себе коротенький код как раз здесь стратегия нам помогает такую стратегии есть один общий интерфейс и его метод exeqt на основании как раз того запроса и его же качество можно выбрать ту стратегию передачу и в абстрактной форме выполнить таким образом код который будет выполнять эту
00:51:45 - 00:52:55
стратегию он не знает какая конкретная стратегия выполняется и там в принципе можем слиться в одну две три строчки этого самого кода Удобно да абстракция Да Прикольно конечно же это офигенный опыт другой вопрос под кавычка здесь А как ты будешь эти самые стратегии выбирать но опять Мы можем слиться в идее А давайте там свечи внутри строить закрытой форме в открытой форме то есть по сути я взял тот Самый ненавистный свитч или If EOS из одного места другого достижения Да это достижение поскольку вместе где вызывается эта операция это
00:52:20 - 00:53:29
стратегия возникает абстракция это очень круто с другой стороны хотелось бы достичь какой-нибудь абстракции или хотя бы изоляции вместе где эти самые стратегии получаются то есть сначала определить Какую выбрать стратегию вероятно ее создать и вернуть здесь вот как раз нам бы неплохо помог бы шаблон проектирования Factory на основании того самого запроса мы можем оценить его состояние и принять решение какой в конечном итоге стратегию создать Да скорее всего справедливости ради нам тут не обойтись и файлс или Switch Но по
00:52:54 - 00:54:04
крайней мере это будет в изолированной форме никто про этот Switch или знать не будет И вы смело даже можете подать этот код тестирование что выведет его в свою очередь на более высокие и стабильный уровень [музыка] вот так вот друзья Вот так вот пролетела еще одно внеочередное собеседование что ты индивидуально думаешь по поводу этих вопросов ответов вероятно ты задавал бы другие вопросы или ожидал бы другие вопросы а вероятно бы даже давал бы другие ответы что ж призываю вас друзья Пишите все это дело в комментариях Ну
00:53:29 - 00:54:38
как миниму комментарий позволяет нам продвигаться вперед а с другой стороны мы можем завязать реально крутую техническую беседу кто-то что-то лучше знает кто-то что-то хуже знает Один эксперт в этом другой в этом таким образом и происходит обмен техническими мнениями и это круто Это позволяет нам расти я вам напоминаю вы на канале джидбаут с вами Макс Добрынин подписывайся на наш канал ставь колокольчик не пропускай все самое интересное напоминаю У нас есть телеграм-канал там тоже супер круто индивидуальные посты от меня что я
00:54:05 - 00:55:02
переживаю в этих визы и много чего другое что будет полезно любому разработчику от мала до велика А на сегодня друзья это все до новых встреч пока пока
00:54:33 - 00:54:54