Previous Entry Поделиться Next Entry
Вопросы и ответы по C#, Net, ASP.Net для прохождения или проведения собеседования.
ivinsky
В процессе подготовки к удаленному собеседованию составил список возможных вопросов по Net. В результате ответы на треть вопросов уже были готовы. Вопросы и ответы под катами. Надеюсь, помогут :)

TOP Вопросы на засыпку


10. «Какие типы можно использовать в предложении foreach?»
Массивы, коллекции. Классы в которых реализован интерфейс System.Collections.IEnumerable.
9. «В чем различие между классом и структурой?» -
Для С# классы System.Object, System.Exception, System.File-Stream и System.Random — это ссылочные типы (память выделяется из упр. кучи). В свою очередь размерные типы в документации называются структурами (structure) и перечислениями (enumeration). Например, структуры System.In132, System.Boolean, System.Decimal, System.TimeSpan и перечисления System.DayOfWeek, System.10.FileAttributes и System.Drawing.FontStyle являются размерными типами (хранятся обычно в стеке потока, но могут быть встроены в ссылочные типы).
8. «Что означает модификатор virtual?».
При наследовании класса. Данный метод м.б. переопределен в производных классах с помощью ключевого слова override.
7. «Чем отличается event от delegate?»
Delegate – это по сути указатель на функцию
В С# модель издатель — подписчик, где класс публикует событие, которое он может инициировать, и любые классы могут подписаться на это событие. Метод, вызываемый при возникновении события, определяется делегатом
6. «Может ли класс реализовать два интерфейса, у которых объявлены одинаковые методы? Каким образом?»
Да.
public class GiuseppePizzaria : IWindow, IRestaurant {
// Реализация метода GetMenu интерфейса IWindow.
Object IWindow.GetMenu() { ... }
// Реализация метода GetMenu интерфейса IRestaurant.
Object IRestaurant.SetMenu() { ... }
// Метод GetMenu, не относящийся к интерфейсам.
5. «Что такое GAC?»
Global Assembly Cache
4. «В чем разница инкапсуляции и сокрытия?»
Инкапсуляция предполагает формирование классов, т.е. размещение в одном месте сразу и структур данных, и методов. Инкапсуляция также предполагает установку области видимости структур данных и методов от использования их вне класса, в частности сокрытие данных и методов использую private.
3. «Что такое частные и общие сборки?» -.
Частные находятся в каталоге программы, а общие в GAC
2. «Что такое .Net Framework?»
Общеязыковая исполняющая среда common language runtime (CLR) + и библиотека классов framework class library (FCL).
1. «Чем managed code отличается от unmanaged code?» -
Это означает, что CLR заботится об управлении памятью, о совместимости между платформами, о безопасности кода и так далее Это хорошо описано у Рихтера.


Общие вопросы


1. Поддерживает ли C# множественное наследование?
gdr_live: С# поддерживает множественное наследование в виде наследования от класса и нескольких интерфейсов, или просто от нескольких интерфейсов.
Но не поддерживает наследование от нескольких классов.
2. Кому доступны переменные с модификатором protected на уровне класса?
Любому классу-наследнику.
3. Наследуются ли переменные с модификатором private?
Да, но они не являются доступными.
4. Опишите модификатор “protected internal”.
Члены с таким модификатором доступны классам, находящимся в той же сборке и унаследованным от данного класса.
5. Назовите класс .NET, от которого наследуются все классы?
System.Object.
6. Что обозначает термин immutable (неизменяемый)?
Это значит, что данные, хранящиеся в переменной, не могут быть изменены. При этом заметьте, что значение переменной может быть изменено - путём отказа от использования старых данных, которые могут быть изменены.
Оригинальные данные остаются в памяти, а новые значения создаются вновь, в новой области памяти. Пример тип String
7. Какая разница между классами System.String и System.Text.StringBuilder?
Данные, хранящиеся в классе System.String и есть неизменяемые (immutable). Класс System.StringBuilder разрабатывался так, чтобы над изменяемой строкой можно было проделать множество операций. То есть при каждой операции над объектом класса System.String происходит перенос данных в новую область памяти, что влияет на производительность программы.
8. Какое преимущество использования класса System.Text.StringBuilder перед System.String?
Класс StringBuilder более эффективен в случае работы с большим количеством строк. Объекты класса System.String неизменяемы, поэтому при каждом изменении строки создаётся новый объект в памяти.
9. Можно ли хранить разные типы данных в объекте класса System.Array?
az_spb_ru
static void Main(string[] args) {
     object[] arr = new object[] { "string", 0, new Guid() };
     foreach (object var in arr)
     {
         Console.WriteLine(var.GetType().ToString());
     }
     Console.ReadKey();
      double d = 0.0;
     ValueType[] arr2 = new ValueType[] { d, 0, new Guid() };
     foreach (ValueType var in arr2)
     {
         Console.WriteLine(var.GetType().ToString());
     }
     Console.ReadKey();
  } 

10. Объясните разницу между System.Array.CopyTo() и System.Array.Clone()?
Первая операция осуществляет глубокое копирование массива, а вторая – поверхностное. Поверхностное копирование массива копирует только сами элементы объекта класса Array, независимо от того являются они ссылочными или значимыми типами.
Копирования объектов, на которые ссылаются ссылочные типы не происходит. Ссылки в новом объекте класса Array указывают на те же объекты, что и ссылки в оригинальном массиве Array. Глубокое копирование копирует как элементы класса Array, так и объекты, на которые они явно или неявно ссылаются.
11. Как отсортировать элементы массива в убывающем порядке?
Нужно вызвать метод Sort(), а затем метод Reverse().
12. Какой класс коллекций в .NET позволяет получить доступ к элементу с использованием уникального ключа?
HashTable.
13. Какой класс используется в реализации класса SortedList?
Этот класс является гибридом классов HashTable и Array.
14. Будет ли выполнен блок finally, если не было сгенерировано исключение?
Да.
15. Какой синтаксис нужно использовать в C# для отлова любого возможного исключения?
Блок catch, отлавливающий исключения типа System.Exception. Также можно просто использовать catch{}, не указывая тип исключения.
16. Можно ли выполнить несколько блоков catch дляодного оператора try?
Нет. Как только отработал один блок, управление передаётся в блок finally (если такой есть).
17. Назовите три составных части модели известной как трёхуровневое приложение.
БД-серверная часть – клиент
18. As, is – что это, как применяется?
Операторы приведения типов.
If(o is Employee){
Employee e = (Employee) o;
}
Проверка типа осущ., 2-ды. По этому в CLR
Employee e = o as Employee;
If(e != null){
}
19. Какое место в иерархии типов .net занимает CString
System.String, CString это из MFC
20. Как реализованы в .Net простые типы: (вроде int etc...)
marat_yuldashev: В виде структур

Вопросы по классам


1. Какой синтаксис используется для указания класса родителя в C#?
После имени класса наследника нужно поставить двоеточие и указать имя базового класса.
Пример: class ChildClass : ParentClass
2. Можно ли запретить наследование от своего собственного класса?
Да. Для этого служит ключевое слово “sealed”.
3. Можно ли разрешить наследование класса, но запретить перекрытие метода?
Да. Указываем класс как public, а метод как sealed.
4. Что такое абстрактный класс?
Это класс, объект которого не может быть создан. Такой класс должен иметь класс-наследник с реализацией абстрактных методов. Абстрактный класс – это фактически чертёж нормального класса без реализации.
5. В каком случае вы обязаны объявить класс абстрактным?
1. В том случае, если класс является наследником абстрактного класса, но не все методы базового класса перекрыты и имеют реализацию.
2. В том случае, если хотя бы один метод класса является абстрактным.
6. Что такое интерфейс класса?
Интерфейсы, как и классы, определяют набор свойств, методов и событий. Но, в отличие от классов, они не содержат их реализации. Интерфейсы реализуются классами и определяются как самостоятельные сущности.
7. Почему нельзя указать модификатор видимости для методов интерфейса?
Потому что все они должны иметь модификатор public, который и установлен по умолчанию.
8. Можно ли наследовать от нескольких интерфейсов?
Да. .NET поддерживает такое наследование.
9. Назовите отличия между интерфейсом и абстрактным классом?
В интерфейсе все методы (свойства и т.д.) абстрактны и не имеют реализации. В абстрактном классе некоторые методы могут быть реализованы. В интерфейсе члены не могут иметь модификатора видимости (все они являются public по умолчанию), а в абстрактном классе члены могут иметь модификатор видимости.
10. Назовите различия между структурами и классами.
Для С# классы System.Object, System.Exception, System.File-Stream и System.Random — это ссылочные типы (память выделяется из упр. кучи). В свою очередь размерные типы в документации называются структурами (structure) и перечислениями (enumeration). Например, структуры System.In132, System.Boolean, System.Decimal, System.TimeSpan и перечисления System.DayOfWeek, System.10.FileAttributes и System.Drawing.FontStyle являются размерными типами (хранятся обычно в стеке потока, но могут быть встроены в ссылочные типы).
11. Назовите концепции ООП.
Концепции ООП строятся на базе трех основных принципов: 1) инкапсуляция 2)наследование 3)полиморфизм.
Инкапсуляция – это совмещение структур данных с функциями (методами), манипулирующими этими данными. Фактически, инкапсуляция предполагает размещение в одном месте сразу и структур данных, и методов.
Наследование – это создание новых классов, которые строятся на базе структур данных и методов уже существующих классов (базовых). В качестве примера рассмотрим windows-окно. Сначала строится класс стандартного windows-окна.
Полиморфизм – это использование одного имени или идентификатора для метода внутри одной иерархии класса таким образом, чтобы для разных классов этой иерархии этот метод реализовывал различные операции. Функция становится виртуальной, если перед ее объявление поставить спецификатор «virtual».
12. В чем разница между абстрактными и виртуальными классами? Между виртуальными и абстрактными методами?
Абстрактный класс это класс, содержащий хотя бы один метод (abstract)..
Виртуальный метод имеет реализацию и м.б. переопределен в производном классе. Абстрактный метод не имеет реализацию, только описание метода, который д.б. реализован в производных классах.
13. Dispose(), Finalize() – что это за методы, как используются в .NET?
Используются для освобождения ресурсов. Применяя метод Dispose, вы должны обеспечить неявную очистку методом Finalize. Если программисту не удалось вызвать метод Dispose, использование метода Finalize предотвращает постоянную утечку ресурсов.
14. Для чего в .NET используется конструкция using(…){…}? Причем тут IDisposable?
Значение Using непосредственно связано с интерфейсом IDisposable. Интерфейс IDisposable представляет нам возможность быстро освободить общие ресурсы, не полагаясь на автоматический сборщик мусора (garbage collector).
Конструкция Using позволяет вызывать метод Dispose автоматически, как только нужный объект выйдет за блок Using.

Вопросы по методам и свойствам


1. Назовите явное имя параметра, передаваемого в метод set свойства класса?
value. Тип этого параметра определяется типом свойства.
2. Что обозначает ключевое слово “virtual” для метода или свойства?
То, что метод или свойство может быть перекрыто.
3. Чем перекрытый метод отличается от перегруженного метода?
При перекрывании метода мы изменяем его поведение в классе наследнике. Перегрузка метода просто приводит к использованию другого метода с тем же именем внутри класса.
4. Можно ли объявить перекрытый метод статическим, если перекрываемый метод не является статическим?
Нет. Сигнатура виртуального метода должна остаться постоянной, кроме замены ключевого слова virtual на ключевое слово override.
5. Какими способами может быть перегружен метод?
Другой тип параметров, другое количество параметров, другой порядок параметров. Фактически всё может быть другим, кроме имени.
6. Если в базовом классе существует несколько перегруженных конструкторов и в классе-наследник есть несколько перегруженных конструкторов, можно ли вызвать конструктор базового класса из конструктора класса-наследника?
Да, можно.

События и делегаты


1. Что такое делегат?
Делегат – это объект, инкапсулирующий ссылку на метод. Аналог указатель указателя на функцию
2. Что такое групповой делегат?
Делегаты сами по себе невероятно полезны, но поддержка цепочек делает их еще полезнее. Я уже сказал, что у каждого объекта MulticastDelegate есть закрытое поле _prev. В этом поле хранится ссылка на другой объект MulticastDelegate, т. е. каждый объект типа MulticastDelegate (и любого типа, производного от него) обладает ссылкой на другой объект-потомок MulticastDelegate. Это поле позволяет объекту делегата становиться частью связного списка.

Вопросы по XML-документации


1. Является ли XML регистрочувствительным (т.е. различает ли он прописные и строчные буквы)?
Да.
2. Какая разница между комментариями
//комментарий,
/*комментарий*/ и
///комментарий?
Комментарий, который располагается на одной строке, на нескольких строках и комментарий для XML-документации.
3. Как можно сгенерировать документацию из файла на C#, содержащего корректно сформированные комментарии с помощью компилятора командной строки?
Опция /doc: компилятора C#
CSC.exe

Вопросы по отладке и тестированию


1. Какие инструменты отладки входят в .NET SDK?
CorDBG – отладчик командной строки. Для использования этой утилиты нужно скомпилировать файл C# с ключом /debug.
DbgCLR – отладчик с графическим интерфейсом. Visual Studio .NET использует DbgCLR.
2. Каково различие между классами Debug и Trace?
Документация выглядит одинаково. Однако, рекомендуется использовать класс Debug для сборки в режиме отладки, а Trace – как для отладки, так и для окончательной сборки.
3. Зачем в классе System.Diagnostics.TraceSwitcher нужны пять уровней трассировки?
Дампы трассировки могут быть очень большими. Отсюда возникает риск нехватки места на диске для постоянно работающих приложений. Пять уровней трассировки от None (ничего) до Verbose (всё) позволяют настроить хранящуюся трассировочную информацию точно в соответствии с нашими нуждами.
4. Куда перенаправляется вывод класса TextWriter-TraceListener?
На консоль или в текстовый файл, в зависимости от параметра, переданного конструктору.
5. Каким образом происходит отладка приложения ASP.NET?
Путем подсоединения процесса aspnet_wp.exe к отладчику DbgClr.
6. Какие три типа тестов вы должны выполнить в процессе тестирования сборки?
1. Позитивный тест (корректные данные – корректный вывод).
2. Негативный тест (некорректные или неполные данные – корректная обработка).
3. Исключительный тест (генерация исключений и их корректная обработка).
7. Можно ли изменить значение переменной во время отладки приложения C#?
Да.
8. Что выведет этот код (чур в студию не подглядывать! :):
---
XmlDocument x = new XmlDocument();
x.LoadXml(" ");
Console.WriteLine(x.ToString());
Console.ReadKey();
---
marat_yuldashev: пример тип – объект - string


Вопросы по ADO.net и БД


1. Какова роль класса DataReader в ADO.NET?
Этот класс возвращает набор данных, доступный только для чтения с навигацией только вперёд. DataReader – самый быстрый способ получения данных.
2. Какие преимущества и недостатки классов-поставщиков данных, предлагаемых Microsof в ADO.NET?
Поставщик данных SQLServer.NET – высокоскоростной и устойчивый, но для него необходима лицензия на SQL Server от Microsoft. OLE-DB.NET является универсальным поставщиком для доступа к данным из других источников, таких как Oracle, DB2, Microsoft Access и Informix. OLE-DB.NET – это .NET-слой поверх слоя OLE, поэтому он не так быстр и эффективен, как SqlServer.NET.
3. Назовите групповой символ в SQL?
Если мы хотим сделать запрос к БД с LIKE для всех работников, чьё имя начинается с La, то групповым символом будет %,соответственно параметром для LIKE будет ‘La%’.
4. Расскажите о правиле ACID для транзакций.
Транзакция должна быть:
1. Атомарной (Atomic) – результат её работы не должен зависеть от предыдущих и следующих транзакций.
2. Согласованной (Consistent) – данные или записаны или не записаны, не должно быть промежуточного состояния после окончания транзакции.
3. Изолированность (Isolated) – транзакции не видят промежуточных результатов текущей транзакции.
4. Надёжность (Durable) – значения сохраняются, если данные записаны, а система рушится сразу после этого.
5. Какие соединения поддерживаются Microsoft SQL Server?
Соединения с аутентификацией Windows (посредством Active Directory) и SQL Server (через имя пользователя и пароль Microsoft SQL Server).
6. Если сравнивать аутентификацию Windows и SQL Server, какое из них будет доверенным, а какое – нет?
Аутентификация Windows является доверенной, поскольку пароль и имя пользователя проверяются Active Directory, а аутентификация SQL Server не является доверенной, поскольку только SQL Server проверяет логин и пароль, принимающие участие в транзакции.
7. Какое значение имеет параметр Initial Catalog в строке соединения?
Имя базы данных, к которой происходит подсоединение.
8. Какими являются требования для использования пула соединений?
???

Вопросы по сборкам


1. Каким образом в .NET решена проблема «DLL Hell»?
GAC.
2. Каким образом можно распространять сборки?
2 вида сборок со строгим(с ключом) и нестрогим именем.
3. Что такое «сопутствующая сборка» (satellite assembly)?
Сборки, помеченные определенными региональными стандартами, называются
сателлитными сборками
5. Какая наименьшая исполнимая единица в .NET?
сборка
6. Когда необходимо вызывать сборщик мусора в .NET?
Вызывается автоматически.
7. Как конвертировать значимый тип в ссылочный?
Int32 x = 5;
Object о = x;
8. Что происходит в памяти при упаковке и распаковке значимого типа?
При упаковке экземпляра размерного типа происходит следующее.
1. В управляемой куче выделяется память. Ее объем определяется длиной размерного типа и некоторыми накладными расходами, позволяющими этому размерному типу стать настоящим объектом. Этими накладными расходами являются указатель на таблицу методов и индекс SyncBlocklndex.
2. Поля размерного типа копируются в память, выделенную только что в куче.
3. Возвращается адрес объекта. Этот адрес является ссылкой на объект; размерный тип превратился в ссылочный.
Распаковка не является точной противоположностью упаковки.
Она состоит только в получении указателя на исходный.
размерный тип (поля данных), содержащийся в объекте. И никакого копирования при распаковке (в отличие от упаковки). Однако обычно вслед за распаковкой выполняется копирование полей, поэтому в сумме обе эти операции являются отражением операции упаковки
Метки: ,

С# поддерживает множественное наследование в виде наследования от класса и нескольких интерфейсов, или просто н ескольких интерфейсов

Да спасибо за комментарий, поправил ответы. Раньше программировал на с++, в нем можно наследоваться от нескольких классов.

Очень понравился ваш ЖЖ, я вас зафренжу и было бы круто если бы вы ответили взаимно;)

Общие вопросы. П.9

9. Можно ли хранить разные типы данных в объекте класса System.Array?
Нет. ???

static void Main(string[] args)
{
    object[] arr = new object[] { "string", 0, new Guid() };
    foreach (object var in arr)
    {
        Console.WriteLine(var.GetType().ToString());
    }
    Console.ReadKey();

    double d = 0.0;
    ValueType[] arr2 = new ValueType[] { d, 0, new Guid() };
    foreach (ValueType var in arr2)
    {
        Console.WriteLine(var.GetType().ToString());
    }
    Console.ReadKey();

}

Спасибо за замечание.Про массывы типа Object и ValueType не подумал. Поправил ответы.

Множественное наследование

ИМХО определение неправильное. Интерфейсы нельзя наследовать вообще (поскольку они не обладают собственным поведением), их можно лишь реализовывать (имплементировать). Поэтому правильный ответ НЕТ, C# не поддерживает множественное наследование (как в общем и все языки постановка которые начинались с Object Pascal)

Re: Множественное наследование

Идей понятна, но в учебниках я очень часто встречал термин наследование интерфейсов.

Какой класс коллекций в .NET позволяет получить доступ к

ИМХО и SortedDictionary также

Re: Какой класс коллекций в .NET позволяет получить досту

Также можно добавить StringDictionary, HybridDictionary, ListDictionary,SortedList. Все классы реализующие интерфейс IDictionary

Какие три типа тестов вы должны выполнить в процессе т

ИМХО самым первым выполняется sanity test (не знаю как правильно перевести на русский. Иногда называется smoke test.

И если для приложения критичными является performance то обязательны performance/stress тесты. ИМХО positive/negative тесты совсем не обязательны, и насколько я знаю они лишь подмножество unit tests...

Re: Какие три типа тестов вы должны выполнить в процессе

По-русски дымовое тестирование. Заключается в том, что разработчик запустит программу и убедится, что она компилится и что-то выводит.
Все описанные в ответе тесты считаю обязательными т.к. дымового тестирования явно не достаточно.

Какие соединения поддерживаются Microsoft SQL Server?

Вообще если буквально понимать вопрос то ответ такой: SQL Server поддерживает только один тип соединения с использованием протокола TDS (Tabular Data Stream).

А если исходить из ответа то вопрос надо переформулировать так: 'Какие способы аутентификации поддерживает SQL Server?' И тогда правильный ответ: 'Windown mode/Mixed mode'

Re: Какие соединения поддерживаются Microsoft SQL Server?

Спасибо за найденную ошибку )
Подправлю ответы.


Если сравнивать аутентификацию Windows и SQL Server, какое из н

Аутентификация Windows не обязательно trusted.

Интересный список, но
тема ASP.net не раскрыта.

3. «Что такое частные и общие сборки?» -.
Частные находятся в каталоге программы, а общие в GAC

Главное отличие - это имена сборок.
Сборки со строгими и нестрогими именами идентичны по структуре, т. е. они
используют один и тот же файловый формат — portable executable (РЕ) и состоят
из заголовка РЕ, заголовка CLR, метаданных и таблиц декларации, которые мы
рассмотрели в главе 2. Оба типа сборок компонуются при помощи одних и тех
же инструментов, например компилятора С# или ALexe. В действительности сборки
со строгими и нестрогими именами отличаются тем, что первые подписаны при
помощи пары ключей, уникально идентифицирующей издателя сборки. Эта пара
ключей позволяет уникально идентифицировать сборку, обеспечивать ее безопас-
ность, управлять ее версиями, а также развертывать в любом месте пользователь-
ского жесткого диска или даже в Интернете.
Возможность уникально идентифицировать сборку! А размещение в GAC - это уже следствие этого.

16. Можно ли выполнить несколько блоков catch дляодного оператора try?
Нет. Как только отработал один блок, управление передаётся в блок finally (если такой есть).

Можно.
The runtime will execute only the first Catch block with a matching exception type, however, so order Catch blocks from the most-specific to the least-specific.

7. «Чем отличается event от delegate?»
Сдесь отлично написано:
http://blog.monstuff.com/archives/000040.html

Спасибо за подробное описание ответа на 3-й вопрос, но в ответе на 16-й Вы ошиблись, т.к. выполняется только один catch блок. Обработчики для событий, в самом деле, следует располагать в порядки от специфичных к более общим типам событий.

общий 11. ответ некрасивый сам по себе, к тому же над объектом может быть больше одного отношения порядка.
ой. в дотнете нет готового компаратора для сортировки в обратном порядке...

16. Можно ли выполнить несколько блоков catch для одного оператора try?
Нет. Как только отработал один блок, управление передаётся в блок finally (если такой есть).
================
По-моему, мало того, что ответ немного по теме, так он еще и неправилен. Либо я чего-то не понимаю.
При выбросе исключения сначала finally отработает, а уже потом catch.
Потом может быть и можно как-то выполнить несколько catch, например, с помощью goto - можно попробовать.

Вы ошибаетесь,автор все норм написал. Сначала идет кетч, а финали в любом случае в конце обрабатывается. Даже по самим названиям легко догадаться...

//3. Можно ли разрешить наследование класса, но запретить перекрытие метода?
Да. Указываем класс как public, а метод как sealed.//
А что такое перекрытие метода? Если перекрытие - это сокрытие(new), то тогда тогда, наверно, нельзя запретить сокрытие.
Но переопределение (override) в потомках можно запретить с помощью sealed.

?

Log in

No account? Create an account