Жизненный цикл запроса:
Подробное описание на стековерфлоу
Очень подробная схема в пдф (от майкрософта)
Вопросы по ООП
Полиморфизм – это возможность объектов с одинаковой спецификацией иметь различную реализацию. Это когда вы создаете абстрактный класс Dog с виртуальным либо абстрактным методом Bark что позволяет задать, заменить либо добавить код метода в пронаследованном класе. При этом пронаследованный клас останется экземпляром Dog и будет иметь тот же интерфейс (метод Bark с такой-же сигнатурой что и в базвом класе).
На практике полиморфизм почти всегда связан с наследованием: не пронаследовав класс – не получишь полиморфизма.
Полиморфизм (на понятном языке, опуская нюансы) это параметризация, в языках программирования – это параметризация методов. То есть, вы можете заменять (параметризировать) код в методах и свойствах, не изменяя интерфейса (сигнатуры) функции.
В свою очередь наследование это параметризация класов.
В C# и CLR разделяют два типа параметризации класов
1) С фиксированым базовым класом (обычное наследование классов)
2) С нефиксированным базовым класом (реализация интерфейсов) по средствам этого типа параметризации происходит множественное наследование в CLR
Общие советы и ссылки
– долгосрочный – читать книги, учебные проекты
– краткосрочный – подготовка непосредственно перед собеседованием по основным вопросам2. В 70% компаний на собеседовании спрашивают: “Что вы знаете о нашей компании?”. Есть смысл погуглить, чем занимается компания.
Общие советы для любого собеседования
Общие советы для веб-разработчика (на английском)
Много хороших вопросов по дотнету и смежным технологиям
Особенности строк в .NET
Размер строки примерно = 20 + length*2
var s = “something”; s[5] = ‘x’; // exception
Строки являются настоящими ссылочными типами, то есть они всегда располагаются в куче.
Интернирование строк — это механизм, при котором одинаковые литералы представляют собой один объект в памяти.
Строки — неизменяемы (а значит и потокобезопасны)
Строки переопределяют Object.Equals
Вопросы по JavaScript и C#, которые неожиданно вызывают затруднения на собеседованиях
JS: объяснение нюансов falsy/truthy: +!!{} == 1
JS: приведение типов: 2 + 3 + “4” = 54
C#: Чтобы интернирование строк было возможно, строка должна быть неизменной (immutable). Преимущества неизменности строк: потокобезопасность, возможность использования строк в качестве ключей в словарях и хэш-таблицах.
Хорошие привычки C# = плохие привычки JavaScript
1) “0” == true, 0 == false
2) Вместо проверки if (!string.IsNullOrEmpty(someString)) пишется if (someString) – выполнится проверка на значения undefined, null, и “”
3) someString = someString || “Default value” – если первое значение falsy, то присвоится второе
4) === делает проверку на тип
5) Используйте оператор new только когда Вы создаете объект и Вы хотите, чтобы он использовал свой конструктор.
6) Используйте for…in с проверкой hasOwnProperty() для объектов, чтобы исключить из результата неожиданные объекты наследованные от прототипа.
7) Область видимости определяется не фигурными скобками, а функцией. Объявления переменных поднимаются в начало функции (variable hoisting)