Комментарии:
СРАЗУ ЗАМЕЧУ - я не давал определений в видео и не пытался дать развернутые ответы. Более подробно по каждому пункту рекомендую еще обратиться к документации. У тех же структур больше отличий и они могут быть не только в стеке, но и в куче (сюрприз), у них есть еще отличие - сравнение по значению... В общем видео не отменяет работы с документацией и книгами
Ответитьне согласен насчет множественного наследования, т.к. интерфейсы мы именно что имплементируем(реализуем), а не наследуем - термин другой)
Ответить1. Record ведут себя иначе при сравнении - это важно!
var person1 = new Person("Tom");
var person2 = new Person("Tom");
Console.WriteLine(person1.Equals(person2)); // TRUE!!!!!!
Сравнение идет на основе значений!
Какая-то подмена понятий у наследования. Множественного наследования в C# нет, потому что интерфейсы не наследуются, они реализовываются. Просто в синтаксисе языка C# эти вещи выглядят одинаково, по это делает их по сути одинаковыми вещами.
ОтветитьРеализации в интерфейсах, лол
прикольный язык)
Пишу код на Unity, не понял почти ничего, кроме стека и кучи. Значит, я тупой в этом деле, и до Джуна мне как до Китая?))
ОтветитьВ динамический SQL в хранимых процедурах нельзя встраивать строковые параметры. В PHP класс наследуется через Extends а интерфейсы через Implement.
ОтветитьСпасибо, иниересно. Про наследование от object спрашивают, чтобы потом поговорить какие его методы можно переопределить и как ( ToString, Equals, GetHashCode ). А Singletone при регистрации контекста, например используется.
Ответитьинтерфейсы не наследуют , а реализуют
ОтветитьВсем привет. Пайтон и питон одно и тоже . Нужно все тексты (коды и тд ....) всех языков программирования переделать под пайтон. Языков программирования очень много и многие эти языки не понимают друг друга. Это полный пиз дец. Нужно обучать всех новичков в питон языку. Зачем создавать новые языки? Зачем усложнять себе жизнь? Нужно следующее обновление Пайтона чтобы он понимал другие языки программирования. Чем меньше языков программирования тем проще, удобнее и приятнее писать коды и читать их. Всем нужно начать изучать лишь 1 язык программирования. Да это будет неудобно, сложно и тяжело но оно того стоит. Нужно сам пайтон писать на языке пайтон. Нужно Пайтон улучшать чтобы он мог выполнять все то что умеет делать другие языки. Хватит быть крабом ведре. Отпустите других крабов. 1 и тоже можно делать на разных языках так зачем изучать другие языки? Проще от них отказаться. Это как отказаться от разных видов разъёмов для 1 вида разъёма. И имя ему тайпси. Люди до сих пор используют мини юсб, микро юсб, лайтнинг, тонкая нокия, толстая нокия, микро HDML ..... Все люди перешли на тайпси провод и разъём но некоторые все ещё создают лайтнинг ))))))).
Ответить1. Абстрактные классы, классы, интерфейсы и структуры (отличие от класса - Value Type, хранение в стеке. ) данных. Сейчас и record-ы спрашивать начнут.
2. String Builder.
3. IDisposable.
4. Делегаты.
5. Множественное наследование.
6. Object - базовый класс (редко спрашивают)
7. SQL Injection.
8. Throw & Throw Exception (Ex).
9. Singleton (или другие) - как добиться этого.
10. Dependency Injection.
11. Async/await.
Интерфейсы реализуют а не наследуют
ОтветитьВ синглтоне помимо private ,нужно использовать lock
ОтветитьКак пройти собеседование на C#?
Заходишь в офис, говоришь, что С# гамно, а в Microsoft все пидарасы и геи.
Получаешь оффер и через год становишься начальником конторы, ведь она стала успешной и больше не пишет на С#.
В С++ классы и стрктуры ничем не отличаются, кроме модификаторов доступа по умолчанию.
ОтветитьСейчас популярно описать реальную задачу и спросить, как собеседуемый будет ее решать. Интервьер обращает внимание на ход мыслей собеседуемого. Лучше задавать уточняющие вопросы обоим сторонам.
ОтветитьИнтерфейсы не наследуются, они реализуются. Разве нет..?
Однажды я сказал, что они наследуются --> меня послали просто на собеседовании.
1) Dispose необходимо вызывать при использовании неуправляемых ресурсов для высвобождения памяти.
2) Интерфейсы реализуются, а не наследуется(для кого то это придирка, а для кого то понимание что такое интерфейс и для чего он нужен). Т.е. множественного наследования нету. В этом ключе как раз не вижу никаких диссонансов в том что дали возможность реализовывать в интерфейсах некоторые методы.
Если кто-то работает напрямую с потоками ( Threadings) то для них методы (parameterizedThread) ожидают именно object параметры. Тут может пригодиться.
ОтветитьОтвратительный тип
ОтветитьПо поводу специфики работы GC меня несколько раз спрашивали. Хотя, по сути это никогда не пригодилось
Ответитьтак у типов значений базовым тоже является object
ОтветитьОчень хочу уже пойти на первое собеседование, но я все еще новичок :) совсем вот недавно закончил курс Сакутина по шарпу, сейчас ищу другие источники для получения знаний. Крутой монолог, во многом помог.
Ответитьабстрактный класс - методы определены но без реализации (с) аутор
во-первых, не бывает абстрактных классов
бывает тип абстрактного класса - вот это бывает
abstract class Base
{
int Method() { return 0; } // опа! реализация!
}
и на самом деле я всего лишь про то, что "с точки зрения" некоего языка [что называется общим соглашением] вышеприведённый код является абстрактным классом
однако же "с точки зрения" рантайма - всё является типом))) рантайм собсна и проверяет типизацию, и не более того[!], но это же значит, что если сменить тип [и это весьма просто] то рантайм будет считать этот класс вовсе не абстрактным)
ну потому что только в типе указана абстрактность, и более нигде
впрочем даже если "где то" в потрохах и стоит флаг абстрактного класса, то и этот флаг разумеется можно снять
так вы про какие абстрактные классы парите?))) всегда нужно разделять некий язык и реализацию этого языка в суровую реальность рантайма
а для рантайма всё то что существует в языке - да плевал рантайм на это всё то, что существует в этом вашем языке ахаха!)))
Про делегаты - Func, Action постоянно в вебе присутствуют, а так же лямбды, так что делегаты не покинули нас и в вебе )
ОтветитьОчень приятный монолог)))
ОтветитьАбстрактные классы это классы без реализации, это как спросили: Что значит знак главная дорога, а Мы отвечаем ну он желтый.
Интерфейсы не наследуются а реализуются, это разные вещи совершено, наследовать класс и наследовать интерфейс. Это как дать в морду и дать в жопу. Вроде одно и тоже но смысл разный
Интерфейс - это контракт. Он не наследуется, а реализуется. Именно поэтому и говорят, что в шарпе множественное наследование отсутствует.
Ответитьда я уже похоже готов пройти собес
Ответитьobject спрашивают как раз таки в теме Boxing/Unboxing. Когда метод принимает object т.к. этот метод по какой-то причине не делали generic, то скорее всего ожидают передачи reference type и downcast object к нужному типу. Но можно передать и value type. например int и нарваться на Boxing (когда со стека переменная переедет в кучу).
ОтветитьКакие-то легкие вопросы. В СНГ сейчас ко всему перечисленному спрашивают (на Senior позиции):
- Детали работы сборщика мусора, поколения объектов
- Task'и и детали работы: что там с потоками, перехват исключений, в каком потоке продолжается выполнение после await
- IEnumerable vs IQueryable
- Рефлексия
- SOLID, DRY, KISS
- Паттерны проектирования (одним синглтоном не отделаться, да и вообще начинать рассказ с синглотона - дурной тон)
- Многопоточность: дедлоки, примитивы синхронизации (lock, semaphore, monitor, mutex, event wait handle, Auto/Manual Reset Event и остальные)
в общем, CLR via C# приходится обновлять перед тем как собеседовать(ся)🤣
Спасибо за контент, который ты делаешь. Двигать образование - это круто. Хотел бы отметить, что утверждение "все значимые типы хранятся в стеке" верно лишь от части. Корректнее было бы сказать "все значимые типы хранятся там, где применяются", поскольку поле класса, которое является значимым типом хранится в куче, рядом с самим классом. На мой взгляд, это важно понимать, когда речь идет об организации памяти
ОтветитьВ С++ разница между классом и структурой только в том что по умолчанию в структуре поля публичные а в классе приватные...и все.
Класc не наследует интерфейс а реализует его...:)
Блин автор, как можно было сказать что делегат это указатель на функцию. Если придираться то делегат это вообще говоря тип данных, но даже если посмотреть на объект типа делегат, то это вообще ну никак не указатель на функцию
ОтветитьОкей, может быть я чего-то не понимаю, поясните плиз:если структура это поле класса, а объект класса лежит в хипе, то какого черта структура лежит только в стеке. Она же будет в хипе. Или где-то ошибка?
ОтветитьДобавлю из своего опыта прохождения собеседований вопросы, которые задавали мне, может кому-то будет полезно:
1) В чём разница между абстрактным классом и интерфейсом, примеры использования.
2) Разница между анонимным типом и кортежем?
3) Разница между finalizer и disposable?
4) Расскажите про принцип работы GC — поколения и графы объектов.
5) В чем разница между throw без параметра и с параметром?
6) В чём основная фишка словаря?
7) В каких случаях уместно использовать монитор, а в каких мьютекс?
8) Сколько способов создания потока существует, и перечислить с примерами реализации.
Но в абстрактных классах могут быть и методы с реализацией
Ответитьвообще-то множественное наследование ни ни. Тк. интерфейс не наследуется, а реализуется.
Интерфейс - это контракт. Его реализация бывает явной и неявной. Но это не наследование. И даже не рядом.
Интерфейсы реализуем, поэтому нет множ. Наследования
ОтветитьБлин, а я оказывается почти все знаю))
ОтветитьХорошее, насыщенное видео. Лайк.
Только у нас в России за ответы типа есть "наследование интерфейса" интервьюеры обычно делают facepalm и говорят что-то "дорогой соискатель, интерфейсы не наследуют, интерфейсы реализуют".
1. Struct vs Class мой любимый вопрос на собеседовании, на нем плывут 70-80% жунов и мидов. Все поголовно отвечают про копирование и про то что стурктуры в стеке, а классы в хипе(то что в интеренете за 5 минут можно найти). Следущий вопрос сразу а что будет если структура является полем класса, и тут труба... для тех кто ответит следующий вопрос: а зачем вообще структуры в C# и в чем разница массива структур и массива классов(например точка X,Y). А понимание ответов на самом деле очень важно при работе с большими данными.
2. Попросить рассписать сингелтон - таже беда, все слышали, но никто толком написать не может
3. В старом шарпе интерфейсу через экстеншены тоже можно методов написать, поэтому ничего кроме синтаксиса сильно не изменилось.
4. Еще 50% джунов и 25% мидов заявляют что Dispose удаляет объекты из памяти сразу по вызову ).
ооо парень)) За все valuetype в стеке прям сразу смотреть дальше не буду)) Проблема современных прогеров - никто не знает ничего про процессор))
ОтветитьАбстрактный класс:
1. Нельзя создавать объекты
2. Можно реализовывать свойства и методы
3. Позволяет объединить через наследование похожие по сущности классы
4. Абстрактрый класс именно наследуется, а не реализуется
5. Члены класса не обязательно должны быть public
6. Нет множественного наследования (относится ко всем классам)
Интерфейс:
1. Содержит только объявление методов и свойств без их реализации ( в последних версиях можно реализовывать)
2. Методы и свойства обязательно должны быть public
3. Объединяет разные по сущности классы, имеющие одинаковые свойства и методы, определенные в интерфейсе
4. Именно реализуется, а не наследуется
5. Возможна множественная реализация
Структура хранится в стеке, дальше можно не смотреть...
Отличие значемого типа от сылочного в том что значимый тип копируется по значению, то есть целеком, и не как не связан со своей копией! А при копировании сылочного типа создаётся новая ссылка на общии данные! А где что хранится вообще не в тему! Горе программист, да и ладно бы с ним, так он людей учит!
Информация в видео полезная, спасибо! А вот со множественным наследованием немного факапнулся) интерфейсы мы не наследуем а имлементируем, в джаве это явно показали разными операторами extends и implements)
Ответить