Подготовка к собеседованию на 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 каналы и чаты
Транскрипция видео:
[музыка] Привет Паша Я Семён меня Ты знаешь это Коля наш второй собеседуем в код спейсе и у нас есть ещё основная работа помимо этого а можеш чуть-чуть рассказать о себе потом мы также пару слов буквально расскажем о себе и приступим уже к собеседованию к технической части так да самый сложный вопрос рассказать о себе Я наверное назову себя кодером который Коди уже 4 года всё это время основной кнд язык HP но можно сказать продолжительное время я был ИК разработчиком Поработал с много какими разными
00:00:00 - 00:01:36
фреймворка и на бке и на фронте а в итоге я понял пришёл к тому что к мне интереснее и последние года два наверное чисто на пишу да Какой у тебя любимый реворк Наде сейчас я бы [музыка] назвал у меня в основном [музыка] опыт но в итоге как-то предпочтение больше к Ну наверное не удивительно потому что постоянные апдейты поддержка хорошая документация у этого фреймворка вс-таки уже такой заброшенный полу заброшенный фреймворк но довольно много ещё встречаются таких крупных проектов [музыка] которые
00:00:50 - 00:02:47
что мне нравится например Это то что там проще разобраться в Смотря как собран проект но как по мне проще разобраться в том как устроен самом проект проследить работу аш стату СВ и дить по просто Ctrl Клик где обработчик этого рота Ну вот ещё хорошая документация у фреймворка и он постоянно обновляется добавляются новые фичи плюс не знаю какие-то подкапотные штуки типа провайдеров благодаря которым можно там настраивать ивенты и всё такое Угу Ну в принципе да три вещи ты назвал А вот я бы хотел ещё отдельно
00:02:02 - 00:03:48
затронуть омку равеля какая там используется вот какую ты используешь равеля да у там El вот в втором Record Я бы сильно их не смог бы наверное сильно выделить отличия между двумя этими РМ они плюс-минус похожие там плюс-минус одинаковые методы построения запросов Угу наверное да так да А вот ты наверное знаешь какие-нибудь минусы у э Record модели в отличие там от доктрины настолько глубоко Я не [музыка] вкапываемый сущностью и с помощью этой сущности ты хранишь информацию и записываешь с помощью неё обращаешься в
00:02:59 - 00:04:44
базу данных вызываешь методы Save методы Del и подобные всё это происходит из одного объекта Угу нуже примерно так же работа происходит да да потому что он также построен на ти рекорде доктрина в отличие от этого построена на репозитория и у тебя есть отдельно получается сущность репозитория которая как раз входит в базу данных и отдельно Тити которые хранят в себе информацию всю вот такое преимущество то что именно с доктриной Ты можешь работать с несколькими типами хранилищ с помощью Тити менеджеров один Тити
00:04:00 - 00:05:01
менеджер там будет сохранять у тебя подг другой mysql И ты сам будешь выбирать куда сохранять Угу я понял но это чисто отличие таких урмон даже в Равель пихают доктрину Да в моём опыте работы не приходилось применять э такие Наверное я бы сказал мощные способы работы с приложением потому что как правило используется одна и та же база данных на весь проект тако возможно Например если база реплицируемый их довольно много не один не два и не так часто все применяются в своей практике Я использовал Ситон периодически
00:04:31 - 00:06:16
использовал фабрику но давай тогда про тоже довольно интересный паттерн обычно реализуется с приватным конструктором вообще мо сдать класс у которого приватный конструктор насколько я помню через отдельный метод вызывается instance этого класса А каким должен быть метод чтобы вызвать его Ну скорее всего публичным ну да публичным и ещё дополнительно статическим Да точно верно Да Это один вариант создания объекта вот класса с приватным конструктором ещё может быть назовёшь парочку вариантов возможно
00:05:48 - 00:07:17
[музыка] через типа которые я тоже плохо помню Честно говоря через вряд ли получится нужен чтобы вызывать объект как функцию смотри один из вариантов - это рефлексия слышал что-то про рефлексию Нет с пою реле мод его конструк Даже его конструктор Даже если он публичный можно создать с помощью рефлексии и ещ один вариант как раз с помощью магического метода лон когда Ты копируешь объект у тебя уже есть ранее созданный с помощью копирования ты создашь его копию вот окей Давай продолжать А ещё какие магические методы ты знаешь какие
00:06:34 - 00:08:05
затрагивал использовал Так ну я помн есть ме на уничтожение суно ласса точно как он называется типа дестроер не знаю да да да деструктор деструктор да ещё какой-нибудь Ну вот то что ты уже назвал Клон invoke М может быть там что-то ещё есть Я точно не помню я слышал про методы Set и Get магические А это да А когда они используются когда вызываются Ну по названиям понятно Когда необходимо э [музыка] дать назначить значение сущности значение свойства класса или когда нужно получить свойство класса обычно свойство
00:07:19 - 00:09:04
класса и какое-то не такое свойство лас прит свойство кла дела для того чтобы нельзя было менять это свойство любом мее кода э ству об э Давай продолжать чуть-чуть затронем всю шку целиком во-первых это конечно же може чуть-чуть про него рассказать про каждую буковку буквально в паре слов тебя послед Т впечатления после и вот их сравнение что тебе больше понравилось что те больше пока первое что нам приходит это негативная сторона нга Ну и собственно преимущество PHP ивор [музыка] это [музыка] обработка
00:08:13 - 00:10:13
[музыка] вот или при выбросе и там при обработке ошибки руется Чего нет в и из-за этого сложно дебажить и там искать [музыка] ошиб с [музыка] Ну просто там нет каких-то монструозный воков которых из коробки нужно само добавлять Да да это верно Да там нужно насколько я помню каждому методу если там необходимо потом дебажить отдельно указывали контекст из каго метода вторым параметром Да и поднима наверх наверх наверх чтобы получать вот эту ошибку Да обработка ошибок сильно отличается от потому что можешь тогда рассказать сразу про
00:09:30 - 00:11:25
Как работает вот это вот пишешь выкидывается знаю [музыка] но есть общий родительский класс [музыка] котором а нет это мы касто настраивали настраивали вывод ошибки нарон Ну ты пра тогда конкретно Как работает я не отвечу ошибок есть родительский класс это как раз и есть интерфейс ещё который реализует все ошибки Угу Вот и от этого эксепшн можно наследоваться да и делать свои кастомные ошибочка угу вот а Роу можно просто поймать в каком-нибудь тройк эче к этчев может быть много и отловить нужную
00:10:41 - 00:12:21
ошибку в нём будет Как раз трейс линия где выпала эта ошибка сообщение о самой ошибки А зачем нужно создавать свои кастомные ошибки Почему не всегда используется какой-нибудь Exception клас базовый э-э Ну как минимум может быть какая-то договорённость Ну условно [музыка] договорённость с клиентской стороной приложения где определённые там коды ошибок например определённым образом обрабатываются и можно настроить благодаря можно настроить определённую логику Что должно происходить после этого [музыка]
00:11:43 - 00:13:39
эксп насколько я помню у меня вот был кейс где нужно было настраивать лимит на сторонний сервис ну сторонний сервис отвечал что слишком часто отправляются запросы из очере когда вызывался метод и нужно было тогда останавливать а джобы находящиеся в очереди чтобы они там подождали у словно 5 минут и потом только отправили этот запрос ээ при этом не останавливая саму очередь Да хороший кейс узкие штуки можно делать в кастомных эсп Да кастомные эсп можно отдельно отловить в локе и по сути обработать так как ты хочешь любую
00:12:40 - 00:14:21
логику задать Так давай вернёмся тогда немного к соду буквально в паре слов без всяких примеров можешь рассказать про него так надо вспомнить так приходит но принцип единой ответственности это по-моему то что нужно разделять каждый класс выполняет отдельную задачу не нужно э в один класс выполнять запихивать там условно методы по обработке данных методы по сохранению данных методы по ещё чему-то лучше создавать отдельные классы отвечающие за отдельные задачи сохранение там обработку какую бизнес логику
00:13:37 - 00:15:24
подсчёт может ещё обработку на вывод информации на клиентскую часть Так вот про букву С ещё чуть-чуть хочу дополнить как раз Active Rec модель она нарушает sle потому что она отвечает и за Con базы данных сохранения постоянно и саму сущность хранения информации Solid - Это всё-таки рекомендации а не правила и в самих же фреймворка есть ресурсные контроллеры которые Ну в mvp работают за получение обновление э удаление данных и так далее У Так что Какие ещё есть принципы ээ не помню как называется но связано с
00:14:34 - 00:16:09
интерфейсами то что нужно блин это по-моему на букву Д ээ то что нужно внедрять зависимости через интерфейсы Да в принципе верно Это dep inversion инверсия зависимостей когда мы указываем именно абстракцию а не конкретику да про интерфейсы ты начал говорить про интерфейсы тоже есть принцип Принцип разделения интерфейсов Расскажешь что-нибудь про него ра скажу сейчас я сформулирую чучуть про то что это это принцип о том что но тоже не нужно в одном интерфейсе прописывать все методы и Если есть возможность нужно
00:15:26 - 00:17:15
[музыка] разделять эти методы эти интерфейсы один интерфейс на несколько да Да всё верно А ещё два принципа у тебя осталось это принцип да Я точно помню Барбара лисков Но точно не помню что там говорится смотри немного проще наверное начать с открытости закрытости а потому что лисков как бы расширяет вот этот принцип открытости закрытости Тогда возможно если я не ошибаюсь то принцип открытости закрытости гласит о том что верхо уровневые классы не должны Ну сущности не должны зависеть от низкоуровневых сущностей
00:16:25 - 00:17:43
Что это значит Это хороший вопрос сможешь ответить на свой вопрос У меня ветер в голове понял А тогда про лисков что-нибудь пару слов дочерним классом можно заменить класс родителей у тебя не сломается какая-нибудь логика Вот то что допустим Если ты наследует класса птиц то пингвин он летать не может и ты в каком-нибудь из мест просто сломаешь свою логику приложения да да этим самым Да так в принципе по PP по фреймворка У меня всё тут дальше не будем особо углубляться можем приступить к следующей теме
00:17:08 - 00:18:28
следующая тема - это получается база данных можем поговорить немного уш Да расскажи какие subd ты использовал у тебя myq и pog Если не ошибаюсь опыте преимущественно mysql на многих проектах э но также много было пост постгрес э но там параллельно ещё и Microsoft SQL на одном проекте если коротко Какая Какие основные разницы между myq пог И что тебе больше лично нравится и почему детально я не выделю какие-то разниц [музыка] Ну так ну ладно то что под капотом я в любом случае не знаю потому что не
00:17:55 - 00:19:45
[музыка] хранения условно есть разницы в используемых методах А как же они называются процедуры по-моему м Но в основном в моём представлении они довольно похожи эти базы данных Ну конечно они реализаци онные так что в целом Да ну ну это реляционная база данных чем они характеризуются Почему они такие популярные Почему [музыка] популярные Почему бы нам просто не хранить всё джисона [музыка] файлика Ну это как минимум удобство хранения данных они более структурированы и можно налаживать связи э-э между различными
00:18:46 - 00:20:50
таблицами через там первичные и внешние ключи м да хорошо а вот если допустим поиск потребуется вот если у тебя будет 100.000 файлив тебе придётся каждый перебирать и смотреть содержит ли он то что тебе нужно или нет А вот за счёт чего базы быстрее работают Ну это уже Вопрос алгоритмов ээ так как есть ээ такие реляционные базы данных никто не хорошо допустим создал таблицу У тебя есть первичный ключ какое-то ID который инкремент на каждой записи есть какой-нибудь ключ типа номер телефона и у тебя частый запрос именно по номеру
00:20:01 - 00:21:27
телефона ты ищешь какие-то записи запрос долго работа долго ищется как его ускорить Ну я скорее всего настрою индексы в этих таблицах а вот что такое индексы Вот коротко если индексы хочется сказать это такие штуки но как будто нужно сказать это такая технология позволяющая осуществлять более быстрый поиск записи в таблицах насколько я помню м вот по крайней мере по-моему в этих э базах данных пос используется индексы ви построение индексов в виде дерева А и условно если мы индексируется притом э как бы так
00:20:46 - 00:22:32
объяснить дерево строится м по диапазонам м и если мы индексируется по вот числовому индексу начиная с сверху сравнивается искомый ID с тем больше он значений входящих в этот диапазон или меньше и в зависимости от этого происходит выбор тки куда спускаться Да в принципе Да всё верно как это происходит Угу а только ли в виде B3 дерева могут храниться индексы в пог не не не только а могут храниться например с помощью хэш ключей это создаётся В отдельной таблице отдельная запись насколько я помню генерируется
00:21:48 - 00:23:59
какой-то хэш ключ и к нему присваивается значение записи на моей практике это не так часто применялось Но насколько я понимаю [музыка] это для наиболее часто используемых записей делаются смотри создаётся хш А какой есть Минус У хша какой поиск по нему возможен у него есть очень большо тут я наверно не отвечу Ну смотри ты допустим создаёшь хш из строки ты можешь указать какой-нибудь диапазон значений при поиске А да Я сейчас вспомнил там когда я читал там было сказано что не используется нельзя применить
00:22:59 - 00:24:44
поиск в диапазоне значений Почему я не знаю Ну потому что как раз создаётся хэш и хэш можно только с помощью строгого сравнения сравнить когда ты ширу одну строчку ширу другую и сравниваешь Уже именно хэши хэши можно только строгим сравнением сравнить а окей давай продолжим дальше какие виды B3 дерева Ты знаешь вот Какие индексы есть в видет дерева есть Ну даже не только в битри дереве просто виды индексов м я слышал ещё про битовые индексы там какие-то битовые карты создаются ээ но тоже подробно не скажу
00:23:59 - 00:25:27
и и ещё что-то Смотри такой бизнес-кейс у тебя в запросе всегда идёт поиск Допустим по имейлу паролю и телефону Вот всегда идёт 1 в тре колонка Как можно оптимизировать такой поиск ты будешь сейчас я пытаюсь слово подобрать В общем можно настроить индексы на несколько колонок можно и на одну колонку не помню как называется Да всё верно можно строить на несколько колонок это составной индекс покрывающий индекс А что такое покрывающий индекс чем он отличается от основного может быть знаешь нет покрывающий индекс служит для
00:24:55 - 00:26:14
полного запроса именно в индекс когда тебе не нужно уже обратно бежать в твою основную табличку ты сделал запрос именно в индекс получил абсолютно все нужные данные которые участвуют у тебя в запросе и в основную таблицу уже даже не лезешь ну я не сталкивался с таким обычно [музыка] либо на одну колонку либо составной индекс создавался покрывающий Да это ско СТ случай вот этого составного индекса У тебя есть что-то еть Почему мы на каждую колонку не вешаем индекс какие у него есть минусы чем мы расплачиваемся за скорость
00:25:38 - 00:26:56
поиска уда и нужно соответственно обновлять это дерево Ну или как он любой другой вид индекса Ну и Ну не совсем если дерево то да при каждой вставке нужно перестраивать ту часть дерева куда мы сделали вставку если это будет хш то перестраивать с деревя деревя распро Ну хэш например удалить нужно будет если Ну это операция у от одного ту но ничего такого нет второй минус он скорее такой более физический то есть что их же нужно где-то хранить всё да ты ответил на опыте Ну да просто индексы они занимают
00:26:27 - 00:28:06
какой-то участок памяти и Чем больше индексов тем больше они памяти занимают а О'кей Давай продолжать Поговорим немного про транзакции Ну ладно Да А что такое вообще транзакция можешь [музыка] объяснить транзакция - это Это нечто представляющее из себя какую-то логическую единицу работы не знаю так назову транзакция может состоять из одного запроса или нескольких и её Ключевая задача наверное А сохранение целостности таблицы Потому [музыка] что если какая-то из запросов [музыка] изменения выполнены предыдущими запросами откат
00:27:23 - 00:29:23
отменится как-то Так [музыка] наверно тея есть что-то дополнить про транзакции может быть спросишь про базово определение транзакции согласен Как должны работать транзакции в реляционных базах данных что-нибудь слышал об этом да слышал только сейчас нужно вспомнить это аббревиатура для правил того [музыка] как хотя нет может быть я неправильно определяю то что Это не правило а свойство транзакции то что то что я уже в принципе сказал что либо все запросы выполняются либо не одна не один из запросов все
00:28:39 - 00:30:28
отменя это атомарность как раз [музыка] перва Так ты что Ну вот если допустим у тебя два запроса параллельных которые в одни и те же колонки что-то хотят сделать как это как это регулировать если параллельно выполняются запрос результат выполнения каждого из запроса будет выглядеть как если бы эти запросы выполнялись последователя Но это зависит от того как мы настроим выполнение транзакции есть различные настройки То есть это один из вариантов но не обязательно так угу ну это вроде про изолированность
00:29:50 - 00:31:27
то что таблицы изолируется от наверное записи на время выполнения этой транзакции чтобы э-э другим запросам нельзя было вмешаться ээ в структуру таблицы внести изменения Какие уровни изоляции Ты знаешь так Ну пока не вспомнится пока не вспоминается навер Сколько всего уровней изоляции Возможно ты знаешь нет всё А смотри уровне изоляции всего четыре это и они идут последовательно каждый уровень изоляции накладывается на предыдущий дополняет какие-нибудь дополнительные ограничения накладывает и определяет как раз порядок
00:30:47 - 00:32:29
исполнение транзакций допустим у решая различные проблемы Да я о них первый раз сейчас слышу ну будет почитать Да довольно интересная тема они решают различные проблемы и не так уж сложны что-нибудь ещё про транзакцию У тебя есть Коль Нет давай последнюю букву добьём лити Угу [музыка] М это это что-то про отказоустойчивость по-моему э что ния выполненные транзакцией сохранятся даже если не знаю сервис [музыка] отвалился да то что они в ПЗУ сохранятся И даже если там электричество отключат то база данных уже хранит результат
00:31:43 - 00:33:31
выполнения транзакций Угу У меня про база данных наверное вопросов больше нет Если ко у тебя нет вопроса больше по базам данных то можно наверно чуть дальше что-нибудь слышал о нормализации нощ блин Ладно сейчас скажу своими словами это когда приводят ээ таблиц в такое состояние чтобы не было лишней информации лишней дублирующий информации в других таблицах например Да верно Угу а что тогда такое денормализация Использовал ли когда-нибудь Ну это как раз обратный процесс дублирование данных и да иногда приходится это применять для
00:32:45 - 00:34:34
прощения [музыка] запросов это особенно ну бывают сложные запросы затрагивающие сразу несколько таблиц и вот для упрощения этих самых запросов используется дублирование э данных дублирования колонок а только с дублированием связана нормализация и денормализация Ну если такой вопрос задаётся то наверное нет Надо подумать а на с вход ничего не приходит в голову ну нормализация Да она определяет именно правильное хранение вот этих вот табличек правильное хранение колонок чтобы как раз да данные всё-таки не
00:33:44 - 00:35:11
дублировались хранились именно связи между таблицами а денормализация она не только про дублирование данных денормализация про облегчение запросов твою базу данных оптимизацию сложных запросов базу данных как раз то что ты сказал но не только про дублирование допустим про вынесение какой-нибудь большой колонки в отдельную таблицу Когда тебе нужно посчитать буквально кат ты выносишь отдельно табличку огромную колонку и она у тебя уже не участвует в твоём запросе на неё идт только связь хороший пример из моей практики я
00:34:38 - 00:35:44
работал на до сервис недвижимости там у некоторых аккаунтов которые ры у них кого-то было очень много всего и обычный запрос слился вали эти данные в отдельную таблицу что до таких тяжеловесов мы там в отдельном месте это хранили вот это как раз Есть денормализация Угу угу вот и последний вопрос по базам вот он такой практический вот Представь что тебе нужно из таблицы Удалить все записи и есть несколько способов это сделать какие они есть и какой из них будет быстрее всего А какой медленнее всего
00:35:10 - 00:36:34
Ну такое я конечно не применял ну можно использовать стандартные Функции там условно или SQL [музыка] это ну можно дропнуть таблицу сделать если таб пос Ну [музыка] там с помощью ормо сделать и А если без вот как этот запрос будет выглядеть ударить запи Ну вот наве я два таких метода Вы прямой [музыка] запрос с помою вызвать метод Ну когда ты вызываешь метод Омки строит запрос в базу данных какой запрос в базу данных он построит Ну возможно он найдёт каждую запись и вот в цикле по каждой записи
00:36:02 - 00:38:24
там выполнит удаление [музыка] её как-нибудь можно подго одно а по несколько сразу коло а запи Дан поми Я пока не [музыка] назову обычна команда указываешь табличку Откуда надо удалять и потом просто ставишь какое-нибудь условие дополнительное Да и удаляешь [музыка] потом создание её заново если табличка нужна или удаление всех записей из неё как будто бы А ладно э ну ладно тут мне сложно ответить можно Drop Table скорее всего выполнят быстрее удаление э ну нужно сделать дроп а потом создать сно уже таблицу Да но вот если учитывать
00:37:18 - 00:39:02
что нужно ещё снова создать эту таблицу то я тут Не берусь точно ответить Какая из команд выполнится быстрее но как будто бы при большом Очень большом количестве записей выгоднее использовать потом создание этой новой таблицы Да верно Есть ещё третья команда это из она как раз тоже удаляет записи и она сделает это быстрее чем Del или Вот её Например можно использовать если вот ты делаешь интеграционное тестирование и ты там данными наполняешь локальную таблицу и потом хочешь быстренько почистить перед следующим
00:38:23 - 00:39:56
тестом в прой базе не рекомендуется такие команды выполнять тебя вре е бы если я не ошибаюсь когда ты вообще использовал это к а ну на разных проектах где необходим там поиск по какому-то слову Ну есть поисковая строка для пользователя где Он вводит и как-то допустим фильтрует Ну усно ту же таблицу вообще elastic Search - Это технология заточенная под быструю работу с большим набором данных либо под поиск либо для каких-то аналитических штук э ну как-то те те те тот же анализ данных произвести например
00:39:14 - 00:41:09
[музыка] Ну в общем да Это технология для ускорения поиска значений ты использовал как полнотекстовый поиск верно Вот я хотел спросить о поиска любых значений или какого-то определённого формата [музыка] данных так я про любые ли значения Ну вообще применялся поиск [музыка] поте помню там поиск по каким-то другим форматам данных у меня в принципе по базам данных теперь точно всё я бы продолжил следующие темы следующая тема у нас это гид Какие гид методологии ты использовал в своих проектах Вот какие Flow у вас были
00:40:23 - 00:41:56
построены в командах так я вспоминаю ну в основном стандартно это наличие ветки мастера где продо фичи так скажем основная Рабочая Ну не Рабочая но основная ветка где [музыка] все проверенные фичи которые уже напроти есть девелопер [музыка] века новые задачи Маги или фичи есть релизная ветка где собственно собираются эти задачи перед выкладкой на прот Ну вот наверное Это основное Угу А смотри я услышал про девелоп ветку и в ней тестируются все задачи какой в этом есть минус то что ветка Деп одна
00:41:16 - 00:43:25
Ну то что параллельно могут тестироваться несколько задач которые могут конфликтовать между собой да в принципе верно это часто встречается на проектах когда проекты там на микросервисах либо какой-нибудь не очень большой Монолит и разработчики выкатывают задачку которую очень очень сильно пересекаются и у тестиров возникают проблемы с тестированием вот этих вот зада По отдельности по сильно взаимосвязаны и если одна из этих задач допустим не работает то приходится откладывать весь релиз обе задачи Коля Есть что
00:42:29 - 00:43:50
дополнить ну этот подход больше похож на gitlab Flow но современный кн сейчас старается выкатывать каждую фичу По отдельности то есть Зачем кду ждать релиза целого набора фич Если по готовности можно каждую отдельную фичу отдельно выливать как бы ты построил Фло вот с целью чтобы каждую фичу резит сразу по готовности как так Ну создание там ветки задачи от мастера а разработка тестировать можно в этой же ветке сейчас я думаю реквест делать реквест мастер Ну реквест ну первая мысль что да ээ можно
00:43:09 - 00:44:44
и в Мастер же сделать реквест [музыка] но что-то не хочется как будто бы [музыка] - можно сделать как после того как - не но сейчас а после разработки фичи можно не знаю сделать от мастера ветку релиза и чтобы выкатывать на прот не мастера а вот ветку релиза очеред допустим вы хотели на прот релиз А что потом с этой релизный веткой делать Ну на проде я [музыка] быт мастера на случай необходимости отката Ну допустим те надо откатить если у тебя обычный ты можешь сделать рый если у тебя до ранее был
00:44:07 - 00:46:20
собран то есть современ можно можно так Да просто не Ну окей такая мы Ну просто самое простое это вот да иметь Мастер от него делать фиче ветку как только она полностью готова ты уверен что всё работает ты просто мерш мастер на меже запускается пайплайн сборки образа Ну если до или и делаешь Лиз всё о Ну так не всегда актуальный мастер как будто будет потому что после твоего ржа в Мастер и его выкладки нарот если будет необходимость откатить может возникнуть такая ситуация что кто-то уже создаст новую вет зада зада
00:45:28 - 00:47:17
в бы ну когда кто-то создаст новую ветку с той задачей в Мастере и в Мастере выйдет фикс Ну вот условно Там какая-то ошибка быт обычна он к себе подаёт Мастер и у него тоже появится этот фикс в противном случае он даже не сможет сделать квест потому что у него будет Конфликт это ну это всё нюансы Не знаю мне не очень нравится подход но это ладно Ну да В каждой компании по-разному ты Семён что думаешь Ну мне тоже больше нравится подход именно сразу релиза в Мастер ветку каждой ветки по отдельности
00:46:25 - 00:47:36
Потому что это не затормаживает бизнес-процессы и у тебя задача не стоит по несколько дней в тестировании ждёт остальных задач не блокируется другими задачами если там две задачки протестировали О'кей третья протестирована плохо отправлено разработчику на доработку и вот эти две задачи которые уже могут быть в проде они сидят и ждут просто треть доработки фикса и только после этого создаётся уже релиз и тоже самое если создастся релиз и после обнаружится новая ошибка то это придётся откатывать весь
00:47:07 - 00:48:07
релиз для бизнеса такой подход менее эффективен Ну я думаю в этой теме можно долго спорить Поэтому да да но здесь этоже СПО тут можно по-любому спорить может быть мы затм ещ свою третью логи которая будет ещё лучше А дополнить их девелоп веткой дополнить их ещё и релизный ветками всё это объединить перемешать и возможно получится получше а что-нибудь ещё есть про гит дополнить себя Коль я думаю в отдельно в какие-нибудь битовые команды вдаваться буде Смысла не вижу ного проще Открыть посмотреть тогда можем в принципе
00:47:36 - 00:48:56
продолжать следующая наша тема - это протоколы А вообще какие протоколы Ты знаешь вот такой простенький вопрос FTP протокол связи если что угу А да понимаю [музыка] а IP протокол например Это по-моему расшифровывается как интернет протокол э вообще что такое протокол это по-моему набор Ну это условный набор правил того как э-э различные мм сервисы обмениваются данными между собой Да верно А и интернет-протокол он ну это набор правил отвечающих за маршрутизацию за адресацию там адресацию передачи пакетов между
00:48:19 - 00:50:30
[музыка] различными не знаю не могу слово подобрать различными клиентами всемирной паутины потому что у каждого гаджета подго интернету есть свой IP адрес по которому можно понять э по которому А можно его найти и ему передать какой-то пакет данных Да ти по так протокол я пользовался подключением по FTP для передачи э новых изменений чтобы там на этом стороннем сервере обновлялся мой сервис который в тоже время там крутился и были видны изменения на сайте протокол по протокол для передачи и файлов Давай наве не будем так сильно
00:49:31 - 00:51:34
подробности даваться в каждый протокол те а смотри Следующий вопрос по протоколам Может ли несколько протоколов использоваться сразу допустим при одном запросе я наверное не совсем понимаю вопрос но тут скорее нужно уточнение что по модели осети протокол на одном уровне то есть речь не о том что tcp IP и поверх него ttp а то что на одном уровне я отвечу что да При одном запросе используется несколько протоколов Ну как [музыка] минимум все ну на всех сайтах для отправки запроса на БК используются там
00:50:48 - 00:52:11
http или https протоколы для отправки запросов в том [музыка] числе Я хотел сказать но протокол там используется протокол для определения адрес именно на какой сервис сервер должен быть направлен запрос то есть подключается уже Интернет протокол Всё верно протоколы могут наслаивать друг на друга Вот ты даже сказал в ЧМ это Secure по-моему там зашифрованы в зашифрованном виде передаются данные да по сути Вот это S это ssl либо tls и это дополнительный протокол надстройки на до обычном http у тебя получается идут правила http плюс
00:51:45 - 00:53:29
правила вот этого лса например А смотри у http самое раран такой протокол для как раз взаимодействия клиент-сервер это http у http есть несколько версий знаешь версия http вот какую ты используешь допустим на СХ проектах 2 по-моему по-моему третья версия последняя Хотя я могу ться третья вот какая используется у тебя на проекте Ну я не знаю наверное наверное третия но нюансов я честно говоря не помню Чем отличается условно втора окей а первая от второй 1 вот [музыка] возможно методы добавились во второй
00:52:44 - 00:54:18
версии потому [музыка] что не совсем Т не добавились ме реализован с помою вот этих медо и подобных все методы они есть в HT 1tp 2 он уже дополнительно оптимизирует http1 каждый это каждая новая версия Создана для оптимизации предыдущей и в hp2 допустим вся информация отправляется битова на сервер совместимость с http 1.1 А ты вот немного сказал про http 3 а не слышал ничего такого Где используется это http 3 это так уже Вопрос со звёздочкой не души О'кей А ещё два таких протокола есть у DP и tcp слышал что-то про эти протоколы чем
00:53:45 - 00:55:24
они отличаются ещё раз й tcp и про честно говоря не слышу пока что-то не припоминает про tcp слышал используется в [музыка] сокетах ой для настройки клиентом и [музыка] сервером хорошо А какого уровня этот протокол tcp по [музыка] модели тут я нано не отвечу Ну на самом деле даже у http1 11 под капотом используется допустим он устанавливает соединение жати знаешь вот объясняют во всяких примерах устанавливается рукопожатие и tcp гарантирует доставку всех пакетов если у тебя какой-то пакет не доставил
00:54:52 - 00:56:53
значит ну запрос будет с ошибкой будет травиться и просто ты увидишь то что все пакеты не доставили когда ты используешь udp значит не все пакеты доставляются может доставится только часть может не доставится ни один пакет могут доставится все пакеты а когда бы ты использовал вот этот udp когда не все пакеты доставляются это же как-то небезопасно Это довольно плохо нуно где он применяется может применяться ucp Где используется Честно говоря я мне Сложно представить где не жалко потерять данные при их
00:56:03 - 00:57:14
передаче ну те данные которые актуальны только здесь и сейчас то есть если они придут задержки Они уже не нужны Вот например Мы сейчас в мете что здесь не особо важно видео да качество связи качество звука качество видео да иногда О ты теряются из интернета нас помех они теряются Ой я Я просто даже не задумывался Ну я первый раз поэтому [музыка] ВиДи м дальше у нас следующая тема - это совсем чуть-чуть проговори по микросервиса потому что есть такой подход при разработке приложений есть монолитные приложения есть микросервис
00:56:38 - 00:58:03
приложения Ну в принципе про архитектуру давался ли ты когда-нибудь с такой микросервисной архитектурой приходилось работать да но довольно часто Это довольно часто встречается такая переходная архитектура я бы сказал когда есть какой-то основной Монолит и его разбивает уже на микросервисы поэто даже название не спрашивайте микросервисы - Это обычно какая-то часть общего приложения отвечающая за определённую задачу например какой-нибудь э файловый сервис отвечающий за там сохранение получение этих файлов
00:57:34 - 00:59:09
какое-то может обновление э ну вот что такое узко профильное выполняет микросервис Ну логически разделяемый компонент да э ну а морит Наверное тоже понятно что вся логика приложения в в каком-то огромном сервисе А в какой-то огромной кодовой базе Да в принципе это верно то что всё пишется чисто в одном месте иногда разделяют как раз по уровням монолиты отдельно по модулям Монолит разделяют пытаясь создать вот такую изолированность каждого модуля А какие вообще есть минусы У монолитов и какие есть минусы У микросервисов что тебе в
00:58:31 - 00:59:51
голову [музыка] приходит Ну как минимум наверное сложно как-то масштабировать Монолит и что соответственно микросервисы проще масштабировать если необходимо [музыка] добавить консьюмер в сервис работы с [музыка] очередями потому чтот сложнее да тебе прид реплицировать целиком весь Монолит и это намного ресурсо затрат нее Угу [музыка] э мне пока Сложно представить конкретный пример но скорее всего в Монолита э проще запутать ээ логику там обработки Ну вот тех же файлов [музыка] условно что то тут то
00:59:12 - 01:01:21
там будет использование э этого сервиса и возможно переиспользование каких-то точнее дублирование кода условно Ну и в целом наверное там новичку сложнее погружаться именно в Монолит нежели в отдельные микросервисы Ну а плюсы есть какие-то у Монолита или нет М Монолит на старте проекта проще его разрабатывать я бы сказал та как правило потом уже стараются выделять отдельные какие-то части из этой архитектуры в микросервис [музыка] а а почему его проще на старте разрабатывать какая-нибудь причина у
01:00:21 - 01:02:00
этом есть м Сейчас я просто думаю как бы так ответить Ну как минимум наверное потому что на начальном этапе ты можешь А ну может на начальном этапе и нет необходимости выделять отдельно ресурсы человека ресурс нание сервиса потому что ну проще будет воспользоваться написать это в монолите Ну да да ты скажешь что новичку в микросервис проще разобраться чем в анали нет противоречия А почему почему нет ну тут Да я бы тоже сказал немного двояко потому что иногда может быть микросервис какой-нибудь сложно запутанный иногда
01:01:16 - 01:02:53
Монолит может быть иногда нович вки проще вкатиться в маленькое приложение которое едут микросервис а иногда вс-таки и в Монолит потому что он будет очень хорошо построенный я бы тут сделал ремарку что как правило задача включает в себя какую-то бизнес и бизнес не разделяет микросервисы оно что-то конкретно нужно сделать и с правильно вот это самая Ключевая сложность Почему новичку может быть сложнее микросервис чем Монолит нули тея данными идт внутри приложения оперативной памяти а в микросервис это нужно ещё как-то
01:02:23 - 01:03:54
доставить по сети дада да я с этим согласен то что нужно правильно нать Вот кстати начали говорить про взаимодействие между микросервисами А какие вообще виды взаимодействия между микросервисами возможно передача данных между микросервисами например [музыка] как обычно используется называется брокеры [музыка] сообщений за передачу этих сообщений между сервисами ещё какие-нибудь варианты смотри MQ он гарантирует как бы доставку этого сообщения но не гарантирует то что оно доставится прямо моментально оно может попасть в очередь
01:03:13 - 01:04:53
и сообщение там у тебя на час будет в это очереди лежать тебе нужно моментально пользователю ответ отдать возможно можно использовать для этого какую функциональность можно для этого использовать чтобы ты использовал мне пока не приходит голо такие же очереди через базу данных редиса у него есть K value хранилища у редиса и это как раз второй вид взаимодействия взаимодействия через базу данных тут не очень важно даже Какая база данных может взаимодействовать через какую-нибудь не реляционную базу данных через
01:04:15 - 01:05:31
реляционную базу данных иногда такие кейсы встречаются и ещё какой-нибудь вид взаимодействия такой самый простой самый дефолтный буквально М может э например вызов ошки чи что вызывать будем кулом допусти приложение в линуксе А за счёт чего оно вызывает не знаю архитектуре базову обсудили ещё что ты хочешь спросить его нет наверное получается третий вид взаимодействия - это как раз http http и другие протоколы протоколы можно использовать разные для взаимодействия между сервисами вот А можем переходить наверно к следующей
01:05:08 - 01:06:37
теме следующая тема у нас это метрики Коль начнёшь по Метрика Да тоже вот такое просто вопрос Что такое метрики зачем они нужны как их как ты их настраивал на проекте и настраивали в принципе Угу Какие бывают метрики как ты как бы ты их подразделять М сейчас я пытаюсь сформировать в голове определение для слова метрики потому что я никогда не определял в нове Но это какие-то показатели того как работает приложение есть наверное метрики например на нагрузку того справляется ли приложение с количеством приходящих
01:06:10 - 01:08:01
запросов метрики [музыка] наверное по каких-то критических ошибках то есть разные там ну какие-то можно просто отобразить на клиентской стороне человека понятным языком А какие-то бывают критические например отвалился один из микросервисов [музыка] так ещё какие бывают это вот всё технические метрики ты описываешь А вот ещё какие есть [музыка] Ну не знаю как назвать этот вид метрики Но к нам приходило что-то вроде уведомления в Telegram бот там новом поступившем клиенте мониторинг Да это Мониторинг это
01:07:10 - 01:09:07
допустим графана мониторинг сентре Мониторинг метрики - это немного иное Ну технические метрики ты описал там нагрузка время ожиданий и так далее А вот со стороны бизнеса сейчас в каждой компании там как минимум один аналитик есть они там данными ворочают что-то собирают всё время отчёты какие-то строят что можно собирать Да ну это зависит от задачи можно собирать количество вот определённого купленного товара за сегодняшний день условно да да верно Да это по сути бизнесов метрики которые уже собираются на уровне именно
01:08:16 - 01:09:32
твоего приложения прямо в коде ты пишешь там добавить плюс о п1 п1 либо в минус начинаешь делать Что ещё можно собирать в этих Метрика м сейчас это под вырез но можно повторить вопрос потому что мне Пришло Уведомление я Отвлёкся чуть-чуть Да смотри ты собираешь количественные метрики обычно какой-нибудь там допустим каунтер метрику у тебя получается идёт там плю О п1 п1 что ещё можно собирать какие показатели вообще есть у сервиса Это вопрос из разряда бисо разряд бизнесов метрик м изменение какого-то статуса
01:09:03 - 01:10:28
чего-то там Чего угодно Ну статус наверное сложновато будет собирать потому что метрики всё-таки собирают какие-нибудь показатели значения допустим количество либо допустим время Время твоего запроса Сколько возможно и Ар не алерты - это уже мониторинг есть получается такие три показателя это логирование метрики и Мониторинг логирование это именно сбор твоих всяких ошибок инфогород метрики собирают количество они могут считать какое-нибудь время могут считать какое-нибудь количество именно запросов и получается есть
01:10:00 - 01:11:10
мониторинг Мониторинг - это то что ты отображает то что ты видишь вот Мониторинг это какая-нибудь графана там сентри кибана и подобные вещи мониторинг уже подключается к какому-нибудь твоему хранилищу вот допустим логи хранятся где-нибудь в локе метрики хранятся там тоже где-нибудь в прометеус их собирают все и и потом графа тебе их уже все отображают красиво на графике есть что дополнить ко Да нет в принципе нету Ну тогда да наверное можем чуть-чуть про логирование поговорить А что такое вообще логирование И как ты
01:10:35 - 01:11:42
его используешь на проекте как оно у вас реализовано грубо говоря логирование - это запись какой-либо информации в текстовый файл Ну может не текстовый файл но в виде текста [музыка] аэ может как ты уже говорил быть локирование ошибок - может быть локирование предупреждений или просто какой-то информации [музыка] ээ Ну да получается есть разные уровни ошибок такой вопрос Каким образом допустим у тебя запущено несколько реплик одного сервиса Каким образом эти логи отображаются все в одном месте как
01:11:11 - 01:12:44
они собираются воедино Ну для этого есть специализированные технологии Я возможно сейчас ошибусь но по-моему у нас на проекте применялся FL не помню точно название Ну в общем есть специальные технологии которые берут эти логии из этих файлов и как-то их анализируют потом удобным образом отображают веб-сервис мы например смотрели в кинез допустим по этим логам да да в принципе всё верно они Именно они сохраняют эти логи они их не отображают А кибана уже имеет коннекшн имеет интеграцию к этим базам данных которые
01:12:04 - 01:13:33
сохраняют эти логи и красивенько всё отображает делает запросы как раз по уровням и по подобным вещам от А как в кибана логи прислать третий компонент какой М возможно Так ладно я возможно Не совсем понимаю этот вопрос Но как будто бы хочется ответить что за это отвечает вот эта вот технология условно flent Bit которая берёт эти записи и каким-то образом там обрабатывает и сохраняет в своей там структуре да Ну да в принципе верно там разные технологии могут использоваться и вот эта вот технология FL beit она допустим
01:13:05 - 01:14:27
берёт эти данные сохраняет какой-нибудь там оптимизированный под логи бедки например очень часто используется какая-нибудь Локи как раз которая разбивает всё по уровнем Да а до Локи все данные вот эти вот файлики доходят как раз с помощью какого-нибудь тейла н Бита и подобных инструментов Всё верно А в принципе наверное такая Техническая часть У меня всё А ты держался вообще отлично Очень круто и теперь хотелось бы чуть-чуть вообще поговорить по резюме мы с Колей заранее его прям изучили хорошенько сейчас его показывать конечно
01:14:01 - 01:15:02
же не будем Потому что ты попросил его не показывать а но есть буквально парочку рекомендаций которые хотелось бы тебе дать А вот первое рекомендация то что у тебя записано например Я использовал R для кэширования Я использовал elastic сч Я использовал pog Это не совсем верно то что ты делал в компании не означает то что ты принёс пользу Компани делая вот эти вот вещи Ну пос ты соответственно используешь там буквально в своей рутинной работе используешь его вообще ежедневно буквально и это прямая твоя обязанность
01:14:32 - 01:15:33
но для компании ты вот используя пог скорее всего не принёс какую-либо пользу а в резюме нужно писать именно твой личный Профит именно Твои личные достижения цели которых ты добился в этой компании какой-нибудь количественный процент буквально можно написать оптимизировали сократил количество запросов там в два раза вот исключать рутину твои ежедневные обязанности в какие-нибудь профитные вещи о них будет проще рассказывать уже на резюме вот с тебя Допустим мы сейчас оцениваем резюме и мы не можем часть
01:15:02 - 01:16:06
технических вопросов спросить Например у тебя бы в резюме было бы написано оптимизировать там запросы в два раза мы бы тебя спросили Каким образом ты бы оптимизировать бы этого резюме уже мог бы сократить на заранее подготовленный вопрос который мы бы строили на основе Т резюме а не просто ты использовал по Мы пойм те спрашивать чисто по постгрес как он там под капотом устроенный нам бы было бы интереснее спросить тебя про й конкретный бизнес-кейс А что-то у нас ещё какой-то вопрос был по твоему Да
01:15:35 - 01:16:32
например про тот же Н вот написано что поддерживаешь микросервис на гунг ты если ты сказал в недри Go для чатов потому что он там быстрее работает чем PHP но это уже вот какое-то достижение про которое интересно спросить Угу угу да это полезное замечание Спасибо да и ещё у нас был возникло одно недопонимание в резюме у тебя прямо такой фул Стак Кищенко успел потрогать вообще абсолютно все технологии успел затронуть и графана и кажется вот я могу ошибаться Но даже с Вагер Вот ты вообще во всём успел
01:16:04 - 01:17:14
поучаствовать а но нет какой-то конкретики и допустим Если ты будешь проходить собеседовани какого-нибудь Бандера то твои 4 года опыта могут превратиться спокойно в полтора-два вот тебя бы HR так мог оценить А в принципе фильтры ты пройдёшь Но именно даже собе см он тебя оценит намного меньше под компанию нужно подстраиваться вот Коля хороший коммент мне к этому дал то что нужно иметь сразу несколько резюме получается и закидывать в вакансии вот допустим в одной вакансии тебе требуется Full Stack ты закинул туда одно резюме
01:16:42 - 01:17:49
где у тебя ифн и B технологии другую компанию требуется PP то можно спокойно убрать оттуда всякую синею кото заниматься инженер убрать оттуда фнн и подобные вещи Да сейчас я запишу все эти замечания Спасибо Коля у тебя есть что-нибудь ещё дополнить Нет ты моё замечание рассказал что я дополню сам себя
01:17:16 - 01:18:05