Теория

Базовый знания не зависимо от языка
На главную

Основы программирования 10.06.2023 16:26

Программирование всегда занимает больше времени чем вы думаете

Я не умничаю это следствие закона Мерфи.


Полезный курс для начинающих:

CS50 (Гарвард)

Сокращения 10.06.2023 13:38


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)

Принципы ООП

Принципы

В ключе JAVA

Структуры данных


Cтруктуры данных

Классические

Хэш-Таблица

Вычисляемая таблица соответствий значений определенным позициям во множестве данных

Хэш-функция - преобразует объект в число.

Основные свойства:

Очередь и стек

Упорядоченное множество, в котором добавление и удаление элементов происходит в определенном порядке.

Очередь - FIFO, Стек - LIFO

Связные списки

Односвязные и двусвязные

Основной недостаток - сложность доступа к произвольному элементу - O(n)


Деревья

Бинарное (двоичное) дерево

У root родитель null, у каждого родителя не больше 2-х потомков, если нет потомков называется лист

Принцип организации:

Сложность O(h), где h - высота дерева

BIG O

Зачем?

Основная идея показать какое кол-во шагов надо сделать что бы алгоритм закончил свое выполнение.

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 значительно меньше и ей можно пренебречь.


Хорошее видео на тему

Много букв на тему

хорошо|приемлемо|плохо (справочно)

SOLID

Принципы ООП и проектирования

Принцип единой ответственности
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


Видео

Курс (коротко внятно)

Курс (типа классический и полный)

про группы (из курса выше, пересмотреть и хорошенько запомнить)


Таблица

Табличка (распечатать на бумажку!)

Как называть endpoint'ы07.06.2023 14:57

[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