7. Проверка строки на наличие только цифр
Регулярное выражение:
Объяснение:
•
•
•
Пример:
8. Поиск всех URL в тексте
Регулярное выражение:
Объяснение:
•
•
•
Пример:
Регулярное выражение:
^\d+$
Объяснение:
•
^
— начало строки.•
\d+
— одна или более цифр.•
$
— конец строки.Пример:
let regex = /^\d+$/;
let str = "12345";
console.log(regex.test(str)); // true
8. Поиск всех URL в тексте
Регулярное выражение:
\bhttps?:\/\/\S+\b
Объяснение:
•
https?
— соответствует "http" или "https".•
:\/\/
— соответствует "://".•
\S+
— соответствует одному или более не пробельным символам (весь URL).Пример:
let regex = /\bhttps?:\/\/\S+\b/g;
let text = "Посетите сайт https://example.com или http://test.com";
console.log(text.match(regex)); // ["https://example.com", "http://test.com"]
Системы контроля версий
1. Git
Тип: Распределённая система контроля версий (DVCS).
Особенности:
• Очень популярна среди разработчиков.
• Каждый разработчик имеет полную копию репозитория, что позволяет работать автономно и эффективно.
• Поддерживает ветвление (branching) и слияние (merging), что позволяет работать над несколькими функциями или исправлениями одновременно.
• Часто используется с сервисами для хостинга репозиториев, такими как GitHub, GitLab и Bitbucket.
• Инструмент командной строки, но также существует множество графических интерфейсов и интеграций с IDE.
Популярные инструменты и сервисы:
- GitHub: Онлайн-платформа для хостинга репозиториев, совместной работы и обмена кодом.
- GitLab: Платформа для разработки и хостинга репозиториев с дополнительными функциями CI/CD.
- Bitbucket: Платформа для хостинга репозиториев, разработанная компанией Atlassian, часто используется в связке с JIRA.
2. Subversion (SVN)
Тип: Централизованная система контроля версий.
Особенности:
• Все изменения хранятся на центральном сервере, и доступ к репозиторию осуществляется через этот сервер.
• Поддерживает создание веток и слияние изменений, но не так гибко, как Git.
• Простой в освоении, поэтому используется в более традиционных и крупных компаниях для сохранения простоты процесса разработки.
• Может быть полезен для проектов, где важен строгий контроль над версионностью и доступом.
Популярные инструменты:
- Apache Subversion: Основной сервер для работы с SVN.
- TortoiseSVN: Популярный клиент для SVN на Windows, который интегрируется с проводником Windows.
3. Mercurial (Hg)
Тип: Распределённая система контроля версий.
Особенности:
• Принципиально схож с Git, но интерфейс проще и более интуитивно понятен.
• Подходит для проектов, где требуется более простая настройка и меньшее количество команд, чем в Git.
• Используется в меньших командах и для меньших проектов, однако всё ещё поддерживает ветвление и слияние.
Популярные инструменты:
- Bitbucket (также поддерживает Mercurial, хотя сейчас он больше ориентирован на Git).
- TortoiseHg: Графический клиент для Mercurial.
4. CVS (Concurrent Versions System)
Тип: Централизованная система контроля версий.
Особенности:
• Одна из старейших систем контроля версий, в настоящее время используется реже из-за своей ограниченности по сравнению с более современными СКВ.
• Хранит все данные на центральном сервере, и доступ к изменениям осуществляется через него.
• Меньше поддерживает сложные операции с ветвлением и слиянием по сравнению с Git или SVN.
5. Perforce (Helix Core)
Тип: Централизованная система контроля версий.
Особенности:
• Применяется в больших проектах с большим количеством данных, таких как видеоигры или большие программные продукты.
• Быстрая и масштабируемая, поддерживает работу с большими бинарными файлами, что делает её популярной в индустрии разработки игр.
• Предоставляет возможности для централизованного контроля версий с высокой производительностью.
6. Bazaar (bzr)
Тип: Распределённая система контроля версий.
Особенности:
• Разработана компанией Canonical (создатель Ubuntu) для работы с проектами с открытым исходным кодом.
• Поддерживает как распределённый, так и централизованный режим работы.
• Хотя она менее популярна, чем Git, её можно интегрировать с другими системами контроля версий.
7. Fossil
Тип: Распределённая система контроля версий.
Особенности:
• Меньше известна, но обладает встроенной поддержкой веб-интерфейса, отслеживания ошибок, обсуждений и управления проектом.
• Простота и гибкость делают её интересной для небольших проектов и команд.
1. Git
Тип: Распределённая система контроля версий (DVCS).
Особенности:
• Очень популярна среди разработчиков.
• Каждый разработчик имеет полную копию репозитория, что позволяет работать автономно и эффективно.
• Поддерживает ветвление (branching) и слияние (merging), что позволяет работать над несколькими функциями или исправлениями одновременно.
• Часто используется с сервисами для хостинга репозиториев, такими как GitHub, GitLab и Bitbucket.
• Инструмент командной строки, но также существует множество графических интерфейсов и интеграций с IDE.
Популярные инструменты и сервисы:
- GitHub: Онлайн-платформа для хостинга репозиториев, совместной работы и обмена кодом.
- GitLab: Платформа для разработки и хостинга репозиториев с дополнительными функциями CI/CD.
- Bitbucket: Платформа для хостинга репозиториев, разработанная компанией Atlassian, часто используется в связке с JIRA.
2. Subversion (SVN)
Тип: Централизованная система контроля версий.
Особенности:
• Все изменения хранятся на центральном сервере, и доступ к репозиторию осуществляется через этот сервер.
• Поддерживает создание веток и слияние изменений, но не так гибко, как Git.
• Простой в освоении, поэтому используется в более традиционных и крупных компаниях для сохранения простоты процесса разработки.
• Может быть полезен для проектов, где важен строгий контроль над версионностью и доступом.
Популярные инструменты:
- Apache Subversion: Основной сервер для работы с SVN.
- TortoiseSVN: Популярный клиент для SVN на Windows, который интегрируется с проводником Windows.
3. Mercurial (Hg)
Тип: Распределённая система контроля версий.
Особенности:
• Принципиально схож с Git, но интерфейс проще и более интуитивно понятен.
• Подходит для проектов, где требуется более простая настройка и меньшее количество команд, чем в Git.
• Используется в меньших командах и для меньших проектов, однако всё ещё поддерживает ветвление и слияние.
Популярные инструменты:
- Bitbucket (также поддерживает Mercurial, хотя сейчас он больше ориентирован на Git).
- TortoiseHg: Графический клиент для Mercurial.
4. CVS (Concurrent Versions System)
Тип: Централизованная система контроля версий.
Особенности:
• Одна из старейших систем контроля версий, в настоящее время используется реже из-за своей ограниченности по сравнению с более современными СКВ.
• Хранит все данные на центральном сервере, и доступ к изменениям осуществляется через него.
• Меньше поддерживает сложные операции с ветвлением и слиянием по сравнению с Git или SVN.
5. Perforce (Helix Core)
Тип: Централизованная система контроля версий.
Особенности:
• Применяется в больших проектах с большим количеством данных, таких как видеоигры или большие программные продукты.
• Быстрая и масштабируемая, поддерживает работу с большими бинарными файлами, что делает её популярной в индустрии разработки игр.
• Предоставляет возможности для централизованного контроля версий с высокой производительностью.
6. Bazaar (bzr)
Тип: Распределённая система контроля версий.
Особенности:
• Разработана компанией Canonical (создатель Ubuntu) для работы с проектами с открытым исходным кодом.
• Поддерживает как распределённый, так и централизованный режим работы.
• Хотя она менее популярна, чем Git, её можно интегрировать с другими системами контроля версий.
7. Fossil
Тип: Распределённая система контроля версий.
Особенности:
• Меньше известна, но обладает встроенной поддержкой веб-интерфейса, отслеживания ошибок, обсуждений и управления проектом.
• Простота и гибкость делают её интересной для небольших проектов и команд.
Формальные языки и грамматики
Формальные языки:
Множество строк (или слов), составленных из алфавита. Алфавит состоит из конечного набора символов, которые называются символами. Язык — это множество слов, построенных из этих символов.
Пример:
• Алфавит:
Язык, состоящий из всех строк, содержащих четное количество символов
Грамматики
Набор правил, которые определяют, как можно строить строки формального языка из символов алфавита. Грамматики обычно делятся на несколько типов, в зависимости от их мощности и применимости.
1. Бэкусовская форма (Context-Free Grammar, CFG)
Это один из самых популярных типов грамматик. В CFG правила состоят из замен, где левая часть состоит из одного нетерминала, а правая — из последовательности терминалов и нетерминалов.
Пример: Грамматика для арифметических выражений:
Здесь:
•
•
• Применяя эти правила, мы можем строить выражения, такие как
2. Грамматики типа 0 (Rug grammar)
Это самая общая форма грамматик, где правила могут быть произвольными, и левые части правил могут содержать несколько символов, в том числе нетерминалы.
3. Грамматики типа 1 (Context-sensitive grammar)
Правила грамматики могут заменять строку, состоящую из нескольких символов, только если на определенной позиции в строке находится подходящий контекст.
4. Грамматики типа 2 (Context-free grammar)
В этих грамматиках правила заменяют один нетерминал на строку из терминалов и нетерминалов, не завися от контекста. Это наиболее популярный тип грамматик, применяемых в компиляторах и других системах.
5. Грамматики типа 3 (Regular grammar)
Самые простые грамматики, где правила имеют ограниченную форму. Например, они могут быть описаны с помощью регулярных выражений.
Важные концепты в теории автоматов и теории формальных языков, которые изучают структуры, используемые для описания и анализа различных типов языков, включая языки программирования, естественные языки и другие формализованные системы.
Формальные языки:
Множество строк (или слов), составленных из алфавита. Алфавит состоит из конечного набора символов, которые называются символами. Язык — это множество слов, построенных из этих символов.
Пример:
• Алфавит:
Σ={a,b}
(два символа: a
и b
).Язык, состоящий из всех строк, содержащих четное количество символов
a
: L={ϵ,aa,abba,aabaa,…}
.Грамматики
Набор правил, которые определяют, как можно строить строки формального языка из символов алфавита. Грамматики обычно делятся на несколько типов, в зависимости от их мощности и применимости.
1. Бэкусовская форма (Context-Free Grammar, CFG)
Это один из самых популярных типов грамматик. В CFG правила состоят из замен, где левая часть состоит из одного нетерминала, а правая — из последовательности терминалов и нетерминалов.
Пример: Грамматика для арифметических выражений:
E → E + T
E → E - T
E → T
T → T * F
T → T / F
T → F
F → ( E )
F → number
Здесь:
•
E
,T
,F
— нетерминалы.•
+
,−
,∗
,/
,(,
),number
— терминалы.• Применяя эти правила, мы можем строить выражения, такие как
number+number∗number
.2. Грамматики типа 0 (Rug grammar)
Это самая общая форма грамматик, где правила могут быть произвольными, и левые части правил могут содержать несколько символов, в том числе нетерминалы.
3. Грамматики типа 1 (Context-sensitive grammar)
Правила грамматики могут заменять строку, состоящую из нескольких символов, только если на определенной позиции в строке находится подходящий контекст.
4. Грамматики типа 2 (Context-free grammar)
В этих грамматиках правила заменяют один нетерминал на строку из терминалов и нетерминалов, не завися от контекста. Это наиболее популярный тип грамматик, применяемых в компиляторах и других системах.
5. Грамматики типа 3 (Regular grammar)
Самые простые грамматики, где правила имеют ограниченную форму. Например, они могут быть описаны с помощью регулярных выражений.
Типы формальных языков
Существует несколько типов формальных языков, каждый из которых определяется своей грамматикой:
• Регулярные языки: Их можно описать с помощью регулярных выражений или конечных автоматов. Пример: язык всех строк, содержащих хотя бы одну букву "
• Контекстно-свободные языки: Их можно описать с помощью контекстно-свободных грамматик. Пример: язык правильно сбалансированных скобок.
• Контекстно-зависимые языки: Языки, которые требуют контекста для замены символов в строках. Эти языки могут быть описаны с помощью контекстно-зависимых грамматик.
• Рекурсивно перечислимые языки: Это самые общие языки, которые могут быть описаны алгоритмом.
Существует несколько типов формальных языков, каждый из которых определяется своей грамматикой:
• Регулярные языки: Их можно описать с помощью регулярных выражений или конечных автоматов. Пример: язык всех строк, содержащих хотя бы одну букву "
a
".• Контекстно-свободные языки: Их можно описать с помощью контекстно-свободных грамматик. Пример: язык правильно сбалансированных скобок.
• Контекстно-зависимые языки: Языки, которые требуют контекста для замены символов в строках. Эти языки могут быть описаны с помощью контекстно-зависимых грамматик.
• Рекурсивно перечислимые языки: Это самые общие языки, которые могут быть описаны алгоритмом.
Применение формальных языков и грамматик
• Программирование: Формальные грамматики используются для определения синтаксиса языков программирования. Например, грамматика Python или C++ определяет, какие конструкции допустимы в этих языках.
• Обработка естественного языка: Формальные языки применяются в лингвистике для анализа и синтаксического разбора предложений.
• Автоматы: Формальные языки тесно связаны с теориями автоматов, такими как конечные автоматы и стековые автоматы.
• Системы компиляции: Грамматики важны для создания компиляторов, которые могут анализировать исходный код и трансформировать его в машинный код.
• Программирование: Формальные грамматики используются для определения синтаксиса языков программирования. Например, грамматика Python или C++ определяет, какие конструкции допустимы в этих языках.
• Обработка естественного языка: Формальные языки применяются в лингвистике для анализа и синтаксического разбора предложений.
• Автоматы: Формальные языки тесно связаны с теориями автоматов, такими как конечные автоматы и стековые автоматы.
• Системы компиляции: Грамматики важны для создания компиляторов, которые могут анализировать исходный код и трансформировать его в машинный код.
DevSecOps — интеграция практик безопасности в процесс разработки программного обеспечения и операционных процессов, который часто используется в рамках подхода DevOps. Термин состоит из трех частей:
Dev — разработка (Development)
Sec — безопасность (Security)
Ops — операционные процессы (Operations)
Основные принципы DevSecOps:
• Интеграция безопасности с самого начала: Вместо того чтобы "добавлять" безопасность в конце процесса разработки, её рассматривают как неотъемлемую часть всего жизненного цикла разработки.
• Автоматизация процессов безопасности: Использование инструментов для автоматического тестирования и проверки кода на наличие уязвимостей.
• Обратная связь в реальном времени: Разработчики получают уведомления о потенциальных проблемах безопасности во время написания и тестирования кода, что позволяет быстро их устранять.
• Совместная работа команд: DevSecOps способствует тесному взаимодействию между командами разработчиков, специалистов по безопасности и операционными командами для обеспечения качественного и безопасного ПО.
• Постоянная защита и мониторинг: Мониторинг безопасности осуществляется на всех этапах разработки и эксплуатации.
Dev — разработка (Development)
Sec — безопасность (Security)
Ops — операционные процессы (Operations)
Идея DevSecOps заключается в том, чтобы обеспечивать безопасность на всех этапах разработки и эксплуатации ПО, а не только в конце, когда продукт уже готов. Это подход, который встраивает процессы безопасности в непрерывную интеграцию (CI), непрерывное развертывание (CD) и управление инфраструктурой.
Основные принципы DevSecOps:
• Интеграция безопасности с самого начала: Вместо того чтобы "добавлять" безопасность в конце процесса разработки, её рассматривают как неотъемлемую часть всего жизненного цикла разработки.
• Автоматизация процессов безопасности: Использование инструментов для автоматического тестирования и проверки кода на наличие уязвимостей.
• Обратная связь в реальном времени: Разработчики получают уведомления о потенциальных проблемах безопасности во время написания и тестирования кода, что позволяет быстро их устранять.
• Совместная работа команд: DevSecOps способствует тесному взаимодействию между командами разработчиков, специалистов по безопасности и операционными командами для обеспечения качественного и безопасного ПО.
• Постоянная защита и мониторинг: Мониторинг безопасности осуществляется на всех этапах разработки и эксплуатации.
В DevSecOps используется ряд инструментов для автоматизации и улучшения процессов обеспечения безопасности на разных этапах разработки, тестирования и эксплуатации ПО.
Здесь, (и далее в постах) основные категории инструментов, применяемые в DevSecOps:
Инструменты для статического анализа кода (SAST)
Эти инструменты анализируют исходный код программы на наличие уязвимостей до его компиляции или выполнения.
• SonarQube: Анализирует качество кода, находит ошибки, уязвимости и плохие практики программирования.
• Checkmarx: Проводит статический анализ для выявления уязвимостей на уровне исходного кода.
• Fortify: Инструмент для анализа безопасности на разных уровнях разработки, включая статический анализ кода.
• Veracode: Обеспечивает анализ безопасности на уровне исходного кода, а также на уровне скомпилированных приложений.
Здесь, (и далее в постах) основные категории инструментов, применяемые в DevSecOps:
Инструменты для статического анализа кода (SAST)
Эти инструменты анализируют исходный код программы на наличие уязвимостей до его компиляции или выполнения.
• SonarQube: Анализирует качество кода, находит ошибки, уязвимости и плохие практики программирования.
• Checkmarx: Проводит статический анализ для выявления уязвимостей на уровне исходного кода.
• Fortify: Инструмент для анализа безопасности на разных уровнях разработки, включая статический анализ кода.
• Veracode: Обеспечивает анализ безопасности на уровне исходного кода, а также на уровне скомпилированных приложений.
Инструменты для динамического анализа приложений (DAST)
Эти инструменты проверяют приложение в рабочем состоянии, имитируя атаки, чтобы выявить уязвимости.
• OWASP ZAP (Zed Attack Proxy): Один из самых популярных инструментов для динамического тестирования безопасности веб-приложений.
• Burp Suite: Мощный инструмент для тестирования безопасности веб-приложений, включая перехват запросов и сканирование на уязвимости.
• Acunetix: Инструмент для автоматического сканирования веб-приложений на наличие уязвимостей, таких как XSS или SQL-инъекции.
Эти инструменты проверяют приложение в рабочем состоянии, имитируя атаки, чтобы выявить уязвимости.
• OWASP ZAP (Zed Attack Proxy): Один из самых популярных инструментов для динамического тестирования безопасности веб-приложений.
• Burp Suite: Мощный инструмент для тестирования безопасности веб-приложений, включая перехват запросов и сканирование на уязвимости.
• Acunetix: Инструмент для автоматического сканирования веб-приложений на наличие уязвимостей, таких как XSS или SQL-инъекции.
Инструменты для анализа инфраструктуры как кода (IaC)
Эти инструменты позволяют проверять конфигурации инфраструктуры на наличие уязвимостей до её развертывания.
• Terraform (с плагином Terraform Sentinel): Инструмент для управления инфраструктурой как кодом с возможностью интеграции политик безопасности.
• CloudFormation (с CloudFormation Guard): Инструмент AWS для работы с IaC, который позволяет проверять безопасность конфигураций.
• Checkov: Открытый инструмент для проверки безопасности конфигураций в Terraform, CloudFormation и других IaC шаблонах.
• Kics (Keeping Infrastructure as Code Secure): Открытый инструмент для сканирования шаблонов IaC на наличие уязвимостей.
Эти инструменты позволяют проверять конфигурации инфраструктуры на наличие уязвимостей до её развертывания.
• Terraform (с плагином Terraform Sentinel): Инструмент для управления инфраструктурой как кодом с возможностью интеграции политик безопасности.
• CloudFormation (с CloudFormation Guard): Инструмент AWS для работы с IaC, который позволяет проверять безопасность конфигураций.
• Checkov: Открытый инструмент для проверки безопасности конфигураций в Terraform, CloudFormation и других IaC шаблонах.
• Kics (Keeping Infrastructure as Code Secure): Открытый инструмент для сканирования шаблонов IaC на наличие уязвимостей.
Инструменты для мониторинга безопасности
Эти инструменты помогают отслеживать угрозы безопасности в реальном времени, а также анализировать логи и события.
• Splunk: Платформа для анализа данных и мониторинга безопасности, которая может обрабатывать огромные объемы логов в реальном времени.
• Prometheus + Grafana: Используются для мониторинга состояния приложений и инфраструктуры, включая выявление аномалий.
• ELK Stack (Elasticsearch, Logstash, Kibana): Система для сбора, хранения, анализа и визуализации логов, что помогает выявлять проблемы с безопасностью.
• Datadog: Обеспечивает мониторинг приложений и инфраструктуры, включая управление безопасностью и анализ логов.
Эти инструменты помогают отслеживать угрозы безопасности в реальном времени, а также анализировать логи и события.
• Splunk: Платформа для анализа данных и мониторинга безопасности, которая может обрабатывать огромные объемы логов в реальном времени.
• Prometheus + Grafana: Используются для мониторинга состояния приложений и инфраструктуры, включая выявление аномалий.
• ELK Stack (Elasticsearch, Logstash, Kibana): Система для сбора, хранения, анализа и визуализации логов, что помогает выявлять проблемы с безопасностью.
• Datadog: Обеспечивает мониторинг приложений и инфраструктуры, включая управление безопасностью и анализ логов.
Инструменты для сканирования уязвимостей контейнеров и образов
В DevSecOps важен контроль за безопасностью контейнеров и образов, так как они широко используются в процессе CI/CD.
• Aqua Security: Платформа для безопасности контейнеров, Kubernetes и облачной инфраструктуры.
• Anchore: Инструмент для анализа и проверки Docker-образов на наличие уязвимостей.
• Trivy: Инструмент для сканирования контейнеров и облачных сервисов на наличие уязвимостей.
• Clair: Проект с открытым исходным кодом для анализа безопасности Docker-образов.
В DevSecOps важен контроль за безопасностью контейнеров и образов, так как они широко используются в процессе CI/CD.
• Aqua Security: Платформа для безопасности контейнеров, Kubernetes и облачной инфраструктуры.
• Anchore: Инструмент для анализа и проверки Docker-образов на наличие уязвимостей.
• Trivy: Инструмент для сканирования контейнеров и облачных сервисов на наличие уязвимостей.
• Clair: Проект с открытым исходным кодом для анализа безопасности Docker-образов.
Инструменты для автоматизации CI/CD с учетом безопасности
Эти инструменты интегрируют безопасность в процесс CI/CD, автоматически выявляя и устраняя уязвимости на всех этапах разработки.
• Jenkins (с плагинами безопасности): Популярный инструмент для автоматизации CI/CD, который поддерживает различные плагины для тестирования безопасности.
• GitLab CI/CD (с интеграцией безопасности): Платформа для DevOps, которая позволяет интегрировать процессы безопасности в пайплайны.
• CircleCI: Платформа для автоматизации CI/CD, которая может быть настроена для выполнения проверок безопасности.
• GitHub Actions: Инструмент для автоматизации рабочих процессов на GitHub, поддерживает интеграцию с инструментами безопасности.
Эти инструменты интегрируют безопасность в процесс CI/CD, автоматически выявляя и устраняя уязвимости на всех этапах разработки.
• Jenkins (с плагинами безопасности): Популярный инструмент для автоматизации CI/CD, который поддерживает различные плагины для тестирования безопасности.
• GitLab CI/CD (с интеграцией безопасности): Платформа для DevOps, которая позволяет интегрировать процессы безопасности в пайплайны.
• CircleCI: Платформа для автоматизации CI/CD, которая может быть настроена для выполнения проверок безопасности.
• GitHub Actions: Инструмент для автоматизации рабочих процессов на GitHub, поддерживает интеграцию с инструментами безопасности.
Инструменты для управления "секретами" и идентификацией
Эти инструменты обеспечивают безопасность хранения и обработки секретов, таких как пароли, ключи API и другие чувствительные данные.
• HashiCorp Vault: Решение для управления секретами и чувствительными данными, позволяющее безопасно хранить и контролировать доступ к ключам и конфиденциальной информации.
• CyberArk: Платформа для управления привилегированными доступами и секретами.
• AWS Secrets Manager: Сервис для управления и автоматической смены секретов, таких как API-ключи и пароли в AWS.
Эти инструменты обеспечивают безопасность хранения и обработки секретов, таких как пароли, ключи API и другие чувствительные данные.
• HashiCorp Vault: Решение для управления секретами и чувствительными данными, позволяющее безопасно хранить и контролировать доступ к ключам и конфиденциальной информации.
• CyberArk: Платформа для управления привилегированными доступами и секретами.
• AWS Secrets Manager: Сервис для управления и автоматической смены секретов, таких как API-ключи и пароли в AWS.
Инструменты для управления уязвимостями
Эти инструменты помогают отслеживать и управлять уязвимостями на всех этапах разработки и эксплуатации.
• Snyk: Платформа для мониторинга уязвимостей в зависимостях и контейнерах, а также в инфраструктуре как код.
• Dependabot: Инструмент от GitHub, который автоматически создает pull-запросы для обновления зависимостей, когда обнаруживаются уязвимости.
• WhiteSource: Платформа для управления безопасностью open-source компонентов, включая их уязвимости и лицензионные проблемы.
Эти инструменты помогают отслеживать и управлять уязвимостями на всех этапах разработки и эксплуатации.
• Snyk: Платформа для мониторинга уязвимостей в зависимостях и контейнерах, а также в инфраструктуре как код.
• Dependabot: Инструмент от GitHub, который автоматически создает pull-запросы для обновления зависимостей, когда обнаруживаются уязвимости.
• WhiteSource: Платформа для управления безопасностью open-source компонентов, включая их уязвимости и лицензионные проблемы.
Инструменты для управления политиками безопасности
Эти инструменты помогают контролировать соблюдение политик безопасности в процессе разработки и эксплуатации.
• OPA (Open Policy Agent): Открытый агент для управления политиками, который можно интегрировать в разные этапы DevOps-пайплайнов.
• Kubernetes RBAC: Управление доступом на основе ролей (Role-Based Access Control) в Kubernetes для контроля безопасности.
Эти инструменты ([1], [2], [3], [4], [5], [6], [7], [8], [9]), в сочетании с процессами DevOps и практиками безопасности, помогают создавать безопасные и надежные программные решения, снижая риски и улучшая общую безопасность на всех этапах разработки и эксплуатации.
Эти инструменты помогают контролировать соблюдение политик безопасности в процессе разработки и эксплуатации.
• OPA (Open Policy Agent): Открытый агент для управления политиками, который можно интегрировать в разные этапы DevOps-пайплайнов.
• Kubernetes RBAC: Управление доступом на основе ролей (Role-Based Access Control) в Kubernetes для контроля безопасности.
Эти инструменты ([1], [2], [3], [4], [5], [6], [7], [8], [9]), в сочетании с процессами DevOps и практиками безопасности, помогают создавать безопасные и надежные программные решения, снижая риски и улучшая общую безопасность на всех этапах разработки и эксплуатации.
Алгоритмы сортировок
Самая частая тема, которую спрашивают на собеседованиях. Рассмотрим, какие есть и их сложность по времени. Подробно как они работают, по ссылкам в соответствующих постах.
1. Сортировка пузырьком
Худшее время -
2. Сортировка выбором
Лучшее время
3. Сортировка подсчётом
Сложность оценивается как
4. Поразрядная сортировка
В лучшем случаи:
5. Bucket sort
Наименьшая и средняя сложность
6. Сортировка Шелла
В лучшем случаи:
7. Tim Sort
В лучшем случаи:
8. Блинная сортировка
Лучший случай:
9. Сортировка перемешиванием
Худшее время -
10. Gnome Sort
В лучшем:
11. Odd-Even Sort
В лучшем:
12. Сортировка расческой
Худшее время -
13. Сортировка вставками
Худшее время -
14. Голубиная сортировка
Время:
15. Циклическая сортировка
Время:
16. Нитевидная сортировка
В лучшем:
17. Битоническая сортировка
Время:
18. Stooge Sort
Время:
19. Бисерная сортировка
Время:
20. Топологическая сортировка
Время:
21. Быстрая сортировка
Худшее время -
22. Сортировка слиянием
Худшее время -
23. Пирамидальная сортировка
Худшее время -
Самая частая тема, которую спрашивают на собеседованиях. Рассмотрим, какие есть и их сложность по времени. Подробно как они работают, по ссылкам в соответствующих постах.
1. Сортировка пузырьком
Худшее время -
O(n^2)
| Лучшее время - O(n)
2. Сортировка выбором
Лучшее время
O(n^2)
| В cреднем - O(n^2)
| Худшее время - O(n^2)
3. Сортировка подсчётом
Сложность оценивается как
O(n + k)
, где n
— количество элементов, k
— диапазон значений.4. Поразрядная сортировка
В лучшем случаи:
O(n)
| В худшем: O(n*k)
5. Bucket sort
Наименьшая и средняя сложность
(O(n))
6. Сортировка Шелла
В лучшем случаи:
O(n)
| В cреднем: O(n (logn)^2)
| В худшем: O(n log^2n)
7. Tim Sort
В лучшем случаи:
O(n)
| В cреднем: O(n logn)
| В худшем: O(n logn)
8. Блинная сортировка
Лучший случай:
O(n)
| Средний случай: O(n²)
| Худший случай: O(n²)
9. Сортировка перемешиванием
Худшее время -
O(n^2)
| Лучшее время - O(n)
10. Gnome Sort
В лучшем:
O(n)
| В худшем: O(n^2)
11. Odd-Even Sort
В лучшем:
O(n)
В худшем: O(n^2)
12. Сортировка расческой
Худшее время -
O(n^2)
| Лучшее время - O(n log n)
13. Сортировка вставками
Худшее время -
O(n^2)
| Лучшее время - O(n)
или O(1)
14. Голубиная сортировка
Время:
O(n+range)
15. Циклическая сортировка
Время:
O(n^2)
16. Нитевидная сортировка
В лучшем:
O(n)
| В худшем: O(n^2)
17. Битоническая сортировка
Время:
O(log^2n)
18. Stooge Sort
Время:
O(n^(log3/log1.5))
19. Бисерная сортировка
Время:
O(n^2)
20. Топологическая сортировка
Время:
O(V + E)
21. Быстрая сортировка
Худшее время -
O(n^2)
| Лучшее время - O(n log n)
22. Сортировка слиянием
Худшее время -
O(n log n)
| Лучшее время - O(n log n)
23. Пирамидальная сортировка
Худшее время -
O(n log n)
| Лучшее время - O(n log n)
или O(n)
Аппликативный порядок вычислений
Аппликативный порядок вычислений - это порядок вычислений, при котором аргументы функции вычисляются перед самой функцией. Он также называется "строгим" порядком вычислений.
Например, если есть выражение:
f(x) + g(x)
то при аппликативном порядке вычислений сначала вычисляются значения x, а затем функции f и g, после чего производится сложение. То есть, сначала выполняется f(x), затем g(x), и только после этого выполняется сложение.
Аппликативный порядок вычислений часто используется в языках программирования, таких как С или Pascal.
Аппликативный порядок вычислений - это порядок вычислений, при котором аргументы функции вычисляются перед самой функцией. Он также называется "строгим" порядком вычислений.
Например, если есть выражение:
f(x) + g(x)
то при аппликативном порядке вычислений сначала вычисляются значения x, а затем функции f и g, после чего производится сложение. То есть, сначала выполняется f(x), затем g(x), и только после этого выполняется сложение.
Аппликативный порядок вычислений часто используется в языках программирования, таких как С или Pascal.
Библиотеки и фреймворки для ИИ в Linux
Linux предлагает широкий выбор библиотек и фреймворков для разработки ИИ:
1. TensorFlow
Один из самых популярных фреймворков для машинного обучения. Он используется для создания, тренировки и развертывания моделей ИИ, включая нейронные сети.
2. PyTorch
Используется для научных исследований и разработки ИИ-приложений. PyTorch отличается гибкостью и удобством, особенно для проектов, требующих высокой кастомизации.
3. Keras
Высокоуровневый API для нейронных сетей, работающий поверх TensorFlow, который делает разработку моделей ИИ более доступной и понятной.
4. OpenCV
Библиотека для компьютерного зрения. Используется для обработки изображений и видео в реальном времени, а также для распознавания объектов и лиц.
5. scikit-learn
Платформа для обучения алгоритмам машинного обучения, предоставляющая большое количество инструментов для анализа данных и построения моделей.
Linux предлагает широкий выбор библиотек и фреймворков для разработки ИИ:
1. TensorFlow
Один из самых популярных фреймворков для машинного обучения. Он используется для создания, тренировки и развертывания моделей ИИ, включая нейронные сети.
2. PyTorch
Используется для научных исследований и разработки ИИ-приложений. PyTorch отличается гибкостью и удобством, особенно для проектов, требующих высокой кастомизации.
3. Keras
Высокоуровневый API для нейронных сетей, работающий поверх TensorFlow, который делает разработку моделей ИИ более доступной и понятной.
4. OpenCV
Библиотека для компьютерного зрения. Используется для обработки изображений и видео в реальном времени, а также для распознавания объектов и лиц.
5. scikit-learn
Платформа для обучения алгоритмам машинного обучения, предоставляющая большое количество инструментов для анализа данных и построения моделей.
Теория информации — раздел математики и информатики, который занимается количественной оценкой информации, её передачей и кодированием. Этот раздел был основан в середине 20-го века Клодом Шенноном, чьи работы стали основой для многих современных технологий, включая телекоммуникации, сжатие данных, криптографию и многое другое.
Здесь и далее будет приведено несколько ключевых понятий и аспектов теории информации:
1. Информация и энтропия
Информация — то, что уменьшает неопределенность. В контексте теории информации информация измеряется в битах.
Энтропия (H) — мера неопределенности или неопределенности системы. В информационном контексте энтропия определяет, сколько информации нужно для того, чтобы описать выбор одного из возможных исходов. Чем больше возможных исходов, тем выше энтропия.
Энтропия для дискретного случайного события
где
Энтропия измеряется в битах, если логарифм вычисляется по основанию 2. Это связано с тем, что каждый бит представляет собой двоичный выбор между двумя возможными состояниями.
Здесь и далее будет приведено несколько ключевых понятий и аспектов теории информации:
1. Информация и энтропия
Информация — то, что уменьшает неопределенность. В контексте теории информации информация измеряется в битах.
Энтропия (H) — мера неопределенности или неопределенности системы. В информационном контексте энтропия определяет, сколько информации нужно для того, чтобы описать выбор одного из возможных исходов. Чем больше возможных исходов, тем выше энтропия.
Энтропия для дискретного случайного события
𝑋
с вероятностями 𝑝₁, 𝑝₂, ..., 𝑝𝑛
вычисляется по формуле: H(X) = −Σ
[𝑛
, ᵢ₌₁
] (pᵢ log₂(pᵢ)
)где
𝑝𝑖
— вероятность 𝑖
-го исхода, а сумма берется по всем возможным исходам.Энтропия измеряется в битах, если логарифм вычисляется по основанию 2. Это связано с тем, что каждый бит представляет собой двоичный выбор между двумя возможными состояниями.
Пример Энтропии, как меры неопределенности: Если мы подбрасываем честную монету, вероятность выпадения орел или решка равна 50%. Энтропия будет максимальной, так как оба исхода одинаково вероятны.
2. Канал передачи информации
Канал — это средство, через которое передаются данные от источника к получателю. Канал может быть как идеальным, так и шумным. В идеальном канале информация передается без потерь и искажений. Однако на практике всегда присутствует шум — случайные помехи, которые изменяют или теряют часть данных. Это может происходить в электрических сигналах, радио или даже при передаче через интернет.
Пример: при передаче текста через интернет могут быть потеряны некоторые символы из-за шума в сети, что приведет к искажению сообщения.
2. Канал передачи информации
Канал — это средство, через которое передаются данные от источника к получателю. Канал может быть как идеальным, так и шумным. В идеальном канале информация передается без потерь и искажений. Однако на практике всегда присутствует шум — случайные помехи, которые изменяют или теряют часть данных. Это может происходить в электрических сигналах, радио или даже при передаче через интернет.
Пример: при передаче текста через интернет могут быть потеряны некоторые символы из-за шума в сети, что приведет к искажению сообщения.