diff --git a/README.md b/README.md index 5c20db9..9643aff 100644 --- a/README.md +++ b/README.md @@ -566,10 +566,10 @@ > - [Куча](https://ru.wikipedia.org/wiki/%D0%9A%D1%83%D1%87%D0%B0_(%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C)) (структура для хранения промежуточных данных, создаваемых во время работы процесса)
> - [Дескриптор сегмента](https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D1%80_%D1%81%D0%B5%D0%B3%D0%BC%D0%B5%D0%BD%D1%82%D0%B0)
> - [Файловые дескрипторы](https://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D1%8B%D0%B9_%D0%B4%D0%B5%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D1%80)
- > - Информация о наборе допустипых полномочий
+ > - Информация о наборе допустимых полномочий
> - Информация о состоянии процессора - [Поток](https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F) - > Cущность, в которой выполняются последовательности действий (процедуры) программы. Потоки находятся внутри процесса и используют то же адрессное пространство. В одном процессе может быть несколько потоков, что обеспечивает возможность выполнения нескольких задач. Эти задачи, благодаря потокам, могут обмениваться данными, использовать общие данные или результаты других задач. + > Cущность, в которой выполняются последовательности действий (процедуры) программы. Потоки находятся внутри процесса и используют то же адресное пространство. В одном процессе может быть несколько потоков, что обеспечивает возможность выполнения нескольких задач. Эти задачи, благодаря потокам, могут обмениваться данными, использовать общие данные или результаты других задач.
🔗 Ссылки на материалы @@ -587,7 +587,7 @@

Concurrency-parallelism

- [Параллелизм (Parallelism)](https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D0%B8%D0%B7%D0%BC_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)) - > Способность выполнять несколько задач одновременно используя несоклько ядер процессора, где на каждом отдельном ядре выполняется отдельно взятая задача. + > Способность выполнять несколько задач одновременно используя несколько ядер процессора, где на каждом отдельном ядре выполняется отдельно взятая задача. - [Конкурентность (Concurrency)](https://en.wikipedia.org/wiki/Concurrency_(computer_science)) > Способность выполнять несколько задач, но используя одно ядро процессора. Это достигается путем разделения задач на отдельные блоки команд, которые выполняются по очереди, но переключение между этими блоками происходит настолько быстро, что для пользователей создается впечатление, будто эти процессы выполняются одновременно. @@ -595,7 +595,7 @@ 🔗 Ссылки на материалы 1. [**Чем отличаются Concurrency и Parallelism** – YouTube](https://youtu.be/4PNneed92lM) -1. [**Отличие между конкурентностью, параллелизмом и многопоточностю** – GitHub](https://github.com/gm-soft/knowledge-base/blob/master/dot-net/2019-11-06-asynchronous-programming-epm-theory.md) +1. [**Отличие между конкурентностью, параллелизмом и многопоточностью** – GitHub](https://github.com/gm-soft/knowledge-base/blob/master/dot-net/2019-11-06-asynchronous-programming-epm-theory.md) 1. [**Parallelism vs Concurrency: правильно подбираем инструменты** – habr.com](https://habr.com/ru/company/piter/blog/274569/) 1. [**Параллелизм против многопоточности против асинхронного программирования: разъяснение** – habr.com](https://habr.com/ru/post/337528/)
@@ -629,7 +629,7 @@ Механизм позволяющий организовать обмен данными между потоками одного или разных процессов. Причем, процессы могут быть запущены как на одном и том же компьютере, так и на разных, соединенных сетью. [Межпроцессорные взаимодействия](https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BD%D0%BE%D0%B5_%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B5) бывают разных типов. - [Файл](https://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%B9%D0%BB) - > Самый простой способ организвоать обмен данными. Один процесс записывает данные в определенный файл, другой процесс читает этот же файл и тем самым получает данные от первого процесса. + > Самый простой способ организовать обмен данными. Один процесс записывает данные в определенный файл, другой процесс читает этот же файл и тем самым получает данные от первого процесса. - [Сигнал](https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%B3%D0%BD%D0%B0%D0%BB%D1%8B_(UNIX)) > Асинхронное уведомление одного процесса о событии произошедшем в другом процессе. - [Сокет](https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%BA%D0%B5%D1%82_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81)) @@ -637,7 +637,7 @@ - [Семафор](https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D0%BC%D0%B0%D1%84%D0%BE%D1%80_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)) > Счетчик над которым можно проводить только 2 операции: увеличение и уменьшение (причем для 0 операция уменьшения блокируется). - [Сообщения](https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D0%BC%D0%B5%D0%BD_%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D1%8F%D0%BC%D0%B8) и [очереди сообщений](https://ru.wikipedia.org/wiki/%D0%9E%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D1%8C_%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B9) - - [Каналы](https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D0%B2%D0%B5%D0%B9%D0%B5%D1%80_(Unix)) (akа конвееры, pipes) + - [Каналы](https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D0%B2%D0%B5%D0%B9%D0%B5%D1%80_(Unix)) (akа конвейеры, pipes) > Перенаправление выходных данных одного процесса на вход другого процесса (подобие трубы).
@@ -674,7 +674,7 @@ ## Основы Linux -Операционные системы на базе [ядра Linux](https://ru.wikipedia.org/wiki/%D0%AF%D0%B4%D1%80%D0%BE_Linux) это стандарт в мире серверной разработки, поскольку большинство серверов работают именно на таких ОС. Использовать Linux на серверах выгодно, ведь он рапространяется бесплатно. +Операционные системы на базе [ядра Linux](https://ru.wikipedia.org/wiki/%D0%AF%D0%B4%D1%80%D0%BE_Linux) это стандарт в мире серверной разработки, поскольку большинство серверов работают именно на таких ОС. Использовать Linux на серверах выгодно, ведь он распространяется бесплатно. Существует огромное количество дистрибутивов (сборок с набором предустановленного ПО) Linux на любой вкус и цвет. Одним из самых популярных является [Ubuntu](https://ru.wikipedia.org/wiki/Ubuntu). Именно с него можно начать своё погружение в серверную разработку. @@ -787,7 +787,7 @@ - ### Пользователи - ОС на базе Linux являются многопользовательскими. Это означает, что несколько людей могут запускать множество различных приложений одновременно на одном и том же компьютере. Чтобы система Linux смогла «узнать» пользователя, он должен войти в систему, соответсвенно каждый пользователь должен иметь уникальное имя и секретный пароль. + ОС на базе Linux являются многопользовательскими. Это означает, что несколько людей могут запускать множество различных приложений одновременно на одном и том же компьютере. Чтобы система Linux смогла «узнать» пользователя, он должен войти в систему, соответственно каждый пользователь должен иметь уникальное имя и секретный пароль. - Работа с пользователями ```bash @@ -803,7 +803,7 @@ groupadd <группа> [ключи] # создать группу groupmod <группа> [опции] # редактировать группу groupdel <группа> [опции] # удалить группу - usermod -a -G <группы(через запятую)> <пользователь> # добивить пользователя в группы + usermod -a -G <группы(через запятую)> <пользователь> # добавить пользователя в группы gpasswd --delete <пользователь> <группы(через запятую)> # удалить пользователя из групп ``` - Системные файлы @@ -868,12 +868,12 @@ [Служба SSH](https://ru.wikipedia.org/wiki/SSH) Позволяет получить удаленный доступ к терминалу другого компьютера. В случае с персональным компьютером, это может понадобиться для срочного решения какой-либо проблемы, а в случае с сервером это вообще очень распространенная практика. - - Базовые комнады + - Базовые команды ```bash apt install openssh-server # установка SSH (хотя он почти везде идёт из коробки) service ssh start # запуск SSH service ssh stop # остановка SSH - ssh -p <Порт> user@remotehost # подключенние к удаленному ПК через SSH + ssh -p <Порт> user@remotehost # подключение к удаленному ПК через SSH ssh-keygen -t rsa # генерация RSA-ключа для беспарольного входа ssh-copy-id -i ~/.ssh/id_rsa user@remotehost # копирование ключа на удаленную машину ``` @@ -973,7 +973,7 @@

Binary

- - [Восьмиричная СС](https://ru.wikipedia.org/wiki/%D0%92%D0%BE%D1%81%D1%8C%D0%BC%D0%B5%D1%80%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F) + - [Восьмеричная СС](https://ru.wikipedia.org/wiki/%D0%92%D0%BE%D1%81%D1%8C%D0%BC%D0%B5%D1%80%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F) > Используется, например, в Linux-системах для выдачи прав доступа.

Octal

@@ -1008,7 +1008,7 @@

Logic

- [Логическое "НЕ"](https://ru.wikipedia.org/wiki/%D0%9E%D1%82%D1%80%D0%B8%D1%86%D0%B0%D0%BD%D0%B8%D0%B5) (отрицание) - - [Логическое "И"](https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%8A%D1%8E%D0%BD%D0%BA%D1%86%D0%B8%D1%8F) (конъюкция) + - [Логическое "И"](https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%8A%D1%8E%D0%BD%D0%BA%D1%86%D0%B8%D1%8F) (конъюнкция) - [Логическое "ИЛИ"](https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D0%B7%D1%8A%D1%8E%D0%BD%D0%BA%D1%86%D0%B8%D1%8F) (дизъюнкция) - [Исключающее "ИЛИ"](https://ru.wikipedia.org/wiki/%D0%98%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D1%8E%D1%89%D0%B5%D0%B5_%C2%AB%D0%B8%D0%BB%D0%B8%C2%BB) - [Эквивалентность](https://ru.wikipedia.org/wiki/%D0%9E%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%B8) @@ -1027,7 +1027,7 @@ - ### Структуры данных - [Структуры данных (СД)](https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85) – это контейнеры в которых данные хранятся по определенным правилам. В зависимости от этих правил структура данных будет эффективна в одних задачах и неэффективна в других. Поэтому необходимо понимать, когда и где использовать ту или инную структуру. + [Структуры данных (СД)](https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85) – это контейнеры в которых данные хранятся по определенным правилам. В зависимости от этих правил структура данных будет эффективна в одних задачах и неэффективна в других. Поэтому необходимо понимать, когда и где использовать ту или иную структуру. - [Массив](https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2_(%D1%82%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)) > СД, которая позволяет хранить данные одинакового типа, где каждому элементу присваивается свой порядковый номер. @@ -1037,7 +1037,7 @@ > СД где все элементы, помимо данных, содержат ссылки на последующий и/или предыдущий элемент. Существуют 3 разновидности: > - Односвязный список – СД, где каждый элемент хранит ссылку только на следующий (одно направление). > - Двусвязный список – СД, где элементы содержат ссылки, как на следующий элемент, так и на предыдущий (два направления). - > - Кольцевой спискок – разновидность двусвязного списка, где последний элемент кольцевого списка содержит указатель на первый, а первый — на последний. + > - Кольцевой список – разновидность двусвязного списка, где последний элемент кольцевого списка содержит указатель на первый, а первый — на последний.

Linked list

@@ -1052,7 +1052,7 @@

Queue

- [Хеш-таблица](https://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0) - > По другому ассоциативный массив. Здесь для обращения к каждому из элементов используется соответсвующее ключевое значение, которое вычисляется по определенному алгоритму. + > По другому ассоциативный массив. Здесь для обращения к каждому из элементов используется соответствующее ключевое значение, которое вычисляется по определенному алгоритму. - [Дерево](https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_(%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)) > СД с иерархической моделью, в виде набора связанных между собой элементов. - [Куча](https://ru.wikipedia.org/wiki/%D0%9A%D1%83%D1%87%D0%B0_(%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)) @@ -1086,7 +1086,7 @@ - [Сортировка выбором](https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D0%BC) - [Рекурсия](https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F#%D0%92_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8) > Когда функция может вызывать сама себя и так до бесконечности. С одной стороны решения на основе рекурсии выглядят очень элегантно, а с другой стороны такой подход очень быстро приводит к переполнению стека и его рекомендуют избегать. - - [Сорировка пузырьком](https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BF%D1%83%D0%B7%D1%8B%D1%80%D1%8C%D0%BA%D0%BE%D0%BC) + - [Сортировка пузырьком](https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BF%D1%83%D0%B7%D1%8B%D1%80%D1%8C%D0%BA%D0%BE%D0%BC) - [Быстрая сортировка](https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0) - [Поиск в ширину](https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%B2_%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83) - [Алгоритм Дейкстры](https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%94%D0%B5%D0%B9%D0%BA%D1%81%D1%82%D1%80%D1%8B) @@ -1111,7 +1111,7 @@ - ### Оценка сложности алгоритмов - В мире программирования существует специальная единица измерения **Big О** (Большое О или О-нотация). Она описывает как сложность алгоритма растёт с увеличением количества входных данных. Дело в том, что один и тот же алгоритм запущенный на разных устройствах выполняется за разное время (завист от производительности устройства). Поэтому такая оценка не может быть релевантной. Вместо этого в **Big O** алгоритм оценивается по тому, сколько действий (шагов/итераций) необходимо совершить для его выполнения, при этом всегда показывая худший вариант развития событий. + В мире программирования существует специальная единица измерения **Big О** (Большое О или О-нотация). Она описывает как сложность алгоритма растёт с увеличением количества входных данных. Дело в том, что один и тот же алгоритм запущенный на разных устройствах выполняется за разное время (зависит от производительности устройства). Поэтому такая оценка не может быть релевантной. Вместо этого в **Big O** алгоритм оценивается по тому, сколько действий (шагов/итераций) необходимо совершить для его выполнения, при этом всегда показывая худший вариант развития событий.

BigO

@@ -1128,14 +1128,14 @@ 🔗 Ссылки на материалы 1. [**Сложность алгоритмов. Big O. Основы**](https://bimlibik.github.io/posts/complexity-of-algorithms/) -1. [**Шпарглака по Big O**](https://www.bigocheatsheet.com/) +1. [**Шпаргалка по Big O**](https://www.bigocheatsheet.com/)
Содержание ⬆️
- ### Форматы хранения данных - Для хранения и передачи данных по сети могут использоватся файлы разных форматов. Текстовые файлы удобны для чтения человеку, поэтому они используются, например, для файлов конфигурации. Но передавать данные в текстовых форматах по сети не всегда рационально, поскольку они весят больше, чем соотвествующие им бинарые файлы. + Для хранения и передачи данных по сети могут использоваться файлы разных форматов. Текстовые файлы удобны для чтения человеку, поэтому они используются, например, для файлов конфигурации. Но передавать данные в текстовых форматах по сети не всегда рационально, поскольку они весят больше, чем соответствующие им бинарные файлы. - Текстовые форматы - [JSON (JavaScript Object Notation)](https://ru.wikipedia.org/wiki/JSON) @@ -1145,7 +1145,7 @@ - [XML (eXtensible Markup Language)](https://ru.wikipedia.org/wiki/XML) > Формат более близкий к HTML. Здесь данные оборачиваются в открывающие и закрывающие теги. - - Бинарыне форматы + - Бинарные форматы - [Message Pack](https://msgpack.org/) > Бинарный аналог JSON. Позволяет упаковывать данные на 15-20% эффективнее. - [BSON (Binary JavaScript Object Notation)](https://ru.wikipedia.org/wiki/BSON) @@ -1171,7 +1171,7 @@ Компьютеры работают только с числами, а если точнее только с 0 и 1. Как преобразовывать числа из разных систем счисления в двоичную, уже понятно. Но с текстом производить такие преобразования не получится. Именно поэтому были придуманы специальные таблицы, называемые [кодировками](https://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D0%B1%D0%BE%D1%80_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%BE%D0%B2), в которых текстовым символам присваиваются числовые эквиваленты. - [ASCII (American standard code for information interchange)](https://ru.wikipedia.org/wiki/ASCII) - > Самая простая кодировка, созданная специльно для американского алфавита. Состоит из 128 символов. + > Самая простая кодировка, созданная специально для американского алфавита. Состоит из 128 символов. - [Unicode](https://ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4) > Это международная таблица символов, которая помимо английского алфавита, содержит алфавиты почти всех стран. Способна вместить в себя более миллиона различных символов (на данный момент таблица заполнена на полностью). - [UTF-8](https://ru.wikipedia.org/wiki/UTF-8) @@ -1194,7 +1194,7 @@ На этом этапе Вам предстоит выбрать для изучения один из языков программирования. В открытом доступе полно информации по различным языкам, (книги, курсы, тематические сайты и т.д.) поэтому с у Вас не должно возникнуть проблем. -> Ниже приведен список конкретных языков, которые [лично по моему мнению](https://github.com/cheatsnake) хорошо подходят для backend-разработки (⚠️ может не совпадать с мнением других людей, в том числе более компитентных в этом вопросе). +> Ниже приведен список конкретных языков, которые [лично по моему мнению](https://github.com/cheatsnake) хорошо подходят для backend-разработки (⚠️ может не совпадать с мнением других людей, в том числе более компетентных в этом вопросе). - [Python](https://ru.wikipedia.org/wiki/Python) > Очень популярный язык с широким спектром применений. Лёгкий в изучении, благодаря простому синтаксису. @@ -1203,7 +1203,7 @@ - [Go](https://ru.wikipedia.org/wiki/Go) > Язык созданный внутри компании Google. Создавался специально для высоконагруженной серверной разработки. Минималистичный синтаксис, высокая производительность и богатая стандартная библиотека. - [Kotlin](https://ru.wikipedia.org/wiki/Kotlin) - > Этакая современная версия [Java](https://ru.wikipedia.org/wiki/Java). Более простой и локаничный синтаксис, лучшая типобезопасность, наличие встроенных инструментов для многопоточности. Один из лучших выборов для разработки под Android. + > Этакая современная версия [Java](https://ru.wikipedia.org/wiki/Java). Более простой и лаконичный синтаксис, лучшая типобезопасность, наличие встроенных инструментов для многопоточности. Один из лучших выборов для разработки под Android. После того как вы определились с ЯП, советую поискать специальный [awesome-репозиторий](https://github.com/sindresorhus/awesome#programming-languages) – ресурс в котором собрано огромное количество полезных ссылок на материалы под Ваш ЯП (библиотеки, шпаргалки, блоги, сайты и т.д). @@ -1217,7 +1217,7 @@ - [В зависимости от уровня языка](https://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F#%D0%AF%D0%B7%D1%8B%D0%BA%D0%B8_%D0%BD%D0%B8%D0%B7%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B8_%D0%B2%D1%8B%D1%81%D0%BE%D0%BA%D0%BE%D0%B3%D0%BE_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F) - Языки низкого уровня - > Максимально близкие к машинному коду, сложные в написании, но максимально прозводительные. Как правило предоставляют доступ ко всем ресурсам компьютера. + > Максимально близкие к машинному коду, сложные в написании, но максимально производительные. Как правило предоставляют доступ ко всем ресурсам компьютера. - Языки высокого уровня > Имеют достаточно большой уровень абстракции, за счет чего достигается простота и удобство написания. Как правило безопаснее, поскольку не предоставляют доступ ко всем ресурсам компьютера. - [Компилируемые, интерпретируемые и встраиваемые языки](https://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F#%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5,_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%B8_%D0%B2%D1%81%D1%82%D1%80%D0%B0%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B8) @@ -1272,7 +1272,7 @@ - Стандартная библиотека > Здесь имеется ввиду встроенные возможности языка для манипуляции со строками, числами, массивами и т.д. - Регулярные выражения - > Мощный интсрумент для работы со строками. Обязательно ознакомтесь с этим в своем ЯП, хотя бы на базовом уровне. + > Мощный инструмент для работы со строками. Обязательно ознакомьтесь с этим в своем ЯП, хотя бы на базовом уровне. - Пакетный менеджер > Рано или поздно, возникнет желание воспользоваться сторонними библиотеками. @@ -1394,11 +1394,11 @@ > Здесь данные представляются в виде объектов с набором атрибутов и методов. Подходят для тех случаев, когда требуется высокопроизводительная обработка данных, имеющих сложную структуру. - [Распределенные](https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%91%D0%BD%D0%BD%D0%B0%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85) > Состоят из нескольких частей, расположенных на разных компьютерах (серверах). Такие БД могут полностью исключать дублирование информации, либо полностью её дублировать в каждой распределенной копии (например, как [блокчейн](https://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE%D0%BA%D1%87%D0%B5%D0%B9%D0%BD)) - - [Нереляционные (NoSQL)](https://ru.wikipedia.org/wiki/NoSQL) + - [Не реляционные (NoSQL)](https://ru.wikipedia.org/wiki/NoSQL) > Хранят и обрабатывают неструктурированные или слабоструктурированные данные. Этот тип БД подразделяется на подтипы: > - [Модель ключ-значение](https://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%C2%AB%D0%BA%D0%BB%D1%8E%D1%87-%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%C2%BB)
> - [Семейство столбцов](https://ru.wikipedia.org/wiki/NoSQL#%D0%A1%D0%B5%D0%BC%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%BE_%D1%81%D1%82%D0%BE%D0%BB%D0%B1%D1%86%D0%BE%D0%B2) (строки и столбцы используются как ключи)
- > - [Документоориентированные](https://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D0%A1%D0%A3%D0%91%D0%94) (хранят данные в виде иерархии документов)
+ > - [Документо-ориентированные](https://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D0%A1%D0%A3%D0%91%D0%94) (хранят данные в виде иерархии документов)
> - [Графовые](https://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D1%84%D0%BE%D0%B2%D0%B0%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85) (применяются для данных с большим количеством связей)
@@ -1439,7 +1439,7 @@ isMarried BOOLEAN # true/false ); ``` - - Основыне типы данных + - Основные типы данных > - INT (целые числа от -2^32 до +2^32) > - FLOAT / DOUBLE / DECIMAL (дробные числа) > - CHAR / VARCHAR / TEXT (строки) @@ -1522,9 +1522,9 @@ # ALTER TABLE ## Добавить новую колонку city к таблицe users ALTER TABLE users ADD COLUMN city VARCHAR(50); - ## Удалить колонку isMarried из тиблицы users + ## Удалить колонку isMarried из таблицы users ALTER TABLE users DROP COLUMN isMarried; - ## Переименовать колокнку firstName в fName в таблицe users + ## Переименовать колонку firstName в fName в таблицe users ALTER TABLE users RENAME COLUMN firstName TO fName; ## Переименовать таблицу users в consumers ALTER TABLE users RENAME TO consumers; @@ -1532,7 +1532,7 @@ - Изменение данных в таблице ```sql # UPDATE - ## Изменить в таблицe users записть с id = 1 + ## Изменить в таблицe users записать с id = 1 UPDATE users SET firstName = 'Kale', age = 33 WHERE id = 1; ## Изменить записи, где gender = 'female' UPDATE users SET city = 'Paris' WHERE gender = 'famale'; @@ -1569,7 +1569,7 @@ - Объединение таблиц - Запрос данных из нескольких таблиц > Оператор `JOIN`; Комбинации с другими операторами; типы JOIN: (внешние/внутренние, левое/правое, перекресные, полные) - - Свзяи между таблицами + - Связи между таблицами > Ссылки из одной таблицы на другую; внешние ключи (FOREIGN KEY) - Подзапросы > Запрос внутри другого запроса SQL @@ -1594,13 +1594,13 @@ - ### MongoDB - [MongoDB](https://ru.wikipedia.org/wiki/MongoDB) – документоориентированная БД (является классическим примером [NoSQL](https://ru.wikipedia.org/wiki/NoSQL) баз данных), не требующая описания схемы таблиц. Использует JSON-подобные документы и схему БД. + [MongoDB](https://ru.wikipedia.org/wiki/MongoDB) – документо-ориентированная БД (является классическим примером [NoSQL](https://ru.wikipedia.org/wiki/NoSQL) баз данных), не требующая описания схемы таблиц. Использует JSON-подобные документы и схему БД. - Основные команды - Подготовка БД ```js show dbs // показать список всех БД - use db_name // подкючится/создать БД с именем db_name + use db_name // подключиться/создать БД с именем db_name db // вывести имя текущей базы данных db.createCollection("users") // создать коллекцию "notes" show collections // показать список коллекций в текущей БД @@ -1643,7 +1643,7 @@ ``` - Изменение элементов ```js - // Полное изменение элемента (первый аргрумент - критерий поиска) + // Полное изменение элемента (первый аргумент - критерий поиска) db.users.updateOne({name: "Alex"}, {новые_данные}) // Изменение определенных полей элемента db.users.updateOne({name: "Alex"}, {$set: {age: 28, isMarried: true}}) @@ -1681,7 +1681,7 @@ [REST (Representational State Transfer)](https://ru.wikipedia.org/wiki/REST) – архитектурный подход, который описывает набор правил того, как программисту организовать написание кода серверного приложения, чтобы все системы легко обменивались данными и приложение можно было легко масштабировать. При построении REST API широко используются методы HTTP-протокола. Основные правила написания хорошего REST API: - - Каждый URL-эндпоинт должен быть существитвельным + - Каждый URL-эндпоинт должен быть существительным > Для выполнения разных операций (создание/получение/изменение/удаление) этот эндпоинт должен реализовывать обработчики на соответствующие HTTP-методы. - Использование множественных названий > Например эндпоинт на получение записи по id выглядит так: `/task/:id`, а для получения нескольких записей так: `/tasks` @@ -1744,7 +1744,7 @@ > `CONNECTING`, `OPEN`, `CLOSING`, `CLOSED`. - События > `Open`, `Message`, `Error`, `Close`. - - Коды закртыия соединения + - Коды закрытия соединения > `1000`, `1001`, `1006`, `1009`, `1011` [и т.д.](https://datatracker.ietf.org/doc/html/rfc6455#section-7.4.1)
@@ -1848,7 +1848,7 @@ - ### Docker - [Docker](https://ru.wikipedia.org/wiki/Docker) - специальная программа, которая позволяет запускать изолированные песочницы (контейнеры) с различным предустановленным окружением (будь-то определенная операционная система, база данных и т.д.). Технология [контейнеризации](https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F), которую предоставляет Docker, схожа с виртуальными машинами. Но, в отличие от виртуальных машин, контейнеры не создают такой дополнительной нагрузки, поскольку используют ядро хостовой ОС. + [Docker](https://ru.wikipedia.org/wiki/Docker) - специальная программа, которая позволяет запускать изолированные песочницы (контейнеры) с различным предустановленным окружением (будь то определенная операционная система, база данных и т.д.). Технология [контейнеризации](https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F), которую предоставляет Docker, схожа с виртуальными машинами. Но, в отличие от виртуальных машин, контейнеры не создают такой дополнительной нагрузки, поскольку используют ядро хостовой ОС. - Образ (image) > Специальный фиксированный шаблон, в котором содержится описание среды для запуска приложения (ОС, исходный код, библиотеки, переменные окружения, файлы конфигурации и т.д.). Образы можно скачивать с [официального сайта](https://hub.docker.com/search?type=image) и на их основе создавать свои. @@ -1953,9 +1953,9 @@

Message queue

- При создании масштабной backend-системы может возникать проблема коммуникации между большим количеством микросервисов. Чтобы не усложнять уже имеющиеся сервисы (налаживать надеждную систему коммуникации, распределять нагрузку, предусматривать различные ошибки и т.д.) можно использовать отдельный сервис, который назвается [брокером сообщений (очередью сообщений)](https://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%BE%D0%BA%D0%B5%D1%80_%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B9). + При создании масштабной backend-системы может возникать проблема коммуникации между большим количеством микросервисов. Чтобы не усложнять уже имеющиеся сервисы (налаживать надёжную систему коммуникации, распределять нагрузку, предусматривать различные ошибки и т.д.) можно использовать отдельный сервис, который называется [брокером сообщений (очередью сообщений)](https://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%BE%D0%BA%D0%B5%D1%80_%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B9). - Брокер берет на себя ответсвенность создания надежной и отказоустойчивой системы коммуникации между сервисами (выполняет балансировку, гарантирует доставки, мониторит получателей, ведёт логи, буферизацию и т.д.) + Брокер берет на себя ответственность создания надежной и отказоустойчивой системы коммуникации между сервисами (выполняет балансировку, гарантирует доставки, мониторит получателей, ведёт логи, буферизацию и т.д.) Под сообщением понимается обычный HTTP запрос/ответ с данными определенного формата. @@ -2007,7 +2007,7 @@ - Кэширование файлов и картинок > Регулируется заголовком [Expires](https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/Expires), который задает время актуальности данных из кэша. Из минусов, можно отметить то, что если данные на сервере изменились, то клиент не узнает об этом пока не закончится время действия заголовка или кэш не будет сброшен клиентом вручную. - Кэширование HTTPS - > Заголовок [Strict-Transport-Security](https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/Strict-Transport-Security) позволяет закешировать информацию о том, что ресурс досупен по протоколу HTTPS и не нужно дожидаться перенаправления. + > Заголовок [Strict-Transport-Security](https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/Strict-Transport-Security) позволяет закешировать информацию о том, что ресурс доступен по протоколу HTTPS и не нужно дожидаться перенаправления. - Кэширование центра сертификации > Сохранение информации о достоверности сертификата веб-сайта. @@ -2026,7 +2026,7 @@ - ### Redis - [Redis](https://redis.io/) – быстрое хранилище данных работающее со струкрурами типа _ключ-значение_. Может использоватся в качестве базы данных, кэша, брокера сообщений или очереди. + [Redis](https://redis.io/) – быстрое хранилище данных работающее со структурами типа _ключ-значение_. Может использоваться в качестве базы данных, кэша, брокера сообщений или очереди. - Типы данных > Строки / Списки / Множества (sets) / Хэш-таблицы (hashes) / Упорядоченные множества (sorted sets) @@ -2034,7 +2034,7 @@ ```bash SET key "value" # установка ключа key со значение "value" GET key # получить значение по указанному ключу - SETNX key "data" # создание ключа и установика значения, если ключ еще не существует + SETNX key "data" # создание ключа и установщика значения, если ключ еще не существует MSET key1 "1" key2 "2" key3 "3" # установка нескольких ключей MGET key1 key2 key3 # получение значений сразу по нескольким ключам DEL key # удалить пару ключ-значение @@ -2069,7 +2069,7 @@ - ### Memcached - [Memcached](https://ru.wikipedia.org/wiki/Memcached) – программа-демон которая реализует высокопроизводительное кэширование в оперативной памяти на основе пар _ключ-значение_. В отличие от Redis не может являться надеждным и долговременным хранилищем, поэтому подходит только для кэша. + [Memcached](https://ru.wikipedia.org/wiki/Memcached) – программа-демон которая реализует высокопроизводительное кэширование в оперативной памяти на основе пар _ключ-значение_. В отличие от Redis не может являться надёжным и долговременным хранилищем, поэтому подходит только для кэша.
🔗 Ссылки на материалы @@ -2161,7 +2161,7 @@ [Аунтификация](https://ru.wikipedia.org/wiki/%D0%90%D1%83%D1%82%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F) – процедура проверки подлинности пользователя. Как правило выполняется путем сравнения введенного пользователем пароля с паролем, сохраненным в базе данных. Так же, в это понятие часто включают и [идентификацию](https://ru.wikipedia.org/wiki/%D0%98%D0%B4%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B)) – процедуру выявления пользователя по его уникальному идентификатору (как правило это обычный логин или email). Это нужно, чтобы точно знать для какого пользователя выполняется проверка подлинности. - [Авторизация](https://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F) – процедура выдачи прав доступа определенному пользователю на выполнение определенных операций. Например обычные пользователи интрернет-магазина могут просматривать товары, добавлять их в корзину. А вот добавлять новые товары или удалять уже имеющиеся могут только администраторы. + [Авторизация](https://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F) – процедура выдачи прав доступа определенному пользователю на выполнение определенных операций. Например обычные пользователи интернет-магазина могут просматривать товары, добавлять их в корзину. А вот добавлять новые товары или удалять уже имеющиеся могут только администраторы. - [Basic Authentication](https://developer.mozilla.org/ru/docs/Web/HTTP/Authentication#basic_authentication_scheme) > Наиболее простая схема аунтификации, при которой username и password пользователя передаются в заголовке [Authorization](https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/Authorization) в незашифрованном виде (base64-encoded). При использовании HTTPS является относительно безопасным. @@ -2193,7 +2193,7 @@ - ### SSL/TLS - [SSL (Secure Socket Layer)](https://ru.wikipedia.org/wiki/SSL) и [TLS (Transport Layer Security)](https://ru.wikipedia.org/wiki/TLS) – это криптографические протоколы, которые обеспечивают защищёную передачу данных между двумя компьютерами в сети. По сути эти протоколы работают одинаково и отличий у них нет. SSL считается устаревшим, хотя все еще используется для поддержки старых устройств. + [SSL (Secure Socket Layer)](https://ru.wikipedia.org/wiki/SSL) и [TLS (Transport Layer Security)](https://ru.wikipedia.org/wiki/TLS) – это криптографические протоколы, которые обеспечивают защищённую передачу данных между двумя компьютерами в сети. По сути эти протоколы работают одинаково и отличий у них нет. SSL считается устаревшим, хотя все еще используется для поддержки старых устройств.
🔗 Ссылки на материалы @@ -2216,7 +2216,7 @@ - ### Unit-тесты - Самый простой вид тестов. Как правило, около 70-80% от всех тестов занимают именно [unit-тесты](https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5). «Unit» означает, что тестируется не вся система в целом, а небольшие и отдельные её части (функции, методы, компоненты и т.д.) в изоляции от других. Всё зависимое внешнее окружнеие, как правило, покрывается [моками (mocks)](https://gist.github.com/vertigra/696e9d92dc72070584e556e2169e850d). + Самый простой вид тестов. Как правило, около 70-80% от всех тестов занимают именно [unit-тесты](https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5). «Unit» означает, что тестируется не вся система в целом, а небольшие и отдельные её части (функции, методы, компоненты и т.д.) в изоляции от других. Всё зависимое внешнее окружение, как правило, покрывается [моками (mocks)](https://gist.github.com/vertigra/696e9d92dc72070584e556e2169e850d).
🔗 Ссылки на материалы @@ -2314,7 +2314,7 @@ - ### Паттерны проектирования - - [Пораждающие паттерны](https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D0%BE%D0%B6%D0%B4%D0%B0%D1%8E%D1%89%D0%B8%D0%B5_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F) + - [Порождающие паттерны](https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D0%BE%D0%B6%D0%B4%D0%B0%D1%8E%D1%89%D0%B8%D0%B5_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F) - [Factory (Фабрика)](https://refactoring.guru/ru/design-patterns/factory-method) - [Abstract factory (Абстрактная фабрика)](https://refactoring.guru/ru/design-patterns/abstract-factory) - [Builder (Строитель)](https://refactoring.guru/ru/design-patterns/builder)