Паша - красавчик, умеет рассказать просто о сложном!
@teachmeskills Жыл бұрын
Согласны)
@soclrus92 Жыл бұрын
Самостоятельно изучаю C# и очень страшно пойти на собеседование, но послушав вас, я понимаю, что не так страшен чёрт как его малюют)) спасибо вам огромное! Однозначно подписка!
@teachmeskills Жыл бұрын
Спасибо и вам и удачи) если порекомендуете нас друзьям, будем признательны)))
@gefalsht4627 Жыл бұрын
@@teachmeskillsчто можете сказать по поводу огромного конкурса на вакансию? На данный момент есть лишь несколько вакансий.
@teachmeskills Жыл бұрын
@@gefalsht4627 конкурс в любые времена бывает) скажем так - все зависит от рынка поиска (в других локациях может быть больше вариантов), поиск стажировок - через них также вариант заходить в профессию, сезонность - летом бывает спад обычно, ближе к осени рынок оживает. И подготовка - если хорошо отучиться, уделить должное внимание практике и попробовать пройти несколько собеседований, будет чуть попроще
@agens9538 Жыл бұрын
как же ты ошибаешься )
@fatalist_beats Жыл бұрын
Удалось устроиться?
@zodchiygigas6098 Жыл бұрын
Вставка в LIst не O(1), а часто О(1), и реже О(n), т.к. List это просто обертка над массивом, а т.к. массивы у нас могут быть только фиксированного размера, то иногда когда Capacity текущего массива недостаточно для вставки нового объекта, то происходит создание массива большего размера и копирование старых значений поэтому нужно учитывать, что LIST для больших коллекций растущих линейно будет постоянно аллоцировать в памяти новый пустой массив большего (обычно в 1,5 раза) размера и копировать данные старого массива и это будет плохо и по количеству операций, и по памяти. А в остальном отличный видос.
@teachmeskills Жыл бұрын
Спасибо за ценное дополнение! И будем стараться дальше держать планку качества)
@-unity-11 ай бұрын
Специально стал пролистывать комментарии, чтобы посмотреть: а нашёл ли кто-нибудь ошибку в объяснениях Павла? Такое ощущение, что он говорил про связный список, а не про List. Это именно связный список очень быстро выполняет добавление/удаление данных, а вот выборка осуществляется медленно, так как требуется пройтись по всем элементам, чтобы найти нужный.
@zerotonyq5 ай бұрын
Эм, чувак, почитай про мув семантику) Сложность O1 потому что аппроксимируется. Так-то и в хеш таблице On бывает при построении дерева из-за коллизий
@pahinash11 ай бұрын
Неделю назад будто проходил собеседование прямо по этому видео :) Супер полезный контент
@webentry Жыл бұрын
Категорически понравился этот парень, ещё с первого видео, которое я посмотрел на канале про java vs c#.
@teachmeskills Жыл бұрын
Нам тоже) спасибо большое !
@alexobzor Жыл бұрын
Приятно слушать Павла. Хотелось бы услышать про реализацию асинхронности в C# по подробнее, и по конкретнее.
@teachmeskills Жыл бұрын
Ох надо будет его спросить на этот счет)
@alexobzor Жыл бұрын
@@teachmeskills Еще забыл про рефлексию упомянуть. Интересно послушать, как это объяснит Павел.
@JinOptimist Жыл бұрын
@@alexobzor Тема безусловно интересная, но спрашивать у Джунов про Рефлексию это жестоко ))) Но так-то, мой любимый вопрос можно ли при помощи рефлексии изменить кого-нибудь из списка: private, readonly, static, const ]:-)
@bahamengame Жыл бұрын
Очень интересные ролики! Пришел по рекомендациям сравнения Java/C#. . . Странно что раньше не встретил этот канал. Спасибо гостям и каналу!
@ОбычныйЛангуст Жыл бұрын
Так легко и доступно объясняет, что хочется слушать слушать и слушать. Ухам понравилось)
@teachmeskills Жыл бұрын
Спасибо большое)
@olgaeliseeva3347 Жыл бұрын
Очень жду следующего видео, спустя 5 минут подписалась и поставила лайк ❤
@teachmeskills Жыл бұрын
Спасибо огромное!)
@АлександрСмирнов-ш4ц Жыл бұрын
Топовый ролик! Спасибо за подробный и нескучный рассказ на указанные темы.
@teachmeskills Жыл бұрын
Спасибо большое) скоро будет продолжение
@МихайлоДвалі Жыл бұрын
Очень доходчиво, коротко, корректно. Мотивируем продолжать в том же духе
@teachmeskills Жыл бұрын
Спасибо)
@glorglorsky7987 Жыл бұрын
Надо было в вопросе про асинхронность упомянуть про пул потоков, очень любят про это спрашивать тоже)
@DF-ov1zm Жыл бұрын
По поводу "сложности" дикшенери: добавление и чтение элементов происходит в o(1), то есть в относительном смысле между ними нет абсолютно никакой разницы в контексте "сложности" алгоритма. Потому что как поиск ключа, так и добавление элемента - работают по сути одинаково. Не знаю откуда появилось o(n) при добавлении в этом видео, но на самом деле это не правда, в обоих случаях o(1). Проблема будет только с immutable дикшенери, потому что там при добавлении вся коллекция копируется, как со строками, и отсюда появляется o(n), но с обычным дикшенери это работает не так. Проверить это очень легко с помощью бенчмарка. Учтите это при собесе.
@ag1sh Жыл бұрын
Почитайте на хабре статью "Под капотом у Dictionary". Если вкратце, то при добавлении элемента будет O(n) при достижении максимального размера словаря или при большом числе коллизий.
@DF-ov1zm Жыл бұрын
@@ag1sh не нужно читать статью на хабре, что бы понимать, что как минимум при коллизиях сложность будет стремится к O(n).. потому что пропадает вся суть любого хэшмапа. Но это не значит, что по этому сайдэффекту, мы должны оценивать саму эту коллекцию
@dmitryshumarov1810 ай бұрын
Если бы можно было поставить тысячу лайков, я бы это сделать. Сам являюсь сениор разработчиком, и более качественного и простого объяснения довольно сложных вопросов для джунов я ещё не встречал.
@maflend2762 Жыл бұрын
Крутой чел. Хотим больше про Task
@СергейКозырев-щ9щ Жыл бұрын
Дельные вопросы, развёрнутые и понятные ответы, квалифицированные замечания в комментариях. Спасибо ребята за очень полезное, отличное видео! ❤
@teachmeskills Жыл бұрын
И вам большое спасибо)
@Гремаз-с3й Жыл бұрын
Спасибо за видео, очень интересно слушать!
@MaksimV-f3i Жыл бұрын
Хорошо сделали, спасибо Павлу!
@teachmeskills Жыл бұрын
Спасибо большое)
@Бот5329-и5г Жыл бұрын
Я наконецто понял что такое асинхронность. )
@ВладиславЖук-ж3з Жыл бұрын
Такое ощущение, что Паша каждый день выступает на камеру, тут понятное дело он выдаёт минимальную базу, но гораздо лучше, чем в интернете)) Когда будет новый панч c# с ним против другого языка или как обещали - продолжение?)
@teachmeskills Жыл бұрын
Он вообще красавчик! Ой, что-нибудь придумаем на продолжение) На следующей неделе будет хороший разбор в подкасте «Нативная мобильная разработка vs кроссплатформа». Не пропустите)
@ВладиславАбрамович-н2у Жыл бұрын
Спасибо! Очень крутой выпуск!
@teachmeskills Жыл бұрын
Спасибо большое!)
@makkenzytalkanbayev8795 Жыл бұрын
Спасибо большое! Так все просто объясняет. Побольше такого материала
@teachmeskills Жыл бұрын
И вам спасибо за просмотр! Скоро выйдет продолжение)
@DanilWarior Жыл бұрын
Скоро проводить собеседование, решил узнать какие темы можно обсудить, информативно)
@fred20659 Жыл бұрын
Классное интервью! Очень позитивное!
@vladlenbulatov10229 ай бұрын
Я бы про дженерики (они же - шаблоны и т.д.) добавил следующее - Дженерики позволяют решить "проблему" отсутствия множественного наследования, приблизительно на 90%, а из оставшихся 10% - 90% - решают интерфейсы. Именно поэтому дженерики и интерфейсы используются практически повсеместно, как в Яве, так и в Шарпе, как и тайп-скрипте и.д. Кстати, о чем с дженериками многие забывают - от них можно (а часто и нужно) наследоваться. Например - class StringList : List {} ... StringList firstNames = new() { "Vanya", "Petya" }; и далее используем уже StringList - и удобно, и расширяемо, и более строго типизировано. Тут главное - не переусердствовать ))
@megaherzTomsk Жыл бұрын
Видео заслуживает гораздо большего количества просмотров и лайков)
@teachmeskills Жыл бұрын
Спасибо!)
@ZuraevD Жыл бұрын
Хорошо и просто объясняет, интересно слушать☺️
@smrsgv4 ай бұрын
четко выдал базу, спасибо за труд!
@brend_pro1820 Жыл бұрын
Офигенный ролик, отличные люди, спасибо за видео)
@teachmeskills Жыл бұрын
Спасибо большое!)
@plasmazay Жыл бұрын
Послушал на перспективу, спасибо!😋
@teachmeskills Жыл бұрын
И вам спасибо)
@nikolay4362 Жыл бұрын
как сеньор помидор могу сказать что этот ролик довольно забавный))
@JinOptimist Жыл бұрын
Надеюсь это была похвала :)
@reezleencs6044 Жыл бұрын
Больше Павла!
@teachmeskills Жыл бұрын
Будет-будет)
@ДмитрийСенько-с1у Жыл бұрын
Спасибо, очень интересно!
@teachmeskills Жыл бұрын
Спасибо большое)
@RentonFM Жыл бұрын
Мне кажется, полезно любимому джуну, вне зависимости от языка :-)
@DF-ov1zm Жыл бұрын
По поводу using и dispose - на всякий случай хочется уточнить, все это не имеет вообще ничего общего с Garbage Collector'ом (GC). Вы, конечно, можете упростить ему задачу чист на всякий вонючий присвоив null (удалив ссылки) всем полям, которые потенциально могли бы жрать память, или попросить GC не беспокоиться по поводу деструктора, но GC ничего про ваш dispose не знает и знать не должен, его колышит только то, есть ли у вашего класса деструктор и все. Dispose нужен исключительно для того, что бы "отпустить" любые внешние (по отношению к дотнету) дескрипторы, будь то: файл, сетевой порт, поинтеры в память (или что угодно, что вы создали в режиме unsafe) и тд ДО того как объект, который их удерживает потеряет ссылку на него и контроль над ним будет утерян, а следовательно задолго до того как GC будет с ним что то делать. Dispose - это такой explicit деструктор, в котором освободить ресурсы 1) проще, чем в implicit деструкторе 2) гарантированно вызовется, причём в известное время, в отличии от деструктора, который толи вызовется, толи нет и вообще не понятно когда. Не рекомендую про GC вообще вспоминать, когда вас спрашивают об этом методе или конструкции using. Единственный контекст, в котором dispose и gc можно упоминать вместе - это то, что в диспоз можно установить флаг у объекта, который будет сигналом GC, что вызывать деструктур у него не нужно, потому что освобождать уже нечего, вы все сделали в диспозе (метод GC.SuppressFinalize)
@АлександрСосо-щ1б Жыл бұрын
Выглядит как-будто список вопросов составлял гость )
@teachmeskills Жыл бұрын
он помогал по самой максимальной части. в этом и соль, что мы старались составлять те вопросы, которые актуальны на собеседовании в IT
@AnTonPro Жыл бұрын
жду слежующий ролик, очень классный дев, жду продолжения
@teachmeskills Жыл бұрын
будет-будет) уже отснят и в отложке)
@AnTonPro Жыл бұрын
@@teachmeskills Супер, умеете обрадовать, потому что текущий ролик мне очень помог в монимании базовых вещей при подготовке к собесам которые я прохожу. ну и + я бы не отказался еще лучше подготовиться по второму ролику)
@teachmeskills Жыл бұрын
@@AnTonPro все будет) стараемся)
@likss3281 Жыл бұрын
Спасибо огромное, очень интересно)
@alinanur5628 Жыл бұрын
Круто, круто! Ждемс 2-ю часть
@teachmeskills Жыл бұрын
Скоро будет) Ведем переговоры о сьемках)
@АлександрУшаков-у3н2 ай бұрын
От Души братишь!
@НиколайПетраков-ь1в Жыл бұрын
В разница между Reference и Value Type в том что переменные Reference Type хранят ссылку на объект, а переменные Value Type хранят сам объект. Если у нас допустим к классе есть поле int, то это поле не будет хранится в стеке, а в месте с классом в куче. И никакого боксинга тут тоже не будет
@basvalan11 ай бұрын
Так, а если Value Type наследует интерфейс, то к чему это может привести и как это влияет на производительность?
@DjonNIK777 Жыл бұрын
Про ссылочные и значимые типы… вариантов, когда значимый хранится в куче немного больше, чем только боксинг. Например, поле класса. По факту, в стеке лежат только локальные значимые типы но даже они могу быть в куче (тут текстом все сценарии тяжко описывать )
@saurontheblack6566 Жыл бұрын
List как я знаю на шарпах реализовано не как список, а как массив который выделяется под N элементов и если в List нужно добавить N+1 элемент то он создает новый массив в 2 раза больше(но это не точно) и туда перекидывает старые значения и новые, так что добавление не всегда за 1 идет, в большинстве случаев если ты знаешь объем данных то ты и должен под этот объем выделить List
@Mazus_Nikita Жыл бұрын
интересное видео, спасибо
@vagifk2864 Жыл бұрын
Явно больше, чем для джуна - великолепно !
@teachmeskills Жыл бұрын
Спасибо!)
@vagifk2864 Жыл бұрын
@@teachmeskills а вторая часть есть?
@teachmeskills Жыл бұрын
@@vagifk2864 подкиньте вопросов - сделаем)
@vagifk2864 Жыл бұрын
@@teachmeskills вот вам еще на 2-3 части ) Можете ли вы объяснить концепцию сборки мусора в C#? Как вы обрабатываете исключения в своем коде и стоит ли добавлять свои исключения? Как добиться полиморфизма в C#? Можете ли вы объяснить принципы SOLID и привести пример того, как вы реализовали их в своих проектах? Каковы преимущества при использовании внедрения зависимостей в ваш код? Можете ли вы объяснить концепцию делегата в C# и когда его стоит использовать? Как вы справляетесь с параллелизмом в своем коде? Можете ли вы объяснить разницу между структурой и классом в C#? Какова цель использования оператора в С#? Можете ли вы объяснить разницу между списком и массивом в C#? Можете ли вы объяснить разницу между статическим методом и методом экземпляра в C#? Как вы оптимизируете производительность вашего кода? Можете ли вы объяснить концепцию виртуального метода в C#? Как вы обрабатываете аутентификацию и авторизацию в своих приложениях? Можете ли вы объяснить концепцию инверсии управления и как она реализована в C#? Как вы проводите модульное тестирование своего кода? Можете ли вы объяснить разницу между закрытым и защищенным методом в C#? Как вы управляете зависимостями в своем коде? Что такое extension methods в C# и где они используются? Как реализовать одноэлементный шаблон на C#? Что такое различные модификаторы доступа в C# и что они означают? Что такое запечатанный (sealed) класс в C# и как он используется? В чем разница между «throw» и «throw ex» в С#? Как вы можете создавать и использовать собственные исключения в C#? В чем разница между структурой и классом в C#? Какова цель ключевого слова «виртуальный» в С#? Каковы преимущества использования интерфейсов в C#? Что такое лямбда-выражение в C# и как оно используется? Что такое анонимный метод в C# и как он используется? Что такое универсальный тип в C#? Что такое разделяемый (partial) класс в C# и для чего он используется? Какие существуют типы коллекций в C#? Как вы можете отсортировать коллекцию в C#? В чем разница между «StringBuilder» и «String» в С#? Какие существуют типы сериализации в C#? Как реализовать многопоточность в C#? Какова цель ключевого слова «lock» в С#? В чем разница между «var» и «dynamic» в С#? Какова цель ключевых слов «ref» и «out» в С#? Какие типы шаблонов проектирования существуют в C#?
@teachmeskills Жыл бұрын
@@vagifk2864 это просто клад) спасибо! Постараемся что-нибудь придумать)
@FourDollarBill Жыл бұрын
40:12 вставка в Dictionary выполняется за O(1). Может Павел по ошибке про вставку в отсортированный массив рассказал, там действительно O(n).
@teachmeskills Жыл бұрын
Спасибо за уточнение!)
@JinOptimist Жыл бұрын
Вы правы. Спасибо, что обратили внимание. PS Для тех кто готовиться к собеседованию и ищет полностью правильный ответ, O(1) это время вставки для Dictionary в среднем случае. В худшем случае, когда у вас у всех объекто одинаковый hash время будет О(n)
@12313450 Жыл бұрын
@@JinOptimist не совсем понял, что значит в "среднем случае"? Разве в формулировке временная сложность сложность алгоритма нет такой фразы: "Максимальное количество операций, необходимое для завершения алгоритма"? То бишь я понимаю это как "количество операций при наихудшем случае"
@JinOptimist Жыл бұрын
@@12313450 На практике для алгоритмов мы смотри не тольк и не столько худший сценарий сколько сценарий на рандомных данных. Например для quicksort можоно подобрать входные данные при которых сложность будет O(N^2). Но при этом тот же quicksort в среднем будет выдавайть более высокую производительность, чем пузырёк. То есть худший сценарий для обоих алгоритмов одинаовый, а вот средний сильно отличается
@romadzzz6 ай бұрын
Во первых огромное спасибо, очень полезно было. Насчет dictionary немного не сходится с тем что я знаю. Во первых не уверен что hash у двух обьектах одинаковый. Проблема в том, в dictionary есть несколько полей и массив. Если при высчитывании по хешу индекса поле которое уже занято, тогда происходит колизия, высчитавается новый массив (связанный с простыми числами). Индекс в масиве высчитывается через остаток (%) от длины масива. У обьектов (class) дифольтивно хэш это адресс обьекта. Ну а когда колизия то вы правы это O(n). А то в комментариях еще и другие версии были. Если сможете опровергнуть мои знания и доказать другое то буду рад почитать новую информацию.
@porohmega Жыл бұрын
Огромное спасибо
@teachmeskills Жыл бұрын
и вам спасибо!)
@samirsalimkhanov355411 ай бұрын
Молодцы!
@СаняИванов-х3я Жыл бұрын
Тип string только согласно документации не изменяем. А по факту строку можно менять, причём несколькими способами. Так что Павел в прошлом веке застрял )))
@JinOptimist Жыл бұрын
Ну вы бы ещё упрекнули меня, что я не упомянул про работу со ссылками в режиме unsafe когда рассказывал про ссылочные типы ))) Видео всё таки несколько на другой уровень рассчитано
@Leon_Pol10 ай бұрын
Давно не видал что-то более менее объясняющее для джунов. Иногда заходишь смотреть видео... а там смрад и садомия... не хватало видео подобного рода, когда был джуном. Много бы моих проблем решило, а так пришлось Троелсена читать
@teachmeskills10 ай бұрын
Спасибо большое)
@leximus3313 Жыл бұрын
Как мне Павел близок...в нормальном плане 😂
@МихайлоДвалі Жыл бұрын
Круто ❤
@jenik6210 Жыл бұрын
Спасибо большое
@teachmeskills Жыл бұрын
И вам)
@lost_daemon11 ай бұрын
Тоже долгое время жил со знанием, что «try-catch тяжеловесная конструкция». Но недавно в споре с коллегой попробовал обосновать это предположение, но ни Рихтер ни MSDN в этом не помогли. На чем основано это утверждение?
@konstantinta2803 Жыл бұрын
Можно поподробнее про "стек, который находится в куче" ? Желательно со ссылками на статьи
@JinOptimist Жыл бұрын
Обыскал весь интернет, но так и не нашёл статьи где я это давным давно прочитал. С другой стороны и обратного утверждения я не нашёл. Если у вас есть полезные ссылки на эту тему поделитесь. Всегда рад исправиться если в чём ошибался
@jamesoo9657111 ай бұрын
@@JinOptimist Konrad Kokosa Pro NET Memory Management 114 page, Figure 2-20. Показано, что stack-и хранятся отдельно в user space наряду с разными кучами (в том числе GC heap). То есть "стек, который находится в куче" - утверждение неверное
@whitesatin4465 Жыл бұрын
12:25 Не совсем понял, почему из-за одной иммутабельности стринг перестает быть ссылочным типом? Его поведение может и маскирует его под значимый тип, но корректно ли говорить что он не является ссылочным?
@JinOptimist Жыл бұрын
string ссылочный тип. Просто если после этой фразы вы закончите свой ответ, будет выглядеть так, что он для вас ничем не выделяется среди других ссылочных типов.
@rustyscarlet Жыл бұрын
Как может стек быть в куче, если память под стек выделяется ос при создании системного потока, а память под кучу выделяется ос, когда об этом попросить среда выполнения языка?
@DF-ov1zm Жыл бұрын
Ничего из этого не выделяется ОС, и стек и кучу определяет процессор, как и правила взаимодействия с ними. ОС может только предъявить свои требования к размеру стэка, например. Тут имеется ввиду, скорее всего, что и стэк и куча физически находится в одном и том же месте, в оперативной памяти и отличаются только способом, которым из них извлекают данные. В случае стэка - это происходит быстро, потому что в регистрах процессора хранится текущий адрес начала фрэйма и стэк поинтера, а значит адрес данных в переменной легко вычислить.. а для кучи обращений к памяти будет много + из стэка данные условно удаляются автоматически при вызове комманды pop к процессору, а из кучи данные удаляются GC, да ещё и на время работы GC исполнение программы будет остановлено.
@rustyscarlet Жыл бұрын
@@DF-ov1zm А ничего, что процессы, как и потоки это сущности ОС? Одно место оперативной памяти это что? В случае дотнета есть и стек, и куча, и куча больших объектов и при этом количество куч не ограничивается одной и находится ячейки памяти могут не последовательно для этих сущностей. Более того процесс работает не с физической памятью, а с виртуальным адресным пространством. При чем тут способы извлечения данных не понятно.
@DF-ov1zm Жыл бұрын
@@rustyscarlet процессы и потоки - сущности ос, но ресурсы под них выделяет процессор) куча, стэк, виртуальная память, способы работы с ними и способы адресации - не имеет никакого отношения к дотнету, они абсолютно одинаковые для всех языков программирования, даже ассемблер работает со стэком, кучей, виртуальной памятью итд. От дотнета во всем этом есть только Garbage Collector. Потому что все это организует процессор, ось только просит процессор установить нужный ей режим работы процессора, выделить новый стэк под поток и тд. Стэк и куча - это не физические понятия, это алгоритмические понятия, просто правила, по которым организована работа с процессором и все. Не существует никаких куч и стэков в общем смысле, это одна и таже память, просто она разбита по принципу вот с этой частью мы работаем по одному алгоритму, а вот с этой частью по другому алгоритму. Физически все это находится в оперативной памяти (за редким исключением, кое что находится непосредственно в регистрах процессора) и разница между ними исключительно в том, как из них достать данные. В стэке - это быстро, потому что искать ничего не нужно, нужно выполнить одну команду процессора, а в куче что то найти - довольно сложно, не важно виртуальная там адресация или реальная. Не всегда, она кстати, виртуальная, процессор может работать и в режиме реальной памяти.
@k0pern Жыл бұрын
Привет из #11 где можно объявлять абстрактные методы помимо абстрактных классов еще и в интерфейсах
@JinOptimist Жыл бұрын
Вы немного напутали с тем, что что именно было добавлено. Под абстрактными методами в интерфейсах вы судя по всему подразумеваете методы, которые класс "наследник" обязан реализовать. Но именно такое поведение и было в интерфейсах с самого их появления. Нововведение было в другом. Теперь в интерефейсах можно объявлять дефолтную реализацию метода.
@sakenjs3 ай бұрын
Упер!
@sakenjs3 ай бұрын
С
@ivka-xj7in7 ай бұрын
с асинхронностью, если мы используем await он получается тоже ждёт?
@user-wu-tang Жыл бұрын
Привет, видео неплохое, есть ли канал ютуб или телеграмм у Паши ? (с обучающими роликами по C#)
@teachmeskills Жыл бұрын
привет) Паше отдаем все возможное время внутри нашей площадки. очень скоро выкатим пару обучающих роликов с ним) все в процессе
@9Piromaniac Жыл бұрын
Да не является стринг особым типом. Никто и не что не мешает сделать такой же класс. Вообще ничего. Особый тип только ValueType сам по себе. Внутри стринги не то чтобы массив. Немного по-другому. Да и сам стрингбилдер не то чтобы сильно отличается от листа чаров. А вообще прикольный собес. Все такое было на джуна
@_4ko_3 ай бұрын
Размер ObjectInstance строки не детерминирован и дополнительно включает в себя 4 байта под длину строки. Поправьте если ошибся
@9Piromaniac3 ай бұрын
@@_4ko_(если нужен сразу ответ, то он в конце:) в кишках string не детерминирован по размеру, так как размер может быть любым(мы, естественно, говорим о размере данных, а не ссылки). Хоть в LOH скинь это все равно будет строка(но не больше 2gb). И он не может измениться(length доступен только для чтения). Для простого понимания можно сказать что внутри массив(хотя скорее ссылочная структура чаров. Самого массива внутри нет. Вообще там указатель на первый элемент и их количество). Это так. Да. Это так работает из-за того, что любая строка участвует или может участвовать в интернировании строк и поэтому оно неизменяемо(штука очень сильно экономит память , так как даёт на одни и те же строки всегда одну и ту же ссылку) Технически есть возможность изменить строку(unsafe код), но это изменит ее по ссылке и ТАК ДЕЛАТЬ НИЗЗЯ! (Если сделаете, то найду и очень сильно надругаюсь над хладным трупом)) после каждого пересоздания строки мы получаем либо ссылку из пула интернированных строк, либо новую(которая тоже туда пойдет, но не факт:)) Билдер же совсем другой. Он не отличается от листа чаров в своей сути-билдер изменяем настолько же, насколько и лист. Всю магию стринги билдер начинает использовать только после toString-именно тогда он и становится неизменяемым стрингом. А вообще, хабр говорит что память строки это 8 (sync) + 8 (type) + 4 (length) + 4(extra field) + 2 (null terminator) + 2 * length Получается: 26 + 2 * lengtt байт :)
@tolyachernov7849 Жыл бұрын
Давно ничего не было про python. Что-то будет в ближайшее время?
@teachmeskills Жыл бұрын
Снимем)
@samsongoot6364 Жыл бұрын
разве когда мы передаем в метод что-то, у нас разве не передается копия (если не ref)? И это будет копия либо указателя либо типа значения
@JinOptimist Жыл бұрын
Совершенно верно. Всё что мы передаём в метод это копия. Просто если сделать копию значимого типа (например структуры) и изменить у него поле, то на оригинальную структуру, это никак не повлияет. А если сделать копию ссылки на объект, и обращаясь по этой ссылки, изменить свойство объекта, то это "заметит" и оригинальный объект. Так как и оригинал и копия ссылаются на одну и ту же ячейку памяти. Но такое полное объяснение обычно сбивает людей. Поэтому принято говорить, что значимые типы копируются, а ссылочные нет.
@selezen4085 Жыл бұрын
По поводу многопоточности не совсем корректная формулировка просткользнула: Многопоточность и Ассинхронность - разные вещи. Потому и пример о JS в контексте собеса на C# звучит немного странно, т.к в JS многопоточки нет) На самом деле (в C#) асинхронность = частный случай многопоточки, которая, в свою очередь конкретный подход к реализации concurrency (конкурентных вычислений) в контексте современных ЯПов. Видно что немного поплыл когда переключился на C# после JS, потому что понимания как там это устроено толком нет. Если конкретно, есть такая вещь как ThreadPool с которой работает ассинхронность в C# (Вообще async/await написан на Task'ах, которые уже пользуются ThreadPool). Чтобы основной поток выполнения программы не блокировался, при вызове асинхронного метода его выполнение делегируется потоку, который достали из ThreadPool. Честно не понял что парень имел ввиду, но как по мне формулировка "поток отложил задачу" не корректна. Куда отложил? Какие ресурсы то в итоге процессят задачу? Становится не совсем понятно.
@JinOptimist Жыл бұрын
Я ничуть не отрицаю что упрощая, мог дать несовсем коректные формулировки. Тем не мене у вас в сообще есть несколько серьёзных ошибок, на которые я бы хотел обратить ваше внимание. 1) Асинхронность не является частным случаем многопоточности. Так как это шаблон может быть реализован даже при условии, что у вас всегда работает всего один поток. Пример с JS я приводил именно потому, что JS работает в одном потоке (что кстати тоже не всегда правда), но асинхронность он тем не менее реализует. 2) Многопоточность и правда нужна для конкурентных вычислений. А вот асинхронность с этим никак не поможет. Асинхронность помогает на IO методах. 3) При вызове асинхронного метода и правда выполнение будет переданно другому поток. Но из контекста беседы про async await я надеялся будет понятно, что подразумевается вызов асинхронного метода через await. А уже в этом случае включается совершенно иной механизм. Может почитать об этом дательней на официальной сайте майрософта там и про state machine есть и про то при каких условиях новые потоки будет созданы
@selezen4085 Жыл бұрын
@@JinOptimist Спасибо за отклик и разъяснение. Почитал, действительно некорректно было так говорить про асинхронность. Просто смутил момент с описанием работы async/await на JS, потому что были неточности. Будь я интервьюером, хотелось бы услышать более детальное описание именно в контексте C#, про ту самую async state machine под капотом, про таски, на которых все пашет.
@xerenityplay Жыл бұрын
в nodejs можно использовать многопоточность с помощью worker threads, но это считается костылями
@mrhotroad9 ай бұрын
6:50 Я эту хуйню на собеседовании зачем-то повторил. "Стэк хранится в куче". Не ведитесь.
@teachmeskills9 ай бұрын
вам бы посмотреть комменты от комьюнити. мы за эту оплошность отчитались. плюс мы никого не просим вестись. даем опорный материал. уже дело каждого решать, как и где использовать
@qburanp7 ай бұрын
Как говорится, все сказанное может быть использовано против вас.
@notanenglishperson9865 Жыл бұрын
20:30 так вопрос же был о двух одинаковых названиях интерфейса, а не методов в интерфейсе. Чет ответ я не понял.
@JinOptimist Жыл бұрын
Наша ошибка. Подразумевались одинаковые название методов в интерфейсах. Если же у вас одинаковые название интерфейсов, то вы просто можете указывать их полный путь вместе с namespace
@AndyPlov Жыл бұрын
Так я не понял, Павел прошёл собеседование или нет?
@teachmeskills Жыл бұрын
Думаем, что можно считать пройденным)
@yuliyazag Жыл бұрын
пройти это одно, потом еще надо заставить себя работать
@АртемАрте-г5х8 ай бұрын
Вставка в словарь, который чаще всего реализуется с помощью хэш-таблицы также как и получение из словаря - это O(1) а не O(n). Со словарём всё происходит с O(1) кроме поиска. И от хэш-таблицы он отличается лишь тем, что там не может быть коллизий, т.е. не может быть вставки объекта с таким же хэшом.
@alexdobrynin Жыл бұрын
с какого перепуга стек лежит в куче? стек лежит в быстрой памяти процессора, а куча лежит в оперативке. ОМГ фейспалм
@DmitryTrump11 ай бұрын
" стек лежит в быстрой памяти процессора " звучит так же как и "стек лежит в куче"
@alexdobrynin11 ай бұрын
@@DmitryTrump только вот беда, куча лежит в оперативке, быстрая память процессора к оперативке не относится, для тех кто не знает строения кудахтера
@MaksimV-f3i8 ай бұрын
Как тут второй лайк поставить?
@teachmeskills8 ай бұрын
как можете)
@criomant94477 ай бұрын
Он так с энтузиастом говорит об кейсах своих, я так не могу, я понял что я зря стал программистом, я так же с энтузиазмом могу обсуждать сценарное дело и драматургические приемы, нарративные идеи и много чего еще связанное с этим, но сука я выучился на программиста, я изучил Unity и пытаюсь устроиться деволопером, когда хочу быть сценаристом или дизайнером(не артист, проектный). Как блять быть в моей ситуации, когда нед средств что бы переучиться(
@JinOptimist5 ай бұрын
Я кстати с таким энтузиазмом могу и про фантастику рассказывать. Мне, как и вам, тоже всегда хотелось написать книгу (почти сценарное дело :-) ). В этом случае, можно просто писать в свободное время. Буквально пару лет и книга готова. Потом ещё год, на поиск и работу с издательством, и готов, хоть и я работаю программистом, любой желающий может купить мою книгу "Космическая академия" на просторах интернета. Даже вторая часть есть. Если получилось у меня, должно получится и у вас. Для этого, даже не обязательно бросать работу ))
@AzizjanAyupov_leo Жыл бұрын
я хочу за него замуж!
@JinOptimist Жыл бұрын
Это лучший комплимент котоый мне когда либо делали Спасибо )))
@whiterabbit6211 Жыл бұрын
4 собеседования за всю карьеру!? Если не врет, а это очень похоже на ложь, то прикольно!
@JinOptimist Жыл бұрын
Я дико извиняюсь, а почему 4 собеседования при условии, что я работу как раз 3 раза менял похоже на ложь? О_о Если постараться, то можно сюда конечно добавить с десяток собеседования внутрии компании на проект, но они сильно специфичны, так что я их не учитывал
@kl45gp Жыл бұрын
не понял прикола, что значит стек находится в куче? что за бред?
@JinOptimist Жыл бұрын
Я имел ввиду, что куча с стек фактически лежат в одном пространстве. И то и то лежит в RAM. Видимо эта фраза вышло особенно неудачной, мне на неё кто только не указывал. С другой стороны, если это единственный косяк, то думаю это хороший знак. В следующем видео, есть чуть больше про работу с памятью, надеюсь там у вас будет меньше вопросов.
@alexsft20246 ай бұрын
Боже, какой у товарища компот в голове. "..стек в куче.."
@OleksiySlyshyk Жыл бұрын
"Cтек находится в куче" - шок контент! 🤦🤦♂🤦♀ дальше не смотрел
@JinOptimist Жыл бұрын
😢 Интересно, что это единственный момент, про который написали человек 10. Хоть отдельное видео снимай, оправдываясь/извиняясь. С другой стороны если за 2 ролика по часу каждый, это единственный косяк, то вышло не так уж и плохо.
@Дзмтрый-л9в Жыл бұрын
Про абстрактный класс и интерфейсы - спорно, про дженерики чушь сказал
@JinOptimist Жыл бұрын
Ни в коем случае не считаю себя истинной в последней инстанции. Потому, если не секрет, какие именно утверждения вам показались спорными? А так же, вы бы хоть намекнули, в чём проблема с моим высказыванием о Дженериках? Это конечно, если вы не Дартаньян
@whoiam6395 Жыл бұрын
Контент реально годный!!!
@teachmeskills Жыл бұрын
Спасибо большое!)
@jacobjacob80629 ай бұрын
Ошибок многовато, послушал за reference type где было сказано, что reference type всегда в куче - не корректно. Reference type может быть аллоцирован в стеке. Сразу переключил на Dictionary и тут получение O(1), а добавление O(n). Так в худшем случае доступ к элементу в Dictionary тоже O(n), как раз таки из-за коллизиий где в Dictionary - entry bаcket это связанный список. Выключил
@engine40537 ай бұрын
Крайне полезные видео
@GLOK7.62 Жыл бұрын
Сначала поставил лайк... Потом 3:20 посмотрел... Вы кого пригласили?)
@JinOptimist Жыл бұрын
Вы не согласны с моим тезисом, что навык прохождения собеседования несколько отличается от навыка создания продукта?
@Filimon_enc Жыл бұрын
не упомянул что в clr уже при дженериках 22:53 создастя 1 и тот же метод для всех типов