Помочь с подготовкой к интервью (темы не простые)

Цена договорная
28 января 2022, 22:43 • 1 отклик • 84 просмотра
Нужен ментор, опытный разработчик, которой сможет подготовить меня к решению подобных задач для прохождения предстоящих интервью.

Подобрать какую-нибудь задачу на Code Review.
Нужен какой нибудь пример задачи (кода) в которой требуется найти и исправить максимальном число ошибок и сделать
решение тестируемым. Суть в том чтобы обьяснить и показать разные способы и практики решения подобных задач. Вносить правки в представленный код можно через онлайн редактор, например: https://code.yandex-team.ru/


Нужно чтобы для решения подобной задачи потребовалось:

1. Знать реализации базовых структур данных таких как List<T>, Dictionary<K,V>

a. Знать стоимость операций: Add(), Remove(), Get() в нотации O (big O)

b. Уметь строить составной ключ и знать требования для ключей в Dictionary<K,V>



2. Уметь работать с примитивами синхронизации например: Monitor, SemaphoreSlim, ReaderWriterLockSlim

a. Уметь реализовать паттерн Singleton with double check locking

b. Детектировать Dead locks в представленном коде



3. Уметь работать с потокобезопасными структурами данных (ns:System.Collections.Concurrent)

4. Уметь писать юнит тесты с Mock зависимостей

5. Применять SOLID на практике

a. Уметь реализовывать паттерн Adapter


Так же подобрать что-нибудь на Product Design
Какая нибудь задача на дизайн реальной системы, где нет однозначно правильного решения.
Где нужно начать с дизайна уровня базы данных, уточнив на этом этапе определения всех базовых сущностей. Помочь нарисовать UML диаграммы в онлайн редакторе, например: http://draw.io/
Потом обьяснить и помочь реализовать один из спроектированных методов в любимой IDE.



Необходимо чтобы для решения задачи потребовалось:

1. Уметь проектировать базу данных в 3 нормальной форме (3NF)

a. Реализовать отношения One-To-One, One-To-Many, Many-To-Many

b. Быть внимательным при создании Primary Keys (Guid vs Int), Foreign Keys

c. На этапе проектирования добавить необходимые индексы (составной, уникальный фильтрованный, ...)
d. Реализовать логическое удаление с проверкой целостности на уровне базы



2. Обьяснить и помочь спроектировать архитектуру Solution в соответствии с N-Layer Architecture

a. При проектировании необходимо каждый слой реализовать в виде отдельной сборки с указанием зависимостей

3. Спроектировать API в соответствии с парадигмой REST

a. Корректно использовать HTTP Verbs и HTTP Status Codes в своем решении

b. Спроектировать GET метод получения данных с Paging

c. Рассмотреть сценарии обработки Transient Faults

d. Спроектировать идемпотентный метод создания ресурса POST

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

Желательно чтобы ментор использовал и был знаком со следующей литературой:






1. Адаптивный код: гибкое кодирование с помощью паттернов проектирования и принципов SOLID | Холл Гэри Маклин

2. Совершенный код | Макконнелл Стив

3. CLR via C# | Рихтер Джеффри