December 21, 2006

Что должен знать правильный .NET-разработчик

Каждый кто пишет код

* Объясните разницу между нитью (Thread) и процессом (Process)
* Что такое сервис (Windows Service) и как его жизненный цикл отличается от «стандартного» EXE?
* Какой максимальный объем памяти может адресовать один процесс? Отличается ли он от максимального объема виртуальной памяти, доступной системе? Как это влияет на структуру системы?
* В чем различие между EXE и DLL?
* Что такое строгая типизация (strong-typing) в сравнении со слабой типизацией (weak-typing)? Какая предпочтительнее? Почему?
* Некий продукт называют «контейнером компонентов» ("Component Container"). Назовите по крайней мере 3 контейнера компонентов, поставляемых с семейством продуктов Windows Server Family.
* Что такое PID? Чем он полезен при выявлении неисправностей системы?
* Сколько процессов могут слушать один и тот же порт TCP/IP?
* Что такое GAC? Какую проблему он разрешает?

.NET-разработчик среднего уровня

* Объясните разницу между интерфейсно ориентированным (Interface-oriented), объектно ориентированным и аспектно ориентированным (Aspect-oriented) программированием
* Объясните что такое «интерфейс» и чем он отличается от класса
* Что такое Reflection?
* В чем различие между XML Web Services с использованием ASMX и .NET Remoting с использованием SOAP?
* Являются ли системы типов, представленные в XmlSchema и в CLS — изоморфными?
* Концептуально, в чем различие между ранним и поздним связыванием (early-binding и late-binding)?
* Использование Assembly.Load — это статическая или динамическая ссылка?
* Когда уместно использование Assembly.LoadFrom, а когда Assembly.LoadFile?
* Что такое «Asssembly Qualified Name»? Это имя файла? В чем различие между ними?
* Правильно ли так писать?
Assembly.Load("foo.dll");
* Чем отличается «strongly-named» сборка от «НЕ strongly-named» сборки?
* Может ли DateTime равняться null?
* Что такое JIT? Что такое NGEN? Каковы преимущества и ограничения каждого из них?
* Как основанный на поколениях сборщик мусора в .NET CLR управляет жизненным циклом объекта? Что такое «non-deterministic finalization»?
* В чем различие между Finalize() и Dispose()?
* Чем полезен using()? Что такое IDisposable? Как он поддерживает deterministic finalization?
* Что делает эта полезная команда? tasklist /m "mscor*"
* В чем разница между «in-proc» и «out-of-proc»?
* Какая технология позволяет выполнять out-of-proc взаимодействие в .NET?
* Когда вы запускаете компонент из под ASP.NET, в каком процессе он работает под Windows XP? Windows 2000? Windows 2003?

Ведущий разработчик

* Что не так вот в следующей строке?
DateTime.Parse(myString);
* Что такое PDB? Где они должны находится, чтобы можно было выполнять отладку?
* Что такое «цикломатическая сложность» (cyclomatic complexity) и почему она важна?
* Напишите стандартный lock() плюс «двойную проверку» для создания критической секции вокруг доступа к переменной.
* Что такое «FullTrust»? Имеют ли FullTrust сборки, помещенные в GAC?
* Какие преимущества получает ваш код, если вы декорируете его атрибутами, относящимися к особым Security permissions?
* Что делает эта команда?
gacutil /l | find /i "Corillian"
* Что делает эта команда?
sn -t foo.dll
* Какие порты брандмауэра должны быть открыты для DCOM? Каково назначение порта 135?
* Сопоставьте OOP и SOA. Каковы принципы каждого из них?
* Как работает XmlSerializer? Каких ACL permissions требует использующий его процесс?
* Почему catch(Exception) почти всегда — плохая мысль?
* В чем разница между Debug.Write и Trace.Write? Когда должен быть использован каждый из них?
* В чем различие между компиляцией в Debug и в Release? Есть ли значительная разница в скорости? Почему или почему нет?
* Как работает JIT — по сборке целиком или по методу? Как это влияет на working set?
* Сравните использование абстрактного базового класса и использование интерфейса?
* В чем различие между a.Equals(b) и a == b?
* В контексте сравнения, что такое идентичность объектов по сравнению с эквивалентностью объектов?
* Как можно выполнить глубокое копирование (deep copy) в .NET?
* Изложите ваше понимание IClonable.
* Что такое «упаковка» (boxing)?
* string — это тип значений (value type) или ссылочный тип?
* В чем значимость паттерна "PropertySpecified", используемого в XmlSerializer? Какую проблему он пытается разрешить?
* Почему в .NET выходные параметры (out parameters) не стоит применять? Действительно ли это так?
* Может ли атрибут быть установлен на один из параметров метода? Чем это полезно?

Разработчик компонентов на C#

* Сопоставьте использование override и new. Что такое «shadowing»?
* Объясните использование virtual, sealed, override и abstract.
* Объясните использование и значение каждого компонента строки:
Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d
* Объясните различия между public, protected, private и internal.
* Какое преимущество вы получаете от использования первичной сборки взаимодействия (Primary Interop Assembly, PIA)?
* Благодаря какому механизму NUnit узнает, какой метод протестировать?
* В чем различие между:
catch(Exception e){throw e;} и
catch(Exception e){throw;}
* В чем разница между typeof(foo) и myFoo.GetType()?
* Объясните что происходит в первом конструкторе:
public class c{ public c(string a) : this() {;}; public c() {;} }
Чем полезна такая конструкция?
* Что такое «this»? Может ли this использоваться в статическом методе?

Разработчик на ASP.NET (UI)

* Объясните, как POST-запрос формы из браузера становится на серверной стороне событием — таким как Button1_OnClick.
* Что такое «PostBack»?
* Что такое «ViewState»? Как он кодируется? Является ли он шифрованным? Кто использует ViewState?
* Что такое element и для чего используются эти две технологии ASP.NET? (В оригинале: What is the element and what two ASP.NET technologies is it used for?)
* Какие три Session State providers доступны в ASP.NET 1.1? Какие преимущества и недостатки у каждого из них?
* Что такое «Web Gardening»? Как его использование влияет на проект?
* В заданном ASP.NET-приложении, сколько объектов-приложений имеется, если это одно-процессорная машина? двухпроцессорная? двухпроцессорная с включенным Web Gardening? Как это отражается на проекте?
* Используются ли нити (threads) ASP.NET приложения повторно для различных запросов (requests)? Получает ли каждый HttpRequest свою собственную нить? Должны ли вы в ASP.NET использовать Thread Local storage?
* Полезен ли атрибут [ThreadStatic] в ASP.NET? Есть ли побочный эффект? Это хорошо или плохо?
* Дайте пример того, как использование HttpHandler может упростить существующий проект, который обслуживает Check Images на .aspx-странице.
* На события какого вида может подписываться HttpModule? Какое влияние они могут оказать на реализацию? Что может быть сделано без перекомпиляции ASP.NET-приложения?
* Опишите способы представления «arbitrary endpoint (URL)» и направьте запросы к этой endpoint в ASP.NET.
* Объясните как работают cookies. Дайте пример злоупотребления Cookie.
* Объясните важность HttpRequest.ValidateInput()?
* Какого рода данные передаются в заголовках HTTP (HTTP Headers)?
* Сравните HTTP-запросы вида GET и POST. Что такое «HEAD»?
* Назовите и опишите по крайней мере 6 статус-кодов HTTP (HTTP Status Codes) и объясните о чем они говорят клиенту, давшему запрос.
* Как работает «if-not-modified-since»? Как это может быть программно реализовано на ASP.NET?
* Объясните <@OutputCache%> и использование «VaryByParam», «VaryByHeader».
* Как работает «VaryByCustom»?
* Как можно реализовать кэширование готового HTML в ASP.NET, кэшируя отправляемые версии страниц, полученные по всем значениям q= кроме q=5 (например, http://localhost/page.aspx?q=5)?

Разработчик, использующий XML

* В чем назначение XML Namespaces?
* Когда уместно использование DOM? Когда неуместно? Есть ли ограничения по размеру?
* Что такое «WS-I Basic Profile» и почему он важен?
* Напишите простой XML-документ, использующий пространство имен (namespace) по умолчанию, а также qualified (prefixed) namespace. Добавьте элементы из обоих пространств имен.
* В чем основное фундаментальное различие между элементами (Elements) и атрибутами (Attributes)?
* В чем различие между «Well-Formed XML» и «Valid XML»?
* Как бы вы валидировали XML используя .NET?
* Почему такое использование — почти всегда неудачно. В каких случаях такое уместно?
myXmlDocument.SelectNodes("//mynode");
* Объясните различие между «pull-style parsers» (XmlReader) и «eventing-readers» (Sax)
* В чем различие между XPathDocument и XmlDocument? Опишите ситуацию когда один из них может быть использован над другим.
* В чем различие между XML "Fragment" и XML "Document"
* Что означает — «каноническая» форма XML?
* Почему спецификация XML InfoSet отличается от Xml DOM? Что пытается решить InfoSet?
* Сравните DTD и XSD. В чем они схожи, в чем различны? Что предпочтительнее и почему?
* Поддерживаются ли DTD в System.Xml? Как именно?
* Всякая ли XML Schema может быть представлена в виде графа объектов? А наоборот?

Оригинал перевода:

http://www.c-gator.ru/articles/what-great-dot-net-developers-ought-to-know-interview-questions/

Оригинал поста на английском:

http://www.hanselman.com/blog/WhatGreatNETDevelopersOughtToKnowMoreNETInterviewQuestions.aspx

No comments: