Шпоры на основные вопросы собеседований

спрашивают про ООП, парадигмы, принципы ООП паттерны ----- Порождающие паттерны - создают объекты, или позволяют получить доступ к существующим. ----- 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