c классом “MarkedToRemove”
87 |
88 | ```js
89 | Array.prototype.slice.call(document.getElementsByTagName("div")).forEach(function (e) {
90 | if (e.getAttribute("class") === "MarkedToRemove"){
91 | e.parentNode.removeChild(e);
92 | }
93 | });
94 | ```
95 |
96 |
97 |
98 | # Задания с CSS
99 |
100 | Правило css, меняющее цвет фона на желтый, если ссылка посещена и не лежит в классе "news"
101 |
102 | ```css
103 | a:visited:not([class*="news"]) {
104 | background: yellow;
105 | }
106 | ```
107 |
108 | Написать css правило, которое при клике на ссылку добавляет ей подчеркивание, всем кроме ссылок в теге h1
109 |
110 | ```css
111 | a:not(h1) :visited, :active {
112 | text-decoration: underline;
113 | }
114 | ```
115 |
116 | css правило, выравнивающее все блоки
внутри формы с id=”sampleForm” по правому краю
117 |
118 | ```css
119 | #sampleForm div{
120 | text-align:right
121 | }
122 | ```
123 |
124 | # Задания по сервлетам
125 |
126 | Написать сервлет, который принимает из http запроса параметр name и выводит его. Если параметр не обнаружен то вывести Anonymous user
127 | ``` java
128 | public class NameServlet extends HttpServlet {
129 | public void service(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
130 | PrintWriter out = response.getWriter();
131 | if (request.getParameter("name") != null ) {
132 | out.println(request.getParameter("name"));
133 | } else {
134 | out.println("Anonymous user");
135 | }
136 | }
137 | }
138 | ```
139 |
140 | Код фильтра запросов, запрещающий доступ к приложению неавторизированным пользователям(у неавт пол в запросе отсутствует заголовок x-application-user
141 |
142 | ```java
143 | public class TestFilter implements Filter {
144 |
145 | @Override
146 | public void init(FilterConfig filterConfig) throws ServletException {
147 | }
148 |
149 | @Override
150 | public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
151 |
152 | HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
153 |
154 | if(httpServletRequest.getHeader("x-application-user") == null){
155 | httpServletRequest.getRequestDispatcher("/").forward(servletRequest, servletResponse);
156 | }
157 |
158 | filterChain.doFilter(servletRequest, servletResponse);
159 | }
160 |
161 | @Override
162 | public void destroy() {
163 |
164 | }
165 | }
166 | ```
167 |
168 | Написать сервлет, который будет возвращать все запросы на переадресацию на сайт google.com
169 |
170 | ```java
171 | public class RedirectServlet extends HttpServlet {
172 | RedirectFilter filter = new RedirectFilter;
173 | public void service(HttpServletRequest request, HttpServletResponse response) throws IOExeption, ServletException {
174 | filter.doFilter(request, response);
175 | int status = response.getStatus();
176 | if (status == 302) {
177 | response.sendRedirect("http://google.com");
178 | }
179 | }
180 | }
181 | ```
182 |
183 | # JSP
184 |
185 | Страница JSP, проверяющая есть ли /какой-то параметр/ в запросе и если нету выводящая сообщение об ошибке
186 |
187 | ```jsp
188 | <%
189 | if(request.getAttribute(“123”)==null){
190 | String error = "Please set '123' param";
191 | }
192 | %>
193 |
${error}
194 | ```
195 |
--------------------------------------------------------------------------------
/Internet-Applications-Development/glassfish.md:
--------------------------------------------------------------------------------
1 | # GlassFish
2 |
3 | ## Первоначальная настройка
4 |
5 | Добавить в `.bashrc`:
6 |
7 | ```bash
8 | export JAVA_HOME=/usr/jdk/jdk1.8.0
9 | export PATH=$JAVA_HOME/bin:$PATH
10 | export PATH=/home/s242585/glassfish4/bin:$PATH
11 | ```
12 |
13 | Строки выше позволят использовать по умолчанию JDK 8 и Glassfish 4.1.2.
14 | Для применения изменений нужно перезапустить `bash`.
15 |
16 | Создать домен:
17 |
18 | ```bash
19 | asadmin create-domain --domaindir ~/YOUR_DIR --portbase [portbase из таблицы с вариантами]
20 | ```
21 |
22 | `YOUR_DIR` -- путь к директории где будет находиться домен
23 |
24 | ## Запуск домена
25 |
26 | ```bash
27 | asadmin start-domain --domaindir ~/YOUR_DIR
28 | ```
29 |
30 | При запуске будет выведено подобное сообщение:
31 | ```
32 | Waiting for domain to start .....
33 | Successfully started the domain : ...
34 | domain Location: ...
35 | Log File: ...
36 | Admin Port: [port]
37 | Command start-domain executed successfully.
38 | ```
39 |
40 | Нужно запомнить admin port для выполнения дальнейших команд.
41 |
42 | ## Загрузка приложения
43 |
44 | Собранный `.war` нужно залить на сервер, затем запустить:
45 |
46 | ```bash
47 | asadmin deploy --force true --port [admin port] path/to/war.war
48 | ```
49 |
50 | Параметр `--force true` нужен для того, чтобы перезаписать приложение,
51 | если оно уже было загружено.
52 |
53 | ## Проброс портов на локальную машину
54 |
55 | Glassfish из внешнего мира недоступен, поэтому...
56 |
57 | Запуск глассфиша
58 |
59 | `asadmin start-domain —domaindir ~/YOUR_DIR`
60 |
61 | Логи лежат в `~/YOUR_DIR/logs/server.log`
62 |
63 | __Проброс портов__
64 |
65 | http port - portbase + 80
66 |
67 | админка Glassfish - portbase + 48
68 | `ssh -L LOCAL_PORT:localhost:GLASSFISH_PORT helios`
69 |
70 | терминалы с ssh -L не закрывать!!
71 |
--------------------------------------------------------------------------------
/Modelling/answers.md:
--------------------------------------------------------------------------------
1 | # Ответы для тестов по Моделированию (etest)
2 | [Туть](https://johnny-keker.github.io/etest-parser/index.html)
3 |
--------------------------------------------------------------------------------
/Programming/Lab6.md:
--------------------------------------------------------------------------------
1 | # 1. Клиент – сервер
2 |
3 | вычислительная или сетевая архитектура, в которой задания или сетевая нагрузка распределены между поставщиками услуг, называемыми серверами, и заказчиками услуг, называемыми клиентами. Фактически клиент и сервер — это программное обеспечение. Типичным клиентом является браузер. В качестве сервера можно привести следующие примеры: все HTTP сервера (в частности Apache), MySQL сервер
4 | TCP and UDP
5 |
6 | Транспортный уровень стека сетевых протоколов. Две конечные точки (хосты) при установке соединения по этим протоколам идентифицируются согласно номерам портов. Номера портов, используемые для конкретных специфических целей, выделяет и регистрирует IANA (Internet Assigned Numbers Authority).
7 | IANA - функция управления пространствами IP-адресов, доменов верхнего уровня, а также регистрирующая типы данных MIME и параметры прочих протоколов Интернета.
8 | Количество портов ограничено с учётом 16-битной адресации (216=65536, начало — «0»). Все порты разделены на три диапазона — общеизвестные (или системные, 0—1023), зарегистрированные (или пользовательские, 1024—49151) и динамические (или частные, 49152—65535).
9 |
10 | - TCP – транспортный протокол передачи данных в сетях TCP/IP, предварительно устанавливающий соединение с сетью. (Электронная почта, загрузка)
11 | - UDP – транспортный протокол, передающий сообщения-датаграммы без необходимости установки соединения в IP-сети. (Голосовые данные, видео)
12 | - TCP гарантирует доставку пакетов данных в неизменных виде, последовательности и без потерь, UDP ничего не гарантирует.
13 | - TCP нумерует пакеты при передаче, а UDP нет
14 | - TCP работает в дуплексном режиме, в одном пакете можно отправлять информацию и подтверждать получение предыдущего пакета.
15 | - TCP требует заранее установленного соединения, UDP соединения не требует, у него это просто поток данных.
16 | - UDP обеспечивает более высокую скорость передачи данных.
17 | - TCP надежнее и осуществляет контроль над процессом обмена данными.
18 | - UDP предпочтительнее для программ, воспроизводящих потоковое видео, видеофонии и телефонии, сетевых игр.
19 | - UPD не содержит функций восстановления данных
20 |
21 | # Заголовок UDP
22 |
23 | 16 битный порт источника > Указание порта источника для UDP необязательно. Если это поле используется, получатель может отправить ответ этому порту.
24 |
25 | 16 битный порт назначения > Номер порта назначения
26 |
27 | 16 битная длина UDP > Длина сообщения, включая заголовок и данные.
28 |
29 | 16 битная контрольная сумма > Контрольная сумма заголовка и данных для проверки
30 |
31 | # Заголовок TCP
32 |
33 | 16 битный порт источника > Номер порта источника
34 |
35 | 16 битный порт назначения > Номер порта назначения
36 |
37 | 32 битный последовательный номер > Последовательный номер генерируется источником и используется назначением, чтобы переупорядочить пакеты для создания исходного сообщения и отправить подтверждение источнику.
38 |
39 | 32 битный номер подтверждения > Если установлен бит АСК поля "Управление", в данном поле содержит следующий ожидаемый последовательный номер.
40 | 4 бита длина заголовка > Информация о начале пакета данных.
41 | резерв > Резервируются для будущего использования.
42 |
43 | 16 битная контрольная сумма > Контрольная сумма заголовка и данных; по ней определяется, был ли искажен пакет.
44 |
45 | 16 битный указатель срочности > В этом поле целевое устройство получает информацию о срочности данных.
46 |
47 | Параметры > Необязательные значения, которые указываются при необходимости.
48 |
49 | # Сетевая модель OSI
50 |
51 | сетевая модель стека сетевых протоколов OSI/ISO. Посредством данной модели различные сетевые устройства могут взаимодействовать друг с другом. Модель определяет различные уровни взаимодействия систем. Каждый уровень выполняет определённые функции при таком взаимодействии.
52 |
53 | ## Прикладной уровень
54 |
55 | __Прикладной уровень__ — верхний уровень модели, обеспечивающий взаимодействие пользовательских приложений с сетью. Уровень разрешает приложениям пользователя иметь доступ к сетевым службам, таким, как обработчик запросов к базам данных, доступ к файлам, пересылке электронной почты. Также отвечает за передачу служебной информации, предоставляет приложениям информацию об ошибках и формирует запросы к уровню представления.
56 | позволяет приложениям использовать сетевые службы:
57 |
58 | - удалённый доступ к файлам и базам данных,
59 | - пересылка электронной почты;
60 | - отвечает за передачу служебной информации;
61 | - предоставляет приложениям информацию об ошибках;
62 | - формирует запросы к уровню представления.
63 |
64 | ## Представительский уровень
65 |
66 | обеспечивает преобразование протоколов и кодирование/декодирование данных. Запросы приложений, полученные с прикладного уровня, на уровне представления преобразуются в формат для передачи по сети, а полученные из сети данные преобразуются в формат приложений. На этом уровне может осуществляться сжатие/распаковка или шифрование/дешифрование, а также перенаправление запросов другому сетевому ресурсу, если они не могут быть обработаны локально.
67 |
68 | ## Сеансовый уровень
69 |
70 | Сеансовый уровень модели обеспечивает поддержание сеанса связи, позволяя приложениям взаимодействовать между собой длительное время. Уровень управляет созданием/завершением сеанса, обменом информацией, синхронизацией задач, определением права на передачу данных и поддержанием сеанса в периоды неактивности приложений. Синхронизация передачи обеспечивается помещением в поток данных контрольных точек, начиная с которых возобновляется процесс при нарушении взаимодействия.
71 |
72 | ## Транспортный уровень
73 |
74 | Транспортный уровень модели предназначен для обеспечения надёжной передачи данных от отправителя к получателю. Уровень надёжности может варьироваться в широких пределах. При этом не важно, какие данные передаются, откуда и куда, то есть, он предоставляет сам механизм передачи.
75 |
76 | ## Сетевой уровень
77 |
78 | __Сетевой уровень__ —предназначается для определения пути передачи данных. Отвечает за трансляцию логических адресов и имён в физические, определение кратчайших маршрутов, коммутацию и маршрутизацию, отслеживание неполадок и заторов в сети.
79 |
80 | ## Канальный уровень
81 |
82 | Канальный уровень предназначен для обеспечения взаимодействия сетей на физическом уровне ( передачи данных узлам, находящимся в том же сегменте локальной сети, не пересекают границ сетевого сегмента) и контроля за ошибками, которые могут возникнуть. Полученные с физического уровня данные, представленные в битах, он упаковывает в кадры, проверяет их на целостность и, если нужно, исправляет ошибки (формирует повторный запрос повреждённого кадра) и отправляет на сетевой уровень.
83 |
84 | Заголовок кадра содержит аппаратные адреса отправителя и получателя, что позволяет определить, какое устройство отправило кадр и какое устройство должно получить и обработать его. Когда устройства пытаются использовать среду одновременно, возникают коллизии кадров. Протоколы канального уровня выявляют такие случаи и обеспечивают механизмы для уменьшения их количества или же их предотвращения.
85 |
86 | ## Физический уровень
87 |
88 | который определяет метод передачи данных, представленных в двоичном виде, от одного устройства (компьютера) к другому.
89 |
90 | # Процессы и потоки
91 |
92 | __Процесс__ — экземпляр программы во время выполнения, независимый объект, которому выделены системные ресурсы (например, процессорное время и память). Каждый процесс выполняется в отдельном адресном пространстве: один процесс не может получить доступ к переменным и структурам данных другого. Если процесс хочет получить доступ к чужим ресурсам, необходимо использовать межпроцессное взаимодействие.
93 |
94 | Процесс располагает определенными ресурсами. Он размещен в некотором виртуальном адресном пространстве, содержащем образ этого процесса. Кроме того, процесс управляет другими ресурсами (файлы, устройства ввода / вывода и т.д.).
95 |
96 | Процесс подвержен диспетчеризации. Он определяет порядок выполнения одной или нескольких программ, при этом выполнение может перекрываться другими процессами. Каждый процесс имеет состояние выполнения и приоритет диспетчеризации.
97 |
98 | Один поток – это одна единица исполнения кода. Каждый поток последовательно выполняет инструкции процесса, которому он принадлежит, параллельно с другими потоками этого процесса.
99 |
100 | Все потоки процесса разделяют общие ресурсы. Изменения, вызванные одним потоком, становятся немедленно доступны другим.
101 | При корректной реализации потоки имеют определенные преимущества перед процессами. Им требуется:
102 |
103 | - меньше времени для создания нового потока, поскольку создаваемый поток использует адресное пространство текущего процесса;
104 | - меньше времени для завершения потока;
105 | - меньше времени для переключения между двумя потоками в пределах процесса;
106 | - меньше коммуникационных расходов, поскольку потоки разделяют все ресурсы, и в частности адресное пространство. Данные, продуцируемые одним из потоков, немедленно становятся доступными всем другим потокам.
107 |
--------------------------------------------------------------------------------
/Programming/Lab7.md:
--------------------------------------------------------------------------------
1 | # Трофеи с отчетов
2 |
3 | ## AWT vs Swing vs SWT
4 |
5 | AWT -- набор независимых от платформы виджетов, имеющих имплементацию для каждой платформы.
6 |
7 | Для передачи событий, источники (event sources) -- т.е. компоненты,
8 | например Button, содержат в себе список слушателей (event listeners),
9 | которые вызываются в нужный момент. Для разных типов события есть разные классы слушателей,
10 | которые добавляются через разные методы (`addMouseListeners`, `addActionListeners`, etc.)
11 |
12 | Недостаток AWT -- компоненты отрисовываются на каждой платформе по-своему, т.к. AWT использует только стандартные элементы ОС для отображения, поэтому одна и та же программа выглядит по-разному на разных системах, и вполне может иметь баги, которые появляются только на определенный ОС.
13 |
14 | В Swing виждеты отрисовываются не системными библиотеками, а самой Java, поэтому они выглядят и работают одинаково на разных ОС.
15 | У многих компонентов Swing есть прямые аналоги из AWT (`JButton` <-> `Button`), другие, более сложные, есть только в Swing (`JTree`).
16 |
17 | SWT -- кросс-платформенная оболочка для графических библиотек конкретных операционных систем.
18 | SWT разработана с использованием стандартного языка Java и получает доступ к специфичным библиотекам разничных ОС через JNI (Java Native Interface), который используется для доступа к родным визуальным компонентам системы.
19 |
20 | SWT поддерживает большинство современных ОС, также есть возможность компиляции SWT приложения в нативный бинарный код, что повышает производительность созданных приложений и не требует установки JRE.
21 |
22 | SWT использует виджеты -- это элементы графического интерфейса, имеющих стандартный внешний вид и выполняющих стандартные действия.
23 | Под виджетом подразумевают окно (диалоговое, модальное), кнопка (стандартная, радиокнопка, флаговая), список (иерархический, раскрывающийся)и т.д.
24 |
25 | ## Component, Container
26 |
27 | `Component` -- абстрактный класс-родитель для компонентов AWT. Имеет абстрактный метод `paint`, в котором наследники определяют, как отрисовывается компонент, и метод `repaint`, позволяющий пользователю вызвать перерисовку.
28 | Класс наследуется виджетами `Button`, `Label`, `TextField`, `TextArea`, `Checkbox`, и др.
29 |
30 | `Container` -- общий класс-родитель для контейнеров, которые содержат в себе компоненты AWT. Они хранятся в списке в порядке добавления, что влияет на порядок отрисовки. Два основных типа контейнеров (наследники `Container`) -- `Frame`, окно программы, и `Panel`, панель, которая содержит остальные компоненты, но должна быть внутри окна.
31 |
32 | ## Layout
33 |
34 | `Layout` -- менеджеры компоновки, особенность компоновки GUI форм в Java заключается в том, что необходимо использовать менеджеры Layout.
35 | Каждый класс, реализующий интерфейс LayoutManager, следит за списком компонентов, которые хранятся с именами типа String.
36 | Всякий раз, когда вы добавляете компонент в Panel, диспетчер размещения уведомляется об этом.
37 | Если требуется изменить размер объекта Panel, то идет обращение к диспетчеру посредством методов minimumLayoutSize и preferredLayoutSize.
38 | В каждом компоненте, который приходится обрабатывать диспетчеру, должны присутствовать реализации методов preferredSize и minimumSize.
39 | Эти методы должны возвращать предпочтительный и минимальный размеры для прорисовки компонента, соответственно.
40 | Диспетчер размещения по возможности будет пытаться удовлетворить эти запросы, в то же время заботясь о целостности всей картины взаимного расположения компонентов.
41 |
42 | Часто используемые менеджеры компоновки:
43 | - `FlowLayout` -- реализует простой стиль размещения, при котором компоненты располагаются, начиная с левого верхнего угла, слева направо и сверху вниз. Компоненты отделяются друг от друга небольшими промежутками.
44 | - `BorderLayout` -- реализует обычный стиль размещения для окон верхнего уровня, в котором предусмотрено четыре узких компонента фиксированной ширины по краям, и одна большая область в центре, которая может расширяться и сужаться в двух направлениях, занимая все свободное пространство окна.
45 | - `GridLayout` -- размещает компоненты в простой равномерной сетке. Конструктор этого класса позволяет задавать количество строк и столбцов.
46 | - `CardLayout` -- представляет несколько различных вариантов размещения, которые можно сравнить с колодой карт. Колоду можно тасовать так, чтобы в данный момент времени наверху была только одна из карт.
47 | - `Insets` -- используется для того, чтобы вставлять в объект Panel границы, напоминающие горизонтальные и вертикальные промежутки между объектами, которые делает диспетчер размещения.
48 |
49 | ## Обработка событий в Swing
50 |
51 | В Swing все обновления интерфейса (напр. изменения текста у кнопки) должны происходить в потоке диспетчера событий (event dispatching thread). Это необходимо потому, что компоненты Swing не являются потокобезопасными.
52 |
53 | Поток интерфейса фактически выполняет бесконечный цикл, который вызывает методы обработки событий по действию пользователя. Другие потоки могут отправить на выполнение в потоке интерфейса какой-либо код, вызвав `EventQueue.invokeLater(Runnable)`.
54 |
55 | ## JavaFX
56 |
57 | JavaFX был создан как последователь Swing. Он включает поддержку CSS, что упрощает кастомизацию интерфейса и облегчает создание переключаемых тем.
58 | Для разметки интерфейса можно использовать XML с визуальным редактором `Scene Builder`.
59 | Анимацию и специальные эффекты тоже проще делать в JavaFX, чем в Swing.
60 |
61 | Окно в JavaFX представлено классов `Stage`, компоненты содержатся в `Scene`.
62 | Сцены могут меняться, но в одно время в `Stage` может быть только одна сцена.
63 | Сцена содержит граф всех элементов (групп, компонентов), которые наследуются от класса `Node`. Еще одно важное отличие -- наличие свойств (properties), на которые можно добавить слушатели.
64 |
65 | ## Observer и графические приложения
66 |
67 | `Observer` -- это поведенческий паттерн, который позволяет объектам оповещать другие объекты об изменениях своего состояния. При этом наблюдатели могут свободно подписываться и отписываться от этим оповещиний.
68 | Наблюдатель можно часто встретить в Java коде, особенно там, где применяется событийная модель отношений между компонентами. Наблюдатель позволяет отдельным компонентам реагировать на события, происходящие в других компонентах.
69 |
70 | Примеры наблюдателя в стандартной библиотеке Java:
71 | - `java.util.Observer` / `java.util.Observable` (редко используется в реальной жизни)
72 | - Все реализации `java.util.EventListener` (практически во всем Swing-e)
73 | - `javax.servlet.http.HttpSessionBindingListener`, etc.
74 |
75 | ## События и слушатели
76 |
77 | Событие `Event` -- это объект, описывающий изменение состояния источника, с которым он связан.
78 | Например, нажатие кнопки, ввод символа с клавиатуры и т.д.
79 | Слушатель `Listener` -- это уведомляемый о некотором событии объект.
80 | Чтобы слушатель смог реагировать на определенное событие источника он должен быть им зарегистрирован, т.е. подключен к источнику.
81 | `Listener` должен реализовывать определенные методы для полученияи обработки уведомлений о событии.
82 |
83 | `Listener` находится в постоянном ожидании, пока в источнике, в котором он зарегистрирован, не наступит ожидаемое событие. При его возникновении слушатель получает управление.
84 | Так же слушателю передаюется объект события (источник), чтобы он мог правильно на него отреагировать.
85 | После обработки события слушатель возвращает управление. Таким образом, для обработки события вызываются только те слушатели, которые на него подписались, т.е. были зарегистрированы источником
86 |
87 |
88 |
--------------------------------------------------------------------------------
/Programming/Lab8.md:
--------------------------------------------------------------------------------
1 | # Интернационализация. Локализация. Хранение локализованных ресурсов.
2 |
3 | __Интернационализа́ция__ — проектирование программы таким образом, чтобы локализация была возможна без конструктивных изменений.
4 | выделение текстовых данных из кода, отображение данных с учетом местных форматов
5 |
6 | __Локализация__ - процесс адаптации программного обеспечения к культуре какой-либо страны.
7 | перевод текстов, использование соответствующих форматов данных, замена звуковой и визуальной информации
8 |
9 | ## Хранение локализованных ресурсов:
10 |
11 | ### ListResourceBundle
12 |
13 | ```java
14 | ListResourceBundle абстрактный подкласс ResourceBundle, который управляет ресурсами для локализации используя List, находящийся в классе. Ресурсы хранятся в классе-наследнике ListResourceBundle, в котором необходимо переопределить getContents и создать массив, в котором каждому элементу соответствует пара объектов “ключ”-”значение”.
15 | public class MyResources extends ListResourceBundle {
16 | protected Object[][] getContents() {
17 | return new Object[][] = { /*...*/ }
18 | }
19 | }
20 | public class MyResources_fr extends ListResourceBundle {
21 | protected Object[][] getContents() {
22 | return new Object[][] = { /*...*/}
23 | }
24 | }
25 | ```
26 |
27 | ### PropertyResourceBundle
28 |
29 | PropertyResourceBundle абстрактный подкласс ResourceBundle, который управляет ресурсами для локализации, используя ряд статических строк из файла свойств. ResourceBundle.getBundle будет автоматически искать соответствующий файл свойств и создавать a PropertyResourceBundle
30 |
31 | # Форматирование локализованных числовых данных, текста, даты и времени. Классы NumberFormat, DateFormat, MessageFormat, ChoiceFormat.
32 |
33 | ## Форматирование числовых данных:
34 | Класс java.text.NumberFormat предназначен для форматирования чисел. Это абстрактный класс, экземпляры которого можно получить с помощью методов getInstance():
35 |
36 | ```java
37 | public static final NumberFormat getInstance()
38 |
39 | public static NumberFormat getInstance(Locale inLocale)
40 | ```
41 |
42 | Полученный экземпляр NumberFormat можно использовать для форматирования чисел с помощью метода format и парсинга чисел с помощью метода parse:
43 |
44 | ```java
45 | String str1 = java.text.NumberFormat.getInstance().format(10_000_000.34);
46 | ```
47 |
48 | Класс java.text.DecimalFormat расширяет класс java.text.NumberFormat. Содержит дополнительно два конструктора, принимающих строку с форматом числа:
49 |
50 | ```
51 | public DecimalFormat(String pattern)
52 | public DecimalFormat(String pattern, DecimalFormatSymbols symbols)
53 | ```
54 |
55 | DecimalFormatSymbols, позволяет полностью настроить форматирование числа. Pattern содержит шаблон, который может содержать специальные символы:
56 |
57 | ## Форматирование даты и времени:
58 |
59 | ### Класс java.text.DateFormat.
60 |
61 | Для получения экземпляра класса:
62 |
63 | ```java
64 | public static final DateFormat getInstance()
65 | public static final DateFormat getDateInstance() // дата без времени
66 | public static final DateFormat getDateInstance(int style*)
67 | public static final DateFormat getDateInstance(int style, Locale locale)
68 |
69 | public static final DateFormat getTimeInstance() //время без даты
70 | public static final DateFormat getDateTimeInstance() //и дата и время
71 | ```
72 |
73 | *Style: DateFormat.FULL, DateFormat.LONG, DateFormat.SHORT, DateFormat.MEDIUM, DateFormat.DEFAULT.
74 |
75 | ### Форматирование и парсинг также происходит с помощью методов format и parse .
76 |
77 | Класс java.text.SimpleDateFormat наследуется от java.text.DateFormat и позволяет указать пользовательский шаблон форматирования. (G - эра, y - год, … )
78 |
79 | ### Форматирование текста:
80 |
81 | Класс MessageFormat: форматирует текст, содержащий фрагменты, представленные в виде переменных.
82 |
83 | `Solar_en.properties`
84 |
85 | msg = {0} solar eclipse will be at {1,time,short} on {1,date,short}.
86 |
87 | Статический метод MessageFormat.format() позволяет подставить значение переменных.
88 |
89 | ### Класс ChoiceFormat:
90 |
91 | ```java
92 | double limits[] = { 0.0, 0.1, 0.3, 0.7 };
93 | String labels[] = { "very low", "low", "moderate", "high" };
94 | ChoiceFormat format = new ChoiceFormat(limits, labels);
95 | System.out.println(format.format(r) + " (" + r + ").");
96 | //r == 0.0 very low(0.0)
97 | //r == 0.1 low(0.1)
98 | //r == 0.3 moderate(0.3)
99 | //r == 0.7 high(0.7)
100 | ```
101 |
102 | # Классы для представления даты и времени из пакета java.time. Преобразование темпоральных величин.
103 |
104 | ## Класс Date:
105 |
106 | Методы: boolean after(Date date), boolean before(Date date), long getTime() - возвращает количество миллисекунд, прошедших с 1 января 1970 года
107 |
108 | Почти все методы объявлены deprecated
109 |
110 | ## Класс TimeZone:
111 |
112 | Временная зона GMT и UTC
113 |
114 | ## Класс: Calendar:
115 |
116 | Абстрактный класс — преобразование из машинных в
117 | человеческие единицы
118 |
119 | java.time — основной пакет для работы с датой и
120 | временем
121 |
122 | - java.time.chrono — календарные системы
123 | - java.time.format — классы для форматирования
124 | - java.time.temporal — преобразования времени и вычисления
125 | - java.time.zone — работа с поясным временем
126 |
127 | # statement, prepared statement, callable statement
128 |
129 | Объект Statement используется для выполнения SQL-запросов к БД. Существует три типа объектов Statement. Все три служат как бы конейнерами для выполнения SQL-выражений через данное соединение: Statement, PreparedStatement,, и CallableStatement. Они специализируются на различных типах запросов: Statement используется для выполнения простых SQL-запросов без параметров; PreparedStatement используется для выполнения прекомпилированных SQL-запросов с или без входных (IN) параметров; CallableStatement используется для вызовов хранимых процедур.
130 |
131 | SQL-выражения в PreparedStatement могут иметь один или более входной (IN) параметр. Входной параметр - это параметр, чье значение не указывается при создании SQL-выражения. Вместо него в выражении на месте каждого входного параметра ставится знак ("?"). Значение каждого вопросительного знака устанавливается методами setXXX перед выполнением запроса.
132 |
133 | # Hebernate
134 | __Hibernate__ – это ORM фреймворк для Java
135 |
136 | Обеспечивает простой API для записи и получения Java-объектов в/из БД.
137 |
138 | Минимизирует доступ к БД, используя стратегии fetching.
139 |
140 | Не требует сервера приложения.
141 |
142 | Позволяет нам не работать с типами данных языка SQL, а иметь дело с привычыми нам типами данных Java.
143 |
144 | Заботится о создании связей между Java-классами и таблицами БД с помощью XML-файлов не внося изменения в программный код.
145 |
146 | Если нам неоходимо изменить БД, то достаточно лишь внести изменения в XML-файлы.
147 |
148 |
149 | # fetchType
150 |
151 | Есть два варианта загрузки полей с отношением один-ко-многим: загрузить все объекты вместе с остальными полями ( FetchType.EAGER) или загрузить его по требованию ( FetchType.LAZY), когда вы вызываете метод getИмяПоля().
152 |
153 | Когда в университете много учеников, неэффективно загружать всех его учеников, когда они не нужны. Поэтому в подобных случаях вы можете заявить, что хотите, чтобы ученики загружались, когда они действительно нужны. Это называется ленивой загрузкой.
154 |
--------------------------------------------------------------------------------
/System-Programming-Languages/rubez_2_train.md:
--------------------------------------------------------------------------------
1 | # Что такое анонимные страницы?
2 |
3 | Анонимные страницы - это данные, используемые программами и не ассоциированные с каким-либо файлом.
4 | Число анонимных страниц для конкретного процесса можно вычислить как разницу между размером резидентной части (resident)
5 | и разделяемыми страницами (share) в выводе /proc/PID/statm (информация о состоянии памяти в страницах).
6 |
7 | # Что такое таблица страниц?
8 |
9 | Таблица страниц состоит из 4-байтовых элементов. Эти элементы называются PTE (Page Table Entries)
10 | и представляют собой по сути - указатели на страницы, по формату - структуры данных.
11 |
12 | Структура таблиц:
13 |
14 | - P (Present - присутствие). Если 0, то страница не отображена на физическую память.
15 | - R / W (Read / Write - Чтение / Запись).
16 | - U / S (User / Supervisor - Пользователь / Система). Если 0, то доступ к странице разрешён только с нулевого уровня привилегий, если 1 - то со всех.
17 | - PWT (Write-Through - Сквозная запись). Когда этот флаг установлен, разрешено кэширование сквозной записи для данной страницы, когда сброшен - кэширование обратной записи.
18 | - PCD (Cache Disabled - Кэширование запрещено).
19 | - A (Accessed - Доступ). Устанавливается процессором каждый раз, когда он производит обращение к данной странице. Процессор не сбрасывает этот флаг - его может может сбросить программа, чтобы потом, через некоторое время определить, был ли доступ к этой странице, или нет.
20 | - D (Dirty - Грязный). Устанавливается каждый раз, когда процессор производит запись в данную страницу. Этот флаг также не сбрасывается процессором.
21 | - PAT (Page Table Attribute Index - Индекс атрибута таблицы страниц). Для процессоров, которые используют таблицу атрибутов страниц, этот флаг используется совместно с флагами PCD и PWT для выбора элемента в PAT, который выбирает тип памяти для страницы.
22 | - G (Global Page - Глобальная страница). Такая страница остаётся достоверной в кэшах TLB при перезагрузке регистра CR3 или переключении задач.
23 | - Биты с 9 по 11 не используются процессором.
24 | - Биты с 12 по 31 - это физический адрес
25 |
26 | Если страница не присутствует в памяти (бит P=0), то процессор не использует все остальные биты элемента PTE и программа может их использовать по своему усмотрению.
27 |
28 | # Какие аргументы принимает longjmp?
29 |
30 | `void longjmp(jmp_buf env, int val)` (Си) - переход к заранее сохраненному состоянию. (Вообще, эта штука - аналогия try/catch. `setjmp`
31 | сохраняет все необходимые указатели в структуре jmp_bu, а `longjmp` получает на вход структуру,
32 | извлекает из неё указатель следующей инструкции и указатель на вершину стека, и восстанавливает их)
33 |
34 | `jmp_buf env` - указатель на структуру, int val - значение, которое вернет setjmp() при восстановлении состояния программы (val нельзя
35 | присвоить 0, если вы это сделали, то автоматически присвоится 1)
36 |
37 | # Что такое побочный эффект?
38 |
39 | Побочный эффект возникает, когда вычисление выражение влечёт за собой изменение значения данных в приложении.
40 |
41 | x + 15 не дает побочный эффект, так как даст новое значение, но не поменяет переменную, а х++ даст побочный эффект
42 |
43 | # Опишите функцию fread() и ее аргументы.
44 |
45 | `size_t fread(void *buf, size_t size, size_t count, FILE *stream)`
46 |
47 | `void *buf` - указатель на буфер для записи считанных символов, `size_t size` - размер объекта, `size_t count` - количество объектов,
48 | `FILE *stream` - файл для чтения.
49 | Возвращает количество действительно считанных объектов.
50 |
51 | # Что такое дескриптор?
52 |
53 | Дескриптор представляет собой "ключ", который обеспечивает абстракцию ресурса, по сути он может быть чем угодно:
54 | от целочисленного индекса до указателя на ресурс в пространстве ядра.
55 | Например, ко всем потокам ввода-вывода можно получить доступ через так называемые файловые дескрипторы.
56 | - 0 Стандартный ввод.
57 | - 1 Стандартный вывод.
58 | - 2 Стандартный вывод сообщений об ошибках.
59 |
60 | # Что такое заголовочный файл? Зачем они используются? Объясните подробно и приведите пример.
61 |
62 | заголовочный файл — файл, содержимое которого автоматически добавляется препроцессором в исходный текст в том месте,
63 | где располагается директива #include
— основной способ подключить к программе типы данных, структуры, прототипы функций, перечислимые типы и макросы, используемые в другом
64 | модуле.
65 |
66 | Чтобы избежать повторного включения одного и того же кода, используются директивы `#ifndef`, `#define`, `#endif`.
67 |
68 | Используется для того, чтобы создавать программы из нескольких модулей, компилируемых по отдельности.
69 |
70 | ```c
71 | #ifndef ADD_H
72 | #define ADD_H
73 |
74 | int add(int, int);
75 |
76 | #endif
77 | ```
78 |
79 | # Чему равны старшие биты rax после инструкции mov eax, aah?
80 |
81 | Леха сказал, что обнуляет.
82 |
83 | # Что делает команда mul?
84 |
85 | Для умножения чисел без знака предназначена команда MUL.
86 | У этой команды только один операнд — второй множитель, который должен находиться в регистре или в памяти.
87 |
88 | # Определите тип беззнаковых целых однобайтных чисел num_t?
89 |
90 | ```c
91 | typedef unsigned char num_t;
92 | ```
93 |
94 | # Что такое интернирование строк?
95 |
96 | Интернирование строк — это механизм, при котором одинаковые литералы представляют собой один объект в памяти.
97 |
98 | (В си при любом действии над строкой у нас получается новая строка)
99 |
100 | # Какие логические области памяти обычно содержит любая программа?
101 |
102 | Сегмент кода;
103 |
104 | Сегмент bss (или «неинициализированный сегмент данных»), где хранятся глобальные и статические переменные, инициализированные нулем;
105 |
106 | Cегмент данных (или «сегмент инициализированных данных»), где хранятся инициализированные глобальные и статические переменные;
107 |
108 | Куча (heap), откуда выделяются динамические переменные;
109 |
110 | Стек, где хранятся параметры функции, локальные переменные и другая информация, связанная с функциями.
111 |
112 | # Что такое address spase layout randomization?
113 |
114 | технология, применяемая в операционных системах, при использовании которой случайным образом изменяется расположение в адресном пространстве процесса важных структур данных, а именно образов исполняемого файла, подгружаемых библиотек, кучи и стека.
115 |
116 | Нужна для того, чтобы нельзя было при помощи переполнения буфера получать или изменять конкретные данные.
117 |
118 | # В чем разница между вторым и третьим параметром fread()?
119 |
120 | Второй параметр `size_t size` говорит о размере объекта (количестве символов), а третий `size_t count` - о количестве объектов
121 |
122 | # Напишите пример функции, которая принимает количество аргуметов и сколько угодно чисел типа int, а затем возвращет их среднее
123 |
124 | ```c
125 | float average(unsigned int n, ...){
126 | va_list v;
127 | va_start(v, n);
128 | int sum = 0;
129 | for (unsigned int i = 0; i < n; ++i){
130 | sum += va_arg(v, int);
131 | }
132 | va_end(v);
133 | return (float)sum/n;
134 | }
135 | ```
136 |
137 | # Чему равно b? int* a = 0x10; int* b = a + 10;
138 |
139 | int* a = 0x10; - указывает на ячейку памяти 0x10,
140 |
141 | int* b = a + 10; - указывает уже на 0x38 ячейку памяти,
142 |
143 | а вот что там - уже никто не знает, вероятно, при обращении к значению b будет seq fault
144 | fault
145 | # Зачем нужны volatile-переменные?
146 |
147 | volatile - это квалификатор переменной, указывающий компилятору, что часть кода, которая производит над этой переменной какие-то действия, не должна быть оптимизирована (т.к. значение переменной может быть изменено в любой момент).
148 |
149 | # Приведите пример объявления нескольких единиц данных с помощью одной директивы
150 |
151 | array1 dw 1,2,3,4,5
152 |
153 | times count db num
154 |
155 | ???
156 |
157 |
158 | # Что такое красная зона?
159 |
160 | Зарезервированный участок памяти фиксированного размера (128 байт), который находится вне стека.
161 |
162 | "Красная зона" может быть использована для хранения временных данных (до вызова следующей функции), без изменения стека.
163 |
164 |
165 |
166 |
--------------------------------------------------------------------------------
/System-Programming-Languages/rubez_train_2017.md:
--------------------------------------------------------------------------------
1 | # Покажите на примере, что необходимо сделать, чтобы определённую в одном файле функцию вызвать в другом.
2 |
3 | ```asm
4 | %include "file.asm"
5 | extern func
6 | ```
7 |
8 | # Опишите алгоритм работы push.
9 |
10 | 1. rsp умельшается на размер параметра (2, 4 или 8 байт)
11 | 2. по адресу из регистра rsp записывается значение
12 |
13 | # Может ли программа работать без стека? Объясните ответ.
14 |
15 | Нет. При вызове функций в стек копируется адрес возврата, помещаются регистры, которые используются в данной подпрограмме.
16 |
17 | # Как передать в процедуру больше шести аргументов?
18 |
19 | Можно передавать подпрограмме требуемые параметры через стек. Подпрограмма, зная, в каком порядке помещены в стек параметры, может забрать их оттуда и использовать при своем выполнении.
20 |
21 | # Что такое memory mapping?
22 |
23 | __Memory mapping__ - это "отображение", установление соответствия между физической памятью/фальлами/устройстами и регионами виртуальной памяти.
24 |
25 | Используется когда загрузчик заполняет адресное пространство процесса, когда процессор просит у ОС дополнительные страницы, когда ОС отображает файлы с носителя в адресное пространство.
26 |
27 | Таким образом, системный вызов `mmap` используется для динамического выделения памяти и отображения в память файлов и устройств.
28 |
29 | # Что делает препроцессор?
30 |
31 | Препроцессор - программа, подготавливающая код программы.
32 |
33 | В nasm директивы для препроцессинга начинаются с `%`.
34 | Препроцессор nasm осуществляет _макроподстановку (инстанцирование)_ с параметрами и без, кроме того он может осуществлять операции над строками (конкатенация строк, длинна).
35 |
36 | # В чем отличие директив `%macro` и `%define` ?
37 |
38 | `%define` используют для задания констант.
39 |
40 | `%macro` многострочный макрос с параметрами.
41 |
42 | # Что делает команда jb?
43 |
44 | `jb` - переход, если CF=1.
45 |
46 | # Что такое секции объектного файла?
47 |
48 | Секции - части программы на ассемблере, которые имеют свое логическое предназначение.
49 |
50 | Например, в секции `.text` находятся инструкции(есть права на выполнение), в `.data` - глобыльные данные (есть права на чтиние и запись). Кроме того существуют секции для отладчика, секции с данными только для чтения и др.
51 |
52 | # Что такое caller-saved и callee-saved регистры?
53 |
54 | caller-saved - регистры, которые используется для хранения временных переменных, которые не должны быть сохранены между вызовами, процедура эти регистры может изменить.
55 |
56 | callee-saved - регистры, которые используется для хранения долговременных значений, а значит должны сохраняться вызыванной процедурой и процедура не имеет права по завершению выполнения оставлять эти регистры в измененном состояние. (rbx, rbp, rsp, r12-r15)
57 |
58 | # Какие команды, кроме push и pop, используют стек? Назовите хотя бы две.
59 |
60 | call и ret
61 |
62 | При вызове функции в стеке храниться адрес возврата
63 |
64 | # В чем отличие директивы и ассемблерной команды?
65 |
66 | Директива (псевдокоманда) - команды для ассемблера (а не для процессора), например, выделить немного памяти или выдать новую страницу листинга. Директивы действуют только в процессе ассемблирования программы и не генерируют машинных кодов.
67 |
68 | Команда указывает транслятору, какое действие должен выполнить микропроцессор.
69 |
70 | # Что делает команда idiv?
71 |
72 | `idiv` - производит целочисленное деление с остатком знаковых целочисленных операндов (для отрицательных значений должен использоваться дополнительный код).
73 |
74 | # Что такое нуль-терминированные строки?
75 |
76 | строки, оканчивающиеся `\0`.
77 |
78 | # Что хранит регистр rsp?
79 |
80 | адрес вершины стека.
81 |
82 | # Какие регистры изменятся после выполнения команды syscall?
83 |
84 | В rax будет содержаться возвращаемое значение.
85 |
86 | Перезапишутся rcx и r11. (вроде)
87 |
88 | # Что делает компоновщик?
89 |
90 | Собирает релоцируемые объектные файлы в один исполняемый.
91 |
92 | Для этого компановщик выполняет __релокацию__ (привязывание адресов к различным частям программы, чтобы ссылки на эти части были правильными) и разрешение символов (расстановка правильных адресов символов).
93 |
94 | # Что такое big endian/little endian?
95 |
96 | Big endian - порядок байт многобайтового числа, когда число храниться в прямом порядке (от старших байт)
97 |
98 | Little endian - в обратном порядке (от младших).
99 |
100 | # Что такое GDT?
101 |
102 | GDT (Global Descriptor Table, глобальная таблица дескрипторов) — служебная структура данных в архитектуре x86, определяющая глобальные (общие для всех задач) сегменты.
103 |
104 | # Что такое дескриптор?
105 |
106 | Дескриптор - абстрактный индикатор, используемый для доступа к файлу (или другому ресурсу ввода/вывода).
107 |
108 | `0 - stdin`
109 | `1 - stdout`
110 | `2 - stderr`
111 |
112 | # Перечислите 8-разрядные регистры общего назначения
113 |
114 | `rax` - "аккумулятор"
115 |
116 | `rbx` - "base register" (ранее использовался для базовой адресации)
117 |
118 | `rsx` - для организации циклов
119 |
120 | `rdx` - хранит данные при операциях ввода-вывода
121 |
122 | `rsp` - адрес вершины стека
123 |
124 | `rbp` - адрес начала текущаего стекового фрейма
125 |
126 | `rsi` - адрес начала строки-источника
127 |
128 | `rdi` - адрес начала строки-получателя
129 |
130 | # Что делает команда movq?
131 |
132 | копирует 64 разряда из операнда-источника в операнд-назначение
133 |
134 | # Какие логические области памяти обычно содержит любая программа?
135 |
136 | Область с данными (чтение, запись) и область с кодом (выполнение)
137 |
138 | (сегмент .data и .text)
139 |
140 | # Что такое канонический адрес?
141 |
142 | # В скомпилированных программах в месте, где логично было бы очищать регистр rax, вместо этого используется команда xor eax, eax. Почему xor и почему только половина, eax?
143 |
144 | # Какие отличия чистой архитектуры фон Неймана от архитектуры типичного современного процессора вы можете назвать?
145 |
146 | # Какие регистры должен установить загрузчик перед началом выполнения программы? Объясните, почему именно их.
147 |
148 | # Напишите функцию на ассемблере, которая примет две строки и перемешает их содержимое. Например, “abc” и “def” => “adbecf”.
149 |
150 | # Напишите функцию на ассемблере, которая примет строку и подсчитает количество пропусков в ней, состоящих из пробелов или табуляции (вперемешку).
151 |
152 | # Можно ли написать программу, где свойство локальности будет нарушено?
153 |
154 | # Как ОС понимает, что страница, на которую произошло обращение, вытеснена из ОП?
155 |
156 | # Напишите функцию на ассемблере, которая примет строку и подсчитает количество слов в ней из более, чем трёх букв.
157 |
158 | # Напишите функцию на ассемблере, которая примет строку, указатель на буфер в памяти и символ. Она заполнит буфер содержимым строки, перемежая символы строки своим третьим аргументом. Например, для строки “abc” и символа “x” результат “axbxcx”.
159 |
160 | # Сколько таблиц релокации есть в объектном файле?
161 |
162 | # Как с помощью команды lea умножить содержимое rax на 9 в одну команду?
163 |
164 | # Чему равны старшие биты rax после инструкции mov eax, aah.
165 |
166 | # Подробно опишите процесс трансляции виртуального адреса в физический.
167 |
168 | # Напишите функцию на ассемблере, которая примет строку и подсчитает количество слов в ней из более, чем трёх букв.
169 |
170 | # Напишите функцию на ассемблере, которая примет строку, указатель на буфер в памяти и символ. Она заполнит буфер содержимым строки, пропуская символы, соответствующие её третьему аргументу. Например, для строки “abc” и символа “b” результат “ac”.
171 |
172 | # Подробно опишите алгоритм работы инструкции syscall.
173 |
174 | # Нарисуйте и закодируйте на ассемблере конечный автомат, который проверяет входную строчку и отвечает, содержит ли она ровно одно слово и одно число. Слова состоят только из символов [a-z], разделены только одинарными пробелами. Число целое. Макрос get_symbol используется, чтобы положить в ch следующий символ.
175 |
176 | # Напишите функцию на ассемблере, которая примет строку, указатель на буфер в памяти и символ. Она заполнит буфер содержимым строки, пропуская символы, соответствующие её третьему аргументу. Например, для строки “abc” и символа “b” результат “ac”.
177 |
178 | # Напишите функцию на ассемблере, которая примет строку и подсчитает количество пропусков в ней, состоящих из пробелов или табуляции (вперемешку).
179 |
180 | # Для чего разные DPL в дескрипторах сегментов данных и кода
181 |
182 | # Напишите функцию на ассемблере, которая примет строку и два символа. Она должна произвести текстовую замену первого символа на второй.
183 |
184 | # В чем отличие команд mov и lea?
185 |
186 | # Как виртуальная память помогает организации многозадачности?
187 |
188 | # Что произойдет, если мы сделаем push меньше раз, чем pop?
189 |
190 | # Что такое виртуальная память?
191 |
192 | # Что такое таблица ASCII?
193 |
194 | # Какой размер имеют регистры BL, DH, CX? В чем связь между ними?
195 |
196 | # Какие регистры должен установить загрузчик перед началом программы? Объясните, почему именно их.
197 |
198 | # Напишите функцию на ассемблере, которая принимает строку и 2 символа. Она должнв произвести текстовую замену первтого символа на второй.
199 |
200 | # Нарисуйте и закадируйте на ассемблере конечный автомат,который проверяет входную строчку и отвечает, содержит ли она ровно 2 слова, а за ним число. Слова состоят только из символов [a-z], разделены только одинарными пробелами. Макрос get_simbol кладет в ah следующий символ.
201 |
202 | # Почему в этом макросе все вхождения параметров взяты в скобки? Придумайте пример, когда это играет роль.
203 | `# define MIN(a,b) ((a)>(b))?(a):(b)`
204 |
205 | # Напишите функцию на C, которая примет указатель на массив чисел типа int и его размер, и заполнит его числами Фибоначчи. Числа Фибоначчи образуют последовательность: 1, 1, 2, 3, 5, 8, ... (каждый следующий элемент – сумма двух предыдущих). Функция не должна использовать рекурсию, malloc и выделять больше 128 байт в стеке.
206 |
207 | # В массиве char’ов есть только строчные буквы латиницы. Отсортируйте их подсчётом по возрастанию (подсчитав количество вхождений каждой буквы, а затем перезаписав массив). C. Разумеется, оформить в виде функции.
208 |
209 | # Чем отличается строгая типизация от нестрогой?
210 |
211 | # Как получить адрес четвёртого элемента массива с именем a ? Приведите пример двух языковых конструкций.
212 |
213 | # Чему равен sizeof(3L+4)?
214 |
215 | # Назовите причины, по которым некоторые строчки защищены от перезаписи в С.
216 |
217 | # Какие арифметические операции разрешены с указателями?
218 |
219 | # В массиве char’ов есть только цифры. Отсортируйте их на C подсчётом по возрастанию (подсчитав количество вхождений каждой цифры, а затем перезаписав массив). Оформить в виде функции.
220 |
221 | # Напишите функцию, которая подсчитает количество слов из более, чем трёх букв в строке. C.
222 |
223 | # Как привести данные одного типа к данным другого типа?
224 |
225 | # Приведите пример создания указателя и разыменовывания.
226 |
227 | # Что такое интернирование строк?
228 |
229 | # Можно ли создать структуру и объединение с одинаковыми типовыми именами? Если да, то как их различать?
230 |
231 | # Чему равно `b? int* a = 0x10; int* b = a + 10;`
232 |
233 | # С: разбейте строку на слова и верните указатель на массив слов, каждое из которых завершено нуль-терминатором. Строку нельзя менять.
234 |
235 | # char* a = "4"; Чему равен sizeof(a)?
236 |
237 | # Что такое перечисление?
238 |
239 | # Объявите тип-указатель на функцию, возвращающую double, которая принимает указатель на функцию, которая возвращает int и принимает float.
240 |
241 | # В каком заголовочном файле определён тип unsigned?
242 |
243 | # С: разбейте строку на слова и верните указатель на массив слов, каждое из которых завершено нуль-терминатором. Строку нельзя менять.
244 |
--------------------------------------------------------------------------------
/System-software/lab1.md:
--------------------------------------------------------------------------------
1 | # Что такое команды-фильтры и почему они таковыми являются
2 |
3 | __Команды фильтры__ - могут использоваться в конвейерах: считывают ввод команды, преобразовывают ввод, а затем записывают выходные данные.
4 | Команды-фильтры дают возможность сортировать, просматривать и отбирать часть выходной информации других команд.
5 |
6 | # Разница между прямыми и косвенными ссылками
7 |
8 | __Символические ссылки__ содержат адрес файла в файловой системе.
9 |
10 | - после удаления файла становятся недействительными
11 | - можно ссылаться как на файлы, так и на каталоги
12 | - права доступа и inode отличаются от исходного файла
13 | - при изменении прав доступа для исходного файла, права на ссылку останутся неизменными
14 | - содержат только имя файла (поэтому при вызове `ls -l` в размере файла будет указываться количество байт,
15 | необходимых для записи адреса файла)
16 |
17 | __Жесткие ссылки__ ссылается на файл. Каждая ссылка - отдельный файл, который ведет к одному участку диска.
18 |
19 | - при перемещении файла, переименовании все ссылки остаются рабочими
20 | - нельзя ссылаться на каталоги
21 | - работают только в пределах одной файловой системы
22 | - имеют ту же inode и те же права доступа, что исходный файл
23 | - права доступа на ссылку меняются вместе с правами доступа на файл
24 | - при удалении файла ссылка так же удаляется
25 |
26 | # Переменные окружения, принципы их работы, экспортирование переменных окружения
27 |
28 | __Переменные окружения__ - переменные, определенные оболочкой и используемые программами во время выполнения.
29 | Могут содержать общие настройки системы, параметры графической или командной оболочки, данные пользователя и др.
30 |
31 | Файл `autoexec.bat` служит для задания переменных системного окружения, запуска резидентных и других программ
32 | при старте системы.
33 | После определения переменной окружения ОС и программы имеют доступ к их значениям и могут корректировать свою работу
34 | в соответствии с ними.
35 |
36 | `export` - команда, предназначеная для экспорта переменных и функций текущего процесса в дочерний процесс.
37 | По умолчанию, unix, переменные, созданные в среде родительского процесса не передаются автоматически дочернему.
38 | При помощи export можно отметить переменную для автоматического экспорта в дочерние процессы.
39 |
40 | # Cтандартные потоки ввода-вывода
41 |
42 | __Стандартные потоки ввода-вывода__ — потоки процесса, имеющие номер (дескриптор), зарезервированный для выполнения «стандартных» функций.
43 |
44 | ### Стандартный ввод
45 |
46 | Поток номер 0 (stdin) зарезервирован для чтения команд пользователя или входных данных. Для изменения цели этого потока используется
47 | `<`
48 |
49 | ### Стандартный вывод
50 |
51 | Поток номер 1 (stdout) зарезервирован для вывода данных. Для перенаправления этого потока используется `>`.
52 |
53 | ### Стандартный вывод ошибок
54 |
55 | Поток номер 2 (stderr) зарезервирован для вывода диагностических и отладочных сообщений. Для перенаправления этого
56 | потока используется констукция `2>`
57 |
58 | # Назначение каждого столбца вывода команды ls -l
59 |
60 | ```
61 | -> ls -l
62 | total 6
63 | drwxrwxrwx 2 marina marina 2 Mar 3 00:36 directory
64 | -rwxrwxrwx 2 marina marina 7 Mar 3 00:36 file
65 | -rwxrwxrwx 2 marina marina 7 Mar 3 00:36 hard_link
66 | lrwxrwxrwx 1 marina marina 4 Mar 3 00:37 soft_link -> file
67 | ```
68 |
69 | ### Каталог (строка 1)
70 |
71 | В первом поле задается тип файла и режим доступа к нему. Символ d (directory) в начале
72 | строки означает, что это каталог. Следующие 9 символов rwx - это режим прав доступа для владельца каталога, членов группы и остальных пользователей.
73 |
74 | Второе поле листинга - счетчик ссылок на каталог. В данном случае 2. Первая - это сам каталог, а вторая - это ссылка <<.>>,
75 | которая находится внутри каталога и создаётся автоматически. Символические ссылки в счетчике не учитываются.
76 |
77 | Следующие два поля определяют владельца и группу файла.
78 |
79 | В следующем поле отображается количество файлов в каталоге. Рассматриваемый каталог имеет 2 файла.
80 |
81 | Последние два поля указывают время последней модификации (Mar 3 00:36) и имя каталога (directory).
82 |
83 | ### Файл (строка 2)
84 |
85 | Дефис в первом символе обозначает оычный файл. Далее столбцы интерпретируются также как и в каталог,
86 | за исключением размера файла (указывет размер файла в байтах (7 байт)).
87 |
88 | ### Прямая ссылка (строка 3)
89 |
90 | Файлы file и hard_link равноправны и имеют одинаковый индексный дескриптор (inode), поэтому тут все так же.
91 | После создания прямой ссылки hard_link, в поле ссылок изменилось число.
92 |
93 | ### Косвенная ссылка (строка 4)
94 |
95 | Первый символ обозначается буквой l. Отличительной чертой косвенной ссылки является её размер -
96 | количество байт, необходимых для хранения пути до файла на который она ссылается.
97 |
98 | После имени указан путь, куда ссылается ссылка.
99 |
100 | # Основные типы файлов (- d l c b p s)
101 |
102 | `-` - обычный файл, `d` - директория, `l` - символическая ссылка,
103 |
104 | `p` - именованный канал (pipes) - позволяет различным процессам обмениваться данными. Например, в первой консоли мы пишем `ls -l > pipe`, а потом открывает вторую консоль и `cat < pipe`. Главной особенностью является то, что нам не важен порядок выполнения команд, т.е. мы можем снчала выполнить чтение из канала, а лишь потом записать в него. Результат будет один.
105 |
106 | `c`, `b` - символические и блочные файлы. Блочные файлы устройств используются для передачи данных, разделённых на пакеты фиксированной длины — блоки. А символьные файлы устройств используются для небуферизованного обмена данными (сплошным потоком байт). Необходимы операционной системе для взаимодействия с физическими устройствами, такими как диски и дисководы, принтеры и факсы и т. п. Фактически, являются указателями на драйверы устройств.
107 |
108 | `s` - сокет. Обеспечивает обмен данными между процессами. Отличие от pipoв - может обмениваться на различных ЭВМ, связанных между собой сетью.
109 |
110 | # Перенаправление потоков: `>` `<` `>>` `<<` `>&`
111 |
112 | `команда1 > файл1` — выполняет команду1, помещая стандартный вывод в файл1
113 |
114 | `команда1 < файл1` - выполняет команду1, используя в качестве источника ввода файл1
115 |
116 | `команда1 2> файл1` - выполняет команду1, направляя стандартный поток ошибок в файл1
117 |
118 | `команда1 >&2` - выполняет команду1, направляя стандартный ввода в стандартный поток ошибок
119 |
120 | `команда1 >> файл1` — выполняет команду1, помещая стандартный вывод в файл1. Разница с `>` в том, что `>>` не перезаписывает файл,
121 | а добавляет данные в конец.
122 |
123 | ```
124 | tr a-z A-Z << END_TEXT
125 | > one two three
126 | > four five six
127 | > END_TEXT
128 | ONE TWO THREE
129 | FOUR FIVE SIX
130 | ```
131 | - выполняет команду до тех пор, пока на вход не придет `END_TEXT`
132 |
133 | # Назначение файлов `/dev/null`, `/dev/zero`
134 |
135 | `/dev/null` — специальный файл, представляющий собой «пустое устройство». Запись в него происходит успешно, независимо от объёма «записанной» информации. Чтение из `/dev/null` эквивалентно считыванию конца файла (EOF).
136 |
137 | `/dev/zero` - то же, что и /dev/null/, только представляет собой источник нулевых байтов (ASCII NUL, 0x00). Любые данные, записанные в /dev/zero, будут игнорированы, а сама запись завершается успешно. Пример приминения: "очистка" файла заданного размера или безопасное удаление файла.
138 |
139 | # Домашний, рабочий и корневой каталог
140 |
141 | __Домашний каталог__ - В домашнем, или начальном, каталоге оказываешься сразу после входа в систему. В него ведет команда `cd`. (Например, в хелиосе - это каталог пользователя sXXXXXX)
142 |
143 | __Рабочий каталог__ - тот каталог, в котором находишься в данный момент
144 |
145 | __Корневой каталог__ - каталог, включающий в себя все прочие каталоги и файлы файловой системы
146 |
147 | # Допустимые и недопустимые символы в имени файла
148 |
149 | Недопустимые символы: `/` и `0x00`
150 |
151 | # Порядок выполнения команд и операторов `||`, `&&`, `()`, `{}`
152 |
153 | ` find . -empty -exec ls {} \;` - ищет пустые файлы, имена подставляет в `{}`.
154 |
155 | `cd aaa && ls` ничего не сделает, если каталога AAA нет
156 |
157 | `cd AAA || ls` в любом случае сделает ls
158 |
159 | круглые скобки для группировки этого безобразия
160 |
161 | # Cочетаниe клавиш `^A`, `^B`, `^C`, `^D`, `^E`, `^F`, `^H`, `^N`, `^P`, `^U`, `^W`, `Esc-B`, `Esc-F`
162 |
163 | `^A` - перейти к началу строки
164 |
165 | `^B` - назад без удаления
166 |
167 | `^C` - отменить процесс
168 |
169 | `^D` - удалить следующий символ / закончить ввод текста для многих программ
170 |
171 | `^E` - перейти к концу линии
172 |
173 | `^F` - вперед без удаления
174 |
175 | `^H` - удалить символ перед курсором
176 |
177 | `^N` - следующая строка
178 |
179 | `^P` - предыдущая строка
180 |
181 | `^U` - удаляет строку
182 |
183 | `^W` - удаляет слово
184 |
185 | `Esc-B` - перемещает курсор к началу предыдущего слова
186 |
187 | `Esc-F` - перемещает курсор к концу следующего слова
188 |
189 | # Экранирование спецсимволов в интепретаторе. Работа таких метасимволов, как ', ", \
190 |
191 | `\` экранирует следующий за ним символ, что позволяет использовать специальные символы просто как символы, представляющие сами себя (он может экранировать и сам себя - \\)
192 |
193 | `'` и `"` различаются при работе с переменными. `echo '$test'` выведет $test, а `echo "$test"` значение переменной.
194 |
195 | `echo ``pwd`` ` выведет рабочую директорию, а `echo 'pwd'` и `echo "pwd"` слово pwd
196 |
197 | ### Двойные кавычки
198 |
199 | - Следует использовать тогда, когда вам нужно размещать значения переменных или вывод команд в рамках строк.
200 | - Все символы интерпретируются обычным образом, за исключением символов $ и ` `` `, которые используются для раскрытия переменных и команд соответственно.
201 |
202 | ### Одинарные кавычки
203 |
204 | - Все символы интерпретируются как строчные символы.
205 |
206 | # Отличие терминала от консоли и от командной строки
207 |
208 | terminal - текстовая среда ввода / вывода. (в т.ч. ssh , который соединяет терминал на одной машине с программами на другой машине)
209 |
210 | console - физический терминал, напрямую подключенным к машине.
211 |
212 | Командная строка - это интерфейс, в котором пользователь вводит команду
213 |
214 | # Интерпретация прав доступа применительно к файлам/каталогам/прямым и символическим ссылкам
215 |
216 | # Режимы навигации в командной строке. Команды `set -o emacs`, `set -o vi`
217 |
218 |
--------------------------------------------------------------------------------
/System-software/lab2.md:
--------------------------------------------------------------------------------
1 | # troff и nroff
2 |
3 | __troff__ и __nroff__ - это системы для форматирования текстов, состоят из программ
4 | форматирования и языка разметки. Принимают на вход текст с макросами и
5 | директивами разметки и выдают на выход преобразованных текст.
6 |
7 | nroff позволяет решать многие задачи форматирования путем программирования на
8 | языке nroff.
9 |
10 | troff - расширенный nfoff. Он может поддерживать множество символов,
11 | разнообразные шрифты, организацию полей, сносок и т.п. nroff игнорирует
12 | команды, которые может выполнить.
13 |
14 | # процедура входа пользователя в систему
15 |
16 | После включение компьютера производится проверка аппаратной части, после которой BIOS считывает из первого сектора загрузочного диска программу, которая запускаят основной загрузчик.
17 | Производится загрузка в память ядра системы и запускается процесс `init`. Одна из функций, которую выполняет `init` - запускает шесть виртуальных консолей (процессов getty), чтобы предоставить пользователям возможность регистрироваться в системе с терминалов.
18 |
19 | 1. процесс getty ожидает реакции пользователя на одной из терминальных линий, в случае активности пользователя выводит приглашение
20 | 2. после ввода имени пользователя запускается программа login, которая проверяет подлинность пользователя. Стандартным механизмом является проверка пароля, заданного для данного пользователя
21 | 3. убедившись, что пароль введён правильно, login запускает командный интерпретатор с установленными UID и GID данного пользователя.
22 |
23 | При работе по сети роль getty исполняет сетевой демон, например ssh.
24 |
25 | Все данные о пользователях UNIX хранит в файле /etc/passwd в текстовом виде. Каждому пользователю соответствует одна строка, поля которой разделяются двоеточиями:
26 |
27 | ```
28 | входное имя:x:UID:GID:полное имя:домашний каталог:стартовый shell
29 | ```
30 |
31 | Пароли на вход в систему пользователей в UNIX не хранятся в открытом виде, хранятся только их хеши, или же хеши вообще хранятся в спациальном файле, доступ к которому разрешен только системе, так что перебор вообще не возможен.
32 |
33 | Последовательность событий при полной регистрации:
34 |
35 | 1. Пользователь вводит регистрационное имя по приглашению login: процесса getty.
36 |
37 | 2. getty выполняет программу login, используя в качестве аргумента указанное имя.
38 |
39 | 3. login запрашивает пароль и сверяет имя и пароль с записанными в файле /etc/passwd.
40 |
41 | 4. login выводит на экран из файла /etc/motd сообщение, выдаваемое после входа в систему.
42 |
43 | 5. login запускает интерпретатор shell, указанный в бюджете пользователя и устанавливает переменную среды TERM.
44 |
45 | 6. shell выполняет соответствующие файлы запуска, после чего выводит на экран приглашение и ожидает ввода информации.
46 |
47 | # назначение утилиты getty
48 |
49 | `getty` обеспечивает появление приглашений для login'a в консолях. init-системы настроены на запуск фиксированного
50 | числа экземпляров getty, как правило, шести. Каждый getty-процесс устанавливает свою группу процессов, используя
51 | вызов системной функции setpgrp, открывает отдельную терминальную линию и обычно приостанавливается во время
52 | выполнения функции open до тех пор, пока машина не получит аппаратную связь с терминалом.
53 |
54 | Когда функция open возвращает управление, getty выводит на дисплей из /etc/gettydefs входное сообщения. Потом
55 | getty считывает входное имя пользователя и вызывает команду login с именем пользователя в качестве аргумента,
56 | которая требует от пользователей, чтобы они идентифицировали себя указанием регистрационного имени и пароля.
57 | Если пользователь зарегистрировался/залогинился успешно, запускается shell. Если пользователь не смог успешно
58 | зарегистрироваться, программа завершается, закрывая открытую терминальную линию, а процесс init порождает
59 | для этой линии следующий getty-процесс, открывающий терминал, вместо прекратившего существование.
60 |
61 | p.s. изначально getty открывает 6 консолей, переключаться между ними можно с помощтю клавиш `ALT-F1 .... ALT-F6`,
62 | но на самом деле, для пользователя не обязательно иметь все эти терминальные линии, чтобы сократить число
63 | терминальных линий достаточно закомментировать "лишние" строки в файле /etc/inittab
64 |
65 | # отличие файлов .profile и .kshrc
66 |
67 | `.profile` - файл с личными конфиигурациями пользователя. Используется для задания переменных окружения для
68 | оболочки пользователя, элементов вроде umask, выполнения скриптов при запуске.
69 |
70 | `.kshrc` - устанавливает алиасы, автоматически запускает прописанные программы.
71 |
72 | # ключи man
73 |
74 | `-C` -- Указать файл конфигурации для использования; по умолчанию это /etc/man.conf.
75 |
76 | `-M` -- Определить список каталогов для поиска страниц руководства. Каталоги разделяются двоеточиями.
77 |
78 | `-P` -- Назначить используемый пейджер
79 |
80 | `-s` -- Список разделов руководства разделённых двоеточиями, в которых осуществляется поиск. Эта опция переопределяет переменную окружения MANSECT.
81 |
82 | `-a` -- Применение это опции вынудит man показать не только первую, а все страницы справочника подходящие под заданное имя.
83 |
84 | `-c` -- Переформатировать исходную страницу руководства.
85 |
86 | `-d` -- Печатает отладочную информацию как при осуществлении вывода страниц. (не показывает страницу)
87 |
88 | `-D` -- Показывает и страницу и отладочную информацию.
89 |
90 | `-f` -- Равнозначно команде whatis.
91 |
92 | ```
93 | -> whatis man
94 | man (7) - macros to format man pages
95 | man (1) - an interface to the on-line reference manuals
96 | ```
97 |
98 | `-F или --preformat` -- Форматирование без отображения.
99 |
100 | `-h` -- help.
101 |
102 | `-k` -- То же что и команда apropos (производит поиск по фрагментам слов).
103 |
104 | `-K` -- Поиск заданной строки во всех страницах справочника
105 |
106 | `-m` -- Задать для поиска альтернативный набор страниц справочника, находящийся на системе с указанным именем.
107 |
108 | `-p` -- Назначить выполнение ряда препроцессоров перед nroff или troff. Не всё инсталляции имеют полный набор препроцессоров. Несколько препроцессоров и буквы для их обозначения: eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). Эта опция переопределяет переменную окружения MANROFFSEQ.
109 |
110 | `-t` -- Использует /usr/bin/groff -Tps -mandoc для форматирования страницы справочника, без вывода на stdout.
111 |
112 | `-w` -- Печатает местонахождение(я) тех файлов, что были бы отформатированы и показаны.
113 |
114 | `-W` -- Подобно -w, но печатает по одному имени файла на строку без дополнительной информации.
115 |
--------------------------------------------------------------------------------
/System-software/lab3.md:
--------------------------------------------------------------------------------
1 | # Группы процессов и сессии
2 |
3 | Группа процесса является группой связанных процессов, которые в целях управления заданием (job) рассматриваются вместе. Процессы с одним и тем же ID группы процессов являются членами группы процессов, а процесс, PID которого равен ID группы процессов, является лидером группы процессов. Новые процессы наследуют ID группы процессов своих родительских процессов.
4 |
5 | ## Setsid()
6 |
7 | создает новый сеанс, если вызывающий процесс не создает группу. Вызывающий процесс становится ведущим в группе, ведущим процессом нового сеанса и не имеет контролирующего терминала. Идентификаторы группы процессов и сеанса при установке будут равными идентификатору вызывающего процесса. Вызывающий процесс будет единственным в этой группе и сеансе.
8 |
9 | ## setpgid(pid_t pid, pid_t pgid)
10 |
11 | присваивает идентификатор группы процессов pgid тому процессу, который был определен pid. Если значение pid равно нулю, то процессу присваивается идентификатор текущего процесса.
12 |
13 | # Процессы, диспетчер и планировщик
14 |
15 | Термин "процесс" впервые появился при разработке операционной системы Multix и имеет несколько определений, которые используются взависимости от контекста. Процесс — это:
16 |
17 | 1. программа на стадии выполнения
18 |
19 | 2. "объект", которому выделено процессорное время
20 |
21 | 3. асинхронная работа
22 |
23 | Для описания состояний процессов используется несколько моделей. Самая простая модель — это модель трех состояний. Модель состоит из:
24 |
25 | Выполнение — это активное состояние, во время которого процесс обладает всеми необходимыми ему ресурсами.
26 |
27 | Ожидание — это пассивное состояние, во время которого процесс заблокирован, он не может быть выполнен, потому что ожидает какое-то событие, например, ввода данных или освобождения нужного ему устройства.
28 |
29 | Готовность — это тоже пассивное состояние, процесс тоже заблокирован, но в отличие от состояния ожидания, он заблокирован не по внутренним причинам, а по внешним, независящим от процесса, причинам.
30 |
31 | В состояние готовности процесс может перейти, если во время его выполнения, квант времени выполнения "вышел". Другими словами, в операционной системе есть специальная программа - __планировщик__, которая следит за тем, чтобы все процессы выполнялись отведенное им время.
32 |
33 | # Процесс init
34 |
35 | http://www.linuxcenter.ru/lib/books/kostromin/gl_08_02.phtml?style=print
36 |
37 | Это процесс создаётся сразу при запуске системы, то есть все другие процессы являются его потомками.
38 |
39 | В процессе загрузки, после инициализации ядра, ядро запускает /sbin/init как первый процесс пользовательского режима. init отвечает за дальнейшую загрузку системы. Для этого он запускает так называемые стартовые скрипты, которые выполняют проверку и монтирование файловых систем, запуск необходимых демонов, настройку ядра (в том числе загрузку модулей ядра согласно установленному оборудованию, настройку IP-адресов, таблиц маршрутизации и др.), запуск графической оболочки и другие действия.
40 |
41 | В операционных системах Unix/Linux с помощью init можно изменить уровень инициализации. Уровень инициализации — степень загрузки операционной системы. Вот как происходит инициализация системы: процесс init запускается и анализирует файл /etc/inittab.
42 |
43 | По умолчанию, в системе использовано 7 уровней инициализации:
44 |
45 | • 0 — остановка системы
46 |
47 | • 1 — загрузка в однопользовательском режиме
48 |
49 | • 2 — загрузка в многопользовательском режиме без поддержки сети
50 |
51 | • 3 — загрузка в многопользовательском режиме с поддержкой сети
52 |
53 | • 4 — не используется
54 |
55 | • 5 — загрузка в многопользовательском режиме с поддержкой сети и графического входа в систему
56 |
57 | • 6 — перезагрузка
58 |
59 |
60 | # О команде kill
61 |
62 | Когда вы выполняете команду "kill", то фактически вы посылаете системе сигнал, чтобы заставить ее завершить некорректно ведущее себя приложение.
63 | Всего можно использовать до 60 различных сигналов, но наиболее часто используемые, это SIGTERM (15) и SIGKILL (9). (Всевозможные сигналы, посылаемые данной командой ОС, можно посмотреть используя ключ -l. kill -l)
64 |
65 | ## Сигналы
66 |
67 | — программные прерывания. Они используются для связи между процессами в UNIX и UNIX-подобных операционных систем, таких как Linux, Mac OS.
68 |
69 | ### SIGTERM
70 |
71 | этот сигнал запрашивает остановку работы процесса. Он может быть проигнорирован. Процессу дается время на корректное завершение. Если программа завершается корректно, значит она использовала данное время на то, чтобы сохранить свое состояние или результаты работы и освободить ресурсы. Другими словами, ее не заставляли остановиться.
72 |
73 | ### SIGKILL
74 | этот сигнал заставляет процесс прекратить работу немедленно. Программа не может проигнорировать этот сигнал. Не сохраненные результаты будут потеряны.
75 |
76 |
--------------------------------------------------------------------------------
/System-software/lab4.md:
--------------------------------------------------------------------------------
1 | # grep и egrep
2 |
3 | egrep - альтернатива команде grep -E
4 |
5 | #### Ключ `-E`
6 |
7 | --extended-regexp
8 |
9 | Рассматривает ОБРАЗЕЦ как расширенное регулярное выражение.
10 |
11 | Т.е. egrep позволяет использовать такие метасимволы, как `+` (одно и более повторений), `?` (0 и более повторений), `|` (логическое или)
12 |
13 | # ключи grep
14 |
15 | ## 1. Опция -r
16 |
17 | --recursive
18 |
19 | ## 2. Опция -i
20 |
21 | --ignore-case
22 |
23 | ## 3. Опция -c
24 |
25 | --count
26 |
27 | ## 4. Опция -n
28 |
29 | --line-number
30 |
31 | ## 5. Опция -v
32 |
33 | --invert-match (строки, в которых образец не встречается)
34 |
35 | ## 6. Опция -w
36 |
37 | --word-regexp
38 |
39 | ## 7. Опция -x
40 |
41 | --line-regexp
42 |
43 | ## 8. Опция -l
44 |
45 | --files-with-matches (выводит имена файлов, в которых было найдено совпадение)
46 |
47 | ## 9. Опция -L
48 |
49 | --files-without-match (выводит имена файлов, в которых нет образца)
50 |
51 | ## 10. Опция -o
52 |
53 | --only-matching (Возвращает не всю строку, где найден образец, а только его совпавшую часть)
54 |
55 | ## 11. Опция -q
56 |
57 | --quiet --silent (Ничего не выдает на стандартный вывод. В случае нахождения соответствия с образцом отключается с нулевым статусом. Отключается также при обнаружении ошибки.)
58 |
59 | ## 12. Опция -s
60 | --no-messages (Подавляет сообщения о несуществующих или нечитаемых файлах.)
61 |
62 | ## 13. Опция -D ДЕЙСТВИЕ
63 |
64 | --devices=ДЕЙСТВИЕ
65 |
66 | Если исследуемый файл является файлом устройства, FIFO (именованным каналом) или сокетом, то следует применять эту опцию. ДЕЙСТВИЙ всего два: read (прочесть), и skip (пропустить). Если вы указываете ДЕЙСТВИЕ read (используется по умолчанию), то программа попытается прочесть специальный файл, как если бы он был обычным файлом; если указываете ДЕЙСТВИЕ skip, то файлы устройств, FIFO и сокеты будут молча проигнорированы.
67 |
68 | ## 14. Опция -d ДЕЙСТВИЕ
69 |
70 | --directories=ДЕЙСТВИЕ
71 |
72 | Если входной файл является директорией, то используйте эту опцию. ДЕЙСТВИЕ read (прочесть) попытается прочесть директорию как обычный файл (некоторые ОС и файловые системы запрещают это; тогда появятся соответствующие сообщения, либо директории молча пропустят). Если ДЕЙСТВИЕ skip (пропустить), то директории будут молча проигнорированы. Если ДЕЙСТВИЕ recurse (рекурсивно), то grep будет просматривать все файлы и субдиректории внутри заданного каталога рекурсивно. Это эквивалент опции -r, с которой мы уже познакомились.
73 |
74 | ## 15. Опция -H
75 |
76 | --with-filename (Выдает имя файла для каждого совпадения с ОБРАЗЦОМ.)
77 |
78 | ## 16. Опция -h
79 |
80 | --no-filename (Подавляет вывод имен файлов, когда задано несколько файлов для исследования.)
81 |
82 | ## 17. Опция -I
83 |
84 | Обрабатывает бинарные файлы как не содержащие совпадений с ОБРАЗЦОМ;
85 |
86 | ## 18. Опция --include=ОБРАЗЕЦ_имени_файла
87 |
88 | При рекурсивном исследовании директорий обследовать только файлы, содержащие в своем имени ОБРАЗЕЦ_имени_файла.
89 |
90 | ## 19. Опция --exclude=ОБРАЗЕЦ_имени_файла
91 |
92 | При рекурсивном исследовании директорий пропускать файлы, содержащие в своем имени ОБРАЗЕЦ_имени_файла.
93 |
94 | ## 20. Опция -m ЧИСЛО_СТРОК
95 |
96 | --max-count=ЧИСЛО_СТРОК
97 |
98 | ## 21. Опция -y
99 |
100 | Синоним опции -i (не различать верхний и нижний регистр символов).
101 |
102 | ## 22. Опция --mmap
103 |
104 | Использует системный вызов mmap вместо системного вызова read.
105 |
106 | ## 23. Опция -Z
107 |
108 | --null
109 |
110 | Если в выводе программы имена файлов (например при опции -l), то опция -Z после каждого имени файла выводит нулевой байт вместо символа новой строки (как обычно происходит). Это делает вывод однозначным, даже если имена файлов содержат символы новой строки.
111 |
112 | ## 24. Опция -z
113 |
114 | --null-data
115 |
116 | Рассматривает ввод как набор строк, каждая из которых заканчивается не символом новой строки, а нулевым байтом. Как и предыдущая опция, используется совместно с вышеперечисленными командами для обработки экзотических имен файлов.
117 |
118 | ## 25. Опция -G
119 |
120 | --basic-regexp
121 |
122 | Рассматривает ОБРАЗЕЦ как базовое регулярное выражение. Эта опция используется по умолчанию.
123 |
124 | ## 26. Опция -E
125 |
126 | --extended-regexp
127 |
128 | Рассматривает ОБРАЗЕЦ как расширенное регулярное выражение.
129 |
130 | ## 27. Опция -P
131 |
132 | --perl-regexp
133 |
134 | Рассматривает ОБРАЗЕЦ как регулярное выражение языка Perl.
135 |
136 | ## 28. Опция -F
137 |
138 | --fixed-strings
139 |
140 | Рассматривает ОБРАЗЕЦ как список "фиксированных выражений" (fixed strings - термин из области регулярных выражений), разделенных символами новой строки. Будет искать соответствия любому из них.
141 |
142 | ## 29. Опция -f
143 |
144 | Читает один или несколько образцов из файла с указанным полным именем файл_образцов (словарь для поиска). Образцы в файле_образцов завершаются символом новой строки.
145 |
--------------------------------------------------------------------------------
/System-software/rubezhe_1.md:
--------------------------------------------------------------------------------
1 | https://picloud.pw/post/617/
2 |
3 | # Вариант 1
4 |
5 | ## 1. Что означает символ «~» при указании его в составе пути к файлу или каталогу?
6 |
7 | Домашний каталог. Значение берется из переменной окружения $HOME
8 |
9 | ## 2. Что означает символ «|» при использовании его в составе командной строки ksh?
10 |
11 | `|` - это конвейер. Его можно понимать как канал, в который один процесс может только писать, а другой — только читать из него. Может использоваться только в состеве с командами-фильтрами.
12 |
13 | ## 3. Чему соответствует символ «<» при использовании его в составе командной строки ksh?
14 |
15 | Перенаправление потоков. `команда1 < файл1` - выполняет `команду1`, используя в качестве источника ввода `файл1`
16 |
17 | ## 4. Какие из перечисленных ниже символов являются служебными для ksh: «@ # % ^ & * . , ! [ ] _ »
18 |
19 | `@` - подстановка параметра
20 |
21 | `#` - комментарий
22 |
23 | `%` - зависит от контекста: может быть остатком от деления, частью шаблона, или, например, как в команде `kill %1`, символ подстановки для каталогов в пути файла
24 |
25 | `^` - начало строки
26 |
27 | `&` - выполнить процесс в фоновом режиме,
28 |
29 | `*` - шаблон
30 |
31 | `.` - квивалент команды `source`, текущий каталог
32 |
33 | `,` - используется для вычисления серии арифметических выражений
34 |
35 | `!` - логическое отрицание
36 |
37 | `[ ]` - test. Проверка истинности
38 |
39 | `_` - вроде как это не является служебным символом
40 |
41 | ## 5. Можно ли отменить использование символа $ в качестве служебного в ksh с помощью двойных кавычек?
42 |
43 | нет)
44 |
45 | ```bash
46 | marina [/mnt/d/4 sem/spo] [130] master
47 | -> echo [[$HOME]]
48 | [[/home/marina]]
49 | ```
50 |
51 | ## 6. Написать команду, осуществляющую вывод содержимого переменной HOME на экран
52 |
53 | ```bash
54 | echo $HOME
55 | ```
56 |
57 | ## 7. Написать команду, которая выведет на экран имена всех файлов текущего каталога, первый символ имени которых «f», далее следует одна любая цифра и после нее три любых символа
58 |
59 | ```bash
60 | ls -l | grep "^-" | grep -w -o 'f[0-9]...$'
61 | ```
62 |
63 | ## 8. Какая комбинация клавиш заставляет редактор vi переместить курсор на один символ вниз?
64 |
65 | `j`
66 |
67 | ## 9. Какая комбинация клавиш заставляет редактор vi переместить курсор на один экран вниз?
68 |
69 | ctrl-f
70 |
71 | ## 10. Напишите команду, добавляющую право на исполнение файла для группы
72 |
73 | ```bash
74 | chmod g+x file
75 | ```
76 |
77 | ## 11. Напишите команду удаления каталога вместе с его содержимым
78 |
79 | ```bash
80 | rm -rf dir
81 | ```
82 |
83 | ## 12. Напишите команду вывода в файл описания ключевого слова mkdir из второй секции man
84 |
85 | ```bash
86 | man 2 mkdir
87 | ```
88 |
89 | ## 13. Напишите команду или последовательность команд, подсчитывающую количество файлов с суффиксом .txt в текущем каталоге
90 |
91 | ```bash
92 | ls -l | grep '\.txt$' | wc -l
93 | ```
94 |
95 | ## 14. Напишите команду, завершающую выполнение процесса, который был запущен последним на выполнение с данного терминала
96 |
97 | ```bash
98 | kill -TERM %
99 | ```
100 |
101 | ## 15. Напишите команду или последовательность команд, выводящую на экран информацию о процессах, принадлежащих текущему пользователю
102 |
103 | ```
104 | jobs
105 |
106 | top -u `whoami`
107 | ```
108 |
109 | ## 16. Напишите команду awk, выводящую на экран только те строки из потока вывода команды «ls -l», в которых содержится информация о каталогах с установленными правами на запись для владельца
110 |
111 | ```bash
112 | ls -l | awk '{if ($1 ~ /dr*/) print }'
113 | ```
114 |
115 | ## 17. Напишите команду sed, удаляющую из потока вывода команды «ls -l» те строки, в которых содержится информация о символьных ссылках
116 |
117 | ``` bash
118 | ls -l | sed '/^l/d'
119 | ```
120 |
121 | `/^l/` — регулярное выражение (`l` в начале строки вывода `ls -l` обозначает символьную ссылку), `d` — удалить соответствия выражению.
122 |
123 | ## 18. Перечислить символы, являющиеся метасимволами внутри символьного класса регулярного выражения
124 |
125 | `^` - символ "кроме"
126 | `-` - ([0-9]) множество
127 | `\` - экранирование
128 | `[: :]` - конструкция для обозначения классов
129 |
130 | специальные символы:
131 |
132 | |символ|эквивалент|соответствие|
133 | |------|----------|------------|
134 | | `\d` | `[0-9]` | Цифровой символ|
135 | | `\D` | `[^0-9]` | Нецифровой символ|
136 | | `\s` | `[ \f\n\r\t\v]` | Пробельный символ|
137 | | `\S` | `[^ \f\n\r\t\v]` | Непробельный символ|
138 | | `\w` | `[[:word:]]` | Буквенный или цифровой символ или знак подчёркивания|
139 | | `\W` | `[^[:word:]]` | Любой символ, кроме буквенного или цифрового символа или знака подчёркивания|
140 |
141 | ## 19. Перечислить символы, используемые для экранирования в ksh
142 |
143 | символ `\`
144 |
145 | использование `" "` предотвращает интерпретацию специальных символов, за исключением `$`, (обратная кавычка) и `\`
146 |
147 | ## 20. Что обозначает запись вида [:print:] в gawk?
148 |
149 | В awk классы символов можно указывать в регулярных выражениях только внутри скобок [: :]
150 |
151 | [:print:] - печатаемые символы (не являющиеся управляющими).
152 |
153 | # Вариант 2
154 |
155 | ## 1. Что означает символ «\» при указании его в составе пути к файлу или каталогу?
156 |
157 | экранирование символа
158 |
159 | ## 2. Что означает символ «/» при использовании его в составе командной строки ksh?
160 |
161 | корневой каталог
162 |
163 | ## 3. Чему соответствует символ «>» при использовании его в составе командной строки ksh?
164 |
165 | `команда1 > файл1` — выполняет `команду1`, помещая стандартный вывод в `файл1`
166 |
167 | ## 4. Какие из перечисленных ниже символов не являются служебными для ksh: «@ # % ^ & * . , ! [ ] _ »
168 |
169 | `_`
170 |
171 | ## 5. Можно ли отменить использование символа $ в качестве служебного в ksh с помощью апострофов?
172 |
173 | да
174 |
175 | ## 6. Написать команду, устанавливающую значение переменной HOME, равной значению переменной PWD
176 |
177 | ```bash
178 | export HOME=`pwd`
179 | ```
180 |
181 | ## 7. Написать команду, которая выведет на экран имена всех файлов текущего каталога, первый символ имени которых одна любая цифра и после нее три любых буквы
182 |
183 | ```bash
184 | ls -l | grep "^-"| grep -w -o "[0-9][A-Za-z][A-Za-z][A-Za-z]$"
185 | ```
186 |
187 | ## 8. Какая комбинация клавиш заставляет редактор vi переместить курсор на один символ вверх?
188 |
189 | `k`
190 |
191 | ## 9. Какая комбинация клавиш заставляет редактор vi переместить курсор на один экран вверх?
192 |
193 | ctrl-b
194 |
195 | ## 10. Напишите команду, добавляющую право на чтение файла для всех остальных
196 |
197 | ```bash
198 | chmod o+r file
199 | ```
200 |
201 | ## 11. Напишите команду перемещения каталога вместе с его содержимым
202 |
203 | ```bash
204 | mv source/dir dest/dir
205 | ```
206 |
207 | ## 12. Напишите команду вывода в файл описания ключевого слова disk из пятой секции man
208 |
209 | ```bash
210 | man 5 disk > file
211 | ```
212 |
213 | ## 13. Напишите команду или последовательность команд, подсчитывающую количество каталогов в текущем каталоге
214 |
215 | ```bash
216 | ls -l | grep "^d" | wc -l
217 | ```
218 |
219 | ## 14. Напишите команду, завершающую выполнение процесса с идентификатором, содержащимся в переменной PID
220 |
221 | ```bash
222 | kill -KILL $PID -- если вы жаждете крови
223 | kill -TERM $PID -- если нет
224 | ```
225 |
226 | ## 15. Напишите команду или последовательность команд, выводящую на экран информацию о процессах, не принадлежащих текущему пользователю
227 |
228 | ```bash
229 | top -u \!`whoami`
230 | ```
231 |
232 | ### 16. Напишите команду awk, выводящую на экран только те строки из потока вывода команды «ls -l», в которых содержится информация о файлах с установленными правами на чтение для группы
233 |
234 | ```bash
235 | ls -l | awk '{if ($1 ~ /-...r...../) print }'
236 | ```
237 |
238 | ## 17. Напишите команду sed, удаляющую из потока вывода команды «ls -l» те строки, в которых не содержится информация о символьных ссылках
239 |
240 | ``` bash
241 | ls -l | sed '/^l/!d'
242 | ```
243 |
244 | `/^l/` — регулярное выражение (`l` в начале строки вывода `ls -l` обозначает символьную ссылку), `!` — применить действие ко всему, что не соответствует выражению, `d` — удалить.
245 |
246 | ## 18. Перечислить символы, не являющиеся метасимволами внутри символьного класса регулярного выражения
247 |
248 | все, кроме метасимволов: `^` - "кроме", `-` - множество, специальные метасимволы, вроде `\d` - числа и т.п.
249 |
250 | описание всех метасимволов в 18 вопросе 1 варианта
251 |
252 | ## 19. Какие символы не экранируются двойными кавычками в ksh?
253 |
254 | `$`, (обратная кавычка) и `\`
255 |
256 | ## 20. Что обозначает запись вида [:punct:] в gawk?
257 |
258 | В awk классы символов можно указывать в регулярных выражениях только внутри скобок [: :]
259 |
260 | [:punct:] - знаки пунктуации
261 |
262 | # Вариант 3
263 |
264 | ## 1. Что означает символ «.» при указании его в составе пути к файлу или каталогу?
265 |
266 | текущий катаолг
267 |
268 | ## 2. Что означает символ «$» при использовании его в составе командной строки ksh?
269 |
270 | указывает на значение переменной
271 |
272 | ## 3. Чему соответствует символ «>>» при использовании его в составе командной строки ksh?
273 |
274 | `команда1 >> файл1` — выполняет `команду1`, помещая стандартный вывод в `файл1`. Разница с `>` в том, что `>>` не перезаписывает файл, а добавляет данные в конец.
275 |
276 | ## 4. Какие из перечисленных ниже символов не являются служебными для ksh: « < > | \ + = ( ) _ »
277 |
278 | `_`
279 |
280 | ## 5. Можно ли отменить использование символа $ в качестве служебного в ksh с помощью символа «\»?
281 |
282 | да
283 |
284 | ## 6. Написать команду, добавляющую к значению переменной PATH путь «~/bin»
285 |
286 | ```bash
287 | export PATH=~/bin:$PATH
288 | ```
289 |
290 | ## 7. Написать команду, которая выведет на экран имена всех файлов текущего каталога, первый символ имени которых одна любая буква и после нее три любых цифры
291 |
292 | ```bash
293 | ls -l | grep "^-"| grep -w -o "[A-Za-z][0-9][0-9][0-9]$"
294 | ```
295 |
296 | ## 8. Какая комбинация клавиш заставляет редактор vi переместить курсор на один символ вправо?
297 |
298 | `l`
299 |
300 | ## 9. Какая комбинация клавиш заставляет редактор vi переместить курсор на одно слово вправо?
301 |
302 | `w`
303 |
304 | ## 10. Напишите команду, убирающую право на чтение файла для владельца
305 |
306 | ```bash
307 | chmod u-r file
308 | ```
309 |
310 | ## 11. Напишите команду копирования каталога вместе с его содержимым
311 |
312 | ```bash
313 | cp -r dir1 dir2
314 | ```
315 |
316 | ## 12. Напишите команду вывода на экран описания ключевого слова game из восьмой секции man
317 |
318 | ```bash
319 | man 8 game
320 | ```
321 |
322 | ## 13. Напишите команду или последовательность команд, подсчитывающую количество прямых ссылок в текущем каталоге
323 |
324 | ```bash
325 | ls -la * | grep -v "^d" | cut -d " " -f 2 | grep -vw "1" | wc -l
326 | ```
327 |
328 | ## 14. Напишите команду, завершающую выполнение процесса с идентификатором, содержащимся в файле по имени pid
329 |
330 | ```bash
331 | kill -9 `cat pid`
332 | ```
333 |
334 | ## 15. Напишите команду или последовательность команд, выводящую в файл информацию о процессах, не принадлежащих пользователю bob
335 |
336 | ```bash
337 | top -u \!bob
338 | ```
339 |
340 | ## 16. Напишите команду awk, выводящую на экран только те строки из потока вывода команды «ls -l», в которых содержится информация о файлах с не установленными правами на запись для группы
341 |
342 | ```bash
343 | ls -l | awk '{if ($1 ~ /-....\...../) print }'
344 | ```
345 |
346 | ## 17. Напишите команду sed, удаляющую из потока вывода команды «ls -l» те строки, в которых не содержится информация о каталогах
347 |
348 | см. следующий вариант
349 |
350 | ## 18. Перечислить символы, являющиеся метасимволами внутри сохраняющих скобок регулярного выражения
351 |
352 | сохраняющие скобки - `( )`
353 |
354 | Например, выражение (тр[ау]м-?)* найдёт последовательность вида трам-трам-трумтрам-трум-трамтрум.
355 |
356 | `[ ]` - для обозначения множества символов
357 |
358 | `?`, `.`, `\`, `*` и остальные символы, являющиеся метасимволами в регулярках
359 |
360 | ## 19. Какие символы не экранируются апострофами в ksh?
361 |
362 | апостроф)
363 |
364 | ## 20. Что обозначает запись вида [:graph:] в gawk?
365 |
366 | В awk классы символов можно указывать в регулярных выражениях только внутри скобок [: :]
367 |
368 | [:graph:] - cимволы, которые могут быть напечатаны и видимы (пробел может быть напечатан, но не виден)
369 |
370 | # Вариант 4
371 |
372 | ## 1. Что означает символ «?» при указании его в составе пути к файлу или каталогу?
373 |
374 | любой одиночный символ
375 |
376 | ## 2. Что означает символ «^» при использовании его в составе командной строки ksh?
377 |
378 | начало строки
379 |
380 | ## 3. Чему соответствует символ «<<» при использовании его в составе командной строки ksh?
381 |
382 | метка конца
383 |
384 | ## 4. Какие из перечисленных ниже символов являются служебными для ksh: « < > | \ + = ( ) _ »
385 |
386 | `<` `>` - перенаправление потоков
387 |
388 | `|` - конвейер
389 |
390 | `\` - экранирование
391 |
392 | `+` - может быть оператором в арифметических выражениях и регулярках
393 |
394 | `=` - присваивание
395 |
396 | `(` `)` - используются для группировки всякого безобразия и для подстановки каких-нить выражений
397 |
398 | `_` - не является
399 |
400 | ## 5. Можно ли отменить использование символа $ в качестве служебного в ksh с помощью символа «/»?
401 |
402 | нет
403 |
404 | ## 6. Написать команду, присваивающую переменной PATH значение, указывающее путь к текущему каталогу
405 |
406 | ```bash
407 | export PATH=`pwd`
408 | ```
409 |
410 | ## 7. Написать команду, которая выведет на экран имена всех файлов текущего каталога, первый символ имени которых любой символ и последние три символа - любые цифры
411 |
412 | ```bash
413 | ls -l | grep "^-"| grep -w -o ".[0-9][0-9][0-9]$"
414 | ```
415 |
416 | ## 8. Какая комбинация клавиш заставляет редактор vi переместить курсор на один символ влево?
417 |
418 | `h`
419 |
420 | ## 9. Какая комбинация клавиш заставляет редактор vi переместить курсор на одно слово влево?
421 |
422 | `b`
423 |
424 | ## 10. Напишите команду, убирающую право на запись в файл для группы
425 |
426 | ```bash
427 | chmod g-w file
428 | ```
429 |
430 | ## 11. Напишите команду создания каталога с правами доступа, отличными от установленных командой umask
431 |
432 | ```bash
433 | mkdir -m "a=rwx"
434 | ```
435 |
436 | ## 12. Напишите команду вывода в файл описания ключевого слова pwd из первой секции man
437 |
438 | ```bash
439 | man 1 pwd
440 | ```
441 |
442 | ## 13. Напишите команду или последовательность команд, подсчитывающую количество не прямых ссылок в текущем каталоге
443 |
444 | ```bash
445 | ls -l | grep "^l" | wc -l
446 | ```
447 |
448 | ## 14. Напишите команду, завершающую выполнение процесса с идентификатором, содержащимся в файле по имени $PID
449 |
450 | ```bash
451 | kill -9 `cat \$PID`
452 | ```
453 |
454 | ## 15. Напишите команду или последовательность команд, выводящую в файл информацию о процессах, принадлежащих пользователю bob
455 |
456 | ```bash
457 | top -u bob
458 | ```
459 |
460 | ## 16. Напишите команду awk, выводящую на экран только те строки из потока вывода команды «ls -l», в которых содержится информация о файлах с не установленными правами на исполнение
461 |
462 | ```bash
463 | ls -l | awk '{if ($1 ~ /-..\...\...\./) print }'
464 | ```
465 |
466 | ## 17. Напишите команду sed, удаляющую из потока вывода команды «ls -l» те строки, в которых не содержится информация о каталогах
467 |
468 | ``` bash
469 | ls -l | sed '/^d/!d'
470 | ```
471 |
472 | `/^d/` — регулярное выражение (`d` в начале строки вывода `ls -l` обозначает каталог), `!` — применить действие ко всему, что не соответствует выражению, `d` — удалить.
473 |
474 | ## 18. Перечислить символы, являющиеся метасимволами внутри группирующих скобок регулярного выражения
475 |
476 | группировка - это что-то такое `(та|ту)`
477 |
478 | `|` для того, чтобы разделять группы
479 |
480 | `?`, `.`, `\`, `*` и всякое такое
481 |
482 | ## 19. Какие метасимволы не экранируются в ksh другими метасимволами?
483 |
484 | все можно так или иначе экранизировать
485 |
486 | ## 20. Что обозначает запись вида [:upper:] в gawk?
487 |
488 | В awk классы символов можно указывать в регулярных выражениях только внутри скобок [: :]
489 |
490 | [:upper:] - заглавные буквы
491 |
--------------------------------------------------------------------------------
/System-software/task2(bot).md:
--------------------------------------------------------------------------------
1 | # [jplbot](https://github.com/zhmylove/jplbot)
2 |
3 | ## основной код бота ([jplbot.pl](https://github.com/zhmylove/jplbot/blob/master/src/jplbot.pl))
4 |
5 | |строки| код |
6 | |---------|------------------------------------|
7 | |4 - 19| указываются зависимости от других файлов с помощью use |
8 | |21 - 28| выполняется `config.pl`, результат заносится в `$rc`. Если `config` не распарсился или не вернул результат — выводится ошибка. |
9 | |32 - 57| с помощью `my` объявляются локальные переменные (а с помощью `our` — глобальные). Значения берутся из `config` файла|
10 | |59 - 68| `store` пишет хэш в файл(и в обратном направлении). Если нет файла saytofile, то туда записывается пустой хэш. Аналогичнос `kick_file` и хэшем `{ zhmylove => 1}` (`=>` используется при инициализации хэшей, отделяя ключ от значения). Далее хэш из `$saytofile` грузится в `%sayto`. Аналогично в `%kicks` грузится `$kick_file`. Далее в консоль выводятся ключи хэшей (при условии, что в хэшах что-то имеется). После создается объект класса `karma` (класс определен в karma.pm), в качестве параметра конструктора передается `config`. После создается объект класса `tome` и у него вызывается метод `read_tome_file` (`->` - разыменование ссылки, т. е. `${$ref}{some}` то же самое, что `$ref->some`. Т.к. объекты в `perl` – хэши, то для доступа к членам класса пишут стрелку) |
11 | |70 - 96| объявляются хэши и инициализируются хэши (`[]` - ссылка на пустой список). Далее инициализируются переменные. После задаются обработчики сигналов(`\&` - создает ссылку на функцию), `srand` инициализирует генератор случайных чисел |
12 | ||`sub` – декларирует и/или определяет подпрограмму |
13 | |98 - 103| `debug` – вызывается для отладки программы (включает режим отладки)|
14 | |105 - 114| `save_data` – сохраняет данные в файлы. В ней вызывается `save_tome_file` и `save_karma_file` |
15 | |116 - 122| `get_jid` – возвращает ник человека в комнате(после `//` указано значение по умолчанию, с которым должен работать `shift`; `shift` – удаляет первый элемент из массива и возвращает его значение; `defined` – определяет, содержит ли выражение какое-либо значение или нет)|
16 | |124 - 131| `shutdown` – вызывает подпрограмму сохранения данных, выводит в консоль время работы и выходит из программы|
17 | |133 - 147| `say_to` — сохраняет аргументы командной строки, отправляет сообщение(`lc` - преобразует все прописные буквы строкового параметра в строчные и возвращает строку; scalar – определяет число элементов в списке)|
18 | |149 - 157|`give_role` – посылает команду jabber-серверу на выдачу роли человеку|
19 | |159 - 184| `bomb_user` – сбрасывает все роли заданному пользователю в том чате, куда ему кинули бомбу («кинуть бомбу» - пользователю прилетает сообщение о том, что бот взорвет весь город, бот создает набор случайных проводов и один помечает как «верный». Если пользователь не угадал верный провод — он выбрасывается из чата; `split` – расщепляет строку на список подстрок по разделителю)|
20 | |186 - 206| `background_checks` – проверяет, не истекли ли таймеры у бомб. Далее проверяет, не нужно ли обновить хэш `say_to` (после определенного времени удаляется),при необходимости «чистит» хэш (удаляет устаревшее)|
21 | |208 - 620| `new_bot_message` - основная функция обработки пришедших сообщений|
22 | |221 - 230| проверяется, есть ли в сообщении обращение к боту, если есть — выводит случайный ключ из `tome`|
23 | |232 - 243| проверяет, если боту написали «голос» или «voice»,дает пользователю роль «participant»|
24 | |245 - 247| проверяет текст по ключевым словам (при помощи `keywords.pm`) и отвечает, если нашлись совпадения |
25 | |261 - 620| команды, которые выполняет бот и отправляет в чат сообщения. `Given` – позволяет выполнить блок кода, если аргумент удовлетворяет указанному условию (аналог `switch`)|
26 | |263 - 266| `top N` – выводит топ `N` пользователей с наибольшей кармой|
27 | |268 - 287| `help` – показывает вспомогательное сообщение с командами|
28 | |289 - 292| `karma user` – показывает карму пользователя|
29 | |294 - 297| `bomb user` - «кидает бомбу» пользователю|
30 | |299 - 304| `list-kickers` – перечисляет пользователей с правами «вышибал»|
31 | |306 - 341| `sayto/user/message` – отправить личное сообщение пользователю|
32 | |343 -348| `!word` - переводит (зачем(1)???)|
33 | |350 - 358| `google` - гуглит (зачем(2)???)|
34 | |360 - 453| `http://uri` – показывает информацию о найденном URI (зачем(3)???)|
35 | |455 - 470| удаляет бомбу|
36 | |474 - 479| выбирает человека для сообщения по никнейму и отвечает, если найдены команда|
37 | |481 - 484| `karma user` – показывает карму пользователя|
38 | |486 - 545| «кидает бомбу» пользователю, с проверками не кинул ли пользователь бомбу себе или не ыла ли уже установлена бомба. Если все в порядке, начинает отсчет до взрыва бомбы и посылает пользователю сообщение о начале игры|
39 | |547 - 551| `user:++` или `user:+1` увеличивает карму пользователя|
40 | |553 - 557| `user:--` или `user:-1` – уменьшает карму пользователя|
41 | |559 - 570| `remove-kicker` – убирает пользователя из спискa|
42 | |572 - 593| `add-kicker` – назначает пользователя «вышибалой»|
43 | |583 - 593| `kick user` - «выбрасывает» пользователя|
44 | |602 - 606| внезапная шутка от бота|
45 | |608 - 612| при встрече в диалоге "баш" или "шутк" появляется шутка от бота|
46 | |622 - 643| создается объект класса бота, которому на некоторые обработчики назначаются свои функции. Далее задается количество сообщений в час и стартует бот|
47 |
48 | ## [keywords.pm](https://github.com/zhmylove/jplbot/blob/master/src/keywords.pm)
49 |
50 | Содержит регулярки для шаблонных фраз, которые могут написать боту и варианты ответа на эти фразы.
51 |
52 | |строки| код |
53 | |---------|------------------------------------|
54 | |15 - 17| `get_random` — возвращает случайное значение из списка, переданного аргументом.|
55 | |35 - 195| `parse` – ищет совпадения с шаблонными фразами, которые можно написать боту, а так же с помощью get_random выбирает вариант из списков варианта ответа. Например: дата, время, убунту, доброе утро и др. Осуществялет команды date, time, man, fortune.|
56 |
57 | ## [karma.pm](https://github.com/zhmylove/jplbot/blob/master/src/karma.pm)
58 |
59 | Описывает класс karma, включает в себя все методы, связанные с кармой пользователя.
60 |
61 | |строки| код |
62 | |---------|------------------------------------|
63 | |27 - 37| `backup_karma` сохраняет карму текущего пользователя в `$karmafile.bak` |
64 | |47 - 73| конструктор `new` загружает `config`, после загружает карму из файла, который прописан в `config`|
65 | |76 - 92| `get_top` – выдает топ N по карме(в хэше хранятся пары «логин-карма»)|
66 | |96 - 125| `allowed_like` – проверяет, может ли `$src` лайкнуть `$dst`. Хранится хэш `$last_like`, в котором отмечается время последнего лайка (слишком часто лафкать нельзя)|
67 | |128 - 137| `get_karma` – выдает сообщение о карме пользователя другому пользователю|
68 | |140 - 154| `inc_karma` – вызывается, если `$src` хочет лайкнуть `$dst`|
69 | |157 - 170| `dec_karma` – аналогично inc_karma, но с целью дизлайкнуть пользователя|
70 |
71 | ## [tome.pm](https://github.com/zhmylove/jplbot/blob/master/src/tome.pm)
72 |
73 | Хранит историю и при надобности берет оттуда случайные фразы, которые выдает в чат.
74 |
75 |
76 | |строки| код |
77 | |---------|------------------------------------|
78 | |82 - 98| `new` – загружает параметры config-файла|
79 | |110 - 135| `read_tome_file` – загружает файл, все строки из него кидает в хэш `%tome`|
80 | |146 - 151| `save_tome_file` – обратная операция, записывает все фразы в `tome_file`|
81 | |165 - 190| `message` – записывает полученное сообщение в `tome`, в ответ выдает случайное из `tome`|
82 |
83 | # вопросы по этой штуке:
84 |
85 | ## роль автовивификации в perl
86 |
87 | Автовивификация — автоматическое создание ссылок в perl. Если в ходе исполнения кода возможно изменение значения переменной, то может произойти автовивификация. Суть в том, что при попытке разыменовать ссылку на `undef` автоматически создается хэш или массив, что упрощает код.
88 |
89 | ## принципы работы pod
90 |
91 | `Pod` – документация, встроенная прямо в код, плюс к тому же утилита, создающая документации html-страницы для чтения. Обладает стандартными блоками и директивами. Преимуществом является простота и удобство написания и чтения документации.
92 |
93 | ## принцип работы указателей в perl
94 |
95 | Указатели в perl — специальные скаляры, которые хранят ссылку на другой объект(скаляр, массив или хэш). Ссылку можно разыменовать (${$ref}, @{$ref}, %{$ref}) и получить тот скаляр, массив или хэш, на который указывает ссылка.
96 |
97 | ## отличие delete от undef
98 |
99 | Хэши представляют собой два скаляра: ключ и значение. Значение для необходимого ключа может оказаться `undef`. В таком случае `exists $array{$key}` вернет значение `true`. Если же из хэша удалили пару ключ-значение с помощью `delete $array{$key}`, в таком случае `exists $array{$key}` вернет `false`.
100 |
101 | ## принцип работы `->`
102 |
103 | `->` - разыменование ссылки, т. е. `${$ref}{some}` то же самое, что `$ref->some`. Т.к. объекты в perl – хэши, то для доступа к членам класса пишут стрелку
104 |
--------------------------------------------------------------------------------
/System-software/task2(operation).md:
--------------------------------------------------------------------------------
1 | ## 1. `perl -lne 'print if /((?w)|a)(?()e|r)/'`
2 |
3 | | что | что делает |
4 | |-----|------------|
5 | | ключ `l` | строки выводятся с символом `\n` |
6 | | ключ `e` | указывает, что далее следует perl-выражение, которое необходимо исполнить |
7 | | ключ `n` | указывает, что строка обработки оборачивается в цикл и обрабатывается каждая строка файлов, указанных в командной строке. Содержимое файлов не выводится|
8 | | конструкция `(?<имя>…)`| представляет собой именованные запоминающие скобки |
9 | | констркуция `((?w)\|a)` | если мы находим совпадение с `w`, мы его запоминаем, как группу с именем `q`, или ищем совпадение с `a` |
10 | | конструкция `(?(условие) шаблон-для-совпадения \| шаблон-для-несовпадения)` | оператор «если-то-иначе» |
11 | | конструкция `(?()e\|r)` | значит, что в случае совпадения с именованной группой `q`, ищется совпадение с `e`, иначе с `r` |
12 | | итог | данная команда выводит строки, содержащие `we` или `ar` |
13 |
14 | ## 2. `perl -lpe '$p = qr/(\((?:[^()]++|(?-1))*+\))/; $_/=2 unless /x $p \+ y $p/x'`
15 |
16 | | что | что делает |
17 | |-----|------------|
18 | | ключ `l` | строки выводятся с символом `\n` |
19 | | ключ `p` | указывает, что строка обработки оборачивается в цикл и обрабатывается каждая строка файлов, указанных в командной строке. Обрабатываемые строки печатаются |
20 | | ключ `e` | указывает, что далее следует perl-выражение, которое необходимо исполнить |
21 | | оператор `qr/` | оператор компиляции паттерна. Сам паттерн — в одной capture group |
22 | | квантификатор `*+` | квантификатор, требующий 0 или более раз, при этом исключает перебор «сколько раз совпадет субпаттерн», т. е. попробует максимальное кол-во раз, которое применяется паттерн, а меньшее кол-во пробовать не станет. Это оптимизирует перебор |
23 | | конструкция `((?:[^()]++\|(?-1))*+`| 0 или более раз повторяется шаблон, не содержащий 1 или более раз (с отсутствием перебора) скобки или (?-1), т. е. рекурсивно применить предыдущую объявленную capture group(по сути, все выражение). __Таким образом, выражение проверяет сбалансированность скобок в аргументе__|
24 | | выражение `$_/=2 unless /x $p \+ y $p/x`| берется $_ и делится пополам, но только в случае , если $_не подходит под регулярку /x $p \+ y $p/x |
25 | | модификатор `/x`| модификатор, указывает, что необходимо игнорировать пробелы внутри регулярки |
26 | | итог | регулярка ищет совпадения вида `xA+xB`, где `A` и `B` – строки со сбалансированными скобками (например x()+y()) |
27 |
28 | ## 3. `perl -lne 'continue if /[^a-z]/i;$v="aiueo";print if /^[^$v]?([$v][^$v])*[$v]?$/i'`
29 |
30 | | что | что делает |
31 | |-----|------------|
32 | | ключ `l` | строки выводятся с символом `\n` |
33 | | ключ `e` | указывает, что далее следует perl-выражение, которое необходимо исполнить |
34 | | ключ `n` | указывает, что строка обработки оборачивается в цикл и обрабатывается каждая строка файлов, указанных в командной строке. Содержимое файлов не выводится|
35 | | конструкция `if /[^a-z]/i`| иводимая строка проверяется на наличие символов, не являющихся буквами. Если таких нет, то выполняется дальнейший код |
36 | | выражение `print if` | выводит то, что ввели, если оно совпадает с регуляркой |
37 | | конструкция `^[^$v]?([$v][^$v])*[$v]?$/i` | строка букв, в которой чередуются гласные и согласные (`/i` — говорит о том, что регистр игнорируется) |
38 | | конструкция `[$v]` | гласная |
39 | | конструкция `[^$v]` | согласная |
40 | | итог | код читает строку, в случае, если она состоит только из букв, проверяет, чередуются ли в ней гласные с согласными. Если да — строка выводится |
41 |
42 | ## 4. `perl -lne '@c=();for(split""){if(y/([{/)]}/){push@c,$_;next}if(/[])}]/){@c=(1),last if($_ ne pop@c);next}}print"F" if@c'`
43 |
44 | | что | что делает |
45 | |-----|------------|
46 | | ключ `l` | строки выводятся с символом `\n` |
47 | | ключ `e` | указывает, что далее следует perl-выражение, которое необходимо исполнить |
48 | | ключ `n` | указывает, что строка обработки оборачивается в цикл и обрабатывается каждая строка файлов, указанных в командной строке. Содержимое файлов не выводится|
49 | | выражение `@c=()`| объявляется пустой массив с именем `c` |
50 | | выражение `for(split””)` | перебирает все ссимволы ввода |
51 | | выражение `if(y/([{/)]}/)` | заменяет `(` на `)`, `[` на `]`, `{` на `}`. `If` выполнится, если символ соответствует `(`, `[` или `{` |
52 | | выражения `push` `next` | cохраняется с помощью `push` первый символ в `@c` (аналог стека), выполнение идет дальше по циклу (`next` — переход к началу цикла, следующая итерации) |
53 | | выражение `if(/[])}]`| второй `if` выполнится, если перебираемый символ `]`, `}` или `)` |
54 | | выражение `@c=(1), last if($_ ne pop@c);next}}` | вынимается верхний элемент из `@c` и сравнивается с текущим. Если не совпало — выход из цикла (`last` – выйти из цикла при условии, что `$_ ne pop@c` – несовпадение рассматриваемого символа с элементом массива, имеющим максимальный индекс, элемент убирается из массива). Иначе — дальше по циклу |
55 | | выражение `print"F" if@c` | eсли после завершения цикла в `@c` что-то осталось — выводится `F` |
56 | | итог | программа определяет корректное расположение трех видов скобок во входной строке (например,`({})` или `[{}()([])]` - верно, `({)}` - не верно) |
57 |
58 | ## 5. `perl -lpe '/^[^][{}()]*(([({[])((?:[^][{}()]*+|(?1)))*(??{($0=$2)=~y|([{|)]}|;"\\$0"}))/||($_=$.)'`
59 |
60 | | что | что делает |
61 | |-----|------------|
62 | | ключ `l` | строки выводятся с символом `\n` |
63 | | ключ `p` | указывает, что строка обработки оборачивается в цикл и обрабатывается каждая строка файлов, указанных в командной строке. Обрабатываемые строки печатаются |
64 | | ключ `e` | указывает, что далее следует perl-выражение, которое необходимо исполнить |
65 | | конструкция `(([({[])((?:[^][{}()]*+\|(?1)))*(??{($0=$2)=~y\|([{\|)]}\|;"\\$0"}))` | запоминающие скобки, под номером 1 |
66 | | конструкция `([({[])` | запоминает, какая открывающая скобка была, хранится в `$2` |
67 | | конструкция `((?^[^][{}()]*+\|(?1)))*` | совпадение с не-скобками или выражению, соответствующему группе под номером 1 |
68 | | конструкция `$0=$2;` | запись в `$0` содержимго `$2` (переменная `$2` – хранит группу открывающей скобки). |
69 | | конструкция `0=~y\|([{\|)]}\|;` | замена открывающей скобки на закрывающую |
70 | | конструкция `“\\$0”`| регулярка из того, что получилось |
71 | | итог | данный код проверяет, что в выражении сбалансированы скобки трех типов |
72 |
73 | ## 6. `perl '-es!!),-#(-.?{<>-8#=..#<-*}>;*7-86)!;y!#()-?{}!\x20/`\``-v;-8#=..#< -*}>;*7-86)`. Т.к. аргумент не указан, код выполняется с переменной `$_` |
80 | | ключ `y` | замена символов (на входе 2 набора символов `А` и `В`, заменяет в строке символ `А[0]` на `В[0]`, `А[1]` на `B[1]` и т. д.) |
81 | | выражение `#()-?{}` | первый набор |
82 | | выражение `\x20/`-v;` | второй набор |
83 | | конструкция `)-?` | 'из первого набора' «все символы от `)` до `?` в ASCII-таблице по порядку |
84 | | конструкция ``\x20/`-v;`| 'второй набор' аналогично, но с `-v`, `\x20` – это пробел(код 32)|
85 | | вся конструкция | происходит замена `#` на пробел, `(` на `/`, `)` на ` и т. д. __После замены получим ‘cd /dev;sudo tee sda
46 |
47 | ### Dataflow Diagram;
48 |
49 | __Диаграмма потоков данных__ - описывает внешние по отношению к системе источники и адресаты данных, логические функции, потоки данных и хранилища данных, к которым осуществляется доступ.
50 |
51 |
52 |
53 | ### Deployment Diagram;
54 |
55 | __Диагра́мма развёртывания__ - моделирует физическое развертывание артефактов на узлах. (аппаратные компоненты, «узлы», существуют (веб-сервер, сервер БД, сервер приложения), программные компоненты, «артефакты», работают на каждом узле (веб-приложение, БД), и как части комплекса соединяются (JDBC, REST, RMI))
56 |
57 |
58 |
59 | ### FSM Diagram;
60 |
61 | __Конечные автоматы__ - математическая абстракция, модель дискретного устройства, имеющего один вход, один выход и в каждый момент времени находящегося в одном состоянии из множества возможных.
62 |
63 |
64 |
65 | ### Entity Diagram;
66 |
67 | __Модель «сущность — связь»__ - модель данных, позволяющая описывать концептуальные схемы предметной области. Используется при высокоуровневом проектировании баз данных. С её помощью можно выделить ключевые сущности и обозначить связи, которые могут устанавливаться между этими сущностями.
68 |
69 |
70 |
71 | ### Component & Interface diagram;
72 |
73 | __Диаграмма компонентов__ - элемент языка моделирования UML, статическая структурная диаграмма, которая показывает разбиение программной системы на структурные компоненты и связи (зависимости) между компонентами. В качестве физических компонентов могут выступать файлы, библиотеки, модули, исполняемые файлы, пакеты и т. п.
74 |
75 |
76 |
77 | __Диаграмма классов__ - статическая структурная диаграмма, описывающая структуру системы, демонстрирующая классы системы, их атрибуты, методы и зависимости между классами.
78 |
79 |
80 |
81 | ### Activity Diagram;
82 |
83 | __Диаграмма деятельности__ - UML-диаграмма, на которой показаны действия, состояния которых описано на диаграмме состояний.
84 |
85 | Диаграммы деятельности состоят из ограниченного количества фигур, соединённых стрелками. Основные фигуры:
86 |
87 | - Прямоугольники с закруглениями — действия
88 | - Ромбы — решения
89 | - Широкие полосы — начало (разветвление) и окончание (схождение) ветвления действий
90 | - Чёрный круг — начало процесса (начальный узел)
91 | - Чёрный круг с обводкой — окончание процесса (финальный узел)
92 |
93 |
94 |
95 | ### Use-case Diagram;
96 |
97 | __Диаграмма прецедентов__ - диаграмма, отражающая отношения между акторами и прецедентами и являющаяся составной частью модели прецедентов, позволяющей описать систему на концептуальном уровне
98 |
99 | - обобщение прецедента — стрелка с не закрашенным треугольником
100 | - включение прецедента — пунктирная стрелка со стереотипом «include»,
101 | - расширение прецедента — пунктирная стрелка со стереотипом «extend»
102 |
103 |
104 |
105 | ### BPMN;
106 |
107 | __BPMN__(Business Process Model and Notation, нотация и модель бизнес-процессов) — система условных обозначений и их описания в XML для моделирования бизнес-процессов.
108 |
109 |
110 |
111 | ### Archimate;
112 |
113 | это открытый и независимый язык моделирования архитектуры предприятия для поддержки описания, анализа и визуализации архитектуры внутри и за пределами бизнес-процессов однозначным способом.
114 |
115 | К базовым понятиям языка относятся понятия «элемент» и «отношение».
116 |
117 | ### Ontology (ISO 15926);
118 |
119 | Включает в себя представление, формальное именование и определение категорий, свойств и отношений между концепциями, данными и объектами, которые обосновывают одну, многие или все области
120 |
121 | # Это может пригодиться на второй лабе
122 |
123 | ## Моделирование данных
124 |
125 | ### Моделирование баз данных
126 |
127 | Процесс описания или построения модели предметной области в том виде или формате, который, с одной стороны, легко воспринимается человеком, и, с другой стороны, легко может быть преобразован в набор элементов информационного хранилища, программных компонентов и других составляющих прикладного программного обеспечения.
128 |
129 | __Информационное моделирование предметных областей__ - В программном обеспечении объекты находятся в определенных взаимосвязях друг с другом. Существует 3 вида взаимосвязей : ассоциация, обобщение и агрегаци
130 |
131 | __Нормализация баз данных__ - Нормальные формы — это рекомендации по проектированию баз данных.
132 |
133 | #### Первая нормальная форма
134 |
135 | Первая нормальная форма гласит, что таблица базы данных — это представление сущности вашей системы, которую вы создаёте
136 |
137 | Для нее характерны:
138 | - Первичные ключи (каждая таблица имеет первичный ключ, состоящий из наименьшего возможного количества полей.)
139 | - Атомарность (поля не имеют дубликатов в каждой записи и каждое поле содержит только одно значение.)
140 | - Порядок записей не должен иметь значение.
141 |
142 | #### Вторая нормальная форма
143 |
144 | Первая нормальная форма +
145 |
146 | - Избыточность данных (поля с не первичным ключом не должны быть зависимы от первичного ключа.)
147 |
148 | #### 3НФ
149 |
150 | 2НФ + выносить все не ключевые поля, содержимое которых может относиться к нескольким записям таблицы в отдельные таблицы
151 |
152 | #### 4НФ
153 |
154 | 3НФ + все нетривиальные многозначные зависимости фактически являются функциональными зависимостями от ее потенциальных ключей.
155 |
156 | #### 5НФ
157 |
158 | 4НФ + отсутствуют сложные зависимые соединения между атрибутами.
159 |
160 | Если «Атрибут_1» зависит от «Атрибута_2», а «Атрибут_2» в свою очередь зависит от «Атрибута_3», а «Атрибут_3» зависит от «Атрибута_1», то все три атрибута обязательно входят в один кортеж.
161 |
162 | #### 6НФ
163 |
164 | 5НФ + неприводима, то есть не может быть подвергнута дальнейшей декомпозиции без потерь
165 |
166 | ### Структурная модель предметной области
167 |
168 | Структурный аспект предполагает построение
169 |
170 | - объектной структуры, отражающей состав взаимодействующих в
171 | процессах материальных и информационных объектов предметной
172 | области;
173 |
174 | - функциональной структуры, отражающей взаимосвязь функций
175 | (действий) по преобразованию объектов в процессах;
176 |
177 | - структуры управления, отражающей события и бизнес-правила, которые воздействуют на выполнение процессов;
178 | организационной структуры, отражающей взаимодействие организационных единиц предприятия и персонала в процессах;
179 |
180 | - технической структуры, описывающей топологию расположения и
181 | способы коммуникации комплекса технических средств.
182 |
183 | Главный критерий адекватности структурной модели предметной области заключается в функциональной полноте разрабатываемой системы.
184 |
185 | Оценочные аспекты моделирования:
186 |
187 | - время решения задач;
188 | - стоимостные затраты на обработку данных;
189 | - надежность процессов;
190 | - косвенные показатели эффективности, такие, как объемы производства, производительность труда, оборачиваемость капитала, рентабельность и т.д.
191 |
192 | ### Объектная структура
193 |
194 | Внешний уровень - основные виды материальных объектов и основные виды информационных объектов или документов
195 |
196 | Концептуальный уровень - уточняется состав классов объектов, определяются их атрибуты и взаимосвязи. Таким образом, строится обобщенное представление структуры предметной области.
197 |
198 | Внутренний уровень - концептуальная модель отображается в виде файлов базы данных, входных и выходных документов
199 |
200 | ### Функциональная структура
201 |
202 | На __внешнем__ уровне определяется список основных бизнес-функций или видов бизнес-процессов.
203 |
204 | На __концептуальном__ уровне выделенные функции декомпозируются и строятся иерархии взаимосвязанных функций.
205 |
206 | На __внутреннем__ уровне отображается структура информационного процесса в компьютере: определяются иерархические структуры программных модулей, реализующих автоматизируемые функции.
207 |
208 |
209 | ### Структура управления
210 |
211 | О бизнес-логике (заказ оплачен, доставка и пр)
212 |
213 | На __внешнем__ уровне определяются список внешних событий, вызываемых взаимодействием предприятия с внешней средой (платежи налогов, процентов по кредитам, поставки по контрактам и т.д.), и список целевых установок, которым должны соответствовать бизнес-процессы (регламент выполнения процессов, поддержка уровня материальных запасов, уровень качества продукции и т.д.).
214 |
215 | На __концептуальном__ уровне устанавливаются бизнес-правила, определяющие условия вызова функций при возникновении событий и достижении состояний объектов.
216 |
217 | На __внутреннем__ уровне выполняется формализация бизнес-правил в виде триггеров или вызовов программных модулей.
218 |
219 | ### Организационная структура
220 |
221 | На внешнем уровне строится структурная модель предприятия в виде иерархии подчинения организационных единиц или списков взаимодействующих подразделений.
222 |
223 | На концептуальном уровне для каждого подразделения задается организационно-штатная структура должностей (ролей персонала).
224 |
225 | На внутреннем уровне определяются требования к правам доступа персонала к автоматизируемым функциям информационной системы.
226 |
227 | ### Техническая структура
228 |
229 | Топология определяет территориальное размещение технических средств по структурным подразделениям предприятия, а коммуникация — технический способ реализации взаимодействия структурных подразделений.
230 |
231 | На внешнем уровне модели определяются типы технических средств обработки данных и их размещение по структурным подразделениям.
232 |
233 | На концептуальном уровне определяется способы коммуникаций между техническими комплексами структурных подразделений: физическое перемещение документов, машинных носителей, обмен информацией по каналам связи и т.д.
234 |
235 | ## Архитектурный стиль
236 |
237 | Архитектурный стиль, иногда называемый архитектурным шаблоном – это набор принципов, высокоуровневая схема, обеспечивающая абстрактную инфраструктуру для семейства систем.
238 |
239 | Обзор основных архитектурных стилей
240 |
241 | |Архитектурный стиль|Описание|
242 | |-------------------|--------|
243 | |Клиент/сервер | Система разделяется на два приложения, где клиент выполняет запросы к серверу.|
244 | |Компонентная архитектура | Дизайн приложения разлагается на функциональные или логические компоненты с возможностью повторного использования |
245 | |Дизайн на основе предметной области | Cтиль, oриентированный на моделирование сферы деловой активности и определяющий бизнес-объекты на основании активности и определяющий бизнес-объекты на основании |
246 | |Многослойная архитектура | Функциональные области приложения разделяются на многослойные группы |
247 | |Шина сообщений | Архитектурный стиль, предписывающий использование программной системы, которая может принимать и отправлять сообщения по одному или более каналам связи, так что приложения получают возможность взаимодействовать, не располагая конкретными сведениями друг о друге. |
248 | |N-уровневая / 3-уровневая | Функциональность выделяется в отдельные сегменты, во многом аналогично многослойному стилю, но в данном случае сегменты физически располагаются на разных компьютерах. |
249 | |Объектно-ориентированная | Парадигма проектирования, основанная на распределении ответственности приложения или системы между отдельными многократно используемыми и самостоятельными объектами, содержащими данные и поведение. |
250 | |Сервисно-оринетрированная архитектура (SOA) | Описывает приложения, предоставляющие и потребляющие функциональность в виде сервисов с помощью контрактов и сообщений.|
251 | # Вопросы, которые были обещаны
252 |
253 | ## Лицензии
254 |
255 |
256 |
--------------------------------------------------------------------------------
/information_security/lab1_questions.md:
--------------------------------------------------------------------------------
1 | ## 1. Дайте определение следующим понятиям: шифр, криптография, криптоанализ, ключ.
2 | __Шифр__ — система обратимых преобразований, зависящая от некоторого секретного параметра (ключа) и предназначенная для обеспечения секретности передаваемой информации.
3 | __Криптография__ — наука о методах обеспечения конфиденциальности, целостности данных, аутентификации, шифрования.
4 | __Криптоанализ__ — наука о методах дешифровки зашифрованной информации без предназначенного для этого ключа.
5 | __Ключ__ — секретная информация, используемая криптографическим алгоритмом при зашифровании/расшифровании сообщений.
6 |
7 | ## 2. Классифицируйте алгоритм, полученный в качестве задания к лабораторной работе.
8 | __Классификация алгоритмов шифрования__
9 |
10 | Шифры бывают симметричные или ассиметричные:
11 | - Симметричный шифр использует один ключ для шифрования и расшифрования.
12 | - Асимметричный шифр использует два различных ключа.
13 |
14 | Шифры бывают потоковые или блочные:
15 | - Блочный шифр шифрует сразу целый блок текста, выдавая шифротекст после получения всей информации.
16 | - Поточный шифр шифрует информацию посимвольно и выдаёт шифротекст по мере поступления.
17 |
18 | В зависимости от алгоритма шифрования шифры могут быть:
19 | - Шифр подстановки - метод шифрования, в котором элементы исходного текста заменяются зашифрованным текстом в соответствии с некоторым правилом.
20 | - Шифр перестановки - метод шифрования, в котором элементы текста переставляются в ином от исходного порядке, а сами элементы остаются неизменными.
21 | - И не только? =)
22 |
23 | Шифры подстановки также подразделяются на:
24 | - Одноалфавитный шифр подстановки — шифр, при котором каждый символ открытого текста заменяется на некоторый, фиксированный при данном ключе символ того же алфавита. (Например, шифр Цезаря)
25 | - Однозвучный шифр подстановки похож на одноалфавитный за исключением того, что символ открытого текста может быть заменен одним из нескольких возможных символов.
26 | - Полиграммный шифр подстановки заменяет не один символ, а целую группу. (Например, шифр Плейфера)
27 | - Полиалфавитный шифр подстановки состоит из нескольких шифров простой замены. (Например, шифр Виженера, шифр Бофора, одноразовый блокнот)
28 |
29 | _Пример:_ Аффинный шифр - симметричный моноалфавитный шифр подстановки.
30 |
31 | ## 3. Чем отличаются одно- и многоалфавитные методы шифрования?
32 | В одноалфавитном методе шифрования каждый символ заменяется на зашифрованный символ по одному и тому же правилу.
33 | В многоалфавитном методе используются несколько различных одноалфавитных методов и каждый символ заменяется на зашифрованный по разным правилам. Например, используется 3 различных одноалфавитных метода. Тогда в строке _ABCDEF_ символ _A_ будет преобразован первым методом, символ _B_ вторым, символ _C_ третьим, а _D_ снова первым и так далее.
34 |
35 | ## 4. В чем заключается основной принцип частотного криптоанализа?
36 | Частотный криптоанализ базируется на идее того, что в языке существует нетривиальное статистическое распределение отдельных символов и их последовательностей, которое, с точностью до замены символов, будет сохраняться в процессе шифрования и дешифрования.
37 | То есть, можно посчитать вероятности появления каждой буквы, используя тексты на определенном языке, а затем посчитать вероятности появления каждой буквы в зашифрованном тексте и сопоставить их для дешифрации.
38 |
39 | ## 5. Какой метод криптоанализа применим для вскрытия алгоритма, полученного вами в качестве задания к лабораторной работе?
40 | __Шифр Цезаря__
41 | Количество возможных ключей равно мощности алфавита и соответственно очень мало, поэтому здесь лучше всего воспользоваться перебором.
42 |
43 | __Аффинный шифр__
44 | Количество возможных ключей в Аффинном шифре больше, чем в шифре Цезаря, но все также довольно мало, поэтому здесь хорошо подойдет метод перебора.
45 | Однако, если известно хотя бы две взаимосвязи между исходным и зашифрованным алфавитом, то шифр можно вскрыть системой уравнений.
46 | Так, если известно что буквы исходного алфавита _XB_ в зашифрованном алфавите равны _OX_, то можно построить следующую систему уравнений:
47 | 24 * a + b = 15
48 | 2 * a + b = 24
49 | Отсюда можно найти a и b
50 |
51 | ## 6. Оцените мощность ключевого пространства вашего алгоритма.
52 | Мощность ключевого пространства |K| - это количество возможных ключей, которыми можно зашифровать данные.
53 |
54 | __Шифр Цезаря__
55 | |K| определяется как количество символов в алфавите. Например, для английского алфавита это будет 26.
56 |
57 | __Аффинный шифр__
58 | |K| = _a_ * _b_
59 | Для английского алфавита _b_ = 26, а количество возможных _a_, которые являются взаимно простыми с 26 составляет 12.
60 | Таким образом, |K| = 12 * 26 = 312
61 |
--------------------------------------------------------------------------------
/information_security/lab2_questions.md:
--------------------------------------------------------------------------------
1 | ## 1. Перечислите основные обратимые операции, используемые в образующих функциях блочных шифров.
2 | Обратимые операции это такие операции, которые позволяют после их применения откатиться к предыдущему состоянию.
3 | То есть, после применении операции _op_ на _x_ и _y_ и перезаписи переменной _x_
4 | _x = x op y_
5 | Можно откатиться к предыдущему состоянию _x_, зная _y_ и новое состояние _x_ с помощью операции _deop_
6 | _x = x deop y_
7 |
8 | __Обратимые операции__
9 | - Сложение
10 | Обращение достигается вычитанием
11 | x' = x + y
12 | x = x' - y
13 |
14 | - Умножение
15 | Обращение достигается делением
16 | x' = x * y
17 | x = x' / y
18 | - Инверсия
19 | Обращение достигается повторным применением инверсии
20 | x' = !x
21 | x = !x'
22 | - Исключающее ИЛИ
23 | Обращение достигается повторным применением исключающего ИЛИ
24 | x' = x ^ y
25 | x = x' ^ y
26 |
27 | __Необратимые операции__
28 | - И
29 | x' = x & y
30 | Получить исходное значение _x_ невозможно, так как если _y = 0_, то _x'_ всегда будет равен 0 и _x_ в данном случае может быть равен как 0, так и 1
31 |
32 | - ИЛИ
33 | x' = x | y
34 | Получить исходное значение _x_ невозможно, так как если _y = 1_, то _x'_ всегда будет равен 1 и _x_ в данном случае может быть равен как 0, так и 1
35 |
36 | ## 2. Что такое сеть Фейштеля? В чем ее основные достоинства?
37 | Сеть Фейштеля это метод построения блочных шифров. Сеть состоит из ячеек, называемых ячейками Фейштеля. На вход каждой ячейки поступают данные и ключ. На выходе каждой ячейки получают изменённые данные и изменённый ключ. Все ячейки однотипны, и говорят, что сеть представляет собой определённую многократно повторяющуюся (итерированную) структуру. Ключ выбирается в зависимости от алгоритма шифрования/расшифрования и меняется при переходе от одной ячейки к другой. При шифровании и расшифровании выполняются одни и те же операции, отличается только порядок ключей.
38 |
39 | Достоинства:
40 | - Легко реализовать программно
41 | - ???
42 |
43 | ## 3. Какие параметры блочных шифров влияют на его криптостойкость?
44 | - Длина ключа
45 | - Запутывание (конфузия) — шифрование зависит от ключа сложным и запутанным образом
46 | - Рассеяние (диффузия) — каждый бит исходного текста влияет на каждый бит зашифрованного текста
47 |
48 | ## 4. Какие блочные шифры, построенные по принципу сети Фейштеля, вам известны?
49 | IDEA, TEA, RC6, ГОСТ 28147-89, DES
50 |
51 | ## 5. Проведите сравнительный анализ алгоритмов ГОСТ 28147-89 и Rijndael.
52 | https://ecm-journal.ru/files/150076131.pdf
53 | ГОСТ 28147-89 основан на сети Фейстеля, а Rijndael(AES) основан на SP-сети.
54 |
55 | В ГОСТе на каждом раунде шифруемый блок делится на две части, одна из
56 | которых модифицируется путем побитового сложения по модулю 2 (XOR) со значением,
57 | вырабатываемом из другой части и ключевого элемента раунда с помощью функции
58 | шифрования. Между раундами части блока меняются местами, и, таким образом, на
59 | следующем раунде текущий измененный блок станет неизменным и наоборот. Важной особенностью этого подхода
60 | является то, что за раунд шифруется ровно половина блока.
61 |
62 | В Rijndael шифруемый блок и его промежуточные состояния в ходе преобразования
63 | представляются в виде матрицы байтов 4x4.
64 | Функция нелинейного преобразования в алгоритме Rijndael состоит из трех следующих
65 | элементарных преобразований, выполняемых последовательно:
66 | 1. Байтовая подстановка – каждый байт преобразуемого блока заменяется новым значением
67 | 2. Побайтовый циклический сдвиг в строках матрицы: первая строка остается неизменной,
68 | вторая строка циклически сдвигается влево на 1 байт, третья на 2 байта, четвертая на 3 байта
69 | 3. Матричное умножение – полученная на предыдущем шаге матрица умножается слева на
70 | следующую матрицу–циркулянт
71 | Зашифрование также состоит из серии однотипных шагов, раундов, однако на каждом
72 | раунде блок преобразуется как единое целое и не остается неизменных частей блока. Таким
73 | образом, за раунд шифруется полный блок, следовательно, для обеспечения сопоставимой
74 | сложности и нелинейности преобразования таких шагов требуется вдвое меньше по
75 | сравнению с сетью Фейстеля.
76 |
77 | Другие различия:
78 | - В ГОСТ размер блока 64, а в AES 128
79 | - В ГОСТ размер ключа 256, а в AES 128, 192 или 256
80 | - В ГОСТ 32 раунда шифрования, а в AES 10, 12 или 14
81 |
82 |
83 |
84 | ## 6. Проведите сравнительный анализ режимов шифрования CBC и ECB.
85 | В ECB каждый блок шифруется отдельно, а в CBC каждый следующий блок зависит от предыдущего.
86 | ECB является простейшим режимом шифрования. Независимость блоков друг от друга позволяет распараллелить их обработку. Особенностью этого режима также является сохранение статистических особенностей исходного текста, так как порядок блоков остается такой же и они не влияют друг на друга.
87 | CBC является более надежным режимом, но его шифрование нельзя распараллелить (дешифровку распараллелить можно). В нем нельзя обнаружить статистические особенности исходного текста и зашифрованные данные получаются псевдослучайными. Наличие инициализирующего вектора позволяет создавать уникальные зашифрованные тексты даже при применении одного и того же ключа для алгоритма шифрования.
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 | ## 7. Проведите сравнительный анализ режимов шифрования CBC и CFB.
98 | Режим шифрования CFB обладает несколькими преимуществами перед CBC.
99 | В CFB не нужно добавлять padding, если последний блок оказался меньше размера блока, так как в CFB мы не шифруем блоки непосредственно, а только XOR'им с результатом шифрования предыдущего блока.
100 | Также не нужно реализовывать блочный алгоритм дешифрования, так как в CFB как для шифрования, так и дешифрования используется один и тот же алгоритм шифрования.
101 | Как и в CBC, так и в CFB шифрование нельзя распараллелить а дешифрование можно.
102 |
103 |
104 |
105 |
106 |
107 |
--------------------------------------------------------------------------------
/information_security/lecture_1.md:
--------------------------------------------------------------------------------
1 | ## Информационная безопасность
2 | Информационная безопасность это практика предотвращения несанкционированного доступа, использования, раскрытия, искажения, изменения, исследования, записи или уничтожения информации.
3 | Это универсальное понятие, которое применяется вне зависимости от формы информации (электронная или физическая).
4 | Главная задача - сбалансированная защита __конфиденциальности, доступности и целостности данных.__
5 |
6 | ## Триада CIA
7 | __C__ onfidentiality
8 | Конфиденциальность - свойство информации быть недоступной для неавторизованных лиц, сущностей или процессов.
9 |
10 | __I__ ntegrity
11 | Целостность - свойство сохранения правильности и полноты активов, сохранение информации в неискаженном виде.
12 |
13 | __A__ vailability
14 | Доступность - свойство информации быть доступной и готовной к использованию по запросу авторизованного субъекта, имеющего на это право.
15 |
16 | ## Защищаемая информация
17 | __Признаки:__
18 | - Есть определенный круг законных пользователей, которые имеют право владеть этой информацией
19 | - Есть незаконные пользователи, которые стремятся овладеть этой информацией для того, чтобы обратить ее себе во благо, а законным пользователям во вред
20 |
21 | __Примеры:__
22 | - Персональные данные _(ФИО сами по себе не являются персональными данными. Чтобы они являлись персональными данными необходим хотя бы еще один идентификатор: дата рождения, адрес, семейное положение, образование, профессия, email...)_
23 | - Государственная тайна _(сведения в области военной, внешне-политической, экономической, разведовывательной, оперативно-розыскной деятельности государства)_
24 | - Военная тайна _(подчасть государственной тайны)_
25 | - Коммерческая тайна _(например: условия и особенности работы, премирование, код и архитектура проектов. Трудовой договор и зарплата не являются коммерческой тайной)_
26 | - Профессиональные конфиденциальные данные
27 |
28 | К персональным данным относятся:
29 | - Общие персональные данные
30 | - Биометрические персональные данные
31 | - Общедоступные персонифицированные данные
32 | - Обезличенные персональные данные
33 | - Специальные персональные данные
34 |
35 | ## Объекты защиты информационной безопасности
36 | - Информационные ресурсы
37 | - Права граждан, организаций и государства на доступ к информации
38 | - Система создания, использования и распространения данных
39 | - Система формирования общественного сознания
40 |
41 | ## Угрозы информационной безопасности
42 | - Уничтожение информационных объектов
43 | - Утечка информации
44 | - Искажение информации
45 | - Блокирование объекта информации
46 |
47 | Источники угроз:
48 | - Внешние _(атаки извне)_
49 | - Внутренние _(инсайдеры, социальная инженерия)_
50 |
51 | Угроза нарушения конфиденциальности:
52 | - Хищение носителей информации
53 | - Несанкционированный доступ к информационным системам
54 | - Выполнение пользователем несанкционированных действий
55 | - Перехват данных, передаваемых по каналам связи
56 | - Раскрытие содержания информации
57 |
58 | Угроза нарушения целостности
59 | - Уничтожение носителей информации
60 | - Внесение несанкционированных изменений в программы и данные
61 | - Установка и использование нештатного ПО
62 | - Заражение вирусами
63 | - Внедрение дезинформации
64 |
65 | ## Средства защиты информации
66 |
67 | Нормативные (неформальные) средства защиты:
68 | - Нормативные (законодательные)
69 | - Международные конвенции
70 | - Конституция РФ
71 | - Федеральные законы "Об информации, информационных технологиях и защите информации"
72 | - Административные (организационные)
73 | - Сертификация деятельности _(средства информационной безопасности должны проходить испытания в сертифицированных лабораториях. Лицензированием и сертификацией занимается ФСТЭК и ФСБ)_
74 | - Аттестация субъектов или объектов
75 | - Лицензирование _(компания должна иметь лицензию для разработки средств защиты вычислительных систем и сетей, криптографических средств защиты)_
76 | - Доступ в интернет, к внешним ресурсам, к электронной почте _(а также физический доступ к помещениям, например к дата-центрам)_
77 | - Морально-этические
78 | - Правила поведения в обществе или коллективе
79 | - Личное отношение человека к конфиденциальной информации
80 |
81 | Технические (формальные):
82 | - Физические - Любые устройства, которые функционируют независимо от информационных систем и создают препятствия для доступа к ним
83 | - Аппаратные - Любые устройства, которые встраиваются в информационные и телекоммуникационные системы. Они препятствуют доступу к информации, в том числе с помощью ее маскировки
84 | - Программные - Программы, предназначенные для решения задач, связанных с обеспечением информационной безопасности
85 | - DLP-системы (Data Leak Prevention) - служат для предотвращения утечки, переформатирования информации и перенаправления информационных потоков
86 | - SIEM-системы (Security Information and Event Management) - обеспечивают анализ в реальном времени событий безопасности, исходящих от сетевых устройств и приложений
87 | - Криптографические - Внедрение криптографических и стеганографических методов защиты данных для безопасной передачи по корпоративной сети или глобальной сети
88 |
89 | Как выбрать средство защиты? Для этого необходимо оценить:
90 | - Является ли информация для противника более ценной, чем стоимость атаки?
91 | - Является она для вас более ценной, чем стоимость защиты?
92 |
93 | __Российские стандарты информационной безопасности__
94 | - Стандарт шифрования ГОСТ 28147-89
95 | - Стандарт хэш-функции ГОСТ Р 34.11-2018
96 | - Стандарт цифровой подписи ГОСТ Р 34.10-2018
97 | - Средства вычислительной техники. Защита от НСД. Общие технические требования. ГОСТ Р 507359-95
98 | - Уголовный кодекс РФ, глава 28 "Преступления в сфере компьютерной информации"
99 | - Статья 272 "Неправомерный доступ к компьютерной информации"
100 | - Статья 273 "Создание, использование и распространение вредоносных компьютерных программ"
101 | - Статья 274 "Нарушение правил эксплуатации средств хранения, обработки или передачи компьютерной информации и информационно-телекоммуникационных сетей"
102 |
103 | __Стандарт защищенности США__
104 | TCSEC (Trusted Computer System Evaluation Criteria) - Критерии определения безопасности компьютерных систем.
105 | Также называется "Оранжевая книга". Это стандарт министерства обороны США, принятый в 1985г, который устанавливает основные условия для оценки эффективности средств компьютерной безопасности.
106 |
107 | __Европейские критерии ИБ__
108 | - Международный стандарт ISO-IEC 15408. Общие критерии оценки информационной безопасности.
109 | - Стандарт ISO 17799. Международный стандарт сетевой безопаности.
110 | - Ripe MD-160. Стандарт цифровой подписи.
111 |
112 | __Международный стандарт ИБ IOS/IEC 2700-2016__
113 | ISO - Международная комиссия по стандартизации
114 | IEC - Международная энергетическая комиссия
115 |
116 | ## Источники, которые угрожают информационной безопасности
117 | - Угрозы от персонала
118 | - Разглашение
119 | - Передача сведений о защите
120 | - Халатность
121 | - Вербовка
122 | - Подкуп персонала
123 | - Уход с рабочего места
124 | - Физическое устранение
125 | - Угрозы от злоумышленников
126 | - Случайное удаление данных
127 | - Компьютерные вирусы
128 | - Вредоносное ПО
129 | - Программные закладки
130 | - Отказ в работе операционной системы
131 | - Природный фактор (пожары, наводнения, аварии в энергосистемах)
132 | - Активность воздействия угроз на инфоресурсы
133 |
134 | Хакер - это индивидуум, который получает удовольствие от изучения деталей функционирования компьютерных систем и от расширения их возможностей, в отличие от большинства пользователей компьютеров, которым интересен лишь необходимый минимум
135 | Крэкер - взламывает чужие вычислительные системы и крадет чужую информацию
136 |
137 | Мотивация атакующих:
138 | - Вымогательство
139 | - Охота за данными
140 | - Перехват пользовательского трафика
141 | - Захват вычислительных ресурсов
142 | - Недоброжелатели
143 | - Идеологические противники
144 | - Just for fun
145 |
146 | Виды атакующих:
147 | - Роботы (ботнеты)
148 | - Профи
149 | - White hat hacker
150 | - Black hat hacker
151 | - Gray hat hacker
152 | - Script kiddie
153 | - Criminal Gangs
154 | - Hacktivist
155 | - Cyberwarfare
156 |
157 | ## Компьютерные вирусы
158 | Компьютерные вирусы - разновидность вредоносных программ, которые способны размножаться
159 | Классификация:
160 | - По поражаемым объектам
161 | - Файловые вирусы
162 | - Загрузочные вирусы
163 | - Скриптовые вирусы
164 | - Сетевые черви
165 | - По поражаемым операционным системам
166 | - DOS
167 | - Microsoft Windows
168 | - Unix
169 | - По технологиям, используемым вирусом
170 | - Полиморфные вирусы
171 | - Стелс-вирусы
172 | - По языку, на котором написан вирус
173 | - Ассемблер
174 | - Высокоуровневый язык
175 | - Язык сценариев
176 | - По механизму заражения
177 | - Паразитирующие
178 | - Перезаписывающие
179 | - Спутники
180 | - По дополнительной вредоносной функциональности
181 | - Бэкдоры
182 | - Кейлоггеры
183 | - Шпионы
184 | - Ботнеты
185 |
186 | ## Уязвимость
187 | __ГОСТ Р 56456-2015__
188 | Уязвимость - это недостаток программно-технического средства или информационной системы в целом, который может быть использован для реализации угроз безопасности информации
189 |
190 | __ISO/IEC 27000:2018__
191 | Уязвимость - это слабое место актива или средство контроля и управления, которое может быть использовано злоумышленниками
192 |
193 | Типы уязвимостей:
194 | - Уязвимость кода (баги, логические ошибки)
195 | - Уязвимость конфигурации
196 | - Уязвимость архитектуры
197 | - Организационная уязвимость
198 | - Многофакторная уязвимость
199 |
200 | Безопасное программирование - это методика разработки ПО, предотвращающая случайное внедрение уязвимостей и обеспечивающая устойчивость к воздействию вредоносных программ и несанкционированному доступу.
201 |
202 | Принципы разработки безопасного ПО:
203 | - работоспособность и полезность
204 | - безопасность
205 | - надежность
206 | - конфиденциальность
207 | - обеспечение целостности и корректности бизнеса
208 |
209 | ## Trivia
210 | - Самая популярная атака это drive-by атака
211 | - Защита бумажных документов от воздействия внешней среды (пожаров, разложения бумаги и т.д.) тоже считается защитой информации
212 | - Программные средства защиты помогают только от известных атак
213 | - Фишинг - это вид атак с целью получения ваших идентификационных данных
214 |
--------------------------------------------------------------------------------
/information_security/lecture_2.md:
--------------------------------------------------------------------------------
1 | # ГОСТ Р 56939-2016 «Защита информации. Разработка безопасного программного обеспечения. Общие требования»
2 |
3 | Описывает комплекс мер, которые реализуются в процессе функционирования и сопровождения ПО, сопровождения и поддержки среды обеспечения оперативного
4 | устранения выявленных пользователем ошибок ПО
5 |
6 | направлен на устранение ошибок безопасности и снижение рисков уязвимостей.
7 |
8 | содержит список действий, которые рекомендуется применять на различных этапах жизненного цикла разработки ПО.
9 |
10 | ## Этапы разработки стандарта
11 |
12 | 
13 |
14 | __Зачем создали этот стандарт?__
15 |
16 | - нужна была некая БД уязвимостей ПО, в первую очередь для России
17 |
18 | - необходмость проведения анализа уязвимостей в рамках сертификации
19 |
20 | ## Целевая аудитория
21 |
22 | Разработчики и производители программного обеспечения
23 |
24 | - Являются основной
25 | аудиторией
26 |
27 | - В стандарте представлены
28 | требования к реализации мер и
29 | свидетельствам
30 |
31 | - Дополнительно документ может
32 | использоваться для декларации
33 | соответствия
34 |
35 | ## Оценщики
36 |
37 | - Органы по сертификации,
38 | аккредитованные испытательные
39 | лаборатории
40 |
41 | - Не является основной аудиторией
42 |
43 | - В стандарте представлены требования к
44 | свидетельствам
45 |
46 | - В стандарте не предъявляются требования к
47 | действиям оценщиков
48 |
49 | ## Ключевые моменты
50 |
51 | - устанавливает общие требования к содержанию и порядку выполнения работ, связанных с созданием безопасного ПО. Детали соответстующих процессов не регламентируются.
52 |
53 | - стандартом вводится базовый набор мер по разработке безопасного ПО
54 |
55 | - при невозможности реализации отдельных мер из базового набора, разработчик имеет право реалиовать некоторые компенсирующие меры.
56 |
57 | - предусмотрено 6 видов испытаний ПО:
58 |
59 | 1. статистический анализ
60 | 2. экспертиза кода
61 | 3. функциональное тестирование
62 | 4. тестирование на проникнование
63 | 5. динамический анализ кода
64 | 6. фаззинг тестирование
65 |
66 | - необходимость защиты инфраструктуры среды рзработки ПО, необходимость обеспечения конфиденциальности информации, получаемой в ходе анализа кода и тестирования
67 |
68 | ## под безопасным программным обеспечением понимается
69 |
70 | «программное обеспечение, разработанное с использованием совокупности мер,
71 | направленных на предотвращение появления и устранение уязвимостей программы».
72 |
73 |
74 | ## Меры по разработке безопасного ПО
75 |
76 | `может-следует-должен`
77 |
78 | ## Документы, которые должны быть в наличии, часть 1
79 |
80 | ### Документы с требованием к организации
81 |
82 | - Политика информационной безопасности в соответствии с ИСО/МЭК 27001.
83 |
84 | - Руководство по разработке безопасного ПО.
85 |
86 | - Перечень требований по безопасности.
87 |
88 | - Модель угроз безопасности.
89 |
90 | - Программа обучения сотрудников в области разработки безопасного ПО.
91 |
92 | ### Документы с требованием к разработки
93 |
94 | - Перечень инструментальных средств разработки ПО.
95 |
96 | - Регламент защиты инфраструктуры среды разработки ПО.
97 |
98 | - Порядок оформления исходного кода программы.
99 |
100 | - Регламент и протоколы экспертизы исходного кода программы
101 |
102 | ### Документы с требованием к ПО
103 |
104 | - Проект архитектуры программы (логическая структура программы).
105 |
106 | - Описание проектных решений, обеспечивающих выполнение
107 | требований по безопасности.
108 |
109 | - Регламент экстренного выпуска обновлений ПО.
110 |
111 | - Регламент маркировки версий ПО.
112 |
113 | - Регламент управления конфигурацией ПО.
114 |
115 | - Регламент резервного копирования конфигурации ПО.
116 |
117 | - Регламент регистрации событий изменений конфигурации ПО.
118 |
119 | ### Документы с требованием к тестированию
120 |
121 | - Регламент и протоколы статического тестирования программы.
122 |
123 | - Регламент и протоколы функционального тестирования
124 | программы.
125 |
126 | - Регламент и протоколы тестирования на проникновение.
127 |
128 | - Регламент и протоколы динамического анализа кода программы.
129 |
130 | - Регламент и протоколы фаззинг-тестирования программы.
131 |
132 | - Регламент, протоколы и журналы поиска уязвимостей
133 | программы.
134 |
135 |
136 | ### Документы с требованием к сопровождению ПО
137 |
138 | - Эксплуатационная документация.
139 |
140 | - Регламент передачи ПО пользователю.
141 |
142 | - Регламент отслеживания и исправления обнаруженных ошибок ПО и уязвимостей
143 | программы.
144 |
145 | - Регламент приема и обработки сообщений от пользователей об ошибках ПО и
146 | уязвимостях программы.
147 |
148 | - Регламент доведения до пользователей информации об уязвимости программы и
149 | рекомендаций по их устранению
150 |
151 | ### Журналы, которые необходимо вести при разработке ПО
152 |
153 | - Журнал ошибок и уязвимостей программы.
154 |
155 | - Журнал регистрации изменений конфигурации ПО.
156 |
157 | - Журнал обучения сотрудников в области разработки безопасного ПО.
158 |
159 | ## Аспекты, которые не покрывает стандарт
160 |
161 | - Способы, меры и средства защиты конфиденциальной
162 | информации
163 |
164 | - Меры по обеспечению защиты информации в
165 | автоматизированных системах управления
166 | производственными и технологическими процессами
167 |
168 | - Угрозы безопасности информации при разработке
169 | программного обеспечения
170 |
171 | ## Аналоги
172 |
173 | Trustworthy Computing (TWC) Initiative
174 |
175 | Классификация угроз и атак (STRIDE)
176 |
177 | Оценка атак на программное обеспечение (DREAD)
178 |
179 |
180 |
--------------------------------------------------------------------------------
/information_security/lecture_3.md:
--------------------------------------------------------------------------------
1 | ## Что такое уязвимость?
2 | В общем случае понятие "уязвимость" ассоциируется с нарушением политик безопаности, вызванным неправильным заданным набором правил или ошибкой в ПО, обеспечивающем безопасность.
3 | Данный термин также используется для обозначения недостатка системы, с помощью которого можно нарушить ее целостность и вызвать неправильную работу, а также получить незаконный доступ к функциям или данным.
4 |
5 | Согласно MITRE, уязвимость - состояние вычислительной системы, которое позволяет испольнять команды от имени другого пользователя, получать доступ к закрытой информации, производить DDoS атаку, выдавать себя за иного пользователя или ресурс.
6 |
7 | ## Различные виды уязвимостей
8 | - Многофакторная уязвимость - уязвимость, которая появляется в результате нескольких недостатков различных типов
9 | - Уязвимость архитектуры - уязвимость, которая появляется в процессе проектирования системы
10 | - Уязвимость кода - уязвимость, которая появляется в процессе разработки ПО
11 | - Уязвимость конфигурации - уязвимость, которая появляется в процессе задания конфигурации или применения параметроа настройки ПО
12 | - Недокументированные возможности (НДВ) + программная закладка - некая уязвимость безопасности, которая не описана в документации
13 |
14 | ## Реестры и классификаторы уязвимостей
15 | Создание реестров обнаруженных уязивмостей потребовалось для унифицированного способа их идентификации и классификации.
16 | Для каждой обнаруженной уязвимости необходимо знать ее параметры, дать ей описание, определить список и версии уязвимого ПО, оценить критичность уязвимости по ряду критериев (привелегии, просто обнаружения и т.д.)
17 |
18 | Есть целый ряд баз данных уязвимостей. Их создавали различные типы компаний:
19 | - Официльные исследовательские организации
20 | - Некоммерческие организации
21 | - Коммерческие организации
22 |
23 | Использование стандартизированных описаний уязвимостей упрощает работу специалистов по ИБ.
24 |
25 | Существует несколько популярных классификаторов. Два основных:
26 | - Банк данных угроз безопасности информации ФСТЭК РФ
27 | - CVE
28 |
29 | ## Банк данных угроз безопасности информации ФСТЭК РФ
30 | Является одной из основных организаций, отвечающих за ИБ, в России. К ее полномочиям также относится лицензирование организаций, осуществляющих мероприятия и оказание услуг в области ИБ.
31 | С 2014 года поддерживает свой реестр, поскольку в базу CVE редко попадают уязвимости, относящиеся конкретно к РФ. Коммерческое использование возможно только при согласовании со службой.
32 |
33 | Преимущество - наличие уязвимостей таких систем как 1С, лаборатория Касперского и т.д.
34 |
35 | Сайт: https://bdu.fstec.ru/vul
36 |
37 | ## Common Vulnerabilities and Exposures (CVE)
38 | Разработан американцами в некоммерческой организации MITRE. Основной стандарт на сегодняшний день, определяет формат записей об уязвимостях. Использование бесплатно, все стандартизированно, используется с 1999 года, сейчас содержит более ста тасяч записей.
39 | Раньше у всех были свои базы уязвимостей, а теперь взяли и решили собрать все в одну. Участвует более 80 крутых организаций по всему миру.
40 |
41 | Основные задачи организации - поиск и сбор инфмаорции, резерваирование идентификаторов, добавление в базу CVE и NVD. Запись содержит идентификатор, краткое описание, дату создания, полезные ссылки и т.д.
42 |
43 | Преимущество - обновляется регулярно
44 |
45 | Сайт: https://cve.mitre.org/
46 |
47 | ## Прочие реестры
48 | - Open Source Vulnerability Database - более не поддержаивается. Скучно, неинтерсено, бесполезно
49 | - Secunia Advisory and Vulnerability Database - в целом по структуре все схоже с CVE, для коммерческого использования платно
50 | - Vulnarability Notes Database - каждая запись агрегирует схожие уязвимости, имеется более подробное рукводство по устранению; плохо, что редкие обновления и слабый охват
51 | - Expolit Database - содержит сценарии эксплуатации уязвимостей
52 |
53 | ## Агрегаторы информации об уязвимостях
54 | - CVE details
55 | - Vulners
56 | - Common Weakness Enumeration
57 |
58 | ## Виды и типы уязвимостей
59 | 
60 |
61 | ## Устранение типовых уязвимостей
62 | Управление уязвимостями подразумевает то, что необходимо определять причины неэффективности существующего процесса управления уязвимостью, нет адекватного отслеживания новвых уязвимостей.
63 | 
64 |
65 | ## Программы по поиску уязвимостей
66 | Множество. Остановимся на XSpider (Россия) - разработка Позитив технолоджис. Продукт платный, очень качественный, много методик обнаружения, разработан программистом-безопасником.
67 | 
68 |
69 | ## Профилактика ошибок пользователей в пользовательских интерфейсах
70 | Ошибки пользователей:
71 | - Бессознательные (ошибки на автопилоте)
72 | - Связанные с ментальным поведением (вызванные сложившимися ментальными моделями взаимодействия с интерфейсом)
73 |
74 | Вторые можно отслеживать и анализировать. От первых защитить ПО крайне сложно. Задача качественного дизайна - предотвратить несоответствия между ожиданиями пользователя и возможностями интерфейса.
75 |
76 | ## Проектирование безопасных интерфейсов
77 |
78 | Интерфейс должен быть спроектирован так, чтобы пользователь, как минимум, не смог навредить своим данным.
79 |
80 | По сообщению об ошибке пользователь должен четко понять, что пошло не так и какие есть способы для испавления ошибки
81 |
82 | В целом по презентации все и так более-менее понятно.
83 |
--------------------------------------------------------------------------------
/io/lec3.md:
--------------------------------------------------------------------------------
1 | # Лекция 3
2 |
3 | __Аналоговый (непрерывный) сигнал__ – непрерывное
4 | изменение во времени физической величины
5 | (напряжение, ток, температура, амплитуда звука и т.п.)
6 |
7 | При передаче аналогового сигнала необходимо иметь ввиду, что передается не сам сигнал, а некоторый моделированный, наложенный на высокочастотный, который
8 | называется __несущим__
9 |
10 | Таким образом у нас есть несущий сигнал, модулирующий и результат их наложения называется __мудулированным сигналом__.
11 |
12 | Аналоговые сигналы могут передоваться:
13 |
14 | 1. по одиночному проводнику
15 | 2. по дифференциальной паре
16 | 3. по оптоволокну
17 |
18 |
19 |
20 | # Передача аналоговых сигналов:
21 |
22 | ## VGA-кабель
23 |
24 | _(одиочный проводник)_
25 |
26 | У него есть 3 основных (красный, зеленый и синий) компоненты, которые передают в диапазоне -0.7В и задают интенсивность того или иного компонента цвета, который отображается на мониторе.
27 |
28 | Для передачи на большие расстояния необходимо делать оплетку кабелей, его используют до 10 метров, а дальше необходимы кабели с усилителями.
29 |
30 | Плюс: если уничтожить один провод,то просто потеряется компонента какого-то цвета, но изображение останется, так как передача аналоговая.
31 | (Если рассматривать DVI, то при откусывании одного провода показываться на экрани ничего не будет, так как передача дискретная и просто нарушится протокол данных)
32 |
33 | ### Распиновка
34 |
35 | 
36 |
37 |
38 | 
39 |
40 |
41 |
42 | ## Коаксиальный кабель
43 |
44 | Чаще всего, если мы хотим использовать для передачи данных одиночный проводник, используется коаксиальный кабель.
45 | По нему можно передовать данные на большие расстояния.
46 |
47 | По нему идет телевидение к телевизору, подключаются разные антенны.
48 |
49 | Коаксиальный каель состоит из 4-х компонент:
50 |
51 | 1. проводник
52 | 2. изоляция
53 | 3. экран
54 | 4. внешняя изоляция
55 |
56 | 
57 |
58 | 
59 |
60 | Экран необходим, чтобы не было никакого влияния внешних электромагнитных помех на проводник.
61 | Экран может быть сделан из полиэтилена, фторопласта, в специальных кабелях там может быть воздух
62 |
63 | Изоляция необходима для защиты от внешних воздействий. В современных кабелях делается двойная оплетка из фольги и оплетки из жилок,
64 | служащей для придания и механической жесткости и для связывания экрана, поскольку фольга не сваренная, а просто обернута вокруг.
65 |
66 | Сигнал движется между оплеткой и центральной жилой: там возникает напряжение и возникает ток, текущий по внешней поверхности центрального проводника
67 | и по внутренней поверхности оплетки.
68 |
69 | Для подключения используются SMA-разъемы. У эти разъемов есть центральная жила, которая является пазом для штыря, а экран подключается к внешнему радиусу
70 | (внешнему кольцу).
71 |
72 | 
73 |
74 |
75 |
76 | ## Дифференциальная пара
77 |
78 | Сначала сигнал передпется по одному проводнику, а потом раздваивается, затем сигнал раздваивается и по одному проводнику передается в обычном виде, по другому - в инвертированном, потом идет в канал передачи данных. Если в канале есть помеха, то она одинакого влияет на одну и другую составляющую и ее можно определить для получения исходного сигнала
79 |
80 | 
81 |
82 | Этот принцип используется для передачи данных на большие расстояния. Чаще всего он используется в витой паре.
83 |
84 | 
85 |
86 | В одной витой паре много витых проводников. Чем больше проводников - тем выше скорость передачи.
87 |
88 |
89 |
90 | ## Оптоволокно
91 |
92 | По строению похоже на коаксиальный кабель, только в качестве центральной жили используются оптические волокна (стекло, керамика). При передачи цифрового сигнала: есть свет, нет света. При передачи аналого сигнала меняются параматры света, как волны (частота, фаза). В некоторых каналах передачи связи даже используются одиночные фотоны - это называется квантовые каналы (сигнал - совокупность частиц, имеющих какие-то параметры).
93 |
94 | 
95 |
96 | Для передачи данных используются специальные модули, которые переводят напряжение или ток в свет, и используются коннекторы (сверху слева).
97 |
98 |
99 |
100 | # Передача цифровых сигналов
101 |
102 | Также передаются по одиночному проводнику, дифференциальной паре или оптоволокну.
103 |
104 | ## Стандарты передачи цифровых сигналов
105 |
106 | ### Однополярные сигналы:
107 |
108 | 1. TTL
109 | 2. CMOS
110 | 3. LVCMOS
111 |
112 | 
113 |
114 | Есть 2 типа логики: TTL, в основе которых лежат биполярные транзисторы и CMOS на полевых. Сейчас в основном используется CMOS логика - потому что она быстрее переключается, меньше потребляет и можно транзисторы изготавливать меньшего размера.
115 |
116 | LVCMOS - это низковольтная CMOS.
117 |
118 |
119 |
120 | ## Дифференциальная пара
121 |
122 | Основные стандарты:
123 |
124 | - LVPECL
125 | - VML
126 | - CML
127 | - LVDS
128 |
129 | 
130 |
131 | Чаще всего в цифровой технике используется LVDS, так как он приспособлен для быстрой передачи цифровых сигналов и меньше потребляет. В некоторых случаях в зависимость от конструкции приема-передачи оправдано использование дургих стандартов. Все перечисленные стандарты можно конвертировать друг в друга.
132 |
133 | В стандартах LVPECL, CML, LVDS используется направление тока, а в VML - напряжение.
134 |
135 | На платах можно встретить рисунки:
136 |
137 | 
138 |
139 | Это нужно для того, чтобы выровнять длинну проводников и гарантировать, что сигналы придут в одно и тоже время, что очень важно для дискретных сигналов.
140 |
141 |
142 | ## PECL/LVPECL
143 |
144 | Линии 3.3 В, строится на биполярных транзисторах и схеме эмитторного повторителя. Информационным параметром является ток, который идет в линию передач и уходит с иннитора.
145 |
146 | 
147 |
148 |
149 | - Состоит из дифференциальной пары, которая управляет
150 | парой эмиттерных повторителей
151 |
152 | - Выход эмиттерных повторителей должен работать в
153 | активном регионе, с текущим непрерывно постоянным
154 | током
155 |
156 | - Интерфейс PECL подходит как для +5.0V, так и для +3.3V
157 | напряжений питания. Когда напряжение питания +3.3V,
158 | такой интерфейс обычно называют LVPECL.
159 |
160 | - У пекла лучше фронты, чем у лвдс при передаче информации по проводу (при передачи внутри печатный платы лучше использовать LVDS)
161 |
162 |
163 | ## LVDS
164 |
165 | Основной принцып кодирования не в исле тока, а в его направлении. При помощи 100-Омного резистора определяется направление, в приемнике ток преобразуется в напряжение.
166 |
167 | Схема LVDS-передатчика представляет собой сбалансированный
168 | источник тока, положительные и отрицательные сигналы которого
169 | сдвинуты на 180° и совместно создают выходное
170 | дифференциальное напряжение.
171 |
172 | 
173 |
174 |
175 | ## CML
176 |
177 | CML - логические схемы на переключателях тока. Ключи типичного
178 | выходного каскада нагружены на резисторы 50 Ом и подтянуты к V_CC.
179 |
180 | Используется редко, ее заменяют PECLом. Используется когда необходимо организоывть токовую передачу.
181 |
182 | 
183 |
184 | ## VML
185 |
186 | VML - логические схемы
187 | на переключателях
188 | напряжения.
189 |
190 | Состоит из двухтактных выходных каскадов, 0 и 1 передаются дифференциально, информационный сигнал кодируется напряжением.
191 |
192 | 
193 |
194 | ### Итог
195 |
196 | Сейчас большинство работает по стандартам LVPECL и LVDS - первым передаются какие-нибудь сигналы синхронизации, где важна точность фронтов, точность передачи самого сигнала, а с помощью второго передаются уже данные, когда важна скорость и четкость переключение между 0 и 1
197 |
198 | ## Сопряжение дифференциальных пар
199 |
200 | 
201 |
202 | При сопряжении с постоянной составляющей можно сопрягать напрямую
203 |
204 | При сопряжении по линии с переменной составляющей есть разрыв связи для избежания передачи помех на стороне передатчика, передача происходит при помощи конденсатора.
205 |
206 | ## Индустриальные разъемы
207 |
208 | используются на всякой спец. технике, имеют защиту от влаги, грязи, выдерживают высокие нагрузки и разную температуру
209 |
210 | 
211 |
212 |
213 | ## USB type-C
214 |
215 | __недосатки:__
216 |
217 | - негерметичность (боится пыли и влаги)
218 |
219 | - некачественность линий, которые могут сложиться в гармошку в недорогих разъемах
220 |
221 | __преимущества:__
222 |
223 | - удобен
224 | - можно вставлять разной стороной
225 | - нет креплений (если случайно сильно дернуть провод, он просто выпадет)
226 |
227 | ## DVI-разъем
228 |
229 | __недосатки:__
230 |
231 | - прикручивается
232 | - часто гнутся штыри
233 |
234 |
235 |
--------------------------------------------------------------------------------
/testing/lab1.md:
--------------------------------------------------------------------------------
1 | # Вопросы с se.ifmo.ru
2 |
3 | ## 1. Понятие тестирования ПО. Основные определения.
4 |
5 | __Тестирование программного обеспечения__ - процесс исследования, испытания программного продукта, имеющий своей целью проверку соответствия между реальным поведением программы и её ожидаемым поведением на конечном наборе тестов, выбранных определённым образом
6 |
7 | ### Основные определеня
8 |
9 | - отладка
10 | - требование к системе
11 | - тестовый случай/сценарий
12 | - входные значения
13 | - предусловия, условия, постусловия
14 | - ожидаемый результат
15 | - цель тестирования
16 | - повторяемый, автоматизируемый
17 | - учитывает состояния (если есть)
18 | – переходы между состояниями
19 | - правильные: корректный результат
20 | - неправильные : корректные сообщения об ошибках
21 |
22 | ## 2. Цели тестирования. Классификация тестов.
23 |
24 | ### Цели
25 |
26 | - Обнаружение дефектов
27 | - Повышение уверенности в уровне качества
28 | - Предоставление информации для принятия решений
29 | - Предотвращение дефектов
30 | - Увеличение уровня пользовательского доверия в том, что программа функционирует корректно
31 |
32 | ### Классификация
33 |
34 | #### По целям
35 |
36 | - Функциональное - направлено на проверку того, какие функции ПО реализованы, и того, насколько верно они реализованы.
37 |
38 | - Нефункциональное - проверяет корректность работы нефункциональных требований. Этот вид тестирования скорее проверяет, КАК программный продукт работает.
39 |
40 | - Тестирование производительности
41 | - Тестирование пользовательского интерфейса
42 | - Тестирование удобства использования
43 | - Тестирование защищенности
44 | - Инсталляционное тестирование
45 | - Тестирование совместимости
46 | - Тестирование надежности
47 | - Тестирование локализации
48 |
49 | #### По степени автоматизации
50 |
51 | - Ручное
52 | - Автоматизированное
53 |
54 | #### По позитивности сценария
55 |
56 | - Позитивное (на соответствие ожидаемому поведению)
57 | - Негативное (в случае отличия от ожидаемого)
58 |
59 | #### По доступу к коду
60 |
61 | - Тестирование «белого ящика» – тестирование программного продукта с доступом к коду.
62 | - Тестирование «черного ящика» – тестирование без доступа к коду продукта.
63 | - Тестирование «серого ящика» – тестирование, основанное на ограниченном знании внутренней структуры ПО.
64 |
65 | #### По уровню
66 |
67 | - Модульное / юнит-тестирование – проверка корректной работы отдельных единиц ПО.
68 | - Интеграционное тестирование – проверка взаимодействия между несколькими единицами ПО.
69 | - Системное – проверка работы всей системы
70 | - приемочное тестирование
71 |
72 | #### По исполнителю
73 |
74 | - Альфа-тестирование – тестирование программного продукта на поздней стадии разработки.
75 | - Бета-тестирование
76 |
77 | ## 3. Модульное тестирование. Понятие модуля.
78 |
79 | __Модульное тестирование__ - процесс в программировании, позволяющий проверить модули исходного кода программы
80 |
81 | Цель модульного тестирования — изолировать отдельные части программы и показать их работоспособность.
82 |
83 | В ходе модульного тестирования решаются задачи:
84 |
85 | - Поощрение изменений - позволяет программистам проводить рефакторинг, будучи уверенными, что модуль по-прежнему работает корректно
86 | - Упрощение интеграции - странить сомнения по поводу отдельных модулей и может быть использовано для подхода к тестированию «снизу вверх»
87 | - Документирование кода - тесты можно рассматривать как «живой документ»
88 | - Отделение интерфейса от реализации -
89 |
90 | __Модуль программы__ - компонент минимального размера, который может быть независимо протестирован в ходе верификации программной системы
91 |
92 | Модуль может быть одним из:
93 |
94 | 1. модуль – это часть программного кода, выполняющая одну функцию с точки зрения функциональных требований;
95 | 2. модуль – это программный модуль, т.е. минимальный компилируемый элемент программной системы;
96 | 3. модуль – это задача в списке задач проекта (с точки зрения его менеджера);
97 | 4. модуль – это один класс или их множество с единым интерфейсом.
98 |
99 | ## 4. V-образная модель. Статическое и динамическое тестирование.
100 |
101 | ```
102 | требования <------------------бизнес требования, валидация ---------------------------------------> приемочное тестирование
103 |
104 | Анализ <--------------------Требования к ПО, Валидация, верификация -------------------> Системное тестирование
105 |
106 | Архитектурное <---------- Требования к интерфейсам ----------------------> Интеграционное тестирование
107 | проектирование Верификация
108 |
109 | Детальное <------------- Тестовый случаи -------------------> Модульноетестирование
110 | проектирование Верификация
111 |
112 |
113 | Разработка
114 | ```
115 |
116 | __Статическое тестирование (рецензирование)__
117 |
118 | – Не включает выполнения кода
119 |
120 | – Ручное, автоматизированное
121 |
122 | – Неформальное, сквозной контроль, инспекция
123 |
124 | __Динамическое__
125 |
126 | – Запуск модулей, групп модулей, всей системы
127 |
128 | – После появления первого кода (а иногда перед!)
129 |
130 | ## 5. Валидация и верификация. Тестирование методом "чёрного" и "белого" ящика.
131 |
132 | __Валидация__
133 |
134 | – Проверка на соответствие ожиданиями
135 |
136 | – ПО выполняет требования пользователя?
137 |
138 | – Пирожок (мясной, вегетарианский, сладкий)
139 |
140 | – Have we done the right thing?
141 |
142 | __Верификация__
143 |
144 | – Внутреннее управление качеством
145 |
146 | – ПО выполняет требования спецификации?
147 |
148 | – Пирожок (размер, степень прожарки, начинка, …)
149 |
150 | – Have we done the thing right?
151 |
152 | __Тестирование методом "чёрного" и "белого" ящика__
153 |
154 | __Тестирование методом белого ящика__ - разработчик теста имеет доступ к исходному коду программ
155 |
156 | __Тестирование матодом черного ящика__ - При тестировании чёрного ящика тестировщик имеет доступ к программе только через те же интерфейсы, что и заказчик или пользователь, либо через внешние интерфейсы, позволяющие другому компьютеру либо другому процессу подключиться к системе для тестирования.
157 |
158 | ## 6. Тестовый случай, тестовый сценарий и тестовое покрытие.
159 |
160 | __Тестовый случай__ - это артефакт, который описывает набор входных значений, ожидаемых, фактических результатов и направлен на проверку некоторой функциональности тестируемого приложения
161 |
162 | __Тестовый сценарий__ - это высокоуровневая классификация требований теста, сгруппированных в зависимости от функциональности модуля. Один сценарий может иметь несколько тестовых случаев.
163 |
164 | __тестовое покрытие__ - одна из метрик оценки качества тестирования, представляющая из себя плотность покрытия тестами требований либо исполняемого кода.
165 |
166 | ## 7. Анализ эквивалентности.
167 |
168 | __Класс эквивалентности__ - одно или несколько значений ввода, к которым программное обеспечение применяет одинаковую логику.
169 |
170 | __Техника анализа эквивалентности__ - техника, при которой разделяется функционал на группы эквивалентных по своему влиянию на систему значений.
171 |
172 |
173 |
174 | ## 8. Таблицы решений и таблицы переходов.
175 |
176 | __Таблица решений__ — способ компактного представления модели со сложной логикой;
177 |
178 | В таблицах решений представлен набор условий, одновременное выполнение которых должно привести к определённому действию.
179 |
180 |
181 |
182 | __Таблицы переходов__ – метод тестирования «черного ящика», который используется там, где аспект системы может быть описан конечным автоматом.
183 |
184 |
185 |
186 | ## 9. Регрессионное тестирование.
187 |
188 | __Регрессионное тестирование__ — собирательное название для всех видов тестирования программного обеспечения, направленных на обнаружение ошибок в уже протестированных участках исходного кода.
189 |
190 | Направления:
191 |
192 | - Автоматизация регрессионных тестов
193 |
194 | - Регрессия багов (поиск проблем, которые официально «были устранены», но есть основания полагать, что они до сих пор существуют.)
195 |
196 | - Регрессия старых ошибок (ситуации, когда недавнее изменение кода в одной части приложения сделало нерабочим некоторые или все другие части разрабатываемой
197 | программы)
198 |
199 | Задачи регрессионного тестирования:
200 |
201 | - Проверка и утверждение исправления ошибки;
202 |
203 | - Тестирование последствия исправлений, так как внесенные исправления могут привнести ошибку
204 |
205 | - Гарантировать функциональную преемственность и совместимость
206 |
207 | - Уменьшение стоимости и сокращение времени выполнения тестов
208 |
209 |
210 | ## 10. Библиотека JUnit. Особенности API. Класс junit.framework.Assert.
211 |
212 | __JUnit__ — библиотека для модульного тестирования программного обеспечения на языке Java.
213 |
214 | ### Функциональность
215 |
216 | `junit.framework.Assert`
217 |
218 | `assertEquals` -- использует метод `equals()`
219 |
220 | `assertFalse`
221 |
222 | `assertNotNull`
223 |
224 | `assertNull`
225 |
226 | `assertNotSame`
227 |
228 | `assertSame` -- cравнивает объекты при помощи `==`
229 |
230 | `assertTrue`
231 |
232 |
233 | ### Аннотации
234 |
235 | `@BeforeEach`
236 |
237 | `@AfterEach`
238 |
239 | `@BeforeAll`
240 |
241 | `@AfterAll`
242 |
243 | `@Disabled`
244 |
245 | ## 11. Отличия JUnit 3 от JUnit 4.
246 |
247 |
248 | |junit 3 | junit 4 | junit 5 |
249 | |--------|---------|---------|
250 | |соглашение об именовании (должно начинаться с test) | @Test | @Test |
251 | |использует java 5|java 7|Java 8|
252 | |для того, чтобы отловить эксепшн надо обернуть эксепшен в try-catch и в catch учесть то, что исключение произошло| ` @Test(expected=java.lang.ArrayIndexOutOfBoundsException.class)`| `assertThrows<вид> {код}`|
253 | |`setUp()` / `tearDown()`|`@Before`/`@After` |`@BeforeEach`/`@AfterEach`|
254 | |-|`@BeforeClass`/`@Afterclass`|`@BeforeAll`/`@AfterAll`|
255 | |-|`@Ignore`|`@Disabled`|
256 |
--------------------------------------------------------------------------------
/testing/lab2.md:
--------------------------------------------------------------------------------
1 | # Вопросы с se.ifmo.ru
2 |
3 | ## Цели и задачи интеграционного тестирования. Расположение фазы интеграционного тестирования в последовательности тестов; предшествующие и последующие виды тестирования ПО.
4 |
5 | Интеграционные тесты проверяют корректность взаимодействия компонент системы.
6 |
7 | ### Расположение фазы интеграционного тестирования
8 |
9 | ```
10 | требования <------------------бизнес требования, валидация ---------------------------------------> приемочное тестирование
11 |
12 | Анализ <--------------------Требования к ПО, Валидация, верификация -------------------> Системное тестирование
13 |
14 | Архитектурное <---------- Требования к интерфейсам ----------------------> Интеграционное тестирование
15 | проектирование Верификация
16 |
17 | Детальное <------------- Тестовый случаи -------------------> Модульноетестирование
18 | проектирование Верификация
19 |
20 |
21 | Разработка
22 | ```
23 |
24 | ## Алгоритм интеграционного тестирования.
25 |
26 | Рассказать, как делали лабу?
27 |
28 | ## Концепции и подходы, используемые при реализации интеграционного тестирования.
29 |
30 | ### Сверху вниз
31 |
32 | Интеграционное тестирование __сверху вниз__ (как в лабе) - сначала тестируют только самый верхний управляющий уровень системы, без модулей более низкого уровня. Затем постепенно с более высокоуровневыми модулями интегрируются более низкоуровневые.
33 |
34 | __Преимущества:__
35 |
36 | - Легко обнаружить неисправности или ошибки в работе системы.
37 | - В первую очередь проверяются важные модули, а лишь потом модули нижнего порядка.
38 | - По сравнению с другими подходами, время на тестирование интеграции очень коротко.
39 |
40 | __Недостатки:__
41 |
42 | - Если в модули нижнего уровня заложена важная логика, она не может быть протестирована в первую очередь
43 | - Использование «заглушек»становится обязательным на всех последующих проектах.
44 |
45 | ### Снизу вверх
46 |
47 | Интеграционное тестирование __снизу вверх__ (если бы мы сначала в лабе протестировали синус и ln, потом sin, cos, lnб потом все тригонометрические и логарифмические функции и т.д) - подход подразумевает проверку низкоуровневых систем для начала: вместе и по отдельности. Другими словами процесс тестирования начинается с внутреннего уровня и постепенно доходит до наиболее критичных позиций.
48 |
49 | __Преимущества:__
50 |
51 | - Если определенный модуль перестает функционировать, его ошибка может быть сразу же исправлена.
52 | - Требуется минимальное время на идентификацию и устранение ошибок.
53 |
54 | __Недостатки:__
55 |
56 | - Общее время проверки всех модулей довольно долгое
57 | - Если ПО содержит много небольших модулей мелкого уровня, которые очень сложны в своей имплементации, то для завершения процесса тестирования может потребоваться больше времени.
58 |
59 | ### Большой взрыв
60 |
61 | Тестирование методом __большого взрыва__ - созданные и запрограммированные модули и системные компоненты соединены между собой. При объединении эти модули тестируются как единое целое. После проведения юнит-тестов, модули также проверяются вместе, еще до образования целостной программной системы.
62 |
63 | __Преимущества:__
64 |
65 | - Удобен при тестировании небольших систем.
66 | - Быстрое нахождение ошибок
67 |
68 | __Недостатки:__
69 |
70 | - Так как модули завязаны на одной системе, порой очень трудно найти источник дефектов.
71 | - Если в системе используется много модулей, может уйти достаточно времени, чтобы пересмотреть все реализованные функциональности.
72 |
73 | ## Программные продукты, используемые для реализации интеграционного тестирования. Использование JUnit для интеграционных тестов.
74 |
75 | Mockito - фреймворк с поддержкой макетирования для unit-тестов.
76 |
77 | Greenmail — для тестироания электронной почты, который поддерживает SMTP, POP3 и IMAP с поддержкой SSL-соединения.
78 |
79 | MockFtpServer — библиотека, которая предоставляет две разные реализации FTP-сервера («заглушка» и «обманка»), которые можно использовать для тестирования различных сценариев.
80 |
81 | ## Автоматизация интеграционных тестов. ПО, используемое для автоматизации интеграционного тестирования.
82 |
83 | Selenium - это инструмент для автоматизации действий веб-браузера. В большинстве случаев используется для тестирования Web-приложений
84 |
85 |
--------------------------------------------------------------------------------
/testing/lab3.md:
--------------------------------------------------------------------------------
1 | # Вопросы с se ifmo
2 |
3 | ## Функциональное тестирование.
4 |
5 | Функциональное тестирование — это тестирование ПО в целях проверки реализуемости функциональных требований, то есть способности ПО в определённых условиях решать задачи, нужные пользователям.
6 |
7 | ### Основные понятия
8 |
9 | ???
10 |
11 | ### Cпособы организации
12 |
13 | - На базе сценариев использования
14 | - Ручное/автоматическое
15 | - На готовой системе, в рамках модульного и интеграционного
16 | - Проверяются функции системы начиная с интерфейса пользователя
17 | - Средства автоматизации
18 | + Открытые: Selenium, Sahi, Watir
19 | + Коммерческие: от HP, Rational (IBM)
20 | - На основе функционмльных требований,указанных в спецификации / на основе бизнесс-процессов
21 | -
22 |
23 | ### Pешаемые задачи.
24 |
25 | подтверждение того, что разрабатываемый программный продукт обладает всем функционалом, требуемым заказчиком.
26 |
27 |
28 |
29 | ## Система Selenium.
30 |
31 | ### Архитектура
32 |
33 | #### Selenium RC
34 |
35 | работает только с использованием JavaScript для каждой команды. Это означает, что все, что вы пишете, в конечном итоге переводится в Javascript и запускается в браузере.
36 |
37 | Плюсы:
38 |
39 | - как правило работает одинакого для браузера
40 |
41 | Минусы:
42 |
43 | - Устарел
44 | - Ограничевается возможностями JS и same-origin policy (веб-браузер разрешает сценариям, содержащимся на первой веб-странице, получать доступ к данным на второй веб-странице, но только если обе веб-страницы имеют одинаковое происхождение.)
45 |
46 | #### WebDriver
47 |
48 | WebDriver фактически использует собственный и родной API каждого браузера для работы с ними
49 |
50 | Плюсы:
51 |
52 | - Быстрее
53 | - Более гибкий
54 |
55 | Минусы:
56 |
57 | - может работать по-разному в каждом браузере
58 | - могут возникать ошибки при обновлении браузеров
59 |
60 | #### Selenium IDE
61 |
62 | Selenium WebDriver — это инструмент для автоматизации действий веб-браузера.
63 |
64 | Ограничения:
65 |
66 | - Слабо развитое управление логикой теста
67 | (циклы, условия, ….)
68 | - Запускает только свои сценарии
69 | - Сложно использовать с динамическим
70 | содержимым
71 |
72 | #### Selenium GRID
73 |
74 | Selenium Grid позволяет выполнять сценарии WebDriver на удаленных машинах (виртуальных или реальных) путем маршрутизации команд, отправляемых клиентом, в удаленные экземпляры браузера. Его цель - предоставить простой способ запускать тесты параллельно на нескольких машинах.
75 |
76 | ### Принципы написания сценариев
77 |
78 | Selrnium IDE
79 |
80 | Команды:
81 |
82 | - `clic`k или `clickAndWait` — ссылки,
83 | переключатели, radio-кнопки
84 | - `type` — ввод значений
85 | - `select` — выбор значений из списка
86 | - `оpen` — открывает страницу
87 | - `assert***`
88 | - `wait***` - ожидание события
89 | - `verify ***` - проверка
90 |
91 | Assert vs verify
92 |
93 | - Предназначены для проверки содержимого
94 | элемента UI
95 | - Если `verification` неуспешна — тест
96 | продолжается
97 | - Если неуспешна `assertion` — тест
98 | останавливается
99 |
100 | Синхронизация:
101 |
102 | - `waitForPageLoad(timeout`) загрузка страницы
103 | ошибка по таймауту
104 | - `waitForAlert`
105 | - `waitForTable` — полная загрузка таблицы
106 | - `waitForTitle` — загрузка заголовка
107 | - Другие команды синхронизации
108 |
109 | Другие:
110 |
111 | - `store` — сохранение значений в переменной
112 | - `echo` — запись значения в лог selenium
113 | – Можно использовать `${var}`
114 |
115 | ### Cпособы доступа к элементам страницы.
116 |
117 | По XPath (относительный/абсолютный путь)
118 |
119 | По id
120 |
121 | По scc-правилам
122 |
123 | ## Язык XPath.
124 |
125 | Выражение | Результат |
---|
имя_узла | Выбирает все узлы с именем "имя_узла" |
/ | Выбирает от корневого узла |
// | Выбирает узлы от текущего узла, соответствующего выбору, независимо от их местонахождения |
. | Выбирает текущий узел |
.. | Выбирает родителя текущего узла |
@ | Выбирает атрибуты |
126 |
127 | #### Предикаты
128 |
129 | Выражение XPath | Результат |
---|
/messages/note[1] | Выбирает первый элемент note, который является прямым потомком элемента messages.
130 | |
/messages/note[last()] | Выбирает последний элемент note, который является прямым потомком элемента messages. |
/messages/note[last()-1] | Выбирает предпоследний элемент note, который является прямым потомком элемента messages. |
/messages/note[position()<3]
131 | | Выбирает первые два элемента note, которые являются прямыми потомками элемента messages. |
//heading[@date] | Выбирает все элементы heading, у которых есть атрибут date |
//heading[@date="10/01/2008"] | Выбирает все элементы heading, у которых есть атрибут date со значением "10/01/2008" |
132 |
133 | #### Выбор неизвестных заранее узлов
134 |
135 | Спецсимвол | Описание |
---|
* | Соответствует любому узлу элемента |
@* | Соответствует любому узлу атрибута |
node() | Соответствует любому узлу любого типа |
136 |
137 | #### Выбор нескольких путей
138 |
139 | Выражение XPath | Результат |
---|
//note/heading | //note/body | Выбирает все элементы heading И body из всех элементов note |
//heading | //body | Выбирает все элементы heading И body во всем документе |
140 |
141 | #### Оси
142 |
143 | Ось определяет отношение узлового набора по отношению к текущему узлу.
144 |
145 | Название оси | Результат |
---|
ancestor | Выбирает всех предков текущего узла |
ancestor-or-self | Выбирает всех предков текущего узла и сам текущий узел |
attribute | Выбирает все атрибуты текущего узла |
child | Выбирает всех прямых потомков текущего узла |
descendant | Выбирает всех потомков текущего узла |
descendant-or-self | Выбирает всех потомков текущего узла и сам текущий узел |
following | Выбирает все элементы в документе после закрывающего тега текущего узла |
following-sibling | Выбирает все элементы одного уровня после текущего узла |
namespace | Выбирает все узлы пространства имен текущего узла |
parent | Выбирает родителя текущего узла |
preceding | Выбирает все узлы, которые появляются перед текущим узлом, за исключением предков, узлов атрибутов и пространства имен |
preceding-sibling | Выбирает все элементы одного уровня до текущего узла |
self | Выбирает текущий узел |
146 |
147 | #### Операторы
148 |
149 | Оператор | Описание | Пример |
---|
| | Обрабатывает два узловых набора | //note | //cd |
+ | Сложение | 5 + 7 |
- | Вычитание | 7 - 5 |
* | Умножение | 9 * 5 |
div | Деление | 4 div 3 |
= | Равно | lang=6.90 |
!= | Не равно | lang!=4.50 |
< | Меньше | ret<7.10 |
<= | Меньше или равно | terra<=9.80 |
> | Больше | root>2.55 |
>= | Больше или равно | last>=4.30 |
or | Или | step=10 or loop=7.70 |
and | И | loop>6.00 and loop
150 | |
mod | Остаток от деления | 5 mod 2 |
151 |
--------------------------------------------------------------------------------
/testing/lab4.md:
--------------------------------------------------------------------------------
1 | # Тестирование системы целиком - системное тестирование
2 |
3 | Системное тестирование программного обеспечения — это тестирование ПО, выполняемое на полной, интегрированной системе, с целью проверки соответствия системы исходным требованиям. Системное тестирование относится к методам тестирования чёрного ящика, и, тем самым, не требует знаний о внутреннем устройстве системы.
4 |
5 | Задача: проверка как функциональных и не функциональных требований в системе в целом.
6 |
7 | При этом выявляются дефекты, такие как неверное использование ресурсов системы, непредусмотренные комбинации данных пользовательского уровня, несовместимость с окружением, непредусмотренные сценарии использования, отсутствующая или неверная функциональность, неудобство использования и т.д. Для минимизации рисков, связанных с особенностями поведения системы в той или иной среде, во время тестирования рекомендуется использовать окружение максимально приближенное к тому, на которое будет установлен продукт после выдачи.
8 |
9 | - на базе требований (requirements based)
10 | - на базе случаев использования (use case based)
11 |
12 | Включает несколько фаз:
13 |
14 | - Системное тестирование — выполняется внутри организации-разработчика
15 | - Альфа- и Бета-тестирование — выполняется пользователем под контролем разработчика
16 | - Приемочное тестирование — выполняется пользователем.
17 |
18 | # Тестирование возможностей, стабильности, отказоустойчивости, совместимости
19 |
20 | Относится к нефункциональному тестированию.
21 |
22 | __Тестирование возможностей__ - минимальная нагрузка, состоящая из корректных и реальных данных, проверка возможностей и функционала системы.
23 |
24 | __Тестирование стабильности__ - добавляем нагрузку, данные всё еще корректны. Проверяем как система работает в более-менее реальных условиях
25 |
26 | __Тестирование отказоустойчивости__ - пытаемся всё сломать к чертям. Некорректные данные, большая нагрузка, сбои питания, восстановление после отказа и т.д.
27 |
28 | __Тестирование совместимости__ - запуск с различными версиями библиотек, на различном окружении. Смотрим как система со всем этим работает.
29 |
30 | # Тестирование производительности - CARAT
31 |
32 | CARAT -- подход к нагрузочному тестированию.
33 |
34 | _Capacity_ — Нефункциональные возможности (Максимальное количество (пользователей,
35 | записей в БД, файлов, Кб, ГГц), поддерживаемое системой одновременно, не нарушая других
36 | требований производительности
37 | )
38 |
39 | _Accuracy_ — Точность -- корректность алгоритмов и результатов.
40 |
41 | _Responce Time_ — Время ответа -- время ответа сервиса при разных видах нагрузки.
42 |
43 | _Availability_ — Готовность -- способность сервиса обслуживать клиента.
44 |
45 | _Throughput_ — Пропускная способность -- количество операций в секунду, которое может поддерживать система.
46 |
47 | # Альфа и Бета тестирование. Приемочное тестирование
48 |
49 | __Альфа-тестирование__ — имитация реальной работы с системой штатными разработчиками, либо реальная работа с системой потенциальными пользователями/заказчиком.
50 |
51 | Альфа-тестирование - проводится небольшим количеством пользователей внутри организации, разработавшей ПО.
52 |
53 | – Может проводиться до окончания системного тестирования
54 | – Ранние отзывы пользователей об использовании системы в рабочем окружении
55 |
56 | __Бета-тестирование__ — в некоторых случаях выполняется распространение предварительной версии (в случае проприетарного программного обеспечения иногда с ограничениями по функциональности или времени работы) для некоторой большей группы лиц с тем, чтобы убедиться, что продукт содержит достаточно мало ошибок. Иногда бета-тестирование выполняется для того, чтобы получить обратную связь о продукте от его будущих пользователей.
57 |
58 | - Могут быть ошибки
59 | - Может быть не реализован весь функционал
60 | - Ранние отзывы для разработчиков
61 | - Превью для пользователей
62 |
63 |
64 | __Приёмочное тестирование__ - формальный процесс тестирования, который проверяет соответствие системы требованиям и проводится с целью: определения удовлетворяет ли система приемочным критериям; вынесения решения заказчиком или другим уполномоченным лицом принимается приложение или нет.
65 |
66 | # Нагрузочное тестирование - виды, цели и решаемые задачи.
67 |
68 | __Тестирование производительности__ (Performance testing) - это автоматизированное тестирование, имитирующее работу определенного количества бизнес пользователей на каком-либо общем ресурсе.
69 |
70 | Задача - определение масштабируемости приложения под нагрузкой, при этом происходит:
71 |
72 | - измерение времени выполнения выбранных операций при определенных интенсивностях выполнения этих операций
73 | - определение количества пользователей, одновременно работающих с приложением
74 | - определение границ приемлемой производительности при увеличении нагрузки (при увеличении интенсивности выполнения этих операций)
75 | - исследование производительности на высоких, предельных, стрессовых нагрузках
76 |
77 | __Стрессовое тестирование__ (Stress Testing) - позволяет проверить насколько приложение и система в целом работоспособны в условиях стресса и также оценить способность системы к регенерации, т.е. к возвращению к нормальному состоянию после прекращения воздействия стресса.
78 |
79 | __Объемное тестирование__ (Volume Testing) - Задачей объемного тестирования является получение оценки производительности при увеличении объемов данных в базе данных приложения, при этом происходит:
80 |
81 | - измерение времени выполнения выбранных операций при определенных интенсивностях выполнения этих операций
82 | - может производиться определение количества пользователей, одновременно работающих с приложением
83 |
84 | __Тестирование стабильности или надежности__ (Stability / Reliability Testing) - проверка работоспособности приложения при длительном (многочасовом) тестировании со средним уровнем нагрузки. При этом на первое место выходит отсутствие утечек памяти, перезапусков серверов под нагрузкой и другие аспекты влияющие именно на стабильность работы.
85 |
86 | # Принципы реализации нагрузочного тестирования ПО.
87 |
88 |
89 | # Инструменты для реализации нагрузочного тестирования.
90 |
91 |
92 |
93 |
94 | ПО
95 | |
96 | Наименование производителя
97 | |
98 | Комментарии
99 | |
100 |
101 | OpenSTA
102 | |
103 | 'Open System Testing Architecture'
104 | |
105 | Свободно распространяемое программное обеспечение для нагрузочного/стресс тестирования, лицензированное GNU GPL. Использует распределённую архитектуру приложений, основанную на CORBA. Доступна версия под Windows, хотя имеются проблемы с совместимостью с Windows Vista. Поддержка прекращена в 2007 году.
106 | |
107 |
108 | IBM Rational Performance Tester
109 | |
110 | IBM
111 | |
112 | Основанное на среде разработки Eclipse ПО, позволяющее создавать нагрузку больших объёмов и измерять время отклика для приложений с клиент-серверной архитектурой. Требует лицензирования.
113 | |
114 |
115 | JMeter
116 | |
117 | Открытый проект Apache Jakarta Project
118 | |
119 | Основанный на Java кроссплатформенный инструментарий, позволяющий производить нагрузочные тесты с использованием JDBC / FTP / LDAP / SOAP / JMS / POP3 / HTTP / TCP соединений. Даёт возможность создавать большое количество запросов с разных компьютеров и контролировать процесс с одного из них.
120 | |
121 |
122 | HP LoadRunner
123 | |
124 | HP
125 | |
126 | Инструмент для нагрузочного тестирования, изначально разработанный для эмуляции работы большого количества параллельно работающих пользователей. Также может быть использован для unit- или интеграционного тестирования.
127 | |
128 |
129 | LoadComplete
130 | |
131 | SmartBear
132 | |
133 | Проприетарный продукт, позволяющий проводить нагрузочное тестирование веб-приложений
134 | |
135 |
136 | SilkPerformer
137 | |
138 | Micro Focus (Borland)
139 | |
140 |
141 | Siege
142 | |
143 | Joe Dog Software
144 | |
145 | Siege — это утилита для нагрузочного тестирования веб-серверов.[3]
146 | |
147 |
148 | Visual Studio Team System
149 | |
150 | Microsoft
151 | |
152 | Visual Studio предоставляет инструмент для тестирования производительности включая load / unit testing
153 | |
154 |
155 | QTest
156 | |
157 | Quotium
158 | |
159 |
160 | |
161 |
162 | HTTPerf
163 | |
164 |
165 | |
166 |
167 | |
168 |
169 | QALoad
170 | |
171 | Compuware Ltd.
172 | |
173 |
174 | (The) Grinder
175 | |
176 |
177 | |
178 |
179 | |
180 |
181 | WebLOAD
182 | |
183 | RadView Software
184 | |
185 | Нагрузочное тестирование инструмент для веб-и мобильных приложений, включая веб-панели для тестирования производительности анализа. Используется для крупномасштабных нагрузок, которые могут быть сгенерированы также из облака. лицензированный.[4]
186 | |
187 |
188 | # Apache JMeter - архитектура, поддерживаемые протоколы, особенности конфигурации.
189 |
190 | Как эта фигня работает - создает http запросы, эмулируя поведение заданного количества пользователей, посылает их приложению, сохраняет все ответы и анализирует.
191 | Thread Group – Описывает пул пользователей для выполнения теста – Количество, возрастание и пр..
192 |
193 | Семплеры – Формируют запросы, генерируют результаты – Большой набор встроенных протоколов (TCP, HTTP, FTP, JDBC, SOAP, JMS, SMTP, …..)
194 |
195 | Логические контроллеры – Определяют порядок вызова семплеров – Конструкции управления (if, loop, …) – Управление потоком
196 |
197 | Слушатели – Получают ответы – Осуществляют доп. операции с результатами: просмотр, запись, чтение и др. – Не обрабатывают данные! (в командной строке, нужен GUI)
198 |
199 | Таймеры – Задержки между запросами – Постоянные, в соответствии с законами
200 |
201 | Аssertion – Проверяют результаты
202 |
203 | Элементы конфигурации – Сохраняют предустановленные значения для семплеров
204 |
205 | Препроцессоры – Изменяют семплеры в их контексте (HTML Link Parser)
206 |
207 | Постпроцессоры – Применяются ко всем семплерам в одном контексте
208 |
209 | ## Порядок выполнения:
210 |
211 | 1. Конфигурационные элементы
212 | 2. Препроцессоры
213 | 3. Таймеры
214 | 4. Семплеры
215 | 5. Постпроцессоры
216 | 6. Assertions
217 | 7. Слушатели
218 |
219 | # Стресс-тестирование - основные понятия, виды стресс-сценариев.
220 |
221 | Стресс-тестирование - обычно последовательная нагрузка системы до момента неприемлемого значения характеристик, позволяют определить критические значения входных параметров,
222 | а также характеристики системы в аварийном режиме и количество времени которое необходимо для восстановления (если оно происходит).
223 |
224 | Основные виды сценариев:
225 |
226 | 1. Общее исследование поведения системы при пиковых нагрузках.
227 | 2. Исследование обработки ошибок и исключительных ситуаций системой при пиковых нагрузках.
228 | 3. Исследование узких мест системы или отдельных компонент при диспропорциональных нагрузках.
229 | 4. Тестирование ёмкости системы.
230 |
231 | # Стресс-тестирование ПО. Виды стресс-тестов ПО. Тестирование ёмкости.
232 |
233 | Виды описаны в предыдущем вопросе.
234 |
235 | Тестирование емкости: тестирование с целью определить запас прочности системы при полном соответствии требованиям производительности (по сути когда мы определяем сколько
236 | пользователей максимально поддерживает система оставаясь в рамках необходимого времени ответа в лабе). Как результат получаем набор максимально допустимых характеристик нагрузки
237 | системы, при которых она удовлетворяет требованиям, заданным на этапе проектирования.
238 |
--------------------------------------------------------------------------------