Шпоры на основные вопросы собеседований
спрашивают про ООП, парадигмы, принципы
ООП паттерны
-----
Порождающие паттерны - создают объекты, или позволяют получить доступ к существующим.
-----
Singleton (одиночка)
Multiton (пул «одиночек») - это множество одиночек, каждый из которых имеет имя, по которому к нему можно получить доступ.
Object pool (пул объектов) - как предыдущий, но не все они обязаны быть одиночками.
Factory (фабрика) - клонирование эталонного объекта.
Builder (строитель) - строитель содержит в себе весь набор действий, необходимый для производства.
Prototype (прототип) - создает наполнение для существующей сущности.
Factory method (фабричный метод) - интерфейс для формирования объектов.
Lazy initialization (отложенная инициализация) - действие не при создании, а по требованию
Dependency injection (внедрение зависимости) - позволяет взаимозаменять отдельные части программы без потери общей функциональности.
-----
Структурирующие паттерны - определяют структуры, которые вносят изменения в интерфейс созданных объектов или его реализацию.
-----
Adapter, wrapper (адаптер, обертка) - интерфейс для организации применения функций объекта.
Bridge (мост) - разделяет абстракцию и реализацию таким образом, чтобы они могли меняться независимо.
Composite (компоновщик) - объединение объектов в древовидную структуру, позволяя обращаться к ним одинаковым образом.
Decorator (декоратор, оформитель) - расширение исходного объекта до требуемого вида.
Facade (фасад) - возможные вызовы сводятся к одному объекту, который передаёт вызовы соответствующим объектам системы.
Front controller (единая точка входа) - используете один интерфейс (броузер) для получения доступа к разным объектам большой системы (сайтам в интернете)
Flyweight (приспособленец) - объект представляет себя как уникальный экземпляр в разных частях программыю
Proxy или surrogate (прокси, заместитель, суррогат) - объект, контролирующий доступ к другому объекту, перехватывая все вызовы.
-----
Поведенческие (behavioral) - выявляют общие закономерности связей между объектами, которые реализуют данные шаблоны.
-----
Command или action (команда, действие) - определяет общие правила для объектов для выполнения команды, а что именно будет выполнено определяет сам объект.
Interpreter (интерпретатор) - решает одну постоянно меняющуюся задачу.
Iterator (итератор, указатель) - интерфейс даёт доступ к элементам коллекции и навигацию по ним.
Mediator (посредник) - обеспечает взаимодействие нескольких объектов.
Memento (хранитель) - сохранение внутреннего состояния объекта без нарушения инкапсуляции.
Observer или Listener (наблюдатель, слушатель) - даёт возможность экземпляру объекта этого класса получать уведомления от остальных объектов.
State (состояние) - когда объект должен изменять свое поведение, в зависимости от того, в каком состоянии он находится
Strategy (стратегия) - определение семейства алгоритмов и инкапсуляции каждого из них.
Template method (Шаблонный метод) - даёт наследникам возможность переопределять те или иные шаги алгоритма, оставляя его общую структуру нетронутой.
1. Docker отличие от docker-compose
Docker применяется для управления отдельными контейнерами (сервисами), из которых состоит приложение.
docker-compose - используется для одновременного управления несколькими контейнерами, входящими в состав приложения.
2. Основные парадигмы ООП
Инкапсуляция - сокрытие реализации программных частей объекта; упаковка данных и функций в единый комплект.
Наследование - создание нового объекта/класса на основании старого.
Полиморфизм - возможность переопределять методы, перегружать их в зависимости от данных.
Абстракция - придание объекту общих характеристик, концептуально важных черт.
3. Интерфейс в ООП - регламент описывающий взаимодействия (класс, объект). Класс который реализует интерфейс обязан реализовывать все его методы.
4. Транзакция sql - последовательность операторов SQL, которые выполняются как объединенные в единицу работы.
5. MVC
- Модель (Model) - предоставляет данные и реагирует на команды контроллера.
- Представление (View) - отвечает за отображение данных модели пользователю.
- Контроллер (Controller) - интерпретирует действия пользователя, оповещая модель о необходимости изменений.
6. Принципы SOLID
S - единственная ответственность. У класса должна быть только одна причина для изменения.
O - открытость/закрытость. Программные сущности должны быть открыты для расширения, но закрыты для модификации.
L - подстановки Лисков. Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа не зная об этом.
I - разделения интерфейса. много интерфейсов, лучше, чем один интерфейс общего назначения.
D - инверсии зависимостей. Зависимость на Абстракциях. Нет зависимости на что-то конкретное.
7. KISS - Keep it simple, stupid. работают лучше всего, если они остаются простыми
DRY - Don't repeat yourself. Не повторяйся
GIT
Настройка
git config --global user.name "Your Name" # указать имя, которым будут подписаны коммиты
git config --global user.email "e@w.com" # указать электропочту, которая будет в описании коммитера
- git add - добавляет содержимое рабочей директории в индекс для последующего коммита.
- git commit - использует лишь этот индекс, так что вы можете использовать git add для сборки слепка вашего следующего коммита.
- git status - показывает состояния файлов в рабочей директории и индексе: какие файлы изменены, но не добавлены в индекс; какие ожидают коммита в индексе.
- git diff - используется для вычисления разницы между любыми двумя Git деревьями.
- git diff --staged - разница между индексом и последним коммитом
- git diff master branchB - между любыми двумя коммитами
- git commit - берёт все данные, добавленные в индекс с помощью git add, и сохраняет их слепок во внутренней базе данных, а затем сдвигает указатель текущей ветки на этот слепок.
- git reset - используется в основном для отмены изменений
- git rm - для удаления файлов из индекса и рабочей директории.
- git mv - переместить файл
- git clean - для удаления мусора из рабочей директории. Это могут быть результаты сборки проекта или файлы конфликтов слияний.
- git branch - перечислять ваши ветки, создавать новые, удалять и переименовывать их
- git checkout - переключения веток и выгрузки их содержимого в рабочую директорию
- git merge - для слияния одной или нескольких веток в текущую.
- git log - для просмотра истории коммитов, начиная с самого свежего и уходя к истокам проекта
- git stash - для временного сохранения всех незакоммиченных изменений для очистки рабочей директории без необходимости коммитить незавершённую работу в новую ветку.
- git tag - для задания постоянной метки на какой-либо момент в истории проекта
- git fetch - связывается с удалённым репозиторием и забирает из него все изменения, которых у вас пока нет и сохраняет их локально
- git pull - вначале забирает изменения из указанного удалённого репозитория, а затем пытается слить их с текущей веткой.
- git push - для установления связи с удалённым репозиторием, вычисления локальных изменений отсутствующих в нём, и собственно их передачи в вышеупомянутый репозиторий
- git remote - управления списком удалённых репозиториев
- git archive - упаковки в архив указанных коммитов или всего репозитория.
- git submodule - управления вложенными репозиториями
- git show - отображает объект в простом и человекопонятном виде
- git shortlog - для подведения итогов команды git log