Вкратце по шаблонам проектирования
Почему шаблоны проектирования важны?
1. Возможность повторного использования
* Проверенные решения, которые работают в разных проектах
2. Гибкость
* Способствуют слабой связности компонентов и упрощают поддержку
3. Коммуникация
* Создают общий язык для обсуждения проблем проектирования и их решений
4. Опыт
* Инкапсулируют опыт опытных разработчиков, помогая другим избегать типичных ошибок и создавать более качественное ПО
Рассмотрим основные задачи которые решают шаблоны.
Порождающие шаблоны
1. Абстрактная фабрика
* Создаёт семейства взаимосвязанных объектов через общий интерфейс
2. Строитель
* Разделяет построение сложного объекта от его представления
3. Фабричный метод
* Определяет интерфейс для создания объектов
* Позволяет подклассам выбирать конкретный класс для создания
4. Прототип
* Создаёт новые объекты путём копирования прототипа
5. Одиночка
* Гарантирует, что класс имеет только один экземпляр
Структурные шаблоны
6. Адаптер
* Преобразует один интерфейс в другой, позволяя несовместимым классам работать вместе
7. Мост
* Разделяет абстракцию и реализацию, позволяя им изменяться независимо
8. Компоновщик
* Обрабатывает отдельные объекты и их композиции единообразно, представляя иерархии часть-целое
9. Декоратор
* Динамически добавляет функциональность объекту без использования наследования
10. Фасад
* Предоставляет упрощённый интерфейс к сложной подсистеме
11. Лёгковес
* Разделяет объекты для уменьшения использования памяти при большом количестве мелких объектов
12. Заместитель
* Контролирует доступ к объекту, предоставляя различные возможности, такие как отложенная загрузка или удалённый доступ
Поведенческие шаблоны
13. Цепочка ответственности
* Разделяет отправителей и получателей запросов, позволяя нескольким объектам обрабатывать запрос
14. Команда
* Инкапсулирует запросы в объекты, позволяя вести логирование, создавать очереди и выполнять операции отмены/повтора
15. Интерпретатор
* Определяет грамматику языка и интерпретатор для выполнения выражений
16. Итератор
* Обеспечивает последовательный доступ к элементам агрегата без раскрытия внутреннего представления
17. Посредник
* Инкапсулирует взаимодействие объектов, способствуя слабой связности
18. Хранитель
* Сохраняет и восстанавливает состояние объекта без нарушения инкапсуляции
19. Наблюдатель
* Автоматически уведомляет зависимые объекты при изменении состояния
20. Состояние
* Изменяет поведение объекта при изменении его внутреннего состояния
21. Стратегия
* Инкапсулирует взаимозаменяемые алгоритмы, позволяя клиентам выбирать их динамически
22. Шаблонный метод
* Определяет скелет алгоритма, откладывая шаги реализации на подклассы
23. Посетитель
* Добавляет новые операции к структурам объектов без изменения классов элементов
Почему шаблоны проектирования важны?
1. Возможность повторного использования
* Проверенные решения, которые работают в разных проектах
2. Гибкость
* Способствуют слабой связности компонентов и упрощают поддержку
3. Коммуникация
* Создают общий язык для обсуждения проблем проектирования и их решений
4. Опыт
* Инкапсулируют опыт опытных разработчиков, помогая другим избегать типичных ошибок и создавать более качественное ПО
Рассмотрим основные задачи которые решают шаблоны.
Порождающие шаблоны
1. Абстрактная фабрика
* Создаёт семейства взаимосвязанных объектов через общий интерфейс
2. Строитель
* Разделяет построение сложного объекта от его представления
3. Фабричный метод
* Определяет интерфейс для создания объектов
* Позволяет подклассам выбирать конкретный класс для создания
4. Прототип
* Создаёт новые объекты путём копирования прототипа
5. Одиночка
* Гарантирует, что класс имеет только один экземпляр
Структурные шаблоны
6. Адаптер
* Преобразует один интерфейс в другой, позволяя несовместимым классам работать вместе
7. Мост
* Разделяет абстракцию и реализацию, позволяя им изменяться независимо
8. Компоновщик
* Обрабатывает отдельные объекты и их композиции единообразно, представляя иерархии часть-целое
9. Декоратор
* Динамически добавляет функциональность объекту без использования наследования
10. Фасад
* Предоставляет упрощённый интерфейс к сложной подсистеме
11. Лёгковес
* Разделяет объекты для уменьшения использования памяти при большом количестве мелких объектов
12. Заместитель
* Контролирует доступ к объекту, предоставляя различные возможности, такие как отложенная загрузка или удалённый доступ
Поведенческие шаблоны
13. Цепочка ответственности
* Разделяет отправителей и получателей запросов, позволяя нескольким объектам обрабатывать запрос
14. Команда
* Инкапсулирует запросы в объекты, позволяя вести логирование, создавать очереди и выполнять операции отмены/повтора
15. Интерпретатор
* Определяет грамматику языка и интерпретатор для выполнения выражений
16. Итератор
* Обеспечивает последовательный доступ к элементам агрегата без раскрытия внутреннего представления
17. Посредник
* Инкапсулирует взаимодействие объектов, способствуя слабой связности
18. Хранитель
* Сохраняет и восстанавливает состояние объекта без нарушения инкапсуляции
19. Наблюдатель
* Автоматически уведомляет зависимые объекты при изменении состояния
20. Состояние
* Изменяет поведение объекта при изменении его внутреннего состояния
21. Стратегия
* Инкапсулирует взаимозаменяемые алгоритмы, позволяя клиентам выбирать их динамически
22. Шаблонный метод
* Определяет скелет алгоритма, откладывая шаги реализации на подклассы
23. Посетитель
* Добавляет новые операции к структурам объектов без изменения классов элементов
👍10🔥7🤓5👏1
Cравнение двух методов аутентификации и хранения данных в веб-приложениях: Куки и Сессии.
(продолжение в следующем посте)
(продолжение в следующем посте)
Cравнение двух методов аутентификации и хранения данных в веб-приложениях: Куки и Сессии.
(продолжение в предыдущего поста)
### Cookies
- Хранение данных: Данные хранятся на стороне клиента (в браузере пользователя).
- Процесс работы:
1. Пользователь отправляет свои учетные данные на сервер.
2. Сервер устанавливает Cookie с пользовательскими данными или токеном.
3. При последующих запросах браузер отправляет Cookie вместе с запросом.
4. Сервер отвечает данными, используя информацию из Cookie.
### Sessions
- Хранение данных: Данные хранятся на сервере, а на стороне клиента сохраняется только идентификатор сессии (Session ID).
- Процесс работы:
1. Пользователь отправляет свои учетные данные на сервер.
2. Сервер создает сессию и устанавливает Cookie с Session ID.
3. При последующих запросах браузер отправляет Session ID.
4. Сервер ищет сессию по идентификатору.
5. Сервер возвращает данные сессии.
6. Сервер отвечает данными пользователю.
### Основные различия
- Cookies:
- Данные хранятся в браузере пользователя.
- Более подвержены уязвимостям, таким как атаки CSRF.
- Ограничены по размеру (обычно до 4 КБ).
- Sessions:
- Данные хранятся на сервере, что повышает безопасность.
- Требуют больше ресурсов на сервере.
- Могут быть более сложными в реализации, особенно в распределенных системах.
(продолжение в предыдущего поста)
### Cookies
- Хранение данных: Данные хранятся на стороне клиента (в браузере пользователя).
- Процесс работы:
1. Пользователь отправляет свои учетные данные на сервер.
2. Сервер устанавливает Cookie с пользовательскими данными или токеном.
3. При последующих запросах браузер отправляет Cookie вместе с запросом.
4. Сервер отвечает данными, используя информацию из Cookie.
### Sessions
- Хранение данных: Данные хранятся на сервере, а на стороне клиента сохраняется только идентификатор сессии (Session ID).
- Процесс работы:
1. Пользователь отправляет свои учетные данные на сервер.
2. Сервер создает сессию и устанавливает Cookie с Session ID.
3. При последующих запросах браузер отправляет Session ID.
4. Сервер ищет сессию по идентификатору.
5. Сервер возвращает данные сессии.
6. Сервер отвечает данными пользователю.
### Основные различия
- Cookies:
- Данные хранятся в браузере пользователя.
- Более подвержены уязвимостям, таким как атаки CSRF.
- Ограничены по размеру (обычно до 4 КБ).
- Sessions:
- Данные хранятся на сервере, что повышает безопасность.
- Требуют больше ресурсов на сервере.
- Могут быть более сложными в реализации, особенно в распределенных системах.
Telegram
METANIT.COM
Cравнение двух методов аутентификации и хранения данных в веб-приложениях: Куки и Сессии.
(продолжение в следующем посте)
(продолжение в следующем посте)
❤5💯3👏1
25 сентября 2025 года состоялся релиз стабильной версии СУБД PostgreSQL 18, обновления для которой будут выходить в течение пяти лет до ноября 2030 года.
PostgreSQL 18 включает множество новых функций и улучшений, среди которых:
* Подсистема асинхронного ввода-вывода (AIO), которая способна повысить производительность последовательных сканирований, сканирований с использованием битовых карт, операций очистки (vacuum) и других операций.
* Утилита pg_upgrade теперь сохраняет статистику оптимизатора.
* Поддержка поиска skip scan, позволяющая использовать многоколоночные B-tree индексы в большем количестве случаев.
* Функция uuidv7() для генерации UUID с упорядочиванием по временной метке.
* Виртуальные генерируемые столбцы, которые вычисляют свои значения во время операций чтения. Теперь это настройка по умолчанию для генерируемых столбцов.
* Поддержка аутентификации OAuth.
* Поддержка OLD и NEW в предложениях RETURNING для команд INSERT, UPDATE, DELETE и MERGE.
* Временные ограничения (или ограничения над диапазонами) для PRIMARY KEY, UNIQUE и FOREIGN KEY ограничений.
https://www.postgresql.org/docs/18/release-18.html
PostgreSQL 18 включает множество новых функций и улучшений, среди которых:
* Подсистема асинхронного ввода-вывода (AIO), которая способна повысить производительность последовательных сканирований, сканирований с использованием битовых карт, операций очистки (vacuum) и других операций.
* Утилита pg_upgrade теперь сохраняет статистику оптимизатора.
* Поддержка поиска skip scan, позволяющая использовать многоколоночные B-tree индексы в большем количестве случаев.
* Функция uuidv7() для генерации UUID с упорядочиванием по временной метке.
* Виртуальные генерируемые столбцы, которые вычисляют свои значения во время операций чтения. Теперь это настройка по умолчанию для генерируемых столбцов.
* Поддержка аутентификации OAuth.
* Поддержка OLD и NEW в предложениях RETURNING для команд INSERT, UPDATE, DELETE и MERGE.
* Временные ограничения (или ограничения над диапазонами) для PRIMARY KEY, UNIQUE и FOREIGN KEY ограничений.
https://www.postgresql.org/docs/18/release-18.html
PostgreSQL Documentation
E.2. Release 18
E.2. Release 18 # E.2.1. Overview E.2.2. Migration to Version 18 E.2.3. Changes E.2.4. Acknowledgments Release date: 2025-09-25 E.2.1. Overview # PostgreSQL 18 …
🔥15👍8👏1
Пессимистическая и оптимистическая блокировки в базах данных
(описание в следующем посте)
(описание в следующем посте)
Пессимистическая и оптимистическая блокировки в базах данных
(продолжение предыдущего поста)
Пессимистическая и оптимистическая блокировки используются для управления доступом к данным в базах данных, чтобы избежать конфликтов при одновременном изменении одних и тех же данных разными пользователями или процессами.
### Пессимистическая блокировка
Цель: Предотвратить конфликты заранее, блокируя данные до их изменения.
Как работает:
1. Система блокирует данные сразу после их извлечения.
2. Другие пользователи не могут изменять эти данные, пока блокировка не будет снята.
3. После завершения транзакции блокировка снимается.
Преимущества:
- Гарантирует целостность данных.
- Подходит для систем с высокой конкуренцией за данные (например, финансовые операции).
Недостатки:
- Может снижать производительность из-за ожидания других процессов.
- Увеличивает вероятность взаимоблокировок (deadlocks).
### Оптимистическая блокировка
Цель: Позволить параллельную работу, проверяя конфликты только при сохранении изменений.
Как работает:
1. Данные читаются без блокировки.
2. При сохранении изменений система проверяет, не были ли данные изменены другими пользователями.
3. Если конфликт обнаружен, транзакция откатывается, и пользователь должен повторить попытку.
Преимущества:
- Высокая производительность, так как блокировки используются редко.
- Меньше вероятность взаимоблокировок.
Недостатки:
- Подходит только для систем с низкой конкуренцией за данные.
- Возможны потери изменений при частых конфликтах.
### Когда использовать?
- Пессимистическая блокировка:
- В системах с частыми изменениями одних и тех же данных.
- Когда важна абсолютная целостность данных.
- Оптимистическая блокировка:
- В системах с большим количеством чтений и редкими изменениями.
- Когда конфликты происходят редко, и их последствия незначительны.
(продолжение предыдущего поста)
Пессимистическая и оптимистическая блокировки используются для управления доступом к данным в базах данных, чтобы избежать конфликтов при одновременном изменении одних и тех же данных разными пользователями или процессами.
### Пессимистическая блокировка
Цель: Предотвратить конфликты заранее, блокируя данные до их изменения.
Как работает:
1. Система блокирует данные сразу после их извлечения.
2. Другие пользователи не могут изменять эти данные, пока блокировка не будет снята.
3. После завершения транзакции блокировка снимается.
Преимущества:
- Гарантирует целостность данных.
- Подходит для систем с высокой конкуренцией за данные (например, финансовые операции).
Недостатки:
- Может снижать производительность из-за ожидания других процессов.
- Увеличивает вероятность взаимоблокировок (deadlocks).
### Оптимистическая блокировка
Цель: Позволить параллельную работу, проверяя конфликты только при сохранении изменений.
Как работает:
1. Данные читаются без блокировки.
2. При сохранении изменений система проверяет, не были ли данные изменены другими пользователями.
3. Если конфликт обнаружен, транзакция откатывается, и пользователь должен повторить попытку.
Преимущества:
- Высокая производительность, так как блокировки используются редко.
- Меньше вероятность взаимоблокировок.
Недостатки:
- Подходит только для систем с низкой конкуренцией за данные.
- Возможны потери изменений при частых конфликтах.
### Когда использовать?
- Пессимистическая блокировка:
- В системах с частыми изменениями одних и тех же данных.
- Когда важна абсолютная целостность данных.
- Оптимистическая блокировка:
- В системах с большим количеством чтений и редкими изменениями.
- Когда конфликты происходят редко, и их последствия незначительны.
Telegram
METANIT.COM
Пессимистическая и оптимистическая блокировки в базах данных
(описание в следующем посте)
(описание в следующем посте)
🔥8❤2👍2
Ипортозамещение отменяется. Слишком сырое, очень дорогое. Названы причины, почему российские компании не хотят переходить на отечественное ПО
Отечественный бизнес не очень стремится отказываться от иностранного ПО в пользу отечетсвенного. ПРичины такого отношения: дороговизна российского софта, его малофункциональность, его «сырость» и нестабильность работы, трудности внедрения, а также совмения в его безопасности
Если российским компаниям приходится расставаться с зарубежным лицензионным софтом, то в качестве альтернативы они предпочитают Open Source, а не отечественные решения
https://www.cnews.ru/news/top/2025-09-26_slishkom_syroeizbytochno
Отечественный бизнес не очень стремится отказываться от иностранного ПО в пользу отечетсвенного. ПРичины такого отношения: дороговизна российского софта, его малофункциональность, его «сырость» и нестабильность работы, трудности внедрения, а также совмения в его безопасности
Если российским компаниям приходится расставаться с зарубежным лицензионным софтом, то в качестве альтернативы они предпочитают Open Source, а не отечественные решения
https://www.cnews.ru/news/top/2025-09-26_slishkom_syroeizbytochno
CNews.ru
Слишком сырое, очень дорогое. Названы причины, почему российские компании не хотят переходить на отечественное ПО. Опрос - CNews
Отечественный бизнес не очень стремится отказываться от иностранного ПО в пользу суверенного. Разработки российских компаний они считают или слишком сырыми и малофункциональными, но при этом...
😁23🤣6🤡4💯4😐2😭2😢1
This media is not supported in your browser
VIEW IN TELEGRAM
Наглядно как идет взаимодействие между клиентом и базой данных. Но в разных СУБД различается принцип использования подключений:
Postgres: process-per-connection
MySQL: thread-per-connection
Postgres: process-per-connection
MySQL: thread-per-connection
❤14🔥1👏1
Простой способ отправки email на Python:
import smtplib
HOST = "smtp.mydomain.com"
SUBJECT = "Test email from Python"
TO = "mike@mydomain.com"
FROM = "python@mydomain.com"
text = "blah blah blah"
BODY = "\r\n".join((
f"From: {FROM}",
f"To: {TO}",
f"Subject: {SUBJECT}",
"",
text
))
server = smtplib.SMTP(HOST)
server.sendmail(FROM, [TO], BODY)
server.quit()
❤16👎5👍4🤮3👏1
В руководство по языку Java добавлены новые статьи:
Sealed-классы и интерфейсы
https://metanit.com/java/tutorial/3.25.php"
Pattern мatching. Паттерн типов
https://metanit.com/java/tutorial/3.26.php"
Pattern мatching. record-паттерн
https://metanit.com/java/tutorial/3.27.php"
#java
Sealed-классы и интерфейсы
https://metanit.com/java/tutorial/3.25.php"
Pattern мatching. Паттерн типов
https://metanit.com/java/tutorial/3.26.php"
Pattern мatching. record-паттерн
https://metanit.com/java/tutorial/3.27.php"
#java
🔥22
Microsoft намерена превратить Edge на ПК в «агентский браузер» и позволить Copilot управлять им — перемещаться по вкладкам и выполнять задачи, пока пользователь просматривает контент. Об этом сообщил руководитель Microsoft AI Мустафа Сулейман в беседе с изданием The Verge.
В отличие от других компаний (например, The Browser Company), Microsoft не планирует разрабатывать отдельный ИИ-браузер, рассказал Сулейман. Вместо этого Copilot будет глубже интегрирован в Edge.
«Copilot будет объединять вкладки, создавать новые объекты, нажимать кнопки, искать информацию, а вы сможете наблюдать за развитием событий и время от времени вмешиваться, если захотите. Вы всегда будете контролировать ситуацию», — рассказывает Сулейман.
Опция «агентского браузера» будет включаться по желанию.
https://www.theverge.com/tech/783795/microsoft-ai-ceo-mustafa-suleyman-future-of-browser-interview-notepad
В отличие от других компаний (например, The Browser Company), Microsoft не планирует разрабатывать отдельный ИИ-браузер, рассказал Сулейман. Вместо этого Copilot будет глубже интегрирован в Edge.
«Copilot будет объединять вкладки, создавать новые объекты, нажимать кнопки, искать информацию, а вы сможете наблюдать за развитием событий и время от времени вмешиваться, если захотите. Вы всегда будете контролировать ситуацию», — рассказывает Сулейман.
Опция «агентского браузера» будет включаться по желанию.
https://www.theverge.com/tech/783795/microsoft-ai-ceo-mustafa-suleyman-future-of-browser-interview-notepad
The Verge
Microsoft’s AI CEO on the future of the browser
Microsoft wants Copilot to browse the web for you
🤨22💩16😁7👎1🤯1🤮1
Краткая шпаргалка по сервис-ориентированной архитектуре (SOA)
1. Принципы SOA:
- Loose Coupling (Слабая связанность): Сервисы независимы друг от друга.
- Reusability (Многократное использование): Сервисы можно использовать повторно.
- Interoperability (Совместимость): Сервисы могут взаимодействовать между собой на разных платформах.
2. Компоненты SOA:
- Enterprise Service Bus (ESB): Центральный элемент, обеспечивающий маршрутизацию, преобразование протоколов и данных.
- Сервисы:
- Order Service: Управление заказами.
- Customer Service: Работа с клиентами.
- Data Service: Обработка данных.
- Клиентские приложения: Используют сервисы через ESB.
3. Ключевые преимущества:
- Гибкость и адаптивность: Легкость в изменении и настройке системы.
- Масштабируемость: Возможность расширения системы.
- Снижение затрат: Экономия ресурсов за счет повторного использования сервисов.
- Упрощение интеграции: Легкость подключения новых компонентов.
1. Принципы SOA:
- Loose Coupling (Слабая связанность): Сервисы независимы друг от друга.
- Reusability (Многократное использование): Сервисы можно использовать повторно.
- Interoperability (Совместимость): Сервисы могут взаимодействовать между собой на разных платформах.
2. Компоненты SOA:
- Enterprise Service Bus (ESB): Центральный элемент, обеспечивающий маршрутизацию, преобразование протоколов и данных.
- Сервисы:
- Order Service: Управление заказами.
- Customer Service: Работа с клиентами.
- Data Service: Обработка данных.
- Клиентские приложения: Используют сервисы через ESB.
3. Ключевые преимущества:
- Гибкость и адаптивность: Легкость в изменении и настройке системы.
- Масштабируемость: Возможность расширения системы.
- Снижение затрат: Экономия ресурсов за счет повторного использования сервисов.
- Упрощение интеграции: Легкость подключения новых компонентов.
😁5🤔5👍2
Шпаргалка по регрессионному анализу
Регрессионный анализ — это метод, который позволяет подобрать функцию f(x), наилучшим образом описывающую данные yi = f(xi), с учетом некоторой функции ошибки
Типы регрессии:
1. Линейная регрессия:
- Подбирает прямую линию, минимизируя сумму квадратов ошибок
2. Полиномиальная регрессия:
- Подбирает полином порядка k, минимизируя сумму квадратов ошибок
3. Байесовская линейная регрессия:
- Для каждой точки данных подбирается гауссова распределение, минимизируя среднеквадратичную ошибку
- При увеличении количества точек данных распределение сходится к точке
4. Ридж-регрессия (Ridge Regression):
- Минимизирует сумму квадратов ошибок и взвешенную L2-норму параметров
5. LASSO-регрессия:
- Минимизирует сумму квадратов ошибок и взвешенную L1-норму параметров
6. Логистическая регрессия:
- Используется для классификации, а не регрессии
- Подбирает линию или полином с сигмоидальной активацией, минимизируя сумму квадратов ошибок
Регрессионный анализ — это метод, который позволяет подобрать функцию f(x), наилучшим образом описывающую данные yi = f(xi), с учетом некоторой функции ошибки
Типы регрессии:
1. Линейная регрессия:
- Подбирает прямую линию, минимизируя сумму квадратов ошибок
2. Полиномиальная регрессия:
- Подбирает полином порядка k, минимизируя сумму квадратов ошибок
3. Байесовская линейная регрессия:
- Для каждой точки данных подбирается гауссова распределение, минимизируя среднеквадратичную ошибку
- При увеличении количества точек данных распределение сходится к точке
4. Ридж-регрессия (Ridge Regression):
- Минимизирует сумму квадратов ошибок и взвешенную L2-норму параметров
5. LASSO-регрессия:
- Минимизирует сумму квадратов ошибок и взвешенную L1-норму параметров
6. Логистическая регрессия:
- Используется для классификации, а не регрессии
- Подбирает линию или полином с сигмоидальной активацией, минимизируя сумму квадратов ошибок
✍10🤓8🤯7🤝3
Механизмы аутентификации в микросервисах
(продолжение предыдущего поста)
[1.] API-КЛЮЧИ
* Простые уникальные идентификаторы, присваиваемые каждому клиенту или сервису.
* Передаются в заголовке или как параметр запроса с каждым обращением.
* Лучше всего подходят для внутренних сервисов, менее чувствительных API или для предоставления доступа к определённым функциям.
* Простота внедрения и управления.
* Менее безопасны по сравнению с токен-базированными методами. Ключи могут быть легко скомпрометированы или украдены.
[2.] БАЗОВАЯ АУТЕНТИФИКАЦИЯ
* Имя пользователя и пароль передаются в заголовке Authorization в виде строки, закодированной в base64.
* Простота реализации, но для обеспечения безопасности требуется HTTPS.
* Подходит для простых сценариев с низкими требованиями к безопасности.
* Широкая поддержка и простота понимания.
* Уязвимость к атакам типа «человек посередине» (man-in-the-middle), если не используется HTTPS.
* Пароли передаются в открытом тексте (даже при кодировании).
[3.] JSON WEB TOKENS (JWT)
* Автономные токены, содержащие информацию о пользователе и утверждения в полезной нагрузке JSON.
* Выдаются сервером аутентификации после успешного входа в систему, затем отправляются клиентом в заголовке Authorization.
* Широко используются для аутентификации без сохранения состояния в микросервисах, единого входа (SSO) и авторизации.
* Без сохранения состояния, безопасные, компактные и могут содержать дополнительные утверждения.
* Требуется надлежащее управление ключами для подписи и проверки.
[4.] OAUTH 2.0
* Фреймворк авторизации, позволяющий сторонним приложениям получать ограниченный доступ к ресурсам от имени владельца ресурса (пользователя) без передачи учётных данных.
* Использует различные типы грантов (код авторизации, неявный, учётные данные клиента и т. д.) для получения токенов доступа и обновления.
* Широко применяется для авторизации пользователей и делегированного доступа к API.
* Предоставляет стандартизированный способ защиты доступа к ресурсам без передачи учётных данных.
* Может быть сложным для реализации и требует тщательного рассмотрения уязвимостей безопасности.
[5.] OPENID CONNECT (OIDC)
* Уровень идентификации поверх OAuth 2.0, предоставляющий аутентификацию пользователя и информацию о профиле.
* Использует ID-токен вместе с токеном доступа для предоставления информации об идентификаторе пользователя.
* Применяется для аутентификации в сочетании с OAuth 2.0 для авторизации.
* Упрощает аутентификацию, предоставляя стандартизированный способ получения информации о пользователе.
* Требует интеграции с провайдером OIDC (например, Google, Okta).
[6.] ВЗАИМНАЯ TLS (mTLS)
* И клиент, и сервер аутентифицируют друг друга с помощью сертификатов X.509.
* Требуется центр сертификации (CA) для выдачи и управления сертификатами.
* Лучше всего подходит для защиты коммуникации между внутренними сервисами или высокочувствительными API.
* Высокая степень безопасности благодаря взаимной аутентификации и шифрованию.
* Более сложная настройка и управление по сравнению с другими механизмами.
Эти механизмы/типы аутентификации не ограничиваются только микросервисами.
(продолжение предыдущего поста)
[1.] API-КЛЮЧИ
* Простые уникальные идентификаторы, присваиваемые каждому клиенту или сервису.
* Передаются в заголовке или как параметр запроса с каждым обращением.
* Лучше всего подходят для внутренних сервисов, менее чувствительных API или для предоставления доступа к определённым функциям.
* Простота внедрения и управления.
* Менее безопасны по сравнению с токен-базированными методами. Ключи могут быть легко скомпрометированы или украдены.
[2.] БАЗОВАЯ АУТЕНТИФИКАЦИЯ
* Имя пользователя и пароль передаются в заголовке Authorization в виде строки, закодированной в base64.
* Простота реализации, но для обеспечения безопасности требуется HTTPS.
* Подходит для простых сценариев с низкими требованиями к безопасности.
* Широкая поддержка и простота понимания.
* Уязвимость к атакам типа «человек посередине» (man-in-the-middle), если не используется HTTPS.
* Пароли передаются в открытом тексте (даже при кодировании).
[3.] JSON WEB TOKENS (JWT)
* Автономные токены, содержащие информацию о пользователе и утверждения в полезной нагрузке JSON.
* Выдаются сервером аутентификации после успешного входа в систему, затем отправляются клиентом в заголовке Authorization.
* Широко используются для аутентификации без сохранения состояния в микросервисах, единого входа (SSO) и авторизации.
* Без сохранения состояния, безопасные, компактные и могут содержать дополнительные утверждения.
* Требуется надлежащее управление ключами для подписи и проверки.
[4.] OAUTH 2.0
* Фреймворк авторизации, позволяющий сторонним приложениям получать ограниченный доступ к ресурсам от имени владельца ресурса (пользователя) без передачи учётных данных.
* Использует различные типы грантов (код авторизации, неявный, учётные данные клиента и т. д.) для получения токенов доступа и обновления.
* Широко применяется для авторизации пользователей и делегированного доступа к API.
* Предоставляет стандартизированный способ защиты доступа к ресурсам без передачи учётных данных.
* Может быть сложным для реализации и требует тщательного рассмотрения уязвимостей безопасности.
[5.] OPENID CONNECT (OIDC)
* Уровень идентификации поверх OAuth 2.0, предоставляющий аутентификацию пользователя и информацию о профиле.
* Использует ID-токен вместе с токеном доступа для предоставления информации об идентификаторе пользователя.
* Применяется для аутентификации в сочетании с OAuth 2.0 для авторизации.
* Упрощает аутентификацию, предоставляя стандартизированный способ получения информации о пользователе.
* Требует интеграции с провайдером OIDC (например, Google, Okta).
[6.] ВЗАИМНАЯ TLS (mTLS)
* И клиент, и сервер аутентифицируют друг друга с помощью сертификатов X.509.
* Требуется центр сертификации (CA) для выдачи и управления сертификатами.
* Лучше всего подходит для защиты коммуникации между внутренними сервисами или высокочувствительными API.
* Высокая степень безопасности благодаря взаимной аутентификации и шифрованию.
* Более сложная настройка и управление по сравнению с другими механизмами.
Эти механизмы/типы аутентификации не ограничиваются только микросервисами.
Telegram
METANIT.COM
Механизмы аутентификации в микросервисах
(описание в следующем посте)
(описание в следующем посте)
👍8❤7🔥5🤯1
Первый язык программирования может влиять на стиль и подход программиста. По крайней мере так считает исследователь Ричард Л. Вексельблат (Richard L. Wexelblat). Он отмечает, что многие программы, написанные на одном языке, часто имеют структуру и стиль другого языка. Так, он упоминает «FORTRAN с точками с запятой» и «с привкусом BASIC». Это привело его к гипотезе, что первый язык программирования может оказывать глубокое влияние на мышление и способность программировать, подобно тому, как родной язык влияет на мышление человека
Ссылка на саму статью https://fermatslibrary.com/s/the-consequences-of-ones-first-programming-language
Ключевые моменты:
- Автор ссылается на гипотезу, которая утверждает, что структура языка влияет на восприятие мира.
- Он обеспокоен тем, что многие начинают с BASIC, который может ограничивать их способность использовать более сложные языки, такие как COBOL, для написания понятного кода
- Автор подчеркивает важность обучения программированию, а не просто написанию кода
Ссылка на саму статью https://fermatslibrary.com/s/the-consequences-of-ones-first-programming-language
Ключевые моменты:
- Автор ссылается на гипотезу, которая утверждает, что структура языка влияет на восприятие мира.
- Он обеспокоен тем, что многие начинают с BASIC, который может ограничивать их способность использовать более сложные языки, такие как COBOL, для написания понятного кода
- Автор подчеркивает важность обучения программированию, а не просто написанию кода
👍32🤔9❤8🔥2👎1