8 концепций проектирования систем (продолжение к предыдущему посту):
1. Доступность с балансировкой нагрузки (Availability with Load Balancers):
- Распределяет запросы между несколькими экземплярами сервисов, что повышает доступность системы.
2. Латентность с использованием CDN (Latency with CDNs):
- CDN (Content Delivery Network) сокращает время отклика, кэшируя контент ближе к пользователям.
3. Масштабируемость с репликацией (Scalability with Replication):
- Репликация данных позволяет системе масштабироваться, обеспечивая высокую производительность и доступность.
4. Устойчивость с использованием журналов транзакций (Durability with Transaction Logs):
- Журналы транзакций помогают восстановить состояние системы после сбоя.
5. Согласованность с конечной согласованностью (Consistency with Eventual Consistency):
- Система может достичь согласованности данных со временем, даже если данные временно несогласованы.
6. Модульность с ослабленным связыванием и высокой связностью (Modularity with Loose Coupling and High Cohesion):
- Модульность и ослабленное связывание улучшают гибкость и устойчивость системы.
7. Конфигурируемость с использованием кода конфигурации (Configurability with Configuration-as-Code):
- Конфигурация позволяет динамически управлять инфраструктурой и настройками системы.
8. Устойчивость с использованием очереди сообщений (Resiliency with Message Queue):
- Очередь сообщений помогает системе справляться с отказами и перегрузками, балансируя нагрузку между потребителями.
1. Доступность с балансировкой нагрузки (Availability with Load Balancers):
- Распределяет запросы между несколькими экземплярами сервисов, что повышает доступность системы.
2. Латентность с использованием CDN (Latency with CDNs):
- CDN (Content Delivery Network) сокращает время отклика, кэшируя контент ближе к пользователям.
3. Масштабируемость с репликацией (Scalability with Replication):
- Репликация данных позволяет системе масштабироваться, обеспечивая высокую производительность и доступность.
4. Устойчивость с использованием журналов транзакций (Durability with Transaction Logs):
- Журналы транзакций помогают восстановить состояние системы после сбоя.
5. Согласованность с конечной согласованностью (Consistency with Eventual Consistency):
- Система может достичь согласованности данных со временем, даже если данные временно несогласованы.
6. Модульность с ослабленным связыванием и высокой связностью (Modularity with Loose Coupling and High Cohesion):
- Модульность и ослабленное связывание улучшают гибкость и устойчивость системы.
7. Конфигурируемость с использованием кода конфигурации (Configurability with Configuration-as-Code):
- Конфигурация позволяет динамически управлять инфраструктурой и настройками системы.
8. Устойчивость с использованием очереди сообщений (Resiliency with Message Queue):
- Очередь сообщений помогает системе справляться с отказами и перегрузками, балансируя нагрузку между потребителями.
🔥4❤1
Основные типы кибератак (описание инфографики из предыдущего поста):
- Фишинг:
- Китовый фишинг (Whale Phishing) — нацелен на высокопоставленных лиц
- Целевая атака (Spear Attack) — направлена на конкретных пользователей
- Фарминг (Pharming) — перенаправление пользователей на поддельные сайты
- SQL-инъекции:
- Атака, связанная с внедрением вредоносного кода в запросы к базе данных
- Межсайтовый скриптинг (XSS):
- Использование уязвимостей веб-приложений для внедрения вредоносного кода
- Атака «человек посередине» (Man-in-the-Middle):
- Перехват и изменение данных между двумя сторонами
- Включает:
- Перехват сессии (Session Hijacking)
- Спуфинг IP (IP Spoofing)
- Атака воспроизведения (Replay)
- DDoS:
- Направлена на перегрузку серверов или сетей, чтобы сделать их недоступными
- Атаки на пароли:
- Подбирают пароли методом перебора (Brute Force Guessing) или используют словари (Dictionary Attack)
- Атака на устройства:
- Автоматическое заражение устройства при посещении вредоносного сайта
- Ransomware:
- Заражение системы вредоносным ПО, которое блокирует доступ к данным и требует выкуп
- Атака прослушивания (Eavesdropping):
- Перехват данных, передаваемых по сети
- Атаки, управляемые ИИ (AI-Powered Attacks):
- Используют ИИ для автоматизации и усложнения атак
- Фишинг:
- Китовый фишинг (Whale Phishing) — нацелен на высокопоставленных лиц
- Целевая атака (Spear Attack) — направлена на конкретных пользователей
- Фарминг (Pharming) — перенаправление пользователей на поддельные сайты
- SQL-инъекции:
- Атака, связанная с внедрением вредоносного кода в запросы к базе данных
- Межсайтовый скриптинг (XSS):
- Использование уязвимостей веб-приложений для внедрения вредоносного кода
- Атака «человек посередине» (Man-in-the-Middle):
- Перехват и изменение данных между двумя сторонами
- Включает:
- Перехват сессии (Session Hijacking)
- Спуфинг IP (IP Spoofing)
- Атака воспроизведения (Replay)
- DDoS:
- Направлена на перегрузку серверов или сетей, чтобы сделать их недоступными
- Атаки на пароли:
- Подбирают пароли методом перебора (Brute Force Guessing) или используют словари (Dictionary Attack)
- Атака на устройства:
- Автоматическое заражение устройства при посещении вредоносного сайта
- Ransomware:
- Заражение системы вредоносным ПО, которое блокирует доступ к данным и требует выкуп
- Атака прослушивания (Eavesdropping):
- Перехват данных, передаваемых по сети
- Атаки, управляемые ИИ (AI-Powered Attacks):
- Используют ИИ для автоматизации и усложнения атак
❤12🔥2👏1
Различные алгоритмы и структуры данных, которые часто используются в интервью по программированию (описание к предыдущему посту):
1. Clone: Этот паттерн используется для создания точной копии графа. На изображении показано, как оригинальный граф преобразуется в клонированный граф с новыми узлами.
2. Serialize and Deserialize: Этот паттерн позволяет преобразовать структуру данных в последовательность байтов (сериализация) и восстановить её обратно (десериализация). На изображении показан пример сериализации и десериализации дерева.
3. Monotonic Queue: Используется для эффективного поиска минимального или максимального значения в скользящем окне. На изображении показаны гистограммы, иллюстрирующие работу очереди.
4. Segment Tree: Это структура данных, которая позволяет эффективно выполнять запросы на отрезках массива. На изображении показана структура дерева и его узлы.
5. Binary Index Tree: Также известная как дерево Фенвика, используется для эффективного вычисления префиксных сумм. На изображении показан пример дерева.
6. Meet in the Middle: Этот паттерн применяется для оптимизации поиска в больших наборах данных. На изображении показан процесс разделения и объединения данных.
7. Counting: Используется для подсчёта частоты элементов в массиве. На изображении представлена таблица, где ключи — это элементы массива, а значения — их частота.
8. Linear Sorting: Это алгоритмы сортировки, такие как сортировка подсчётом. На изображении показан процесс сортировки массива.
9. Simulation: Используется для моделирования различных процессов, таких как движение объектов. На изображении показаны координаты и направления движения.
1. Clone: Этот паттерн используется для создания точной копии графа. На изображении показано, как оригинальный граф преобразуется в клонированный граф с новыми узлами.
2. Serialize and Deserialize: Этот паттерн позволяет преобразовать структуру данных в последовательность байтов (сериализация) и восстановить её обратно (десериализация). На изображении показан пример сериализации и десериализации дерева.
3. Monotonic Queue: Используется для эффективного поиска минимального или максимального значения в скользящем окне. На изображении показаны гистограммы, иллюстрирующие работу очереди.
4. Segment Tree: Это структура данных, которая позволяет эффективно выполнять запросы на отрезках массива. На изображении показана структура дерева и его узлы.
5. Binary Index Tree: Также известная как дерево Фенвика, используется для эффективного вычисления префиксных сумм. На изображении показан пример дерева.
6. Meet in the Middle: Этот паттерн применяется для оптимизации поиска в больших наборах данных. На изображении показан процесс разделения и объединения данных.
7. Counting: Используется для подсчёта частоты элементов в массиве. На изображении представлена таблица, где ключи — это элементы массива, а значения — их частота.
8. Linear Sorting: Это алгоритмы сортировки, такие как сортировка подсчётом. На изображении показан процесс сортировки массива.
9. Simulation: Используется для моделирования различных процессов, таких как движение объектов. На изображении показаны координаты и направления движения.
👍12🎄3👏1
Почему Redis такой быстрый
🔹 Хранение в оперативной памяти
Redis хранит данные в RAM, где время доступа измеряется в наносекундах, а не в миллисекундах
🔹 Однопоточный цикл событий
Redis обрабатывает команды в одном потоке, позволяя избежать блокировок, гонок за ресурсы и переключений контекста. Благодаря мультиплексированию ввода-вывода он эффективно обрабатывает тысячи одновременных подключений с помощью цикла событий
🔹 Оптимизированные структуры данных
Redis использует специальные реализации списков, множеств и хэшей, оптимизированных как для производительности, так и для эффективного использования памяти
🔹 Эффективность ввода-вывода
Redis применяет легковесный текстовый протокол RESP для обработки сетевого ввода-вывода и поддерживает конвейерную обработку, позволяя отправлять несколько команд в одном запросе
🔹 Серверный скриптинг
Механизм скриптов Lua в Redis позволяет выполнять сложные многоэтапные операции атомарно на сервере, исключая необходимость в сетевых обращениях туда-обратно
🔹 Хранение в оперативной памяти
Redis хранит данные в RAM, где время доступа измеряется в наносекундах, а не в миллисекундах
🔹 Однопоточный цикл событий
Redis обрабатывает команды в одном потоке, позволяя избежать блокировок, гонок за ресурсы и переключений контекста. Благодаря мультиплексированию ввода-вывода он эффективно обрабатывает тысячи одновременных подключений с помощью цикла событий
🔹 Оптимизированные структуры данных
Redis использует специальные реализации списков, множеств и хэшей, оптимизированных как для производительности, так и для эффективного использования памяти
🔹 Эффективность ввода-вывода
Redis применяет легковесный текстовый протокол RESP для обработки сетевого ввода-вывода и поддерживает конвейерную обработку, позволяя отправлять несколько команд в одном запросе
🔹 Серверный скриптинг
Механизм скриптов Lua в Redis позволяет выполнять сложные многоэтапные операции атомарно на сервере, исключая необходимость в сетевых обращениях туда-обратно
❤10
Рекомендации по написанию модульного кода (продолжение к предыдущему посту)
Написание модульного кода — это не просто способ получить чистый код, это значительно упрощает совместную работу и масштабирование.
1) Дизайн
* Единственная ответственность
Каждый модуль/класс/функция должен выполнять только одну задачу. Это основа принципа единственной ответственности (SRP), одного из столпов SOLID-дизайна.
* Слабая связанность
Модули должны иметь минимальные зависимости. Это обеспечивает более простое повторное использование и снижает затраты на поддержку.
* Высокая связность
Связанная функциональность должна быть сгруппирована вместе для лучшей ясности и удобства поддержки.
2) Структура
* Небольшие функции
Функции должны выполнять одну задачу и делать это хорошо. Это улучшает читаемость и тестируемость.
* Четкие интерфейсы
Хорошо определенные API/интерфейсы обеспечивают простую интеграцию и замену.
* Согласованное именование
Использование согласованных, описательных имен помогает другим разработчикам быстро понимать код.
3) Повторное использование
* Библиотеки
Общая функциональность должна быть вынесена в библиотеки/модули.
* Универсальный код
Используйте параметризацию/обобщения/шаблоны там, где это уместно, чтобы максимально повысить возможность повторного использования.
* Конфигурация
Избегайте жесткого кодирования значений, используйте конфигурации для гибкости.
4) Тестирование
* Юнит-тесты
Необходимы для проверки небольших изолированных частей кода.
* Мокирование
Облегчает тестирование в изоляции, независимо от зависимостей.
* Покрытие
Стремитесь к высокому покрытию тестами для обеспечения надежности.
5) Документация
* Комментарии
Объясняйте, почему (а не только что) в коде.
* Readme
Каждый модуль/библиотека должен иметь четкие инструкции по использованию.
* Примеры
Примеры использования чрезвычайно полезны для адаптации и внедрения.
6) Поддерживаемость
* Регулярный рефакторинг
Устраняйте технический долг до того, как он вырастет.
* Код-ревью
Рецензии коллег помогают выявить проблемы и распространить знания.
* Следование стандартам
Согласованность (через руководства по стилю кода и соглашения) предотвращает путаницу.
Написание модульного кода — это не просто способ получить чистый код, это значительно упрощает совместную работу и масштабирование.
1) Дизайн
* Единственная ответственность
Каждый модуль/класс/функция должен выполнять только одну задачу. Это основа принципа единственной ответственности (SRP), одного из столпов SOLID-дизайна.
* Слабая связанность
Модули должны иметь минимальные зависимости. Это обеспечивает более простое повторное использование и снижает затраты на поддержку.
* Высокая связность
Связанная функциональность должна быть сгруппирована вместе для лучшей ясности и удобства поддержки.
2) Структура
* Небольшие функции
Функции должны выполнять одну задачу и делать это хорошо. Это улучшает читаемость и тестируемость.
* Четкие интерфейсы
Хорошо определенные API/интерфейсы обеспечивают простую интеграцию и замену.
* Согласованное именование
Использование согласованных, описательных имен помогает другим разработчикам быстро понимать код.
3) Повторное использование
* Библиотеки
Общая функциональность должна быть вынесена в библиотеки/модули.
* Универсальный код
Используйте параметризацию/обобщения/шаблоны там, где это уместно, чтобы максимально повысить возможность повторного использования.
* Конфигурация
Избегайте жесткого кодирования значений, используйте конфигурации для гибкости.
4) Тестирование
* Юнит-тесты
Необходимы для проверки небольших изолированных частей кода.
* Мокирование
Облегчает тестирование в изоляции, независимо от зависимостей.
* Покрытие
Стремитесь к высокому покрытию тестами для обеспечения надежности.
5) Документация
* Комментарии
Объясняйте, почему (а не только что) в коде.
* Readme
Каждый модуль/библиотека должен иметь четкие инструкции по использованию.
* Примеры
Примеры использования чрезвычайно полезны для адаптации и внедрения.
6) Поддерживаемость
* Регулярный рефакторинг
Устраняйте технический долг до того, как он вырастет.
* Код-ревью
Рецензии коллег помогают выявить проблемы и распространить знания.
* Следование стандартам
Согласованность (через руководства по стилю кода и соглашения) предотвращает путаницу.
👍16😢2👏1
Когда проверка на ботов/роботов уже не спасает.
Новый AI-бот от OpenAI - ChatGPT Agent легко обходит проверку «Я не робот» от Cloudflare и продолжает работу без капчи.
ChatGPT Agent работает в виртуальном браузере, самостоятельно выполняя клики, ввод данных и навигацию — у пользователя запрашиваются подтверждения лишь на ключевых этапах, например, при совершении покупки или отправке письма. В случае с капчей ИИ‑агент ставит галочку «Подтвердите, что вы человек», а затем нажимает кнопку «Далее».
Примечательно, что ChatGPT Agent комментирует прохождение проверки фразами вроде «Этот шаг необходим, чтобы доказать, что я не бот»
Функция ChatGPT Agent доступна пользователям платных тарифов Plus, Pro и Team с 17 июля 2025 года. Бесплатным пользователям ИИ‑агент пока недоступен.
https://arstechnica.com/information-technology/2025/07/openais-chatgpt-agent-casually-clicks-through-i-am-not-a-robot-verification-test/
Новый AI-бот от OpenAI - ChatGPT Agent легко обходит проверку «Я не робот» от Cloudflare и продолжает работу без капчи.
ChatGPT Agent работает в виртуальном браузере, самостоятельно выполняя клики, ввод данных и навигацию — у пользователя запрашиваются подтверждения лишь на ключевых этапах, например, при совершении покупки или отправке письма. В случае с капчей ИИ‑агент ставит галочку «Подтвердите, что вы человек», а затем нажимает кнопку «Далее».
Примечательно, что ChatGPT Agent комментирует прохождение проверки фразами вроде «Этот шаг необходим, чтобы доказать, что я не бот»
Функция ChatGPT Agent доступна пользователям платных тарифов Plus, Pro и Team с 17 июля 2025 года. Бесплатным пользователям ИИ‑агент пока недоступен.
https://arstechnica.com/information-technology/2025/07/openais-chatgpt-agent-casually-clicks-through-i-am-not-a-robot-verification-test/
😁17❤2🔥1👏1
Процесс компиляции GNU от исходного кода до исполняемого файла
Описание - https://news.1rj.ru/str/devnull22/1930
Описание - https://news.1rj.ru/str/devnull22/1930
👍5❤1🔥1🥰1🤔1