пятница, 16 июля 2010 г.

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

Автор: Scott Hanselman
Оригинал: What Great .NET Developers Ought To Know (More .NET Interview Questions)

Что должен знать правильный .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 может быть представлена в виде графа объектов? А наоборот?
Перевод: Никита Зимин,
ведущий разработчик компании «Деловые программы»

вторник, 13 июля 2010 г.

Анекдот :)

Настройщик пианино настраивает инструмент в комнате отдыха психбольницы.
В комнату заходит мужчина и включает телевизор. Орущий телевизор мешает
настройщику работать, но он решает не спорить, а просто подходит к
телевизору и молча его выключает. Мужчина странно смотрит на настройщика
и снова включает телевизор. Так повторяется несколько раз. Первым не
выдерживает настройщик:
- Послушайте, я пытаюсь настроить пианино и для этого мне нужна тишина.
Тогда мужчина рассмеялся и сказал:
- Я телевизионный мастер и пришёл починить телевизор. Я думал, что вы
 сумасшедший и просто стучите по клавишам.