Разбор самой популярной задачи с собеседования в OZON | .NET Backend C# | Senior Middle

  Рет қаралды 5,378

Логгирую разработку

Логгирую разработку

Күн бұрын

Пікірлер: 38
@ВасилийПупкин-у9ь
@ВасилийПупкин-у9ь 2 ай бұрын
monitor.Enter/Exit вместо lock иам используется для того, чтобы компилятор не ругался на вызов await внутри. То есть здесь таким грубым способом обходят запрет на await внутри блока синхронизации монитора. И это также важно упомянуть, поскольку так делать нельзя из-за того, что до мы взодим в монитор из одного потока, а выйти можем из другого (после await)
@sciencena4340
@sciencena4340 Ай бұрын
А как можно обеспечить потокобезопасность в таком случае ?
@anastascat2770
@anastascat2770 Ай бұрын
@@sciencena4340 , через другие примитивы синхронизации. Например семафор
@cubgrad
@cubgrad Ай бұрын
@@sciencena4340 через SemaphorSlim(1, 1). Сверху описан шикарный кейс для получения дедлоков, семафор решает эту проблему
@SergeyBulavskiy
@SergeyBulavskiy Ай бұрын
​@@sciencena4340 SemaphoreSlim
@КонстантинКонстантин-й5р
@КонстантинКонстантин-й5р Ай бұрын
@@sciencena4340использовать SemaphoreSlim, например
@magomedyasulov6482
@magomedyasulov6482 21 күн бұрын
Там еще локер _sync статический, вроде забыл упомянуть
@aniband5387
@aniband5387 2 ай бұрын
Очень хороший контент. Продолжай так делать, так как на ютубе мало контента где разбирается оптимизация кода, и думаю ты его сможешь грамотно провести. Именно брать куски кода, провести ревью и указать что и как лучше будет сделать
@woutakwot9831
@woutakwot9831 2 ай бұрын
у меня такая же задача на собесе была, подтверждаю
@hhgforfhuv
@hhgforfhuv 2 ай бұрын
ещё момент: нельзя эвейтить между Monitor.Enter и Exit, т.к. монитор требует одного и того же потока на открытие и закрытие, в то время как async await такое не гарантирует
@eugenezaznoba3591
@eugenezaznoba3591 2 ай бұрын
тоже хотел сказать об этом, при наличии async/await для синхронизации обычно используется SemaphoreSlim
@dannythehumbleguy
@dannythehumbleguy 2 ай бұрын
@@hhgforfhuv Точно, все таки забыл что-то)
@AlexYakunin
@AlexYakunin 2 ай бұрын
Ну и если бы была гарантия, что await продолжает код в том же потоке (там не .ConfigureAwait(false), что вроде-как подразумевает, что код вызывается из UI thread), Monitor.Enter блокировал бы конкурирующие потоки на время ожидания в await, "выводя" их на это время из пула. Что эффективно делает асинхронный код синхронным (т.к. он требует ровно того же кол-ва потоков, что эквивалентный код без async/await).
@ЕвгенийП-д8л
@ЕвгенийП-д8л 2 ай бұрын
По этой же причине lock там нельзя использовать. И этого не позволит компилятор.
@xenm85
@xenm85 2 ай бұрын
Вот это классная задача для собеса. А не эти задачи по типу - что выведет этот код или напиши функцию сортировки какую нибудь
@jiggaaut
@jiggaaut 2 ай бұрын
через фабрику можно инжектить сервисы
@KenKaneki-ze7xr
@KenKaneki-ze7xr Ай бұрын
В методе регистер если сделать Interlocked.Increment, 1 поток заинкрементил а далее переключился, не успев добавить в словарь, второй поток заинкрементил. получилась ошибка, нужно лок делать на добавление и инкремент
@dannythehumbleguy
@dannythehumbleguy Ай бұрын
Interlocked умеет возвращать значание, аля var a = Interlocked.Increment(ref k); Так что все ок.
@Schumacher57
@Schumacher57 Ай бұрын
А можно список книг за спиной?) Виду Рихтера, Маконела…
@dannythehumbleguy
@dannythehumbleguy Ай бұрын
СИКП, Код Петцольда, Управление памятью в .net для проффесионалов, Грокаем функциональное программирование
@Schumacher57
@Schumacher57 Ай бұрын
@@dannythehumbleguy ооо круто. А управление памятью прочли?) Посоветуете? Или так фигня? Я всё думаю, взяться за неё)
@dannythehumbleguy
@dannythehumbleguy Ай бұрын
@@Schumacher57 книга хорошая, но я задушился на главе об устройстве памяти и отложил пока
@Light_Script-xh9ww
@Light_Script-xh9ww Ай бұрын
Можно было тут ещë вместо Monitor использовать семафор для ограничения числа потоков
@yernaryerzhanuly5626
@yernaryerzhanuly5626 Ай бұрын
А монитор по вашему сколько потоков разрешает что его надо ограничивать?
@shnextv1217
@shnextv1217 Күн бұрын
Не можно, а нужно было использовать SemaphoreSlim. Так как await между Monitor.Enter/Exit использовать нельзя!
@vanel9933
@vanel9933 Ай бұрын
Что за чушь про то, что свойства находятся между конструкторами и полями??
@dannythehumbleguy
@dannythehumbleguy Ай бұрын
в видео объясняется, пересмотри)
@vanel9933
@vanel9933 Ай бұрын
@@dannythehumbleguy в видео ссылка на некие конвеции mircosoft, хотя corefx codestyle подразумевает свойства после конструктора. да и в ссылках в описании этой рекомендации я не нашел
@Schumacher57
@Schumacher57 Ай бұрын
5:20 вот уже месяц пытаюсь понять, что нужно использовать. Я постараюсь высказаться максимально толерантно. Правда жаль, что я не могу разобрать, что автор сказал. Может я один такой. Но блин, при картавости, можно пожалуйста какие-то понятия постараться либо проговаривать, либо выводить текстом в видео. Просто слышишь что-то интересное, а всё коту под хвоста из-за того что просто проторобанил…
@dannythehumbleguy
@dannythehumbleguy Ай бұрын
TryAdd вместо добавления через квадратные скобки
@Schumacher57
@Schumacher57 Ай бұрын
@@dannythehumbleguy О, я не слышал. Спасибо!
@superdingo9741
@superdingo9741 2 ай бұрын
Не нужно игнорировать исключение. Там же что-то произошло, а мы это просто скрыли. За такое сразу можно указывать на дверь.
@intivi5277
@intivi5277 Ай бұрын
Как же это убого выглядит по сравнению с asm/c ! Программирование классов. Тьфу! Мир свернул куда-то не туда.
Пробное Senior C# собеседование (мок-интервью)
24:59
DotNet Interview Preparation
Рет қаралды 9 М.
I thought one thing and the truth is something else 😂
00:34
عائلة ابو رعد Abo Raad family
Рет қаралды 8 МЛН
Чистка воды совком от денег
00:32
FD Vasya
Рет қаралды 2,2 МЛН
РЕАЛЬНОЕ СОБЕСЕДОВАНИЕ В ТИНЬКОФФ ПО REACT
19:04
ДЖАВАСКРИПТИЗЕРЫ | КИРИЛЛ ПОЗДНЯКОВ
Рет қаралды 66 М.
Прямая трансляция пользователя Кристина Мертёхина
0:39
Раньше VS  Сейчас в SONIC SPEED SIMULATOR💪
6:49
Асинхронность в C# и Asp Net Core на ПРАКТИКЕ
1:01:41
Kirill Sachkov - Development
Рет қаралды 8 М.
Подготовка к собесу - Оптимизация запросов
25:12