0: Привет.
1: Ага, привет. Слышу, у нас Катя задерживается. С кем ты общался. Угу. Я, пока она задерживается, я тогда начну. Хорошо с тобой. Ну, меня, в общем, зовут Илья, я бэкенд, разработчик тоже.
2: Компании провожу собеседование, так сказать. Вот, ну, не знаю, давай у тебя спрошу, почему вот так решил податься в поиски.
3: С текущего места работы. Ну, вообще, как бы весь опыт, грубо говоря, он был в рамках 1 компании, как бы, и по началу, естественно, довольно драйвил работа.
4: Как бы все нравилось, все вроде как устраивало. Вот. Но сейчас, как бы, понимаю то, что последнее, как бы, время, ну, не чувствую точки роста никакой. То есть, долгое время, грубо говоря, стою на месте. Вот, ну, другие там, микро.
5: Причины были там с переработками связанные, как бы, но это уже чуть другая как бы, история. И, ну, очень много приходилось работать, когда не надо было работать.
6: В свободное от работы время, да.
7: Понятно. Ну.
8: Так бывает, наверное, да, да. Но в любом случае, когда это иногда бывает, то есть я не против, но когда систематически, как бы это уже заставляет задуматься, я понял. А так, расскажи вообще, чем?
9: Там занимался, не знаю, какие-нибудь интересные задачи. Ну, проектов там много разных было из, если говорить именно про интересное, то, наверное, полностью к последнему проекту относится, потому что там, ну, такой более уже современный.
10: Tek был, вот. И, соответственно, микросервис. Ну и, в принципе, там много всего нового для себя, именно подчерпнул там от того, как там чисто архитектура, че такое, как там правильно настраивать, то, се, 5, 10, там очень
11: Интересная задача была с q, у меня там именно по внедрению то есть я там до этого, ну была задача, а я по сути, вообще за не шарил никак. То есть мне приходилось как бы, по сути изучать
12: Сразу применять. Вот, поэтому, ну, из интересного, наверное, это могу сказать. Ну, а так, с легаси проектом работал, это как бы не интересно, но так как бы, прикольный опыт был.
13: Но недолго. А с кафкой, получается, тоже не сталкивался. С кафкой я не сталкивался. Ну, только sam читал там про различия всякие, про, там, подходы, как бы, для себя уже больше в своих каких-то там проектах, возможно. Угу.
14: А так, какой-нибудь, не знаю, ну, участвовал, может быть, в проектировании. То есть там, к примеру, пришла какая-нибудь крупная задача, но на этапе ещё до того, как разработку проводить, ввести, может быть там с выбором баз данных, что-нибудь с описанием
15: Каких-то контроллеров там, ну прям настолько масштабно нет, но вот там какой-то, допустим, микросервис свой там, ну приходилось вот как раз-таки чистую архитектуру с того момента приходилось проектировать, то есть там принципы
16: То учитывал, то есть, ну, она там, в принципе, удачно вписалась в рамках микросервиса, именно, чтобы бдшку там с нуля, допустим, делать, такого не было. То есть она там уже была готовая, там просто нужно было там перенести все таблицы, все остальное. Вот, ну,
17: Рение кора с нуля тоже приходилось делать. То есть вот как раз-таки на последнем проекте. А, так. Угу. Скорее больше нет.
18: Угу. Так, окей. А с, а какими в основном работал с люционными? Постгресс, в основном постгресс?
19: Угу. А с каким-нибудь там, типа, монгой редисом, че-нибудь такое? Ну, redis был, но я задач по нему вообще не было. То есть, там буквально, я просто понимал то, что он там.
20: Где-то есть, че то делает, грубо говоря, как бы и больше. Опять же, для себя это все изучал. Вот. Но в работе как раз-таки не сталкивался. Монга нет, не было. Угу.
21: Окей, я понял. Рко, получается, с работал, да, с депром не сталкивался с деперо? Нет, примерно там, че то вроде читал когда-то про их различия, но в основном это всегда был кор, там.
22: Части оптимизации всегда было. И вот с нуля как раз-таки приходилось писать, а так вообще чистые. Давно работал, сталкивался вообще или, ну, естественно, сталкивался как бы не без этого, но
23: Именно, чтобы прям с ним работать напрямую. Ну, нет, скорее, там, че то посмотреть, там, че вообще там, в дк происходит, там, что-то, возможно, там по оптимизации че-нибудь глянуть, там, эксплейн анализ, там ещё че-нибудь таким, то есть, ну, а так.
24: Вроде по бдшке там особо то, ну все, вроде как помню, не особо то сложно. Я понял. Лады. Ну окей, давай, наверное, тогда, может быть, пройдёмся по вопросикам, да, прям на это.
25: С базового расскажи мне про суточные значимые типы, где что хранится, какие бывают там, ну прям с базового.
26: Ну, если говорить про вообще типы данных, то у нас, получается, существует там value, type и reference type, то есть, значимые, они, грубо говоря, наследуются. Ну, это все вот эти, там, числовые типы, там, time, time, span, там.
27: Булин туда же относится, они все наследуются, грубо говоря, от велью тайпа, как раз-таки референс тайп, они напрямую от объекта, от обжекта наследуются, это там всякие стринги, там делегаты, классы, там все.
28: Остальное, как бы, про различия их хранения можно сказать, то, что, ну, значимый тип, он как бы, хранит свои данные непосредственно, то есть не через ссылку на объект памяти, а непосредственно. То есть он, грубо говоря, ну, у меня в голове это так во.
29: Сложилось, как бы, если референс это больше про тип, который как раз-таки ссылку содержит больше на область памяти, как бы, где хранятся сами данные показывает. Вот что про них ещё можно сказать.
30: Ну, какие примеры бывают?
31: Ссылочные у нас получается куча, какие виды Куч бывают кучи у нас существуют, там получается, ну, если говорить вот про управляемую кучу, то, по сути, их там бывает, да, вот несколько видов, это там же.
32: По моему, там steam small обжект хип ПИН. По моему, object heap и, по моему, там ещё какая-то новая есть че то там or. Возможно, я че то могу подзабывать. Угу. Да, сейчас я 4 ещё, да.
33: Если основные про различия, то там small, это там для маленьких объектов, там до 80, по моему, 5 килобайт или че то такое. Лаш, это как бы уже свыше Пинт, это закреплённые, по моему, в памяти, которые как бы нельзя перемещать этим. Угу. Карбыш коллект.
34: Frozen. Я вот честно, ну, ни разу не приходилось, но че то я вот помню то, что он есть, но я особо не помню, че он делает. Ну, из названия, как бы могу предположить то, что он там тоже замораживает, как бы объекты какие-нибудь, вот.
35: Ну да, там, типа, тоже объектов, которые особо не меняются, и он их особо тоже не трогает. А, ну вот, да, я сам про неё так мало знаю, только слышал. Ну, окей, про кучу. Если вот там говорить, то там, ну ладно.
36: Не буду. Давай лучше тогда про collection поговорим, раз вот около этого ходим. Ну, понятно, что у неё есть там нулевое 1, 2 поколение. Какие вообще у неё есть этапы работы, так сказать, у него есть.
37: 3 этапа.
38: Как вот он работает. Этапы работы именно его, то есть. Угу. По сути,
39: Так, этап. Ну то есть он, допустим,
40: Ну, берет, получается, допустим, анализирует. Не знаю, можно ли, так сказать. Конечно, наверное, нет. Ну, короче, если коротко говорить, то, что вот он берет, грубо говоря,
41: Project анализирует вообще вот именно в памяти эти поколения как раз-таки наши, то есть он проверяет, допустим, какие, ну, какой у нас там ген, допустим, если он, ну, присваивается нам при объекте, создании
42: Памяти gc там проверяет наличие ссылок, там удаляет ненужные там дальше допустим он проверил какой-то объект, пережил, получается вот там 1 очистку, он дальше там присваивается ген 1, допустим, когда он после удаления
43: 0, как бы там объекты большие, они, допустим, сразу создаются с геном 2, он их не трогает. А как он понимает, какие ему удалять, а какие нет, ну, как раз-таки по доступу получается к ним. То есть, если, допустим, ну, проверять наличие ссылок,
44: И ненужные объекты удаляет, как бы, чем ниже поколение объекта, тем вероятнее его удаление по сути там, чем чем выше как бы тем вероятнее он останется угу. Ну и ну да, фишка ещё та же, то, что вот gcc он по сути когда анализирует как раз-таки вот эти об
45: Поколение, все вот это проверяет, он в процессе анализа, типа останавливается, допустим, ну да, приложение полностью, по моему, останавливается, и это вот, допустим, там чревато во всяких там винформах приложения, там всяких впах вот этих, то есть это нужно
46: Учитывать. Угу. Ну, по сути, да, у него есть 1 из этапов, немножко, немного по другому он его называет маркирование, он маркирует те объекты, которые пойдут на удале.
47: Перед этим. Угу. Потом вот он как раз удаляет 2 этап, у него это получается перемещение, то, что ты говорил, типа из 1 поколения в другое. А есть ещё 1 этап, называется дефрагментация. Вот, то есть он
48: Бывает, да, когда ему нужна оптимизация, он к ней прибегает, но, естественно, только сможет происходит. Ну да, этого не делает, не делает, да, потому что там этот, ну, понятно, большой.
49: Дорого, если че, его восстанавливать, как бы. Угу. А так, вообще, какие у неё есть режимы работы? А collection у неё есть 2 режима. Может, про них читал че-нибудь такое? Про режимы?
50: Да, ну, про режим так сразу, наверное, не скажу. Может быть, че то слышал. Есть. Короче, серверный есть клиентский. Не слышал про такое. Не, не, не, че то не слышала. Ну.
51: Ну, это так, со звёздочкой можешь как-нибудь поинтересоваться. У неё, короче, в зависимости от вот этого режима работают они по разному в 1 режиме, он будет 1 на все приложение, по сути, а в другом режиме он будет вот.
52: У тебя там восьмиядерный прост, к примеру, то на каждое ядро будет свой. Прикольно, кстати. Да, да. То есть, короче, вот так вот есть такие приколюхи. Окей. С какими коллекциями вообще приходилось работать? Ну,
53: Там много какими. Ну, так че, повседневное надо? Че больше приходится, с чем сталкивался. Ну, списки, естественно, дикшн, естественно, там всякие эти, ну, хэш, таблицы, там.
54: Сеты всякие там, про какие-то другие не говорю, там, типа, вот, не знаю, там какой-нибудь очереди истёк, как бы связанных списков тоже там давно никогда не было, скорее в работе, чем
55: К примеру, лист от р отличается список массива. Ну, самое главное то, что списки, они, по сути, динамические. То есть, если у нас рей, как бы, он, ну, у меня в голове, он такой, как бы, как
56: Ну, статический такой, плотненький, как бы, массив, как бы, они там тоже разных видов бывают, но он, по сути, ты ему как бы размер задаёшь, и он вот так вот с ним и живёт, то лист как бы он динамический, он там может уменьшаться, увеличиваться.
57: Там, ну, у него там под капотом тоже есть там вот это, как это называется? Копасити, да, когда он этот. Угу. Можно у него заранее, там тоже выставить, там сколько-то объектов будет, чтобы он там тоже слишком.
58: Этого не занимал память. Можно так его чуть оптимизировать. Так, ага. Ну, по сути, это просто динамический массив. Ну да, по факту он там внутри тот же массив, по моему, есть. Угу.
59: А так вот смотри, вообще, ну, при инициализации, когда мы только утилизируем там, естественно, памяти динамически на 0 элементов выделяется, когда туда попадает какой-то элемент, насколько он выделяет память динамически, у него есть там фишка такая.
60: У листа, ну, вроде бы в 2 раза, то есть, когда мы, допустим, вот на объект помещаем, он в 2 раза увеличивает копасити. Если, допустим, мы там, ну, вот, не знаю, капасити 2, допустим, мы там больше 2 объектов добавляем, он там до 4 увеличит, то есть, по моём,
61: Он в 2 раза себя увеличивает, если я правильно помню. Угу. Ну да, в 2 раза. А если копать не задаём изначально, сколько элементов там будет, если не задаём?
62: Ну да, типа, просто объявил там список и все. И, ну, не знаю, 0, наверное. Ну, сперва 0, да, но если как только попадёт туда элемент, он будет на 4.
63: Увеличен, а потом вот, как ты говорил, в прогрессии на 2 будет увеличивать. Угу. Понял, понял. Окей. Так, со словарями тоже работал. А словарь как у нас устроен, какие у него там есть коллекции под капотом?
64: У него там под капотом ай дикшенери ай, номер был k value per как раз кейвелью, который у нас. Ну, ключ пара значения. Угу. Если говорить про
65: В принципе, как вот именно словарь, допустим, работает, то он там состоит из массива Бакетов, по моему, которые там индекс. Угу. На эти энтри таблицы. Ну, массив, вот этот энтрис, это, по сути, такая таблица, где у нас
66: Ну, сами данные, по сути, хранятся. То есть, вот. Угу. Ключ, там, значение, хэш, там, ссылка на следующий элемент. Че там ещё? Угу. Внутри, вроде, вроде в целом, да?
67: А хэш код у нас вычисляется, он какого типа? Всегда 1 и того же, независимо от ключей, которые там могут быть, там и trina. Оо какие угодно. Так, ещё раз, какой вопрос? Хэш код какого?
68: Тип хранится, когда вычисляется.
69: Дикше, ну, тип этого хэш кода имеешь, имеется ввиду? Угу. Ну, инк, наверное. Угу. Ну, да, целочисленный, всегда интовый, верно. Так.
70: Тогда дальше с инженериками сталкивался по любому, да, с обобщениями. Ну да, да. Как думаешь, какую они проблему решают? Ну, вообще самую главную проблему. Это боксинг, анбоксинг, как мне кажется, да, то есть
71: У нас дженерики, это же этот, как бы, позволяют обобщать как бы, классы, вернее, типы, как бы, мы можем такой более универсальный, как бы, код писать и так далее, там, который с разными типами работает. Угу. Как бы не дублировал, кто, ну,
72: Ну, в целом, да, хорошо. Так, давай тогда поговорим про интерфейсы. Есть не кварел какой вообще больше подходит по работе с бдшкой, так сказать. В чем у них отличие друг от друга? Ну?
73: А это, как правило, для коллекции, а это для бдшки. То есть их самое главное отличие в том, то, что 1 он как бы, который с бдшкой, он вроде как
74: Выполняется на стороне бдшки, а номер, по моему, на не на стороне этого, ну, процессора как раз вот это, если помоему, про главное их отличие говорить.
75: Ну да, ну вот, к примеру, если там мы работаем как раз с рко, какой-нибудь, к примеру, и мы, получается,
76: Получается коллекция как раз вот он работает уже непосредственно в памяти, а ever получается уже, как говоришь, на стороне бд, но там происходит уже это фильтрация так называемая, вот. Угу. То есть он уже
77: Отфильтрованную коллекцию получает и с ней работает.
78: Угу, давай тогда поговорим про, ну про entity, может быть про рмку как думаешь какие у неё есть плюсы? Минусы? Фреймворк у фреймворка в целом. Ну да, вот у рмки н фреймворк.
79: Про плюсы, ну, абстракция высокая, да, можно, наверное сказать так. То есть он по сути работаем через shop объекты как бы без всяких там сикель запросов, всего остального, как б.
80: Можно больше сосредоточиться как раз-таки на написании, там, не знаю, какой-нибудь бизнес бизнес логики, а не на самих операциях. Ну там какая-нибудь кроссплатформенность, возможно там поддержка этих загрузок, там разных, там можно ленивую, жадную там поставить ещё какую
81: Сделать. Ну, производительность, на самом деле, не знаю, насколько это плюс минус там, с наперо. Я не этот, в принципе, не работал. Я знаю то, что он есть, знаю, там примерно, че то.
82: Там, но не так в лоб. Вот. Ну, если про минусы, допустим, говорить, можно, наверное, сказать то, что производительность хуже, да, чем у чистого сикеля. То есть. Угу. По сути, корон такой.
83: Ну, больше оверхед какой-то добавляет при генерации сикель запросов. То есть он там много всего пишет, там и так далее. Угу. Ну, и, в принципе, наверное, из за этого он, кстати, медленнее, чем тот же, наверное, тапёр какой-нибудь. Ну да, да.
84: Так, а че ещё, как думаешь? Так, ещё есть ещё минусы, минусы. А, ну то, что ленивая загрузка, кстати, там проблемы может вызвать там + 1, не знаю, там считается это за минус или нет. Так, да, n + 1.
85: Может быть такой проблемой а ещё, ещё, ещё есть так nat не знаю, с миграциями не сталкивался, с проблемами миграции, с миграциями сталкивался, с проблемами, с миграцией не сталкивался.
86: Насколько мне известно, очень проблематичная история. Если Миграция накатится, и она че то там кривая была, потом с ней работать очень плохо.
87: Ну, наверное. Ну, просто у меня вроде как особо проблем не было никогда. Угу. Ещё такое не сталкивался, как избыточность данных тоже. У меня такое может быть, как минус.
88: Не слышал про такое? Нет, че то не слышал. Ну это такая история, когда, к примеру, какой-нибудь неправильный вид, так сказать, подход проектирования был. Не та загрузка использовалась. Вот. И у тебя.
89: Получается вложенность будет какая-нибудь большая в моделях и получается, когда будешь делать запрос, ну там че-нибудь будет из бдшки тянуться, оно будет тянуться внутри, ещё какая-нибудь модель ещё будет тянуться и, короче, в итоге у тебя там
90: Будет все расти, расти, расти. И в итоге там, скорее всего, шлёпнет че-нибудь по таймауту, че-нибудь такое. Угу. Ну, короче, тяжело, по сути, работать, получается с этими, со сложными там, всякими функциями. Да, да, да. Ещё там, когда, ну, да, у моделей каких-нибудь.
91: Большая вложенность при проектировании. Потом будут грешки с этим. Понял, понял. Вот какие вообще виды загрузок бывают, кроме ленивой, но ленивый. Мы уже поняли, что все знают эти, получается, да, как раз-таки жа.
92: Так, и че то явное, или как её? Ну да, вот ленивая у нас есть жадная, ну явная, да, да. Так какие методы используют явные и жадные, если говорить.
93: Про явную, допустим, это же, по моему, когда у нас данные, они как бы загружаются. Хак собесов, точка ком, собес станет пустяком объекта, если говорить про методы, которые, допустим, в этом случае используются
94: Ну, методы, которые этот.
95: Ну там допустим есть у нас там какой-то db контекст, можем предположить, да, то есть и
96: Ну, там load у него метод ло, да, вот че то.
97: А у жадной, ну, жадные наверняка, знаешь, там, ну, жадные какие у нас инклюды, получается. Ага. Ну да, вот оно. Окей, инклю с автоматом, кстати, не сталкивался с таким.
98: Пакетом, как автоматом, автоматом, да? Ну, вроде бы, сталкивался когда-то, ну, типа, модельки в 1, там переводят в другую. Можно там ещё настраивать его. Угу. Сталкивался, да.
99: Ну, или там, если так порассуждать. Как думаешь, че у него под капотом? У автоматеа, да?
100: Ну так сразу, наверное, не отвечу.
101: Ну а если так прикинуть, если он одни модельки переводит в другую, че он может использовать? На чем он, так сказать, построен? Ну, по сути, он у нас получается, у нас берет
102: Как бы сейчас пытаюсь вспомнить. 1 объект переводит как бы, в другой. Ну да, если, как бы, ну, по сути, он у нас что делает, как это сказать? Ну, как бы, при вызове у нас, по сути,
103: Он получает какие-то там данные, далее строит выражения как раз-таки эти экспрешны всякие. Компиляция, наверное дальше идёт.
104: Дальше че у нас там, блин, я, возможно под капотом могу че то путать. Ну по сути же, как бы к чему мы прибегаем ещё раз? К чему мы?
105: Когда работаем с какими-нибудь данными, которые не знаем, можем прибегать.
106: Так сказать.
107: Блин, ну прям в голову мне не лезет.
108: Рефлексия такая штука есть, что такое у нас рефлексия, рефлексия.
109: Не слышал такого понятия, я слышал, но я прям
110: Не сходу могу ответить, не прям помню это то, что у нас происходит. Как сказать, работа с метаданными. Мы можем получить доступ к любым там
111: Объектам, к атрибутам, к методам. Все, что как раз-таки работа с этими данными получается, да, автомате как раз весь построен на этой штуке.
112: Че то, ну его порой не выгодно использовать, потому что, как правило, у нас если рефлексия, то это последствия могут, какие быть, как думаешь?
113: Что плохого в рефлексии? Ну, наверное, это тяжёлая операция считается так, для приложения. То есть её, по сути, надо, не знаю, там 1 раз, наверное, делать там когда-нибудь при старте.
114: Ну да, то из за того, что он построен будет на производительность влиять, потому что рефлексия очень много ресурсов жрёт. Ну и поэтому, если у тебя, конечно, там какие-то модельки небольшие, и там маленькое какое приложение, то в целом, наверное, ок. Но если у тебя
115: Там огромные модели, и ты пользуешься вот авто аппёром. У нас есть такой плохой пример, как у нас там есть монолитные части, вот в нашем коде, так сказать, получается. И вот есть модели, которые реально
116: Крупные и в паре вот эти фреймворков с работой, с автоматом очень плохо сказывается вся эта история. Ну, это, наверное, да. Так медленно, опасно, как бы, ну да, там, особенно, когда, к примеру, наверное,
117: Нагруженность, к примеру, раньше была небольшая, никто ничего особо не замечал, а как начала расти нагрузка, некоторые запросы стали падать по таймауту, потому что энсти забирает эти объекты, эти объекты сразу же, ну, автоматом другие.
118: Из за большой вложенности. Вот тебе, пожалуйста, пример избыточности данных, когда падает че-нибудь. Угу. Окей. Пу, пу, пу. Давай че-нибудь поговорим про асинхронность. Что такое асинхронность? Что такое многопоточность?
119: Вот про такие понятия. Ну, если коротко, как бы, асинхронность, как бы, это такая, грубо говоря, штука, которая позволяет выполнять как бы, отдельные там какие-то операции в отдельных потоках, как бы, однако, при вот выполне
120: Этих операций, как бы у нас поток, он как бы возвращается там в пул потоков, и он будет там использоваться для каких-то других задач. То есть когда задача там завершит, допустим, своё выполнение для синхронного вот этого метода, опять там выделяется поток из пула этого и
121: Он, грубо говоря, продолжает свою работу. Вот если говорить про подкапотку, тоже, я там примерно примерно понимаю, могу слегка ошибаться. Вроде бы там у нас под капотом как бы такая стоит машина, да?
122: У нас там создаётся любой метод, допустим, там с thin эвейтом как бы, и 1 делом создаётся вот, допустим, стоит машина, она вроде бы, там, ну, можно её работу посмотреть на элкоде вроде бы, да, и в контексте как раз-таки асинхронности.
123: Она, ну, это механизм, грубо говоря, который генерирует как бы компилятором, вернее, который генерируется компилятором для управления всяких там асинхронных методов. То есть там внутри у него есть там switch.
124: Допустим, да, который переключает между состояниями метода, есть там, ну, там, какой-нибудь, не знаю, метод move, по моему, там есть, который как раз-таки там передвигает вперёд, допустим. Угу. Че ещё можно такого сказать? Ну, про синхрон.
125: Там-то, что есть проблемы там с асинхронностью, некоторые там эти дедлоки, там всякие, ну и не всегда, допустим, асинхронность выгодно там использовать, если у нас там метод, там просто возвращает какую-то там задачу без там
126: Дополнительных, то это скорее накладно будет. Ну да, конечно, логично. Если у тебя там вложенность какая-то там небольшая, то само собой, да, да, вот про, а сколько у нас будет состояний, к примеру, если
127: У нас вот, ну, синхронный метод, к примеру, там и внутри метода у нас 2 эвейта. Какое количество состояний будет, как думаешь?
128: Если у нас количество состояний. Угу.
129: Ну и wait по сути да, вот под капотом разворачивается на machine состояние, синхронный метод и на каждый Вейт по сути.
130: Ну, так там, короче, да, будет состояние, вот если нас 2, какое количество состояний будет?
131: Интересный вопрос, наверное.
132: Блин, могу ошибаться. Ну, наверное, 1, он как-то между ними переключается, возможно. То есть, ну так запомни на будущее вообще в целом, если у тебя 1 await, к примеру, то будет 2.
133: Состояние, если 2 его, то будет 3 состояния всегда + 1 состояние. Понял? Потому что получается, есть состояние до, есть текущее, есть состояние после и получается вот такая фишка у машин состояний, что она всегда буде
134: На + 1 состояние больше, чем у прикольно, не знал. Ну, че то прям много интересных вопросов. Новое для себя, что-то узнаю.
135: Ну вот видишь, хорошо. Че ещё поговорить про многопоточность, да, по моему, да, про многопоточность. Так что у нас такое? Про многопоточность, по сути, если опять же, коротко это там.
136: По сути, процесс, где помимо у нас там вот главного нашего потока существуют как бы другие, которые там свою какую-то работу выполняют из таких вот фишек, там и всего остального многопоточности, наверное, можно выделит.
137: То, что синхронизация потоков есть. То есть, ну, по сути, это такая штука, которая как бы решает проблему в том, чтобы синхронизировать потоки и ограничить как бы доступ к ресурсам на время их использования как раз-таки там каким-нибудь потоком, то есть
138: А чем, какие есть средства синхронизации? Их там много, там есть му, му, мутекс есть там, да, мьютекс, симафор слим, там есть там их очень.
139: Примитив синхронизации, по моему, там, ну, обычный дефолтный лог, да, допустим, тоже подойдёт. Угу. Симафор, там, эти всякие, ну, да, там много loc, вот симафор, там атрибут синхронизации, ещё есть их там, по сути,
140: Основная основной прикол то, что они там просто этот, ну, для разных микроцелей как бы, созданы. Угу. Мутекс, он там, ой, мьютекс, он создан там для какого-то эксклюзивного, допустим, доступа к ресурсу.
141: Да, то тот же самый, не знаю, семафор, он там, в принципе, просто ограничивает количество потоков, там, которые одновременно могут получить доступ какой-то, ну, там их много разных есть, там есть, по моему, эти асинхронные тоже есть, там вроде.
142: Где симофор слим, по моему, слим версии, они, по моему синхронные, да, и вроде бы ещё какой-то есть, но я могу, че то подзабыл. Вот. Ну и по сути, все эти примитивы
143: Бы они свои тоже как бы, решают эти приколы, как бы. Угу. Проблемы, там, рейс кондишн, допустим, да, там дедлоки, как я уже там вот говорил, всякие проблемы синхронизации, возможно.
144: Вот. Ну, там, рейс кондишн тоже. Угу. Не буду пример приводить, как бы просто так уж общее, в общем, выделил. Вот. Ну да, хорошо, давай че-нибудь ещё поговорим.
145: Про, про пенсии инжекшн. Допустим, что это вообще такое? Для чего он нужен?
146: Ну, по сути, ну да, да, я понял. Ну, депенденси Жекшен, это, грубо говоря, такая штука, которая, ну, её можно назвать, как бы, механизм такого внедрения, как бы, в зависимости, зависимости.
147: Это как бы, угу. Он делает как бы код более модульным, как бы тестируемым, как бы слабосвязанным. Можно тоже так, наверное, сказать. То есть у нас, по сути, это важно. То есть применять этот паттерн.
148: Вообще всегда, потому что там, как бы, в любом случае изоляция становится как бы хорошая, ты можешь там легко как-то менять, там, не знаю, реализации каких-то сервисов без изменения, там, основного кода, то есть. Угу. Потести.
149: Тоже как бы легче это понятно почему-то есть там легче как-то подменять, допустим реальные какие-то зависимости на smokie, там, на фейковые данные какие-нибудь, на ещё че-нибудь в тестах, ну по частоте кода тоже кода наверное тоже игра.
150: Роль, как бы у нас жёсткие зависимости, по сути, пропадают, как бы код таким более гибким становится. Ну да, какие у нас вообще бывают циклы жизней, у нас синглтон есть скоупд.
151: Треджен, вроде бы, да. Угу. Синглтон это у нас, когда, соответственно, глобально 1 инстанс для всего приложения, как бы, скотт, это у нас 1 инстанс, по сути, для каждого тип запроса, как бы он живёт в рамках скоб, как бы, а ско живёт в рамках аштипи запроса, как бы
152: Это вроде новый экземпляр, при каждом запросе объекта он делается.
153: Ну да, так оно и есть. Давай тогда ещё про, по немножко поговорим про мидлвары. Вот, что у нас вообще такое мидлвар, может быть, свои какие-то писал. Ну, мидлвар это.
154: По сути, у нас же, как это можно назвать? По умному, правильно? Ну, конвейер обработки, как бы. Угу. И запросов, если можно так сказать, да, то есть, это каждый, по сути, у нас вот аштипи запрос.
155: Который прилетает как бы в аспе, он у нас проходит как бы через цепочку вот этого мидлвара, как бы, и каждый мидлвар, он там может что-то своё там делать, допустим, там, что 1 там, че то сделал, там проверил токен, допустим, там передал дальше, там следующий медавар, та
156: Ещё что-то сделал и так далее. Вот самому я на самом деле не помню особо, что мне приходилось делать, но я помню то, что по аутентификации че то я по моему делал, но зачастую
157: Утилизации че то делают. Ну да, да, вот по сваггеру тоже че то я добавлял, помню, как бы обычно всякие вот такие более, не знаю, кастомные режимы, как бы они для логгирования, для какой-нибудь там обработки ошибок, наверное, нужны ещё там.
158: Угу. Ну, в целом, да, в целом, да, наверное. Окей. Давай поговорим ещё в дотнете. У нас есть такой, как линки. Что это вообще такое?
159: Ну, это, ну, грубо говоря, можно, наверное, отдельным языком назвать, не знаю. То есть, так, ну, по сути, у нас какие вообще подходы бывают, да, то есть, там, да, либо императивный, либо
160: Декоративный, декларативный. Это про что нужно сделать, как бы императивный, про как это сделать, как бы, и в случае, допустим, с link you он скорее относится больше к декларативному, как бы
161: И у нас там, допустим, ну, все операции, допустим, запросов, там, в Линке, они как бы, из, по сути, этапов там нескольких состоят, да, то есть у нас там получение, мы получаем какой-то источник данных, там создаём запрос.
162: И выполняем запрос, как бы так можно это сказать. Вот если там про методы какие-то говорить, ну их там какие вообще разновидности бывают Линке разновидности это про
163: Отложенное или немедленное, или че-нибудь такое, про это речь. Ну, про это тоже можешь рассказать. Есть отложенные, есть немедленное выполнение, чем они, 2 способа запроса, да? Угу. Ну, чем они отложенное, это по сути.
164: Оно само за себя говорит, как бы запрос не сразу выполняется, а при, как сказать, при объявлении, да, то есть у нас, ну, выполнение, как бы, оно происходит только при операции, как бы, по результату, то есть, вот, допустим,
165: Ty list, да, там to ra. Угу. У нас там ну ещё че то можно там, когда мы проходимся допустим, да, по. Угу. Ну вот так вот. Ну, короче, где возвращается объект грубого
166: Да, да, да, как бы немедленно. Это уже чуть другое, как бы это у нас запрос, когда выполняется, как бы, и сохраняет результат, как бы сразу в коллекцию. То есть там first дефолт, там, допустим, аккаунт тоже. Угу. Подсчитывает.
167: Ну и как бы у того, у того есть какие-то свои там преимущества, недостатки, как бы это уже в зависимости от того, что нам конкретно надо как бы такой подход и применяем. Ну да, а то, что я тебя спросил ещё до этого, это, к примеру, какие есть.
168: Разновидности, к примеру, там link to ооо. То есть вот он пример применяется для работы с массивами. Оо, а какие есть ещё
169: Ну, линк ю ту обжект, это у нас, по сути, когда мы
170: Так, ну это как раз, как я тебе сказал, с коллекциями работает, а есть ещё такие вообще парочка. Ну не парочка, побольше даже to object.
171: Дбд. Когда мы обращаемся, это как называется, к этому, к query, как бы к нему линки тоже обращаются, понятно? Ну да, потом называется линки, ту энсти.
172: Я по названию могу слегка подзабыть.
173: Ну, в общем, да, это не столь важно. Ну, есть ещё, кроме, там, ту, ту датасет, которые там с разными объектами работают. Есть ещё, не ошибаюсь, по моему, че то с параллельностью для выполнения параллельных запросов, какой-то, что
174: Такой, да, наверное, че то там, а с параллели, я помню, там этот, ну, тоже че то читал, по моему, про это то, что он там позволяет, как бы, распараллелить, грубо говоря, запрос там к источнику данных, как бы.
175: Звучит интересно, но ни разу в работе вроде не сталкивался.
176: Недалеко уходя, что такое вообще деревья выражений, может быть, помнишь, слышал? Да, это у нас, по сути. Ну, короче, когда мы пишем, как бы, запрос обычный, там линк запрос у нас как бы, компилятор же.
177: Преобразует, как бы и понятно, что он преобразует это там в делегат, как бы там, который выполняется именно в памяти, как бы это обычно вот там обычное какое-то выражение, выражение, допустим, как бы, а экспешен 3, это если мы его допустим,
178: Напишем у нас вот это вот дерево, оно создаст как-то, ну, объектное представление кода можно так, наверное, да, сказать. То есть, по сути, где это у нас используется, наверное, это во всяких там, ну, в том же самом.
179: В коре, да, то есть, вот там. Угу. У нас позволяет там преобразовывать, там шар, код, сикель, запрос. Ну, и в линкус как раз-таки тоже, наверное, да, это используется. Уж, ну, там не так-то, что используется, а можно как бы, слож.
180: Какие-то запросы, допустим, строить там. Ну, короче, если коротко, то вот дерево Жени, это вот про перевод как бы я понял. Хорошо.
181: Так, ну и че-нибудь, давай ещё тут про какие-нибудь тесты приходилось писать? Может, юни тесты ещё что-нибудь такое? Да, да, приходилось.
182: Мокирование не использовал как
183: Смоком не работал, смоками. Ну, x юнит плюс смок работали без, там. Угу. Внешних каких-то зависимостей. Ну, там, проверяли, допустим, там, логику в сервисах, там, то хендлерах команд, там, запросов. Ну, как правило, как бы.
184: Вообще регулярно использовались они там, ну, как бы, быстро че-нибудь проверил, там, на уровне метода, как бы, и все. Угу. Ну, там, если говорить про шаблон, там, aaa, можно так сказать. То есть, там, который этот
185: Ну, там входные данные, допустим, да, подготавливаем, там код вызываем, тестируемый результат проверяем. Угу. Вот. Угу. Окей. Лады. А из паттернов че, последнее, че-нибудь, может быть, использовал?
186: Какие-нибудь паттерны, как, как из паттернов че-нибудь последнее использовал, может быть, ну именно чтобы самому там с нуля, допустим, что-то писать. Прям такого супер не использовал. Но опять же, это, ну, диай.
187: Можно назвать, наверное. Ну, это да, понятно. Ну, репозиторий был у нас юнитов форк, по моему, тоже. Угу. Че ещё такого? Ну, были паттерны, которыми я, допустим, там, в них.
188: Не вникал, но вот знаю то, что были там Сага, допустим, да, бокс. Паттерны тоже были. Угу. Окей, ладно, поехали дальше, давай поговорим про есть протокол. Https чем?
189: Они отличаются друг от друга. Ну, аштипи, он не защищённый сертификатом вроде бы, а он как бы защищённый сертификатом. А какие там сертификаты используются, может, знаешь?
190: Если вспоминать.
191: Ну, мы, получается.
192: Ну, сисиль, ага. Сертификат. Ага. Это 1 из. И ещё есть 1 ещё, да, есть, да, есть. Короче, сел и тлс, короче.
193: А, сертификата, понял, для шифрования используется. Короче, да, если, если коротко, то там траффик шифруется, как бы защита от перехвата атаки. Угу. Окей. Какие методы они реализуют? Ну, там, get, к примеру, какие ещё есть? Ну, ге.
194: Put delete patch, вроде ещё есть. Угу. Если правильно помню. Ну, если чем он, чем он от пута отличается.
195: Patch, вот это, кстати, прикольный вопрос. Я его, этот, вроде бы там, он у нас сейчас, я пытаюсь вспомнить. Ну, апдейт, по моему, обычный, он не обновляет именно, короче.
196: Запись, а не изменяет существующую, а удаляет, типа, и заново создаёт. Угу. А вот другой, он как раз-таки изменяет запись. Ну да, puch, это частичный
197: Там изменение данных, там целиком ничего не делают. Ну а какие у нас запросы считаются патентными?
198: Что такое вообще импотентность? Может быть с этого проще? Я, наверное, именно определение не знаю. Возможно, скорее знаю, что это, но не по определён.
199: Че то, ну давай, как знаешь.
200: Как помнишь.
201: Импотентность?
202: Ну, вот запрос, к примеру, пут, он будет импотентный или нет, как думаешь, ну, чисто от логики? Ну, сейчас вот если говорить про дипотн ность, это же я правильно понимаю то, что это когда вот у нас, ну,
203: Много раз там, допустим, выполняется операция, да, и она как бы, тот же результат нам генерирует. Ну, в целом, да, то есть практически, да, как ты и сказал, состояние системы никак не меняется на выполнение.
204: Какого-то 1 и того же запроса, который ага, вот например как put ты можешь обновить там запись несколько раз 1 и тоже сделать, но никак не повлияет на изменение системы а если какой-нибудь пост будет, а, ну допустим,
205: То есть, то уже. Угу. Ну, здесь понятно, но там такая история, что можно в целом, как сказать, скорректировать, и любой запрос будет патентный, но это так уже понятно, там можно изощряться, как
206: Угу. Понял. Лады. Так, давай че-нибудь про эскьюэль поговорим. Ну, че-нибудь простого. Прям про индекс. Что у нас такое? Индекс? Что такое кластеризованный, не кластеризованный индекс. Угу. Ну.
207: Индексы это, в принципе, там структура там данных, да, которая как бы улучшает у нас там скорость операций, там, выборки данных из таблицы и тд. И тп. Вот если говорить про виды и
208: Индексов, скорее, то у нас там, да, есть вот обычный составной, кластеризованный, не кластеризованный. Есть ещё есть там уникальные, по моему, индексы.
209: Ну вот, вот так, если говорить про разницу, допустим, кластеризованного, не кластеризованного, ну и в принципе, что это вообще за эти индексы, то я себе в голове это так, как бы представляю то, что у нас
210: Лизованный, по сути, это как бы такой главный индекс, как бы, таблицы, он физически как бы упорядочивает вообще все строки, как бы он хорош именно для каких-то там, допустим, диапазонных там выборок и сортировки, да, вот.
211: Очень часто с неё кластеризованным. Если сравнивать, допустим, во то для меня он такой более вторичный, как бы, индекс, он, по сути, указывает как бы на строку, как бы, и требует как бы дополнительного чтения из за вот там.
212: 2 таблице, которая там создаётся как раз-таки то, что у нас в этой таблице, как бы во 2, она видео и задачи с реальных собеседований на сайте хак собесов, точка ком. Хватит гадать, что вас вообще под капотом переходите и получите преимущество перед другими кандидатами. Прямо сей
213: Час под капотом, блин, на самом деле, не особо заглядывал туда, как бы, я просто понимаю то, что он, по сути, ну, сами данные использует, как бы, и, ну, когда
214: Нужно ускорить. Нет, ну понятно, что он данные использует. Там вся фишка как раз, где вот он хранит свои данные. То есть, вот если знать, как он устроен, то будешь знать, где он хранит свои данные как раз, ну, большой Глоба.
215: Отличие от кластеризовано. Ну да, но у нас вот есть такой индекс. Его называют b3.
216: Про такое слышал, да? Ну, это вот самый дефолтный, самый дефолтный. Вот, да, битри, это, по сути, ну, дерево выражений. Как там индекс дерева. Угу. Как вот он устроен, что у него есть в этом?
217: Дерево.
218: Ну то есть оно же растёт, индекс получается. Блин, я тут тоже где-то где то читал. То есть я именно смотрел на вот это.
219: На само дерево, на сам граф, вот именно как устроен, по моему, но я могу че то подзабыть. Ну в общем, там такие есть ноды, как их называют, листья деревьев, то есть такие маленькие вот в этих нодах он как раз хранит свои данные, да?
220: За счёт этого, короче, он быстрее, вот этот индекс, вот это дерево, оно работает, то есть оно уже отсортировано, то есть в определённом порядке не кластеризованных. Их вообще может быть Хренова туча, но очень много. И они, во первых, не упорядочены, их хранят.
221: Свои данные, где хотят, в таблицах ещё где-то там. Поэтому они, у них такое большое преимущество, отличие друг от друга. Угу. Так, у нас есть такой поминал составной, что это
222: Index такой, ну, это, по сути, индекс, как бы, с несколькими столбцами, как бы, это индекс, который там включает более, там, в себя более 1 какого-то столбца, допустим, они там. Угу. Есть там.
223: 1. Там есть дополнительные какие-то вот, ну как бы одновременно по нескольким столбцам можно сортировать данные, допустим, там такой тогда вопросик. Смотри, у нас есть таблица, к примеру, ну сотрудник
224: Вот там есть поля такие, как там, фамилия, имя, отчество, там, телефон или ещё что-то там. Ну, пример составной индекс состоит из полей, как фамилия, имя и отчество. Вот из 3 полей вот таких последовательностей, это
225: Будет ли работать индекс, если мы будем обращаться только по имени поиск, там делать запрос?
226: Будет работать будет.
227: Ну, наверное, будет, но, мне кажется, при этом, как бы, эффективность, наверное, будет снижена. Как мне кажется, я точно помню то, что составных индексах, как бы, очень важен порядок, как бы, столбцов, то, что он, по сути,
228: Вот какой он как бы у нас указан порядок такой, как бы он значение, по сути, имеет, то есть там наиболее эффективный там для 1, да, вот, то есть ты говоришь, порядок важен. То есть, по сути, если мы
229: Будем обращаться по имени, то порядок то у нас какой нарушенный, значит, исходя из этого, будет отрабатывать или не будет?
230: Ну, сам отвечаешь, скорее всего, нет, как бы я уже это понял. Ну да, то есть ты правильно сказал, порядок важен. Вот если ты будешь обращаться по фамилии только, к примеру, или только по фамилии, имени, то есть по некоторым полям, но по
231: Они будут идти. Угу. То индекс будет там частично отрабатывать. Вот, потому что он уже строит как раз данные вот по этим полям. Угу. Угу. У меня почему-то в голове, я думал то, что если как бы
232: Другие какие-то столбцы используются, допустим, помимо там 1, то он как будто, ну у меня в голове почему-то он должен выполняться, но, естественно, не так быстро, как там при основном. Ну ладно, это я понял. А так
233: Ещё это как его называют, такой вопросик.
234: По, по, по, по, по, по, также по индексу, вот, допустим, также табличка сотрудников с такими же полями, там, допустим, фамилия, имя, отчество, не знаю, там номер телефона.
235: В этой табличке новые поля не появляются, но с этой таблицей работают. То есть там читают, удаляют, там какие-то манипуляции проводят, вот с ней работают, работают. Есть у неё индекс, который
236: На айдишнике висит основной. Угу. Который создаётся. Вот. И, к примеру, в течение времени стали замечать, что индекс стал отрабатывать хуже. То есть дольше. Как думаешь, вот с чем это может быть связано? Ну, естественно, это не сразу проявляется какой-то та,
237: Период времени мы стали замечать, что он стал хуже работать. Как думаешь, с чем может быть связано? Ну то есть, допустим, у нас, да, есть таблица, да, какая-то, и, ну да, да, да, вот в неё, там ничего не добавляют там, но
238: Часто обновляют там и удаляют. Да, да, да, да. Добавляют, как ты говоришь, удаляют, там, читают, изменяют, записывают. Угу. Ну, по сути, это вроде бы такая, этот пробле.
239: Тема как бы с таблицами, да, если можно так её назвать, когда ты как бы удаляешь строки, допустим, в том же самом там потрёте, он как бы не освобождает по моему место сразу физически на диске он помечает как мёртвые строки, по моему, и
240: И они остаются в этом, в этом же файле, они там какое-то место занимают.
241: Ну и индекс, соответственно, тоже, он как бы по этим мёртвым, грубо говоря, таблицам и всему остальному записям, как бы тоже проходит, наверное. Ну, скорее всего, да, как бы, и вот этот индекс.
242: Поэтому, наверное, стал медленнее работать.
243: А че вообще происходит с индексом, когда, к примеру, происходит вот запись, потом изменение записи.
244: Если че не делает в этот момент есть прям такое понятие, его прям так и называют.
245: Ну.
246: Что, что делает индекс? При как раз-таки этих что ли? Блин, ну да, когда ты новую запись добавляешь, вот он что делает?
247: Вот он был 1, а потом другой.
248: То есть добавляем запись, допустим.
249: У нас там что, ну, сейчас я хочу представить, как-то у себя в голове, возможно, опять че-нибудь забыл. То есть есть у нас, допустим, таблица, да, там, там. Угу. Айдишник. И name, допустим, ней, да, у нас там, ну да, индекс, допустим, на id висит.
250: То есть, если мы там вставляем, допустим, имя, то что у нас происходит, ну, по сути, у нас строка, она же, по сути, она добавляется в таблицу.
251: Появляется новая запись, да, да. Вот этот же, он, по сути, новую запись тоже добавляет, как бы, наверное, там ищет, куда вставить народа этот.
252: Ну, он же отсортирован.
253: То есть он, он, наверное, ищет там внутри под капотом как-то узел, наверное, какой-нибудь, где, куда ему вставить эту запись. Я просто пытаюсь это представить в голове че то у меня, ну, есть такая штука, короче, понятие как
254: Перестроение индекса. Вот оно как раз-таки с этим и связано, когда происходит любое изменение с таблицей, то есть там запись, изменение, удаление, круд операции, как так называемые, вот то
255: У тебя индекс перестраивается, то есть, ну а за счёт того, что он часто перестраивается, он, короче, теряет свою эффективность. И вот когда ты там, у тебя либо таблица растёт, либо вот ты запись изменяешь, удаляешь, он опять там перестраивается и происходит.
256: Изменении. Ну, короче, он теряет свою эффективность. Угу. Ну вот понятно, то, что он, бывает, замедляется. Я просто вот до конца не мог довести как бы, свою мысль до этого, до ума.
257: То, что при записях, то, что индексы, они только замедляют, это с оптимизацией запросов сталкивался, я так понимаю, да. Ну да, да.
258: Чем эксплейн от эксплейн айс отличается? Я слышал, ты говорил про эксплейн. А вот есть explain, а есть explain, онлайс. Ну, по сути, вот эксплейн, он у нас получается.
259: Показывает, грубо говоря, ну, план как раз-таки выполнения запросов, да, эксплей Лайс.
260: Пытаюсь вспомнить.
261: А, ну да, ну вот у нас, блин.
262: Сейчас я пытаюсь вспомнить, вроде бы explain, explain, просто он вроде бы только статистику загружает.
263: Ну да, то есть пытаюсь вспомнить, он, по моему, вообще все загружает, да, там так и есть. Это менее детальный, уже больше, более деталей, там более всяких разных.
264: Чтоб посмотреть и план запроса, и цену запроса, все что угодно. Вот что самое худшее, что можно увидеть в плане запроса, как думаешь?
265: Самое худшее, да.
266: Ну, самое худшее.
267: Не знаю.
268: Прям так сразу не идёт в голову. Ну просто медленный какой мега, медленный запрос? Ну, это такой вопрос немного с подвохом. Ну, не прям, конечно, когда есть некоторые, кто пишет.
269: Select all и происходит там такой как параметр full scan scan всей таблицы вот это самое плохое что можно увидеть уже этого нету потому что накладно если
270: Кто-то напишет, где это все лето, это так и останется, а таблица то может с течением времени то как бы расти и paul появляться и все на свете. И вот это будет интересно да, очень будет интересно как вообще.
271: В целом, можно оптимизировать запрос, ну, за исключением индекса. Че можно ещё сделать? Че можно ещё сделать? Ну, пройтись, в принципе, по запросам, да, там.
272: Ну, избегать селект, то есть, ну, там, сам, ну, избегать селект, ол, как раз-таки, то есть, выбирать там, самые необходимые столбцы, там и так далее. Можно оптимизировать какие-то эти, допустим, условия там.
273: С джоинами там, с условиями какими-то, да, возможно, то есть там
274: Ну, вроде бы это, кстати, влияет. Там можно равенство вместо неравенства использовать, где, возможно, вроде бы это влияет. Я могу ошибаться.
275: Ну, лимит, кстати, тоже надо, наверное, использовать. То есть, ну, контролировать какое-то вообще количество строк, ну, подзапросов избегать, да, то есть, менять там подзапросы, где можно там.
276: Соединить, допустим, таблицу. Ну как вообще можно от джоинов избавиться? Че можно сделать?
277: От джоинов избавиться. Ну да, к примеру, там какой-нибудь джоин, там, с какой-то крупной таблицей, там как от него можно избавиться, если тебе там надо, я не знаю, 1 поле из другой.
278: Избавиться прям.
279: К Такому прибегает редко, но это имеет быть.
280: Блин, так опять в голову мне сразу не лезет. А есть такое понятие, как денормализация базы данных. То есть можно пожертвовать каким-то 1 полем, перенести его в эту таблицу текущую, чтобы избавиться от
281: Вот есть такое. А почему, говоришь, избавиться от каких-нибудь подзапросов? Есть такая штука? Называет кт команд тейбл экспрешн слышал про такое? Угу. Слышал. Что это такое? Это у нас.
282: Такой, типа, временный, как бы именованный результат, да, как бы определённый запросе, как бы, с помощью, там, with, там, не че то там так вот там как раз-таки, да, вот можно, ну вот почему наоборот.
283: Такие штуки же в каком-то большом, к примеру, запросе, который тебе нужно оптимизировать, будут даже вполне лучше, потому что есть места кода узкие, которые, к примеру, в Эскель, ты там одно и то же будешь делать несколько раз. Но ты можешь эту часть вынести. Вот, к примеру,
284: Угу. И потом дальше по коду, там её использовать, просто из неё брать какие-то вот по производительности, на самом деле, вот между ними, не знаю, как. То есть, понятно, что, допустим, та же самая тэшка, она вот, ну, какую-то читаемость кода там придаёт, да?
285: Сложные вопросы там позволяет разбивать как бы на логические какие-то части ну а смотри к примеру у тебя будет селект а внутри него будет ещё 1 select с какими-то полями и дальше ниже ещё будет такой же select select ну к примеру кто-нибудь Зайде.
286: Поменяет в 1 селекте, там ему больше полей надо будет выбрать, а в другом забудет или там что-то такое. Угу. И читать читабельность хуже будет, потому что он у тебя будет разросшийся там какой-нибудь запрос. Угу.
287: Да, да.
288: Так, че ещё? Давай про транзакции поговорим. Что такое вообще транзакция и какие у неё есть свойства 4 свойства транзакции, есть acid, атомарность, согласованность, изоляция и долговечность.
289: Там как бы атомарность, как бы понятно, выполняется полностью, либо вообще не выполняется согласованность. Это у нас, ну, транзакция, как бы, она должна из 1 хорошего состояния как бы в другое переводить.
290: Изоляция, как бы, это когда у нас, соответственно, да, там разные транзакции как бы не видят других транзакций до завершения, как бы, ну и долговечность то, что у нас должны, как должна, как бы, транзакция сохраняться, там даже
291: При каких-то сбоях системы, допустим, да, там и так далее. Угу. А как откатить транзакцию можно робек? Угу. Окей. С представлениями не сталкивался.
292: Ну, в работе прям особо не сталкивался, но че то у нас, я помню, было у нас на проекте вроде бы, то есть я примерно понимаю то, что вьюхи это вот эти, типа, как эти.
293: Ну, типа, там виртуальная таблица. Угу. Там, которая, ну вот секрет, запрос мы выполнили. Вот виртуальная таблица, как раз-таки она там не хранится сама. А представляет, ну да, способ просмотра как бы данных даёт.
294: Вот. Ну, ну да, да. То есть она основана на каком-то запросе.
295: Как вообще думаешь, какие у неё есть плюшки плюсы?
296: Плюшки. Ну, она быстрая наверняка, да, то есть, ну, чисто в теории, конечно, да, если она там особо не меняется, мы с ней чисто там берём данные, наверное, можно
297: Ещё какие-нибудь шлюшки?
298: Ну фиг знает, ну.
299: Обновлять её, наверное, часто надо, да, в целом, нет, ну там есть просто такие хорошие вещи, когда ты можешь конкретному пользователю ограничивать какие-нибудь права доступа, то есть
300: Ему, к примеру, не на всю таблицу, а только на какую-то часть. Плюс, короче, ты можешь разграничивать кодовую базу и вот ту, что отображается, есть разделение.
301: Из такого вот, как думаешь вообще, можно ли обновить данные через представление в таблице?
302: И когда это вообще возможно. Ну то есть основное.
303: Изменить данные при в самом представлении можно обновить, да, данные через представление, то есть не в таблице, а через само представление.
304: Блин, ну если этот вопрос имеет место быть, наверное, можно, но в каких-то мега редких случаях, ну да, в каких, как думаешь, как это можно сделать?
305: Изменить через представление. Ну то есть, допустим, вот у нас, да, ну да, то есть, я не знаю, там какая-нибудь таблица, которая есть, там, не знаю, зарплатная, не
306: Есть какая-нибудь сумма зарплатная? А че там с ларри, допустим, поле? Ну, по сути, наверное, да, будет уж изменяться. Допустим, у нас там есть какая-то простая вьюха, да, на неё, наверное, так.
307: Можно обновлять там через insert какой-нибудь апдейт, все остальное.
308: Можно, да, через update, но это, короче, можно только если представление основано на какой-то 1 таблице, и там не будет, короче, каких-то сложных вычислений или агрегаций, то тогда да, такое можно делать. А в целом, если что-то более глобальное,
309: Там Джой, ещё че то там есть, и если, типа сложный какой-то, да, сложная какая-то вьюха, да, сложный у тебя так не получится, короче, да, понял.
310: Раз с, по, ещё больше работал. Есть такая штука, как наследование таблиц, как вот она работает в ооо, не знаю, слышал про такое? Нет. Наследование таблиц. Угу.
311: Как она работает? Она вроде по-английски, че то там звучит как
312: Inheritance, че то такое. Ну по моему я че то про это читал, да, то, что там можно вроде бы, ну типа можно создать таблицу, вроде которая как бы наследует как бы структуру данной другой таблицы, как бы и здесь вот.
313: Идея как раз-таки в этой иерархии, то есть. Угу. Ну да, таблица может наследовать там какие-то структуры, атрибуты, свойства родительской как раз. А может ли наследоваться больше, чем от 1 таблицы?
314: Подумаешь.
315: От 1 таблицы или нет?
316: Думаю, что нет.
317: Блин, не знаю, честно. Ну, вообще, короче, можно, т, такая штука, типа, если в определениях там родительских дочерних таблиц стоит столбцы с 1 именем, то как раз эти столбцы будут объединены и
318: Дочерний окажется только как раз 1 столбец, поэтому
319: Должны, короче, объединение, там, таблиц, ещё иметь одинаковые вот эти типы данных. Угу. То понял. Вот. Окей. Ну и так, ещё вопросик с плюсиком. Слышал про такой журнал метод журналирования?
320: Как вот, то есть логин, не знаю, слышал про такое, как ещё раз называется?
321: Во, то есть w a l, там white had логин есть такая штука, как метод журналирования такой не не слышал ну окей, короче, про неё почитай, такая полезная штука, вкратце скажу, это вещь, которая
322: При каждом изменении записывается в лог. Вот.
323: Записывать лог перед их применением к базе данных. То есть хорошая штука, когда будешь восстанавливать что-то там из бд при каких-то сбоях. Вот. То есть вот этот журнал, короче, это журналирования повышает, по сути, там надёж
324: Как раз восстановление после Сбоев. Ну, есть минусики, там, типа, может замедлять запись, как раз там, дополнительное логирование. Угу. Ну, там тоже про это можно почитать. Есть, короче, настроечки всякие разные. Ну, типа, суть сначала то, что журнал, да, создаётся.
325: Данные, типа, да, да, да. Угу. Понял.
326: Прикольно. Так, давай немножко ещё сейчас немножко.
327: Сейчас ссылочку пришлю сюда в чат, там как зайдёшь, скажи.
328: До открыт.
329: Угу. Так, зашёл, да?
330: Так, смотри, вот задачка на скилл.
331: Короче, нужно написать запросик. Ну прям там можешь ниже писать, вот не суть в целом нужно, короче, для каждого типа вывести 2 по цене товар. Вот. То есть есть разные типы, он арбузы, дыни, типа такого вот для каждого вот это.
332: Tip нужно сгруппировать там, по сути и вывести 2 по цене товар по возрастанию или убыванию. Без разницы, короче.
333: Так.
334: Нужно для каждого типа вывести 2 по цене товар. Угу. Ну, если там че то нужно взять, посмотреть, по, как он по синтаксису, там вообще без проблем.
335: Задам такой вопрос, если наводящие на решение, слышал про оконные функции, ну, вроде, да, про оконки че то помню. Ну, эти то что
336: Как они?
337: Ну, типа, какие вообще они бывают? Че помнишь, из законных функций? Ну, то, что это, короче, функции вроде как, которые выполняют там эти вычисления, там по набору.
338: Строк че то пытаюсь вспомнить.
339: Ну, ну, короче, по сути это вот функции, которые вычисляют как бы по какому-то набору строк, как бы связанные с какой-то вот текущей строкой. Как это сформулировать?
340: Ну, короче, это вот эти всякие эти, там сумм, аккаунт всякие, нет, это агрегатные функции, а есть оконные, это типа.
341: Row number ранг партитишн про такие слышал.
342: Че то, по моему нет. Оконные функции. По сути, это вот, к примеру, если использовать, то он может заменять групбай, но в то же время вот эту
343: Сгруппированную группу он ещё будет нумеровать с помощью каких-то определённых функций оконных. Ну это как раз как бы просто задачка сюда есть быть вообще под это под оконные функции.
344: Можно, конечно, по другому ещё.
345: Вот конкретно эта задачка, типа, под подоконной, да? Ну, она, да, больше подходит под оконный функция, под определённую. Ну так можно и без этого чуть просто мудряне. Если просто эти вещи знаешь, то тебе будет легко.
346: Решить. Блин, ну я с оконными не прям.
347: Я вроде в теории че то помню такое, возможно, читал, но не особо применял на самом деле. Че тут у нас?
348: Так.
349: Нужно для каждого типа вывести 2 по цене товар. То есть мы берём селектим, таблицу, выводим отсюда. Че?
350: Ну, конкретно здесь вот оконную можно, да, это идеальный вариант будет.
351: Вообще да.
352: То есть мы, ну, как будем? То есть мы подзапрос, по сути, сделаем и там.
353: Ну, можно под запрос, можно через this там, че-нибудь, как это там тоже.
354: Ну, есть просто, по сути, там 1 строчка, которая много чего решает, как связано с оконной функцией, так?
355: Типа мы здесь можем, наверное.
356: Блин, как оконная функция конечно пишется уже вообще подзабыл партитишн можешь подсказку дать посмотреть че такое row number, как
357: Как её используют?
358: Угу. Ща.
359: С hack собесов точка, ком, ичар полюбит вас тайком.
360: Row number wrong number это по сути да, она присваивает уникальный номер получается каждой строке в пределах типа какого-то ну да, ро намбер там over и дальше там выражение.
361: Ещё пишет это, как его называют допустим raw намбер как оно там пишется.
362: Но намбер.
363: Она у нас, если она уникальная, под каждый номер строки выбирает.
364: В пределах 1 типа, то есть мы берём, допустим, этот row number.
365: В пределах 1 типа, то есть мы можем
366: Как там party?
367: Угу. Наверное, сделаем. Здесь. Мы выбираем как раз-таки этого. Тип выбираем для каждого типа, то. Угу.
368: Здесь мы выбираем, да, тип?
369: Че у нас там надо?
370: Ну, по цене кос.
371: По цене, что? Ну, это уже здесь Косс надо написать. Ты же сортируешь, ворд.
372: А ну бай тай ордер бай кост ага.
373: Так, типа, наверное.
374: И вот получается у нас raw намбер он вычисляет, присваивает уникальный номер у нас выбирается так и че дальше то как надо сделать?
375: То есть, а дальше мы просто, наверное, какую, какая запись нам нужна? Такую мы просто и, наверное, по айдишке можем вывести.
376: Ну только нужно здесь дописать лес типа так alice да по любому нужен.
377: Делаем.
378: Так, ну здесь все-таки, наверное, продукт надо указать, это понятно. Ну, все правильно ты начал.
379: Products. Это мы закрываем получается и выбираем уже какая запись нам нужна просто
380: Ну да, только вот здесь тогда надо добавить.
381: Да то, что ты р н написал.
382: Ты же будешь обращаться к этому. Угу. Окей. Ну, в целом, да, то есть вот примерно что-то такое так и должно быть.
383: Так, и давай ещё.
384: Сейчас поменяем немножко, чтоб вид хотя бы, смотри, здесь, короче, кусочек кода, типа как будто из микросервиса, микросервис по работе с корзиной, с корзиной, которую там, ну, например, продукты кладут. Вот.
385: А здесь на рефакторинг, ты позна, посмотри, ознакомься здесь чисто на пообщаться, что, где, че изменить.
386: Вот, можно так сказать. Короче, в принципе, посмотреть сначала, да. Ну да, наверное, лучше все-таки посмотрим, а потом просто пообщаемся.
387: Компании карт сервис.
388: Синхронный у нас.
389: Product id.
390: Блин, оконные функции не дают мне покоя. Че то я так, этот, прям вылетело. Короче, я с ними вообще не работал, че то затупил.
391: Ну, давай прям вот по порядку пойдём. Вот где консервис ниже, там приватные поля, то ли там, ок.
392: Так, ща. Ну, короче, если.
393: Справа карт сервис прайс сервис репозитория аккаунт.
394: Ну че здесь можно сделать, да? Угу. То есть самое, наверное, че хотелось бы это интерфейсы создать, да, для каждого сервиса. Угу. Какую-то модульность хотя бы улучшит.
395: Как-то вот вынести, то есть, допустим, добавить там, ну там, интерфейс, допустим, для корзины, да, айка сервис, там какой-нибудь добавить с его этими методами, там для прайс сервиса тоже самое можно сделать для идентификашен. Ну в принцип,
396: Интерфейс можно посоздавать. Так ещё.
397: Ну, какую-то общую логику можно, наверное, вынести.
398: У нас здесь по общей логике вообще что есть? Надо сейчас посмотреть. Ну а как же диай?
399: В плане, в плане, ну, использовать здесь вот видишь, ну, типа, как будто нет реализации. То есть, понятное дело, что здесь нужны интерфейс.
400: А дальше вот конструкторе, ну да, ну вот получается, можно создать, допустим, интерфейсы вообще под каждый сервис. Дальше можно там, не знаю, вот.
401: Ну по по логическому какому-то тоже надо, наверное как-то их разделить то есть допустим, мы там насоздаем каждому этому интерфейсу.
402: Я просто пытаюсь подумать.
403: Ну ладно, понятно. Пойдём дальше. Давай вот здесь посмотрим метод, все ли здесь ок или не ок.
404: Который на calculate total price, можно так сказать, у total price.
405: Угу. Вижу, мартиал прайс какой-то прайс ради.
406: Так, шоп.
407: Угу.
408: Вопрос, все ли окей в этом методе? Именно вот который калькуля с этим, с асинком, да? Угу. Ну, он выглядит как-то вообще странненько, странненько.
409: Он у нас что делает по сути?
410: Просто не очень понимаю, что он делает вообще. Он у нас получается продукт стати берет прайс, таск.
411: Потом возвращают.
412: Не очень понятно вообще, что он делает как-то. Ну, смотри, мы получаем айдишники продуктов по айдишнику пользователя. Это как заглушка такая. Угу. Дальше по
413: Айдишников. Мы про сервис получаем цену для каждого продукта.
414: Только вот здесь вот цена у нас формируется в тасках, то есть мы возвращаем таски.
415: А потом есть такая функция Тасков. Н такую использовал вообще приходилось? Нет.
416: Честно, не помню, как будто больше нет. Ну, Тасканова это такая штука, которую можешь передать не 1 Таску, а сразу несколько.
417: И вот это вот выполнение будет происходить до того момента, пока все таски не выполнятся.
418: Он вернёт там уже цены. Суть здесь в том, что здесь нужно как-то это нужно было написать, типа, потому что нужен результат.
419: Ну, то есть, к примеру, резалт.
420: Rises. Здесь будет результат цен, после чего потом можно вот здесь вот потому что нельзя возвращать как-то резалт. У тебя будет ошибка.
421: По сути это нужно сделать. Просто было вот так и все же не может куда-то там в никуда заветится. Ну да, да, да, понял. Поэтому вот пойдём ещё подальше. Вот ещё 1 метод.
422: Для создания заказа. Мой кордер. Че вообще здесь тоже можно сделать? Здесь как бы много всяких вещей, что здесь
423: Нужно.
424: Рекордер.
425: Wait wait.
426: Если ещё че то, ну, я вижу, асинк войд сразу триггер. Да, на че надо изменить? Ну, нужно этот, на, так, наверное, мы же че, возвраща.
427: Угу. Ну, а в принципе, бетт практисом считается, потому что там этот, ну, типа, ошибки нельзя отловить никак, как я помню, вроде. Угу. Ну да, да. Ну.
428: Натан, все верно, давай дальше.
429: Так, че тут ещё есть? Смотри пообширнее вообще, нормальное ли явление. То есть находиться как будто в микросервисе карт сервис, ходить в репозиторий, как будто другого микросервиса. Вот возьми то, что репозиторий это
430: По хорошему, должно быть, как будто бы в другом микросервисе, там каком-нибудь.
431: Аккаунт сервис по хорошему. Не, ну если здесь вообще вот так все, если, допустим, пошире посмотреть, да, то есть интерфейсы мы, допустим, вынесли, да, то есть класс, допустим, создаём карт сервис полностью как бы
432: Здесь уже свойства создаём, допустим, там с репозиторием тем же самым как бы в конструкторе верно, все можно сделать будет потом уже отдельно по методам пройтись все классы как бы связанные с сервисами, допустим, там прайс сервис там
433: Все остальное вынести как бы естественно, в новые классы.
434: Так, ну допустим, допустим, у нас здесь будет аккаунт сервиса.
435: Че ещё тут не хватает?
436: Аккаунт сервиса или че ты сказал? Я не услышал. Не, вообще в целом. Че здесь в методе ещё? Ну?
437: Что ещё сделать? Метод да создания заказа? Че, здесь не хватает самого главного?
438: Ну, сохранение, наверное, какого-то птшку.
439: Это где мы делаем? Да? Ну это вот здесь будет просто здесь тоже репозиторий. То, что неправильно по слоям здесь должен быть, говоришь, во сервис должен быть, в котором уже должна быть своя та.
440: Свой репозиторий, в котором будет там создаваться заказ. Угу.
441: Ну, короче, по общим скорее, то есть все, все вынести по отдельным классам, по вот этим, допустим, репозитории все там.
442: Все сервисы тоже по отдельным классам как бы создать интерфейсы. Ну окей, вынесли, да? Ну че, здесь самого главного то не хватает.
443: Конкретно где-то или что-то ну в этом методе, да, есть.
444: Ну, вернуть, наверное.
445: Нет, ну смотри, ну во первых, к примеру, то, что здесь несколько обращений в тот же самый будет аккаунт сервис, вот это вообще стоит объединить и вынести куда-то в 1 метод, который там будет.
446: Объединять что-то 1, вот этот вот баланс и все прочее.
447: Во вторых, вот этот вот баланс, который есть, если посмотреть на это. Ну, то есть, к примеру, это вот так будет. Угу. Здесь вот, во первых, вот не хватает
448: Если как есть использовать. Во вторых, если мы вот здесь обновим баланс, а дальше будем создавать заказ, если здесь внутри че то шлёпнется, то получается мы баланс то у клиента обновим, а заказ не
449: Создастся, чтоб такого не произошло. Че нужно сделать?
450: Чтобы не шлёпнулась, ну, чтобы не шлёпнулась ошибок какой-нибудь сделать.
451: Ну, здесь, короче, не хватает транзакционности, здесь нужна транзакция, которая будет смотреть, если у тебя что-то упадёт и, как говорится, будет exception, то нужно чтобы откатить транзакцию, вернуть баланс.
452: Клиенту обратно, а транзакционность с помощью чего можно сделать
453: Какими средствами?
454: Все из головы вылетело.
455: Прям.
456: Ну, базовый, когда ты там че то говорил через dp контекст можно там сделать ну да, да, через dp контекст.
457: Ещё можно через, если использовать фрамворк, то можно использовать unit of work. Механизм, через который тоже можно рисовать. Угу.
458: Когда-то ты в начале Разговоров там по паттернам. Угу. Про 1 паттерн говорил, который тоже можно использовать, но при определённых условиях.
459: Есть паттерн, который ты называл. Сага называется. Угу.
460: Вот, если по правильному разделять, то есть вот этот аккаунт сервис, ордер, сервис, это отдельные микросервисы.
461: Будут, то можно использовать как раз этот паттерн, чтобы у каждого под капотом своя бд была. Тогда это можно реализовать. Вот.
462: А как, к примеру, быть с нотификацией? Если нам точно нужно, чтобы было сообщение доставлено, че можно использовать, то мы будем точно гарантировать клиенту, что мы доставим это сообщение 100%.
463: По бизнес логике.
464: Ещё 1 паттерн, какой бокс?
465: Так, окей, от box подходит. А че ещё можно?
466: Ну, ты про это в целом не сказал, что не использовал. Короче, сюда ещё можно кафку заиспользовать. Угу. Потому что kafka может использовать, работать с такими вещами, как будто, если сейчас с 1 раза что-то не отправится.
467: Там можно повторную отправку сообщений сделать, там какое-то определённое количество условий можно написать, короче, как с этим работает, она гибкая под это дело. Вот. Угу. Понял.
468: Ну, и в целом, как бы, у меня, наверное, вопросов больше нет. Если че то у тебя осталось, задавай, спрашивай. Угу. Ну, по компании, только если там вкратце можно там объяснить, там, че за проект, допустим, че за стек, в принципе, вопросов тоже пока не возникает.
469: Ну, по компании у нас свой проект 1, который мы все разрабатываем. То есть сервис командировок, короче, много разных команд. У каждой своя доменная какая-то область, за которую они отвечают, вот по стеку.
470: Есть монолитная часть, которую распиливают монолит, там на for 4 7 с базой. Вот его распиливают, выносят базу свои как раз области микросервисы, микросервисы у нас есть на
471: Есть на гошке, вот, я не знаю, порядка, наверное, 300, может быть, больше уже сейчас вот ещё из баз используется, конечно же. Ну, микросервисы, оо, вот есть ещё также бдшки, которые
472: Используется mongo redis clickhouse есть, используется, общаются через кафку в основном сейчас практически наверное ну паста ещё и kafka вот из такого.
473: Че ещё то? Че ещё есть всякие средства типа там Логов посмотреть типа grafana которые там можно там разные всякие дашбордики за сиайсиди у нас включают конкретно девопсы все это через
474: Jenkins разные сборки, ну и там плюс там за каждой командой тестовое окружение закреплены ну разработка на тестовых потом угу, prod prod короче в таком процессе, если вкратце команды большие.
475: Да, ну, в среднем, наверное, человек по
476: Человек по 5 7, мне кажется, не особо крупных, потому что крупными не очень удобно управлять. Ну, обычно как бэков больше. Вот на команду обычно идёт тестер фронт, плюс там или product owner.
477: Мастер, потому что все у нас по спринтам двухнедельным. Угу. С планированием ретро роминга. Да, да, у нас также было так. Ну вот, в целом, вот в таком контексте. Угу. Все понятно. Тогда пока что вопросов нету.
478: Если что, на связи будем. Угу. Да, я прошу прощения, чуть позже подключилась Ярослав, у меня прям к тебе парочка вопросов будет. Ты же уже не работаешь, правильно? Да? Да. Угу.
479: То есть, если получается так, что мы договариваемся, ты уже сможешь в ближайшее время приступить? Да? Да, сразу. Угу. Есть у тебя какие-то ещё предложения, кроме нас, может быть, офферы собеседования, финальные этапы?
480: Был 1 over, но там компания, ну, проект мне не особо понравился и была ещё такая там штука с этим. Ну, которая время, короче, отслеживает. Работы там, не помню, вот там тоже туда сказал то, что не хочет.
481: Что что-то этого, да? Ну, тайм трекер, да, по моему, че то такое. Угу. Вот. А в остальном, ну, так получилось то, что после увольнения, вот, я там месяц отдыхать ездил, вот, и месяц, по сути, ищу работу. Вот. И пока что.
482: Не особо много этих предложений. Вот.
483: Угу, услышала. Слушай, а можешь поделиться? Вот ты говоришь, не совсем проект понравился, что за проект? Чем он не понравился тебе? Ну, скорее не проект, а stuck. То есть там просто был монолит супер.
484: Legacy, код и сказали то, что вот нужно будет там заниматься больше оптимизацией его поддержкой, как бы, мне просто, я пока что отказал, оно как бы просто висит. Я как бы сказал, что пока думаю, пока прохожу собеседование, у меня там их на неделе.
485: Если очем много будет. Вот. Поэтому. Угу. Угу. Окей, поняла.
486: Так, ну в целом, да, у меня тоже пока все, я сориентирую тебя по срокам. Ну, у нас решение, в общем то, принимается недолго. Я думаю, что там понедельник, край, вторник, я к тебе уже вернусь с ответом. Да, хорошо, если
487: Ага, если у тебя возникнут какие-то вопросы, ну, я на связи, конечно же, да, если что, пиши. Угу. Вот. А так, да, тебе большое спасибо за уделённое время. Хорошего тебе вечера. Ну и выход, да, вам большое спасибо. Спасибо, Илья. Очень много.
488: Интересных вопросов было, которые я обязательно изучу после собеседования. Все, спасибо вам. Хорошего вечера. Все, пока, пока.