Реактивное программирование - это парадигма программирования, основанная на создании асинхронных и отзывчивых систем. В отличие от традиционного императивного программирования, где программа последовательно выполняет команды, в реактивном программировании программа реагирует на изменения и события в системе.
Основные принципы реактивного программирования:
• Отзывчивость (Responsiveness): Система должна реагировать на внешние и внутренние события, обеспечивая быстрый отклик на запросы пользователя.
• Реактивные потоки данных (Reactive Streams): Данные передаются через потоки, и компоненты программы реагируют на изменения в этих потоках.
• Управление ошибками (Error Handling): Реактивные системы должны быть устойчивыми к ошибкам и обеспечивать адекватное управление ошибками и восстановление после них.
• Масштабируемость (Scalability): Реактивные системы должны быть легко масштабируемыми, чтобы обрабатывать большие объемы данных и запросов.
Примеры технологий и фреймворков, поддерживающих реактивное программирование, включают в себя RxJava, React.js, Akka, и Spring Reactor.
Реактивное программирование часто используется в веб-разработке, микросервисной архитектуре и системах реального времени для создания отзывчивых и масштабируемых приложений.
В реактивном программировании основное внимание уделяется потоку данных и обработке событий. Программа состоит из компонентов, которые реагируют на изменения данных и генерируют события. Эти компоненты могут быть связаны вместе для создания сложных систем, где изменение в одном компоненте автоматически приводит к изменениям в других.
Основные принципы реактивного программирования:
• Отзывчивость (Responsiveness): Система должна реагировать на внешние и внутренние события, обеспечивая быстрый отклик на запросы пользователя.
• Реактивные потоки данных (Reactive Streams): Данные передаются через потоки, и компоненты программы реагируют на изменения в этих потоках.
• Управление ошибками (Error Handling): Реактивные системы должны быть устойчивыми к ошибкам и обеспечивать адекватное управление ошибками и восстановление после них.
• Масштабируемость (Scalability): Реактивные системы должны быть легко масштабируемыми, чтобы обрабатывать большие объемы данных и запросов.
Примеры технологий и фреймворков, поддерживающих реактивное программирование, включают в себя RxJava, React.js, Akka, и Spring Reactor.
Реактивное программирование часто используется в веб-разработке, микросервисной архитектуре и системах реального времени для создания отзывчивых и масштабируемых приложений.
Процедурное программирование - это парадигма программирования, которая фокусируется на разбиении программы на последовательность шагов или процедур. Процедуры определяют конкретные действия, которые необходимо выполнить, и могут быть вызваны из других частей программы.
Ключевые характеристики:
• Последовательность: Программа выполняется шаг за шагом, в порядке, определенном процедурами.
• Модульность: Программа разбита на отдельные, многократно используемые процедуры.
• Нисходящий подход: Программа разрабатывается сверху вниз, начиная с основных процедур и постепенно переходя к более детальным.
• Структурированный контроль потока: Поток выполнения программы явно контролируется с помощью структур управления, таких как циклы и условные операторы.
Преимущества:
• Легкость понимания: Процедурные программы обычно просты для понимания и отладки, поскольку логика программы разбита на небольшие, управляемые части.
• Модульность: Модульная структура облегчает повторное использование кода и упрощает обслуживание программы.
• Эффективность: Процедурные программы могут быть очень эффективными, поскольку они напрямую управляют потоком выполнения и распределением памяти.
Недостатки:
• Ограниченная выразительность: Процедурное программирование не так выразительно, как другие парадигмы, такие как объектно-ориентированное программирование, что может затруднить моделирование сложных систем.
• Зависимость от порядка: Процедурные программы сильно зависят от порядка выполнения процедур, что может привести к ошибкам, если порядок изменен.
Ключевые характеристики:
• Последовательность: Программа выполняется шаг за шагом, в порядке, определенном процедурами.
• Модульность: Программа разбита на отдельные, многократно используемые процедуры.
• Нисходящий подход: Программа разрабатывается сверху вниз, начиная с основных процедур и постепенно переходя к более детальным.
• Структурированный контроль потока: Поток выполнения программы явно контролируется с помощью структур управления, таких как циклы и условные операторы.
Преимущества:
• Легкость понимания: Процедурные программы обычно просты для понимания и отладки, поскольку логика программы разбита на небольшие, управляемые части.
• Модульность: Модульная структура облегчает повторное использование кода и упрощает обслуживание программы.
• Эффективность: Процедурные программы могут быть очень эффективными, поскольку они напрямую управляют потоком выполнения и распределением памяти.
Недостатки:
• Ограниченная выразительность: Процедурное программирование не так выразительно, как другие парадигмы, такие как объектно-ориентированное программирование, что может затруднить моделирование сложных систем.
• Зависимость от порядка: Процедурные программы сильно зависят от порядка выполнения процедур, что может привести к ошибкам, если порядок изменен.
Специфичные файловые системы это те, которые разработаны для конкретных целей или задач и могут иметь особенности, отличающие их от общих файловых систем, таких как NTFS или ext4. Эти ФС обычно оптимизированы под конкретные условия использования, такие как скорость, надёжность, или размер файлов.
Например, файловая система ZFS разработана с акцентом на целостность данных и возможности восстановления. Btrfs, с другой стороны, ставит упор на поддержку снимков и проверки целостности данных в реальном времени.
Для специфических задач могут использоваться файловые системы, такие как F2FS (Flash-Friendly File System), разработанная специально для флэш-памяти и SSD-накопителей, или NILFS (New Implementation of a Log-Structured File System), предназначенная для обеспечения надежности и целостности данных.
Например, файловая система ZFS разработана с акцентом на целостность данных и возможности восстановления. Btrfs, с другой стороны, ставит упор на поддержку снимков и проверки целостности данных в реальном времени.
Для специфических задач могут использоваться файловые системы, такие как F2FS (Flash-Friendly File System), разработанная специально для флэш-памяти и SSD-накопителей, или NILFS (New Implementation of a Log-Structured File System), предназначенная для обеспечения надежности и целостности данных.
Реальные примеры использования Haskell
• Финансовое моделирование: Haskell используется в финансовых учреждениях для построения сложных моделей для оценки рисков, ценообразования активов и управления портфелем.
• Разработка компиляторов: Haskell используется в разработке компиляторов для языков программирования, таких как C++, Java и Python.
• Верификация программного обеспечения: Haskell используется для формальной верификации программного обеспечения, гарантируя его правильность и надежность.
• Анализ данных: Haskell используется в анализе данных для обработки больших объемов данных, таких как журналы веб-серверов и данные датчиков.
• Искусственный интеллект: Haskell используется в области искусственного интеллекта для разработки алгоритмов машинного обучения, обработки естественного языка и компьютерного зрения.
• Веб-разработка: Haskell используется для разработки высокопроизводительных и масштабируемых веб-приложений с помощью таких фреймворков, как Yesod и Scotty.
• Разработка игр: Haskell используется в разработке игр для создания игровых движков, искусственного интеллекта и процедурной генерации.
• Аэрокосмическая промышленность: Haskell используется в аэрокосмической промышленности для разработки программного обеспечения для систем управления полетом и моделирования.
• Образование: Haskell используется в образовательных учреждениях для обучения студентов основам программирования и функционального подхода.
• Исследования: Haskell используется в академических исследованиях для изучения новых концепций в области программирования языков, теории типов и параллелизма.
• Финансовое моделирование: Haskell используется в финансовых учреждениях для построения сложных моделей для оценки рисков, ценообразования активов и управления портфелем.
• Разработка компиляторов: Haskell используется в разработке компиляторов для языков программирования, таких как C++, Java и Python.
• Верификация программного обеспечения: Haskell используется для формальной верификации программного обеспечения, гарантируя его правильность и надежность.
• Анализ данных: Haskell используется в анализе данных для обработки больших объемов данных, таких как журналы веб-серверов и данные датчиков.
• Искусственный интеллект: Haskell используется в области искусственного интеллекта для разработки алгоритмов машинного обучения, обработки естественного языка и компьютерного зрения.
• Веб-разработка: Haskell используется для разработки высокопроизводительных и масштабируемых веб-приложений с помощью таких фреймворков, как Yesod и Scotty.
• Разработка игр: Haskell используется в разработке игр для создания игровых движков, искусственного интеллекта и процедурной генерации.
• Аэрокосмическая промышленность: Haskell используется в аэрокосмической промышленности для разработки программного обеспечения для систем управления полетом и моделирования.
• Образование: Haskell используется в образовательных учреждениях для обучения студентов основам программирования и функционального подхода.
• Исследования: Haskell используется в академических исследованиях для изучения новых концепций в области программирования языков, теории типов и параллелизма.
BIOS
BIOS компьютера – это первое, что загружается во время запуска компьютера. Он инициализирует аппаратное обеспечение перед загрузкой операционной системы из жесткого диска или другого устройства.
Сразу после включения питания компьютера процессор читает код BIOS из EEPROM, записывает код BIOS в память и передаёт ему управление. Первым делом код BIOS начинает проверку аппаратного обеспечения компьютера — POST. В ходе POST код BIOS проверяет работоспособность контроллеров, расположенных на материнской плате, задаёт низкоуровневые параметры их работы.
Если во время POST случится сбой, код BIOS может выдать информацию, позволяющую выявить причину сбоя. Кроме вывода сообщения на монитор, используется звуковой сигнал, воспроизводимый при помощи встроенного динамика. Звуковые сигналы по высоте тона, продолжительности и комбинациям могут различаться в зависимости от производителя и версии BIOS.
BIOS компьютера – это первое, что загружается во время запуска компьютера. Он инициализирует аппаратное обеспечение перед загрузкой операционной системы из жесткого диска или другого устройства.
Сразу после включения питания компьютера процессор читает код BIOS из EEPROM, записывает код BIOS в память и передаёт ему управление. Первым делом код BIOS начинает проверку аппаратного обеспечения компьютера — POST. В ходе POST код BIOS проверяет работоспособность контроллеров, расположенных на материнской плате, задаёт низкоуровневые параметры их работы.
Если во время POST случится сбой, код BIOS может выдать информацию, позволяющую выявить причину сбоя. Кроме вывода сообщения на монитор, используется звуковой сигнал, воспроизводимый при помощи встроенного динамика. Звуковые сигналы по высоте тона, продолжительности и комбинациям могут различаться в зависимости от производителя и версии BIOS.
Что такое указатели в программировании?
Кратко говоря — это ссылка на ячейку в оперативной памяти. Указатели считаются сложной темой, но на самом деле в указателях нет ничего сложного.
Когда мы заводим новую переменную, компьютер выделяет для неё место в оперативной памяти.
Количество этих ячеек зависит от типа данных, который хранится в этой переменной: обычно для int - 2 байта, float — 4, double— 8, для строки — столько же, сколько и символов и ещё 1 служебный байт.
Но сколько бы байтов ни выделил компьютер для хранения, он выделяет эти байты подряд, друг за другом, и запоминает два момента:
1. Сколько байтов занимает переменная.
2. По какому адресу в памяти находится первый байт этой переменной.
Если совсем упростить, то адрес в памяти — это порядковый номер ячейки, где хранится байт. Так вот, в указателях как раз хранятся адреса памяти, где начинаются разные переменные.
Кратко говоря — это ссылка на ячейку в оперативной памяти. Указатели считаются сложной темой, но на самом деле в указателях нет ничего сложного.
Когда мы заводим новую переменную, компьютер выделяет для неё место в оперативной памяти.
Количество этих ячеек зависит от типа данных, который хранится в этой переменной: обычно для int - 2 байта, float — 4, double— 8, для строки — столько же, сколько и символов и ещё 1 служебный байт.
Но сколько бы байтов ни выделил компьютер для хранения, он выделяет эти байты подряд, друг за другом, и запоминает два момента:
1. Сколько байтов занимает переменная.
2. По какому адресу в памяти находится первый байт этой переменной.
Если совсем упростить, то адрес в памяти — это порядковый номер ячейки, где хранится байт. Так вот, в указателях как раз хранятся адреса памяти, где начинаются разные переменные.
Что такое сектор и кластер?
Для хранения данных все носители информации имеют специальную разметку.
Жесткий диск имеет несколько дисков, на магнитную поверхность которых и записываются данные. Каждый диск разбит на треки (дорожки), а каждая дорожка поделена на сектора. Это конечно, очень упрощенная схема, но она дает представление о том, что такое сектор. Сектор – это минимальная пронумерованная область диска.
Для нормальной работы операционной системы на жестком диске создается файловая система. Файловая система использует сектора для хранения файлов, но из-за некоторых ограничений и особенностей различных файловых систем, сектора носителя информации обычно объединяются файловой системой в кластеры. Это означает, что кластер является минимальной областью файловой системы, предназначенной для хранения информации и он может состоять как из одного, так и из нескольких секторов.
Для хранения данных все носители информации имеют специальную разметку.
Жесткий диск имеет несколько дисков, на магнитную поверхность которых и записываются данные. Каждый диск разбит на треки (дорожки), а каждая дорожка поделена на сектора. Это конечно, очень упрощенная схема, но она дает представление о том, что такое сектор. Сектор – это минимальная пронумерованная область диска.
Для нормальной работы операционной системы на жестком диске создается файловая система. Файловая система использует сектора для хранения файлов, но из-за некоторых ограничений и особенностей различных файловых систем, сектора носителя информации обычно объединяются файловой системой в кластеры. Это означает, что кластер является минимальной областью файловой системы, предназначенной для хранения информации и он может состоять как из одного, так и из нескольких секторов.
Что такое АЛУ?
Арифметико-логическое устройство (АЛУ) – это один из компонентов процессора, который необходим для осуществления преобразований логического и арифметического типа, начиная элементарными и заканчивая сложными выражениями.
Главная задача АЛУ заключается в переработке данных, хранящихся в оперативной памяти компьютера.
В зависимости от сигналов, которые поступают на вход, АЛУ выполняют разные типы операций с двумя числами. Любое арифметико-логическое устройство компьютера предусматривает реализацию четырех базовых действий, сдвигов, а также логических преобразований.
Арифметико-логическое устройство (АЛУ) – это один из компонентов процессора, который необходим для осуществления преобразований логического и арифметического типа, начиная элементарными и заканчивая сложными выражениями.
Главная задача АЛУ заключается в переработке данных, хранящихся в оперативной памяти компьютера.
В зависимости от сигналов, которые поступают на вход, АЛУ выполняют разные типы операций с двумя числами. Любое арифметико-логическое устройство компьютера предусматривает реализацию четырех базовых действий, сдвигов, а также логических преобразований.
Набор операций арифметико-логического устройства
Структура АЛУ предполагает выполнение действий через логические функции, которые делятся на такие группы:
⁃ десятичная арифметика;
⁃ двоичная арифметика для цифр с четко обозначенной точкой;
⁃ шестнадцатеричная арифметика для выражений с плавающим разделителем;
⁃ модификация адресов команд;
⁃ операции логического типа;
⁃ преобразование алфавитно-цифровых полей;
⁃ специальная арифметика.
Современные электронно-вычислительные машины способны реализовать все вышеупомянутые типы активности, а микроЭВМ не имеют такого базового функционала, поэтому наиболее сложные процедуры выполняют через подключение небольших подпрограмм.
Структура АЛУ предполагает выполнение действий через логические функции, которые делятся на такие группы:
⁃ десятичная арифметика;
⁃ двоичная арифметика для цифр с четко обозначенной точкой;
⁃ шестнадцатеричная арифметика для выражений с плавающим разделителем;
⁃ модификация адресов команд;
⁃ операции логического типа;
⁃ преобразование алфавитно-цифровых полей;
⁃ специальная арифметика.
Современные электронно-вычислительные машины способны реализовать все вышеупомянутые типы активности, а микроЭВМ не имеют такого базового функционала, поэтому наиболее сложные процедуры выполняют через подключение небольших подпрограмм.
SSL-сертификат
SSL-сертификат (Secure Sockets Layer) – это цифровой сертификат, удостоверяющий подлинность веб-сайта и позволяющий использовать зашифрованное соединение.
Компаниям и организациям необходимо добавлять SSL-сертификаты на веб-сайты для защиты онлайн-транзакций и обеспечения конфиденциальности и безопасности клиентских данных.
SSL обеспечивает безопасность интернет-соединений и не позволяет злоумышленникам считывать или изменять информацию, передаваемую между двумя системами.
Если в адресной строке рядом с веб-адресом отображается значок замка, значит этот веб-сайт защищен с помощью SSL.
SSL-сертификат (Secure Sockets Layer) – это цифровой сертификат, удостоверяющий подлинность веб-сайта и позволяющий использовать зашифрованное соединение.
Компаниям и организациям необходимо добавлять SSL-сертификаты на веб-сайты для защиты онлайн-транзакций и обеспечения конфиденциальности и безопасности клиентских данных.
SSL обеспечивает безопасность интернет-соединений и не позволяет злоумышленникам считывать или изменять информацию, передаваемую между двумя системами.
Если в адресной строке рядом с веб-адресом отображается значок замка, значит этот веб-сайт защищен с помощью SSL.
Сетевой концентратор или хаб
Класс устройств для объединения компьютеров в сетях Ethernet с применением кабельной инфраструктуры типа витая пара. В настоящее время вытеснены сетевыми коммутаторами.
Сетевые концентраторы также могли иметь разъёмы для подключения к существующим сегментам сети на базе толстого или тонкого коаксиального кабеля.
Концентратор работает на физическом уровне сетевой модели OSI, ретранслируя входящий сигнал с одного из портов в сигнал на все остальные порты. Таким образом, несмотря на возможность реализации на многопортовых хабах физической топологии "звезда", логически сеть продолжает работать в режиме с общей средой, свойственном Ethernet: пропускная способность сети разделена между всеми устройствами, а передача ведется в режиме полудуплекса.
Коллизии обрабатываются аналогично сети Ethernet на других носителях — устройства самостоятельно прекращают передачу и возобновляют попытку через случайный промежуток времени, говоря современным языком, концентратор объединяет устройства в одном домене коллизий.
Класс устройств для объединения компьютеров в сетях Ethernet с применением кабельной инфраструктуры типа витая пара. В настоящее время вытеснены сетевыми коммутаторами.
Сетевые концентраторы также могли иметь разъёмы для подключения к существующим сегментам сети на базе толстого или тонкого коаксиального кабеля.
Концентратор работает на физическом уровне сетевой модели OSI, ретранслируя входящий сигнал с одного из портов в сигнал на все остальные порты. Таким образом, несмотря на возможность реализации на многопортовых хабах физической топологии "звезда", логически сеть продолжает работать в режиме с общей средой, свойственном Ethernet: пропускная способность сети разделена между всеми устройствами, а передача ведется в режиме полудуплекса.
Коллизии обрабатываются аналогично сети Ethernet на других носителях — устройства самостоятельно прекращают передачу и возобновляют попытку через случайный промежуток времени, говоря современным языком, концентратор объединяет устройства в одном домене коллизий.
Зеро-код
В мире разработки есть концепция Zero Code — это когда программы, сервисы и всякая автоматизация делается не с помощью кода, а с помощью более наглядных и визуальных инструментов.
Самое популярное — конструкторы сайтов. Мы уже привыкли, что половина сайтов в интернете сделана на «Тильде». Не нужно знать HTML, CSS и JavaScript, достаточно собирать сайты из готовых блоков.
Главный плюс: сайты можно делать за минуты и часы, а не за дни и недели.
Главный минус: ограничения по внешнему виду и структуре. Конструкторы имеют какие-то заданные шаблоны, в которых ты набираешь текст и вставляешь картинки. Чтобы вылезти из шаблона, нужно писать код. А мы хотели без кода.
В мире разработки есть концепция Zero Code — это когда программы, сервисы и всякая автоматизация делается не с помощью кода, а с помощью более наглядных и визуальных инструментов.
Самое популярное — конструкторы сайтов. Мы уже привыкли, что половина сайтов в интернете сделана на «Тильде». Не нужно знать HTML, CSS и JavaScript, достаточно собирать сайты из готовых блоков.
Главный плюс: сайты можно делать за минуты и часы, а не за дни и недели.
Главный минус: ограничения по внешнему виду и структуре. Конструкторы имеют какие-то заданные шаблоны, в которых ты набираешь текст и вставляешь картинки. Чтобы вылезти из шаблона, нужно писать код. А мы хотели без кода.
Таблица разделов
Таблица разделов — часть главной загрузочной записи (MBR), состоящая из четырёх записей по 16 байт. Каждая запись описывает один из разделов жёсткого диска. Первая запись находится по смещению 1BEh от начала сектора, содержащего MBR, каждая последующая запись вплотную примыкает к предыдущей.
Для создания на диске более 4 разделов используются расширеные разделы, позволяющие создать неограниченое количество логических дисков внутри себя.
Адреса начала и конца раздела задаются в формате CHS, используемом традиционными функциями дискового сервиса BIOS, из-за чего номер цилиндра разорван на две части: старшие два бита хранятся в двух старших битах слова, отведённого под номера цилиндра и сектора; за ними следуют шесть бит номера сектора, а младшие восемь бит номера цилиндра занимают весь младший байт слова. Если задать корректный адрес с помощью формата CHS невозможно, все три байта полей начала и конца раздела должны содержать FFh.
Таблица разделов — часть главной загрузочной записи (MBR), состоящая из четырёх записей по 16 байт. Каждая запись описывает один из разделов жёсткого диска. Первая запись находится по смещению 1BEh от начала сектора, содержащего MBR, каждая последующая запись вплотную примыкает к предыдущей.
Для создания на диске более 4 разделов используются расширеные разделы, позволяющие создать неограниченое количество логических дисков внутри себя.
Адреса начала и конца раздела задаются в формате CHS, используемом традиционными функциями дискового сервиса BIOS, из-за чего номер цилиндра разорван на две части: старшие два бита хранятся в двух старших битах слова, отведённого под номера цилиндра и сектора; за ними следуют шесть бит номера сектора, а младшие восемь бит номера цилиндра занимают весь младший байт слова. Если задать корректный адрес с помощью формата CHS невозможно, все три байта полей начала и конца раздела должны содержать FFh.
Что такое кроссплатформенность?
Кроссплатформенность — это способность программного обеспечения полноценно работать на любом устройстве вне зависимости от типа операционной системы.
Сделать это можно с помощью современных кроссплатформенных языков программирования (например, C, С++). При надлежащем качестве кода достаточно будет переписать только некоторые фрагменты, не трогая при этом основной движок программы.
При работе с устройствами на разных платформах стандартные элементы интерфейса могут искажаться, поэтому в таких случаях нужно позаботиться об адаптивности. Например, способности сайта автоматически «подстраиваться» под размеры экрана пользовательского устройства.
Кроссплатформенность — это способность программного обеспечения полноценно работать на любом устройстве вне зависимости от типа операционной системы.
Сделать это можно с помощью современных кроссплатформенных языков программирования (например, C, С++). При надлежащем качестве кода достаточно будет переписать только некоторые фрагменты, не трогая при этом основной движок программы.
При работе с устройствами на разных платформах стандартные элементы интерфейса могут искажаться, поэтому в таких случаях нужно позаботиться об адаптивности. Например, способности сайта автоматически «подстраиваться» под размеры экрана пользовательского устройства.
Дефрагментация дисков
Процесс поиска и сбора всех разделенных частей файлов в одно место — называется дефрагментацией. Таким образом все записанные данные оказываются целостными и располагаются в начале дорожки, что ускоряет обработку таких данных. Свободные же ячейки помещаются в конец дорожки для будущей записи.
Именно благодаря дефрагментации происходят следующие изменения в работе ПК:
⁃ Увеличивается скорость чтения/записи на диск.
⁃ Быстрее открываются приложения.
⁃ Повышается срок службы накопителя.
Процесс поиска и сбора всех разделенных частей файлов в одно место — называется дефрагментацией. Таким образом все записанные данные оказываются целостными и располагаются в начале дорожки, что ускоряет обработку таких данных. Свободные же ячейки помещаются в конец дорожки для будущей записи.
Именно благодаря дефрагментации происходят следующие изменения в работе ПК:
⁃ Увеличивается скорость чтения/записи на диск.
⁃ Быстрее открываются приложения.
⁃ Повышается срок службы накопителя.
Разработка через тестирование (TDD) - это методология разработки ПО, которая предполагает написание автоматических тестов до написания самого кода. Этот подход направлен на создание более стабильного и гибкого кода, а также на снижение количества ошибок и ускорение процесса разработки.
В TDD процесс разработки происходит следующим образом:
1. Пишем тест, который описывает ожидаемое поведение кода.
2. Запускаем тест, который должен провалиться, так как кода, который описывает данное поведение, еще не существует.
3. Пишем минимальное количество кода, которое позволяет пройти тест.
4. Запускаем тест снова, теперь он должен пройти.
5. Проводим рефакторинг кода, улучшая его структуру и читаемость.
6. Запускаем тесты для проверки, что рефакторинг не повлиял на работоспособность кода.
7. Переходим к следующему тесту и повторяем процесс.
В TDD процесс разработки происходит следующим образом:
1. Пишем тест, который описывает ожидаемое поведение кода.
2. Запускаем тест, который должен провалиться, так как кода, который описывает данное поведение, еще не существует.
3. Пишем минимальное количество кода, которое позволяет пройти тест.
4. Запускаем тест снова, теперь он должен пройти.
5. Проводим рефакторинг кода, улучшая его структуру и читаемость.
6. Запускаем тесты для проверки, что рефакторинг не повлиял на работоспособность кода.
7. Переходим к следующему тесту и повторяем процесс.
Постоянное запоминающее устройство – элемент электронной вычислительной техники, обеспечивающий эффективное хранение массива неизменяемых данных пользователя. ПЗУ – энергонезависимая память. Такое устройство менее быстродействующее, чем ОЗУ, но способное хранить большой объем информации.
ПЗУ можно только считывать. Как правило, ПЗУ применяют для начальной загрузки компьютера. В ПЗУ хранятся специальные инструкции, которые управляют в момент включения питания работой компьютера и посылают сигналы (инструкции) для его дальнейшей работы.
В современных ПК в качестве ПЗУ используется HDD/SSD емкостью около сотни миллиардов машинных слов. ОЗУ и ПЗУ имеют адресную организацию. Доступ к их ячейкам памяти для записи и чтения информации осуществляется с помощью многоразрядного адреса, воздействующего на групповое управление.
ПЗУ можно только считывать. Как правило, ПЗУ применяют для начальной загрузки компьютера. В ПЗУ хранятся специальные инструкции, которые управляют в момент включения питания работой компьютера и посылают сигналы (инструкции) для его дальнейшей работы.
В современных ПК в качестве ПЗУ используется HDD/SSD емкостью около сотни миллиардов машинных слов. ОЗУ и ПЗУ имеют адресную организацию. Доступ к их ячейкам памяти для записи и чтения информации осуществляется с помощью многоразрядного адреса, воздействующего на групповое управление.
Power-on self-test
POST («самотестирование при включении») — проверка аппаратного обеспечения компьютера, выполняемая при его включении. Выполняется программами, входящими в BIOS материнской платы.
Полный регламент работы POST:
1. Проверка всех регистров процессора;
2. Проверка контрольной суммы ПЗУ;
3. Проверка системного таймера и порта звуковой сигнализации (для IBM PC — ИМС i8253 или аналог);
4. Тест контроллера прямого доступа к памяти;
5. Тест регенератора оперативной памяти;
6. Тест нижней области ОЗУ для проецирования резидентных программ в BIOS;
7. Загрузка резидентных программ;
8. Тест стандартного графического адаптера (VGA или PCI-E);
9. Тест оперативной памяти;
10. Тест основных устройств ввода (НЕ манипуляторов);
11. Тест CMOS
12. Тест основных портов LPT/COM;
13. Тест накопителей на гибких магнитных дисках;
14. Тест накопителей на жёстких магнитных дисках;
15. Самодиагностика функциональных подсистем BIOS;
16. Передача управления загрузчику.
POST («самотестирование при включении») — проверка аппаратного обеспечения компьютера, выполняемая при его включении. Выполняется программами, входящими в BIOS материнской платы.
Полный регламент работы POST:
1. Проверка всех регистров процессора;
2. Проверка контрольной суммы ПЗУ;
3. Проверка системного таймера и порта звуковой сигнализации (для IBM PC — ИМС i8253 или аналог);
4. Тест контроллера прямого доступа к памяти;
5. Тест регенератора оперативной памяти;
6. Тест нижней области ОЗУ для проецирования резидентных программ в BIOS;
7. Загрузка резидентных программ;
8. Тест стандартного графического адаптера (VGA или PCI-E);
9. Тест оперативной памяти;
10. Тест основных устройств ввода (НЕ манипуляторов);
11. Тест CMOS
12. Тест основных портов LPT/COM;
13. Тест накопителей на гибких магнитных дисках;
14. Тест накопителей на жёстких магнитных дисках;
15. Самодиагностика функциональных подсистем BIOS;
16. Передача управления загрузчику.
Асимметричные алгоритмы
• RSA
— алгоритм, в основе которого лежит вычислительная сложность факторизации (разложения на множители) больших чисел. Применяется в защищенных протоколах SSL и TLS, стандартах шифрования, например в PGP и S/MIME, и так далее. Используется и для шифрования данных, и для создания цифровых подписей. • DSA
— алгоритм, основанный на сложности вычисления дискретных логарифмов. Используется для генерации цифровых подписей. Является частью стандарта DSS. • Схема Эль-Гамаля
— алгоритм, основанный на сложности вычисления дискретных логарифмов. Лежит в основе DSA и устаревшего российского стандарта ГОСТ 34.10–94. Применяется как для шифрования, так и для создания цифровых подписей.• ECDSA
— алгоритм, основанный на сложности вычисления дискретного логарифма в группе точек эллиптической кривой. Применяется для генерации цифровых подписей, в частности для подтверждения транзакций в криптовалюте Ripple.Симметричное шифрование
Способ шифрования данных, при котором один и тот же ключ используется и для кодирования, и для восстановления информации.
Например, если алгоритм предполагает замену букв числами, то и у отправителя сообщения, и у его получателя должна быть одна и та же таблица соответствия букв и чисел: первый с ее помощью шифрует сообщения, а второй — расшифровывает.
Однако такие простейшие шифры легко взломать и их использование не имеет никакого смысла.
Поэтому современные симметричные алгоритмы считаются надежными, если отвечают следующим требованиям:
⁃ Выходные данные не должны содержать статистических паттернов исходных данных.
⁃ Шифр должен быть нелинейным (не должно быть закономерностей, которые можно отследить, имея на руках несколько открытых текстов и шифров к ним).
Способ шифрования данных, при котором один и тот же ключ используется и для кодирования, и для восстановления информации.
Например, если алгоритм предполагает замену букв числами, то и у отправителя сообщения, и у его получателя должна быть одна и та же таблица соответствия букв и чисел: первый с ее помощью шифрует сообщения, а второй — расшифровывает.
Однако такие простейшие шифры легко взломать и их использование не имеет никакого смысла.
Поэтому современные симметричные алгоритмы считаются надежными, если отвечают следующим требованиям:
⁃ Выходные данные не должны содержать статистических паттернов исходных данных.
⁃ Шифр должен быть нелинейным (не должно быть закономерностей, которые можно отследить, имея на руках несколько открытых текстов и шифров к ним).
Серверы имен
Записи DNS связывают данные с доменами, все такие записи должны храниться на серверах имен.
Это специальные хосты, которые призваны делиться своими записями с кем угодно в интернете в любое время. Владелец домена должен предоставить как минимум двум серверам имен право хранить свои записи DNS. Владельцы доменов могут предоставить эти серверы сами или нанять для этого третьих лиц.
Существуют также корневые серверы — специальные серверы имен, которым ICANN дает право хранить записи DNS касательно TLD. Новые TLD создаются‚ когда ICANN запрашивает‚ чтобы на этих серверах была добавлена запись NS (запись, указывающая на каких NS-серверах находится домен). Существует 13 корневых серверов — ICANN следит‚ чтобы их IP-адреса были хорошо известны.
Записи DNS связывают данные с доменами, все такие записи должны храниться на серверах имен.
Это специальные хосты, которые призваны делиться своими записями с кем угодно в интернете в любое время. Владелец домена должен предоставить как минимум двум серверам имен право хранить свои записи DNS. Владельцы доменов могут предоставить эти серверы сами или нанять для этого третьих лиц.
Существуют также корневые серверы — специальные серверы имен, которым ICANN дает право хранить записи DNS касательно TLD. Новые TLD создаются‚ когда ICANN запрашивает‚ чтобы на этих серверах была добавлена запись NS (запись, указывающая на каких NS-серверах находится домен). Существует 13 корневых серверов — ICANN следит‚ чтобы их IP-адреса были хорошо известны.