Что такое частные и общие сборки

Сборки

Что такое частные и общие сборки. img9341. Что такое частные и общие сборки фото. Что такое частные и общие сборки-img9341. картинка Что такое частные и общие сборки. картинка img9341. Следует отметить, что одна и та же структура сборки используется как для исполняемого кода, так и для кода библиотек. Единственное реальное отличие исполняемой сборки заключается в том, что она содержит главную точку входа программы, тогда как библиотечная сборка — нет.

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

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

Тот факт, что сборка содержит метаданные программы, означает, что приложение или другие сборки, которые вызывают код данной, не нуждаются в обращении к реестру или любому другому источнику данных, чтобы узнать, как конкретную сборку следует использовать. Это существенный прорыв по сравнению со старым способом работы СОМ, когда GUID-идентификаторы компонентов и интерфейсов необходимо было извлекать из реестра, а подробности методов и свойств в некоторых случаях читать из библиотеки типов.

Сборки бывают двух видов: разделяемые и приватные.

Приватные сборки

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

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

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

Поскольку приватная сборка полностью самодостаточна, процесс ее развертывания весьма прост. Вы просто помещаете соответствующий файл (или файлы) в соответствующую папку системы (никаких записей вносить в реестр не потребуется). Этот процесс известен как установка с нулевым воздействием или установка с помощью хсору (zero impact (хсору) installation).

Разделяемые сборки

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

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

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

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

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

Однофайловые и многофайловые сборки

Источник

C#. Вопросы и ответы к собеседованию. Часть 5

Вопрос 42

В чем разница инкапсуляции и сокрытия?

Ответ

Сокрытие – более общий термин. Инкапсуляция – частный случай в ООП. Инкапсуляция – технология, при которой мы прячем поле от доступа напрямую и даем к нему доступ через свойства и методы.

Вопрос 43

Что такое частные и общие сборки?

Ответ

Частная сборка – файл exe или dll, содержащий классы, частную сборку кладут рядом с проектом, в каталог программы и подключают.

Общие сборки хранятся в GAC – global access cache.

Вопрос 44

Ответ

.NET Framework — программная платформа, выпущенная компанией Microsoft в 2002 году. Основой платформы является общеязыковая среда исполнения Common Language Runtime (CLR), которая подходит для разных языков программирования. Функциональные возможности CLR доступны в любых языках программирования, использующих эту среду.

Вопрос 45

Чем управляемый код (managed code) отличается от неуправляемого (unmanaged code)?

Ответ

Управляемый код – автоматическая сборка мусора. Можно просто создавать объекты.

Неуправляемый код – нужно удалять объекты в ручную.

Более подробно на сайте Microsoft

Вопрос 46

LINQ lazy loading, eager loading в чем разница

Ответ

В Entity Framework есть три способа загрузки данных:

Вопрос 47

Можно ли запретить наследование от своего собственного класса?

Ответ

Да, модификатором sealed. Пример

Вопрос 48

Можно ли разрешить наследование класса, но запретить переопределение метода?

Ответ

Да, модификатором sealed. Пример

Вопрос 49

Определение паттерна синглтон.

Ответ

Это класс, который позволяет создавать только один экземпляр

Вопрос 50

Thread, task, примеры использования?

Примеры для Thread (подробнее на metanit)

Примеры для Task (подробнее на metanit)

Вопрос 51

Что такое интеграционные тесты и unit-тесты?

Вопрос 52

Ответ

Вопрос 53

Что будет выведено в результате выполнения программы?

Источник

Вы хотите получить работу в крупной софтверной компании, грамотно подготовиться к собеседованию. Тогда этот блог для Вас. Коллекция материалы с просторов интернета и живой опыт прохождения собеседования помогут Вам подготовится к собеседованию в кратчайшие сроки.

пятница, 20 ноября 2009 г.

1. Поддерживает ли C# interfaces множественное наследование
да

5. Кому доступна protected переменная класса
-Доступна любому классу который наследует данный класс

6. Наследуются ли переменные класса с областью видимости private

-Да, но они не доступны. Также они не видимы и не доступны через интерфейс класса от которого они наследованы

8. Что означает термин immutable

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

9. Как можно упорядочить элементы массива в обратном порядке

— последовательно вызвать Sort() затем Reverse()

10. Будет ли выполнен блок finally, если исключение не произойдет

— Да

11. Что такое делегат?
— Делегат – это объект, инкапсулирующий ссылку на метод.
Иными словами это тип, который ссылается на метод. Как только делегату назначен метод, он начинает работать точно также как и этот метод. Метод Делегат, может быть использован точно также как и любой другой метод с параметрами и возвращать значение.

12. Какая разница между делегатом и событием?

Delegate– это объект, инкапсулирующий ссылку на метод (указатель на функцию)
Событие: Класс публикует событие, которое он может инициировать и любые классы могут подписаться на это событие.

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

15.Какая разница между классами System.String и System.Text.StringBuilder
Данные, хранящиеся в классе System.String и есть неизменяемые (immutable). Класс System.StringBuilder разрабатывался так, чтобы над изменяемой строкой можно было проделать множество операций. То есть при каждой операции над объектом класса System.String происходит перенос данных в новую область памяти, что влияет на производительность программы.

16. Что такое строгая типизация (strong-typing) в сравнении со слабой типизацией (weak-typing)

Weak type: Проверка типов переменных во время run time.

18. Может ли DateTime равняться null? Почему?
Нет, т.к. DateTime это тип значение, наследован из System.ValueType

19. Как поменить метод в качестве устаревшего (obsolete)?
[Obsolete(\»This is a message describing why this method is obsolete\»)] public int Foo()

20. Сравните использование абстрактного базового класса и использование интерфейса?
— Абстракный класс помимо абстрактных методов и свойств может содержать обычные методы, свойства, индексаторы и т.п. как и любой другой клас. Интерфейс же содержит только публичные абстрактные методы и свойства, без указания public и abstract

24.Методы расширения C# (IEnumerable)

All, Any, Average, Cast, Concat, Contains, Cout, DefaultIfEmpty, Distinct, First, Last, Max, Min, Skip, Where, Union

26. Что такое «Implicitly Typed Local Variables»
Переменные объявленные с помощью var:

27. Чем ссылочный тип отличается от размерного
Размерный тип: Если некоторая переменная имеет размерный тип, она содержит реальные данные. Так что первое правило для размерных типов таково: они не могут быть null. При объявлении переменной размерного типа происходит выделение в стеке области. При присвоении значения переменной размерного типа в выделенное пространство в стеке помещается это значение.
В С# определено несколько размерных типов, включая перечислители (enumerators), структуры (structures) и примитивы (primitives). Объявляя переменную одного из этих типов, вы каждый раз выделяете в стеке некоторое число байтов, ассоциированных с этим типом, и работаете напрямую с выделенным массивом битов. Кроме того, когда вы передаете переменную размерного типа, передается значение переменной, а не ссылка на лежащий в ее основе объект.

Ссылочные типы: похожи на ссылки в C++, где они являются указателями, привязанными к типам (type-safe pointers). Это значит, что ссылка (если она не равна null) — это не просто адрес, который, как вы полагаете, может указывать (а может и не указывать) на определенный объект. Ссылка всегда гарантированно указывает объект заданного типа, уже выделенный в куче. Кроме того, ссылка может быть равна null. Как и в случае размерных типов, в С# несколько типов определены как ссылочные: классы, массивы, делегаты (delegates) и интерфейсы. Объявляя переменную одного из этих типов, вы каждый раз выделяете в куче некоторое ассоциированное с этим типом число байт. Но вместо того, чтобы работать с ними напрямую (как в случае размерных типов), вы работаете со ссылкой на выделенный объект.

28.Что такое Упаковка и распаковка?

В простейшем случае при упаковке размерный тип преобразуется в ссылочный. В обратном случае ссылочный тип распаковывается (unbox) в размерный. Замечательно в данной методике то, что объект лишь тогда является объектом, когда это необходимо. Допустим, вы объявляете переменную типа System.Int32. Для нее выделяется память в стеке. Вы можете передавать эту переменную любому методу, определенному в качестве принимающего аргументы типа System.Object, а также обращаться к любому из ее членов, к которому у вас есть доступ. Поэтому вы воспринимаете и ощущаете ее как объект. Но в реальности это всего 4 байта в стеке.
Только когда вы пытаетесь использовать эту переменную согласно правилам, определенным интерфейсом базового класса System.Object, система автоматически упаковывает переменную, в результате чего она становится ссылочным типом и может быть использована так же, как любой объект. Упаковка — это механизм, посредством которого в С# любая сущность может быть представлена в виде объекта. Это позволяет избежать издержек, неизбежных в том случае, если б всякая сущность на самом деле была объектом.
При упаковке (т. е. преобразовании из размерного типа в ссылочный) явного приведения типов не требуется. Однако при распаковке — преобразовании из ссылочного типа в размерный — приведение типов необходимо. Это так, потому что в случае распаковки объект может быть приведен к любому типу. Преобразование позволяет компилятору проверить, возможно ли приведение для заданного типа переменной. Поскольку приведение типов подчинено строгим правилам, определяемым CTS.
int foo = 42; // Размерный тип.
object bar = foo; // Переменная foo упакована в bar.
int foo2 = (int)bar; // Распаковка и приведение к типу int.

30. Какой тип является базовым для всех остальных типов.

Корень всех типов «System.Object» В конечном счете все типы происходят от типа System.Object, что позволяет гарантировать наличие у каждого типа минимального набора функциональных возможностей. Все типы получают «бесплатно» четыре открытых метода: bool Equals(), int GetHashCode(), Type GetType(), string ToString.

[URLAttribute(«www.xakep.ru»)]
class HackerLink <>

class Application <
public static void Main() <
Type type=typeof(HackerLink);
foreach(Attribute attr in type.GetCustomAttributes(false)) <
URLAttribute urlAttr=attr as URLAttribute;
if(null!=urlAttr) Sc.WriteLine(«Target Link Is «+urlAttr.URL);
>
Sc.ReadLine();
>
>

Источник

Кому интересна тема прохождения собеседований, прошу под кат!

При поиске работы я пользовался Head Hunter. Там очень много вакансий с подробным изложением того, что хотят фирмы от кандидата. Решил откликнутся практически на все вакансии «C# разработчик», потому что для меня главное было пройти как можно больше собеседований, набраться опыта, а также во время таких собеседованиях найти интересную работу в интересной компании (забегая вперед скажу, что я нашел очень интересную работу). Некоторые компании (всего 2), для того, чтобы откликнуться на предложенную ими вакансию, хотели, чтобы кандидат решил предложенные ими задачи (напоминаю это при отклике). На мой взгляд это даже правильно, ведь это показывает, что компания очень ценит свое время и хочет, чтобы кандидат на собеседовании умел решать простые задачи. Обычно на таких собеседованиях спрашивают более «узкие» вопросы.

Практически во всех компаниях есть несколько этапов собеседований. На первом обычно собеседует hr, на второй — старший разработчик, на третьем — технический директор. Бывали компании, в которых на первом же приходили и старший разработчик, и Team Lead и технический директор, что конечно чуть заставляет нервничать. Пройдя 5 собеседований, я выяснил такую вещь: чем позитивнее и свободнее ведешь себя на собеседовании, тем легче и быстрее оно проходит.

А теперь хочу поделиться с вами тем, какие вопросы мне задавали на очных собеседованиях. Поехали.

Я не ожидал так много вопросов по базам данных, мне пришлось быстро осваивать (точнее вспоминать) sql язык. Вот какие вопросы и задания мне задавали:

В другой компании, попросили спроектировать базу данных для приложения вроде «Инстаграмм». Потом попросили написать сигнатуру метода «Upload», который отправляет фото на сервер.

Прозвучал также вопрос что, если бы руководство изменило вот «это», то как бы вы «переспроектировали» эту базу. Ну так как у меня нет опыта в проектировании, мне пришлось на ходу думать и генерировать идеи, как оказалось, я прошел это собеседование).

Другая компания решила дать интересную задачу. Я думаю, что это часть задачи, которую решают внутри компании. Решили проверить, как решают другие. Вот как она звучит:

Реализовать программу анализа текста. Входной текст произвольный и может быть большим по объему. Количество и содержание метрик определяется самостоятельно. Требования к алгоритму: Программа должна быть расширяема к изменению списку метрик. Масштабируемость. На что обращаем внимание и что анализируем:

Также положительным фактом оказалось преподавание информатики в ВЦНМО. Расспрашивали каково преподавать и трудно ли объяснять сложные вещи на пальцах.

Для меня было неожиданностью, что меня пригласили работать практически все компании (80%), в которых я проходил собеседование. Может это чувство из-за моей низкой самооценки?! После прохождения собеседований, с уверенностью могу сказать, что это несложно, а даже легко и интересно. Так что друзья, не бойтесь собеседований и крупных компаний, будьте самоуверенными, верьте в свои силы и все будет на 5!

Источник

Кому интересна тема прохождения собеседований, прошу под кат!

При поиске работы я пользовался Head Hunter. Там очень много вакансий с подробным изложением того, что хотят фирмы от кандидата. Решил откликнутся практически на все вакансии «C# разработчик», потому что для меня главное было пройти как можно больше собеседований, набраться опыта, а также во время таких собеседованиях найти интересную работу в интересной компании (забегая вперед скажу, что я нашел очень интересную работу). Некоторые компании (всего 2), для того, чтобы откликнуться на предложенную ими вакансию, хотели, чтобы кандидат решил предложенные ими задачи (напоминаю это при отклике). На мой взгляд это даже правильно, ведь это показывает, что компания очень ценит свое время и хочет, чтобы кандидат на собеседовании умел решать простые задачи. Обычно на таких собеседованиях спрашивают более «узкие» вопросы.

Практически во всех компаниях есть несколько этапов собеседований. На первом обычно собеседует hr, на второй — старший разработчик, на третьем — технический директор. Бывали компании, в которых на первом же приходили и старший разработчик, и Team Lead и технический директор, что конечно чуть заставляет нервничать. Пройдя 5 собеседований, я выяснил такую вещь: чем позитивнее и свободнее ведешь себя на собеседовании, тем легче и быстрее оно проходит.

А теперь хочу поделиться с вами тем, какие вопросы мне задавали на очных собеседованиях. Поехали.

Я не ожидал так много вопросов по базам данных, мне пришлось быстро осваивать (точнее вспоминать) sql язык. Вот какие вопросы и задания мне задавали:

В другой компании, попросили спроектировать базу данных для приложения вроде «Инстаграмм». Потом попросили написать сигнатуру метода «Upload», который отправляет фото на сервер.

Прозвучал также вопрос что, если бы руководство изменило вот «это», то как бы вы «переспроектировали» эту базу. Ну так как у меня нет опыта в проектировании, мне пришлось на ходу думать и генерировать идеи, как оказалось, я прошел это собеседование).

Другая компания решила дать интересную задачу. Я думаю, что это часть задачи, которую решают внутри компании. Решили проверить, как решают другие. Вот как она звучит:

Реализовать программу анализа текста. Входной текст произвольный и может быть большим по объему. Количество и содержание метрик определяется самостоятельно. Требования к алгоритму: Программа должна быть расширяема к изменению списку метрик. Масштабируемость. На что обращаем внимание и что анализируем:

Также положительным фактом оказалось преподавание информатики в ВЦНМО. Расспрашивали каково преподавать и трудно ли объяснять сложные вещи на пальцах.

Для меня было неожиданностью, что меня пригласили работать практически все компании (80%), в которых я проходил собеседование. Может это чувство из-за моей низкой самооценки?! После прохождения собеседований, с уверенностью могу сказать, что это несложно, а даже легко и интересно. Так что друзья, не бойтесь собеседований и крупных компаний, будьте самоуверенными, верьте в свои силы и все будет на 5!

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *