0: Ещё какие-то моменты рассказать? Нет, нет, ну вообще было бы интересно послушать, как у вас в принципе, про
1: Ходит рабочий день сотрудника. Ну вот условно сел он работать и до конца рабочего дня, как примерно он происходит? Ну, как происходит, открывает он у себя список, скажем так, задач. Угу.
2: И начинает их делать по мере выполнения задаёт эти задачи. У нас недетерминировано время начала, то есть можно в принципе сдвигать как то как-то манипулировать своим графиком.
3: Это не выполняется, но за результат мы спрашиваем задачи. Надо сдавать задачи надо сдавать. Правильно? Понятно? Ну, тогда вопросов нет. То есть ничего такого космического нет. Осо.
4: По стеку. Ну, в принципе, у нас написано вакансии. Читали, наверное. Угу. Да, да. Читал. Угу. Так, ну, тогда перейдём к вашей технической части. Угу.
5: Вот вы в епаме, по сути, сейчас работаете. Епам в своё время тестировал на входе сотрудников и выдавал им прям оценочный лист. Угу. Это было 10 лет назад. Сейчас, честно, не знаю как.
6: То делают, не делают. И если они это делали, что они выдали вам
7: Ну нет, у меня такого не было. Я проходил не совсем напрямую в епам. Я перед тем, как, ну вот я знал, что буду переезжать, собственно, работая на 1 работе, ну и
8: Я примерно с мая месяца, если не ошибаюсь, или с апреля пошёл в епам кампус. Это внутренние курсы епама. Вот у меня через них незадолго до этого хороший друг программист также, ну, прошёл и трудоустроился в епам. Ну и я пришёл.
9: Прошёл курсы, собственно, в конце сдал экзамен, после чего меня позвали на собеседование уже по прохождению собеседования, трудоустроили как-то так. А по прохождению собеседования вам не дали какого-то оценочного листа? Нет, нет, ну меня, мне дали список докум.
10: Просто на, ну, подпись понятно. Значит, они эту тему убрали. Ладно, ну прикольно было в своё время. Хорошо, хорошо. Тогда поедем по вашему выполненному тестовому.
11: Значит, вы, по сути, здесь?
12: Зачем-то использовали дикшенери. Можете объяснить, зачем? Честно говоря, уже даже не помню, про какое тестовое речь, потому что несколько за последние дни пришёл. Ну, может, если не ошибаюсь, там было можно.
13: Сейчас, давайте открой про инвентарь. Там была такая задачка про инвентарь. А, да, было 3 класса.
14: Кажется, нужно было инкапсуляцию соблюсти. Ну да. 2, 2. Угу. Угу. Так, ещё раз, какой вопрос, собственно, какой? Ну, вы использовали, переделали лист на дишен.
15: Интересно стало, зачем так открыл в классе инвентаре, да?
16: Угу. Ну да, просто чтобы обеспечить быстрый доступ для добавления обновления предметов по дикше, но немножко будет быстрее, так как это по ключу.
17: Ну, то есть для поиска. Ну да, да. Угу. Ну, то есть, давайте, если по асимптотике проходиться, по времени поиска, для дикшн, для дикшнари будет от 1, ну и добавление, обновление предметов по ключу, так как
18: Реагирует, ну, он внутри себя генерирует хэш таблицу, в отличие от листа. То есть, если б оставался лист, скорость была бы отн. И, ну, в определённых случаях это занимало бы много времени, то есть
19: Оптимальный вариант дикшн использовать в данном случае считаю а почему не кокаин дикшн?
20: Почему не канкаре дикшн, если уж дикшенери?
21: Ну вот на этот вопрос не отвечу. Я, насколько помню, посчитал, что здесь конкарент не нужен, если не ошибаюсь, там 1 из заданий, вроде у вас было обеспечить потокобезопасность, да, последнее, вот в рамках него, возможно, стоило я достаточно в спешке.
22: Рабочего дня, где-то минут 20 это задание писал. Ну так что, ну да, да, здесь бы подошёл также и конка дикшн вполне себе. А за счёт чего кондишен? Потокобезопасен, знаете?
23: Ну, в целом, он относится к, вот, если не ошибаюсь, называется пакет коллекшнс, конкарент или конкарент коллекшнс. Угу. Он.
24: В целом, в целом конкурентные коллекции в сишарпе не так много помимо дикшн, там есть cue stack, кажется ещё какая-то 4, ну они используют внутренние блокировки для управления доступом к элементам, ну и
25: Предотвращают таким образом конфликты при одновременном доступе. То есть, если у нас из 2 потоков попробуют обратиться к 1 коллекции, конфликт не возникнет.
26: Угу. Как бы для безопасности. А какие ещё вообще варианты есть? Обеспечить поток безопасности? Ну вот кроме лока и кроме Канарин, коллекции специализированных, ну, в целом,
27: Ну я сразу подумал про lock, но если кроме лока, ну ну вы lock уже использовали, ну да, конечно мютексы и семафоры конечно давайте тогда расширим вопрос, кроме блокировок каких-либо потом.
28: Потому что семафор это тоже относится к блокировкам. Ага. Как решать вопрос, не блокируя, скажем так.
29: Так, ну есть иммутабл объекты, ну, то есть, неизменяемые какие-нибудь, если не ошибаюсь, есть имутбл лис, например, тот же и в целом иммутабельные коллекции. Угу.
30: Ну, никогда не работали. 1, 1 раз работал, они очень редко на самом деле встречаются. Вот. Но рассказать подробнее могу, на самом деле, расскажите интересно про
31: Табельные коллекции, да? Угу. Есть. Ну, в целом, имутбл с английского, ну, переводится как, ну, типа, неизменяемый, ну, то бишь, иммутабельные коллек.
32: Это просто коллекции, внутри которых однотипные неизменяемые объекты. Ну и это исключает возможность там какого-то изменения состояния после
33: Даже.
34: Ну вот, например, случится гонка данных у нас. Угу. После создания коллекции, в случае, если она будет, это может как раз-таки предотвратить возможные гонки. А что вообще такое gone?
35: Данных. Само такое определение довольно забавный термин, что он под собой подразумевает? Ну да, гонка данных это когда просто, ну вот в многопоточном приложении у нас несколько потоков.
36: 2 или несколько потоков просто пытаются одновременно получить доступ к 1, каким, каким-то 1 данным. Ну то бишь вот у нас происходит такая ситуация, что мы запускаем получить доступ. Угу. Получить
37: Доступ, ну, допустим, и при этом изменить одни и те же данные, а это может уже привести к каким-то непредсказуемым результатам. То есть я вот пример хотел привести, у нас, допустим, запускается приложение, в нём 3 потока обращаются к 1 коллекции. 1
38: Запуск, там 1 успел обратиться поток 2, там 2 запуск успел обратиться поток 3, и там каждый из них как-либо изменяет данные внутри коллекции по итогу, если поток 2 обратился раньше для потока 3 уже, ну, типа иной случай взаимодействия с этой коллекцией, то есть, ну, получится.
39: Что программа работает непредсказуемо и, ну, от этого огромное количество проблем может произойти в будущем, ну, в том числе, на самом деле, критичных.
40: Вот, неоднократно с этим сталкивался. Это очень большая проблема, когда, особенно её, ну, когда ты наверняка, тем более не знаешь, что это была гонка данных, вот её именно, чтоб продебажить, выявить, если это где-то глубоко.
41: В стектрейсе кода довольно сложно. Ну, то есть, на это прям, ну, тратится время разработчиков, как собесов точка ком, собес станет пустяком. Ну, гонка, да, это печальное событие. Вот. Ну, то есть, а дедлок, дедлок это когда
42: 1 поток пытается обратиться, ну, 1 поток ожидает окончания. Ну вот у нас 2 потока поток 1 поток 2. 1 поток ожидает, пока закончит работать поток 2, а поток 2 ожидает, пока закончит работать поток 1 и они бесконечно друг друга.
43: И, ну, единственный способ или уничтожить 1 из них от этого избавиться, или программу там перезапустить, в зависимости от того, где-то, ну, то есть, повисли и висим, да, на старте, да.
44: Печальная ситуация, да, очень так хорошо. А вот сейчас внезапный вопрос задам. Какой из эксепшенов не ловит трай кетчем?
45: Try catch finally имеется ввиду ну ну да, try catch ну то есть в принципе мы же как ставим трайкеч и думаем, что, ну как бы exception у нас там поймают, у нас есть такое поня.
46: Да, я даже не уверен, что все шарпи, скорее всего, в программировании, как проверяемые и непроверяемые исключения. И вот как раз-таки непроверяемые исключения, все не ловятся трекете, ну, например, stack overflow экзепшен, когда переполняется стек, он мало того,
47: Что трек в ней ловится он даже ну в принципе не попадёт в тот же блок finally, то есть если в блоке try случится стек оверфлоу, блок finally не сработает программа просто завершится или out of memory тоже вот в ту же сторону а по какой причи?
48: Например, вот стековерфлоу у нас так себя гадко ведёт, что мы его даже поймать не можем, потому что происходит переполнение стека. Ну то есть сервер перегружен буквально слишком мно.
49: Запросов происходит в 1 момент и, ну просто оперативной памяти, выделенной под приложение, не хватило, чтобы сайт дальше работал. Вот. Нет, подождите, вы сейчас говорите про ооо, ну а memory
50: То-то не по этой теме. Ну, вроде как, ну, пример вот прям супер простой вызвать стек оверфлоу, это, наверное, бесконечную рекурсию создать. Угу. Это выдаст именно stack overflow.
51: Ну, выдаст, да, у нас приложение упадёт, и все. И мы будем грустить и печалиться. Вопрос не в этом. Вопрос. Почему именно этот exception так себя ведёт? Почему он крашит приложение полностью? Почему мы не можем эту ситуацию как-то обрабо?
52: Так, потому что само приложение остановится, ну, чтобы оно как, ну, а почему оно остановится? Почему? Вот, например, переполнение Инта какого-нибудь? Да, вот, в принципе, ничего страшного, мы его ловим. Угу. Там ещё.
53: Что-нибудь там выход за границы коллекции, например. Ну тоже поймали эксепшен, окей, обработали его, ну то есть такого фатального, то не происходит ничего. Вот со стеком почему-то происходит. Почему? Ну это более критичная ошибка.
54: О переполнении памяти. Ну, типа, чтобы программа работала, должна быть память в стеке оперативная какая-то свободная для продолжения работы программы. Это ошибка о том, что память переполнилась. И, ну, сервер экстренно, собственно, завершает работу программы, чтобы
55: Не навредить себе. То есть то проблема с ресурсами. А что за стек такой, в котором надо память держать? Что это такое стек это область памяти для хранения локальных переменных.
56: Ну там параметров, каких-нибудь функций. А откуда она берётся? Он откуда берётся в плане, в приложении? Ну да, вот мы запускаем приложение. Вот откуда у нас взялся вот этот
57: Эта область, как она определяется и какого она вообще размера, кстати. Угу. Размера, кстати, если не ошибаюсь, около 100 мегабайт. Ну, там, в зависимости от, ну, в виндоусе, насколько помню.
58: Около того.
59: По поводу, откуда он берётся? Ну, у нас в целом при запуске приложения, ну, типа, приложение имеет определённые области памяти, в которых оно работает. Это стек куча. Ну, это куча, внутри которой, собственно, стек.
60: Куча используется для ну или hip по другому мы вот с коллегами больше если об этом говорим привыкли как hip называть, то бишь с английского, с русского я думаю корректнее будет куча ну вот да, да. То есть куча используется для того, чтобы динами
61: Выделять память. Объекты создаются в куче, там могут существовать до тех пор, пока на них есть какие-то ссылки, пока их не уничтожит гарбадж коллектор. Про него могу потом подробнее рассказать. Стек это, ну, как раз-таки он использует
62: Для хранения локальных переменных информации, там, о вызовах функций, они, ну вот, вот эта информация, она создаётся при запуске приложения. Вот условно запустилось приложение, вызвалась какая-то функция, она записалась, её вызов записался в stack, потом так, откуда стек взял?
63: Откуда он взялся?
64: Ну вот вы говорите терминами. Вот есть куча, есть видео и задачи с реальных собеседований на сайте хак собесов, точка ком. Хватит гадать, что вас ждёт на интервью. Переходите и получите преимущество перед другими кандидатами прямо сейчас. Да? Ну ладно.
65: По другому. Ну, где он создаётся, имеете ввиду? Ну, условно говоря, не совсем, где он создаётся, откуда он берётся у приложения именно вот, допустим, у вас есть компьютер, у него есть там 8 гигабайт, оперативы, ну, гигабайт.
66: Да, вы запускаете там, на этом компьютере своё приложение. Вот какую оперативу он возьмёт, откуда он её вообще возьмёт, эту оперативную память? Ну, под приложением, что из этой оперативной памяти будет стеком, что будет куча, как
67: Вообще работает. Ну да, я копаю глубже. Ну да, мне интересно, это же больше, насколько понимаю я, ну просто вот запускается приложение, под него выделяется определённая оперативная память, собственно.
68: Под приложение. Вот, да, да, да. Под приложение из ней эта оперативная часть делится на области, 1 из которых как раз-таки стек, ну, типа, чтоб приложение просто запустилось и работало. А кто выделяет эту память приложения? Операционная система, операционная система?
69: Ну и сам стек создаётся при 1 запуске программы, то бишь управляется как раз-таки системой, и в процессе жизни стек никак не изменяется. Да, что имеете ввиду под
70: Изме, имеете ввиду размер? Ну вот вы, да, размер сервер у вас запущен. Допустим, он работает, работает, работает. Вот в процессе его работы изменяется размер ставки или нет?
71: Ну, это управляется сборщиком мусора, если не ошибаюсь, а сборщик мусора работает со стеком.
72: Ну, смотрите, вот у нас память для приложения выделилась операционной системой, приложение запустилось. Угу. Ну вот как раз-таки.
73: Про изменение количества этой памяти, там вопрос, вот даже не помню.
74: Ну, каждый раз, ну, в общем, так глубоко вы не погружались, да? Ну, вот если логически рассуждать, у нас, когда вызываются и завершаются функции какие-либо или методы, каждый раз вызванное, состоя, ну, состояние, стака меняется.
75: Это новое состояние, новый фрейм в стек, завершение функции его удаляется, так что, ну, наверное, ну, нет, там я точно помню, что у стека фиксированный размер, что, ну вот, если не ошибаюсь, ну там что-то вроде 100 мегабайт выделенных, он может
76: Наверное, если он и может измениться, то если только где-то в конфигурации приложения это, ну то есть, подождите, подождите, вы хотите сказать, что вы запускаете любое дома приложение и у вас сразу хопа на 100 мегабайт, на стек. Это же неправда. Ну нет.
77: Нет, нет, не прав. Ну, я бы сказал, вот в рамках запуска, то есть во время работы программы размер стека нельзя увеличить, но в конфигурации приложений, то бишь перед запуском, можно это изменить, насколько я знаю.
78: Угу. Вот. Но я этого не делал ни разу. Угу. Ну, в общем, вы не знаете, что такое стек, на самом деле. Ладно. Ну.
79: До сюда уже дошли, и то неплохо. Так, поедем тогда чуть дальше, может быть, и не знаю. Ага, ага, давайте поговорим о том, чем
80: Отличается синхронность от параллельности, асинхронность от параллельности. Угу. Ну, для начала расскажу, что такое асинхронность, асинхронность или синхронность.
81: Асинхронность. Ну, асинкавейт и. Угу. Параллельность вообще одно и то же. Нет, нет, это не 1 и тоже. Ну, асинхронность это, ну, во первых, это друг другу не противоре.
82: Ну, то бишь асинхронность может быть и при параллельности. Асинхронность это когда мы, ну, условно пишем код. У нас, например, вызывается какой-нибудь метод, который, например, генерит что-то внутри себя.
83: И работать будет, ну, допустим, 15 хак собесов, точка ком эйчар полюбит вас тайком выполнить что-либо в программе дальше.
84: Собственно, если этот метод сделать асинхронным, подставить под этот вызов await, пока эти 15 секунд выполняются, может стек пойти дальше как раз-таки выполнить какие-то Зада.
85: И дождаться выполнения собственно 1. То есть это как-то есть идёт процесс, остановились, дали какую-то задачу, идёт процесс дальше. То есть это не что-то параллельное, параллельность это уже создание
86: Отдельных потоков под выполнение, ну там разных задач, которые могут прям одновременно что-то делать в окей. В рамках на этом хватит.
87: Так, вопрос тогда по поводу, по поводу лин кью, лин кью, знаете, да, я надеюсь, да. Угу. Работаю с ним. Постоянно работали с m дак.
88: Работали так а вот чем отличается лин кью, который используется в anti фрике от того же самого, по сути, линк ю, который используется в коллекция?
89: Есть вообще разница?
90: Да, есть. Ну, в 1 очередь линки, который для коллекции, если я даже не ошибаюсь, у него ж название есть отдельное какое-то, его не вспомню, но, в общем, ну, он выполняется в памяти, обрабатывается.
91: Данные, которые уже загружены в память, а к фреймворку все немножко посложнее, потому что там линку работает на стороне базы данных и он генерирует под капотом эскей запросы для полу.
92: Получение данных из бд, ну то бишь, ну мы же имеем, мы же имеем, по сути, тот же самый синтаксис, по большому счёту.
93: Но немножко разный вид работы под капотом, да, но синтаксис практически, да, разный вид работы под капотом. То есть в 1 случае это будет работа с коллекциями номера, в другом случае с акварил, если прям, точнее. Угу, угу.
94: Ну, я к этому подводил, да, рассказать. Хорошо, тогда немножко пропустим, но я спрошу немножко про другое, другую степень. Вот отличие, допустим, между лямбдой.
95: И дерево выражений.
96: Лямбда и деревом выражений. Угу. Ну, лямбда, это аннотация. Ну, лямбда это, ну, я привык это расшифровывать, как такое, что-то бишь, условно у нас какой-то inc, запрос, внутри которого лямбда.
97: Там условно икс лям такое, что и дальше какая-то функция. Ну то есть это и есть функция просто анонимная. То есть это как метод без названия, там какой-нибудь, который может быть передан как аргумент там или
98: Возвращён из другой функции. Ну он в целом очень сильно упрощает синтаксис в Шарпе. Это линк в основном и используется дерево выражений. Надо вспоминать. Ну это структура данных тоже, это
99: Если не ошибаюсь, структура данных из узлов. Ну, по-английски скажу, экспрешен 3 а а, а, а, ну все, да, да, вспомнил. Ну, экспрешен 3, это структура данных как раз-таки в виде дерева.
100: Где узлы? Это операции, а листья у дерева это спиранде, собственно.
101: Ну, могу пример, наверное, привести. Мне будет так проще. Ну, то есть, а работали когда-нибудь с экспрешном, чаще с инкью?
102: Ну, инкью в том числе работает и с экспрешенов как раз эверил принимает expression. В отличие от обычного номер в этом их отличие, что 1 из них работает с expression. М, 2 работает по сути.
103: С этим, с анонимным. Угу. Ну, то есть, expression 3 создаёт дерево выражений, оно как раз там используется, там, для анализа лямды. Ну, вы когда-нибудь разбирали экспрешен 3 рабо.
104: Прям подробно. Нет, подробно нет. Поэтому. Ну да, да. Угу. Ясно. Так, едем дальше. Давай.
105: Немножко вверх на архитектуру ну соп понятно, что у вас с ddd есть у вас что-то знания, навыки, опыт, ну да да, в целом.
106: С ним я работал. Ну, ddd имеется ввиду domain driven design верно, да, да, да, да, с ним я работал тогда сразу вопрос чем отличается энтити от объекта значений?
107: Антитет объекта значений.
108: Ну ну давайте с entity наверное тогда начинать он ну у entity есть идентификатор уникальный объекта значения его насколько помню нет, ну и собственно это id.
109: Как раз-таки она помогает там отличать энтити от других объектов, состояние у entity может измениться и при этом у него сохраняется ну там какая-то идентич.
110: На время всего жизненного цикла. Окей. У объекта значений неизменная. Мы сейчас будем, я буду прерывать, потому что, ну, как бы ответ понятен. Едем дальше, потому что время надо немножко сократить. Хорошо?
111: Вот. А, ну все, вы прервали. Я сейчас следующий вопрос. Хорошо. Агрегаты, общение агрегатов между собой друг с другом. Как это вообще происходит?
112: Ну.
113: Не отвечу, если можно, можем к следующему вопросу перейти. Следующий вопрос не помню. Граница транзакций, граница транзакций.
114: Ну, то есть как, какие операции будут выполнены как единое целое, то бишь в рамках транзакции имеется ввиду? Да, да, да, да. Где проходит граница транзакции должна проходить согласно
115: Если не ошибусь, граница, ну, в рамках 1 базы данных.
116: Ну то бишь, если она есть какая-то, не об этом речь. Ладно, едем дальше рамках. Ладно, галопом по европам ограниченные контексты. Что это вообще такое, с чем едят ограниченные конте?
117: Text.
118: Ну, это.
119: Это и есть граница, я так понимаю. Нет, это другой вопрос. Угу. Ну, термин есть ограниченный контекст банди контекст. Н. А, все, понял. Я чувствую. Надо название на английском, да, делат.
120: Будет гораздо проще с английского, да? Ну, понял это определение как раз-таки, ну, это определённая граница, в пределах которой там модель домена имеет однозначное значение какое-то вот, вот, что такое нет, а чем оно опреде
121: Чем границы определяются? Имеете ввиду? Да, да, да. Ну вот как определить? У нас вообще в приложении, в проекте будет 1 context или несколько? Как вообще это?
122: Решается идентификатором, он там, ну, 1, 1 от другого можно определить идентификатором, ну, типа, как, каким? Идентификатором, идентификатором чего? Ну, собственно, объекта, ну,
123: Нет, мы говорим про bunny контекст.
124: Не понимаете, да, термин?
125: Да нет, понимаю, что это в плане, просто помню смутно. Достаточно. Я с ddt работал последний раз. Ну, года полтора назад, если не дольше. Угу. Ну, я помню, что это граница там в рамках.
126: Из названия следует, да, что это граница, вот граница, чего не совсем понятно. Ну, в рамках которой модель домена имеет смысл и какую-то согласованность. Вот, наверное, вот так отвечу.
127: Угу. Угу. Ладно. Так, тогда будем завершать по времени мы уже выходим. Угу. За рамки. Угу. Если у вас какие-то ещё вопросы дополнительные появились, спросите, я передам слово Сергею.
128: Спасибо.