diff --git a/interview/rails.md b/interview/rails.md
index db53535..e6f4be3 100644
--- a/interview/rails.md
+++ b/interview/rails.md
@@ -557,6 +557,10 @@
1. Что такое проблема N+1 запроса?
+
+ Ответ
+ Эта проблема появляется при подгрузке дочерних обьектов, если мы используем ассоциацию ( many в one-to-many ). Множество ORM, по умолчанию, используют ленивую загрузку, т.е. делается запрос на выборку одной записи для родительского обьекта и запрос для КАЖДОЙ дочерней записи. Если коротко, то делая N+1 запрос вы в разы сильнее нагружаете базу данных, там, где этого можно избежать.
+
1. Как можно решить проблему N+1 в Rails?
@@ -589,6 +593,7 @@
```
http://rusrails.ru/active-record-query-interface#neterpelivaya-zagruzka-svyazey
+ https://engineering.gusto.com/a-visual-guide-to-using-includes-in-rails/ -- хорошая статья на тему, подробная графическая разбивка
1. Как без рендеринга шаблона сказать мобильному приложению, что у него нет прав на просмотр определённого контента одной строкой в контроллере?
diff --git a/interview/webdev.md b/interview/webdev.md
index 5aa1828..bb7d156 100644
--- a/interview/webdev.md
+++ b/interview/webdev.md
@@ -2,46 +2,47 @@
1. Что происходит после того, как вы вводите название сайта в браузер и нажимаете Enter? Подробно объяснить.
- Ответ
-
-#### *1. Парсинг URL - можно отнести к условно первому этапу (не считая самого процесса ввода символов в поисковом поле браузера), во время которого*:
-- Браузер проверяет список предзагруженных HSTS (HTTP Strict Transport Security). Это список сайтов, которые требуют, чтобы к ним обращались только по HTTPS. Если нужный сайт есть в этом списке, то браузер отправляет ему запрос через HTTPS вместо HTTP. В противном случае, начальный запрос посылается по HTTP.
-- Конвертируются не-ASCII Unicode символы в название хоста.
-
-#### *2. Следующий этап - Определение DNS*
-- Браузер проверяет наличие домена в своём кэше. Если домена там нет, то браузер вызывает библиотечную функцию *gethostbyname* (отличается в разных ОС) для поиска нужного адреса в файле *hosts*.
-- Если домен нигде не закэширован и отсутствует в файле hosts, gethostbyname отправляет запрос к сетевому DNS-серверу.
-- Запрос к сетевому DNS-серверу называется ARP-запросом.
-- Для того, чтобы отправить ARP-запрос браузеру необходимо отыскать целевой IP-адрес, а также знать MAC-адрес интерфейса, который будет использоваться для отправки ARP-запроса.
-
-#### *3. Открытие сокета и сборка TCP-сегмента/пакета*
-- Когда браузер получает IP-адрес конечного сервера, то он берёт эту информацию и данные об используемом порте из URL (80 порт для HTTP, 443 для HTTPS), осуществляет вызов функции socket системной библиотеки и запрашивает поток TCP сокета.
-- Этот запрос сначала проходит через транспортный уровень, где собирается TCP-сегмент. Получившийся сегмент отправляется на сетевой уровень, на котором добавляется дополнительный IP-заголовок, IP-адрес сервера назначения и адрес текущей машины — теперь сегмент сформирован.
-
-#### *4. TLS handshake — для передачи пакетов данных между клиентом (компьютером) и сервером важно установить TCP-соединение. Это соединение устанавливается с помощью процесса, называемого трехсторонним рукопожатием TCP / IP, реализованного следующим образом*:
-
-- Клиентская машина отправляет SYN-пакет на сервер, спрашивая, открыт ли он для новых подключений.
-- Если на сервере есть открытые порты, которые могут принимать и инициировать новые соединения, он ответит, используя пакет SYN / ACK.
-- Клиент получит пакет SYN / ACK от сервера и подтвердит его, отправив пакет ACK.
-
-#### *5. Обработка HTTP-запросов на сервере*
-- Одним из инструментов обработки запросов/ответов на стороне сервера является HTTPD. Наиболее популярные HTTPD-серверы это Apache или Nginx для Linux и IIS для Windows.
-- Сервер разбирает запрос по следующим параметрам: метод HTTP-запроса (наиболее распространенные — GET/POST), домен, запрашиваемые пути.
-- Сервер находит контент, который соответствует запросу и парсит файл с помощью обработчика.
-
-#### *6. Парсинг HTML и интерпретация CSS*
-- Главной задачей HTML-парсера является разбор разметки в специальное дерево — «parse tree» — это дерево DOM-элементов.
-- Во время разбора браузер парсит CSS-файлы, каждый из которых разбирается в объект StyleSheet.
-
-#### *7. Рендеринг страниц и пост-рендеринговое исполнение*
-- Путём перебора DOM-узлов и вычисления для каждого узла значений CSS-стилей создаётся «Дерево рендера» (Render Tree или Frame Tree).
-- Вычисляются координаты каждого узла. Вычисляются финальные позиции слоёв и через Direct3D/OpenGL отдаются композитные команды.
-- После завершения рендеринга, браузер исполняет JavaScript-код в результате срабатывания часового механизма или в результате действий пользователя.
-
-#### *Для более детального ознакомления:*
-- https://habr.com/ru/company/htmlacademy/blog/254825/
-- https://github.com/alex/what-happens-when
-- https://medium.com/@maneesha.wijesinghe1/what-happens-when-you-type-an-url-in-the-browser-and-press-enter-bb0aa2449c1a
+ Ответ
+
+ #### *1. Парсинг URL - можно отнести к условно первому этапу (не считая самого процесса ввода символов в поисковом поле браузера), во время которого*:
+ - Браузер проверяет список предзагруженных HSTS (HTTP Strict Transport Security). Это список сайтов, которые требуют, чтобы к ним обращались только по HTTPS. Если нужный сайт есть в этом списке, то браузер отправляет ему запрос через HTTPS вместо HTTP. В противном случае, начальный запрос посылается по HTTP.
+ - Конвертируются не-ASCII Unicode символы в название хоста.
+
+ #### *2. Следующий этап - Определение DNS*
+ - Браузер проверяет наличие домена в своём кэше. Если домена там нет, то браузер вызывает библиотечную функцию *gethostbyname* (отличается в разных ОС) для поиска нужного адреса в файле *hosts*.
+ - Если домен нигде не закэширован и отсутствует в файле hosts, gethostbyname отправляет запрос к сетевому DNS-серверу.
+ - Запрос к сетевому DNS-серверу называется ARP-запросом.
+ - Для того, чтобы отправить ARP-запрос браузеру необходимо отыскать целевой IP-адрес, а также знать MAC-адрес интерфейса, который будет использоваться для отправки ARP-запроса.
+
+ #### *3. Открытие сокета и сборка TCP-сегмента/пакета*
+ - Когда браузер получает IP-адрес конечного сервера, то он берёт эту информацию и данные об используемом порте из URL (80 порт для HTTP, 443 для HTTPS), осуществляет вызов функции socket системной библиотеки и запрашивает поток TCP сокета.
+ - Этот запрос сначала проходит через транспортный уровень, где собирается TCP-сегмент. Получившийся сегмент отправляется на сетевой уровень, на котором добавляется дополнительный IP-заголовок, IP-адрес сервера назначения и адрес текущей машины — теперь сегмент сформирован.
+
+ #### *4. TLS handshake — для передачи пакетов данных между клиентом (компьютером) и сервером важно установить TCP-соединение. Это соединение устанавливается с помощью процесса, называемого трехсторонним рукопожатием TCP / IP, реализованного следующим образом*:
+
+ - Клиентская машина отправляет SYN-пакет на сервер, спрашивая, открыт ли он для новых подключений.
+ - Если на сервере есть открытые порты, которые могут принимать и инициировать новые соединения, он ответит, используя пакет SYN / ACK.
+ - Клиент получит пакет SYN / ACK от сервера и подтвердит его, отправив пакет ACK.
+
+ #### *5. Обработка HTTP-запросов на сервере*
+ - Одним из инструментов обработки запросов/ответов на стороне сервера является HTTPD. Наиболее популярные HTTPD-серверы это Apache или Nginx для Linux и IIS для Windows.
+ - Сервер разбирает запрос по следующим параметрам: метод HTTP-запроса (наиболее распространенные — GET/POST), домен, запрашиваемые пути.
+ - Сервер находит контент, который соответствует запросу и парсит файл с помощью обработчика.
+
+ #### *6. Парсинг HTML и интерпретация CSS*
+ - Главной задачей HTML-парсера является разбор разметки в специальное дерево — «parse tree» — это дерево DOM-элементов.
+ - Во время разбора браузер парсит CSS-файлы, каждый из которых разбирается в объект StyleSheet.
+
+ #### *7. Рендеринг страниц и пост-рендеринговое исполнение*
+ - Путём перебора DOM-узлов и вычисления для каждого узла значений CSS-стилей создаётся «Дерево рендера» (Render Tree или Frame Tree).
+ - Вычисляются координаты каждого узла. Вычисляются финальные позиции слоёв и через Direct3D/OpenGL отдаются композитные команды.
+ - После завершения рендеринга, браузер исполняет JavaScript-код в результате срабатывания часового механизма или в результате действий пользователя.
+
+ #### *Для более детального ознакомления:*
+ - https://habr.com/ru/company/htmlacademy/blog/254825/
+ - https://github.com/alex/what-happens-when
+ - https://medium.com/@maneesha.wijesinghe1/what-happens-when-you-type-an-url-in-the-browser-and-press-enter-bb0aa2449c1a
+ - https://medium.com/launch-school/demystifying-ruby-applications-ruby-application-servers-and-web-servers-c3d0fd415cb3
1. Что такое сессия? Для чего используется?