ym104432846
Вставьте ссылку на видео из Youtube, Rutube, VK видео
Задайте вопрос по видео
Что вас интересует?
00:00:18
Представление о формате встречи и знакомство с командой:
  • Встреча длится около двух часов, возможны небольшие отклонения по времени.
  • Присутствуют коллеги-интервьюеры, которые будут задавать вопросы.
  • Вопросы могут задаваться в любой момент, возможна остановка обсуждения.
  • В конце встречи обсуждаются организационные детали, график работы, формат трудоустройства.
00:04:01
Презентация команды и описание вакансий:
  • Команда занимается разработкой сервисов, связанных с заказами и управлением ими.
  • Основные направления включают расчёт стоимости услуг, управление тарифами, предотвращение мошенничества, распределение заказов.
  • Описаны сервисы расчета цен, клиентских тарифов, управления постобработкой заказов, уведомлений водителей и обмена заказами с внешними системами.
  • Указаны текущие задачи команды, включая рефакторинг и улучшение технического состояния системы.
00:22:58
Организация процесса разработки и оценки задач:
  • Процесс оценки задач включает обсуждение в команде и постановку сроков на основе опыта разработчиков.
  • Сложные задачи оцениваются отдельно, иногда требуется дополнительное исследование.
  • Резервируются временные слоты для выполнения срочных задач, связанных с изменениями законодательства и требованиями регуляторов.
00:26:30
Опыт кандидата и профессиональные навыки:
  • Кандидат обладает опытом работы с крупными проектами, связанными с логистикой и обработкой заказов.
  • Работал с большими объемами данных, шардированием баз данных, интеграцией сервисов.
  • Имеет опыт проектирования и реализации архитектурных решений, включая использование Domain Driven Design (DDD).
  • Участвовал в стартап-проектах, формировании команд и развитии новых продуктов.
00:39:29
Вопросы по техническим аспектам и архитектурам:
  • Обсуждались различия между типами переменных (reference и value types), принципы работы Garbage Collector, управление памятью и обработка утечек памяти.
  • Рассмотрены подходы к управлению ресурсами, обработке исключений, работе с многопоточностью и блокировками.
  • Обсуждалась организация кода, выбор архитектурных подходов и инструментов для работы с конфигурациями и зависимостями.
01:24:31
Практическое задание на код-ревью:
  • Проведен разбор практического задания на код-ревью, выявлены недостатки и предложены улучшения.
  • Отмечены проблемы с архитектурой, отсутствием явных интерфейсов, недостаточной модульностью и тестируемостью кода.
  • Предложены улучшения, связанные с использованием Dependency Injection, улучшением структуры классов и методов, добавлением явных контрактов и результатов выполнения.
01:45:04
Решение практической задачи с асинхронностью:
  • Рассмотрена задача оптимизации асинхронного метода путем разделения последовательных операций на параллельные.
  • Показано, как избежать блокировок и улучшить производительность, используя возможности .NET Core.
01:56:35
Обсуждение условий труда и компенсационного пакета:
  • Подробно рассмотрены условия работы, включая формат занятости (офисный или удаленный), предоставление оборудования, официальное оформление по ТК РФ.
  • Предоставлен подробный обзор социального пакета, включающего ДМС, оплату больничных и отпускных, участие в пенсионных фондах.
02:03:56
Завершение встречи и договоренности по обратной связи:
  • Согласован срок предоставления обратной связи кандидату – до конца текущей недели.
  • Подтверждены контактные данные и готовность продолжить коммуникацию.
0: Начать с вопроса, комфортно ли общение на ты? Можем ли мы сегодня так, все супер. Тогда к нам тоже, пожалуйста, на ты и предлагаю стартовать. Что по планам на сегодняшнюю встречу запланирова.
1: У нас беседа на 2 часа, в среднем, стараемся уложиться в это время. Иногда бывает раньше. Заканчиваем дольше, стараемся не задерживаться. По планам, на встрече присутствуют мои коллеги. Я сейчас с ними познакомлю обязательно.
2: Я какие-то вопросы тебе позадаю. Технические вопросы позадают, ребята уже подхватят. Если возникают в процессе беседы вопрос, пожалуйста, можешь сразу их задавать, можешь прям останавливать, оставлять комментарии и так далее. Мы за открытый диалог.
3: Это здорово и интересно. Если хочется оставить свой вопрос на потом тоже можно не возражать. В конце беседы обсудим в конце встречи обсудим административные моменты, аля, по графику работы, когда возвращаемся с обратно.
4: Связью там, не знаю, формат трудоустройства и так далее. Эти моменты мы все оставляем на конец.
5: План примерно такой. Все окей, все устраивает. Ну да, все, супер. Тогда стартуем. Знакомлю с ребятами. На встрече у нас присутствует Павел Паша, у нас является руководителем отдела.
6: Разработки сервиса, заказа про свой отдел он обязательно все расскажет, обязательно покажет. Паша у нас приготовил замечательную презентацию, я её уже увидела, стало все понятно, что происходит внутри. Хоть в 1 отделе стало все понятно.
7: Так что тебе тоже будет все понятно. Я надеюсь, и Дима у нас на встрече присутствует. Дима у нас является руководителем группы внутри отдела пашиного. Собственно, куда мы тебя сейчас и рассматриваем, сразу оговорюсь.
8: Группа разработки сервисов, создания сервисов расчёта цены правильно все запомнила.
9: Дальше, да, потом, потом точно поймёшь, что это такое и где оно находится. Собственно, мы хочу ещё немножко отметить. Мы очень долго не могли с тобой встретиться. Были определённые обстоятельства, были ребята в отпусках.
10: Слёт руководителей и так далее, и ту вакансию про, на которую мы тебя в принципе рассматривали. Мы её уже закрыли. Сейчас она неактуальна, но нам твоё резюме очень понравилось, поэтому почему бы нам не порассматривать тебя на закрытую
11: А что, тоже интересно, вот как-то так.
12: Что ещё хотела у тебя спросить, общались с тобой очень давно? Помнишь ли ты что-то про нас? Нужно ли что-то освещать дополнительно? Нужно ли вообще рассказать, кто мы такие, что за компания и так далее, не касаясь непосредственно отдела и
13: Будущее ждать. Ну, я хорошо помню, что у вас очень огромные наполеоновские планы по захвату новых рынков, выход на новые государства. Ну, тогда мы как бы общались по поводу собственно, менеджмента заказов и
14: Тогда в целом достаточно много послушал про собственно техническое состояние, как бы, вот чем вы пользуетесь. Ну и в целом было достаточно много вопросов. Как вы, собственно, реализуете, собственно менеджер, там миллионы заказов и прочее. Но сейчас хотелось бы все-таки узнать,
15: Подробнее про команду, в которой, собственно, это происходит собеседование. Ну, раз у тебя сложилось впечатление о компании, поэтому предлагаю тогда Паше ворваться с рассказом о команде и уже дальше пойдём по остальным этапам сразу.
16: Из bin рекорде. Да, да, поехали. Значит, наша команда называется домен заказов. То есть мы
17: Закрываем ту область ответственности, которая связана с заказом вообще наружи. У нас торчит клиентское приложение и водительское приложение. Через клиентское приложение. Клиенты делают заказ в водительском приложении. Водитель принимает этот заказ.
18: Дальше, соответственно, есть бэкенды, которым занимается домен клиентов. Большая группа разработки домен водителей, ещё компании на разных куча доменов. Я некоторые перечислил. Ну и в центре.
19: Стоим мы на заказов, которые управляют и связующим звеном конкретно заказом.
20: Так, дальше что у нас есть? Значит, у нас много различных сервисов. 1 группа, которую мы тебе сейчас рассматриваем, это группа расчёта цены и тарифов внутри у нас, у этой группы.
21: Наш такой самый 1 сервис стоимость, как бы основная характеристика заказа. Чтобы его вообще создать, нужно сначала посчитать стоимость по заявке, то есть клиент передаёт
22: Клиентское приложение или оператор у нас и через оператора. Можно и через приложение создать заказ. Передаёт информацию о том, где клиент находится. Есть 2 точки с координатами. Строим по ним граф дорог, вычисляем расстояние.
23: По городу, по межгороду применяем действующий тариф в этом городе получаем базовую цену, добавляем к ней динамические составляющие спроса и предложения надбавки, добавляем различные надбавки и, собственно, формируем таким образом
24: Мы формируем цену, соответственно, для всех наших стран, которым мы работаем. То есть сервис у нас получается на 4 площадках. Дальше 2 сервис.
25: Сервис клиентских тарифов. Мы свой софт предлагаем как платформу. То есть фактически, чтобы запустить своё такси, можно купить у нас франшизу, подключиться в нашу систему, сформировать свой набор тарифов и
26: Запустить, в принципе, даже можно приложение тоже наше же брендированное использовать. И водителей тоже исполь водители, которые у нас в системе работают, они могут быт.
27: Russian главное давать заказ и использовать тех водителей, которые может и подключены в других подразделениях, но подразделения делятся и фактически для того, чтобы создать свой бизнес, ничего не надо.
28: Франшизу создаём заказы начинают навалиться. Мы их на них уже можем зарабатывать. Из за этого у нас отдельный сервис тарифов существует, тарифов много, они у нас рентабельные, то есть создаётся
29: И существует все время с 1 и тем же.
30: Сервис управления постобработками это такой технический сервис, который у нас исторически сложился, и его группа, расчёты и тариф постобработки это после того, как заказ закрыт на нём с ним производятся определённые действия.
31: Различная статистика считается, разные тоже обрабатываются ситуации. Этим управляет сервис антифрода тоже в этой группе. Значит, фрода у нас много, все водители пытаются сервис.
32: Обмануть, как-то не платить ему лишнюю комиссию. Вступает в сговор с клиентом, отменяет заказ, а сами его вывозят уже за наличку. Все вот эти действия мы пытаемся предотвратить с помощью сервиса. Так?
33: Следующая группа это группа распределения заказов. Основной сервис сервис распределения. После того, как заказ создан, надо назначить на водителя заказов у нас создаётся много. В городе водителей тоже ездит много разных.
34: Нам назначить заказ водителю оптимальным способом. Ну, чтобы и минимальное время прошло у нас до назначения. Ну и, собственно, чтобы водители были утилизированы оптимально. Таким способом мы
35: Получаем ускорение всей системы и зарабатываем больше денег. Так, сервис уведомления водителей это новый сервис, который сейчас проектировании находится в группе. То есть, когда заказ создаётся, нужно
36: Водителя мотивировать его взять, чтобы он даже вышел на линию, там особенности, определённые с водителями. На самом деле сейчас проблема. Мы ищем способы, как их перетянуть из других
37: Сервисов. Ну, вообще они пораньше, может, на работу вышли. Интересный заказ. Этот сервис будет такую задачу выполнять. Группа сервис заказов, которую мы открыли вакансию. Там some находится сервис заказов, который
38: Операции с заказом закрывает, значит, сервис довольно молодой, хотя как бы логично, что он должен быть 1 из самых первых, но исторически сложилось, что большая часть винной логики по
39: Работа с заказом у нас хранилась, находилась в хранимых процедурах на сервере. Сейчас это большой монолит, где все ещё есть водители, есть клиенты, есть заказы.
40: Они друг с другом переплетены, и логика там тоже ещё пока существует. Вот на этот год планировали окончательно с ним разобраться и перенести всю логику уже в сервис заказов и остальные сервисы. Но пока эта работа ещё пока такая планах.
41: Обмена заказами, значит это сервис в системе у нас мы, если у нас нет водителей, мы можем интегрировать с внешними системами. То есть мы не можем вывести заказ, мы его выгрузили во внешнюю систему. Другая ком.
42: Компания, которая сама, она может взять и по статусам проводить нам, соответственно, информируя нас, по каким статусам движется заказ. Мы его в системе можем в итоге закрыть и часть комиссии с этого заказа себе.
43: Рассчитать. Ну и в обратную сторону мы тоже принимаем заказы, которые другие, другие компании не могут вывести. В общем, такая у нас интеграция есть отдельный сервис обмена, который под управлением сервис во внешние, да.
44: Выгрузка это именно с точки зрения регламентирующих законодательных функций. То есть многим странам необходимы данные, они все хотят регламентировать эту отрасль. Конкретно у нас сейча
45: Проходит интеграция с фсб, и мы довольно успешно ловим мошенников, да, то есть есть потенциальная жертва, она заказывает заказ.
46: По телефону этот телефон есть фсб, как, ну, телефон жертвы, она садится в такси, мы об этом уже передаём информацию в фсб, и они это такси прямо ловят перед подходом бабушки к банкомату, скажем так. В общем, есть такие успешные кейсы.
47: За выгрузку этих данных интеграцию отвечает дальше по команде значит, много разных у нас людей. И вот за последние 2 недели у нас добавилось в команду 3 человека.
48: Собственно говоря, значит, есть сеньоры Лиды, мидлы, джуны. Как бы всех много и стажёров много у нас хороших опыта. Берём стажёра.
49: И дальше у нас вырастает сеньор, значит, вот группе, например, расчет цены тарифов. Дима, у нас senior 2 2 сейчас находится там 3, 2, 2.
50: 1 джун, ну и ещё + 1 джун, который, которого недавно совсем взяли, потенциальный, который идёт и отдельно. 2 разработчика б прикомандированы к этой группе. Почему мы их отдельно выделяем? Потому что
51: Ок, базе данных, но все дописывают отдельные разработчики по базе данных. Если нужно пробросить какое-то поле в процедуру, там поправить немного вызов пописке. То есть, ну, это может, конечно, после задач
52: Делают разработчики.
53: Также у нас к команде приписаны тестировщики, системный анализ, системные аналитики, у них у всех есть свои группы, но они специализированные и функционально относятся к нам, участвуют в наших, а мы с ними довольно тесно.
54: Со всеми синтегрирован, интегрированы. Проджект менеджер у нас 1. Активно работаем, развиваем процессы, оптимизируем наши метрики, а также у нас есть документатор и бизнес аналитик. Так
55: Всего порядка 30. За последнее время 33 человека довольно много, да, будем, наверное, специализироваться как-то по группам, но проходит у нас где-то в 11 часов по Москве. То есть сейчас мы сейчас конкретно
56: Ну, мы его стараемся укладывать все 15, 20 разработчик, скорректируем 24, то так, про саму команду. Здоровая среда, перфоманс.
57: У нас происходит раз в год. Составляем для каждого работника, формируем матрицу компетенций в соответствии с его уровнем по матрице, заполняет сам разработчик, оценивает.
58: Тебя владельцем той компетенции или нет? Параллельно проводит оценку и команды. Встречаемся на перфоманс, тервью, сравниваем результаты, что совпало хорошо, что не совпало. Спорим, вводим какую-то
59: Какую-то общую правду и ставим этот пункт развитие, тот, который не отмечен, да, ставим пункт развития дополнительно думаем, что ещё, какую ещё пользу разработчик может
60: И себе, и компании. То есть в каком-то таком, в таком плане делаем цели на будущий год, формируем эти цели и трекаем в течение года встречаемся 1
61: И общаемся.
62: Уровень и то есть удовлетворённости командой проводим постоянно. У нас hr служба проводит и в общем то у нас все довольны работой. Есть, конечно, вопрос там по зарплате у некоторых, но в основном мы
63: Все, держимся в рынке. Текучки у нас нет, очень редко кто сам уходит, если не проходит. Бывают такие случаи. Конфликтов тоже у нас нет. Если есть, то
64: Быстро решается. Мне кажется, нам удалось создать такую среду, которая, ну, близко к идеальной сказать, ежегодно встречаемся в оффлайне. Последние 2 года встречали.
65: В Екатеринбурге 3 года назад были в Тюмени. В этом году тоже планируем съездить в Тюмень, там большой офис компании встречаемся, обсуждаем рабочие какие-то моменты, немного работаем, много общаемся, ну и вечером.
66: У нас неформальное проходит, то есть 1 неделю мы вот работаем вместе по процессам, у нас реализована какая-то своя форма канбана, где сплошной поток задач.
67: Ну, с элементами недельного планирования пытаемся все, что накидали за неделю, разобрать. Существуют у нас квоты, к которым мы стремимся 40%.
68: Делаем бизнес или имплементируем фичи, которые у нас улучшают систему, 40% закладываем в техническое усовершенствование системы. Это в том числе и работа вот по распилу шарда.
69: В том числе какой-то технический долг и 20% это на баги и на Интерна таски, которые, которые, так сказать, не требуют согласования. 40%. Мы их тоже проскали, аем и согласовываем.
70: Дирекции вот 20% то, что мы считаем нужным для команды и плюс баги мы закладываем вот этот процент.
71: Используем для управления всеми тасками трек трекаем времени. Время по задачам с точки зрения как раз узнать распределение фактическое, сколько было, прежде всего для этого ведётся. Никаких у нас слеж.
72: Слежка за разработчиком. Че там он делает в течение рабочего дня? Нет. Значит, в основном у нас работают все удалённо в офисе Екатеринбурге. Сейчас у нас 4 человека из команды.
73: 5, 5 сомной. Ну, поощряем тех, кто ходит в офис. Также у нас есть офис в Кургане, в Тюмени, в Казани, в Питер. И, в общем то, во всех этих офисах у нас есть сотрудники из нашей команды. Так.
74: 11 часов, я уже сказал, 15 минут мы укладываемся. Ну, проводим такие активности, как еженедельный лимит, обмен опытом на час собираемся все, ну, кому интересно, задаём определённую тему. Докладчик и рассказывает.
75: Делится опытом своей работы, что-то интересное рассказывает. Смотрим, задаём вопросы, общаемся формально, также периодически проводим рето по процессам, как мы успеваем, как работаем.
76: Получаем обратную связь от команды, пытаемся совершенствовать свои процессы по технологиям. Значит, про шар я уже говорил. То есть база, шардированная по ческому признаку, то есть раньше
77: На ней было много логики и про просто не выдерживал. То есть алгоритмы распределения были там водителей заказов, постоянно женились друг с другом. Ну, собственно, на всю площадку, например, на рф у нас 1 площадка.
78: Все не уже упирались в потолок единичного сервера. Соответственно, базу шардировали порядка там 5, 6 шаргов существует сейчас на, ну, на других площадках.
79: Так, по сервисам сервисы у нас на значит, протокол у нас по мы общаемся, лежит внутри база данных, у каждого сервиса своя.
80: 1 оперативная база, все остальные базы для распределённого кэша. Используем редис в качестве брокера сообщений, используем маджити. Ну вот, да, многие задают вопрос, почему не как?
81: Там и прочее. Ну, не rabbit. В своё время производили тестирование. Он был тогда ещё совсем молодой, лет 5 назад. Мы сделали на него ставку, и пока, в общем то, не жалеем нам его производительности. Хва.
82: Конечно, он не такой популярный и, но тем не менее в качестве аналитики профана выводим графики, подписываемся на алерты.
83: Все там ci cd gitlab, jenkins задание для запуска Тестов, тесты и тесты, и функциональные интеграционные все у нас есть, собирается сборка.
84: Выкладывается на наше железо все железо у нас наше никаких облаков нет. То есть всякие стойки с железом арендуем в дата центрах разворачивается параллельно версия, значит,
85: Пуска 10% трафика, там 20, 50, 100 анализирует. Если ошибок нет, то инстанс полностью переключается на новый старый с кубернитисом используется у нас 2 года. Потихоньку мы его
86: Затаскиваем новые сервисы, все разворачиваем в кубере. Ну, старое, соответственно, готовим к переносу туда. Ну, не торопимся к этому. С этим. Есть у нас такой
87: Бизнес, критичная среда и админ у нас учится как с ним работать. Собственно, мы потихоньку используем новые технологии. Так, в общем то, вот по примерам задач
88: Старые вытащил где-то это было месяц назад. Тут упор сделан на проектирование. Разработчики у нас занимаются, топовые разработчики занимаются проектированием. Аналитики они в основном
89: Разрабатывают интеграции для задач, которые требуют участия смежных доменов. Ну, в общем, при создании задачи думаем, кто будет её проектировать, аналитик или разработчик.
90: Вот, ну и сложные задачи, конечно, быстрее, эффективнее получается решать при помощи топовых разработчиков. Значит, задач так много. Прежде всего они связаны, конечно, с рефакторингом нашей системы.
91: Улучшением её технического состояния. Ну вот на этом делаем особый акцент. Ну то есть поправить баги кода. Это все, в общем то, как у всех, наверное, ничего нового нет. Так, наверное, так, собственно,
92: Чего хотел рассказать, готов ответить на вопрос.
93: Так, ну вот вы сказали, что у вас канбаны с недельными спринтами. А как, собственно, происходит оценка задач, и что вы делаете там, если задачки там не подбиваются по срокам, значит, есть у нас
94: Задача сначала она попадает в, потом попадает в pdr в статусе ивиар собирается команда смотрит на задачу готова ли она, выполняя.
95: Оценивается её Тимме разработчиками, которые будут делать. Ну, на основе опыта есть сложные баги, которые оценивать. Ну, по ним надо проводить. Непонятно, сколько это времени займёт. Ну, ставим 2 дня и
96: На статистике подбиваем статистику, может, будем корректировать это время. Ну а так разработчики, конечно, ставят, если не подходит, не получается. Проводим работу с этим.
97: Ну, не получилось. Ну, если сильно разошлось, ну, значит, скажу так, что, наверное, в этом году мы будем этому отдельное внимание уделять, что процессы
98: Совершенствуется вот у нас практически на ходу. И вот оценка и попадания скоро станет, ну, важным, потому что задача распределения между разными доменами и которые мы синхронизируем, н,
99: Уровне мы планируем сейчас, то есть через, грубо говоря, там в июне месяце мы будем, должны сделать определённую задачу, которую мы сейчас планируем уже, ну если мы не начнём успевать по текущим задачам, сдвинемся на август, соответственно, кто-то будет ждать на
100: Нашей части выполнения работ. Вот будем пытаться попадать, значит, санкций особых нет, как бы таких, да? Ну вот задачи, я понимаю, у неё решения нет, пытаемся попадать. Все.
101: А что, собственно, это в плане того, собственно, как бизнес даёт задачи, как он их приоритизирует? Ну, то есть прилетают ли там метеориты, как бы, что там нужно, да, срочно.
102: Сделать уже какой-то там проект, да, есть такие тоже, я уже говорил. То есть наша область зарегулирована. И вот не секрет, наверное, что в России появились белые списки. Ну и у нас есть
103: Мы там в эти белые списки не попали, у нас просто тоже весь бизнес рухнуть, потому что водители ездят по мобильному приложению, не будет трафика, мы не будем знать, где водители и все, как бы все, уже все может отпасть ответственно эти задачи пошли.
104: Plan, чтобы попасть в белый список. Мы все бросили, начали это делать. Ну и каждый год практически такие задачи попадают. Вот 1 только есть 1 способ резервировать на эти задачи время как-то пытаемся их резерв
105: Что что-то такое тоже в этом году будет. Ну хорошо, понятно.
106: Пока, кажется, больше вопросов ещё презентации нету.
107: Супер. Тогда я предлагаю перейти к нашим вопросам стартанём. Ещё раз повторюсь, если будет по ходу беседы что-то возникать, какие-то комментарии, вопросы не знаю, корректировки и поправки, то пожалуйста
108: Открыто начнём с общего. Вячеслав, ребята о тебе практически ничего не знают. Расскажи, пожалуйста, чем занимался, над какими проектами работал, какими технологиями пользовался? Ну, желательно. Тем более услышал, что у нас
109: Меня желательно тоже какой-то опыт. Что было интересно у тебя?
110: Так, ну с чего бы начать? Ну я уверенный дотнет разработчик, сейчас работаю в озоне, до этого работал в небольшой документоориентированной компании. Называется контур, наверное, слышали? Ну, сейчас, да, в книжном магазине озон конкретно сейчас.
111: Я работаю в команде логистики, логистики глобала. То есть те, кто отвечают за доставку заказов из за рубежа, то есть то, что у нас основной домен, как бы, ну, приёмка.
112: Учёт заказов, там, терификация, собственно, ну, вознаграждение клиенту, вознаграждение агента, собственно, это перевозки тарифицируем, ну и, собственно, занимаемся внутренней отчётностью, но это основной домен команды, в которой я работа
113: Также помогаю там соседним командам, то есть вот стартапил новый проект, а именно озон брокер, чтобы озон занимался собственным таможенным оформлением, а не надеялся на внешний там аутсорс, ну и стартапил ситуси доставку, то есть доставку посылок.
114: Тоже можете потыкаться, посмотреть в приложении озона.
115: Вот, как бы основной домен в целом тут пришёл, то я в него, потому что там было очень много инфраструктурных задач. То есть мы отказывались там от единого там монолита, через который, собственно, через наши схемы там везлись, собственно, все.
116: Заказы. Постепенно там это все растаскивалось по всей логистике. Собственно, мы сами тоже отказывались. Там сидели, там на десятках топиков, что у нас там множество, мы процедур 200 сотен, в общем.
117: Было весело, то все-таки пришли к прогрессу, потом количество заказов росло, росло, росло. Собственно, пришли к шардирование. Тоже любопытный процесс. Ну а так-то.
118: Что рассказать по проекту? Ну, такой небольшой, вот, как бы там, миллионы заказов в день, десятки миллионов событий в кафке, сотни тысяч рпс, терабайты данных там, что в басках, что в хранилках конкретно.
119: Цеф.
120: Ну, как-то так. До этого работал в контуре, портальной инфраструктуре, отвечал, собственно, вот взаимодействие пользователя, персональные данные, все дела.
121: Что-то хочется конкретное услышать, да, стандартные вопросы. Че из контура ушёл? Че из хочешь уйти? Потому что я достаточно долго сидел на одних проектах.
122: Повидать нового мира, потому что когда работаешь с большими нагрузками, с достаточно такими тяжёлыми доменами, обычно все приходит к достаточно большим ограничениям, и все кажется, что весь мир надо сеять квадратно гнездовым.
123: Методом, поэтому вот.
124: Хочется повидать мир и и, и, и тоже самое. 2 года, 7 месяцев там работал, все, пора уже уходить, да. Ну да, в целом, то как я тут много чего успел интересного поделать, то есть
125: Довести текущий проект до состояния, когда он находится на спокойной поддержке на пенсии, стартапил новые продукты в целом, там приобрёл тоже много полезной экспертизы для команды. То есть, ну вот
126: У тебя 3 года, в каждой компании, у тебя нет такой, такого ощущения, что, в принципе, 3 года и надо дальше куда-то идти. Конечно, есть, да, есть такое, да.
127: Так, хорошо, стартапил какие-то проекты как-то внутри поднимается. Есть у нас новый проект. Давайте кто-то должен
128: Его не знаю, там, ну да, чтобы там все у него срослось, как это выглядит? Ну, как это выглядит? Ну, у нас есть, как бы, это группа разработки там, коммерциализации логистики.
129: Как бы мы, по сути, то самая главная, ну, скажем так, самая крупная команда в ней. Поэтому вот эти проекты начинаются через нас. То есть у нас там 8 разработчиков, как бы, вот стартапим продукты постепенно, точнее, проекты вместе с ними, как бы, ну,
130: Формируется параллельно команда, которая, собственно, будет ответственна за дальнейшую разработку и поддержку. То есть начинали мы с брокера, который там больше года разрабатывался, прежде чем пойти в продакшн, там, потому что очень много всяких
131: С таможенным оформлением. Собственно, я там начинал с основного инструментария специалиста тнв по оформлению там товарных накладных, внешнеэкономической деятельности специалистов, которые будут это все делать постепенно там
132: Формировалась соседняя команда, там интеграции с операторами, там у нас менялись домены, то есть их часть о глобалкой, часть там, по 3 операторам, которые, собственно, там нам везли, как много бюрократии.
133: Не буду удаляться в деталях, но как бы они теперь специализируются на брокере. Они там передали большую часть своих сервисов нам, ну и там, по взаимодействию, собственно, с бизнес доменом global, менеджерами, экспертами и прочим постепенно укрепили их команду. Тоже до 8 человек. Вот они. Сейчас занимаю.
134: Самостоятельно. Иногда мы к ним приходим, потому что наш проект, он почётно поддержки, когда там свободное время есть. Ну, приходим, приходит бизнес заказ, собственно, через аналитиков. Собственно, вот проект утверждён. Начинаем стартапить.
135: С усишками тоже примерно так же было. То есть там тоже формировали команду, там, начиная там с 2 человек, мы там вместе начинали все это делать. Ну потом они тоже разрослись, тоже где-то до 8 человек и сейчас самостоятельно поддерживают. Иногда к ним приходим, потому что
136: Нас, скажем так, нагрузки, размеры больше, поэтому предоставляем свою экспертизу временами там на каких-то там их бизнес тасках. Вот.
137: Коллеги. Угу. Давайте немножко ворвусь. Услышала то, что вы сейчас как команда поднимаете остальные проекты, когда они появляются у вас?
138: Помимо этого, ещё какие-то дополнительные задачи есть дополнительные проекты, которые вы ведёте на регулярной основе, или вы вот именно в качестве эксперта для старта, ну, эксперт для старта вот новых проектов, как бы вот этих 2. Угу. Пока новых нету.
139: А, так, у нас, ну, я же сказал, у нас основной домен это, собственно, менеджмент гольских заказов. Собственно, приёмка этих самых заказов, когда они, собственно, привозятся на наши сервисные сортировочные центры. Ну и как бы терификация, отчётность, внутренний, логистический учёт. То есть это наш основной домен. Угу.
140: Есть ещё 1 достаточно любопытный домен, но, к сожалению, я его не особо касался, который вот находится в рамках обязанностей нашей команды. Это теневое снабжение озона, то есть там всякие пакетики, ручки и прочее. Поз, снабжаем автоматом, но, к сожалению, я его особо не-ка.
141: Угу. А вот смотри, ты говоришь, что у тебя были разные проекты, которые ты стартовал и не стартовал изначально приходил, и там, и инфраструктурой в том числе, занимался как будто бы достаточно активная смена деятельности.
142: И ты говоришь, что вот там за 2, 3 года ты уже хочешь посмотреть что-то другое? Тебе конкретно в компании некомфортно? Или у тебя какие-то дополнительные есть? Может быть, ты хочешь на другой продукт совсем перейти?
143: Почему ты дальше не пошёл внутри компании развиваться, переключаться на какие-то другие задачи? Ну?
144: Внутри компании, как бы вот стартапил новые продукты. Мне кажется, что внутри компании я в целом получил как бы опыт, то есть внутренняя ротация, но мне не особо уже интересна. Хочется вот именно, то есть ты конкретно хочешь именно выйти? Ну да, хочу выйти. То есть, я же говорю, посмотреть на мир. Угу.
145: Понятно, хорошо. А давай ещё поговорим про, ну, какой-нибудь из последних проектов. Ты говорил, там, 28 разработчиков, правильно услышала? Человек в команде, какие там были позиции, какие Роли?
146: У ребят, ну, в текущей команде у нас что, как бы тимлид техлит 2 сеньора хак собесов, точка ком, собес станет пустяком. А у тебя какая роль среди них, сеньор?
147: Угу. А, допустим, не знаю, до позиции не было желания. Ну, есть желание, но чего-то, чего-то не хватает, да, и хочется, ну, скажем так, я не
148: Какого-то своего вот внутреннего удовлетворения от того, что я нахожусь в озоне, в плане того, что, ну, мы делаем достаточно много всего типового в плане там. Угу. И технических задач. Поэтому, собственно, вот как бы
149: Общаюсь вот с разными компаниями, как бы вижу, что разные проекты, разные домены, разный технический стек, разные собственно, технические вызовы. Это мне это гораздо более интересно.
150: Хорошо, поняла. Слышала ещё, что ты выступаешь довольно часто в качестве техэксперта. Скажи, пожалуйста, а конкретно вот прям наставничество каких-то юных сотрудников был? Такой опыт, конечно, был, то есть
151: И на зоне стажёр помогал там расти вначале, там до джуна, потом там до мидла. Ну, обычно, как бы, в основном, это надо до, на, довести стажёра, потом там. Угу. В целом, так общаемся, как бы, сами дорастают, но это обычн.
152: Дело, ну и в контре тоже.
153: Помогал. Угу. То есть прям трек получается. Стажёра полно. Спасибо.
154: Хорошо, здесь, наверное, по этим вопросам по опыту было интересно. Спасибо. Давай перейдём к тому, что ты сейчас ищешь для себя. Что было бы тебе интересно, что тебя зацепило и точно вдохновило?
155: Ну, я и сказал, что хочется вот поучаствовать в новом домене, в новой технической, собственно, среде, то есть столкнуться с новыми техническими вызовами. Угу. Ну, а какие?
156: Для тебя будут новые, ну вот какие-то конкретные примеры, может быть, расскажешь? Ну не знаю, в 1 очередь, интересно все-таки архитектурные задачи. Угу. Это, ну, собственно, видеть какие-то бизнес процессы, бизнес задачи, то есть
157: Угу.
158: Так, хорошо, поняла. Скажи, есть какие-то стопоры, которые бы тебя остановили, куда бы ты точно не пошёл, что не должно быть у нас в компании однозначно. Ну что, нет, ну.
159: Полный хаос в бизнес процессах, наверное, как бы, непонимание, собственно, того, что мы делаем такое вот, не люблю, как бы, чёткое признавание, как бы, legacy, без желания, собственно, как-то решать проблемы, ну и заметание проблем под ковёр.
160: Ну, я бы сказал. Угу. Так.
161: Угу. Ну давай откровенно скажем, что на входе, особенно прометание проблем. Поеду, наверное, будет сложно понять конкретно на собеседовании, может быть ещё какие-то есть ограничения, то, что ты увидишь. Вот прям сразу, прям сегодня.
162: Ну, не знаю, пока я ничего такого не увидел. Хорошо, понятно. Спасибо большое. Я думаю, ребят, врывайтесь. Снова отдаю микрофон.
163: Вроде ничего такого по опыту нет.
164: Да мне вроде тоже все понятно.
165: Давайте тогда к технической части перейдём.
166: Давайте технической части.
167: Так, ну давайте про, про, наверное, да, референта, давай о них поговорим, как это принято на многих собеседованиях, собеседованиях.
168: Этого вопроса, что знаешь? Знаю, что они ещё в разных документациях майкрософт называются менеджмент и менеджмент айс.
169: Ну, вкратце, как бы у нас есть что получается как бы ссылочный. И type type. Ну, это у нас банальные примитивы, собственно, то это, это банальные там Инты, фото, там, как бы, и про
170: Все, что имеет достаточно маленький объём и что гораздо проще копировать, чем хранить ссылку на неё. Ну и также, как бы структуры есть как бы референс тайп, то, что хранится в управляемой куче, собственно,
171: И в рамках работы, собственно, там, на стеке, они там хранятся как ссылки к этому, что относится, ну, банальные там примитивы, строки, там, массивы, все, там классы, все, что там боксит к интерфейсам, то есть
172: Это конкретно у нас по тайпы что же ещё? Ну тут как бы хотелось бы более уточняющий вопрос все-таки про что интересно послушать. В целом, то как бы и reference type можно запихнуть в стек.
173: Через ооо. Угу. Знаю даже, что, кто так делал вполне конкретными целями. Вот.
174: Ну там в общем то понятно. Давай сразу двинемся дальше про garbage collector, как он работает?
175: Ну как он работает, собственно.
176: Стандартный, собственно, алгоритм жрут, что у нас вот в куче есть какой-то набор объектов, который поддерживается, собственно граф ссылок из Корня, то есть из точки запуска приложения. Ну, собственно, это
177: Поддерживается, учитывается. Потом, при начале сборки мусора, собственно, обрабатывается, обнаруживаются недостижимые объекты. Потом они помечаются на удаление. Собственно, следующем этапе работы коллектора, они
178: Удаляются. И затем происходит компакт, в рамках которого данные уплотняются. Те, кто там переживают, там переходят по поколениям памяти, то есть нулевое 1. 2, там, собственно, чтобы их гораздо меньше, ну, скажем, чтобы долго живу.
179: Объекты гораздо меньше проверять.
180: Вкратце, так как сам процесс работы gc отображается на работе приложения, как ну зависит собственно от
181: Строек самого коллектора.
182: Ну, это понятно. То есть вот он начал собирать память, и долго вот он собирает, освобождает, как в это время себя ведёт приложение. Ну, обычно, как бы это, если у нас, по сути, то это синхронная блокировка.
183: Че там у нас северно происходит, слава Богу, но проблем с у нас не было. Северный. Что он получается, это по отдельным потокам это делает, если я не ошибаюсь.
184: Ну, просто подтупливает, точнее приложение, когда сервис наш, если он начинает активно собирать память, замечаем тормоза хотел услышать, там происходит синхронная блокировка выполнения, собственно,
185: Так, с утечкой памяти как сталкивался? Ну да, сталкивался. Давай примеры какие-то, приведи, какие примеры, что у нас было? Ну, например, там, какой-нибудь
186: Thai статически, скажем так, статический кэш какой-нибудь, который там поверх словаря бесконтрольно рос, что там ещё у нас там бесконтрольные запросы в баску, которые там выгружали по там, десяткам миллионов записей.
187: Очень страшно было это все добавить, исследовать. Ну так в целом, что как бы тут обычно везде, где такое типа явно появляется, ну, про разные стратегии для этого поиска, как бы, где-то обычно.
188: Там можно заметить, что начинается потребление при этом запуске аких то там определённых обособленных процессов, где-то там это смотрел дампы.
189: То есть профайлил смотрел дампы, да? Угу.
190: Так, про про неуправляемые ресурсы, неуправляемые ресурсы, протоны диссо и как, собственно, их закрывать да, да, про них присутствует диспос.
191: У которого есть поддержка синтетического сахара шарпа, то есть, что он как бы нам предлагает, ну реализуйте как бы этот метод, метод по там через него вызывайте метод dispose потом там через конструкцию юзинг.
192: Через, а попробовать закрыть в случае каких-то проблем в целом, как бы это pre напрямую написании, как бы диспо паттерна. Надо учесть ещё. Это особенность работы анализатора в целом, вроде все
193: Или хочется че то более конкретное услышать, а приведёшь примеры каких-нибудь неуправляемых вообще ресурсов там, ну что получается в контуре? Мы активно там пользовались блокировками поверх кипера, как бы их вот постоянно
194: Помечали то есть конструкция using что ещё ну в основном это db connection используем что где это ещё можно использовать в сокетах есть ещё.
195: Вот такая прикольная штука, которая, ну, не особо, получается, работает с менеджмент структурами. Это, собственно, систе транзакшен, очень удобная, там, либо по работе с транзакциями, там, через статик, там
196: В целом, ну так, для ложных контекстов в целом можно много чего использовать.
197: Паша, если у тебя вопросов нет, по этой, да, да, памяти больше. Я бы хотел по расси локал, затронул. Вообще работал с ним как-нибудь, да, в явном виде, скажем так, да, в основном я с ним работал на рош.
198: Компании в контуре мы через sync локал, собственно, пробрасывали контекст ну, скажем, мы работали в портальной инфраструктуре, нам надо было доставать много информации из текущей там тину аштипи запросов там по портальным идентификаторам.
199: И доставать там токены. И мы это создавали как контекст запроса, свой кастомный и через него там это, ну, скажем так.
200: Свой выделенный контекст, где мы там уже все распарсили как бы в красивом виде. Ну и использовали для этого синко как контекст поверх там всего запроса, там данной сессии.
201: Сталкивался когда-нибудь с его магией, когда там по какой-то причине теряется контекст, или он там не виден из потока какого-нибудь, из какого-нибудь потока особо не сталкивался.
202: Окей, а с этим, ну вот, допустим, спи, вы там как-то контекст, видимо, использовали. Про контекст синхронизации же слышал контекст синхронизации, но в случае
203: Это его, ну, если говорим про, то, он не особо нужен, потому что у нас нет контекста синхронизации, но если как бы мы делаем какие-то либы, то потенциально в пространстве, где он может применяться.
204: Надо учитывать, что если мы там не хотим, чтобы там продолжалось там, на 1 этом потоке, то стоит все-таки это включать его.
205: Знаешь, для чего эти рекомендации для библиотек применяются? Ну что for этот надо ставить? Почему, собственно, надо ставить? Ну, скажем так, если нам это не принципиально, ну, для повышения там, банально.
206: Утилизации ресурсов, то это имеет смысл, либо, ну почему надо? Ну потому что если какое-то клиентское приложение, что, конечно, в бэкенде маловероятно, но может быть, то тогда
207: Надо, потому что там свой контекст синхронизации, свои приколы.
208: Там примерчик какой-нибудь, может приведёшь, если там для доступного какого-нибудь приложения, там с юаем условно нет, не приведу. Все-таки у меня бэкенда.
209: Так, ну можно ещё может пообщаться насчёт блокировок вообще, какой стратегии стоит придерживаться там при выборе того или иного класса блокировок в интернете?
210: Sweet синхронизации. Ну да, то есть там много же всяких есть у нас какие, в каком случае стоит использовать? Ну, не обязательно прям по каждому, просто там, по группам, там, условно, мьютекс какой-нибудь, там, я не знаю.
211: Что надо попробовать это идти в сторону атомарных операций, то есть там использовать css инструкции там через интерлок или там какие-нибудь атомарные инкременты, товарные инструкции процессора, там, где это, собственно, позволительно в том,
212: То, ну если у нас нету, собственно, каких-то, какой-то работы с синхронностью, то есть у нас нужно создать какую-то критическую секцию.
213: Сервисе, то в целом подойдёт как бы lock стандартный, там через монитор, в целом его более чем хватает для большинства задач. Типа тянуть семафоры обычно особо не имеет смысла, типа это блокировки как бы, ну.
214: Немного больно. Если там требуется что-то более сложное, то это Лимы как универсальное средство, там по ограничению параллелизма, там создание, там критических секций.
215: В целом, как бы вот стандартный этот инструментарий в целом, как бы более верхний, уровневый, как бы можно всегда писать более функционально, как бы, и тогда там хватает достаточно параллель синк в целом, как бы, ну,
216: Это основной как бы, инструментарий, которым я пользуюсь. Можно поговорить про что-то там ещё, если интересно, потокобезопасная коллекции вообще на каком принципе они как работают вообще, может под капотом ковырял? Ох, завис.
217: Собственно, от того, какую конкретно коллекцию мы, собственно, ну, рассматриваем, у нас, собственно, есть иммьютабл коллекции и есть канкар коллекции.
218: Coca. Давай с конкарент. Для начала я сказал, что-то, наверное, самые простые, потому что там просто сематика, ну, вернее, как там все-таки мутабельность у нас имеется, и вся работа строится поверх того, что мы модифици, ну, скажем так, любое
219: Обновление это создание новой модифицированной версии с каким-то под изменённой частью данной коллекции. Тут в целом достаточно все просто потом что по конкарент ну там в основном используется
220: У нас нас используются локи под, там, собственно, под капотом, н, используются р локи более гранулярные и под конкретные операции.
221: И так не знаю, паш, может, там по многопоточке какие-нибудь ещё вопросы?
222: Да нормально.
223: Ну, то можем ещё тогда так, наверное, затронуть какой-нибудь асинкавейт вообще, как там, допустим, сейчас сформулирую. Секунд.
224: В общем, бывают ли у нас какие-нибудь проблемы с асинхронностью, там, допустим, какой-нибудь у тебя single, том класс, надо как-нибудь расшарить доступ к нему, там бывают какие-нибудь проблемы?
225: С блокировками в рамках асинхронности у нас
226: То есть есть какой-то доступ к шаренном ресурсу из нескольких потоков в рамках сервера, допустим, какие у нас там проблемы могут возникнуть с блокировкой.
227: Какие проблемы могут возникнуть с блокировками?
228: Ну что, как бы там dead lock live локи, что там ещё ну собственно вот основные проблемы, то есть как с этим бороться, ну только в 1 очередь, гарантии работоспособности алгоритма.
229: Что там он не приведёт ни в какую-то из этих проблем. То есть у нас должна быть чёткая гарантия работы, что она будет совершаться всегда постоянно совершаться. Полезная работа и алгоритм не приведёт к блокировке.
230: А вот, допустим, с распределёнными какими-то блокировками работал там едоками, ещё чем-нибудь там, ну да.
231: На текущем проекте не особо на самом деле, если так подумать, у нас несколько другой, другой подход к архитектуре, и мы, наоборот, пытаемся отказаться от всех. Собственно блокировок. У нас
232: Собственно, товарные товарная транзакционность по конкретным, там агрегатам ддд и взаимодействие там, через консистен, там, распределённые поверх, там, доменных событий, там, или интеграционных событий.
233: Как, допустим, все-таки, ну, скажет какой-то пример сразу же, ну вот, допустим даже в рамках вот secure какого-то у вас подхода, там, предположим, прилетают какие-то 2 изменения каких-то, как, допустим, вы будете
234: Гарантировать там-то, что они доставятся в правильном порядке, скажем так, то есть какими средствами вы это обеспечиваете.
235: Говорится, есть 3 проблемы.
236: Ладно, не буду. Так получается, вот пришло 2 конкурентных изменения. Ну, мы идём в это, ну, как мы пользуемся оптимистичными блокировками, то есть при попытке записать, как бы смотрим на версионирование, в большинстве случаев это
237: Этот идентификатор последней транзакции, то есть в этом случае, как бы, ну, тот, кто не смог записать, ну, пытается это, пытается, ну, типа, повторить ретрай типа, в случае кафки, ну, это делается.
238: Просто.
239: Ну, там, вероятно, как-то просто, ну, скорее вопрос, ну, скорее, как вопрос стратегии обработки собственно событий. А если мы все-таки говорим про что-то, вот про 2 синхронных запроса, ну, наверное, все-таки.
240: Требуется какая-то такая пессимистичная блокировка, то пытаться, конечно, идти в с максимальным уровнем изоляции транзакций не хочется, но тогда можно попробовать создать распределённую блокировку. Том дело типа может
241: В эту сторону подумать.
242: Ты говоришь то, что вы старались избегать, ну, допустим, как будто типовая задача, то есть, ну, у тебя просто прилетает 2 изменения там, ну, то есть, предположим, даже через брокер сообщение, допустим, вы как порядок, скажем так, сохраняете, ну, там,
243: Ещё че-нибудь делаете? Ну обычно настраиваем, собственно, то, как мы будем сообщения. То есть обычно, собственно, по ключу protezione ования, мы пользуемся активно ключом партиционирования, то есть у нас различны
244: Заказы, как бы, ну, здесь достаточно распределять, собственно, заказ, ну, скажем так, 1 заказ в конкретную эту партицу, по собственно, сообщения, как бы, это, собственно, такой идентификатор заказа уникальный, собственно, так оно распределяется. Единственное, когда возникаю
245: Проблема это если, собственно, это, ну, типа, увеличив количество партиций, тогда, собственно, порядок может нарушиться, но в таком случае, как бы, как бы, наблюдение, ну и в крайнем случае можно сбросить офсет, чтобы перечитать сообще.
246: Ну а так в основном это гарантируем собственной целостностью домена, то есть как бы td все дела.
247: Угу. А вообще, по про разные проблемы. Ну, в целом, пони, да, я услышал, что хотел, решаем проблему. Ну, вот, говорю квадратно гнездовым методом.
248: А вообще, по политикам доставки в брокерах, там какие, для чего, скажем так, стоит применять. Ну, это там-то и прочее. Ну, зависит от того, как бы, что
249: Какие, собственно, есть требования к сообщениям, что это за сообщение? То есть, как бы вот есть 3 основных, как бы, типа, это mostly, но мы это делаем в основном и импотентностью на стороне потребителя.
250: Так, в целом, ну, для чего они используются? Ну, типа, ну-ка, редко используется. Плюс, как бы там, при проблемах с соединением, там она не гарантирует. То есть, может потенциально продублировать. Плюс это как бы, блокировки на стороне кафки хочет.
251: Все-таки, как достаточно тупой инструмент и, собственно, настраивать там отдельно про там или в крайнем случае, позиционирование настраивать, ну, как бы, если нам не страшно сдублировать сообщение, но требуется гарантированно его отправить, ну,
252: Как бы при гарантии потребности консьюмера, в целом, нормальное решение, мост Ван, ну, не знаю, наверное, где-нибудь в нотификашка, там нотификации, то есть задудосить. То есть мы не хотим задудосить пользователя как бы, то.
253: В целом, как бы потерять сообщение. Ну, потенциально можно, я бы ответил бы так.
254: Ну, не знаю, может, по архитектуре можем тогда пообщаться, если у Паши нет вопросов. Да, давай, паш, а вообще, как вы условно организуете код? Ну и какой тебе скажем?
255: Так, подход к организации кода больше всего нравится. Может это какое-то объединение каких-то практик общепринятых? Ну я бы не сказал бы, какой мне больше всего нравится. Как бы тут скорее зависит, собственно, от задачи целесообразности использования архитектур.
256: То есть, если мы или какой-нибудь там примитивный крут, не знаю, либо же у нас достаточно примитивная бизнес логика, то можно создать какую-нибудь многослойную архитектурку, где там все идёт от д. И представления, собственно, её там, собственно, аппликейшн, та
257: Контроллеры. Примитивном случае можно так воспользоваться в целом. Сейчас, как бы мы везде используем собственно, доменцены, н, архитектуру, оо, как бы есть 3, ну, таких основных архитектуры, как это чисто
258: Анальная в целом, как бы у них 1 общая кор идея, что как бы домен должен быть, собственно, в центре приложения и не зависеть ни от чего.
259: Собственно мы вот её придерживаемся, что как бы не зависит ни от чего, типа он легко тестируется, он сам себе, он сам проверяет, собственно все свои варианты, сам как бы там rich модельки и собственно все по красоте потом.
260: Что, собственно, по архитектуре сервиса, ну, как вот у нас выглядит типовой сервис, как бы, ну, в центре домен, поверх него, там у нас свой аппликейшена, её там, собственно, у нас основные там сервисы, скажем, какие-то обобщённые сервисы отдельно.
261: Что там ещё есть кейсы отдельно, собственно, да, порты там, гонки отдельно, собственно, у нас свой презентации, где мы, собственно, описываем контракты взаимодействия с внешним миром, то есть там топиков, кафки, джипси, тишка.
262: Все прочие прибамбасы. Затем идёт это свой инфраструктуры, которая реализует все и сразу, и через инверсию зависимостей красиво подставляется во все это.
263: Ну вот если говорить про архитектуру сервиса, если говорить более верхнеуровнево про проектирование, то мне очень нравится подход с ддд, собственно проектирование через агрегаты, собственно транзакционность в рамках отдельных агрегатов.
264: Ну и взаимодействие, собственно, между различными агрегатами, как распределённые Саги, либо там доменные события в рамках 1 агрегата.
265: Вообще, ну, получается, ты реализовывал в каком-то виде там паттерны, Сага, там, для каких-то операций, ну, по сути то, да, как бы без оркестровки в основном, скажем так, скорее, это такая типа.
266: Неявная хореография, потому что, ну, скажем так, при каких-то сложных интеграциях, там в целом можно как бы так сказать, но тут достаточно сложный домен, как бы вот наш интерпрайс сможем заказать.
267: В целом это можно назвать хореографической саой.
268: Ну, я там ещё видел, вроде как у тебя сервисы секьюре были, там вообще вот эта проблема классическая. Вешал консистенси. У вас там как-то приходилось с ней бороться? Или так все хорошо получалось то, что
269: Она не стреляла. Ну, каких-то проблем не было, во первых, логистике нормально работать консистенси, потому что-то, что моделируется в реальном мире, оно достаточно долго и ездит там часами между там, складами и прочим. Так, типа, ну,
270: Конечно, уже, ну, временами там могут появиться проблемы, но от этого, собственно, идёт от, скажем так, это у нас решается, ну, скажем так, централизованными мастер системами, то есть, там менеджмент заказов, там, либо каких-то отдельных конкретных бизнес.
271: Которые, собственно, это консистентно работают с, ну, скажем так, мастер системы, которые, собственно, отвечают за запись конкретных сущностей, и они, собственно, являются истиной последней инстанции, то есть всегда как бы, это какое-то интеграционное событие, там, то
272: Сходить в эту мастер систему, узнать собственно реальное состояние и решать проблему другим способом.
273: Ну, условно, там, скажем так, в первоисточник сходить, а не в какое-то представление там, ну, да. Угу. Ну, может, у Паши что-нибудь ещё такое есть, да? Ну, я немного по другим.
274: Уже вопросом пошёл, слышал, что такое паттерн транзакшн, outbound?
275: Не применял, где в озоне без него мы не живём. Хотя на самом деле был 1 сервис, который очень долго прожил без него. Очень болезненная история. Так, по сути, то это когда я пришёл в команд,
276: Ну, у нас уже был как бы самописный бокс, там поверх апдейт, пока у нас там ещё были не шардированные баски, потом там мы переходили в ооо, ну, а затем там полгода назад.
277: Инфраструктурщики, вернее, платформ Ики озона, выкатили там свой, а там через синхронный интерфейс, там со своей там, реализацией, со своими автонакатами, миграции в баски, поддержку шардирования, там и
278: Че там, ну и своей инфраструктурой там для car сервисов. То есть вот полгода назад у нас отняли autox не простим.
279: Так, а приходилось вообще что-то в базе писать, хранить какие-то, чтобы с этим, с этим работать. Ну, больше года назад писал, активно читал.
280: Хранимых процедур на 4000 строк. Не, это не хочется вспоминать этот experience. Понятно, эйси, можешь расшифровать и, да, как бы, ну, это, это у на
281: Собственно, это то требования, которые должны удовлетворять транзакциям там, типа это что там все операции должны либо примениться, либо не примениться. То есть какого-то промежуточного выполнения быть не должно у нас
282: Все данные должны быть согласованы, то есть там не нарушаться никакие не должно быть нарушений целостности, там, потом изоляция, все операции там должны происходить, ну, не влиять на другие транзакции, конечно же, с
283: Там этих уровней изоляции, транзакций, ну и дурабилити, как бы это то, что успешно применённая транзакция должна записаться в временное хранилище.
284: Приходилось на ревью, например, жена писать нарушение соли, принципа какого-то там определённого были такие примеры я больше я нарушал почти. Я сознательно нарушал все.
285: Все, в принципе солят, причём не просто так.
286: Ну, давай что-нибудь из интересного. Расскажи что-нибудь. Ну, самое интересное, это получается нарушение чего? Интерфейс сегрега, ой, депенденс, верн депенденс inversion в плане того, что, как бы вот мы вот пили.
287: И проблема в том, что нам в домен хочется пробросить какие-то инфраструктурные зависимости, без которых там жить очень больно. Например, собственно, процесс шифрования. То есть, например, у нас там появля, ну, скажем так, особенно вот в опере у нас там было много нюансов.
288: С персональными данными, потому что нам нужно декларировать, кому мы везём там, от кого везём там, то есть там всякие ИНН, там и множество персональных данных. И вот хочется с ними работать в коде, но в чем проблема? Их нужно расшифровывать, шифровывать и
289: При этом хочется все это совместить именно, ну, скажем так, централизовать в модельке собственно доменной модельки, чтобы она сама была ответственна. Вот за то, как она шифруется, шифруется, как оно там формируется по шифрованному представлению и так далее. Но
290: На домен мы не можем вынести шифровальщики, для нас это внешние либы там по шифрованию, поэтому, что вот мы сделали, ну, так-то это на инфраструктуре у нас там отдельный, ну, скажем так, на уровне кейн отдельный шифровальщик, но мы его
291: Записываем в статический синглтон, инициализируем на старте приложения, чтобы таким инициализируем в домене. Таким образом, собственно, это мы нарушаем вершён, потому что мы зависим от конкретного синглтона, так как это протокол безопасности, синглтон в целом
292: Нормально работает и при этом создаёт множество удобств и преимуществ. Это самый, наверное, интересный случай нарушения.
293: Все остальное скорее были как бы костыли, которые нужны были, дабы решать проблемы со сроками. Как-то так.
294: Видео и задачи с реальных собеседований на сайте хак собесов точка ком. Хватит гадать, что вас ждёт на интервью переходите и получите преимущество перед другими кандидатами прямо сейчас, а зависимости Нарой.
295: Как бы это train and it скоуп синглтон. Ну. Угу. Ну, разница между ними, ну, собственно, это они зависят от
296: В случае там как бы стандартного, но они зависят от собственно контекста исполнения, то есть синглтон, он живёт в едином виде в рамках всего, а приложения Скоп живёт в рамках конкретного запроса, а транзат создаётся.
297: При каждом вызове, собственно, синглтоны, ну, крайне полезная штука, особенно если там нужно фоне, там выполнять какую-то background, работу, например, там, обновлять пути там.
298: Обновлять топологии для клиентов, там, не знаю, там обновлять там ключи шифрования, в случае, там, шифровальщиков там, то есть в целом, как в интерпрайзе много где оно используется. Потом, что ещё у нас код, это очень полезно.
299: То, что должно храниться в рамках запроса. То есть если мы там пишем какие-нибудь там кэши, там, не знаю, там обязательная работа с баской, то есть там, чтобы переиспользовать там 1 connection или там тв контекст, ну и tran как бы все остальное, то есть там какие-нибудь бизнесовые сервисы.
300: Компания просто вот, ну.
301: В целом все остальное.
302: Как можно хакнуть? Ну у нас есть, скажем так, правило, что там в синглтонах нельзя более низшие, скажем так, области видимости эти использовать, как можно хакнуть это в синглтоне, как вот
303: Завязать, чтобы это неплохо было.
304: Так, так, так, так, так. А, ну, в случае, ну, у нас получается, проблема только с
305: Ну, мы не хотим, чтобы у нас 1 инстанс какого-то, а класса там или Скопа в этом всем, но не жил, ну, потенциально, как бы, для, о, мы можем создать новый Скоп для Танатов, но можем попробовать это ручками.
306: Для сингтона.
307: Ну, типа через new оператор.
308: Или как ты имеешь ввиду?
309: Получается не, на самом деле можно получить из самого диай контейнера, то есть а scope из него в рамках данного скоупа там получить какой-то скоуп вот этот экземпляр ну и примерно тоже самое то есть можно это конструктора.
310: Сам контейнер.
311: Угу. Допустим, там, ну, ты говорил с базами, допустим, вы там как тогда работали через corp класс с контекстами или как?
312: Так, получается, мы что там?
313: А как же давно я с этим не работал, мы уже давно это все настроили и даже особо не думаем, так что у нас на connection, если у нас не то, но это контекст репозиторий через corp.
314: А с tp клиентами как работаете не работаем уже, а мы не работаем с и клиентами, мы сидим на grpc и особо не задумываемся.
315: Контуре, там была, там были свои клиенты, которые обычно синглтоны, потому что входят в клиентскую балансировку. Все. Поэтому мы обычно не задумываемся об этом, но помню, что tb клиентов
316: Какие-то проблемы, получается их нужно там ехать то ли через фабрику, то ли ещё как-то. Сейчас уже не вспомню. Окей.
317: Что там ещё можно в целом, да? А так, какие-нибудь там фильтры, мидлвары ещё, там, может быть, че-нибудь, валидаторы какие-нибудь там, через атрибуты, ещё что-нибудь такое.
318: А, ну, валидатор, наверное, ну, в валидейшен, как бы, активно юзаем. Ну, это конкретно, кажется, немного не к теме вопроса, но активно юзаем, там валидейшен для моделек, там, secure, для команд.
319: И всяких внешних запросов. Что же ещё по, ну, активно используем в озоне не особо в контуре. Вот активно мы их использовали для этих новых сервисов, для, собственно, это
320: Как раз-таки формирование своего кастомного контекста запроса, там по получению там всяких метрик, там и прочего, и c пользователя, там, собственно, у нас домен был. Что ещё? Фильтры, фильтры, это из этого, из
321: Mvc с хендлерами ручками типа да oh, вспоминаю контур на фреймворк весёлые времена были у нас там был самописный сервис кортам.
322: Своими этими, скажем, мы написали там свой сервис кор с своим там, а обработки, то есть, чтобы можно было там.
323: Написано там это модифицировать.
324: Как-то так. Угу. А так, с какой-нибудь кодогенерации работал? Кодогенерации явно нет. В основном у нас кодогенерация, только формирование этих gpt клиентов.
325: Такое же как бы можно делать и с типичными клиентами, но мы работаем не в контуре, и обычно каждая команда, которая, собственно, создаёт клиента, она, собственно, обязана поддерживать его. То есть все там, все версионирование сама, ну, типа как
326: Должна выпускать его как либу и должна это поддерживать собственную не совместимость там и все прочее и прочее обратную совместимость.
327: О, аспи, не знаю, может у Паши ещё че-нибудь есть ну с аопше работал с кем ещё раз ai options i опшенс, да?
328: Что же это такое? Ну типа, ну, у нас сейчас это сидишки, как бы, ну real time, конфиги в целом, как бы, это, если требуются, ну, какие-то ручки, то options мониторы типа, если требуется какой-то конфиг, который то только рестартом приложение, то
329: Там, типа и options, то есть такого более терминированного поведения, там при перезапуске, там Подов в целом, как бы это не всегда удобно работать, если там требуется на этапе стартапа, как-то там что-то.
330: Тогда там напрямую по путям конфликта.
331: А какой-нибудь, вот если вы рантайм конфигурации используете, это какие-то библиотеки уже там, опенсорс или там свои провайдеры какие-то писали. Ой, я честно, не помню, кстати, не задавался особо вопросом, как бы у нас это
332: Фишка, а что же у нас там, собственно, провайдер конфиг конфигурации то? А, нет, у нас, собственно, используется этот платформа, платформа там создала свой лигу для конфигурирования, там, собственно, со своим терминированным
333: Собственно, применение конфигов, то есть там кто кого оверрайдить, кто приоритетнее. То есть там по общему, они там, вольт, исиди, там и прочее. Ну, собственно, в таком порядке оно и работает.
334: Ну так а валидацию какую-нибудь там конфигов писали, не писали особо нет.
335: Собственно, только мы можем Надежде, ну, только мы их можем править, как бы, мы несём, собственно, сами ответственность с тем, с чем живём. Ну, так, единственная валидация, собственно, это, собственно, типы, которые в коне прописаны.
336: Я в целом не было, пришёл просто так, просто спал, вышел.
337: Ну, пойдём дальше, тогда про рекорды расскажешь. Че-нибудь вспомнил? Нет, чего ещё раз про рекорды, про рекорды. Прикольная штука, собственно.
338: Более удобные классы, которые сразу же поддерживают и проверку, скажем так, поддерживают там свойства эквивалентности и мутабельны, и сразу там хэшсет по всем полям в целом, ну, достаточно
339: Удобная штука в рамках там каких-нибудь временных данных, там, для кейсов и прочего в целом, как бы, ну в рамках там, нашего доменов, там через агрегаты, ну там все ещё так или иначе классно. А вот какое-то вот такое временное представление, там при
340: Например, модельки, там, там, респонс, там, что ещё там на разных этапах прекрасная штука, там для каких портов офигенная штука.
341: С ними чего договаривали, я потом спрошу. Ну так, в целом, как бы, ну, для каких-то таких моделей в целом, ну, скажем так, для таких моделек оно в основном, ну, типа, целому классу подходит, типа, не принципиально.
342: Что ещё, что ещё? А вот для каких-то вот деталей, алгоритмов за счёт вот реализации сразу же из коробки эквивалентности там, ну это офигенные там ключи там, для каких-нибудь, если там требуется какие-то агрегации делать какие-то сложные подсчёты, то очень удоб.
343: Штука там, если не требуется словари и прочее.
344: Ну а так как можем это, ну ладно, говори, да, в большей, ну скажем так, в большинстве случаев, как бы вот большинство моделек они не требуют всех этих приколов, рекордов, поэтому можно обойтись собственно классами так или иначе.
345: Это все ещё сочная структура.
346: А вот с эквивалентностью как раз как быть там, ну, допустим, какие-нибудь массивы, не знаю, внутри лежат ещё что-нибудь, ну то есть ссылочные какие-то типы.
347: Тогда это, ну, обычно используется этот, получается, должен использоваться компоратор, собственно, всех этих всех внутренних, ну, скажем, коробки используется компоратор всех внутренних объектов. Если какой-то сочный тип, если он преопределено, то будет переопределено, если
348: Ну, какая-то там, например, там вот массив, там, лист, ну очевидно, будет равенство по объекту, но обычно, скажем так, использовать, собственно, эквивалентность в типе вот с такими вот листами. Ну, мне обычно не приходилось обычно это просто какой-то там набор там
349: До 10 полей, чтобы там запихнуть как какой-то ключ агрегации, все все остальное в целом можно заменить как бы e класс со стандартным дефолтным, там экваленте по ссылке, там и дефолтным хэш ключом.
350: А структуре где-нибудь использовали у себя?
351: Структуры, структуры, структуры особо не помню.
352: То есть performance вай, как бы их то можно использовать. Но если это все-таки моделирование бизнес домена, то тут у нас все-таки огромные какие-то сущности, которые, ну, надо передавать по ссылке, если же что
353: Контур. Ну там тоже чего-то особо такого не использовалось.
354: Как-то вот крупном продакшн коде, там для каких-нибудь, может быть этих там, я не знаю, для типов просто обёрток над значениями ничего такого не делал, нет.
355: Обычно, если требуется вот какая-то обёртка над агрегацией каких-нибудь некоторых полей, то Сущий домен это какой-нибудь там в object, который мы там моделируем классом, если это какой-то там дошка, там, не знаю, какой-то просто там такой объект, ну
356: Обычно набор полей гораздо больше, типа вот в качестве примитива, ну не знаю, у нас нет, я знаю, конечно, где это можно было бы использовать, но нам просто лени не особо хочется. То есть можно потенциально там какую-нибудь обёртку поверх.
357: Денег не знаю, типа там валюта.
358: И типа, да, собственно, значение можно попробовать такое сделать, но даже так, типа это все ещё оверхед типа, зачем это каждый раз дублировать, если можно это рекордом просто пометить.
359: Ну, то есть проблема в том, что для, чтобы структура была рентабельна, ну, она должна занимать меньше, чем размер ссылки. То есть, сколько там это 32 байта, ну, типа.
360: Что это у нас, типа, ну, 2 Инта.
361: Ну, особо смысла нет. Гораздо больше смысла. Собственно, класс пихать в
362: Это стекло, чем? Не знаю, наверное, использовать структуру, я бы отвечу так.
363: Ну и может быть, так читал, не читал что-нибудь в новых версиях дотнета, какие там вещи с джитом и классами всякими там вот этими, с экологами, какие они?
364: Оптимизация интересовался.
365: Ну временами почитываю но чего-то вот что можно было бы применить в проекте ну пока особо не видел конкретно вот наблюдал за соседней командой, там в целом это поверх там реализовали там собственный этот entity трекинг.
366: Ив кора поверх там этих парша, этих свойств из нового дотнета в целом. Только вот пока что последнее, что вот такое вот видел интересного. А так в целом, ну просто смотрю, как бы, ну да, да, да.
367: В целом, пока там это, ну, скажем так, у нас просто нет какой-то вот явной вот бизнес потребности вот именно тащить новые технологии ради новых технологий там и так далее. То есть пока там нас платформа не заставит обновлять, дотнет, мы особо этим не движемся, ну,
368: Ждём, пока там платформа, это там не создаст, там достаточно стабильные пакеты, которые на которые можно перейти.
369: То есть у нас примерно так все устроено.
370: One использовал, знаешь че использовал ли? Ну не особо нет, на самом деле использовал, но ско.
371: Как эти, как предупреждения, там из последних, из линтеров последнего дотнета, поверх там работы с байтами целом, как бы принцип работы в том, что вместо того, чтобы там копировать какую-то часть подмассива, мы просто храним ссылку на сам массив и идентифика.
372: Которые, собственно, начало конца. И от этого, собственно, строим нашу виртуальную структурку в целом, как бы, ну, принцип такой. Угу. Ну, у меня тоже, в общем то, по теории вопросы закончились. Предлагаю
373: Че-нибудь посмотреть, код какой-нибудь порассуждать на и так я тогда наверное скину сейчас ссылку.
374: Ты че, Карла?
375: Выслал в чат зума ссылку, открываю её и на экран, на свой экран пошаришь. Мы все видели, на записи то было.
376: Видно.
377: Да, да. Так, пришёл код от джуна на ревью. Так, пришёл код от джуна на ревью. Не понимаю, зачем особо скрин. Ну, скажем так, скрин делать, если как бы вы тут тоже присутствуете со мно.
378: Да, да, на запись, чтоб был вопрос, я понял, я понял, я понял. Так, using ну хорошо, необходимо его по и оставить замечание в комментах какой-то сервис cash.
379: Можете other ролл сказать собственно что мы заранее хотим делать какой у нас собственно не, не, не, не. То есть я скину другую задачу, сейчас поправлю та задача вот они называются у нас одинаково но вот эта вот Зада
380: Сейчас, секунду. Так, так вот.
381: Вот вопрос.
382: Хорошо, у нас есть какой-то order processor. Угу. Если я все-таки это делаю на реальной работе, то, наверное, все-таки должен это быть погружён в контекст. Чего мы здесь, что мы здесь все-таки хотим сделать? Можете рассказать, типа, какая вот ценность, собственно, того, что мы делаем.
383: Ну, согласен, да, контекст нужен, как бы, ну, все-таки представим, что вот это у нас вот все есть, домыслим, что оно должно, в принципе, делать. Ну, какой-то процессор, который rt, заказы.
384: Обрабатывает, он отсылает емейлы и файл, чтоб тоже сохраняет, сохраняет заказ. Файл. Вот такая вот задача.
385: Так, собственно, что у нас здесь имеется? Ну, во первых, во первых, во первых, во первых, так, ну с чего бы начать? Во первых, у нас тут есть какая-то и модель ордера кажется, что если вот хочется, ну, с ним вести какую-то
386: Не знаю, кажется вот после опыта интерпрайза кажется, что это все-таки должна быть какая-то rich моделька с каким-то там набором правил, собственно по мутирующим операциям, но судя по всему, у нас в данном коде, собственно нету каких-то вот мутаций поверх ордера.
387: Вот хочется вот открыть несколько другим, потом у нас есть класс order, processor.
388: Конечно же, хочется видеть, чтобы у него был какой-то интерфейс, ну, чтобы вот нормаль, ну, чтобы он реализовывался, где используется через
389: Диай контейнер. Ну, собственно, был нормальный вершён. Потом, что у нас ещё инициализация клиента, но хочется тоже доставать из диай контейнера всеми этими приколами. Потом, что у нас дальше?
390: Void процесс ордерс. Ну сент имел звучит как какая-то операция, которая просто thing Вейт. Ну очевидно что sante это звучит как что-то, что работает.
391: Сетью, но, очевидно, это должно быть асинк метод.
392: А так надо ставить замечания. Да, да. Замечания хорошо ставить, чтоб прям на строчке помечать там пару слов буквально.
393: Ну, сразу же скажу, что вот ордер при какой-то, вот, ну, скажем так, я не знаю, конечно, контекста бизнес проекта, как бы, ну, кажется, вот просто модель order, ну, такое, типа, да, ну, это такая придирка, что вот
394: Твоих мыслей, ты видишь, сразу скажет архитектурно странно, сразу подозрительно выглядит, да? Ну вот хочется именно вот это услышать.
395: Тут, собственно, чтобы было солидно. Типа так.
396: Явный интерфейс собственно взаимодействия, чтобы можно было потом это все адекватно там тестировать и адекватно переиспользовать, не создавая. Потом вот это вот получать.
397: Через диай плюс конструктор в целом можно вынести в эти, из нового дента эти, как его, эти конструкторы классов. Я не особо их люблю, я все-таки.
398: Школы, что должен конструктор отдельная, собственно, набор полей данного класса, потом, что ещё у нас? Ну, процесс, ордер. Очевидно, что тут происходит какая-то работа с сетью, очевидно, типа он должен быть
399: И ещё что хочется видеть, это видеть какой-то результат. То есть, чтобы вызывающий как бы метод понимал, как бы, что вообще произошло. То есть там произошла ошибка, типа, при этом это был бы какой-нибудь, какая-нибудь моделька ответа, чтобы та
400: Мне приходилось там обрабатывать это через исключение и пытаться там вот это все делать хорошо. Потом у нас что ещё дальше идёт, у нас идёт ну, по моему всем этим мы синхронно отправляем.
401: Ну вот это точно надо пометить в
402: Это точно в Таску сейф, ордер, ту файл и через тримайте. Это у нас какая-то синхронная работа с какой-то файловой системой. Мы точно хотим.
403: На проекте не име, ну, скажем так, хранить файлы вместе, там, на каком-нибудь поде, собственно, вот этого сервиса.
404: Тут чисто твой поток мыслей, по сути, ты должен написать, как вот ты чувствуешь. Надо было бы этот код написать. Ну, я бы точно бы хотел бы вынести это в какую-нибудь файловую хранилку с 3 совместимую. Ну, архитек.
405: Как, то есть не развернуть потом, что ещё смущает, как бы, нет, на самом деле, вот хранить файлы вместе с, на самом подде, как бы, ну, технически можно, если это какой-нибудь
406: Как бы там какой-нибудь, там, не знаю, претерминированный как бы, кэш, который там обновляется, условно говоря, там раз в полгода по запросу, там от бизнеса. Ну типа, кажется, что в целом допустимо, если это экономит разработку, но здесь как бы кто-то должен это писать, и кто-то должен вызывать вот эту запис.
407: Ну, звучит такое себе, поэтому все-таки так как у нас приходят какие-то внешние запросы, у нас есть внешние запросы.
408: Кто у нас, собственно, инициализирует эту обработку заказов?
409: Я почему-то не слышу.
410: Алло. Алло.
411: Сейчас че то не слышно тебя сейчас я слышу. Да, да, да. Вот только появился.
412: Так видимо роскомнадзор все протоколы планит.
413: Так, так, у меня, собственно, был вопрос, а кто, собственно, инициализирует вот это вот запрос заказов, ну, очевидно, какой-то внешний сервис, да, да, какой-то внешний сервис. Вот. Ну, значит, тут, как бы, это хотелось бы все-таки, вот, все вот это вот хранить в каком-нибудь персистент.
414: Хранилище.
415: Потом сендмейл, но у нас тут формируется какая то какой-то side ворк по сендмейлу, потом что меня ещё смущает? Вот у нас какой-то метод.
416: Вот вызывает, собственно, процесс ордера, но
417: Хочется понимать, собственно, вот импотентность вот этих операций, то есть, кажется, что вот отправить какой-то емейл, ну как бы, во первых, не заспамить, собственно, получателя. Очевидно, что, во вторых, ну как бы тут не насохранять дублей.
418: Кстати, мы дубли не сохраним.
419: Потому что у нас фактически здесь сразу же вижу, у нас все хранится по 1 ключу, даже вот в рамках вот файловой системы, там конкретного кода тут
420: Продумать, собственно, нейминг собственно, этих файлов.
421: Ну и other архитектурно все-таки хочется как бы видеть потентность всех вот этих вот операций и, собственно, сохранять, скажем так, факт сохранения не просто в каком-то вот песенном, там 3 хранилище, не знаю.
422: Хочется все-таки видеть вот эти вот заказы, чтобы они хранились тоже в какой-то персистентной хранилке, как бы и имели как бы тоже свой статус. Вот, собственно, вот обработки вот этого процессинга.
423: Поэтому архитектурно, что хочется видеть.
424: Так.
425: Алло, да, да, слышно, просто все замолчали, как бы, мне просто кажется, что это, что я вот что-то говорю, как бы, а у нас опять пропала связь, так и было, а так и было. Ну, ты ж тоже, ты же молчала.
426: Ну, нет, ну если вот вы смотрите через стрим, который я вот веду, то, наверное, вы видите, что, а, наверное, у меня тогда залагала бы вебка. Так, собственно, что хочется. Вот хочется видеть, чтобы заказ хранился в базе данных плюс.
427: Все-таки у нас был бы какой-то статус процессинга, то есть можно либо через какой-нибудь таймстемп, ну, таймстемп обработки, собственно, вот этого заказа, либо же, возможно, какая-нибудь статусная модель, там через стринги, либо там более продвинутые там через еннам в базе данных.
428: Потом, собственно, рич моделька, потом явный интерфейс проставлять, потом, что меня здесь ещё смущает. У нас, собственно, тут ходят в
429: В отдельные ручки для поста вот этих вот сообщений. Не буду придираться к тому, собственно, что представляет собой сама апишка, что хочется все-таки видеть.
430: Так 1 отправлять бачами.
431: С hack собесов точка, ком, ичар полюбит вас тайком.
432: И 3, 3, 3.
433: Сохранять. Собственно, это
434: Нет, ладно, тут не важен порядок. Важен, собственно, набор критериев. Как, собственно, кажется, эта логика должна работать. То есть
435: Имейл надо, очевидно, после того, как, собственно, произошёл процессинг.
436: Так.
437: И 4, 4, 4 сохранять, собственно, по окончанию обработки. Пока, наверное, можно плюс сохранять статус обработки.
438: И в конце Концов, в идеале хочется видеть здесь полноценный фо.
439: Так что же ещё, что же ещё в целом, в целом, в целом? Алло, меня слышно? Да, слышно, слышно. Мы вот так просто вот это вот делаем у нас конкретно, мы активно используем for
440: И как бы это вот выглядело бы у нас, у нас, собственно, есть отдельная модель заказа. Собственно, если бы мы поставили бы
441: Собственно, статус обработки, то есть через отдельный метод, через вич модельку мы бы также сохранили бы в рамках модели заказа набор доменных событий. В данном случае конкретно интеграционное событие, его бы потенциально бы отправили бы, что нужно.
442: В рамках коммита. Вот, собственно, вот этого агрегатора отправить его в, скажем, сформировать событие в кафке.
443: Как-то так.
444: Ну хорошо, ты пошёл на верхнюю архитектуру и все поправил, если вниз все таки какие-то элементарные ошибки.
445: Быстренько ещё посмотреть, например, вот это 27 строка не смущает тебя, паблик войд, лист, ордер. Я вот что скажу. Так. Листы, листы, листы, листы.
446: Это, это, это имеет на сам это имеет на самом деле смысл потому что при работе, хотя нет, на самом деле, а нет, это на самом деле имеет смысл, потому что у нас здесь идёт фаррыч, а у листа, собственно,
447: А нумератор это, точнее нумератор, его это структура. И типа это перфоманс Вайс как бы имеет смысл. То есть я могу быть здесь адвокатом дьявола.
448: Но как бы, да, во первых, хочется видеть иммутабельные структуры вот на рамках
449: Каких-то методов при передаче
450: Собственно, на входе, выходе, потом таск, резалт, потом какая ещё здесь есть очевидная проблем.
451: То, что он не сказал, то что вот у нас отправка сообщений и сохранение ордер, файл, ну это очевидно, тоже не солидно.
452: Опять же, вопрос архитектуры это, собственно, это single responsibility, принцип interface сегрега. Че у нас там ещё?
453: Просто помечу.
454: Так, потом какие ещё тут есть проблемы? Ордер, ордер нормально. И фордер, кастомер. Н, ну это какая-то непонятная проверка. Давайте все-таки.
455: Custom емейл.
456: Создадим какую-нибудь внятную структуру, у которой мы бы могли бы проверять, что она валидна. То есть это либо, ну не знаю, на какой-то небольшой сервис, как бы с операциями. Вот, вот единственная адекватная часть его, это вот этот процессор, то
457: Можно подумать в сторону, но либо же какую-то полноценную модель.
458: С с вариантами.
459: С контроль целостностью инвариантов или же там вот собственно это пустого емейла и прочее. То есть тут можно подумать потом сент емейл ну очевидно если это будет таск, то task wait ну нет.
460: На самом деле, я вот не хочу вот это комментировать, потому что тут архитектурно большая проблема. Я бы вот такой код не хотел бы видеть и даже комментировать. Ну, понятно потом, что мне кажется, проверки на ошибки не хватает.
461: Все свалится сразу все вылетит и и да, да, проверки на ошибку и вот желательно когда вот мы вот вынесем вот это все в отдельные методы у нас все-таки мы бы избега
462: Бы рантайм ошибок, то есть вынести в сервис
463: С конкретными резалтами.
464: Я бы все-таки это хотел бы видеть вот так, потом что ещё order id, int, ну тут опять-таки у нас отсутствует контроль целостности, как бы, рич, модель, как бы, ну все.
465: Контрольных вариантов.
466: Так, Вячеслав, направление мысли твои, понятно. Предлагаю дальше двинуться со всей этой историей. Задачки. Есть. Хочется её успеть тоже порешать. Ну, давайте. Угу.
467: Вот тоже небольшой кусок кода. Читай, рассуждай. Хотим отдельно запустить получение большого числа. Это долгая операция легаси. Интерфейс с методом, возвращающим таск дабл окей.
468: Но мы уверены, что реализация будет синхронная, реализацию пар менять нельзя, пока непонятно. Ну ладно, пока выполняется 1 операция, хотим получить некоторый коэффициент сбд, возвращаем результат произведения, числа и коэффициента. Как вам?
469: Реализации какие подводные камни? То есть ещё 1 кодревью или все-таки мы что-то пишем да, тут надо ответить на вопрос, сколько времени будет выполняться вот этот текущей реализации айпар.
470: Big number сразу, что меня очень пугает это дабл.
471: Редко когда его встретишь, собственно, в нормальной разработке, ну, точнее, как в интерпрайзе, потому что double очень опасный, как раз-таки из за, собственно, этого формата, её там, 754, вернее, там, какой-то расширенной версии на, или, или
472: Напрямую, там этот, в том же самом этом 554 это определяется, не помню в чем, собственно, проблема это то, что у нас это в зависимости от порядка величин. У нас тут разная точность.
473: И то, что это дабл, но очень опасно кажется, что при вычислениях, ну, хотелось бы это все-таки в the переводить, несмотря на то, что мы получаем дабл, так потом, ну, бар мы менять не можем, но какие так?
474: Реализацию бар менять нельзя. А можем ли мы её ревьюить? В таком случае давай начнём ревью. Можем. Конечно, она у нас тут есть. Давай ответим на вопрос, сколько будет выполняться времени, сколько будет выполнять.
475: Get big number ну, git биг намбер и метод сам, сам, сам метод под названием метод.
476: Сколько будет выполняться метод. Так, ну давайте посмотрим. Бар. У нас то сумма, которая, ну, че то счита, а так, 3 секунды оно будет считать, да? А, 3 секунды это.
477: Calculate. Вот именно или да, вот этот цикл весь занимает, да, весь цикл. 3 секунды.
478: Так, таск, Фром, резалт. Ну, очевидно, здесь будет 3 секунды. Весь цикл. Какие накладные расходы я сказать не смогу. Ну, потому что, ну, мы их не считаем. Плюс минус там, микросекунды.
479: Тут у нас 2 секунды, потом авейт, гет намбер таск. А, ну это синхронно будет. А нет, погоди.
480: А так так, from резалт получается у нас в начале выполнится.
481: Это погоди.
482: А, нет, это у нас реализация, таск про result, поэтому у нас просто выполнится так. То есть у нас здесь произойдёт 3 секунды, собственно, все вычисления. Потом у нас Вейт, ну ничего, ну и потом вычисление, но будет 5 секунд выполняться, у нас все выполняется. Угу.
483: Так, да, все правильно. Ну давай сейчас уже сделаем, чтобы он побыстрее выполнялся, чтобы он побыстрее выполнялся. Ну, у нас тут есть 2 различные задачи. Это, собственно, вычисление какого-то числа, неважно.
484: Как мы его берём и получение какого-то 2 коэффициента, очевидно, что ну их можно просто распараллелить, как бы в данном случае у нас конечное количество операций, поэтому у task we know тут решит наши все задачи, единственное, что будет немного боль.
485: Работать с исключениями вот в эту сторону надо подумать.
486: Ну как-то так. Ну тут давай напишем, есть ещё время. Ну давайте так, а какая у них сигнатура? Погоди-ка, мы реализацию барра, меня.
487: Не можем да, надо что написать, так он у нас возвращает дабл, а это тоже возвращает double. То есть интерфейс, они одинаковые, поэтому можем не раздумывая создать, но нам нужно отложить собственно вот это создание
488: Поэтому кажется, что нам нужно проинициализируй, так как мы не можем его менять, то нам нужно создать, я, к сожалению, без ip не смогу да, света все уже так не могут, пиши.
489: Это типа что-то task when оо и получается что у нас блин, я не помню.
490: Натуру ещё, кстати, не хватает конслейшен токенов. Ну ладно, опустим этот момент, да так или нет?
491: Получается, что не помню, какая там сигнатура унов, но получается, что нам нужно, нам нужно это.
492: Task. Ну, то есть нам нужно запусти, ну так как мы знаем, что вот барра, вот какая-то плохая реализация, которая. Угу. Ну, очевидно, нам нужно его, собственно, запустить отдельно. Угу. Аля, там
493: Угу. Ага, ага, ага. Ага. Блин. А я, кстати, не помню, можно ли, собственно, передать сюда сикля дду?
494: Можно, а тогда красиво тогда вот так вот делаем.
495: Потом говорит.
496: Коэффициент фронт, дипи это мы все авейтим.
497: Тогда нам вот это вот не надо, вернее, как вот это нам не надо, это нам не надо, это нам не надо тогда вот здесь мы получаем, получается, 2.
498: А, ну и это.
499: Нумбер, это у нас.
500: Вот так. War коэффициент у нас это тоже самое.
501: Ну, что-то примерно такое. Да, все правильно. Дима, че у тебя есть топ вопросы? Да нет. Так, ну все, тогда можно остановить трансляцию. Сейчас ещё.
502: Пару таких общих вопросов.
503: Видео трансляцию-ка так, сейчас.
504: Top посередине экрана красная кнопка.
505: Угу. Так, в работе пользуешься? Не видно сейчас тебя, да? Ну, б, я понял, я понял. У меня камера.
506: Ох, а я понял, в чем проблема. У меня камера умерла. Ну ладно, уже не суть в работе пользуешься. Как ты вообще к этому относишься? Ну, активно пользуюсь, конкретно в озоне у нас запрещены всякие курсоры и прочие.
507: Разрешена только партийно разрешённые, купленные там дипси, квн и прочие китайские нейросети. Оо, так, то есть внутри они внутри развёрнуты, да, внутри. Ну вот насчёт этого, кстати, я не уверен, они либо
508: Озон это у нас внутри, либо все-таки там это по каким-то договорам мы ходим во внешние. Интересно, ну скажем так, я не занимаюсь разработкой внутри озона, как бы озон это крупная корпорация после случая с аэрофлотом там настали
509: Тёмные времена. И меня как разработчика многие доступы порезали к информации. Так хорошо про хобби какие-то свои скажешь, чем ты занимаешься вне рабочего времени.
510: Рассказал про в, как бы, ну, давай проще. Ну, что, как бы, штука крайне полезная, к сожалению, описывать наш п, вот именно такой способ, там без курсора достаточно больно. То есть, там
511: Расписывать явно там доменные модели, то приходится ручками делать, а так, в целом, ну, решать какие-то узкие технические задачи. Прям, ну, загляденье, то есть, там стартап, ну, там, типа, пилил у нас сервис отчёт.
512: Когда мы там уходили, там через генерацию, там отчётов, там, как приёма передачи, там и агентского вознаграждения, там через срс, собственно, это работа с файлами, там всякие пайплайны, блин, легко.
513: Справляются, конечно, все ещё тупят. То есть там нужно поглядывать, самому дебажить, но штука крайне полезная. Ещё когда в контуре работал, также активно использовал. То есть там ссдишку там на ноги, а переводил при помощи тоже.
514: Сеток в целом офигенная штука. Ну а потом касательно хобби. Ну не знаю, я разносторонний человек, сам увлекаюсь лмками с друзьями, мы там всякие сами там дообучаем, модельки самые.
515: Всего, че мы там делали, это, это иконки в стиле варкрафта. 3 генерировали, дообучал, вору поверхностей дифьюжн 1 и 5 там генератор драматургии писали.
516: В целом, че там ещё? А так по увлечениям? Ну, не знаю, типа, всякое разное, в основном с друзьями тусуюсь, гуляю, люблю путешествовать, особенно по уральским дебрям, походу.
517: Ходишь место куда-то там на гору с 2 ночёвками. Ну нет, ещё пока планирую, пока собираю как бы команду, но пока ещё этим не занимался.
518: Ясно. Ну, у меня все, наверное, коллеги, Дима.
519: Я тогда, Вячеслав, тебя ещё украду буквально на несколько минут. Есть ли у тебя возможность или у тебя, может быть, дальше что-то по расписанию стоит? Возможность ещё есть.
520: Замечательно. Тогда мы, ребят отпустим, я ещё с тобой обсужу момент. Угу.
521: Спасибо вам большое. Да, Вячеслав, спасибо. Приятно было пообщаться. Мне тоже приятно было.
522: Постараюсь быстро пробежаться, начну опять же с вопроса поделись, пожалуйста, впечатлениями как тебе вообще ощущения самой встречи от ребят, от каких-то задач? Может быть, насколько было бы интересно рассматривать нас в дальнейшем как работодателя?
523: Ну, в целом, интересно, как бы, ну, вот, на, ну, не знаю, показались очень приятными людьми. В целом. Ну, мне очень понравилось, было весело вот, общаться, к сожалению, сейчас вот начались технические проблемы. То есть, у меня камера села конкретно, у меня камера, это
524: Подключённый телефон, и он успел разрядиться. Угу. К сожалению. То есть там через com студию. Угу. Брасывается камера. Так, потом ещё, ну, сейчас, да, были проблемы со связью, какие-то. Роскомнадзор, видимо, да, блочит, но так, в c.
525: Ну, понравилось, конечно, хотелось бы все-таки послушать поподробнее. Вот именно про проект, на который я, собственно, вот, на который, собственно, собеседуюсь. К сожалению, очень это разгорелись, собственно, обсуждением технички. Угу.
526: Так, ну про проект я тебе, конечно, рассказать сейчас не смогу, поэтому пойдём тогда дальше. Рада слышать. Ну, обратную связь, что целом комфортно и тебе интересно дальше с нами продолжать коммуникацию. Пойдём дальше.
527: По обратной связи я обычно обратную связь беру, 5 рабочих дней беру для того, чтобы была возможность принять решение, согласовать и так далее. Если у меня появляется информация раньше, я, конечно же, возвращаюсь к ней раньше. Скажи, пожалуйста, по срокам тебя устраивает или, может,
528: Там, не знаю, есть какой-нибудь и когда нужно дать до этого времени ответ или ещё что-то, повторите ещё раз. Сроки 5 рабочих дней. Ну что у нас сегодня среда, да, до среды, грубо говоря, до среды, среду.
529: До следующей среды. Ну, не знаю, хотелось бы все-таки побыстрее, а то у меня уже есть, есть какие-то определённые, есть какие-то определённые сроки, когда надо успеть. Ну, я бы хотел бы все-таки до конца недели.
530: До конца недели я себе зафиксирую, постараюсь получить информацию до конца недели, да? Ну или хотя бы какой-то промежуточный ответ.
531: Угу, хорошо. А говоришь, уже есть несколько ответно у тебя на руках. Ну да.
532: Угу. Скажи, пожалуйста, у тебя не поменялись ли зарплатные ожидания с нашей последней беседы? На какой уровень ты сейчас ориентируешься вообще? На какие может быть, на какие суммы уже?
533: Есть, может быть, ещё что-то скажешь по этому поводу? Так, у меня уже есть офферы на 350, на 320. Угу. Это комфортный для тебя уровень. Ну да. Угу.
534: Через сейчас вот ещё будут собесы.
535: Угу, тоже отлично. Ну, тогда давай проговорим немного по трудоустройству, если правильно помню, если не ошибаюсь.
536: Ну, я из Екатеринбурга, в Москве я проживал в целом, как бы, ну, и там тоже искал работу. Ну, а так, в целом, как бы, ну, я много путешествую. То есть, вот у нас, например, в озоне распределённая команда, основной Костяк команды.
537: Находится в петербурге. Типа, ну, я туда спокойно летаю, там, работаю, в целом комфортно. Угу. На, там, в Москве, там, ну,
538: Мне вот в целом там комфортно, но, но все-таки моё место обитания это Екатеринбург.
539: Угу. Поэтому меня отчасти очень заинтересовала, собственно, вот работа с вами и работа в вашей команде.
540: Да, по Екатеринбургу, получается. В Екатеринбурге у нас есть офис. Паша, кстати, как раз работает в Екатеринбурге из офиса. Дима у нас из Челябинска, но не суть важно. Основная часть команды распределённая. Кто-то работает там, в Питере.
541: Кто-то вот из Екатеринбурга несколько человек есть из Кургана. Ребята, ну в общем, команда прям распределён, поэтому тут не критично, не принципиально, но, соответственно, если ты находишься в городе,
542: То мы, ну, Паша тоже уже упоминал, мы очень рады, когда ребята ходят, пусть не постоянно, не на постоянной основе, на периодической какой-то, но здорово, если знают, в лицо друг друга, грубо говоря.
543: Более что руководитель, в принципе, в этом же городе находится. Это то, что касается офиса, при этом возможен битый формат работы. Тут никто ничего не запрещает, но я по поводу оборудования, я бы все-таки
544: Хотя бы официально на удалёнку.
545: У нас сейчас официально полностью трудоустраивают в городе. Если в городе есть офис, мы полностью устраиваем на офисный формат работы. Есть определённые там у компании ограничения, поэтому они именно таким способом
546: Работает, но все дополнительно согласовывается без проблем. Ну хорошо, вы там что-то говорили про технику.
547: По технике оборудование мы предоставляем, предоставляем. Просто для нас не критично. Если сотрудник работает на своём оборудовании, есть такое желание, пожалуйста, есть такие люди, которые, для которых это принципиально необходимо оборудование.
548: Мы также предоставляем, что ещё из важного, наверное, да, трудоустройство, полностью официальное трудоустройство, по тк. Соответственно, все там больничные, отпускные и прочее. Это все официально, стандартно.
549: По трудовому кодексу все эти выплаты, отчисления заработной платы на различные службы, такие как налоговая и так далее, пенсионный фонд и прочее это все.
550: В рамках законодательства заработная плата 2 раза в месяц на карту. Тут тоже проблем не возникает. Что ещё из интересного рассказать? Ну, ДМС есть ДМС, у нас подключается в городе присутствие, то есть
551: Допустим, проживаешь в Екатеринбурге, включая на Екатеринбург. Ну, там ещё несколько городов входит, но не входят, конечно, все города, поэтому в основном город.
552: ДМС есть возможность подключить конкретно поликлиническую помощь либо поликлиника плюс стоматологии.
553: Госпитализация, вызов врача на дом, к сожалению, пока у нас нет.
554: Да, наверное, все, все общее рассказала. Если есть какие-то вопросы, что-то забыла, упустила. Задавай, пожалуйста.
555: Да вроде бы все понятно.
556: Замечательно. Тогда отпускаю тебя. Рада была познакомиться, и по обратной связи мы уже договорились.
557: Ну, хорошо. Угу. Давай. Счастливо. Хорошего тебе дня. Вам тоже хорошего дня. Пока.