.NET →  Вопросы для собеседования на позицию ASP.Net Developer/C# (Intertviews question ASP.Net/C#)

Некоторое время тому назад, мне пришлось искать новую работу, и проходить тернистый путь собеседований. За 2 недели, я прошёл около 8-10 собеседований. За время похода я успел собрать большую кучу самых популярных вопросов, которые хотел бы вам презентовать. Надеюсь, что данный списочек поможет кому то при поиске работы, а кого то быть может подтолкнёт к освежению своих данных. А кто то просто, что то новое узнает :)

Вопросы
  1. Что такое полиморфизм, инкапсуляция, наследование. ООП
  2. Какие виды типов есть в .Net (reference, by value)
  3. box/unbox
  4. Managed code, Managed Envirovment, Security
  5. ref, out
  6. new, public, override, internal, private, protected, extern, readonly, static
  7. Вызов статических конструкторов
  8. AppDomain
  9. Threads, Crytical section, Monitor, Semaphore, lock(monitor)
  10. Жизненый цикл страницы, контролов, мастер пейдж (page_load)
  11. struct наследование от абстрактной структурі
  12. web servise class
  13. создание веб сервиса в блокноте
  14. webmethod
  15. события в асп.нете и кастом евенты
  16. events, delegate
  17. Http handler and lify cycle
  18. CTR, CTS, CLR
  19. Sql index cluster/non-cluster
  20. Interface
  21. catch
  22. GAC
  23. Global.asax events
  24. HttpModule
Ответы на вопросы:
  1. Что такое полиморфизм, инкапсуляция, наследование. ООП
    • Полиморфизм: Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию.
    • Наследование: Механизм позволяющий создать новый класс, который наследует родительский класс при этом свойства и методы родительского класса заимствуються новым классом
    • Инкапсуляция: свойство языка программирования, позволяющее объединить и защитить данные и код в объект и скрыть реализацию объекта от пользователя (прикладного программиста). При этом пользователю предоставляется только спецификация (интерфейс) объекта.
  2. Какие виды типов есть в .Net (reference, by value). Существуют следующие типы Value type, reference type. Value type хранит значения в стеке (более быстрый доступ к данным) reference type хранит значения в куче(Больший объём памяти для хранения данных).string является ссылочным типом.
  3. boxing/unboxing Боксирование, процесс преобразования объекта из value type в reference type. Анбоксинг обратный процесс. http://msdn.microsoft.com/ru-ru/library/4d43ts61.aspx
  4. Managed code, Managed Envirovment, Security. Такой код, который управляеться средой .Net framework, в данном случае за безопасностью выполнения кода следит среда, которая может ограничить доступ приложения, если нет соответсвующих на то прав. Это означает, что CLR заботится об управлении памятью, о совместимости между платформами, о безопастности код
  5. ref, out:
    • ref - позволяет передавать типы данных по ссылке, т.е. внутри метода при передаче value type, мы будем иметь ссылку на значение, и сможем изменить значение, при этом после завершения метода значение будет обновленно, т.е. будет вести себя как ссылочный тип. В случае reference type и передаче по ref, мы можем уничтожить ссылку, и тогда объект будет потерян.
    • out - говорит о том, что вызывающий метод с параметром out должен обязательно присвоить значение, в противном случае возникнит ошибка компиляции.
  6. модификаторы
    • new позволяет в наследованном классе скрывать методы и свойства от родительского класса. При этом при приведении наследника к родителю и вызова метода, который объявлен наследнике как new, такой метод не будет вызван, вместо него вызоветься метод базового класса.
    • private - Доступ к закрытым членам можно получить только внутри тела класса или структуры, в которой они объявлены. Также если тело класса имеет внутренний класс, то ему тоже будет предоставлен доступ
    • public- член класса или тип будет виден без ограничений
    • protected- Доступ ограничен содержащим классом или типами, которые являются производными от содержащего класса.
    • internal- Доступ ограничен текущей сборкой.
    • override -  позволяет перегружать методы в наследуемом классе, которые в родительском объявленны, как virtual
    • virtual - используется для изменения объявлений методов, свойств, индексаторов и событий и разрешения их переопределения в производном классе. Например, этот метод может быть переопределен любым производным классо
    • extern - используется для объявления метода с внешней реализацией. Когда службы взаимодействия используются для вызова неуправляемого кода, модификатор extern обычно используется с атрибутом DllImport. В этом случае также необходимо объявить метод как static в соответствии со следующим примером:

      [DllImport("avifil32.dll")]
      private static extern void AVIFileInit();

    • static - используется для объявления статического члена, принадлежащего собственно типу, а не конкретному объекту. Модификатор static можно использовать с классами, полями, методами, свойствами, операторами, событиями и конструкторами, но нельзя — с индексаторами, деструкторами или типами, отличными от классов. На статический член нельзя ссылаться через экземпляр. а можно только через имя типа.
    • readonly - это модификатор, который можно использовать для полей. Если объявление поля содержит модификатор readonly, присвоение значений таким полям может происходить только как часть объявления или в конструкторе в том же классе. Поле с модификатором const может быть инициализировано только при объявлении поля. Поле с модификатором readonly может быть инициализировано при объявлении или в конструкторе.
    • sealed - запрещает другим классам наследовать от этого класса.
  7. Статические конструкторы вызываются на определенном этапе между запуском программы и созданием экземпляра класса.
    • Статические конструкторы обладают следующими свойствами.
      • Статический конструктор не принимает модификаторы доступа и не имеет параметров.
      • Статический конструктор вызывается автоматически для инициализации класса перед созданием первого экземпляра или ссылкой на какие-либо статические члены.
      • Статический конструктор нельзя вызывать напрямую.
      • Пользователь не управляет тем, когда статический конструктор выполняется в программе.
      • Типичным использованием статических конструкторов является случай, когда класс использует файл журнала и конструктор применяется для добавления записей в этот файл.
      • Статические конструкторы также полезны при создании классов-оболочек для неуправляемого кода, когда конструктор может вызвать метод LoadLibrary.
      • Если статический конструктор инициирует исключение, среда выполнения не вызывает его во второй раз, и тип остается неинициализированным на время существования домена приложения, в котором выполняется программа.
  8. AppDomain - представляет домен приложения, являющийся изолированной средой, в которой выполняются приложения. Данный класс не может наследоваться.
    Домены приложений, представленные объектами AppDomain, помогают обеспечить изоляцию, выгрузку и границы безопасности для выполнения управляемого кода. http://msdn.microsoft.com/ru-ru/library/system.appdomain.aspx
    • Используйте домены приложений для изоляции задач, которые могут нарушить работу процесса. Если состояние AppDomain, выполняющего задачу, становится нестабильным, AppDomain можно выгрузить, и это не отразится на процессе. Это важно для процессов, которые должны выполняться длительное время без перезапуска. Также домены приложения можно использовать для изоляции задач, которые не должны совместно использовать данные.
    • Если сборка загружается в используемый по умолчанию домен приложения, ее нельзя выгрузить из памяти, пока выполняется процесс. Однако, если открыть второй домен приложения для загрузки и выполнения сборки, эта сборка будет выгружаться, когда выгружается домен приложения. Используйте этот прием для минимизации рабочего набора долго выполняющихся процессов, время от времени использующих большие библиотеки DLL.
  9. Threads, Crytical section, Monitor, Semaphore, lock(monitor) Проблемы возникающие при работе с потоками:
    • Доступ к общим ресурсам
    • взаимоблокировка (один поток не может завершится до тех пор пока другой не завершит какой то процесс, при этом второй поток не может закончить, пока первый не закончил)
    • синхронизация потоков
    Для разрешения проблем возникающих при работе с потоками используются Crytical section, Monitor, Semaphore, lock(monitor)
  10. Жизненый цикл страницы, контролов, мастер пейдж (page_load) PreInit, Init, InitComplete (Load viewstate, post data),  PreLoad, Load (recursive for all children control calling load),Вызов всех событий, LoadComplete, PreRender, SaveStateComplete (viewstate), render, unload см. ссылку.Сначала грузится контент пейдж лоад, а потом мастерпейдж.ссылка
  11. Структуры Абстрактной структурі не существует. Структуры могут реализовывать интерфейс, но они не могут наследовать от другой структуры. По этой причине члены структуры нельзя объявить как protected.
  12. web servise class. Определяет необязательный базовый класс для веб-служб XML, обеспечивающий прямой доступ к общим объектам ASP.NET, таким как состояние приложения или сеанса. Если доступ к общим объектам ASP.NET не требуется, можно создавать веб-службы, не являющиеся производными от WebService. Доступ к дополнительным объектам ASP.NET возможен через Context.
  13. <%@ WebService Language="C#" Class="Util" %>
    
    usingn System;
    using System.Web.Services;
    
    public class Util: WebService {
    
        [WebMethod(Description="Returns the time as stored on the Server", EnableSession=false)]
        public string Time() {
            return Context.Timestamp.TimeOfDay.ToString();
        }
    }
    
  14. webmethod. Добавление этого атрибута к методу в веб-службе XML, созданной с помощью ASP.NET, делает возможным вызов этого метода для удаленных веб-клиентов. Этот класс не может быть унаследован.
  15. события в асп.нете и кастом евенты. Для реализации своих собітий необходимо унаследоваться от WebRequestEvent. Примеры http://msdn.microsoft.com/ru-ru/library/ms227545.aspx http://msdn.microsoft.com/ru-ru/library/system.web.management.webrequestevent.aspx
  16. events, delegate. delegate это класс, а event это член класса с типом delegate. События это особый тип многоадресных делегатов, которые можно вызвать только из класса или структуры, в которой они объявлены (класс издателя). Если на событие подписаны другие классы или структуры, их методы обработчиков событий будут вызваны когда класс издателя инициирует событие. Ключевое слово delegate используется для объявления ссылочного типа, который может быть использован для инкапсуляции именованного или анонимного метода.
  17. HttpHandler позволяет получать данные от сервера, при этом не обрабатывать все события стандартной веб страницы. Применяется для получения изображения из БД, получение RSS ленты и прочее. (.ashx)
  18. CLS, CTS.Common Type System (CTS) describes how types are declared, used and managed. CTS facilitates cross-language integration, type safety, and high performance code execution. The CLS is a specification that defines the rules to support language integration. This is done in such a way, that programs written in any language (.NET compliant) can interoperate with one another. This also can take full advantage of inheritance, polymorphism, exceptions, and other features. CLR - Common Language Runtime - среда которая выполняет код и предлагает службы, облегчающие процесс разработки. CTS - Описание и определение способов объявления, использования и управления типами в среде выполнения для поддержки интеграции языков программирования.
  19. Sql index cluster/non-cluster. Существует два типа индексов: кластерные и некластерные. При наличии кластерного индекса строки таблицы физически хранятся в заданном порядке и непосредственно связаны с элементами индекса, благодаря чему значительно ускоряется доступ к данным при использовании запросов, использующих данный индекс. Если в таблице нет кластерного индекса, таблица является неупорядоченной. Некластерный индекс, созданный для такой таблицы, содержит только указатели на записи таблицы, в связи с чем при выборке необходимо по крайней мере ещё одно обращение к диску для получения собственно записи.
  20. Интерфейс содержит только подписи методов, свойств, событий или индексаторов. Реализация членов выполняется в классе или в структуре, реализующей интерфейс
  21. Catch. Инструкция try-catch состоит из блока try, за которым следует одно или несколько предложений catch, в которых определяются обработчики для различных исключений.Можно использовать несколько предложений catch. В этом случае будет иметь значение порядок следования предложений catch, поскольку предложения catch будут проверяться именно в этом порядке. При использовании в качестве первого перехватчика Exception, появится сообщение об ошибке: A previous catch clause already catches all exceptions of this or a super type ('System.Exception')
  22. GAC - The global assembly cache stores assemblies specifically designated to be shared by several applications on the computer. Решает задачи версионирования сборок.
Принимаются вопросы, пожелания, предложения. По мере поступления вопросов буду отвечать на все интересующие вопросы.

дополнение:

UPD: Перенёс в блог: .Net Framework

комментарии:

Enetri 29.04.2010 15:37
Михаил, именных блогов у нас нет — да и нет в них особого смысла. Кроме саморекламы, конечно :) Поэтому придумывайте красивое "коллективное" название, и будете зачинателем этой колонки. Проходим собеседование, например. Или любое другое, на ваш выбор.
+1Mikhail Trifonov 29.04.2010 16:35
Спасибо, буду знать, перенёс в соответствующий блог
Enetri 29.04.2010 17:30
Маленькая подсказка: разноцветной подсветки синтаксиса у нас нет (beta, все-таки), а вот HTML-тег pre — пожалуйста: ) Или такой вот весьма полезный комплект, для цитирования кода: <pre><code></code></pre>
Mikhail Trifonov 29.04.2010 17:36
Хм, по поводу цвета прошу прощения, не совсем понял про какой именно вы говорите, но данный блог я переделывал со своего блога, может от туда ХТМЛ лишний пришёл.
Enetri 29.04.2010 17:40
Для сохранения форматирования кода (отбивок) можно использовать контейнер <pre></pre>
Enetri 29.04.2010 17:44
А лишнего кода наш цербер парсер не пропустит, не переживайте. Как минимум, именно такая ответственная задача на него возложена администрацией. Согласно служебной инструкции, ему строго-настрого запрещено это делать :)

добавить комментарий: