Подготовка к собеседованию на PHP Developer
Менторы
Специалисты своей области, которые смогут помочь вам
Middle .Net Developer
Senior Product Manager
Middle Python Developer
Ведущий программист
Backend Software Engineer (PHP)
Senior .NET/C# developer
Middle DevOps Engineer | Tbilisi, Georgia
Middle C# .NET
Senior PHP-разработчик
Middle python developer
Каналы
Полезные Telegram каналы и чаты
Транскрипция видео:
Да я ещё ничего не увидел сечас канал это будет сейчас бросить Да ещё смотрите если будете в юбе тоже открывать помните про то что в юбе нужно замьютить потому что иначе будете себя два раза слышать вот такое бывает Стрим Пошёл Да мы в эфире круто всем Приве видно видно и слышно да всем привет Всех с утром берите чай кофе или что вы пьёте по утрам и Приходите к нам Мы буквально через пару минут будем начинать а пока ребята такой вопрос там Валентина Виталь Расскажите как начинается ваше утро Ну сегодня моё Утро началось раньше
00:00:01 - 00:01:22
чем оно обычно в субботу начинается потому что я ещё захотел финальной по вопросам которые сегодня собираюсь осветить Я как-то переживаю за то чтобы Стрим получился интересным реально чтобы это было прикольное интервью в первую очередь для наших зрителей чтобы они что-то почерпнули из него А так обычно Мой день начинается с того что я встаю как получится и дальше иду по ситуации классно Витали у тебя Как начинается день день начинается по-разному конкретно сегодня Как видно на обложке заявлен код вот код пришёл он обычно
00:00:45 - 00:02:04
просто спит Я даже хотел сказать как на фотографии как соответствие прям не обманул почти только фн это как рала была серия если алды помнят что в коробке то и на коробке так день начинается сильно по-разному Согласен согласен ребёнка в садик отвезти иногда Сходить в спортзал иногда всё это совместить иногда провести ночные работы на проде чтобы ничего не развалилось собственно это было несколько дней назад весёлую штуку переезд редиса с одного железа на другое причём шардирование и движок в едущей машине и она
00:01:24 - 00:02:49
продолжила ехать к счастью это прямо мощно мощно я я тебя очень хорошо понимаю тоже на прошлой неделе короче три миллиона записи мигрировал было прям тяжко вот нам Там задают вопросы про то что рассматриваем мы интервью пого да они есть в лом на канале можете посмотреть и в целом Мы вот с виталей списывались возможно сделаем с Колей тузовым Возможно вы знаете у него есть тоже крутой Youtube канал ролик про то как переходить на ГО и зачем я вот например двист вот и я сейчас техлит в платформенной команде И
00:02:27 - 00:03:45
мы даже думаем попробовать начать писать какие-то сервисы на го вот так что тоже будет интересно и полезно обуть ну отвечаю на комментарии в чате никто никуда не свечи в в го Я просто почти 2 года уже не пишу на PHP такой думаю почему бы нет по питону у нас были стримы где я со беседовал по не по PHP по Гош были и вот теперь по PHP в обратную сторону слушайте у меня ещё есть в тему сегодняшней нашей встречи Почему почему вот собесы сейчас проходят потому что я сейчас очень активно веду найм в свою
00:03:07 - 00:04:19
платформенную команду и мне интересно посмотреть как другие люди ведут собесы как они на них там условно говоря отвечают И вот вопрос Валентин тебе и Виталь какие у вас самые любимые и нелюбимые вопросы на собеседовании которые вы задаёте или вам задают Ну я могу сказать что я э не алгоритм Гай если так можно выразиться я обычно это и не спрашиваю и ээ Ну был у меня были собеседования где приходилось такие задачи решать там с чем справился с чем-то нет естественно Вот Но мне просто больше интересна
00:03:43 - 00:04:58
архитектура больше интересны там всякие ddd qrs и прочее Ну я думаю вы сегодня отчасти это увидите Вот и сам Я люблю как сегодня тоже думаю получится начать с чего-то мягкого чтобы человек себя комфортно почувствует луше не было такого что мы сразу там какую-то жёсткую задачу начинаем Вот я сегодня прямо даже экспериментально кое-что придумал вот первое задание которое мы будем разбирать оно должно нас максимально комфортно погрузить в разговор Ничего себе Классно Это задание Выбери какой ты код там чтобы кандидат рассказал какой
00:04:20 - 00:05:42
не оно будет даже ещ более обсуждая чем увидим сейчас скоро Классно Классно Виталь у тебя Поделись мнением Ну тут надо смотреть С какой стороны мы какие сосы мы смотрим потому что например вви я провожу пять секций это три платформы PHP то есть мы там проверяем сто ко посать много проводим дизайна всякое [музыка] проектирование не очень много мне приходит условного лит кода Ну то есть у нас есть какой-то интервьюеров есть какая-то загруженность и назначается вот у нас например сейчас активно наво
00:05:01 - 00:06:43
при а у нас собственно процесс собеседования как для любого нормального бигтех достаточно стандартизированное отчёты пишем естественно можно от этого в сторону отходить я никого не пытаю в стиле а скомпилированный идут Я больше смотрю как там человек мыслит Какие он проблемы видит Ну вот кот рабочий Но мало ли там что и ещё у меня такая немножко сайт активность появилась где Я помогаю собеседовать именно шников в одну компанию и там мы рассматриваем различные вопросы Ну немножечко так ВС скольз по PHP какие-то там про
00:05:58 - 00:07:28
магические методы какие-нибудь там инверсии контроля на каких фреймворка писал и дальше там база данных очереди там проектирование и одна из задачи которые я даю это типа Вот пример кода тебе даётся на самом деле пример кода Я попросил роч меня пожалуйста генерируем мне плохой syy контролер со всеми Бет практи сами которые ты можешь придумать которые реализует конкретную задачу я не буду называть какую задачу Ну кодре это классно да это хорошее прямо причём это не простою это сколько всего плохих Практик кандидат найдёт и
00:06:48 - 00:08:10
как он предложит их переписать то есть выделить ответственность там поставить корректные транзакции сделать корректную реализацию например паттерна транзакции outb и прочее и прочее ру Круто Круто Спасибо ребят чтоб делись есть холивар най вопрос тестовые задания Как вы оба к этому относитесь которые заранее высылают и ты там сидишь копишь Ну у нас из-за того что мы стартап и такая молодая компания мы короче сейчас против тестовых заданий то есть тестовые задания кажется могут позволить себе компании у которых там
00:07:29 - 00:08:45
100 людей на позицию ждут в очереди и короче вот их можно так отсеивать Ну да типа заходишь на ХХ какую-нибудь вакансию дна смотришь там 1000 откликов как их фильтровать если есть тестовое задание условно там 100 человек его пришлёт из уже какой-то Фильтр тели такие смотрят все вакансии которых интересуют и выбирают те где нет тестового задания в первую очередь и получается они в твою выборку даже не попадут Ну там работает может Видишь как бренд что там типа какая-нибудь большая компания ты в неё Хочешь попасть Вот Но
00:08:07 - 00:09:19
я считаю что давать сеньора тех лидам и даже мелам плюс тестовые заданий - Это плохо Не давайте им у них так мало времени вот ну чего давайте погнали тогда вот такие вопросы ещё в конце обсудим я предлагаю сейчас начинать сейчас такая будет как официальная отбивка расскажу что мы здесь делаем И зачем всем привет я Гриша Скобелев jav разработчик и организатор книжного клуба между скобок Сегодня у нас проходит публичное собеседование на софтвер инженера но на язык ПХП это довольно-таки очень интересная тема из
00:08:45 - 00:09:51
неё можно будет почерпнуть как проводить собеседование Ну и какие вопросы задают и как его проходить проводить собеседование будет невероятно яркий классный Валентин Валентин Привет Расскажи о себе Привет Спасибо что пригласил на это интервью очень рад здесь оказаться на этом канале я сейчас не работаю ни в одной компании я решил сосредоточиться на своём курсе хардкорного PHP который сам собрал то есть он даже не на базе какой-то платформы второй поток как раз закончится на следующей неделе в пятницу
00:09:19 - 00:10:27
вторая у второй группы будет последняя двадцать Пятая лекция курс длинный много всего потом будет ребят выясню насколько им было вс комфортно В итоге и сосредоточиться решил на орсе У меня есть несколько проектов своих интересных это тайн это продвинутая система типов с рефлексией для PHP очень большой сложный проект у меня там даже целая команда набралась по-моему человек из шести Вот как раз недавно созванивались обсуждали идеи и я тут в конце года меня осени приду RC ВМ PHP надо его оформить и там Судя по обратной
00:09:53 - 00:11:11
связи в Твиттере и в остальных местах Я думаю что его должны будут принять Ну там не большое изменение в синтаксисе которое например в Java есть это когда ты после оператора New можешь сразу ну в две точкой вызывать метод в PHP Нужно обязательно выражение New ещё раз обернуть скобки вот я нашёл способ на уровне грамматики это поправить соответственно хочу предложить вот это вот чем пром бы PHP разработчиком мм в общем потом просто вот решил пока попробовать на своих делах сосредоточиться такое у меня
00:10:32 - 00:11:50
сейчас состояние Вау это прям невероятно классно интересно твой мир очень заражает и вдохновляет мы все ссылочки соберём под видео ребята ознакомьтесь и Может вам тоже будет интересно а проходи у нас будет Витали который тоже мной сегодня в стиле Барби Вита Привет если кто не смотрел фильм Барби советую Это весёлая действо где можно выключить мозг и просто отдохнуть собственно Давайте долго не будем яча шник потому что уже немножко от этого отошёл от конкретных языков в компании Авито в платформе авторизации У нас есть
00:11:10 - 00:12:42
некоторое количество достаточно нагруженных сервисов достаточно критичных Мы даже в рамках своей команды Мы даже сами себе сре отслеживаем чтобы у нас всё хорошо было чтобы нам не приш не настучали по голове за то что у нас где-то пробле есть Нама больших нару который я не могу раскрывать а писал за свою карьеру тно очень на питоне на PHP вот сейчас Нан пишу занимался псом писал на франсе всякие реа собеса на фронта тоже проводил раньше сейчас к сожалению или к счастью там последние пару-тройку лет я
00:12:08 - 00:13:32
уже на фронте особо ничего не пишу и Ну в целом помню как это ещё происходит Как там браузер работает наверно если вспомнить СГУ пройти Собес на н Джуна И я также как Валентин Ну почти так же как Валентин У меня теперь есть свой курс То есть я тоже входил в Гош с нуля после PHP и мы со слёрм решили собрать такой курс по горшки для условно midle плюс разработчиков Кто знает другой язык кого не надо там рассказывать Что такое переменные а сразу по верхам пробежаться и рассказать как в Гош вообще писать начиная там от
00:12:50 - 00:14:15
языка там рутины контексты микросервисной архитектуры Патер взаимодействия обели и так далее и так далее Всё что нужно там в современной работе В современных сервисах хотя бы понимать то есть не обязательно уметь по части ос разворачивать поддерживать а просто разбираться и ещё на с сейчас рю два курсан для инженеров и это такая сборная солянка где изучает тан фон кубер и всё подряд просто чтобы люди кто хочет тоже свич нуться там условно сес админов или разработчиков могут понять что это за профессия там
00:13:32 - 00:14:48
условный ПС Ну понятно devops - Это не человек методологии и так далее но это уже другая тема да да мы не раз это обсуждали да Ну крутяк Виталь тоже твой пример невероятно вдохновляет у нас какой-то прямо сегодня такой мощный сетап и того кто собеседуем нырять и начинать Валентин тебе слово Да отлично Спасибо [музыка] за за всё что рассказал очень интересно чем ты занимаешься вот я так ещё до этого тоже понял посмотрев твой CV и у меня к тебе вопрос ты я так пою сейчас активно на PHP не пишешь но даже там в
00:14:10 - 00:15:32
комментариях на Мом Кана ты писал что ВС равно его отслеживает во-первых Интересно почему Наверное я догадываюсь что Как связано с работой тоже или это просто ради себя Ну во-первых не хочется забывать я вижу язык развивается и кто знает как оно там дальше пойдёт может быть когда-нибудь понадобится снова писать мне PHP Тай хоп в принципе помню это первый момент второй момент шников и в принципе то хочется понимать чтобы быть на одной волне Потому что если человек себе начнёт что-то рассказывать А ты в этом
00:14:57 - 00:16:09
вообще не ВК ногой потому что в новой версии это появилось Ну понятно там можно погулять поискать даже в процессе когда собеседуем но всё равно хочется это знать и язык не так быстро развивается Ну относительно быстро но прямо новые фичи освоить несложно Там те жебе например есть на это много времени не уходит и есть такой вопросик который спрашивают на собеседовании в принципе такой довольно абстрактный А каким образом ты отслеживает новые тренды То есть когда тебя куда-то нанимают есть такой вопрос
00:15:37 - 00:16:42
и уже по ответу на этот вопрос на самом деле многое можно понять нука Я как отслеживаю у меня есть там некоторая копилочка подписок скажем так различных а xly под X под размывается там условно там рафом какой-нибудь PHP Pon довольно интересные рассылки типа тебе условно раз в неделю подходит приходит подборка новых статей самых-самых разных блогов тебе не нужно тратить время выискивать за тебя уже всё собрали и всё пользуешься неинтересно просто там предел заголовка статье письмо удаляешь Ну тогда
00:16:09 - 00:17:16
интересно бывает Угу Ну и плюс Хабр естественно угу понятно Круто Вот как раз было бы интересно узнать более подробно ты сейчас назвал файберы Да вообще какие фичи из скажем всей восьмёрки которая вот 80 там 3 года наверно выше назад из всего 80 81 82 83 недавно что ты можешь самое значительное выделить что тебя порадовало А что может быть расстроило и что ты ждёшь в будущем от PHP что расстроило не знаю что расстроило мне показалось странным например возвращаемые типы когда я понимаю примене ели вкратце это напри жит
00:16:43 - 00:18:14
компиляция я её сам не успел попробовать скажем так на последнем проекте где я работал с PHP Это был 74 то есть мы на восьмёрку там не успели перейти я думаю там до сих пор не переехали там и syy ти не самый последний пятый по-моему неважно Вот то есть с восьмёркой я работал на уровне посмотрел статьи посмотрел примеры там немножечко где-то под капотом если в статье описано Как там внутри работает F мне каже по Су почти такая концепция Ну вот эти типы что понравилось клас я не помню это восьм появилась или
00:17:30 - 00:18:49
нет ме что-то не то лезешь куда-то не туда Это если вкратце вот насчёт есть такой холивар вопрос хотелка все очень ждут дженерики в PHP во-первых Как ты думаешь Состоится ли это в ближайшем будущем Если нет то почему именно в PHP это сложно реализовать я тебе подруго были против но их всё равно втащили реализовали мы например у себя начали где-то использовать это полезная штука когда у тебя строго типизированный язык а по поводу PHP Насколько сложно это завести честно говоря не знаю Я знаю что дженерики там
00:18:27 - 00:19:53
делают условно через аннотации псалма И им же Валиди про подкапотные проблемы насколько их сложно завести я тебе просто не отвечу угу ну здесь сам немножко комментирую получается то что мы в PHP доках сейчас пишем дженерики и все увлекаются строгой типизацией Но я надеюсь что большая часть PHP аудитории потому что это позволяет гораздо более стабильный код писать это как бы аналог стираемый дженериков которые просто в ран тайме их нету ну как в PHP доке мы пишем это комментарии и в том же пайтоне Да вот
00:19:15 - 00:20:23
как раз насколько я знаю дженерики как раз стираемые там вообще система типов она нанта не влияет вот а другие способы типа как мономорфная предполагает что Просто для каждого класса С дженериков класса с конкретными типами уже подставленный скажется на памяти потому что все эти классы нужно будет подгрузить и PHP так устроен что он в момент да класс там подгружает там ещё какая-то проблема с апко дами там уже глубже Я тоже не знаю вот ну верификация связана с очень большим рефакторинга PHP кода Но таким
00:19:49 - 00:21:01
что типа это затронет примерно всё И никто не готов ни проделать эту работу ни оплатить её наверное Ну и поэтому вот вопрос под Виши но мы можем использовать дженерики спокойно да в чпи доках стираемые дженерики и в принципе сейчас иде поддерживает есть куча инструментов в общем Вполне себе можно писать и и не страдать по поводу того что их нет на уровне итра так хорошо Ну да я дополню Ключевое что на уров НТА типа этого нет на уровне там литеров и прочего это есть и по поводу сложности [музыка]
00:20:27 - 00:21:44
затаскивать я была Какова скажем так какой бас фактор разработки самого PHP и он был два человека Сейчас помоему даже один остался один из них это я не вспомню кто какую фичу там Никита Попов Да кто-то из них ул и типа один из них знает т и кто-то ул и типа сейчас будет это очень сложно развивать поддерживать там очень много под капотом всего накручены Да есть такая проблема но на самом деле сейчас уже подхватил во-первых PHP Foundation появился Да это организация которая спонсирует как раз разработку PHP собирая с инвесторов
00:21:07 - 00:22:22
деньги Ну и там появились ребята тоже довольно активные Никита Попов Конечно я тут пересматривал когда свой rfc делал его работы то как он это всё описывал он конечно гений Ну мне кажется вообще во многих абсолютно аспектах но ребят которые сейчас тоже подхватили делают интересные фичи Так что я думаю PHP ещё будет умирать какой-то время точно Так ну что ж давай переходить уже к более таким практическим заданиям Но вот первое как раз такое экспериментально интересно э именно с высоты твоего опыта который я
00:21:44 - 00:22:54
почерпнул из твоего CV понял чем ты занимался интересно было пофантазировать на такую тему давай откроем Этот Яндекс код я туда Просто скопирую задание и мы попишешь понятно как вручную локально запускают проверки нужно ты такой естественно предлагаешь давайте мы какой-то вообще пайплайн минимально соберём надо нужно кидать просто что туда может войти вот я тебе могу Ты можешь даже говорить что есть такая идея я тебе буду говорить там есть такой инструмент или нет Если вдруг ты забудешь что-то из этого Окей смотри
00:22:19 - 00:23:25
вопрос Мы про говорим дов То есть то что запускается на условно каждый КСТ на мае Окей давай тогда поступим так я напишу вот такую штуку и Скажем мы будем на неправильном писать концепцию я сейчас сходу не вспомню может весь синтаксис но какие у нас тамп называется Какие шаги у нас в принципе могут быть и на какие дейст зам давай начнём с самого простого нам нужно запустить условные Юнит тесты я сейчас поверхностно пробегу И кстати я вообще не подразумевал что ты будешь прямо в конкретном ял синтаксисе
00:23:18 - 00:24:56
писать но если хочешь да то есть мне даже просто идей бы хватило но давай ну так просто ну кто знает там э и прочее Это я могу только ошибиться там может не называется но суть отражает Окей какие-то конкретные тесты потом а сори Не сначала не тест а сначала у нас будет ннг Линт потом тесты Потому что если н не прошёл наверное тесты не стоит запускать Угу потом возможно интеграционные тесто приложения могут быть причём они не обязательно всегда запускаются например Это мы дальше детализирует Потому что это тяжело гонять
00:24:10 - 00:25:44
угу так тест может быть условный там de автоматический если прям хороший проект уже продвинутый Production dey это зависимо от веток и я пропустил пункт на самом деле важный Скорее всего в контейнерах естественно крутится и вопрос мын наверно запускаем какой-нибудь образ условный Докера Стартуем какого-нибудь Значит нам нужно сначала собрать образ то есть контейнер тест интеграционные тесты если дальше углубляться нам Наверное нужно ещё скан контейнер сделать так называется когда приложение проверяет уязвимости
00:24:56 - 00:26:46
контейнера естественно всё это не обязательно там на каждый шаг запускать перед мем в Мастер чтобы все все пути прогнали хорошо что затронул вопрос безопасности для Пхи ещё что-то можем проверить по безопасности Ну такой базовые какие-то вещи по-моему есть в есть Ау в ком тоже также дано тоже Так ну на ски Так мы что-то за котили собираем контейнер сканируем его это ещё даже не часть нашего приложения это просто там базовый пайплайн где мы говорим как там называется по-моему называется условно там Base C PHP
00:25:59 - 00:27:31
другого репозитория мы его эдим там вот эти штуки Все прописаны автоматически и у нас в репозитории Торо чтобы не было дублирования когда на Чар там условно говори что приложение это учитывает вот эти шаги прогоняет потом Естественно удт с ошибкой если что-то не так естественно нужно будет смотреть потом мы запускаем причём это может быть условно PHP Unit - это там dependency Угу а поэтому возможно нам нужно собирать два контейнера отдельных потому что впт мы пойдём с другим контейнером Ну давай так
00:26:47 - 00:28:29
мне кажется это уже такие очень технические детали именно по организации обязательно давай вот именно ещё немножко по смыслу здесь пробежимся вот что ещё можно только что как раз обсуждали там дженерики что ещ в связи с этим мо а дадада нун я подразумевал что там будет там pH и прочие штуки коф ещё что-то такое Ну хорошо Да да вот это всё стата анализ сюда входит и вопрос по тестам вот если мы уже допустим покрыли там рекомендуемые условно 90% о которых мы договорились приложени Как нам проверить можно качество самих тестов
00:27:48 - 00:29:14
что покрытие - Это не просто То что мы строку какую-то пробежали А реально тест качественный Знаешь ли ты инструмент который проверяет качество самих тестов скажем так тесты для тестов Ну мы мы мы говорим чисто про код coverage процент или что-то более подробно Ну смотри C coverage - это одна из метрик да то есть если у нас Cage высокий Ну типа Чем выше А ещё есть какая-то Мне кажется я знаю в чём ты это mation TES конкретный инструмент для PHP я не вспомню сейчас вот здесь я как раз подсказываю как говорил да что это всё
00:28:30 - 00:29:46
не запомнишь но очень рад что ты про это вспомнил да для PHP соответственно есть инструмент отлично работает всё с ним в порядке можно использовать можешь вкратце рассказать В чём смысл мутационного тестирования Ну давай вкратце покажу пример у нас например есть сечас Я могу ошибиться с порядком Толи то ли есть такие приколы когда такие самые банальные вещи забываются и условно Она говорит у давай наом рование говорит так наверное неправильно Немножко там If бакс например меньше нуля fse Ну или да Да и здесь например
00:29:08 - 00:30:49
и вот мутационного тестирование так по-моему так так там типизация и оно говорит что Короче говоря меняет условия и проверяет тест например если мы в тесте проверяем подставляем туда X ра -1 проверили что ЛС а мутационной тестирование меняет вот условия например делает равно или больше и проверяет что тест сломался то есть получается Р Да всё верно Да Таким образом мы даже ну более на более таком семантическом уровне проверяем тесты нежели просто покрытие потому что покрытие может ничего значить имин там
00:30:14 - 00:31:38
не знаю рный оператор записан в одну строку и не факт что обе его части проверены да А всё чудесно переходим к следующему заданию вот мне показалось что именно Это задание должно быть таким разогревочный обсуждай и довольно комфортным не знаю как Да но я скажу если чуть-чуть подумать здесь ещё можно шагов накидать Да но мне этого достаточно Я прекрасно понял что ты Отлично в этих вещах разбираешься Вот теперь Чуть более практическая задача так вот что я придумал Значит у нас есть вот такой код тут уже PHP будет
00:30:58 - 00:32:10
ну здесь больше равно 82 потому что я использую конструкции которые 8.2 появились есть некоторые приложения есть некоторые некоторые аналитика Ну и скажем так аналитик назовём этот класс интерфейс задача которого генерировать отчёт по некоторой спецификации спецификация - это какая-то шка там какие-то данные которые определяют это неважно для решения задачи и собственно результат другая детка собственно Отт с этими данными У нас есть реализация на базе постгрес понятно что она там в Конструктор инжектит какой-то коннекшн
00:31:34 - 00:32:43
что-то делает но под капотом у неё тяжёлые запросы с Джой нами всякими агрегация и мы поняли что когда мы дёргаю у нас просто очень долго это обрабатывается при этом нам не важно чтобы Отт был актуальный каждую секунду задача Добавить сюда кэширование с использованием 16 это ты можешь по ссылке спокойно посмотреть как выглядит интерфейс меня вопрос мы делаем кэш ожидая что между запросами приложение почистила условно да да можно допустить такое Да окей давай посмотрим что там в стандарте кай Инста Get Set всё
00:32:09 - 00:33:42
понятно Так я копи пас Да давай прямо сюда вста так это всё Наверное нам понадобится оставим на уровне вот так так это всё берм так что тут важного Ну понятно в стандарте там типизация параметры и прочее мы всё это игнорируем Рени задами это всё понятно всё стандартно Так у нас т ну здесь неправильно пишу что он возвращает мало ли это нам понадобится Так что у нас есть что он исключи что-то не пошло не так а О'кей мы тогда смотрим кейс для запроса в нулёвое приложение когда э у нас в памяти ничего не может быть то
00:33:03 - 00:34:53
есть условно там э приватные Ray в котором мы что-то можем сложить мы не рассматриваем да Угу да Хорошо А можем ли мы сказать что есть какой-то набор свойств в отчёте который может однозначно идентифицировать однозначно идентификатор у него определить Давай попробуем то есть мы говорим о том что specification целиком определяет уникально Вот этот конкретный отчёт и будем считать что в specification Ну нет прямо конкретного поля Да попробуем придумать универсально какое-то решение по ключу [музыка]
00:34:10 - 00:35:48
может нам здесь помочь Ну то есть не опираясь я собственно потому и спросил про работу между запросами что если бы у нас запросы могли прилет в процессе мы бы какой-то в переменных построили и мы могли бы какой-нибудь использовать зас подумаем Да именно персистентный конечно как бы исходим да у меня ключевой момент Каким образом определить идентификатор если это разные запросы Ну давай накида какую-то идею вообще [музыка] так Ну естественно конструктор [музыка] Угу ш так по-моему вот так можно написать
00:35:00 - 00:36:48
чтобы не знаю будет ли Линта ругаться Вот так написать Вот так не слушай мы такие вещи обращать внимание это слишком всё отлично так пойдёт и сяк пойдёт это ну базово ну я напишу Каким образом определить давай накида If так Get If Report присваивается зш Get пока какой-то ID тогда мы Угу предполагаю что там тоже самое про случае что-то там посчитали сложили Ну довольно базовая логика какой-то [музыка] ключик Может подскажешь вот стандарт интерфейс он может принять объект прям нереализованный да по стандарту любое
00:36:09 - 00:38:08
значение мы можем положить Уно метод сери не кидает исключения Да ну и по красоте ещё бы priv настраиваем ма хотим поменять [музыка] Угу Ну здесь я пишу предполагаю чтот количество секунд Да так 10 на 6 теперь осталось определить по айдини какм метод надор вернуть да тут может быть конечно проблема прогрева кэша когда к нам придёт за двумя такими репорта параллельно мы дважды создадим репорт можно какие-то блокировки придумать Будем ли мы в эту сторону как-то идти Угу Ну тяжёлый вычисление отложить Ну вот по поводу фтора по
00:37:18 - 00:39:04
поводу ключа вот допустим Если у нас нет возможности поменять specification то как вот это что как мы можем попробовать создать ключ Ну так немножко на коленке не опираясь на содержимое speciation первое что приходит в голову это сказать что у нас ключ будет вида ID вспомнить строчку в качестве ключа сделает мы наверное можем взять от неё наме какую-то сумму потому что строчка может быть огромной Зачем нам гигантский ключ условно там 256 и Вуаля У нас есть какой-то уникальный ключ там возможно конечно коллизии
00:38:19 - 00:39:52
изза 256 Ну типа вероятность очень мала это первое что приходит в голову Я не уверен только что там сериа не не всё так я этого примерно и ждал меня это устроит Ну другой вариант мы можете сделать рингу предполагаешь что там этот стрин реализован бы да но допустим его нет вот первое решение наиболее универсально вполне нормально Так теперь вопрос Можем ли мы вот это решение твоё А вопрос первый такой там был в кше ещё метод почему-то ты не стал его использовать Ну допустим типа в начале проверить и тогда уже и потом Ну если
00:39:13 - 00:40:35
это какой-нибудь сетевой кэш то это дополнительный поход если кэш has тогда ш Get сделать самый простой Мы же всё равно Ну ну то есть здесь у нас нет дополнительной обработки мы сразу возвращаем если есть всё да это какое состояние исключает между Ну какую проблему то что мы сразу Get используем м ты Ты кажется уже я про то что состояние гонки Да мы таким образом убираем Всё верно Да ты же сказал сетевой там туда-сюда всё верно теперь следующий момент как нам вот это же решение применить к данной задаче не меняя класс по анали
00:39:55 - 00:41:26
вот этот анали короче постгрес аналитик можно ли это решение было бы написать вне этого класса так чтобы оно работа ты иметь своего рода декоратор чего ты предлагаешь что-то вроде сейчас напишу назовём его Али IMP этот интерфейс соответственно мы конструктор в котором мы передаём [музыка] нам репорте например и тот же самый другой анализ переда это и соно дальше реализуем ием Да делегирую вызов этому репорте внутри Давай дом просто лу Давай дом чтобы все нсть так она есть так Private ш Интерфейс Да поему угу
00:40:42 - 00:42:47
ш priv Я почему сфокусироваться что это может быть секунды потому что мало ли там миллисекунды продаются не по стандарту по-моему секунда Ну соответственно мы этот и здесь мы делаем и здесь просто вызываем [музыка] то Дан от принимает Амен форми Ну если я ничего не пропустил здесь просто оставляем код был вот там у нас там как раз какие-то данные отчёта которые у нас достали вот О прикольно что здесь вдвоём можно Да кодить прям парно програм вот ну всё Ты отлично справился с этой задачей собственно Здесь всё
00:42:02 - 00:43:53
чудесно дай только 5 секунд ещё подумают быть понятно варианты которые его в строку преобразуют чтобы от неё хэши посчитать ещё проблемы Ну я Обозначил проблемы которая здесь не решена это то что если придёт два запроса на долгий репорт они оба начнут формировать этот репорт это решатся там какими-нибудь блокировками и ожидания на уровне клиента либо клиенту возвращается например там заголовок условно а потому что мы формируем репорт он типа придёт снова и уже за кашированный возьмёт именно чтобы
00:43:17 - 00:44:27
он не ждал этот запрос мало ли там 10 секунд он формируется Зачем нам там конект к приложению висящий если мы можем сказать ему приди попозже вот через столько секунд Да ну отлично Что ты ещё дальше наперёд думаешь Да но в рамках этой задачи она значительно проще этого достаточно всё отлично Ну да просто специфика моей основной работы такова что нужно думать прям максимально глубоко по кейсам потому что как только ты их думаешь у тебя стрель нибудь в проде всё развалится придут и настучать тебе что у
00:43:54 - 00:45:08
тебя всё ломалось да так хорошо давай тогда Теперь ещё вот следующая задача уже такая будет наверное более архитектурная а опять у нас какой-то проект на этот раз некий магазин Значит у нас с тобо есть тут несколько классов к сожалению пытался как-то ещ упростить но Наверно это тако У нас есть продукт для него есть репозиторий здесь он отображён просто контрактом по факту Он имплементировать от этого есть некий идентификатор у продукта Ну он выделен object потому что там может быть угодно есть сам продукт
00:44:32 - 00:46:02
соответственно сейчас в продукте у нас R свойства prod ID и дальше всё остальное мутабельного продукта на складе и есть у нас вот по классике написанный такой именно сервис inventory сес он принимает это репозитории и есть две сейчас операции доступны это резервирование этого продукта соответственно мы его достаём декрети иниш пополнение то есть складки там какая-то инвентаризация приходит и добавляет нам наоборот Вот соответственно давай нанм с того как бы НВИ этот код с точки зрения там последующих изменений в него с точки
00:45:16 - 00:46:41
зрения может быть инкапсуляции что здесь можно реорганизовать там и так далее каких-то подводных камней на уровне там типов или ошибок Вот таких Мне кажется здесь нету это не про это задача вот что бы ты мог здесь как бы его мог от рефакторинг Я просто поясню зачем например делают такие штуки как вот тип продукта одини просто там строка или тип т э это как минимум позволит случайно не подставить вот у Вас в коде например есть Box X там какую-то id1 Угу бак Y ID 2 и это юид разных сущностей То есть это например там Т продукта это Т
00:46:01 - 00:47:27
юзера если они условно строковые или просто там тип какой-нибудь универсальный то можно ошибиться не заметить там не тот тип сюда подставить и будет ошк не той сущ Я думаю просто такой вопрос может возникнуть Зачем так усложнять как этот подход об называется ну вот или что это раз слово Ключевое второе скажем так вот замена на как общим словом называется се минуты д буду думаю чтобы вспомнить Да это когда мы избавляемся от да то есть ког у нас много примитивов мы их заменяем на так Поехали дальше Ну на самом деле
00:46:44 - 00:48:14
именно я не знал мне кажется у в голове какой-то другой висит Ну ладно так Ладно так продук Окей кстати здесь Наверное нужно как-то расширить класс на будущее ти Возможно там будет Ну не знаю в циклах каких-нибудь вы прикидывать исключения ту как минимум личный продукт какой же там недоступен Ну да да но Ой ну окей дальше мы сосредоточимся только на сервисе правильно Да окей репозитории там условная доктрина репозитории Get Ну начнём с того что эффект гонки ко здесь возможен очевидно решается он естественно границами транзакций один
00:47:37 - 00:49:22
из вариантов когда это будет например неме get get for update называется условно Ну тогда там явно как-то нужно транзакции прокиды это отдельно сложная тема На каком уровне эту транзакцию прикидывать чтобы оно было отлично А вот как называется тип блокировки Ну с точки зрения Да это понятно А вот в плане е э уникальная блокировка на запись которая блокирует все чтение ты про это короче это будет пессимистичный блокировка Правильно Потому что мы явно блоки да да А какой альтернативный вариант для неё есть
00:48:31 - 00:49:51
ээ оптимистичная когда мы пытаемся закоментить транзакцию видим что кто-то уже поменял значение и всё да как мы это видим чере при помощи чего а мы э делаем апдейт Ну если не на уровне этого на уровне SQ мы делаем апдейт там Set qu равно qu там produc ID ра какой-то produc ID так не так product ID Ну понятно холдеры для PR запроса И самое главное Угу и значение qu осталось То которое мы Достали из базы qu равно Да это интересно один из вариантов кстати здесь он да сработает Но вот у нас там ещё какие-то Поля из
00:49:11 - 00:51:05
title description Ну соответственно будет странно если они будут опираться на НТИ А как более универсально эту задачу решить добавить Поли версионирование то есть условно вместо ти версию он которая всегда растёт то есть мы ещё в сет будем н плюс О отлично Да ну я уже за тебя договаривал что я не неп что ты всё это знаешь это отвечаешь так отлично это офигенно что мы про это поговорили да то есть это был пункт номер два у меня давай ещё подумаем теперь вот архитектурно что здесь можно поправить может
00:50:11 - 00:51:26
быть да Сейчас подумаю архитек мини там куда это резерв Зачем как его потом отрезе вирова Ну усв давай от этих деталей избавимся Давай я вопрос задам какой здесь вокруг НТИ У нас инвариант есть ты имеешь в виду то что он увеличивается уменьшается Ну да то есть Какое правило нерушимо должно быть для количества в рамках нашей логи Ну Ну вероятно оно не может быть меньше нуля вероятно про быт Когда можно уйти там в какой-то кредит Да это ты снова сбегаешь вперёд Отлично Да мы потом подойдём к этому Вот из того что сейчас написано Да
00:50:47 - 00:52:11
у нас получится Так что Ну окей в предпосылке Что н которые приходит нам в методах РВ и реплениш оно будет если больше нуля всегда то кн никогда не опустится меньше нуля Как нам инкапсулировать этот инвариант вот то есть если мы будем дописывать новые какие-то решать задачи допустим резервация каких-нибудь товаров бронирования оптовая там новая задача ещё добавим метод мы можем этот вариант легко потерять Как нам переписать код чтобы вот этот вариант был [музыка] [музыка] наброскам напишу там инкремент не буду подробно расписывать
00:51:35 - 00:52:59
там логику инкремент Дай и э у нас естественно появится какой-то наверное льно лас э получается quantity из negative Error например назовём у и соотвественно будем проверять естественно здесь будем выдавать там invent так у нас здесь минус чит декремент Ну и насколько тут коне проблема немножко то что здесь отвлекает такая да то есть мы получается переносим и вариант на уровень самого объекта вместо того чтобы его на уровне сервиса оставлять Да тут конечно нужно будет дополнительную обвязку писать
00:52:30 - 00:54:21
чтобы оно из базы корректно подтягивались объек что у нас какая-то такая крутая ом что она всё это гидрирующий [музыка] у нас как бы мы тоже от да да Хорошо Как ты думаешь Вот какой да ну да он здесь должен приватным быть а стоп не не приватным не приватным всё правильно здесь на самом деле Просто есть разные способы это решать можно было бы вот этот отдельный класс не внедрять НТИ а просто сделать методы res иш на самом продукте и тогда это стало бы больше похоже уже на такую сущность в которой инкапсулирование как
00:53:37 - 00:55:10
бы ну да смотри теории Да но но на практике Скорее всего нет потому что помимо продукта у нас окажутся складские остатки какая-нибудь сущности это вообще будет другой сервис там сетевые походы ещё что-нибудь потом возможно появятся ещё какие-нибудь приколы с тем что товары которых нет но они уже в пути и так далее и так далее хорошо а вот если сейчас посмотреть на класс продукт какой у него кохин высокий или низкий вообще что это такое может быть метрику какую-то знаешь да вечный прикол Чем отличается
00:54:28 - 00:55:51
кохи от Каплин кохин это про связанность с другими сущностями насколько они от него зависит правильно я по я зде скорее всё что находится внутри класса релевантно там его поведению и между Ну не может быть разделено дальше Вот наверное моё понимание такое то есть насколько высоко связаны внутренние компоненты другого компонента и в них нет ниче можно было бы убрать вот здесь можно ли от чего-то избавиться как-то разделить этот продукт чтобы он стал более вообще да У нас может появиться какой-нибудь продукт версию потому что
00:55:09 - 00:56:40
может быть сечас [музыка] напишу у которого соответственно будет ну потому что условно Это один и тотже продукт но в рамках того что мы наверно им торгуем где-то он может меняться там название поме и так далее но если чувак зат в свои старые покупки он хочет увидеть ту версию которая была а если мы здесь поменяем соответственно он в старых покупках увидит уже новую версию там ещё цена появится которая тоже менятся обязательно и тоже хочется декомпозировать продукт отлич идея что ещё версионирование здесь
00:55:55 - 00:57:15
придумал и подумал наперёд что мы хотим для покупателя фиксировать то что он реально покупал на тот момент в прошлом тогда Натой строке класс можно Нова Давайте избавиться от лишнего Давай это проделаем продемонстрируем я бы его тогда переименовал уже ближе к предметной области его да да Давай придумаем как его назвать если это не продукт что у нас тогда будет Ну мне кажется из имени сервиса можно взять слово Вот как раз прок Как вариант да ну то есть давай назовём прок Ну это знаешь какая-то отсылка к
00:56:43 - 00:58:07
корзине invent как раз остатки то есть остатки продукта и Мы чисто этим здесь Ну да если мы толь говорим то да это или можно за А да можно так Да отлично Вот то есть мы таким образом во-первых переместили и вариант из сервиса в объект теперь все кто с м смогут записать отрицательное количество разделили это на разные куски стейта Так что у нас мы спокойно манипулируя названиями описаниями и Сток продукт у нас сосредоточен только на вопросах остатка соответственно у нас там в этой не будет лишних полей которые вообще не имеет
00:57:29 - 00:58:52
отношения к работу с с остатками Так теперь вот давай то что ты начинал раньше говорить мы вот уже что поправили первую проблему Что из нас пришло много пользователей они одновременно пытаются какую-нибудь там популярную книгу и у нас не будет с кони какая-то беда потому что мы добавили оптимистична все начнут всё равно блокировать этот эту строку там даже всё равно хоть оптимистично что мы тогда ещё можем придумать какие дальше Шаги к масштабированию Ну ты имеешь в виду у нас есть какой-то популярный продукт не
00:58:10 - 00:59:26
знаю там билеты на ма кото Да Дада так и Наша задача консистентность это всё так чтобы все не страдали правильно я понял да но может быть cons я не знаю Здесь как вот тебе в голову придёт то есть мы можем и какие-то уже с бизнесом обсуждать детали что типа ребята гладко работало нам нужно компромисс сри мы говорим моку нажати кнопки пока в голову не приходит если мы говорим про то Чтобы отобразить данные и так далее разделить это там CS разделение чтение записи естественно данные могут разъезжаться Но именно в момент записи
00:58:52 - 01:00:22
мы должны валидировать что данные корректны то есть там чувак видит что остался один билет жмёт кнопку а ему отвечают что сарин ты не успел одно это операция чтения другой операция записи это вот первое что приходит в голову про там когда ты говоришь про больший нагрузки А что можно сделать Дальше можно придумать сейчас [музыка] подумаем То есть Давай посмотрим вот сюда Наша задача оптимизировать получается выполнение вот этого куска Ну да Ну давай рассмотрим может быть идею которую ты уже предлагал там по поводу
00:59:40 - 01:00:58
ухода в минус просто развернёт побольше и посмотрим как нам как это на бизнес отрази если мы разрешим уходить Тогда нужно как-то компенсировать или Ну если мы разрешаем уходить в минус просто прикол в том что здесь Для этого не хватает как минимум сущности условного заказа в котором Мы записали что вот вот этот человек за эти деньги вот эту что у нас тогда вот этот даже он немножко отсюда уйдёт Как из Единого центра скорее будет ну он будет как для нормализации для там оптимизации там чтения чтобы не подсчитывать консти
01:00:19 - 01:01:45
Понятно Ну мне приходит в голову какой-нибудь система где мы просто кидаем события резерва и уже отдельно их все обрабатываем ны это будет выглядеть как ну условно если событие резерва быстро обработала то условно почти мгновенно увидел успех если нет у него крутится какой-нибудь динг там процессинг и он ждёт там колб себе в браузер или в мобильное приложение там событий в веб сокете Каким образом угодно Хоть даже пере опросом пере опрос это конечно плохо с точки зрения нагрузки Когда именно его событи покуп
01:01:12 - 01:02:35
будет а там уж как бы кто успел тот и съел Угу Ну да да меня даже наверное устроит этот ответ Ну я ну грубо говоря здесь будет какой-нибудь там Q там publish reservation и уже это там условно secs укладывается каким-то образом операция записи там отдельно где-то в фоне происходит но мы не решаем естественно проблему того что если мы храним здесь НТИ то это будет куча апдейт каждый раз минус единица это будет асинхронно но типа скорость мы здесь не увеличили Угу да Ну ещё знаешь что мне здесь думается
01:01:54 - 01:03:23
можно будет что ещё чуть-чуть оптимизирует работу с базой но там надо будет конечно Вот это отрицательные вопросы решать есть в условном постгрес такая штука Как нет как атомик конкременты и по идее мы можем написать Ну грубо говоря вот такой запрос сейчас в самый низ вставлю э который нам позволит атомарном инкремент Ну точнее декремент в данном случае НТИ это будет быстрее чем если мы через Умку будем сначала селекти потом апдейт именно конкретным числом вот эта штука Она более мы сразу получаем
01:02:40 - 01:03:57
результат можем его проваливать это позволит быстрее работать с базой буквально за единичные Запроси таки не Да это всё понятно я на самом деле про это и говорил когда мы здесь верси и так далее То есть под капотом условно когда вот мы здесь паблиш сделали под капотом вот эта штука будет выполняться но когда мы говорим конкретно про постгрес А поскольку мы там посо много пользуемся вот эти вот массовые апдейты это очень плохо для базы там из-за того что mvcc и прочее и лучше это каким-то другим
01:03:18 - 01:04:23
образом решать Ну один из вариантов это когда мы если у нас мы знаем что есть такой поток событий то мы накапливая батч из этого Бача считаем чтобы получается этот НТИ не 100 раз уменьшить например а только один раз сделать ти мину 100 именно чтобы учесть особенности работы поса ещё есть если база Да если база другая там свои нюансы могут быть да ну вот этот батчинг ты предлагаешь на уровне ивентов можно делать инсерты по идее в эту табличку с Ну по сути это эквивалентное решение Да и потом их раз там в какой-то
01:03:51 - 01:05:05
момент да да можно делать там партиции то есть например там часовые чтобы их тратить было успешно то есть назовём давай reservations там 2020 2024 там сть число я не помню двадцать седьмое кажется какой-нибудь там час десятый и вот такие таблички делать естественно там Можно даже автовакуум для них отключить опять же мы сто про говорим когда они нам не нужны естественно просто там или дроп делать потому что это быстрая операция но возможно лучше для задач где нужно много обновлять счётчики взять
01:04:28 - 01:05:55
просто другую базу хранилище можно даже в редисе учитывая егова того что-нибудь вали можем дан там промежуток времени когда у нас включена персистентность редиса со скидывания данных на диск Угу А вот ти в редисе уже хоть 100.000 в секунду можно увеличивать вообще не проблем Да отлично Ну слушай Потрясающе Ты накидал очень много вариантов очевидно что если бы это была реальная ситуация нам было бы из чего выбирать что обсуждать Так что здесь давай ещё такой вопросик Ну я уверен что да смотри я подчеркнул у нас по срокам уже почти час
01:05:11 - 01:06:40
идёт поэтому я предлагаю потихоньку закругляться Да я так и собираюсь как раз здесь последний вопрос и на этом заканчиваем если мы хотим собирать какую-то аналитику по вот резервам там не знаю хотим разбить Сколько в час их было сколько там может по пополнением тоже и так далее Как нам архитектурно будет удобно это организовать чтобы Ну в общем чтобы это хорошо красиво работало не обязательно мгновенно было согласовано Мне кажется у нас здесь уже всё даже есть но просто проговори Ну на самом деле я скажу как у
01:05:59 - 01:07:14
нас устроено У нас есть своё ДХ конкретно под всякие метрики под капотом там кликхаус чтото емом од десятки инстан наве намного больше и условно ту складывается на уровне событий события формируются на уровне Ну у нас почти все сервисы на горшке поэтому там библиотеки написаны которые позволяют делать эти операции отложенным образом То есть если мы пишем на PHP когда мы говорим какой-нибудь [музыка] там поход даже по udp это всё равно там что-то блокирующее А Скорее всего на PHP можно написать что-нибудь что будет под
01:06:38 - 01:08:20
капотом потчевать это дело а и отправлять периодически Угу Ну об этом тоже Стоит подумать Ну конечно если метрики - это у нас прометеус то там метрики все в памяти складываются там уже внешняя система за ними приходит там назовём reservation наверное надо написать attempt потому что мы здесь же сам резерв по сути не выполнили если мы только публикуем и уже где-нибудь в ворке у нас будет Метрика вида Success или Fail и например по разнице вот этих метрик мы сможем отслеживать насколько у нас всё плохо
01:07:32 - 01:08:56
идёт по идее они должны графически по сути друг на друг накладываться да А как насчёт того чтобы не хардко деть здесь вот даже какую-то метрику вообще код который именно прямо с метриками что если мы просто будем ивент отправлять как нам здесь это сделать так чтобы его ещё и не потерять и потом уже слушаем где хотим там и считаем что хотим А да Ну я с вантами больше там syy работал по Ну пусть будет паб я не помню какой там метод неважно там New там reservation ну и в L на самом деле тоже самое Там есть какой-то отдельный
01:08:18 - 01:09:43
обсервер в терминах L syy это называется помс говорим про там очереди и так далее Как нам ивент отправить чтобы не потерять И вообще Вот это всё Ты имеешь в виду что-нибудь в сторону записать безопасно про это ключевое слово да то есть если мы хотим отправить отсюда ивент ээ гарантированно не потеряв его и потом уже там из условного кролика послушать и построить вот эту проекцию с любым представлением там как мы хотим Хоть даже в постгрес хоть в кликхаус хоть где как давай ну ты имеешь в виду схему что-то типа постгрес
01:09:00 - 01:10:32
там безум вычитывает Угу какую-нибудь кафку записывает мы всё это делаем Ну я говорил про метрики скажем так е мы потеем иногда какую-то метрику там на какие-то доли секунд какие-то там единички скорее всего это не критично Ну да если это там важная штука то да какой-нибудь И насколько я помню по Сифо если это Сифо будет там ли как раз по сути как бы здесь происходит встраивание кода Ну очень грубо говоря здесь выполняется тот самый код который вписан просто мы можем триггернуло из разных мест Угу Да а в transactional outbox это
01:09:46 - 01:11:14
вообще что такое технический сам вот outbox ну технический это Э Давай quantity это у нас если скажем так это Inside worker который обрабатывает Всё дело это там update quantity делаем э insert into events например ну там Partition э by Time например мы же будем их чистить и комит и здесь надо Что делает с этими ивента он читает логи Пари и в каку может публиковать Да отлично Всё да за счёт этого мы по принципу всё или ничего складываем ивенты мы не можем их потерять если транзакция откатилась получится если всё
01:10:30 - 01:12:07
успешно рано или поздно они попадут в очередь всё рано или поздно но есть нюансы когда утебя там инфра развалилась не знаю мест индийские кончились в вологе всё затёр там не знаю на кафке работы не знаю метрик не хватает не отслеживали что там кто-то не вычитывать чего-то так что Ну да гарантии на самом деле может не быть если у тебя нет там большого обсер бити нормального артин на то что что-то сломалось Ну и то что я назвал конкретно для этого сценария Я бы ну базово построил Арт уровня что у нас
01:11:18 - 01:12:37
отклонение вот этих двух метрик там составляет меньше не знаю там соту доли процента за 5 минут угу у нас всё хорошо Угу круто Ну всё тогда наверное слово Гриши что дальше мы делаем я должен какой-то итог наверное подвести это это было прямо бодро и на одном дыхани не смотрелось Да хочется чтобы Валентин ты и Виталия поделились как вообще какая-то обратная связь как всё прошло Валентина Расскажи как тебе как Витали справился Ну я бы точно его взял куда угодно вот я думаю вы сами всё видели Ну то есть тут нечего обсуждать
01:11:57 - 01:13:18
и во всех вопросах у Виталя сразу несколько предложений можно из них выбирать сидеть да и думать реально там типа Какие плюсы минусы уже на каком-то микроуровне все ро просто надо определиться Как вы заметили собеседование как бы ну не во всех частях было про PHP В целом все эти задачи применимы там я не знаю к Java CSP чему угодно просто мы условно говоря проводили его на PHP и ну как бы очевидно что Виталий на другом на любом другом языке который знает там как раз па всё тоже самое продемонстрировал вот мне кажется
01:12:40 - 01:14:04
что ньор скими задачами он 100% справляется и безусловно и выше то есть ну там легко там техлит и дальше Мне кажется архитектор и так далее поэтому здесь ну нечего дальше комментировать Мне всё очень понравилось суперское и как собеседник и как соискатель всё чудесно что тут говорите плюс плюс там ребята на Ютюбе писали что прям Виталя ты хороший прям очень мощно вот каже помимо собеса мы здесь делаем контент и он благодаря Виталию получился охеренный мы сами тут Наверное кто-то что-то новое узнал и это можно просто куда-то ещё
01:13:22 - 01:14:46
заливать и там встраивать в курсы какие-то ещё что-то вот прямо этот час спокойно Виталь Поделись какие у тебя ощущения вопросов да пока обсуждали вспомнил один Прикол Когда в одном как раз типичном приложении нужно было писать какую-то метрику которую в теории можно и там было реализовано я уж не помню что под капотом Но это был сетевой поход и нужно было не тормозить открытия страницы условно это [музыка] страница начало проведения платежа то есть там финтех система где проводить и ключевой момент что эту метрику можно
01:14:05 - 01:15:22
потерять нам не нужно зависеть от того что внешняя система сбора метрик тормозит Почему так было построено как бы я не знаю это не ко мне вопросно наме это сделать можно в Куле сделать запрос который не будет ждать ответа то есть мы его просто отправили и всё и закрыли конект долетит он не долетит как бы нам неважно это вот один из приколов Как именно в PHP такие штуки делаются и я немножко про рекламирую э если можно вот у нас на сёр скоро запускается мой курс который там весь контент сам пери по Гош где как раз вот
01:14:44 - 01:16:05
PHP мы рассматривали всякие нюансы там особенности и прочее то есть не столько про PHP сколько вообще как правильно писать код так и прошку я там рассказываю на основе там своего опыта собранных там по куче проектов проблем как всё это делать если вдруг кого интересно там Приходите спрашивайте поток планируется запустить 29 февраля кажется вдруг ктото из смотрящих хочет на Гош перей понять какие там грабли придётся собрать вот я эти грабли все собрал оформил и рассказал это очень классно и полезно
01:15:24 - 01:16:45
Обязательно все ссылочки да соберём В описании под видео вообще было прям очень бодро и прямо видно что да Такой прямо сеньор ский тех лидский Собес во просто у все были очень практические и все в чатике респектует спасибо очень прият вроде бы каких-то конкретных Вопросов нет хочется сказать огромное спасибо Валентину за такой Собес было прямо очень интересно посмотреть что спрашиваешь и какие вообще как структура и Большое спасибо Вита может ребят У вас есть какое-нибудь напоследок напутствие для наших зрителей
01:16:05 - 01:17:21
Да если вдруг Есть какие-то конкретные вопросы можно я так думаю в комментариях на тубе написать правильно там жет вклю Да конечно Да я попозже посмотрю отвечу потому что вижу в чате какие-то вопросы были но не понимаю на что нужно отвечать на что не нужно мне кажется там сли такие были вопрос Боже мой как стать таким же крутым вот да Или Приходите в чат между скобок там тепло ламповый и очень интересно бывает у ну а те кто ещё с PHP можете заходить на канал пых там тоже анонс этого стрима и тоже можно в
01:16:43 - 01:17:59
комментариях что-то обсудить Я тоже с удовольствием поделюсь э ещё резюмируя наверное хочу сказать что вы наверное обратили внимание что хоть это было всё под словами PHP ээ можно на любом языке довольно красиво решать сложные вещи и вот это дебаты по поводу того какой язык лучше Они часто не так релевантные и Ну вот мы здесь получили интересную беседу несмотря на то Хотя может быть у многих были ожидания о PHP сейчас там какую-то фигню бы обсуждать Нет это всё прекрасно тоже реализуется со своими
01:17:21 - 01:18:33
нюансами Да может быть в каких-то языках есть больше крутых конструкций которые это там выразительное позволяют сделать но и PHP тоже не отстаёт и мы там тоже на своём уровне решаем всякие интересные современные штуки вот так что те кто пишет на PHP не сдавайтесь можно не обязательно переходить на го можно оставаться и дело как бы не совсем в языке как правило вот такое у меня всё важно Это задачи какие мы решаем и бизнес который делаем вот Крутяк задачи очень выходят за рамки языка куча моментов которые надо знать и это вообще
01:17:57 - 01:19:14
там уже На чём мы пишем обвязку не так важно Я уверен все зарядились на такие классные выходные после такого стрима Тогда погнали все отдыхать всем хорошего дня и завтра и ещё услышим всем пока-пока всем пока S
01:18:35 - 01:19:14