На главную. К полному списку вопросов.

23. Что такое шаблон проектирования Model/View/Controller? Как и зачем его применяют?

26. Какие функции никогда не могут быть виртуальными?

27. Что такое компьютерная программа?

28. Последователдьность событий при загрузке HTML страници на клиенте и что на каждом событии делается?

29. Почему класс String sealed?

30. Чем отличаются HttpHandler и HttpModule?

31. Что такое маршалинг?

32. Что такое сериализация?

33. Как в dataset накладывать различные ограничения?

34. Чем коллекции отличаются от массивов?

35. Что такое COM+ и зачем он нужен?

41. Что такое delegate, MulticastDelegate и Delegate?

42. Protected internal - это и protected и internal или либо protected либо internal?

43. Могут ли в интерфейсе быть обьявленны event'ы?

44. Напишите функцию обхода произвольного дерева?

45. Методы-аксессоры add/remove.

46. Домены и процессы, для чего нужны и как взаимодействуют?

47. Что такое Lazy Initialization?

48. Что такое Abstract Factory?

49. Что такое WSDL?

50. Каков размер типа int в С#?

51. Как обьявляют двумерный массив в С#?

52. Какой проверить открыта коннекция к базе или закрыта?

53. Как выбрать все теги с одинаковым именем, не зависимо от их положения в иерархии?

54. Чем отличается жизненный цикл страницы при page postback и client callback?

55. UML диаграммы.

56. Что такое preceding-sibling?

57. Чем отличается visibility:hidden от display:none?

58. Какова максимальная длина строки запроса?

59. Чем Get запрос отличается от Post запроса?

60. Назовите методы аутентификации в .Net?

61. Обьясните 2 технологии ASP.NET используемые для отслеживания сессии?

62. В чем разница между Server.Transfer и Response.Redirect?

63. Какие есть способы управления состоянием сессии в ASP.NET?

64. Зачем нужна функция GetHashCode?

65. Чем Delegate от Event'a отличается?

66. Что такое Inversion of Control?

Вопросы по SQL server:

36. Что такое хранимые процедуы? Назовите их достоинства и недостатки.

37. Что такое Primary key?

38. Что делает конструкция HAVING?

39. Когда вставленно 5 строчек а @@IDENTITY возвращает 45?

40. Какие есть Join'ы?

54. Зачем нужны функции в MS SQL?

Вопросы на эрудицию.

24. Есть 6 баночек с таблетками, по шесть таблеток в каждой. В одной из банок содержится яд. Таблетки с ядом весят 9 грамм, обычные таблетки весят 10 грамм. Как определить в какой баночке лежит яд, с помощью весов, воспользоваться которыми можно только 1 раз(после 1-ого взвешивания они ломаются).

25. В узлах клетчатой плоскости отмечено 5 точек. Доказать, что есть две из них, середина отрезка между которыми тоже попадает в узел.

Cтатьи, откуда я брал ответы.

23. Что такое шаблон проектирования Model/View/Controller? Как и зачем его применяют?

MVC - это тройка классов применяемых для постороения графических интерфесов взаимодествия программы с пользователем. Model - это объект приложения, View - его экранное представление. Controller - описывает реакцию интерфейса на управляющие воздействия пользователя. Model, View, Controller в сложных приложениях представляют ирархию классов. Основными отношения в схеме MVC описываются паттернами - наблюдатель, компоновщик и стратегия.



 

Вопросы на эрудицию.

 

24. Есть 6 баночек с таблетками, по шесть таблеток в каждой. В одной из банок содержится яд. Таблетки с ядом весят 9 грамм, обычные таблетки весят 10 грамм. Как определить в какой баночке лежит яд, с помощью весов, воспользоваться которыми можно только 1 раз(после 1-ого взвешивания они ломаются).

Надо расположить баночки в произвольном порядке. Из 1-ой баночки взять 1 таблетку, из 2-ой 2, из 3-ей - 3, из 4-ой - 4, из 5-ой - 5, из 6-ой - 6. И взвесить все эти таблетки предварительно отметив(маркером к примеру), из какой банки какие таблетки были взяты. Если общий вес закончится на число 9 - то 1-ая баночка с ядом, 8 - 2-ая, 7 - 3-ая, 6 - 4-ая, 5- 5-ая, 4 - 6-ая.

 

25. В узлах клетчатой плоскости отмечено 5 точек. Доказать, что есть две из них, середина отрезка между которыми тоже попадает в узел.

Введем систему координат на плоскости, так чтобы оси шли по линиям клеток, а начало координат было в любом узле. Тогда координаты любого узла имеют вид (a,b), где a и b -целые числа. Заметим, что середина отрезка с концами в точках (a,b) и (c,d) имеет вид ((a+c):2;(b+d):2). Четные числа обозначим буквой Ч, а нечетные числа - Н, тогда для обозначения узла у нас есть четыре возможности (Ч,Ч), (Ч,Н, (Н,Ч), (Н,Н). Так как точек 5, то есть, по крайней мере, два узла имеют одинаковый вид (принцип Дирихле) - они то и будут искомыми.
Принцип Дирихле(самая популярная формулировка): " Если (n + 1) кроликов сидят в n ящиках, то найдётся ящик, в котором сидит, по крайней мере, два кролика ".

Вопросы по С#.



 

26. Какие функции никогда не могут быть виртуальными?

Статические и закрытые (private). Так же можно запретить дальнейшее перекрытие виртуального метода перекрыв его с модификатором sealed (sealed override public void F() {})



 

27. Что такое компьютерная программа?

Компьютерная программа - это описание алгоритма и структуры данных.



 

28. Последователдьность событий при загрузке HTML страници на клиенте и что на каждом событии делается?

			Application_Start
			Session_Start
			 ----------------
			 События Web-формы:
			       Page_Init
			       Page_Load
			       Page_PreRender
			       Page_Unload
			       Page_Error
			       Page_AbortTransaction
			       Page_CommitTransaction
			       Page_DataBinding
			       Page_Disposed
			 ----------------
			Session_End
			Application_End
		

Page_Init - Загрузка и инициализация серверных элементов управления
Page_Load - Загрузка элементов в обьект Page
Page_PreRender - перед визуализацией обьекта Page
Page_Unload - выгрузка страници из памяти
Page_Error - при возникновении необработанного исключения
Page_AbortTransaction - при отмене транзакции
Page_CommitTransaction - при фиксации транзакции
Page_DataBinding - при привязке к источнику данных серверного элемента управления расположенного на странице
Page_Disposed - при освобождении объекта Page



 

29. Почему класс String sealed?

Типа String – тесно интегрирован с CLR, что повышает эффективность работы со строками. Поэтому, чтобы не нарушить связь CLR и String он обьявлен как sealed.



 

30. Чем отличаются HttpHandler и HttpModule?

HttpModule - глобальный обработчик запросов ко всем страницам приложения, с помощью которого можно "вклиниваться" в различные этапы обработки запроса. Например, при необходимости выполнять установку некоторых параметров. Важной особенностью HttpModule является то, что во время выполнения приложения существует только один экземпляр класса каждого модуля.

HttpHandler - обработчик конкретного запроса. В отличие от HttpModule, экземпляры HttpHandler создаются (или получаются из пула объектов) для каждого запроса. Можно назвать HttpHandler "запросо-специфичным", поскольку объект создается под каждый запрос и работает с данными, специфичными для конкретного запроса. Любая ASP.NET страница явзяется HttpHandler.



 

31. Что такое маршалинг?

Маршалинг - это механизм, который позволяет клиенту в одном процессе вызывать методы объектов в другом процессе.



 

32. Что такое сериализация?

Сериализация — способ перевода какой-либо структуры данных в последовательность битов.



 

33. Как в dataset накладывать различные ограничения?

В классе DataSet существует коллекция DataRelationCollection Relations, в которую можно добавлять различные отношения между таблицами в объекте DataSet. Так же в DataTable есть коллекция ConstraintCollection Constraints, туда можно добавлять ограничения ForeignKey и Unique, для реализации которых существуют классы ForeignKeyConstraint и UniqueConstraint. PrimaryKey назначается путём добавления сответсвущих столбцов в массив DataColumn[] PrimaryKey класса DataTable.



 

34. Чем коллекции отличаются от массивов?

Массив - это частный случай коллекции с возможностью доступа к элементу по индексу. Коллекция - это набор объектов, доступ к которым осуществляется путём последовательной обработки каждого элемента. Массивы реализовывают интерфейс IEnumerable и ICollection. Интерфейсы IEnumerable и ICollection содержат необходимые методы для такого доступа.



 

35. Что такое COM+ и зачем он нужен?

COM+ - это расширение использования COM от рабочего стола и локальных сетей до всего предприятия, включая Интернет. Технологии входящие в COM+ - Очередь сообщений Microsoft (Microsoft Message Queue, MQMS), Сервер транзакций Microsoft (Microsoft Transaction Server, MTS), Распределенная модель компонентных объектов (Distributed Component Object Model, DCOM), Queued Components и т.д..



 

41. Что такое delegate, MulticastDelegate и Delegate?

Делегаты предназначенны для ситуаций, когда требуется передать методы другим методам в качестве параметров. В основном используют в следующих случаях: Запуск потоков, Общие библиотечные классы, События. Изначально разработали 2 типа делегатов: одиночные(single-cast) и множественные (multicast). Множественные можно обьеденять в цепочки, одиночные нет. Класс MulticastDelegate (реализация multicast делегатов) наследник класса Delegate (реализация самого делегата). Возможно их обьединят в будущем, так как любой делегат это экземпляр класса MulticastDelegate.



 

42. Protected internal - это и protected и internal или либо protected либо internal?

Модификаторы protected internal означают, что доступ ограничен пределами данного проекта (internal) или классов, производных от данного класса. Т.е. PROTECTED or INTERNAL(не пересечение, а расширение).



 

43. Могут ли в интерфейсе быть обьявленны event'ы?

Могут. Любой event раскладывается компилятором в 2 метода и одно закрытое поле делегата. И несмотря на это закрытое поле компилятор не выдаёт ошибки, когда в интерфейсе обьявлен event.

				public event MailMsgEventHandler MailMsg;
				
				Компилятор транслирует в следующее:
				
				private MailMsgEventHandler MailMsg = null;
				[MethodImplAttribute(MethodImplOptions.Synchronized)]
				public virtual void add_MailMsg(MailMsgEventHandler handler)
				{
					MailMsg = (MailMsgEventHandler) Delegate.Combine(MailMsg, handler);
				}
				
				[MethodImplAttribute(MethodImplOptions.Synchronized)]
				public virtual void remove_MailMsg(MailMsgEventHandler handler)
				{
					MailMsg = (MailMsgEventHandler) Delegate.Remove(MailMsg, handler);
				}
			



 

44. Напишите функцию обхода произвольного дерева?

Проще всего применить рекурсию:

						ArrayList find(Node curNode)
						{
							MArrayList retVal = new ArrayList();
							...
							foreach(Node selNode in curNode.NodeList)
							{
								...
								retVal.Add(selNode);
								AddRange(find(selNode), retVal);
								...
							}
							...
						}
					 



 

45. Методы-аксессоры add/remove.

Add/remove используются в событиях. Позволяют соответсвенно добавлять и удалять делегат к связанному списку делегатов события.



 

46. Домены и процессы, для чего нужны и как взаимодействуют?

В современных операционных системах некий функционально законченный блок кода выполняется в специально отведенном для него адресном пространстве – процессе. Код, выполняемый внутри процесса, изолирован. Доступ к коду из другого процесса возможен только через прокси. Прокси находится в адресном пространстве вызывающего процесса и действует как заместитель удаленного объекта. С точки зрения вызывающего объекта прокси – это объект, перенаправляющий вызовы другому процессу.

Однако, с точки зрения скорости, взаимодействие между процессами требует относительно больших затрат времени. Чтобы минимизировать потери времени и ресурсов, в .NET был включён механизм доменов. Этот механизм позволяет запустить группу приложений в одном процессе, обеспечивая относительную изоляцию их друг от друга, в то же время позволяя им взаимодействовать друг с другом значительно быстрее, чем в случае отдельных процессов. Этот механизм в платформе .NET получил название доменов. Как и в случае процессов для неуправляемого кода, домен позволяет повысить устойчивость системы к сбоям, так как сбой внутри одного из доменов не приводит к сбоям внутри хост-процесса и других приложений.

Для каждого домена создаётся свой собственный экземпляр сборщика мусора, свои собственные настройки безопасности и собственные статические переменные.

Загрузка сборок в каждый домен происходит независимо. Таким образом, в каждом домене будет свой собственный экземпляр класса Assembly, даже если они используют одну и ту же сборку. Однако существует способ добиться того, чтобы код загружаемых сборок совместно использовался (share) разными доменами. Сборка, используемая совместно несколькими доменами, называется нейтральной по отношению к домену (domain-neutral).

Не существует какой-либо определенной связи между потоками операционной системы (threads) и доменами. Домен может порождать любое количество потоков, так же как поток может перейти к выполнению кода не в том домене, который его создал. Для каждого потока можно определить, в каком домене он в текущий момент выполняется, вызвав Thread.GetDomain(). Внутри потока текущий домен можно получить из свойства AppDomain.CurrentDomain.

Для представления домена в программе служит специальный класс – AppDomain. Этот класс позволяет создавать и выгружать домены (завершать их работу), а также получать о них информацию и управлять ими.

Ненужный домен можно выгрузить, для этого достаточно вызвать метод AppDomain.Unload. Схема выгрузки при этом следующая. Если поток, вызвавший Unload, находится в том домене, который подлежит выгрузке, то для выгрузки будет создан другой поток. Если домен не может быть выгружен, то исключение CannotUnloadAppDomainException будет возбуждено именно в этом потоке, а не в потоке, вызвавшем Unload. Однако если поток, вызвавший Unload, находится за пределами выгружаемого домена, этот поток получит исключение. Потоки внутри домена при его выгрузке будут завершены при помощи метода Thread.Abort().

Когда сборка загружается в домен, то файл сборки оказывается заблокированным и удалить его уже нельзя. Для того чтобы этого избежать существует специальный механизм теневого копирования. Суть его в том, что перед загрузкой сборка копируется во временный каталог и только оттуда загружается. При этом оригинальный файл сборки оказывается незаблокированным и его можно заменить. Включить этот механизм можно только до загрузки первой сборки. Для этого нужно установить свойство AppDomain.ShadowCopyFiles в true, или, при создании, передать в качестве параметра экземпляр класса AppDomainSetup с соответствующим свойством, установленным в true.



 

47. Что такое Lazy Initialization?

Загрузка по требованию - процесс загрузки необходимых данные только тогда, когда они действительно понадобятся. Существует четыре основных способа реализации загрузки по требованию: инициализация по требованию, виртуальный прокси-объект, диспетчер значения и фиктивный объект.

Инициализация по требованию (lazy initialization)

Основная идея данного подхода заключается в том, что при каждой попытке доступа к полю выполняется проверка, не содержит ли оно значение NULL. Если поле содержит NULL, метод доступа загружает значение поля и лишь затем его возвращает. Использовать значение NULL в качестве признака незагруженного поля очень удобно. Исключение составляют лишь те ситуации, когда NULL является допустимым значением загруженного поля. В этом случае необходимо выбрать какой-нибудь другой признак того, что поле не загружено.

Виртуальный прокси-объект (virtual proxy)

Имитирует объект, являющийся значением поля, однако в действительности ничего в себе не содержит. В этом случае загрузка реального объекта будет выполнена только тогда, когда будет вызван один из методов виртуального прокси-объекта.

Диспетчер значения

Это объект, который выполняет роль оболочки для какого-нибудь другого объекта. Чтобы добраться к значению базового объекта, необходимо обратиться за ним к диспетчеру значения. При первом обращении диспетчер значения извлекает необходимую информацию из базы данных.

Фиктивный объект (ghost)

Это реальный объект с неполным состоянием. Когда подобный объект загружается из базы данных, он содержит только свой идентификатор. При первой же попытке доступа к одному из его полей объект загружает значения всех остальных полей.



 

48. Что такое Abstract Factory?

Абстрактная фабрика - это паттерн проектирования. Предоставляет интерфейс для создания целых семейств объектов без указания конкретных классов. Объекты каждого семейства должны быть логически связаны между собой. Функционал у всех семейств схожий но сами семейства разные в рамках использования этих семейств в приложении.



 

49.Что такое WSDL?

WSDL - это XML-ориентированный язык, предназначенный для определения web-сервисов и доступа к ним.



 

50.Каков размер типа int в С#?

int - это System.Int32. Знаковое 32-битное целое.


 

51.Как обьявляют двумерный массив в С#?

C# поддерживает многомерные массивы двух видов. Первый вид - прямоугольные массивы. Двумерный прямоугольный массив - это массив в каждой строке которых одинаковое число столбцов. Он инициализируется так: string [,] (двумерный массив строк). Второй вид - неровные массивы. Каждый ряд неровного двумерного массива может содержать различное число столбцов. При создании нервных массивов на самом деле формируется массив массивов.


 

52.Какой проверить открыта коннекция к базе или закрыта?

Свойство State класса SQLConnection или OleDbConnection позвзоляют проверить это. Они вернут значение из перечисления типа ConnectionState.


 

53.Как выбрать все теги с одинаковым именем, не зависимо от их положения в иерархии?

Имеется ввиду XPath expressions. Чтобы все теги выбрать надо написать //имя_тега.
/* - это вернёт корень документа.
/bookstore - тег bookstore в корневом уровне и т.д..


 

C#-54. Чем отличается жизненный цикл страницы при page postback и client callback?

При client callback не происходит события Render, т.е контент страницы не перерисовывается на стороне сервера.


 


55. UML диаграммы.

Диаграмма классов, Class diagram — статическая структурная диаграмма, описывающая структуру системы, она демонстрирует классы системы, их атрибуты и зависимости между классами.

Диаграмма компонентов, Component diagram — статическая структурная диаграмма, показывает разбиение программной системы на структурные компоненты и связи (зависимости) между компонентами. В качестве физических компонент могут выступать файлы, библиотеки, модули, исполняемые файлы, пакеты и т.п.

Диаграмма композитной/составной структуры, Composite structure diagram — статическая структурная диаграмма, демонстрирует внутреннюю структуру классов и, по возможности, взаимодействие элементов (частей) внутренней структуры класса.
Подвидом диаграмм композитной структуры являются диаграммы кооперации (Collaboration diagram, введены в UML 2.0), которые показывают роли и взаимодействие классов в рамках кооперации. Кооперации удобны при моделировании шаблонов проектирования.
Диаграммы композитной структуры могут использоваться совместно с диаграммами классов.

Диаграмма развёртывания, Deployment diagram — служит для моделирования работающих узлов (аппаратных средств, англ. node) и артефактов, развёрнутых на них. В UML 2 на узлах разворачиваются артефакты (англ. artifact), в то время как в UML 1 на узлах разворачивались компоненты. Между артефактом и логическим элементом (компонентом), который он реализует, устанавливается зависимость манифестации.

Диаграмма объектов, Object diagram — демонстрирует полный или частичный снимок моделируемой системы в заданный момент времени. На диаграмме объектов отображаются экземпляры классов (объекты) системы с указанием текущих значений их атрибутов и связей между объектами.

Диаграмма пакетов, Package diagram— структурная диаграмма, основным содержанием которой являются пакеты и отношения между ними. Жёсткого разделения между разными структурными диаграммами не проводится, поэтому данное название предлагается исключительно для удобства и не имеет семантического значения (пакеты и диаграммы пакетов могут присутствовать на других структурных диаграммах). Диаграммы пакетов служат, в первую очередь, для организации элементов в группы по какому-либо признаку с целью упрощения структуры и организации работы с моделью системы.

Диаграмма деятельности, Activity diagram — диаграмма, на которой показано разложение некоторой деятельности на её составные части. Под деятельностью (англ. activity) понимается спецификация исполняемого поведения в виде координированного последовательного и параллельного выполнения подчинённых элементов — вложенных видов деятельности и отдельных действий (англ. action), соединённых между собой потоками, которые идут от выходов одного узла ко входам другого.
Диаграммы деятельности используются при моделировании бизнес-процессов, технологических процессов, последовательных и параллельных вычислений.

Диаграмма деятельности, Activity diagram — диаграмма, на которой показано разложение некоторой деятельности на её составные части. Под деятельностью (англ. activity) понимается спецификация исполняемого поведения в виде координированного последовательного и параллельного выполнения подчинённых элементов — вложенных видов деятельности и отдельных действий (англ. action), соединённых между собой потоками, которые идут от выходов одного узла ко входам другого.
Диаграммы деятельности используются при моделировании бизнес-процессов, технологических процессов, последовательных и параллельных вычислений.

Диаграмма автомата, State Machine diagram (диаграмма конечного автомата, диаграмма состояний) — диаграмма, на которой представлен конечный автомат с простыми состояниями, переходами и композитными состояниями.
Конечный автомат (англ. State machine) — спецификация последовательности состояний, через которые проходит объект или взаимодействие в ответ на события своей жизни, а также ответные действия объекта на эти события. Конечный автомат прикреплён к исходному элементу (классу, кооперации или методу) и служит для определения поведения его экземпляров.

Диаграмма прецедентов, Use case diagram (диаграмма вариантов использования) — диаграмма, на которой отражены отношения, существующие между актёрами и прецедентами.

Диаграмма коммуникации, Communication diagram (в UML 1.x — диаграмма кооперации, collaboration diagram) — диаграмма, на которой изображаются взаимодействия между частями композитной структуры или ролями кооперации. В отличие от диаграммы последовательности, на диаграмме коммуникации явно указываются отношения между элементами (объектами), а время как отдельное измерение не используется (применяются порядковые номера вызовов).

Диаграмма последовательности, Sequence diagram — диаграмма, на которой изображено упорядоченное во времени взаимодействие объектов. В частности, на ней изображаются участвующие во взаимодействии объекты и последовательность сообщений, которыми они обмениваются.

Диаграмма обзора взаимодействия, Interaction overview diagram — разновидность диаграммы деятельности, включающая фрагменты диаграммы последовательности и конструкции потока управления.

Диаграмма синхронизации, Timing diagram — альтернативное представление диаграммы последовательности, явным образом показывающее изменения состояния на линии жизни с заданной шкалой времени. Может быть полезна в приложениях реального времени.


 

56. Что такое preceding-sibling?

XSLT: Preceding-sibling содержит всех предыдущих братьев контекстного узла.


 

57. Чем отличается visibility:hidden от display:none?

Видимость слоя (visibility) MSIE, Opera, Mozilla - .visibility="visible"/"hidden" (видимый/невидимый) Netscape 4 - .visibility="show"/"hide" (show/hide требуют только самые первые версии Netscape 4, более новые понимают и visible/hidden) Кроме видимости, в CSS есть еще "отображаемость" - display. От visibility он отличается тем, что невидимый (visibility="hidden") слой продолжает занимать место, а неотображаемый (display="none") места не занимает, словно его просто нету. В Netscape 4 динамически (т. е. скриптом) менять display нельзя.


 

58. Какова максимальная длина строки запроса?

Microsoft Internet Explorer: Начиная с четвертой версии браузера, максимальная длина воспринимаемого URL составляет 2,083 символов. При этом длина GET-запроса лимитирована 2,048 символа. На POST никаких ограничений не накладывается. Firefox: В старых версиях (1.5.x) было ограничение на 64 килобайта, но, вполне возможно, это был баг, который позже исправили. Теперь, по всей видимости, ограничения на длину URL снято вообще, либо оно существенно превышает «пределы разумного» (проверено, что Firefox может «съесть» URL длиной в 100,000 символов). Safari: Лимита на длину URL нет так же, как и в Firefox. Автор FAQ успешно протестировал адрес длиной 80,000 символов. Opera: По заявлению разработчиков, лимита нет. Успешно прошли тесты с 190,000 символами.


 

59. Чем Get запрос отличается от Post запроса?

Данные в методе GET передаются через HTTP-заголовки, а конкретно в адресе, а при передаче методом POST данные передаются через тело запроса.


 

60. Назовите методы aутентификации в .Net?

1.WINDOWS AUTHENTICATION
Применяется для идентификации и авторизации пользователей в зависимости от привилегий учетной записи пользователя. Работает аналогично обычным механизмам сетевой безопасности Windows и выполняется контроллером домена;
2.FORMS AUTHENTICATION
Пользователь вводит логин и пароль в Web -форме, после чего авторизация происходит по списку пользователей, хранящемуся, например, в базе данных. Применяется на большинстве Internet-сайтов при регистрации в Inernet -магазинах, форумах, пр;
3.PASSPORT AUTHENTICATION
Все пользователи имеют единое имя и пароль, используемые для сайтов, использующих данный тип авторизации. Пользователи регистрируются в службе Microsoft Passport.
4.NONE/CUSTOM AUTHENTICATION
None имеет смысл устанавливать если используется собственная схема аутентификации или анонимный доступ (для повышения производительности).


 

61. Обьясните 2 технологии ASP.NET используемые для отслеживания сессии?

Пользовательская сессия здесь - это доступ пользователя к своим ресурсам на сервере. Зная уникальный идентификатор сессии пользователь гарантированно может обращаться к своим данным на сервере не теряя сессию. Передавать этот идентифиактор можно 2-мя способами:
1.Hidden Fields In Forms
Значение уникального идентификатора сессии хранится в скрытом поле.
2.URL Rewriting
Значение уникального идентификатора сессии хранится в строке запроса.


 

62. В чем разница между Server.Transfer и Response.Redirect?

Response.Redirect отправляет ответ браузеру, а Server.Transfer просто начинает обрабатывать другую страницу в рамках того же запроса.
Вызывая метод Response.Redirect, сервер отсылает клиентскому браузеру HTTP header со статус-кодом (302), который означает, что обьект был перемещён. Так же в заголовке указывается новое место обьекта. Смотрим, что получается после вызова Response.Redirect("~/Default.aspx"):
HTTP/1.1 302 Found
Server: ASP.NET Development Server/9.0.0.0
Date: Thu, 04 Sep 2008 11:59:21 GMT
X-AspNet-Version: 2.0.50727
Location: /Default.aspx
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 130
Connection: Close

Если клиентский браузер нормально воспринимает перенаправления, то такой страницы вы не увидите. Браузер автоматически запросит ресурс по указанном Location.
На заметку:
1. В том случае, когда первоначальный запрос был вызван POST-методом, после перенаправления методом Response.Redirect на другую страницу теряются все данные формы.
2. Благодаря же тому, что браузер посылает второй запрос, его возможно перенаправить на внешний ресурс.
Теперь пару слов о Server.Transfer. В отличии от Response.Redirect данный метод перенаправляет выполнение с одной страницы на другую на сервере. Это хорошо проявляется, если посмотреть на Url, после перенаправления. Он такой же как и в первом запросе. Более подробно на примере:
Браузер запрашивает страницу http://localhost:4107/Default.aspx. Метод Page_Load страницы выглядит так
protected void Page_Load(object sender, EventArgs e)
{
Server.Transfer("~/Foo.aspx");
}
Смотрим на Url, он остался таким же (http://localhost:4107/Default.aspx), но в браузере отображена страница Foo.aspx.
Ещё одним замечальным свойством Server.Transfer является то, что он позволяет передавать второй странице данные формы и строки запроса первой. Если же такие данные на второй странице не нужны, можно почистить их передав вторым параметром false. Пример:
Server.Transfer("~/Foo.aspx", false);
На заметку:
1. Если первая страница записывает что-то в буфер ответа (Response), то перед вызовом Server.Transfer Response нужно почистить, иначе получится каша: содержимое второй страницы добавится после содержимого первой страницы.
2. Так Server.Transfer выполняется на сервере, невозможно перенаправить запрос на внешний сайт.


 

63. Какие есть способы управления состоянием сессии в ASP.NET?

1.In Process
Способ, унаследованный от предыдущих версий ASP. Сессия храниться в локальной памяти веб-сервера. В результате при сбое приложения или перезапуске веб-сервера все данные теряются. Это может быть вызвано, например, настройками из тега в файле machine.config (либо web.config). Один из возможных сценариев - преувеличение объема памяти, указанного в атрибуте memoryLimit. Поскольку каждый пользователь имеют свою собственную сессию, то увеличение нагрузки на сервер может потребовать достаточно большого объема ресурсов. Также перезапуск может вызвать изменение одного из файлов Global.asax или Web.config, либо директории \Bin приложения.
2.Session State Service
Сохранение сессии в отдельном процессе на отдельном сервере. Для использования этого метода необходимо убедиться, что ASP.NET State Service запущен на удаленном сервере, который планируется использовать для хранения сессии. Этот сервис инсталлируется вместе с ASP.NET и Visual Studio .NET и может быть найден по такому пути: systemroot\Microsoft.NET\Framework\versionNumber\aspnet_state.exe В web.config необходимо в атрибуте connectionString указать название удаленного сервера и используемый порт.
3.Storing it in MSSQL server
Данные сессии хранятся в базе данных SQL сервера
4.Custom
Пользовательская реализация хранения сессии.
5.Off
Сессии отключены, т.е. данные сессии никак не сохраняются.


 

64. Зачем нужна функция GetHashCode?

Хэш-код — это числовое значение, используемое для идентификации объекта во время проверки равенства. Он также может служить индексом для объекта в коллекции.
Хэш-функция используется для быстрого создания числа (хэш-кода), соответствующего значению объекта. Обычно каждому объекту Type соответствует своя хэш-функция, у которой в качестве входного аргумента должно использоваться хотя бы одно из полей экземпляра.
Хэш-функции должны обладать следующими свойствами:

Например, реализация метода GetHashCode, обеспечиваемая классом String, возвращает одинаковые хэш-коды для одинаковых строковых значений. Следовательно, два объекта String возвращают тот же хэш-код, если они представляют одно и то же строковое значение. Кроме того, этот метод использует все символы в строке для создания случайно распределенного результата, даже если входной параметр ограничен каким-либо диапазоном (например, многие пользователи применяют строки, содержащие только первые 128 символов набора ASCII, хотя строка может содержать любые из 65535 символов Юникода).

Для производных классов объекта Object метод GetHashCode можно делегировать реализации Object.GetHashCode в том и только в том случае, если эти производные классы определяют равенство значений как равенство ссылок, а соответствующий тип не является типом значения.

Предоставление хорошей хэш-функции для каждого класса может значительно ускорить добавление соответствующих объектов в хэш-таблицу. Поиск элементов в хэш-таблице при надлежащей реализации хэш-функции занимает постоянное время (например, операция O(1)). Скорость поиска элементов при плохой реализации хэш-функции зависит от числа элементов в хэш-таблице (например, O(n), где n — число элементов в хэш-таблице). Вычисление хэш-функций не должно отнимать значительный объем ресурсов.

Реализации метода GetHashCode не должны приводить к зацикливанию ссылок. Например, если метод ClassA.GetHashCode вызывает ClassB.GetHashCode, то метод ClassB.GetHashCode не должен вызывать ClassA.GetHashCode ни явным, ни неявным образом.

Реализации метода GetHashCode не должны выбрасывать исключения.

Производные классы, переопределяющие метод GetHashCode, должны также переопределять метод Equals для обеспечения равенства хэш-кода двух считающихся равными объектов; в противном случае тип Hashtable может работать неправильно.

 

65. Чем Delegate от Event'a отличается?

1. Событие нельзя запустить вне класса, в котором оно было объявлено
2. События могут быть помещены в интерфейс.
3. И событие и делегат можно объявить полем класса, но в отличие от делегата, событие не может быть локальной переменной метода

 

66. Что такое Inversion of Control?

Это вопрос на знание SOLID.
SOLID это аббревиатура пяти основных принципов дизайна классов в объектно-ориентированном проектировании.
S-(Single responsibility principle или Принцип единственности ответственности) - На каждый объект должна быть возложена одна единственная ответственность.
O-(Open/closed principle или Принцип открытости/закрытости) - Программные сущности … должны быть открыты для расширения, но закрыты для изменения.
L-(Liskov substitution principle или Принцип подстановки Лисков) - Объекты в программе могут быть заменены их наследниками без изменения свойств программы.
I-(Interface segregation principle или Принцип изоляции интерфейса) - Много специализированных интерфейсов лучше, чем один универсальный.
D-(Dependency inversion principle или Принцип инверсии зависимостей или Inversion of Control) - Зависимости внутри системы строятся на основе абстракций. Модули верхнего уровня не зависят от модулей нижнего уровня. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.



Вопросы по SQL server:

 

36. Что такое хранимые процедуы? Назовите их достоинства и недостатки.

Хранимая процедура - это группа операторов SQL, которая компилируется один раз и после этого может выполняться многократно. Компиляция происходит при первом исполнении хранимой процедуры. Достоинства: Производительность. Повышение безопасности посредством изоляции и шифрования. Недостатки: Совмещение данных и кода работающего с ними в базе данных.



 

37. Что такое Primary key?

Первичный ключ - это столбец или комбинация столбцов, значения которых уникально идентифицируют каждую строку таблицы. В таблице может быть только одно ограничение PRIMARY KEY, причем столбец, который участвует в ограничении, не должен допускать пустых значений. Первичный ключ создаётся либо во время создания таблици, либо его можно добавить к уже существующей таблице. Существующее ограничение Primary key можно модифицировать или удалить.



 

38. Что делает конструкция HAVING?

Конструкции WHERE и HAVING оператора SELECT задают набор условий выборки данных из таблиц. Конструкция HAVING задает дополнительные фильтры которые определяются после завершения фильтрации, определяемой конструкцей WHERE.



 

39. Когда вставленно 5 строчек а @@IDENTITY возвращает 45?

Автоинкрементные поля - это поля (колонки), значение которых увеличивается автоматически при добавлении записей в таблицу. В Microsoft SQL Server такие поля носят название IDENTITY. Само название говорит, что это не просто автоинкрементные поля, а поля, созданные для однозначной идентификации записей в таблицах. В таблице можно создать только одно поле IDENTITY.

Для проверки последнего значения колонки identity последней вставленной записи в MS SQL Server 2000 существует три способа:
1. @@IDENTITY - возвращает последнее вставленное identity значение в текущем соединении.
2. SCOPE_IDENTITY() - возвращает последнее вставленное identity значение в текущем соединении. Но в отличие от предыдущей функции ограничена областью видимости.
3. IDENT_CURRENT('имя_таблицы') - возвращает последнее вставленное identity значение в указанную таблицу и не ограничена областью видимости и сеансом соединения.

Когда при вставлении нескольких строк формируется несколько значений идентификаторов, функция @@IDENTITY возвращает последнее сформированное значение. Если в результате инструкции срабатывает один или несколько триггеров, которые выполняют вставки, формирующие значения идентификаторов, вызов функции @@IDENTITY сразу же после завершения инструкции возвращает последнее значение идентификатора, сформированное триггерами. Если триггер срабатывает после выполнения вставки в таблицу, содержащую столбец идентификаторов и триггер производит вставку в другую таблицу, в которой не содержится столбец идентификаторов, функция @@IDENTITY возвращает значение идентификатора первой вставки.



 

40. Какие есть Join'ы?

Соединения бывают внутренними или внешними. INNER JOIN, LEFT OUTER JOUN, RIGHT OUTER JOIN, FULL OUTER JOIN, CROSS JOIN (cross join - просто соединяет две таблицы без условий)



 

54. Зачем нужны функции в MS SQL?

Функция инкапсулирует часто исполняемую логику в подпрограмму, которая состоит из одного или нескольких операторов Transact-SQL. Есть два типа функций в MS SQL - вчтроенные и пользовательские
Встроенные состоят из 3 типов - функции получения набора строк, агрегатные, скалярные.

Функции получения набора строк - возвращает набор строк, их можно использовать подобно ссылкам на таблицу.
Агрегатные - обрабатывают наборы значений но возвращают единственное значение.
Скалярные - обрабатывают одиночное значение и возвращают одиночное.

Пользовательские - Scalar, Multi-statement, InLine. Пользовательская функция не может выполнять действия, изменяющие состояние базы данных. Нельзя, например, изменять данные в таблицах БД, выводить данные с помощью команд print и select. Внутри функций нельзя использовать недетерминированные функции типа GETDATE().

Scalar - Скалярная функция может возвращать значения любого скалярного типа данных, кроме данных типа text, image, table. Такая функция может объединять несколько команд языка T-SQL, находящихся в блоке BEGIN…END
Multi-statement - Этот тип функции возвращает тип даных table. Тело такой функции может быть достаточно сложным и включать множество операторов, находящихся между ключевыми словами BEGIN…END.
InLine - тоже возвращает значение типа table, но отличается от Multi-Statement Table-valued тем, что может состоять только из одной команды select. Особенностью функции InLine является то, что код функции при выполнении программы вставляется непосредственно в исполняемый набор команд. Другими словами, происходит не вызов функции, а встраивание. Основное отличие пользовательских функций от хранимых процедур заключается в том, что функция обязательно должна вернуть хотя бы какое-то значение.

Hosted by uCoz