ym104432846
Вставьте ссылку на видео из Youtube, Rutube, VK видео
Задайте вопрос по видео
Что вас интересует?
00:00:10
Проблемы трансляции ссылок и влияние на производительность:
  • Трансляция ссылки в Escuel ведет к материализации всей таблицы в оперативной памяти
  • При небольших объемах данных (например, 100 Мб) падение производительности незначительно
  • При больших объемах данных (например, 100 Гб) наблюдается значительное снижение производительности
00:02:47
Способы оптимизации запросов и использования индексов:
  • Оптимизация запросов включает анализ данных и таблиц, проверку наличия ненужных джойнов
  • Использование плана выполнения запросов помогает выявить причины замедления
  • Индексы играют важную роль в ускорении запросов, особенно B-tree индексы
  • Покрывающие индексы позволяют избежать обращения к таблице, храня данные в индексе
  • Порядок полей в составных индексах важен для эффективного поиска
00:07:55
Принципы SOLID и Dependency Inversion Principle (DIP):
  • DIP предполагает, что высокоуровневые модули не должны зависеть от низкоуровневых модулей, а оба должны зависеть от абстракций
  • Абстракции реализуются через интерфейсы, позволяя легко менять реализации
  • Интерфейсы и реализации следует размещать в разных проектах для соблюдения независимости
00:14:43
Асинхронное и многопоточное программирование:
  • Асинхронность позволяет избежать блокировки потока при выполнении I/O операций
  • Thread pool управляет созданием и уничтожением потоков, снижая нагрузку
  • Ключевые слова async и await используются для написания асинхронного кода
  • IO-bound операции передают управление внешним системам, освобождая текущий поток
  • CPU-bound операции требуют отдельного подхода при использовании асинхронности
00:29:45
Отличие классов и структур в C#:
  • Классы являются ссылочными типами, структуры – значимыми типами
  • Структуры не могут быть null по умолчанию, классы могут
  • Поля доступны в классах, но недоступны в структурах
  • Модификаторы доступа различаются: в интерфейсах доступен только public, в классах возможны различные уровни доступа
00:31:47
Процесс разработки и жизненный цикл продукта:
  • Команда состоит из аналитиков, разработчиков, тестировщиков и автотестера
  • Специализация разработчиков варьируется, но существует стремление к универсальности
  • Используются JIRA для управления задачами и Confluence для документирования
  • Процесс разработки включает постановку задачи, оценку, реализацию, тестирование, ревью и выпуск релиза
00:00:00
Архитектура и взаимодействие с провайдерами:
  • Эксклюзивный партнер по работе с железнодорожными билетами
  • Интеграции с различными провайдерами для продажи билетов
  • Минимизация запросов к провайдерам путем внутреннего формирования данных и кэшированием
00:00:00
Микросервисная архитектура и ее преимущества:
  • Постепенное выделение микросервисов из монолита
  • Преимущества микросервисов включают масштабируемость и независимую разработку
  • Недостатки связаны с увеличением накладных расходов и сложностью поддержки
00:00:00
Формат работы и технические предпочтения:
  • Гибкий формат работы, возможность удаленной работы и посещения офиса
  • Предпочтения в операционной системе и редакторе кода
  • Проблемы с использованием лицензионного редактора кода в России
0: Не может транслировать ваш линк в эскьюэль и делает материализацию, вытаскивает всю табличку в оперативную память и дальше уже.
1: Выполняет в оперативной памяти соответствующие действия. К сожалению, это сказывается очень болезненно на производительности. Ну, когда табличка весит 100 мегабайт, нет, не сказывается. А когда 100 гигабайт, это уже
2: Немножко отличается ситуация.
3: Ещё че помню. Это про split, когда, чтобы 2 инклуда, когда подряд идут, короче, там есть такое команда, там че то из сплит квери, че то такое. Вот, и
4: Ну, мы вместо 1 запроса большого делаем 2 маленьких, более мелких делаем, да, это тоже вот тоже вспомнил. И, а, ну, ещё там есть виды загрузки. Жадная, ленивая, ну, в основном жадная пользуются, потому что, ну, ленивая, я редко видел сам.
5: На её че то писал то, что, ну то, что оно вообще есть, все всегда пользуются жадные, да, в основном все жадные пользуются, потому что, ну, все сразу выгрузил и работаешь с этими данными. Но есть ещё явно, ну да, потому что можно наткнуться, можно наткнуться на
6: Очень неприятный спецэффект, да, когда ты подгрузил, у тебя вроде ссылка есть, а данных нет. Если ты по ней перейдёшь в коде, получишь эксепшн.
7: Ну или как ещё было то, что с явной загрузкой, когда очень много, все через цикл вообще было. Это я не помню, где было, но че то такое, ну да, в цане, там, че то, то ли рефакторинг, когда был, там через явную загрузку делали и
8: Короче, там много запросов было непонятно зачем, когда можно просто include, вызвать в начале и все. Ну, в самом методе, там вот это вот было такая вот история. Окей. Так, чуть чуть перейдём к базам данных. Вот вы
9: Рассказывали про оптимизацию запросов давайте начнём а какие базы данных вы использовали ну по postgres ещё у меня в колледже был Випф и работа с mc c mc сервер сикьюр какой-то ну.
10: Который майкрософтовский. Вот, но основная работа была с, соответственно, да, окей. Вы говорили, что приходилось оптимизировать запросы, как вы это делали. То есть то, что для этого
11: Вы применяли? Ну, 1 так.
12: С чего начать? Вот если мы говорим какой-то запрос тормозящий? Ну да, я понимаю, я понимаю, да, о чем вы говорите. 1, что опять же про экор мы забыли. То есть идёт речь конкретно про базу данных, про, по, да, так екор тоже.
13: Составляет какой-то запрос в базу данных. Ну да, я понимаю, я просто именно хочу как-то определиться, что с чего мы начинаем. Ну вот у вас из екора вы достали запрос, который строится Эскель. И вот дальше надо
14: Почему тормозит?
15: Так, ну.
16: 1, ну, понятно, что индексы, но я бы сначала начал с того, что у нас есть, какие у нас данные вообще есть, что, с какими данными мы работаем, куда идёт запрос, в какую таблицу. То есть нужно сначала понять, что за данные, что за таблица, да.
17: После этого уже работать именно конкретно с запросом что там есть? Не есть джоины? Что с этими джоинами? Есть ли ненужные джоины? Также, если у нас есть индексы, проиндексированные поля, покрывающие, не покрываю.
18: Как работает индекс правильно, он работает неправильно, опять же работа с планировщиком когда мы смотрим индекс скан это не index only скан либо это просто cq скан, либо это параллельная просто cq скан.
19: Со стороны заходите, то есть вы использовали план выполнения запросов, да? Ну конечно. Вот хорошо. Вот. Окей, вы про индексы сказали, а индексы
20: Какие бывают индексы? Давайте для начала. Так, ну, с чего начать? Ну, b3. Ну, если так, типа, основной база именно там ещё есть гин индекс, ещё какие-то там с геолокацией. Ну, это уже прям специфика.
21: Нам b3 достаточно. Ну да, в основном, b3, как раз-таки я с него и начал, потому что, ну, в плане того, что какой индекс основной, да, если мы в плане, там кластеризованный, не кластеризованный, но в рамках постгреса у нас как бы, данные, они, как бы, как сказать, они перемешаны.
22: Навсегда, то есть неупорядочены. Вот. И только у нас кластеризованный, это получается, этот ключ есть, а все остальные, они как бы сами по себе не кластеризованы, да, какие ещё есть, есть ещее, составной индекс? Ну то есть мы как это
23: Ну, короче, у нас 2 поля, 3 поля индексированным. И плюс инклуд. Можно это покрывающим его сделать, чтобы, ну, не заглядывать в саму таблицу, а чтобы данные хранились в самом индексе. Вот, че то ещё. Ну, мож.
24: Ещё че то сказать, наверное, не, ну, про составные индексы, про индексы, по составные, по нескольким полям, да, и, ну,
25: Влияет ли как-то порядок полей в индексе на то, как он будет применяться или нет. И если влияет, то как, да, влияет? Ну, в плане того, что у нас, во первых, есть 1, ну, 1 поле, оно как бы главное, если так можно выразиться. То есть
26: Мы можем, либо вот, допустим, у нас составной индекс из 2 полей, соответственно, мы можем либо как бы искать по индексу онли скан получается, либо только по 1 полю, по 1, либо по 2 сразу, а по
27: 2 мы не можем так делать. Вот это то, что про основной индекс я знаю. А если он побольше, допустим, по 3 полям, ну по 3 такая же система, просто у нас добавляется 3 поле, то есть либо по всем 3
28: Полям, либо по 1, по моему. Так, хотя, может я ошибаюсь. Кстати. Ну нет, он может и по 1, по 1, 2, и по 1, 2, 3, да. Так, а чем это обусловлено?
29: Просто сразу, чем это может быть обусловлено, если вы сразу говорили, из чего индекса, что представляет из себя, ну, представляет про b3 идёт то, что, как сбалансированное дерево или что имеется ввиду, правильно?
30: Это дерево, да. А в дереве оно по 1 вниз спускается, поэтому нарушить порядок нельзя. То есть после 1 следующий, 2, после 2 3. Поэтому я понял. Да. 1, 1, 2, 1, 2, 3. Можно искать.
31: Поэтому оно только так и может работать. То есть поиск по 2 элементу не работает, по 3 не работает, по 2, 3 не работает. А вот
32: Окей, хорошо.
33: Так, так, так. Ну, в принципе, по базам.
34: Наверное.
35: Ну, вы со всякими хемминга и с вот этими штуками тоже сталкивались наверняка. Ну, конечно, да. Ну, правда, их в эскьюэль не так просто. Ну, энтити их не так просто использовать. Да, да, да. Окей, хорошо. Так.
36: Давайте ещё, ну, чуть переключимся на сиша, на сам, да, давайте просоли про буковку д так, солит буква д, это самый, ну, лично.
37: С моей точки зрения, это самый, наверное, важный принцип, но вообще, по сути, это говорится про абстракцию депендеси, inversion, да, то есть, когда 1, как это, я уже не помню определение. Ну, короче, суть в том, что у нас
38: Верхнеуровневый, как это верхнеуровневый слой приложения не должен зависеть от нижнее уровневого или наоборот ну, в общем, главная суть в том-то, что мы работаем не с конкретной имплементацией, а именно с абстракцией.
39: В виде интерфейсов. Вот, допустим, так вот, 1 из реализаций, это депен, инжекшен наш, да, ведь, да, депен инжекшен, внедрение зависимостей. Че там ещё можно сказать, там ещё есть.
40: Другое. Блин, ну давайте чуть чуть раз вы сказали про диай, про неё чуть чуть, про депенденси инжекшен именно, да, пользовались ли и каким?
41: Ну, майкрософтовским, там ещё есть автофак, по моему, да, автофак, ммм, пользовался, там все вообще завязано. Ну, что такое вообще? Это понятно, что, опять же, мы работаем с абстракциями, все такое, стараемся работать с
42: Фейсами, а не с объектами, даже когда их там внедряем, в зависимости все. Так. Ну, буква д, да, вообще, это вроде как не рефлексия, по моему, рефлексия.
43: То есть это когда наша программа смотрит сама на себя и, соответственно, вот так вот она, ну, внутри, под коробкой, она так работает, что он сам там ищет вот эти объекты, если у нас есть какой-то объект, который
44: У которого есть зависимость. Соответственно, он смотрит, а есть ли у этого объекта зависимости и так проходится. И каждый создаёт, чтобы мы это не делали вручную. Вообще. Ещё есть у меня друг, который на юнити работает. И они там очень часто все вручную делают, просто потому, что на производительность это очень сильно влияет.
45: Но для веба это вообще не критично. Вот. Угу. Это так просто. Я туда, сюда говорю, хорошо. Так и чуть чуть про д буковку ещё.
46: Немножко. Вот смотрите, вот у вас есть вебовский проект, например, и у вас есть клиент, который подключается, ну там, к какой-то другой системе.
47: Отдельный. Вот, и вы сделали интерфейс. Ну то есть у вас, собственно говоря, есть класс, который реализует, есть интерфейс, а вот где вы это размещали, то есть интерфейс, реализацию и
48: И, собственно говоря, само использование в 1 проекте, в разных проектах. И почему вы бы делали вот так?
49: Так, ну тут, наверное, может быть, идёт речь про чистую архитектуру, что мы все стараемся своить, ну, своить, или, как так выразиться, более правильным образом, что ли?
50: Ну, то, что вот у нас было в проекте, это по моему,
51: Там был дал домейн, че там ещё application, ну, презентейшен, типа, ну, там не презентейшен, это совсем просто контроллеры были, по сути, давайте чуть чуть, чтобы вот мы создали проектик 1, в котором дайка.
52: Все регистрироват, да, вот есть у вас другой проектик, в котором лежит интерфейс и реализация.
53: Так, так, да. Ну, то есть в 1, в 1 проекте будет лежать интерфейс реализации, допустим, ну, я не знаю, в 1 папочке, в разных папках. Угу.
54: Или не так это будет?
55: Ну да, у нас интерфейсы лежат в 1 Папке.
56: А реализация в другой, потому что мы самая главная суть абстракции в том-то, что мы можем подменить 1 имплементацию на другую.
57: Ну, это вроде самое важное, что у нас есть вот это как раз-таки гибкость, которая, ну, тут как раз нарушается, ка признак вот эта буковка д. Объясню почему, почему, потому что у вас для того, чтобы дать доступ
58: К интерфейсу вы дадите доступ к реализации сразу.
59: Так и вы не можете дать отдельно доступ к 1, без другого, они в 1 проекте.
60: А по идее, у вас должна быть 2 независимость 1 от другого в 1 сторону должна быть стрелочка, а когда они у вас лежат вместе, так не получается. То есть они все-таки зависимы друг от друга, если это в 1 проекте. А если они в разных проектах, если в 1 проекте, то вы не можете дать
61: Кому-то интерфейс, но не дать реализацию. Ну да, и получается, что как собе точка ком собес станет пустяком. Ну то есть вот есть у вас приложение, которое стартует, его надо зарегистрировать, и оно
62: В общем, тем, кто будет пользоваться вот этим всем, вы не можете не дать реализацию, они могут своими чуть чуть шаловливыми ручками не использовать интерфейс, а взять конкретную реализацию, использовать её в обход вас. Ну да, никто не мешает.
63: Потому что вы дадите доступ к этому.
64: Поэтому, ну, по хорошему, чтобы соблюдать те принципы. Угу. Мы берём в отдельный проект, вносим интерфейсы в отдельный проект реализацию, и тем, кому нужен интерфейс, даём доступ только к интерфейсам, без доступа к реализации.
65: Хорошо, тем самым мы разделяем их, и у нас как раз появляется стрелка зависимости, что проект, в котором реализации, он зависит от интерфейсов, а интерфейсы не зависят от реализации тут.
66: Чем-то похоже на сокрытие. То есть мы стараемся скрыть, скажем так, вот эту реализацию полностью, чтобы даже не было возможности вызвать вместо интерфейса, соответственно, реализацию своего рода тоже сокрытие, инкапсуляция, все такое.
67: Да, окей, хорошо. Так, ещё чуть чуть про асинхронное, ну и многопоточное программирование.
68: Да, расскажите, пожалуйста, как, ну, асинхронность, конечно, используем в евкорень часто вообще, что такое синхронность? Для начала, нужно сказать, многопоточность. Синхронность, вообще то, что знаю.
69: Во первых, асинхронность может работать и в рамках однопоточного программирования, потому что, по сути, асинхронность не имеет значения с многопоточностью. Главная суть именно асинхронности в том, что мы не блокируем поток во время ае баунд операции, когда только
70: Запускает запрос там, допустим, в базу данных или чтение с файла и так далее. Вот. И он уходит как раз-таки наш фред пул тоже такая абстракция над фреда и которая позволяет нам не создавать и удалять
71: Ну, самим потоки, потому что это само по себе ресурсоёмко постоянно создавать, потом их ещё удалять. Вот вместо этого как раз-таки был придуман такой механизм, как федул, который позволяет нам как бы об этом сильно не задумыватьс.
72: Конечно, есть плюсы того, что мы, когда используем свой, свои фреды, используем такие специфические случаи. Ну а так, 99%, как бы задач, все ложится на плечах, скажем так, ну, в плане многопоточности. Также, когда мы работаем с синхрон,
73: У нас есть там ключевые слова асинкавейт, осинка это как раз-таки так. Async это как раз-таки ключевое слово, которое позволяет ну говорит о том, то, что данный метод является асинхронным.
74: И дальше мы уже используем эвейты внутри метода. А также, если у нас таска, ну, метод возвращает Таску, то, соответственно, мы можем вызвать await. Да, вот. И по сути, то, что я ещё читал, это все развёртывается в
75: Ну, это, то есть этот метод вообще становится классом, по сути. Ну, в io code, да, че ещё можно сказать. Ну, там стоит машина. Понятно, то, что у нас паттерн state ещё используется своего рода.
76: Чуть чуть давайте, значит, вот вы подошли к, ну, во первых, вы сказали про то, что есть иобат операция, какие ещё бывают операции, сипию, соответственно, это работа уже с математическим матема.
77: Тическими вычислениями и так далее. Вот то, что я помню из теории, вот теперь чуть чуть копнём. Давайте, значит, по io bound, если io bound операция, это у нас что io bound операция, то
78: Либо там запрос в базу данных, но что-то внешнее, скажем так, полная работа нашего, именно нашего конкретного процесса. Наверное, так можно выразиться. Окей. Смотрите, вот по исходному коду вот у нас шло выполнение, и мы дошли до
79: Await, в котором мы делаем запрос в базу данных, например. Так что происходит в этот момент. Ну, в этот момент наш поток освобождается и
80: И идёт наверх, скажем так, если так можно можно выразиться.
81: Наверх, то есть в репо. Вот, и при этом, что ещё происходит так при этом, что ещё происходит? Та, та, ну дальше не происходит работа
82: Тогда, допустим, то есть у нас там происходит сохранение состояния, ещё сохранение, ну да, сохраняется состояния, да? Угу. Вот. А поток, грубо говоря, освобождается.
83: Почему мы можем это сделать? Почему мы это можем сделать? Да, как раз вот причина, вот в io bound операции, что происходит? Вот мы отправили запрос в другую систему, а почему не можем?
84: Это же таска выполнять этот запрос. Ну, потому что не наш конкретный процесс выполняет этот запрос, это выполняет какая-то внешняя система. То есть это база данных, там формирует запрос, находит данные, обрабатывает эти данные и отправляет обратно. Понятно? То есть
85: Диска свои, да, свой набор процессов, которые выполняют. И ты, процессор, не грузишь, да, отправил запрос в другую систему, и все, да, вот. И ждёшь. А потом, когда заканчивается, что происходит, когда
86: Ну, смена состояния, смена состояния и сигнализирует ф о том, что давай, возвращай нам поток, а какой поток вернёт? Ну, наверное, это не важно, в принципе, там, по моему, без разницы, там.
87: Есть этот, как он, конфигура Вейт конфиг. Блин, я уже не помню. Да, конфиг Вейт. То есть, если true, то у нас возвращается именно тот поток контекст. Да, да, да.
88: Context. Да, да, да, да. Просто уже подзабыл. Ну да, да, точно такое есть. Редко приходится с этим пользоваться, но по умолчанию возвращается любой. Да, да, да. И там оно где вот используется, то как раз
89: Таки потому что там desktop и там с этим могут быть проблемы как раз-таки поэтому там нужно с этим поаккуратнее для f там да, там.
90: Правда, по моему, они сейчас уже переделали это и этих проблем. Ну, короче, да, я слышал, там обновления всякие, да, там есть. Я думал уже, потому что раньше было с этим прям жёстко, что ты должен в тот же поток, и если, не дай Бог,
91: Ты его сменил то как бы exception её сразу. Да, да, да. Окей. А теперь про другой вид операции сибию. А вот
92: Да, допустим, сразу чуть чуть, чтоб было интереснее в эвейте у вас внутри. Вы сделали ещё так, parallel написали. Угу. И
93: Чтобы там в 5 потоков у вас, не знаю, там сумма чисел от 1 до 100 миллиардов считалась так, например.
94: Что будет происходить в этом случае, когда мы дойдём до эвейта?
95: Так, у нас параллельно включены 2 таски в 1 или как? Ну вот вы шли по коду, вот у вас в какой-то таске выполнялся код, вы дошли до вета и там внутри task параллел в 5 потоков считаем ну
96: Какую-то математическую операцию очень долгую. Ну там как раз-таки проблема с тем, то, что у нас че то типа рейс кондишена, всякие проблемы дедлоков и так далее. Если вы об этом или нет, не про это я про вот этот таск параллел, он
97: Выделит определённое количество потоков, правильно? Да? Ну, 5 для того, чтобы обслуживать. Так, во первых, что будет происходить с тем потоком, в котором пополнялись, он идёт в тредпул также или нет?
98: То есть у нас Вейт, и у нас поток как бы уходит, но он, ну, может, не уходит, потому что это у нас cpu операция, то есть вы вот такой вопрос, да? Ну, он уходит, нет. То есть, что происходит в этом случае, сколько будет потоков выделен?
99: Так, ну если мы запросили в та, 5 потоков, сколько будет потоков выделено, ну, выделено будет 5. Ну, мне кажется, что, скорее всего, поток просто уйдёт, а может, не уйдёт и туда зайдёт, как 5, типа,
100: Не знаю, в этом плане, не знаю, но то, что вот будет
101: Блин, если cpu bound операции, то нет смысла делать в возвращать строку ну да, это я понимаю, потому что это накладные расходы. А, ну да, все, потому что вы должны сохранить контекст синхронизации, вы должны, ну,
102: Сохранить, отправить его назад, взять новый. Зачем? Да, у вас этот поток будет заполнять. И ещё видео и задачи с реальных собеседований на сайте хак собесов. Точка ком. Хватит гадать, что вас ждёт на интервью. Переходите и полу.
103: Ищите преимущество перед другими кандидатами прямо сейчас, достаточно умная в этом плане и, ну, гибкая, чтобы не делать лишних движений, неоправданных действий. Да, да.
104: В принципе, окей. Так у меня, наверное, особо вопросов. Вить, у тебя есть какие-то вопросы или нет?
105: Ну вы уже перешли на такие технологии.
106: Ну, можно, наверное, поспрашивать немного.
107: Ну, я вернусь к сишарпу. Вот, да, конечно, к приземлённому, да, есть интерфейс, есть абстрактный класс, а вот чем они отличаются?
108: Ну, вопрос такой. Там раньше вообще была проблема, ну, было легче их отличить в плане того, что-то ли сишарпа 8, или ещё когда-то, в общем, интерфейсы реализовывать вообще было нельзя. Вот. Но сейчас
109: Как бы их можно реализовывать. И поэтому в этом плане немножко меньше стало различий, скажем так. Вот, но абстрактный класс у нас имеет, че там
110: Ну, во первых, нельзя создать экземпляр у абстрактного класса, потому что мы должны обязательно наследовать, чтобы создать объект, да. А интерфейса можно сделать реализацию, ну, инициализировать. Да, да. Ну.
111: Да, а как?
112: То есть new и какой-то интерфейс. Ну сейчас, сейчас я че то может путаю че то, ну у нас именно объект может быть интерфейсом вот так вот. А абстрактный класс у нас не
113: Может быть, вообще проинициализировать его нельзя, то есть создать экземпляр, создать экземпляр абстрактного класса нельзя, а создать экземпляр интерфейса можно?
114: Так, ну я думаю, да.
115: Может быть тут че то, че то запутался, может где-то, я не знаю, наверное подвох какой-то есть, да, скорее всего подвох есть. Нет. Ну интерфейс же декларация она, ну да, по сути, да, это тоже вот об этом думаю, что это же у нас контракт, это прост.
116: Утверждение о том, что что данный объект может делать, что он умеет вообще, а абстрактный там ещё 1 из отличий как раз-таки абстрактного класса интерфейса в том-то что у нас как раз-таки интерфейс это контракт, абстрактный класс, это у нас такая вещь, которая как бы говорит
117: Чем этот объект будет являться, когда ты наследуешься от него. То есть, если у нас там персон, условно абстрактный класс, то он типа, ну хотя это уже не совсем абстрактный класс, то что можно создать person, но если мы его проинициализируем, сделаем как абстрактным
118: То в этом случае, че, че, че, че в этом случае? То есть мы просто говорим точно, что это вот что какой-то человек, кото хомосапиенс. А если мы интерфейс какой-то создаём, то мы просто говорим там муф, то есть этот муф может как быть и человеком, так и
119: И вообще, там машиной, ещё чем-то Вселенной, ещё что-то в этом духе. То есть в плане именно какого-то концепции они отличаются. Угу. А вот, например, мы сделали класс и унаследовали от нескольких интерфейсов.
120: Потом сделали ещё 1 класс и унаследовали от нескольких абстрактных классов, что в этом описании ну, ничто не настораживает. Ну да, мы наследуем 2 абстрактных класса, но мы не можем только 1 класс унаследовать интерфейс, у нас множество.
121: Наследование abstract, ну а классов у нас, ну, 1, 1 раз можно наследовать.
122: Ну да, это как раз-таки тоже отличие, которое, ну, самое такое очевидное, на самом деле, просто в голову не приходит сразу. Ну да, а реализация, ну то есть в интерфейсе у нас объявляются методы, правильно?
123: И в абстрактном классе тоже могут быть методы, да, реализация может быть методов в интерфейсе или в абстрактном классе, да, как я уже говорил, в интерфейсе может быть реализация уже с какого-то то, что
124: Вот я читал, там вроде бы это из за библиотек сделано то, что когда ты обновляешь библиотеки, добавляешь какой-то функционал, то тогда будут проблемы с этим. И для этого эту фичу добавили. Вот, а про абстрактные классы, если мы говорим, то там тоже
125: Можно реализовывать там делать как это wir не virtual или virtual по моему virtual ну ключевое слово, чтобы потом его оверрайднуть.
126: Ну, раньше нельзя было, да. Ну, то есть в абстрактных классах можно было всегда делать реализацию, а в интерфейсах, да? Нет, ну ещё нельзя было в абстрактных классах можно, ну, создать поле, а в
127: Профессии такого сделать нельзя. Угу.
128: Ага, не проперти, а именно в поле. Ну да, именно про property я молчу. Ну, потому что их можно создать и там, и там, да, поле нельзя создать. Вот конкретно поле нельзя. Вот, кстати, ещё 1 прям вот, сказали, назвали.
129: Ещё 1 отличие, но косвенно, видимо, оно прозвучало так в абстрактном классе можно использовать
130: Разные модификаторы доступа, в том числе и в том числе the какой-нибудь, да, там abstraction. А в интерфейсе только public у нас получается, да.
131: Угу.
132: Так, так.
133: Ну, ну, давай для, для проформы, поскольку время ещё есть последнее. Ну, вот у меня последний, наверное, тоже такой, из основных, наверное. А чем отличается? Вот, ну, так можно. Ну, хотя бы надо представлять, да, наверное, себе.
134: Класс от структуры. Так, знаете, знаете, ну, вообще, это просто разные вещи. В основном все делают классы. Но вообще отличие, оно в том, что у нас класс, это ссылочный тип.
135: Структура это значимый тип в плане того, что мы копируем объект, структуру.
136: Класс, мы просто ссылку кидаем, вот че ещё, ну опять же, из этого же идёт тот факт, что структура не может быть null, ну там есть вроде ещё какие-то другие структуры, можно вроде бы null было сделать, не знаю, вот это точно.
137: Не знаю, не, наверное, можно налбу сделать. Вот, но по умолчанию как бы, нельзя. А у класса по умолчанию, может быть, на, ну, то есть структуры изначально какое-то количество памяти уже выделяется сразу же, в отличие от класса.
138: А где выделяет Исхак собесов точка ком эйчар полюбит вас тайком. Ну, в куче получается у ссылочного типа это у нас класс, а у
139: У структуры, соответственно, в стеке. Вот, ну, стек у нас тоже, по сути, в куче, поэтому, ну, формально, да.
140: Так, ну ладно, в принципе, да, у меня ещё вопрос к вам. Ваши зарплатные ожидания от 200 на руки, да?
141: Окей.
142: Так, у вас есть какие-то к нам вопросы? Да, конечно, по поводу команды, по поводу ещё раз проекта, по поводу трекеров, по поводу удалёнка, не удалёнка. Ну так, в общем, рассказать. Так, на 5 минут, я думаю.
143: Давайте коротенько эту часть. Меня нормально слышно? Да, да. Я Дарья, менеджер проекта, который ведётся у нас. Проект по разработке b2b. Часть платформа по продаже билетов, наверное.
144: Подробно. Да, да, да, рассказывал Юрий. Да, вот сама команда сейчас у нас 3 аналитика, 8 разработчиков, 4 тестировщика, 1 автотестер, но планируется расширение ещё по разработке, поэтому проводим собеседование.
145: Угу. По разработке у нас сейчас есть некоторая специализация, есть специалист конкретно по ui, есть специалист конкретно по api, но планируем в дальнейшем и по разным видам транспорта тоже, но планируем в дальнейшем, что будут некоторые.
146: Погружение людей в разные части системы. То есть у нас вообще есть цель, чтобы разработка была универсальной, потому что бывают разные. Разная степень нагруженности на разные, чтобы не было Узких мест.
147: Расширение обучения пока что конкретно на поиске новых ресурсов сфокусировались. Трекер у нас сейчас Жирова стандартно по задачам есть эпики.
148: Создаются подзадачи. Там вот так уже идёт декомпозиция, декомпозиция. У нас совместно делают разработка. Аналитиками ли разработки помогают. В этом, в принципе, вы здесь на встрече присутствуют, погружа
149: Также и разработки помогут. По моему, по команде, по трекерам ответила ещё, а по проекту проект он не временный. Это платформа, которая разрабатывается с 2018 года.
150: И планируется дальнейшее развитие, потому что у нас как раз идёт значительный рост. Подключаются новые агенты, которые продают билеты, подключаются новые перевозчики, новые регионы. Поэтому, а плюс
151: Много очень приходит сюда потребностей непосредственно материнской компании д. Много потребностей пк и вообще достаточно большой бэклог задач у нас на много лет вперёд.
152: Поэтому как раз у нас сейчас акцент на развитие, на дополнительных возможностях и сервисах и также на выполнение нормативных требований непосредственно ржд. То есть мы вообще делаем акцент не только на
153: То новую функциональность, но и на скорость доработки, функциональности как-то так. И с точки зрения документации документация у нас не везде положи.
154: Есть куда расти, но планируем опять же, какие-то вещи, похожие на legacy, убирать, ну, убирать, где-то, где-то отрефакторить, где-то детально погрузиться, дописать. Но тут меня, может, ребята
155: Сергей, ну да, давайте чуть чуть про процесс расскажу. Вообще задачи поступают от бизнеса. Он, ну, постановка задачи. Дальше про
156: Аналитиками и льдами команды задаются вопросы. Все, ну, задача прорабатывается до тех пор, пока не становится понятно полностью, что надо сделать дальше уже.
157: Ну, руководитель команды обычно пишет постановку задачи, которая понятна разработчикам.
158: Потому что бизнес достаточно сложно писать, общаться на 1 языке с разработкой, скажем так. Соответственно, дальше происходит оценка задачи.
159: Соответственно, вы её реализуете.
160: У нас тестовые стенды, их достаточно много поднято. Соответственно, когда вы закончили задачу, ну, обычно задача не 1, а там какой-то
161: Есть условно эпик, это в нём может быть несколько подзадач. То есть это сущность, которую хочет получить заказчик. В нём несколько подзадач, которые могут делать разные люди, когда, собственно говоря, подзадачи сделаны, все, то дальше тестирование проверяет.
162: Реализация, соответствует ли она тому, что запрашивалось у них там отдельные стенды, на которых они разворачивают код и проверяют все это дело. Если все ок, то, а ещё ревью, естественно, кода происходит проверка, что
163: Все ок. Если на ревью ок. Тестирование ок, то, соответственно, задача уходит в, ну, в ветку мастер, соответственно, дальше, когда подходит время релиза Собира,
164: Релиз тестирование проводит регрессионное тестирование всего этого дела.
165: Дальше оно заливается на уже не на Десте, где мы все работаем, а на rc сте, на который есть доступ уже у наших партнёров, которые тоже могут, ну,
166: Проверять и смотреть, что получается. Плюс заказчики смотрят, что, собственно говоря, получилось то, что они ожидали, или, ну, есть какие-то косяки. Соответственно, если всех все устраивает, то через некоторое время релиз катится в
167: Ну, все задачи в jira это уже говорили, все, постановка есть.
168: Описание задач такое детальное ещё в конфе пишется. Ну то есть, может быть так, что там чуть чуть, но в конфе уже там более детально, ну, конфа более удобно, скажем так бывает в некоторых ситуациях.
169: У нас нововведение такое про как раз вот новые задачи мы стараемся туда описывать, а какие-то старые, если понадобится история.
170: Соответственно, у нас проект, в котором, то есть мы являемся, как бы это правильно сказать, основное, все равно основное.
171: Пул работ происходит по жд. У нас следующая ситуация во всем снг бронируются билеты через, ну, в 1 системе, которую разрабатывает всероссийский научно исследовательский институт.
172: Железнодорожного транспорта. То есть все, все бронирование всех жд билетов у нас в стране и по всему снг, кроме Украины, сейчас происходит вот в соответственно,
173: И мы являемся как бы эксклюзивными партнёрами по работе с ними. То есть, помимо нас есть доступ ещё только у касс, ну, жд вокзалов, естественно.
174: Соответственно, всякие яндекс, тутуру, озон и все остальные ходят через нас.
175: Понял. Помимо жд билетов у нас есть и авиация, автобусы, в общем, в принципе, спектр всех услуг. А мы являемся, как бы, скажем, наверное, слово.
176: Посредник такой, то есть все кидают к нам запросы, а мы их отправляем к соответствующим провайдерам.
177: То есть у нас там вот по жд, на самом деле, по жд, то, что я сказал, это дальнее следование поезда, только вот 1 провайдер, а по пригороду там ещё их штук 15.
178: Ну и, соответственно, по автобусам там тоже в десятки единиц по авиации тоже достаточно. Вот. Ну а мы, у нас хранятся все данные по заказам. Плюс мы стараемся минимизировать количество использо.
179: Ну, запросов к провайдеру, то есть вполне может быть так, что провайдер ругается за лишние запросы к ним, например, жд билеты мы формируем сами. Бланк, который печатается пользователю, потому что вниз говорит,
180: Не надо отправлять лишний запрос, они не формируют этот бланк, этот бланк формируем мы на основании данных из нашей базы. Угу.
181: Ну и у нас там кэширование всякое разное, чтобы, ну, минимизировать количество обращений к ним.
182: Вот как-то так. Ну, слушайте, круто, мне понравилось. Проект прикольный, интересный. Так много всего. И авиабилеты, и жд, и это все, но у нас монолит, ну это большой, да, я понял.
183: Соответственно, потихоньку идут работы по выделению микросервисов. То есть будет интересно, когда-нибудь мы придём в светлое будущее? Нет, ну они есть, они есть микросервисы, просто они это
184: Отдельные, которые изолированные сервисы, они, да, выделены, но их немного, но потихонечку мы движемся к тому, что их количество увеличивается там, где это разумно и необходимо. То есть подход
185: Что должно быть 1000000 микросервисов такой себе я не приемлю. Я тоже, потому что начинается рост накладных расходов. 1, ну, http, запрос имеет.
186: Накладно по производительности. Это раз. Вот. И плюс поддерживать систему, в которой у вас пришёл запрос, и там через 50 микросервисов что-то там произошло. И потом с 50 вернулся в 30, что-то там упало. Ну
187: Такое себе искать причину этого, ну, случившегося события, да, это целая эпопея взаимодействия между сервисами, с брокерами, с http grpc и так далее. Да, поэтому их должно быть
188: Ну, то есть, по мне микросервис нужно.
189: Не объяснить, почему он должен быть, объяснить, почему без него нельзя обойтись, да?
190: Вот как-то так.
191: Слушайте, круто все звучит прикольно. Классный проект. Вот интересно будет поработать ещё по поводу формата работы. Как у вас в плане работы? Удалёнка, не удалёнка в офис, удалённо, удалённо. Все. Класс. Да не, ну можно приезжать.
192: В офис при желании можно приехать в офис, да, мы там бываем, да, в офис посещение приветствуется, скажем так, я, ну, там, на этой неделе был 3 раза в офисе, ничего себе.
193: Ну, это, ну, по желанию, не принудительно, да. Ну, круто. Слушайте, понравилось. Интересный проект, как я уже говорил, просто немножко нервничаю. Вот по поводу формата, тоже мне симпатии.
194: Делают удалёнка, то, что не обязательно куда-то идти ехать. Вот спасибо за рассказ. Ой, а маленькое уточнение как раз вспоминаю вот по поводу операционных систем систем и
195: Угу. У вас что? Ну, я на райдеры пишу, ну, ещё 22 есть. Угу, угу. А операционная windows, но я ещё думал насчёт Мака купить, но пока что ещё не переходил.
196: Райдер лицензионный. Нет, там же вроде с этим проблемы. Ага, окей, понятно. Все, у меня вопросы, да, с райдером есть проблемы с лицензией. Совсем есть проблема. Не, не, не, там ещё больше проблемы, если вы
197: С лицензионным райдером подключитесь к интернету, и они определят, что он у вас лицензионный из России то вас заблочат. Несмотря на то, что вы за него заплатили. Я, слушайте, кстати, не знал об этом. Хорошо, что я не заплатил. Лучше не светиться.
198: Реально вас заблочат и все и ваша лицензия просто сгорит. Ужас.
199: Они до этого так не делали, а начиная, по моему, с прошлого года начали вот так жестить.
200: Vpn да, то есть если у вас райдер лицензионный только vpn напрямую ни в коем случае ну випиэн конечно есть, но просто не, ну просто да, вы можете забыть подключиться напрямую, они определят, что у вас айпишник из России, просто забанят вашу лицензию.
201: Ну, у меня автоматически он включается, когда я запускаю пк, но все равно это опасно. Ну да.
202: Вот.
203: В принципе, все, у нас вопросов нет. У меня тоже у вас до связи. Да, конечно. Жду обратной связи. Спасибо. Да. Угу. Было очень интересно с вами со всеми пообщаться. Спасибо за вопросы. Очень классные. Всего хорошего. Взаимно.
204: Да, хорошего. До свидания. Хорошего вечера. До свидания.