понедельник, 11 апреля 2011 г.

Вопросы для собеседования по SharePoint Foundation 2010

Чтобы эффективно писать под SharePoint, нужно знать много всякой всячины. Причем, стандартный тест по ASP.Net тут как раз не поможет! Потому что нужно обязательно знать возможности и особенности платформы, чтобы не терять время на велосипедописание.

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

Несколько важных замечаний:
1. Ни на одном серьезном собеседовании по SharePoint я лично пока не присутствовал, так что никакого плагиата в этих вопросах нет, если совпадения есть, они случайны. Честно!
2. Вопросы не охватывают всю платформу, сосредотачиваясь на более общих знаниях. Написание вопросов - дело довольно долгое, поэтому вопросов по таким важным вещам, как BCS, WorkFlow, и некоторым другим очень важным темам (а также по SharePoint Server) - пока нет :) Возможно, напишу попозже.
3. Вопросы вида "Вам поручили сделать то-то, как вы это реализуете?" предполагают, что собеседуемый должен назвать общий алгоритм решения проблемы, и средства/технологии платформы, которые он при этом будет использовать. Код не надо писать))

Не смею больше томить! Вопросы под катом.

Списки и библиотеки документов

1. Чем List Instance отличается от List Definition?
2. Что такое CAML?
3. В чем отличия между объектами SPQuery и SPSiteDataQuery?
4. Что такое Camlex.Net?
5. Какие вы знаете стандартные веб-части для отображения списков?
6. Вы разрабатываете список "Напоминания" (обычный список SharePoint). Для вас был создан специальный дизайн, позволяющий отображать напоминания в виде карточек. Вам поручено реализовать этот дизайн. При этом важно обеспечить, чтобы все напоминания хранились в одном списке, но чтобы каждый пользователь видел только собственные напоминания и не видел чужие. Как вы выполните это задание?
7. Вы расширяете стандартный список "Контакты", добавляя информацию об отделах и о числе подчиненных сотрудников. Поскольку в списке предполагается большое число записей (больше 20 тыс.), вы хотите, чтобы число подчиненных для каждого начальника предпросчитывалось, меняясь только при приеме сотрудника на работу, увольнении сотрудника или переводе сотрудника в другой отдел. Отделы и департаменты могут быть вложенными друг в друга. Опишите, каким образом вы реализуете такой предпросчет?
8. Вам поручено расширить список "Контакты" полем "Зарплата". При этом, поле "Зарплата" должны видеть только директор и топ-менеджеры. Как вы реализуете условное отображение этого поля?
9. В списке, который вам поручили поддерживать, есть колонка "Процент", имеющая тип "Текст". Вы хотите добавить валидацию к этому полю, так, чтобы корректными для этого поля были только числа от 0 до 100, во всех остальных случаях SharePoint должен выдавать ошибку и не давать сохранить изменяемый элемент списка. Как вы реализуете валидацию поля?
10. Чем отличаются вложения в списках от файлов в библиотеках документов?
11. Как обновить элемент списка таким образом, чтобы поле Modified не изменилось?
12. Как изменить колонку Modified на нужную вам дату?
13. Вы разрабатываете SharePoint-решение, которое содержит доработанный список "Контакты". Ваша компания выпустила версию 1.0 решения и продала несколько копий клиентам. В версии 2.0 в список "Контакты" добавилась колонка "Заместитель". Как вы реализуете обновление списка?
14. Что такое Ghosted и UnGhosted файлы? Какие у них есть преимущества и недостатки? Чем отличается Ghosted от GhostedInLibrary?
15. В списке "Доступ к документам" хранятся записи типа SPUserField. В процессе тестирования этого списка и связанного с ним функционала, в список было добавлено большое количество тестовых записей. Единственное общее во всех тестовых записях - это то, что вместо фамилии пользователя фигурирует строка "Тест". Вам поручено удалить все тестовые записи, как вы это сделаете?
16. Чем отличаются методы SPWeb.GetList и SPWeb.GetListFromUrl?
17. Вам поручено создать Custom Field Type, который бы хранил "ссылку" на другой список в пределах текущего веб-приложения, эта ссылка должна включать Guid'ы SPSite, SPWeb и SPList. Опишите, какие вам предстоит создать классы и xml-файлы, чтобы реализовать описанный тип поля?
18. Что такое SPMetal?
19. Какие вы знаете ID стандартных шаблонов списков? Используются, к примеру, при создании списков или при указании RegistrationId для CustomAction.
20. Какие вы знаете методы и классы для программного управления привилегиями доступа к спискам и их элементам?

Страницы и контролы

1. В какой папке на SharePoint-сервере лежат мастер-страницы?
2. Какие мастер-страницы вы знаете и чем они отличаются?
3. Чем отличается ContentPlaceHolder от SharePoint:DelegateControl?
4. Чем отличается Site Page от Application Page?
5. От какого класса наследуется Application Page?
6. Вы разрабатываете страницу (Application Page) с несколькими кнопками. Вы хотите, чтобы  одна из кнопок была видна только тем пользователям, которые имеют права на управление списками. Как вы это реализуете?
7. Вы хотите добавить к своей странице ссылку на скрипт "/_layouts/MyProject/script.js"? Как вы это сделаете?
8. Чем отличаются контролы CssLink и CssRegistration?
9. Как называется контрол для выбора пользователей или групп?

Sandbox

1. Зачем вообще нужны Sandboxed Solutions в SharePoint'е? В чем их преимущество?
2. Какие основные ограничения существуют для Sandboxed Solutions?
3. Может ли Sandboxed Solution - умышленно или неумышленно, стереть данные пользователя, хранящиеся в списках на сайте?
4. В каком процессе выполняются Sanboxed Solutions (куда при отладке делать Attach to process...)?
5. Как осуществляется развертывание Sandboxed Solutions, какие для этого нужны права?
6. Зачем нужны Full Trusted Proxy?
7. Каким образом Sandboxed Solution может вызвать некий метод из Full Trusted Proxy?
8. Вам поручили разработать Sandboxed Solution, которое, среди прочего, должно запрашивать данные из списка, расположенного в соседней коллекции сайтов. При этом вам гарантировано, что все пользователи решения имеют права на доступ к соседней коллекции сайтов. Как вы реализуете получение данных из такого списка? (использование Full Trusted Proxy не разрешается).

Client Object Model

1. Сколько существует вариаций Client Object Model?
2. В каких вариациях Client Object Model следует использовать асинхронные вызовы, а в каких - синхронные?
3. Как называются элементы для организации условных операций и обработки ошибок на стороне сервера?

Разное

1. Вы разработали интерфейс для обработки большого списка, однако время обработки составляет до 30 секунд. Все это время, пользователь видит белую страницу... Вы хотите сделать интерфейс более дружественным, и отобразить какой-нибудь индикатор выполнения обработки. Как вы это сделаете?
2. Что такое Dispose и IDisposable? Что такое SPDisposeCheck?
3. Что такое TimerJob?
4. Что такое Correlation ID?
5. Что такое Developer Dashboard?
6. Зачем нужен метод SPWeb.EnsureUser?
7. Назовите, какие вы знаете PowerShell-команды для развертывания решений SharePoint (wsp-файлы) и управления возможностями (Feature)?

Просьба ответы на эти вопросы в комментах не писать, как минимум массовые ответы. Вдруг, кто-нибудь из действительных работодателей возьмет на вооружение пару-тройку вопросиков :)

В остальном, интересно следующее:
1. Кто на сколько вопросов смог ответить сходу?
2. Какие вопросы понравились/не понравились?
3. Какие интересные вопросы вам запомнились с других собеседований?
4. Общее мнение?

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

  1. Забыл еще добавить "Что такое Document Set" и "Что такое Document Id"

    ОтветитьУдалить
  2. Я очень много чего забыл. К примеру, Workflow и BCS :) Что касается Document Set и Document Id, на текущий момент не уверен, что их нужно включать в тест. Это не ключевые возможности шарепойнта :)

    К тому же, время собеседования не резиновое, нужно что-то и исключать. В баззе про контент-тайпы предложили более интересные варианты, к примеру, как формируется ContentTypeId, и др.

    ОтветитьУдалить
  3. Ответы бы еше... ^_^
    Поделитесь, где начинающему разработчику почерпнуть информации именно по разработке в VS2010 используя фреймворк SharePoint-а, кроме как из google.com ;)

    И очень уж хочется узнать ответ на 13-ый вопрос (нужно внести изменения в ListDef и в то же время не удалить всю сохраненную в списке/библиотеке инфу)

    ОтветитьУдалить
  4. Ответов давать все-таки не хочется, а ресурсы, ну книжка Inside SharePoint 2010 - неплохая. Также, могу порекомендовать SPOverflow, там можно задавать любые вопросы, и скорее всего получишь ответ. Правда, сайт английский...

    ОтветитьУдалить
  5. Не подскажете, можно запрограммировать доступ к спискам SharePoint 2010 на другом семействе сайтов? Ведь служба BDC настраивается для всего веб-приложения - со всеми его семействами сайтов...

    ОтветитьУдалить
  6. вопросы на тему BLOB-ов можно задать - достаточно часто используется, или хотя-бы наводящий по типу "Как вы реализуете хранение архива документов офис для общим размером 4Гб ".
    Вопросы на собеседования можно выдрать с экзамена 70-573 70-576
    Сколько по вашему будет стоить такой специалист зависимо от процента ответов?

    ОтветитьУдалить
  7. Добавте вопросы про BLOB.
    сколько по вашему стоит такой специалист?

    ОтветитьУдалить
  8. "Какие вы знаете ID стандартных шаблонов списков?"

    никогда не понимал таких вопросов? зачем это держать в голове, если один запрос в гугл даст полную иерархию?

    ОтветитьУдалить
    Ответы
    1. Александр, цель любого собеседования - определить две вещи:
      1. Кругозор (т.е. текущий опыт в рассматриваемой области)
      2. Способность мыслить

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

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

      Я бы лично ответ "зачем это держать в голове, если один запрос в гугл даст полную иерархию?" на этот вопрос посчитал бы вполне правильным, хотя сам бы еще обязательно упомянул ID-шники 100 и 101, поскольку всё-таки они являются базовыми (больше, если честно, сам не помню :)...).

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

      Удалить
  9. Вопрос 1 - может нужно сравнивать List Template и List Definition?

    ОтветитьУдалить
    Ответы
    1. Их сравнивать еще интереснее, да. Это может стать еще одним вопросом.

      Удалить
  10. SPDisposeCheck - говно для быдла.

    ОтветитьУдалить
  11. Как определить измененное поле элемента чтоб скопировать его в другой список.
    Например:

    Списки:
    1: Сотрудники (в нем поля: ИД ФИО День рождение Пол Подразделение Должность и т.п)
    2: История

    Задача:
    При изменение должности сотрудника он должен скопировать только ИД и Должность в Историю.
    hasan.berdiyev@gmail.com

    ОтветитьУдалить
  12. Андрей молодец. В 2011 создал материал, который до сих пор актуальный.....
    Всегда приятно и как правило, всегда бывает полезно читать материал этого автора.

    ОтветитьУдалить

Внимание! Реклама и прочий спам будут беспощадно удаляться.