ONE DUDE`S BLOG

Work in progress
/media/image_notice_5b431eeb15010.jpg

Вопросы к собеседованию бекенд разработчика.

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

Основные паттерны и принципы программирования.

Что это такое SOLID ? Можете расшифровать?

Ответ

SOLID - это сокращение для 5 основных принципов ООП и проектирования.

S - Single Responsability. Принцип единой ответственности, каждый объект/метод (в более широком смысле - сервис) должен иметь лишь 1 причину для существования. Также, в трактовке Роберта Мартина упоминаются зависимости, они должны быть инкапсулированы и связаны с решаемой задачей.

O - Open Closed. Принцип открытости/закрытости. Функционал необходимо проектировать таким образом, чтобы он был закрыт для изменений, но открыт для расширений. Иными словами, нельзя менять уже написанный код, при проектировании участка кода необходимо предусматривать возможности его расширения, путем добавления абстракций/зависимостей.

L - Liskov Substitution Principle. Принцип подстановки Барбары Лисков. В оригинале звучит достаточно сложно:

Subtype Requirement: Let F(x) be a property provable about objects x of type T. Then F(y) should be true for objects y of type S where S is a subtype of T

На деле все гораздо проще. Если вы наследуетесь от определенного класса, то заменив все экземпляры класса родителя на новые, код должен продолжать работать, выполняя аналогичные действия. Например, если мы наследуем класс Track от класса Car, то при замене экземпляра (например вызове метода drive(track) вместо drive(car)) код должен компилироваться и выполнять аналогичное по смыслу действие.

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

D - Dipendency Inversion. Принцип инверсии зависимостей, сущности должны зависить от абстракций, а не от реализации. Данный принцип позволяет легко подменять зависимости, писать стабы и моки, а также избавляет нас от изменения логики при изменении зависимостей. Используем интерфейсы, а не указатель на реализацию.

Что такое YAGNI?

Ответ

YAGNI - You aren't gonna need it, Вам это не понадобится. Принцип разработки, который предотвращает написание избыточного функционала. Не нужно реализовывать фичи "на будущее", которые могут не понадобиться.

Расскажите про принцип KISS?

Ответ

KISS - Keep it simple stupid, Сделай это простым и тупым. Данный принцип похож на основную мысль python - Simple better then complex. Реализация должна быть максимально простой, чтобы ее можно было проще понимать. Автомат калашникова состоит из 95 деталей, это 1 из самых отказоустойчивых и простых в обслуживании автоматов.

Расскажите про принцип DRY.

Ответ

DRY - Don't repeat yourself. Не повторяйся. Принцип направленный на предотвращения дублирования кода. Для избегания дублирования можно использовать множество подходов: наследование, композиция, выделение абстракций, дженерики и т.д

Какие паттерны проектирования вы используете?

Ответ

Рекомендую исследовать данный ресурс

Распределенные системы

Что такое микросервисная архитектура?

Ответ

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

Микросервисная архитектура обладает следующими свойствами:

  1. Модули можно легко заменить в любое время.
  2. Модули имеют только 1 причину для существования, и в идеале, выполняют лишь 1 простую функцию.
  3. Модули могут быть реализованы с использованием различных технологий
  4. архитектура симметричная, а не иерархическая: зависимости между микросервисами одноранговые.

В чем разница между распределенной и децентрализованной системой?

Ответ

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

Какую теорему необходимо учитывать при разработке распределенной системы?

Ответ

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

  1. Consistency (Согласнованность) - во всех распределенных узлах в один момент времени данные не протеворечат друг другу.
  2. Availability (Доступность) - любой запрос к распределенной системе завершается с корректным ответом, без гарантии что ответы всех узлов системы идентичны.
  3. Partition tolerance (устойчивость к разделению) - разделение системы на множество атомарных секций не приводит к некорректности отклика

СУБД

Что такое транзакции? Для чего они нужны?

Ответ

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

Что такое грязное чтение?

Ответ

Грязное чтение (Read uncommitted) - чтение незавифксированных данных в рамках текущей/параллельных транзакций. Отсутствует гарантия того, что прочитанные данные не будут изменены/удалены.

Какие уровни изолированности транзакций существуют?

Ответ

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

Read committed (чтение фиксированных данных) - уровень изоляции, в котором отсутствует грязное чтение. Однако по-прежнему присутствует чтение фантомов и изменение данных параллельными транзакциями

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

Serializable - самый высокий уровень изолированности, все транзакции изолируются друг от друга.

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

Что такое индексы в бд? Зачем они нужны?

Ответ

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

Какие типы индексов в Postgresql вы знаете?

Ответ
собеседование
микросервисы
0
86