В этой статье я собрал самые типичные и частые вопросы на собеседовании для Senior C# / .NET разработчика которые помогут вам не только подготовиться к интервью, но и улучшить свои знания по многим смежным с .NET темам.
Любое собеседование требует подготовки и "рефреша" знаний. В данной статье описываем основные топики которые нужно повторить не зависимо от вашего стека технологий
Статья о Шаблонах (или паттернах) проектирования. Паттерны описывают типичные способы решения часто встречающихся проблем при проектировании программ.
Что такое паттерны проектирования?
Паттернами проектирования (Design Patterns) называют решения часто встречающихся проблем в области разработки программного обеспечения. В данном случае предполагается, что есть некоторый набор общих формализованных проблем, которые довольно часто встречаются, и паттерны предоставляют ряд принципов для решения этих проблем.
В данной статье мы рассматриваем Поведенческий шаблон проектирования "Memento" и его реализацию на .NET
Назначение:
Паттерн Хранитель (Memento) — позволяет выносить внутреннее состояние объекта за его пределы для последующего возможного восстановления объекта без нарушения принципа инкапсуляции.
Не нарушая инкапсуляции, паттерн Memento получает и сохраняет за пределами объекта его внутреннее состояние так, чтобы позже можно было восстановить объект в таком же состоянии.
Является средством для инкапсуляции "контрольных точек" программы.
Паттерн Memento придает операциям "Отмена" (undo) или "Откат" (rollback) статус "полноценного объекта".
Когда использовать Memento?
Когда нужно сохранить состояние объекта для возможного последующего восстановления;
Когда сохранение состояния должно проходить без нарушения принципа инкапсуляции;
В данной статье мы рассматриваем поведенческий шаблон проектирования "Интерпретатор" и его реализацию на .NET
Назначение:
Паттерн Интерпретатор (Interpreter) определяет представление грамматики для заданного языка и интерпретатор предложений этого языка. Как правило, данный шаблон проектирования применяется для часто повторяющихся операций.
Когда использовать Паттерн Interpreter:
Интерпретатор следует использовать когда вам необходимо интерпретировать запись в другом языке и тд. Как один из примеров может служить перевод римских цифр в арабские.
В данной статье мы рассматриваем структурный шаблон проектирования "Flyweight" и его реализацию на .NET
Назначение:
Паттерн Приспособленец (Flyweight) - шаблон проектирования, который позволяет использовать разделяемые объекты сразу в нескольких контекстах. Данный паттерн используется преимущественно для оптимизации работы с памятью.
Приспособленец это экземпляр объекта, который выдает себя за группу самостоятельных экземпляров.
Когда использовать Flyweight?
в приложении используется большое число очень схожих экземпляров заданного класса;
(и) часть состояния объекта является контекстной и может быть легко вынесена во внешние структуры;
(и) после вынесения части состояния, все экземпляры становятся одинаковыми и это дает возможность заменить их одним;
(и) приложение не проверяет идентичность объектов, т.к. в этом случае все якобы самостоятельные экземпляры являются одним объектом.
В данной статье мы рассматриваем структурный паттерн "Мост" и его реализацию на .NET
Назначение:
Мост (Bridge) - структурный шаблон проектирования, который позволяет отделить абстракцию от реализации таким образом, чтобы и абстракцию, и реализацию можно было изменять независимо друг от друга.
Шаблон Мост предполагает, что основной код, необходимый для функционирования объекта, переносится в реализацию. Всё остальное, включая взаимодействие с клиентом, содержится в абстракции. Её методы, при необходимости, могут быть изменены или дополнены. Кроме того, она содержит экземпляр реализации и использует его для обработки поступающих от клиентов запросов. Под обработкой подразумевается как прямая переадресация запроса, так и вызов группы методов реализации для получения результата.
Когда использовать паттерн мост?
Когда надо избежать постоянной привязки абстракции к реализации
Когда наряду с реализацией надо изменять и абстракцию независимо друг от друга. То есть изменения в абстракции не должно привести к изменениям в реализации