ar
Feedback
METANIT.COM

METANIT.COM

الذهاب إلى القناة على Telegram

Канал о программировании и разработке сайта metanit.com

إظهار المزيد
6 083
المشتركون
لا توجد بيانات24 ساعات
-77 أيام
-5530 أيام
أرشيف المشاركات
Выполнение программы (продолжение предыдущего поста) Программа проходит путь от исходного кода до исполняемого файла, загружается в память, взаимодействует с ОС через системные вызовы, использует ресурсы компьютера (CPU, память, устройства) и завершается с очисткой всех задействованных ресурсов. Рассмотрим пошагово. 1. Компиляция и загрузка программы (Program Compilation and Loading) - Исходный код (например, Enter.c) передаётся компилятору. - Компилятор преобразует исходный код в объектный файл (Enter.obj), проверяя синтаксис и семантику. - Используются библиотеки (например, cw32.lib), из которых извлекаются необходимые функции (например, sprintf()). - Происходит статическая компоновка — связывание объектного файла с библиотеками для создания промежуточного кода. - Далее подключается динамическая компоновка — связывание с динамическими библиотеками (user32.dll и др.), используемыми для функций вроде MessageBox(). - В итоге формируется исполняемый файл (Enter.exe), готовый к запуску. 2. Взаимодействие пользователя и распределение памяти (User Interaction and Memory Allocation) - Пользователь запускает программу через графический интерфейс (например, клик по иконке). - Операционная система (ОС) получает запрос и инициирует загрузку исполняемого файла. - ОС выделяет память для программы, используя структуру памяти: - Memory pool (пул памяти) — общее пространство для распределения. - Stack (стек) — для хранения локальных переменных и вызовов функций. - Heap (куча) — для динамического выделения памяти (malloc, free). - Сегменты: BSS (неинициализированные данные), Data (инициализированные данные), Code (исполняемый код). - Программа загружается в выделенную область памяти. 3. Системные вызовы (System Calls) - Программа взаимодействует с ОС через системные вызовы (system call), которые обеспечивают доступ к ресурсам (файлам, сети, устройствам). - Процесс вызова: 1. Программа делает системный вызов (например, открытие файла). 2. Управление передаётся ядру ОС (kernel model), которое проверяет права доступа и параметры вызова. 3. Ядро выполняет операцию через сервисные программы (например, чтение данных с диска). 4. Результат возвращается программе, которая продолжает выполнение. - Таблица системных вызовов (Sys_call_table) хранит адреса функций ядра. 4. Состояние ЦП и структура памяти (CPU Status and Memory Structure) - Программа выполняется на центральном процессоре (CPU), который работает в двух режимах: - Пользовательский режим (user model) — выполнение прикладного кода. - Режим ядра (kernel model) — выполнение системных вызовов и привилегированных операций. - Кэширование: CPU использует кэши (L1, L2, L3) для ускорения доступа к данным. - RAM хранит исполняемый код и данные программы во время работы. - Регистры программ (Program register) сохраняют состояние выполнения (адрес следующей инструкции). 5. Архитектура фон Неймана (Von Neumann Architecture) - Программа и данные хранятся в единой памяти (принцип фон Неймана). - Центральный процессор (CPU) состоит из: - Control Unit (CU) — управляет выполнением инструкций. - Arithmetic/Logic Unit (ALU) — выполняет арифметические и логические операции. - Данные поступают с устройств ввода (Input Device), обрабатываются процессором и выводятся на устройства вывода (Output Device). - Memory Unit хранит промежуточные результаты и инструкции. 6. Завершение программы и освобождение ресурсов (Program Termination and Resource Recovery) - Программа завершается по команде exit() или по инициативе пользователя. - ОС выполняет очистку ресурсов: - Освобождение файловых ресурсов (закрытие дескрипторов файлов). - Освобождение сетевых ресурсов (разрыв соединений). - Возврат памяти (освобождение стека, кучи, сегментов). - Все ресурсы возвращаются в пул ОС, программа завершается, и её состояние удаляется из памяти.

Выполнение программы (продолжение в следующем посте)
Выполнение программы (продолжение в следующем посте)

Бесплатный курс по тестированию мобильных приложений! Станьте экспертом в Mobile QA. Научитесь проверять мобильные приложения
Бесплатный курс по тестированию мобильных приложений! Станьте экспертом в Mobile QA. Научитесь проверять мобильные приложения с учетом специфики разных платформ. - 11 модулей обучения. - Онлайн-формат. - Сертификат после завершения обучения. Регистрация уже открыта! Зарегистрироваться #реклама 16+ study.selectel.ru О рекламодателе

Наглядно, что такое интеграл

8. RAD (Rapid Application Development — быстрая разработка приложений): * Основа: итеративный и инкрементальный подход с акцентом на быстрое создание прототипов. * Этапы: анализ и быстрый дизайн → разработка прототипа → демонстрация → доработка → тестирование → развёртывание. * Применение: проекты с быстро меняющимися требованиями, необходимость быстрого выхода на рынок. * Итог: ускоренная разработка за счёт активного вовлечения заказчика и использования прототипов.

Жизненный цикл разработки программного обеспечения (продолжение предыдущего поста) Жизненный цикл разработки ПО включает несколько моделей, каждая из которых предлагает свой подход к этапам создания продукта. Каждая модель жизненного цикла разработки ПО имеет свои преимущества и недостатки, выбор зависит от: * сложности и масштаба проекта; * гибкости требований; * сроков разработки; * вовлечённости заказчика; * доступных ресурсов. Рассмотрим основные модели: 1. Waterfall (Каскадная модель): * Последовательность этапов: анализ → проектирование (design) → разработка (build) → тестирование (test) → развёртывание (deploy). * Особенности: строгая последовательность, переход к следующему этапу только после завершения предыдущего. Подходит для проектов с чётко определёнными требованиями (например, электронная коммерция). * Итог: структурированный и предсказуемый процесс, но менее гибкий к изменениям. 2. Spiral (Спиральная модель): * Структура: комбинация каскадного и итеративного подходов. Этапы повторяются в виде спирали: оценка → планирование → разработка → тестирование. * Ключевые элементы: оценка рисков, поэтапная разработка, тестирование на каждом витке спирали. * Применение: проекты с высоким уровнем неопределённости и риска, длительные циклы разработки. * Итог: баланс между гибкостью и контролем рисков. 3. Agile (Гибкая модель): * Основа: итеративные циклы (спринты), быстрая адаптация к изменениям. * Этапы: серия спринтов, в каждом из которых разрабатывается часть функционала. * Фокус: сотрудничество с клиентом, быстрая обратная связь, поэтапная поставка рабочих версий ПО. * Применение: динамичные рынки, стартапы, проекты с неясными требованиями. * Итог: высокая адаптивность, но требует активного участия заказчика. 4. Iterative (Итеративная модель): * Принцип: разработка через последовательные итерации (циклы), каждая из которых улучшает предыдущий прототип. * Этапы: требования → анализ → проектирование → тестирование → реализация → обзор → повтор. * Применение: сложные проекты, где конечная цель не определена чётко. * Итог: постепенное приближение к финальному продукту с учётом обратной связи. 5. V-Model (V-образная модель): * Структура: усовершенствованная каскадная модель с акцентом на тестирование. Этапы разработки «зеркальны» этапам тестирования. * Этапы разработки: бизнес-требования → системные требования → высокоуровневый дизайн → низкоуровневый дизайн → кодирование. * Этапы тестирования: приёмочное тестирование → системная интеграция → компонентное тестирование → модульное тестирование. * Применение: проекты с жёсткими требованиями к качеству (аэрокосмическая отрасль, здравоохранение). * Итог: тщательная проверка на каждом этапе, минимизация ошибок. 6. Incremental (Инкрементальная модель): * Принцип: разработка ПО частями (инкрементами), каждый из которых добавляет новый функционал. * Этапы: анализ → проектирование → кодирование → тестирование → развёртывание (повторяется для каждого инкремента). * Применение: проекты с ограниченными ресурсами, когда нужно быстро предоставить рабочую версию ПО. * Итог: поэтапная поставка функционала, гибкость в управлении требованиями. 7. Big Bang (Модель «Большого взрыва»): * Суть: отсутствие чёткого планирования, разработка начинается с накопления ресурсов и идей, затем происходит «взрыв» активности. * Этапы: накопление ресурсов → разработка → тестирование → продукт. * Применение: небольшие проекты с креативным подходом, когда требования не определены заранее. * Риски: высокий риск срыва сроков и бюджета из-за отсутствия структуры.

Жизненный цикл разработки программного обеспечения (продолжение в следующем посте)
Жизненный цикл разработки программного обеспечения (продолжение в следующем посте)

Удобные банковские операции с навыком "помощник ВТБ" Сделайте повседневные дела приятнее: забудьте про рутину оплаты мобильно
Удобные банковские операции с навыком "помощник ВТБ" Сделайте повседневные дела приятнее: забудьте про рутину оплаты мобильной связи, штрафов ГАИ и ЖКУ по Москве. Голосовой навык "Помощник ВТБ" на устройствах с Алисой подскажет по банковским вопросам, даст консультации по продуктам банка, а после авторизации поможет с платежами в ВТБ и выбором категорий кешбэка. Как запустить? - Скажите: "Алиса, чат с ВТБ". Потом просто скажите: "Оплати мой мобильный". И задача будет выполнена. Навык работает без биометрии — спокойно и удобно. Перейти на сайт #реклама 16+ alice.yandex.ru О рекламодателе

Масштабирование чтения и записи в веб-приложении (продолжение предыдущего поста) Масштабирование операций чтения и записи являются частыми задачами в веб-приложении по мере увеличения нагрузки. Рассмотрим распространенные стратегии масштабирования операций чтения и записи. 1) Стратегии масштабирования чтений (проще) Цель: Эффективно обрабатывать большой объём запросов на чтение. Внутренний кэш (уровень приложения) * кэш в оперативной памяти (например, локальный словарь, кэш LRU внутри экземпляра приложения); * предотвращает повторные вычисления, но не распределяется между экземплярами. Кэш в оперативной памяти (Redis, Memcached) * хранит часто запрашиваемые данные в ОЗУ для сверхбыстрого доступа; * сокращает количество запросов к базе данных, улучшая время отклика; * оптимален для нагрузок с большим объёмом чтений (например, пользовательские сессии, предварительно вычисленные данные). Копии для чтения (Read Replicas) * множественные копии основной базы данных обрабатывают запросы на чтение; * распределяет нагрузку от чтения по нескольким узлам; * подходит для аналитических панелей и приложений с большим объёмом контента. Сеть доставки контента (CDN — Content Delivery Network) * кэширует статические ресурсы (изображения, видео, HTML) на периферийных узлах; * сокращает задержки за счёт предоставления данных с ближайшего узла. 2) Стратегии масштабирования записей (сложнее) Цель: Распределить нагрузку от записи и сохранить согласованность данных. Шардинг (сегментация) * разделяет данные по нескольким базам данных на основе ключа (например, ID пользователя); * предотвращает перегрузку одной базы данных; * требует тщательного проектирования запросов, чтобы избежать обращений к нескольким сегментам. CQRS (разделение ответственности за команды и запросы — Command Query Responsibility Segregation) * разделяет модели чтения и записи по разным базам данных или сервисам; * позволяет оптимизировать нагрузки с большим объёмом записи и чтения отдельно. Архитектура, управляемая событиями (Event-Driven Architecture) * вместо прямых записей в БД публикуются события, которые обрабатываются асинхронно; * помогает разделить сервисы и распределить нагрузку от записи; * пример: сервис заказов отправляет событие «Заказ создан» → сервис инвентаризации асинхронно обновляет остатки. Базы данных, оптимизированные для записи (Write-Optimized Databases) * используют механизмы хранения с логической структурой (например, LSM-деревья в Cassandra, RocksDB) для нагрузок с большим объёмом записи; * полезны в случаях высокочастотных операций (например, торговые системы, системы журналирования). Что в итоге: * Масштабирование чтений проще добавить позже. * Масштабирование записей нужно проектировать на раннем этапе, чтобы избежать сложностей с рефакторингом.

Масштабирование чтения и записи в веб-приложении (продолжение в следующем посте)
Масштабирование чтения и записи в веб-приложении (продолжение в следующем посте)

Бесплатный курс по дизайну от ТОП 3 дизайн студии РФ Забирай курс по дизайну от ТОП3 дизайн студии РФ с личным наставником бе
Бесплатный курс по дизайну от ТОП 3 дизайн студии РФ Забирай курс по дизайну от ТОП3 дизайн студии РФ с личным наставником бесплатно 🎓 6 кейсов в Figma с нуля: граф,веб,UX/UI дизайн 📊 Готовое Reels Портфолио: сайты, карточки МП, баннеры, презентации 💰 Алгоритм заработка на дизайне: без фриланс-бирж и продаж Попробовать #реклама 16+ study.logomachine.ru О рекламодателе

Расспространенные алгоритмы криптографии/шифрования Hashing Algorithms (используются для контрольных сумм, обеспечения целостности данных и хранения паролей): 1. MD5 — быстрая функция хеширования, но небезопасна из-за коллизий. 2. SHA-1 — более безопасна, чем MD5, но сейчас взломана (не использовать в новых системах). 3. SHA-256 — часть семейства SHA-2, широко используется и безопасна. 4. SHA-512 — более длинная версия SHA-256, обеспечивает повышенную безопасность. 5. BLAKE2 — быстрее и безопаснее SHA-2, современная альтернатива. 6. RIPEMD-160 — альтернатива SHA, используется для генерации адресов в Bitcoin. 7. CRC32 — лёгкий алгоритм хеширования для обнаружения ошибок, но не криптографически безопасен. Алгоритмы хеширования паролей и вывода ключей (используются для безопасного хранения или получения ключей из паролей): 8. bcrypt — алгоритм хеширования паролей, специально замедленный для защиты от перебора. 9. scrypt — хеширование паролей с высокой нагрузкой на память, лучше защищён от ASIC-устройств по сравнению с bcrypt. 10. Argon2 — современный рекомендуемый стандарт хеширования паролей (победитель конкурса PHC). 11. PBKDF2 — итеративная функция вывода ключей, используется во многих защищённых системах. 12. HKDF — функция вывода ключей на основе HMAC, используется в TLS, Signal. Алгоритмы симметричного шифрования (один и тот же ключ используется для шифрования и дешифрования): 13. AES (Advanced Encryption Standard) — промышленный стандарт симметричного шифрования (128, 192, 256 бит). 14. ChaCha20 — быстрый и безопасный потоковый шифр, используется в мобильных и ограниченных устройствах. 15. 3DES — тройной стандарт шифрования данных, устарел и небезопасен. 16. Blowfish — блочный шифр старого образца, заменён более безопасными вариантами, такими как AES. 17. Twofish — преемник Blowfish, был кандидатом на роль AES, но не был выбран. 18. RC4 — небезопасный потоковый шифр, не использовать в новых системах. Алгоритмы асимметричного (с открытым ключом) шифрования (используют пару открытый/закрытый ключ для шифрования и дешифрования): 19. RSA — классический алгоритм шифрования с открытым ключом, широко используется в TLS и для подписей. 20. DSA (Digital Signature Algorithm) — алгоритм цифровой подписи, в основном заменён более новыми вариантами. 21. Diffie-Hellman — алгоритм обмена ключами, позволяет обмениваться секретами без их раскрытия. 22. Elliptic Curve Cryptography (ECC) — более безопасен при использовании меньших ключей, применяется в современных системах. 23. Ed25519 — высокопроизводительный алгоритм цифровых подписей на эллиптических кривых. 24. ECDSA — вариант DSA на эллиптических кривых, используется в Bitcoin, Ethereum и TLS. 25. X25519 — быстрый алгоритм обмена ключами Diffie-Hellman на эллиптических кривых. Цифровые подписи и обеспечение целостности: 26. HMAC (Hash-based Message Authentication Code) — объединяет хеш с секретным ключом для обеспечения целостности. 27. RSA Signatures — подписывание данных с помощью закрытого ключа, чтобы другие могли проверить с помощью открытого ключа. 28. EdDSA — схема подписи, использующая скрученные кривые Эдвардса (например, Ed25519). 29. MAC (Message Authentication Code) — подтверждает, что данные не были изменены, аналогично HMAC. Режимы работы (для блочных шифров, таких как AES) (определяют, как блочные шифры обрабатывают данные, превышающие размер блока): 30. ECB (Electronic Codebook) — небезопасен; одинаковые блоки открытого текста дают одинаковый шифротекст. 31. CBC (Cipher Block Chaining) — использует вектор инициализации (IV) для добавления случайности к блокам. 32. CTR (Counter Mode) — преобразует блочный шифр в потоковый шифр. 33. GCM (Galois/Counter Mode) — режим AES с встроенной аутентификацией (используется в TLS). 34. CFB (Cipher Feedback Mode) — преобразует блочный шифр в самосинхронизирующийся потоковый шифр. 35. OFB (Output Feedback Mode) — преобразует блочный шифр в синхронный потоковый шифр.

Зарабатывайте на установках Яндекс Браузера Партнёрская программа для сервисных центров, магазинов компьютерной техники, сайт
Зарабатывайте на установках Яндекс Браузера Партнёрская программа для сервисных центров, магазинов компьютерной техники, сайтов для скачивания файлов и авторов статей. Вы можете предлагать его своим клиентам и аудитории — и зарабатывать на новых установках. Выплаты до 500₽ за каждую установку Яндекс Браузера. Подать заявку #реклама 0+ partner.browser.yandex.ru О рекламодателе

Как работает NAT (Network Address Translation) (продолжение предыдущего поста) 1. Основная задача NAT NAT — это технология, позволяющая нескольким устройствам в локальной сети (LAN) использовать один публичный IP-адрес. Это достигается путём изменения IP-адресов в заголовках пакетов данных при их передаче через маршрутизатор (NAT-шлюз). 2. Компоненты, показанные на изображении На схеме представлены: * Локальные устройства с частными IP-адресами (например, 192.168.0.13, 192.168.0.25, 192.168.0.30) — устройства внутри локальной сети. * NAT-шлюз (роутер) — устройство, выполняющее преобразование адресов. Ему присвоен публичный IP-адрес (184.28.207.5). * Публичный IP-адрес (184.28.207.5) — адрес, видимый в интернете. * Таблица NAT — хранит соответствие между частными IP-адресами и портами локальных устройств и преобразованными публичными адресами и портами. * Внешний ресурс (например, DNS-сервер 8.8.8.8) — цель запроса из локальной сети. 3. Процесс работы NAT по шагам Шаг 1. Исходный пакет (до трансляции) Когда устройство в локальной сети (например, с IP 192.168.0.13) отправляет запрос в интернет (например, к DNS-серверу 8.8.8.8:53), пакет имеет: * Source IP & Port (исходный IP и порт): 192.168.0.13:1000 (локальный адрес и порт устройства). * Destination IP & Port (целевой IP и порт): 8.8.8.8:53 (адрес и порт сервера в интернете). Шаг 2. Преобразование адреса NAT-шлюзом NAT-шлюз перехватывает пакет и изменяет его заголовки: * Заменяет локальный IP-адрес (192.168.0.13) на свой публичный IP-адрес (184.28.207.5). * Заменяет локальный порт (1000) на уникальный публичный порт (например, 10000), чтобы различать соединения от разных устройств. * Сохраняет соответствие «локальный IP:порт → публичный IP:порт» в таблице NAT. Шаг 3. Пакет после трансляции После преобразования пакет выглядит так: * Source IP & Port: 184.28.207.5:10000 (публичный IP и порт NAT-шлюза). * Destination IP & Port: 8.8.8.8:53 (не изменяется — это адрес цели). Шаг 4. Ответ от сервера Когда сервер (8.8.8.8) отвечает, он отправляет данные на публичный IP и порт (184.28.207.5:10000). Шаг 5. Обратная трансляция NAT-шлюз: * Проверяет таблицу NAT и находит запись: «184.28.207.5:10000192.168.0.13:1000». * Преобразует публичный IP и порт обратно в локальные. * Передаёт ответ устройству с IP 192.168.0.13. 4. Таблица NAT Таблица NAT хранит соответствия для всех активных соединений, например: * 192.168.0.13:1000 ↔️ 184.28.207.5:10000; * 192.168.0.25:2000 ↔️ 184.28.207.5:20000; * 192.168.0.30:3000 ↔️ 184.28.207.5:30000. 5. Итог Благодаря NAT: * Несколько устройств используют один публичный IP-адрес. * Локальные IP-адреса скрыты от интернета — это повышает безопасность сети. * Маршрутизатор управляет трафиком, преобразуя адреса «на лету». Таким образом, NAT обеспечивает экономию IP-адресов и защиту локальной сети.

Как работает NAT (Network Address Translation) (продолжение в следующем посте)
Как работает NAT (Network Address Translation) (продолжение в следующем посте)

Реклама для бизнеса любого уровня в Яндекс Директе Создайте эффективную рекламную кампанию с алгоритмами Яндекс Директа 👌 На
Реклама для бизнеса любого уровня в Яндекс Директе Создайте эффективную рекламную кампанию с алгоритмами Яндекс Директа 👌 Начните прямо сейчас ⚡ Зарегистрироваться #реклама direct.yandex.ru О рекламодателе

Роб Пайк (один из ключевых создателей языка Go, один из разработчиков Unix, в частности, создал первую граф. систему окон для
Роб Пайк (один из ключевых создателей языка Go, один из разработчиков Unix, в частности, создал первую граф. систему окон для Unix) в своём канале в bluesky в ответ на сообщение, отправленное от лица LLM-модели Claude Opus, эмоционально выразил своё отношение к ИИ и их роли в современной мире: «Идите [к чёрту], ребята. Вы насилуете нашу планету, тратите триллионы на токсичное, неперерабатываемое оборудование, разрушая при этом основы общества, но ещё находите время, чтобы заставить свои злобные машины поблагодарить меня за моё стремление к более простым программам. И к тому же вы обучаете вашего монстра на данных, которые произвёл в том числе и я, своими руками, без отсылки или компенсации. Просто валите [к чёрту]. Проваливайте все. Не помню, когда я последний раз был так зол. У всех остальных же я прошу прощения за своё, пусть ненамеренное и скорее незначительное, участие в реализации этого насилия против человечества.» https://bsky.app/profile/robpike.io/post/3matwg6w3ic2s

Распространенные команды для анализа логов на Linux
Распространенные команды для анализа логов на Linux

Где я окажусь в конце 2026? Нет лучшего момента помечтать о будущем, чем перед праздниками. Команда Selectel подумала ровно т
Где я окажусь в конце 2026? Нет лучшего момента помечтать о будущем, чем перед праздниками. Команда Selectel подумала ровно так же и выделила целый новогодний сервер для твоих планов на будущий год ✨ На сайте можно отправить письмо себе в будущее: записать самые смелые и амбициозные мечты на 2026-й. Ровно на год послание сохранится на сервере, а потом ты получишь его обратно на почту — будет возможность сравнить желаемое с действительным. Прыгнуть с парашютом, наконец разгрести бэклог или стать лидом? Отправляй хотелки на Новогодний сервер — это весело и секьюрно. Попробовать #реклама 16+ careers.selectel.ru О рекламодателе

- Независимость шардов: каждый шард работает автономно, запросы к одному шарду не влияют на производительность других. - Распределение нагрузки: данные распределены между серверами, что снижает нагрузку на отдельные серверы и ускоряет обработку запросов. - Масштабируемость: горизонтальное масштабирование позволяет добавлять новые шарды по мере роста объёма данных. - Высокая доступность: сбой одного шарда не приводит к потере всей базы данных — недоступны будут только данные этого шарда.