Я не умничаю это следствие закона Мерфи.
HTML (HyperText Markup Language) — язык гипертекстовой разметки
CSS (Cascading Style Sheets) — каскадные таблицы стилей
API (Application Programming Interface)
REST (Representational State Transfer) - дословно: передача представительского состояния;
определенный
набор правил взаимодействия API.
RESTful API - это API которое следует всем правилам REST.
Кратко: RESTful API позволяет делать CRUD операции над всеми бизнес-объектами в системе.
CRUD - аббревиатура 4-х базовых операций, которые можно произвести с объектом.
CLI (Command Line Interface) - набор команд для работы через терминал.
CI/CD - Continuous Integration (Непрерывная интеграция) и Continuous Delivery (непрерывная поставка).
CI и CD представляют собой культуру, набор принципов и практик, которые позволяют разработчикам чаще и надежнее развертывать изменения программного обеспечения.
DSL (Domain-Specific Language) - предметно-ориентированный язык («язык, специфический для предметной области»)
SQL для СУБД; HTML для разметки документов;
POM(pom.xml) - Project Object Model
ORM (Object-Relational Mapping) - это технология программирования (рус. Объектно-реляционное отображение), которая позволяет преобразовывать несовместимые типы моделей в ООП, в частности, между хранилищем данных и объектами программирования.
POJO (Plain Old Java Object) - объект, не унаследованный от какого-то специфического объекта и не реализующий никаких служебных интерфейсов сверх тех, которые нужны для бизнес-модели.
SpEL (Spring Expression Language) - это язык выражений, созданный для Spring Framework, который поддерживает запросы и управление графом объектов во время выполнения.
Также важно отметить, что SpEL создан в виде API-интерфейса, позволяющего интегрировать его в другие приложения и фрэймворки.
Архитектурный стиль микросервис - это подход, при котором система строится как набор независимых и слабосвязанных сервисов. Которые можно создавать используя различные языка программирования и технологии хранения данных.
Слабосвязаность
Пример:
Есть два класса A и B, которые взаимодействуют друг с другом. Если они слабосвязаны, то класс A будет делать то, что он должен делать не зная подробностей реализации класса B.
Протокол - набор определенных правил или соглашений интерфейса логического уровня, который определяет обмен между различными устройствами.
Семейство TCP/IP протоколов.
Модель:
Канальный уровень / Link layer
Сетевой уровень / Internal layer
Транспортный уровень / Transport layer
Прикладной уровень / Application layer
Примеры:
TCP (Transport Control Protocol)
IP (Internet Protocol)
HTTP (Hyper Text Transport Protocol)
FTP (File Transfer Protocol)
POP3 (Post Office Protocol)
SMPT (Simple Mail Transfer Protocol)
UDP (User Datagram Protocol)
TELNET (Teletype network)
Принципы
Классические
Хэш-Таблица
Вычисляемая таблица соответствий значений определенным позициям во множестве данных
Хэш-функция - преобразует объект в число.
Основные свойства:
Очередь и стек
Упорядоченное множество, в котором добавление и удаление элементов происходит в определенном порядке.
Очередь - FIFO, Стек - LIFO
Связные списки
Односвязные и двусвязные
Основной недостаток - сложность доступа к произвольному элементу - O(n)
Бинарное (двоичное) дерево
У root родитель null, у каждого родителя не больше 2-х потомков, если нет потомков называется лист
Принцип организации:
Сложность O(h), где h - высота дерева
Зачем?
Основная идея показать какое кол-во шагов надо сделать что бы алгоритм закончил свое выполнение.
Big O - математическое обозначение для сравнения асимптотического поведения функции (Википедия).
кстати об асимптотах:
Асимптотой кривой y=f(x), имеющей бесконечную ветвь, называется прямая, расстояние которой от точки (x, f(x)), лежащей на кривой, стремится к нулю при неограниченном движении вдоль ветви к бесконечности. Асимптоты могут быть вертикальными, наклонными и горизонтальными. Горизонтальную асимптоту часто рассматривают как частный случай наклонной асимптоты. Функции, которые являются непрерывными на всем множестве действительных чисел, вертикальных асимптот не имеют.
Big O - (доступно в рамках computer scinece) - показывает верхнюю границу зависимости между входными параметрами функции и количеством операций, которые выполнит процессор.
Отбрасывание констант
Big O описывает только скорость роста, поэтому мы отбрасывает константы при оценке сложности. Поэтому алгоритм, описываемый как O(2N) должен описываться как O(N)
Неважная сложность
O(N²+N²) = O(N²), т.к. в понимании Big O N²>N значительно больше (т.е. больше чем в два раза), т.о. сложность N значительно меньше и ей можно пренебречь.
Принципы ООП и проектирования
Принцип единой ответственности
Single Responsibility Principle
Для каждого класса должно быть определено единственное назначение. Все ресурсы необходимые для его осуществления должны быть инкапсулированы в этот класс и подчинены только этой задаче.
Класс должен отвечать за одну какую-то логику.
Принцип открытости/закрытости
Open-close Principle
Программные сущности должны быть открыты для расширения, но закрыты для модификации.
Расширение с помощью наследников (не меняя сущности родителя).
Принцип подстановки Барбары Лисков
Liskov Substitution Principle
Производный класс должен быть взаимозаменяем с родительским.
Объекты в программе можно заменить их наследниками без изменения свойств программы.
Принцип разделения интерфейса
Interface Segregation Principle
Много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс общего назначения.
Клиенты не должны быть вынуждены реализовывать методы, которые они не будут использовать.
Принцип инверсии зависимостей
Dependency Inversion Principle
Зависимость на абстракции. Нет зависимости на что-то конкретное.
Зависимости внутри системы строятся на основе абстракций.
Паттерн (шаблон) проектирования (рассматриваем только вариант для программирования).
Способ организации программного кода, представляющего собой решение некоторой часто возникающей проблемы проектирования.
Паттерны проектирования:
Порождающие
Фабричный метод
Абстрактная ф-ка
Строитель
Прототип
Одиночка
Структурные
Адаптер
Мост
Компоновщик
Декоратор
Фасад
Легковес
Заместитель
Поведенческие
Итератор
Посредник
Стратегия
Наблюдатель
Команда
Цепочка...
Снимок
Состояние
Шаблон
Посетитель
Паттерн Singleton (одиночка)
Позволяет создавать объект некоторого класса в единственном экземпляре, и запрещает создание новых объектов этого класса. (ex: соединение с БД, создание "тяжелых" объектов, ситуация когда объект в принципе может быть только один: кэши, логгеры, драйверы)
Паттерн Factory (фабрика)
Используется в случаях, когда у некого класса есть множество классов-наследников, и в зависимости от входных данных нам необходимо получать один из этих классов наследников. Позволяет спрятать логику определения и создания этих классов-наследников в класс-фабрику.
Паттерн Abctract Factory (абстрактная фабрика)
Задает интерфейс создания нескольких вариаций объектов одного интерфейса, а каждая конкретная реализация фабрики порождает объекты одной из вариаций.
Паттерн Decorator (декоратор)
Используется для изменения функциональности объекта в процессе выполнения, не затрагивая при этом другие объекты этого же класса и не меняя их поведение.
Паттерн Adapter (адаптер)
Позволяет объектам с несовместимыми интерфейсами работать вместе.
Паттерн Brige (мост)
Позволяет разделить один или несколько классов на две отдельные иерархии - абстракцию и реализацию, давая возможность изменить их независимо друг от друга.
Паттерн Strategy (стратегия)
Позволяет выделить в отдельные классы и инкапсулировать несколько вариантов алгоритма или поведения и обеспечить их взаимозаменяемость при использовании в других классах.
Паттерн Observer (наблюдатель)
Реализуется реализует отношение "one-to-may" между объектами таким образом, что при изменении состояния одного объекта ("издатель") автоматически оповещаются и обновляются все зависимые объекты ("подписчики")
Паттерн Iterator
Задает способ перебора некоторого множества объектов
Проверка регулярных выражений (regex101)
\+7\s?[\(]{0,1}9[0-9]{2}[\)]{0,1}\s?\d{3}[-]{0,1}\d{2}[-]{0,1}\d{2}
для номер телефона
Matcher, Pattern, PatternSyntaxException
Курс (типа классический и полный)
про группы (из курса выше, пересмотреть и хорошенько запомнить)
[GET|POST|PUT|DELETE|...]
/ {имя сущности(тей)} / {id_сущности} / {уточнение какие данные info | tradeobjects}
Если надо получить весь список сущностей
GET /orders
GET /objects
GET /workers
Связанные сущности
GET /objects/workers
По конкретной сущности
GET /order/{id}/objects
Что то конкретное про дату (например)
GET /order/{id}/data/start
GET /order/{id}/data/final
Создание новой
POST /order
POST /object
POST /object/{id}/worker
Обновляешь всю сущность то просто
PUT /order/{id}
Если например обновляешь не всю сущность, а какую-то часть, то
PUT /order/{id}/status