DNK_C_C++_Go_Rust
45 subscribers
14 photos
45 links
DNK - дневник кодера С и С++
Download Telegram
#57_Cpp

range_error в C++ — исключение, которое возникает, когда полученный результат превосходит допустимый диапазон.

Оно используется при ошибках при вычислении значений с плавающей запятой, когда компьютер не может обработать значение, поскольку оно является либо слишком большим, либо слишком маленьким.

Для использования исключения range_error в C++ нужно включить в код заголовочный файл <stdexcept>
Например:
#include <stdexcept>
#include <iostream>

int main() {
try {
int value = 100;
if (value < 0 || value > 50) {
// Выбрасывание исключения range_error
throw std::range_error("Value is out of range.");
}
std::cout << "Value is within the range." << std::endl;
}
catch (const std::range_error& e) {
// Ловля и обработка исключения range_error
std::cerr << "Range Error: " << e.what() << std::endl;
}
return 0;
}

.
#58_Cpp

std::forward в C++ — шаблонная функция для достижения идеальной передачи аргументов функциям с сохранением их типа (lvalue или rvalue).

Она принимает forwarding-ссылку, по шаблонному параметру T определяет, передана ей lvalue-ссылка или rvalue-ссылка, и возвращает ссылку соответствующего типа.

Назначение функции std::forward —реализация механизма идеальной передачи (perfect forwarding). Этот механизм подразумевает, что объекты, переданные в функцию в виде lvalue-выражений, должны копироваться, а объекты, переданные в функцию в виде rvalue-выражений, должны перемещаться.

Функция std::forward была введена в C++ 11 и является частью заголовочного файла <utility>
#59_DB_TP

В теории баз данных CAP — это акроним от англоязычных слов Consistency (Согласованность, Целостность), Availability (Доступность) и Partition tolerance (Устойчивость к разделению).

CAP-теорема утверждает, что распределенная система хранения данных не может одновременно удовлетворять всем трем важнейшим аспектам согласованности, доступности и устойчивости к разделению.
Проще говоря, теорема CAP подчеркивает неотъемлемый компромисс в системе, где только два из этих трех основных атрибутов могут быть эффективно достигнуты в любой момент времени.
#0

Расшифровка акронимов в заголовках постов, для поиска по темам:

- ADM — администрирование;
- ALG — aлгоритмы;
- ASM — ассемблер;
- BASH — командная строка;
- Boost — коллекция библиотек С++;
- С — язык Си;
- Сpp — язык С++;
- CRYP — криптография;
- CMPL — компилирование, компиляторы;
- CS — информационная безопасность;
- DB — базы данных;
- DBG — дебаггеры и дебагинг;
- DvOp — девопс;
- IdPt — идиомы, паттерны, подходы (приемы, принятые практики, полезные советы);
- GCC — компилятор GCC;
- GIT— система контроля версий ПО;
- GO — все что связано с ЯП Golang;
- LIB — библиотеки;
- MTH — многопоточность;
- IF — интересные факты;
- NTWK — компьютерные сети;
- ODP — опросник Даниила Подольского по Golang;
- PkS — подготовка к собеседованиям;
- PPPO — принципы проектирования ПО;
- PRGM — листинги программ;
- PY — все что связано с ЯП Python;
- RUST — все что связано с ЯП Rust;
- SDS — стандартные (встроенные) структуры данных;
- STL — стандартная библиотек шаблонов С++;
- SYSCL — системные вызовы;
- TLS — инструменты для разработчика;
- TOS — теория операционных систем;
- TP — теория программирования;
- UB — неопределенное поведение;
- Vim — посты связанные с настройкой и использованием Vim.
DNK_C_C++_Go_Rust pinned «#0 Расшифровка акронимов в заголовках постов, для поиска по темам: - ADM — администрирование; - ALG — aлгоритмы; - ASM — ассемблер; - BASH — командная строка; - Boost — коллекция библиотек С++; - С — язык Си; - Сpp — язык С++;…»
#60_DB

Атрибут в таблицах баз данных — это значимая с точки зрения решаемой задачи характеристика (свойство, параметр) объекта. В таблице базы данных атрибуты размещаются в полях, имена полей соответствуют названию атрибута.

Некоторые типы атрибутов:

- АТРИБУТЫ ИМЕНОВАНИЯ — используются для присвоения имени экземпляру объекта данных. Например, марка и модель — атрибуты именования в объекте данных транспортного средства;
- ОПИСАТЕЛЬНЫЕ АТРИБУТЫ — применяются для описания характеристик, особенностей или взаимосвязи объекта данных. Например, в транспортном средстве цвет объекта данных — описательный атрибут, который описывает характеристики объекта;
ССЫЛОЧНЫЕ АТРИБУТЫ — используются для формализации бинарных и ассоциативных отношений и для создания ссылки на другой экземпляр в другой таблице.

Некоторые атрибуты столбцов и таблиц:

- PRIMARY KEY — задает первичный ключ таблицы, который уникально идентифицирует строку в таблице;
- AUTO_INCREMENT — позволяет указать, что значение столбца будет автоматически увеличиваться при добавлении новой строки;
- UNIQUE — указывает, что столбец может хранить только уникальные значения;
- NULL и NOT NULL — указывает может ли столбец принимать значение NULL, при определении столбца ему можно задать атрибут NULL или NOT NULL;
- DEFAULT — определяет значение по умолчанию для столбца. Если при добавлении данных для столбца не будет предусмотрено значение, то для него будет использоваться значение по умолчанию;
- CHECK — задает ограничение для диапазона значений, которые могут храниться в столбце.
#61_BASH_ADM

Как переименовать Linux-машину?

Чтобы изменить имя хоста в Linux, можно воспользоваться одним из следующих способов:

$ sudo hostnamectl set-hostname <newhostname>.

Для того чтобы изменения вступили в силу требуется перезагрузка.

$ hostnamectl

или

& hostname

(чтобы просмотреть текущее имя хоста).

$ sudo hostname <newhostname>

(для временного изменения имени хоста).
Изменение имени хоста вступит в силу сразу же, перезагрузка не требуется.
#62_BASH_ADM

Для вывода в терминале версии OC можно воспользоваться следующими командами:

$ cat /etc/issue

или

$ lsb_release -d
$ lsb_release -a
#63_BASH_ADM

IPCALC — это утилита, которая может выполнять простые манипуляции с адресами IPv4. Если вы просто наберете ipcalc без каких-либо параметров ввода, это даст хороший вывод «справки» с некоторыми примерами, которые очень полезны для начала работы.
Инструмент ipcalc можно применять для следующих задач:

- проверить IP-адрес;
- показать рассчитанный широковещательный адрес;
- отображение имени хоста, определенного через DNS;
- отображение сетевого адреса или префикса.

Команда имеет следующий общий вид:

$ ipcalc [options] ADDRESS [ [/]] [NETMASK] .

Опции:
-n (--nocolor) - подавить вывод цветов;
-b (--nobinary) - подавить поразрядный вывод;
-c (--class) - показать маску сети по адресу;
-h (--html) - показать результаты в HTML;
-v (--version) - показать версию программы;
-s (--split n1 n2 n3) - разделить сети по размеру n1, n2, n3;
-r (--range) - исключить диапазон адресов;
--help - помощь.

Особенности ipcalc:
- ipcalc выдает двоичные эквиваленты для каждого адреса, что помогает лучше визуализировать адреса;
- пробел в двоичном представлении разделяет сетевую и хостовую часть адреса;
- нельзя указывать в качестве ввода двоичную форму адреса.

IPCALC вычисляет информацию об IP-адресах и сетях:

$ ipcalc [arguments]

Она принимает на вход IP-адрес и маску сети и на выходе получает:
- адрес сети,
- Cisco wildcard маску,
- широковещательный адрес,
- минимальный хост,
- максимальный хост,
- общее количество хостов.

Также ipcalc может использоваться в качестве учебного пособия для представления результатов подсетей в простых для понимания двоичных значениях.
#64_PkS_PPPO_TP

YAGNI (аббревиатура от фразы "You aren’t gonna need it" — «тебе это не понадобится») — принцип проектирования программного обеспечения, предполагающий отказ от избыточной функциональности.

Другими словами, не нужно писать код, который может пригодиться в будущем, но сейчас в нём нет потребности. Вскоре он станет неактуальным и его придётся переписать под конкретную задачу.

Логика принципа YAGNI заключается в том, что время, которое тратится на написание функций на будущее, можно использовать для доработки и улучшения того, что уже есть. Кроме того, непонятно, как такие функции будут развиваться дальше — может оказаться так, что понадобится совсем другое и модули, созданные про запас, придётся переписывать.
👌1
#65_PkS_PPPO_TP

DRY (Don’t Repeat Yourself) переводится с английского языка как «НЕ ПОВТОРЯЙСЯ».

Смысл принципа DRY
заключается в отсутствии дублирования кода.
Он помогает избежать избыточности и облегчить поддержку кода, минимизируя количество мест, где нужно вносить изменения.

Некоторые паттерны использования принципа DRY:

- НЕ ДОПУСКАТЬ КОПИРОВАНИЯ — создавать функции и классы, которые можно переиспользовать вместо дублирования кода в разных местах;

- СОБЛЮДАТЬ ЕДИНУЮ ЛОГИЧЕСКУЮ ЦЕПОЧКУ поддерживать общую структуру и организацию кода, чтобы избежать повторного изобретения колеса;

- Перед добавлением новой функции, проверить, возможно её аналог уже присутствует в проекте;

- Преимущественно улучшать и рефакторить существующий код, а не создавать новый, чтобы избежать дублирования функциональности;

- ИСПОЛЬЗОВАТЬ БИБЛИОТЕКИ И ФРЕЙМВОРКИ, которые обеспечивают общие решения для часто встречающихся задач;

- РЕГУЛЯРНО ПРОВОДИТЬ РЕВЬЮ КОДА, чтобы обнаруживать и устранять дублирование на ранних стадиях.
#66_PkS_PPPO_TP

KISS (Keep It Simple, Stupid) — это принцип проектирования и разработки, суть которого заключается в том, чтобы создавать простые и понятные решения, избегая избыточной сложности.

Основная идея заключается в том, что простота способствует лучшему пониманию, использованию и поддержке системы или продукта.
Принцип KISS предписывает избегать излишней сложности, лишних функций и элементов там, где в этом нет прямой необходимости, потому что они могут запутать пользователя и усложнить процесс разработки и поддержки.

Автором принципа KISS является американский авиаконструктор Кларенс Леонард «Келли» Джонсон (1910–1990). Он предложил этот принцип в рамках работы над проектированием военных самолётов в компании Lockheed и впервые озвучил его предположительно в 1938 году.

Принцип KISS применим в различных областях, где важна практичность и понятность. Например, в программировании, дизайне интерфейсов, управлении проектами, рекламе, маркетинге и многих других сферах.
#67_PkS_PPPO_TP

SOLID — это аббревиатура пяти основных принципов проектирования в ООП:

- ПРИНЦИП ЕДИНСТВЕННОЙ ОТВЕТСТВЕННОСТИ (SINGLE RESPONSIBILITY). Каждый класс или модуль в программе должен иметь только одну причину для изменения. Это означает, что класс должен выполнять только одну работу;

- ПРИНЦИП ОТКРЫТОСТИ/ЗАКРЫТОСТИ (OPEN - CLOSED). Программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для изменения. Это означает, что к существующим классам или модулям можно добавлять новые функции или поведение без изменения их исходного кода;

- ПРИНЦИП ПОДСТАНОВКИ БАРБАРЫ ЛИСКОВ (LISKOV SUBSTITUTION). Объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения корректности программы;

- ПРИНЦИП РАЗДЕЛЕНИЯ ИНТЕРФЕЙСА (INTERFACE SEGREGATION). Слишком «толстые» интерфейсы необходимо разделять на более маленькие и специфические, чтобы клиенты маленьких интерфейсов знали только о методах, которые необходимы им в работе;

- ПРИНЦИП ИНВЕРСИИ ЗАВИСИМОСТЕЙ (DEPENDENCY INVERSION). Зависимости внутри системы должны строиться на основе абстракций, а не деталей. Это означает, что высокоуровневые модули не должны зависеть от низкоуровневых модулей, и они все должны зависеть от абстракций.

Цель использования принципов SOLID — упростить разработку, сделать её более гибкой и устойчивой к ошибкам.
#68_ADM_BASH

IP A - эта команда в Linux используется для просмотра всех IP-адресов, связанных с сетевыми интерфейсами.
Общий синтаксис команды $ ip:

$ ip [OPTION] OBJECT {COMMAND | help}

Объекты (OBJECT) можно использовать в полной или сокращённой форме.
Другие примеры использования команды ip a просмотр только адреса IPv4:

$ ip -4a

или IPv6:

$ ip -6a.

Просмотр информации конкретного интерфейса:

$ ip a show eth0

или

$ ip a list eth0

или

$ ip a show dev eth0.

Добавление IP-адреса интерфейсу:

$ ip a add {ip_addr/mask} dev {interface}.

Удаление IP-адреса из интерфейса:

$ ip a del {ipv6_addr_OR_ipv4_addr} dev {interface}.
#69_BASH_ADM

$ sudo netplan apply

применяет настройки, внесённые в конфигурационный файл утилиты Netplan.

Эта команда прочитает файлы YAML в каталоге

/etc/netplan/,

сгенерирует необходимые конфигурации для указанного средства визуализации и применит настройки, перезапуская их при необходимости.
#70_ADM_NTWK

IP-КЛАССИФИКАЦИЯ
Существуют классификации IP-адресов как «частные» и «публичные».
ПУБЛИЧНЫМ IP адресом - называется IP адрес, который используется для выхода в Интернет. ЧАСТНЫЕ IP адреса - адреса, используемые в локальных сетях (не могут быть напрямую подключены к Интернету).
Следующие диапазоны адресов зарезервированы для частных (также известных как LAN) сетей:

* 10.0.0.010.255.255.255 (10.0.0.0/8);
* 172.16.0.0172.31.255.255 (172.16.0.0/12);
* 192.168.0.0192.168.255.255 (192.168.0.0/16);
* 127.0.0.0127.255.255.255 (зарезервировано для петлевых интерфейсов (не используется для связи между узлами сети), так называемый localhost).

ПОРТЫ.
Стандарт определяет для каждого из протоколов TCP и UDP возможность одновременного выделения до 65536 уникальных портов на хосте, которые обозначаются номерами от 0 до 65535. Весь ассортимент портов разбит на 3 группы:

- от 0 до 1023 называются привилегированными или зарезервированными (используются для системы и некоторых популярных программ);
- порты с 1024 по 49151 называются зарегистрированными портами;
- порты с 49151 по 65535 называются динамическими портами.
#71_ADM_BASH_NTWK

IP ROUTE — в ОС Linux это мощный инструмент для управления сетевыми маршрутами.
Он позволяет администраторам сети определять, настраивать и отслеживать маршруты передачи данных в сети.
#72_ADM_BASH_NTWK

NETSTAT (network statistics) — инструмент командной строки, который выводит на дисплей состояние TCP-соединений (как входящих, так и исходящих), таблицы маршрутизации, число сетевых интерфейсов и сетевую статистику по протоколам.

Чтобы ознакомится с возможностями команды в системе Linux можно вызвать в терминале команду:

$ netstat --help

Основное назначение утилиты — поиск сетевых проблем и определение производительности сети.

Команда netstat доступна в ОС семейства UNIX и Windows.
#73_ADM_BASH_NTWK

Чтобы добавить новый маршрут к определённой IP-подсети в таблицу маршрутизации Linux, нужно выполнить команду:

$ ip route add 192.168.0.0/24 via 192.168.1.1

Эта команда добавит маршрут для IP-сети 192.168.0.0/24 через шлюз 192.168.1.1.
Такие маршруты будут временными и будут работать до перезагрузки сетевой службы или сервера.

Чтобы добавить постоянный маршрут, нужно узнать имя сетевого интерфейса, который будет использоваться для маршрутизации. Узнать его можно командой:

$ ip a

Далее необходимо открыть файл

/etc/sysconfig/network-scripts/route-enp0s3

с помощью редактора (vim или nano) и добавить туда строку с маршрутом. Например:

192.168.0.0/24 via 192.168.1.1

После добавления маршрута в файл нужно перезапустить сервис network это можно сделать с помощь команды:

$ sudo netplan apply

Также можно добавить команду добавления нового маршрута в файл

/etc/rc.local,

чтобы он автоматически добавлялся при загрузке сервера. Для этого нужно открыть файл c помощью редактора, например

$ sudo vim /etc/rc.local

и указать команду добавления маршрута.
После перезагрузки сервера маршрут пропишется автоматически при загрузке системы.
#73_BASH_ADM_NTWK

IPERF3 — утилита для измерения пропускной способности сети между двумя компьютерами (или другими устройствами).
Используется для тестирования производительности сетевых соединений, таких как скорость передачи данных, задержка (latency), потери пакетов и другие параметры.

Назначение:

— измерение скорости передачи данных: Iperf3 позволяет измерять максимальную скорость передачи данных по сети (в обе стороны);

— тестирование качества связи — утилита помогает выявить проблемы с потерей пакетов, высокой задержкой или нестабильностью соединения;

— отладка сетей: Инструмент полезен при настройке сетевого оборудования, маршрутизаторов, серверов и других компонентов сети;

Основные возможности:

— режим клиента и сервера — один компьютер работает в режиме сервера, другой — в режиме клиента. Клиент отправляет данные на сервер, а сервер принимает их и анализирует результаты;

— поддержка различных протоколов. Поддерживает TCP и UDP протоколы;

— настройка параметров — можно задавать различные параметры теста, такие как размер буфера, количество потоков, время выполнения теста и т.д.;

— генерация отчетов — после завершения теста программа выводит статистику о передаче данных, включая среднюю скорость, минимальную/максимальную задержку, процент потерь пакетов и др.

Использование:

Установка:
Для установки Iperf3 можно использовать пакетные менеджеры, например, apt для Ubuntu/Debian:

$ sudo apt install iperf3

Или yum для CentOS/RHEL:

$ sudo yum install iperf3

Запуск сервера.
На одном компьютере нужно запустить Iperf3 в режиме сервера:

$ iperf3 -s

Запуск клиента.
На другом компьютере запускаем Iperf3 в режиме клиента, указывая IP-адрес или доменное имя сервера:

$ iperf3 -c <IP_адрес_сервера>

Дополнительные опции:

-p <порт> – указать порт для подключения (по умолчанию 5201);

-t <секунды> – задать продолжительность теста;

-P <количество потоков> – установить количество параллельных потоков;

-u – использовать UDP вместо TCP;

-b <битрейт> – ограничить битрейт для UDP-теста;

-R – тестировать обратную связь (от сервера к клиенту)

Заключение:
Iperf3 является мощным инструментом для диагностики и настройки сетевой инфраструктуры. Он широко применяется системными администраторами, сетевыми инженерами и разработчиками для анализа производительности сети и выявления узких мест.