Skip to content

Instantly share code, notes, and snippets.

@vovs03
Forked from thinkler/CHI Questions
Created October 16, 2018 10:51
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save vovs03/2ab359db72c2592b12e84a0ff3b017bc to your computer and use it in GitHub Desktop.
Save vovs03/2ab359db72c2592b12e84a0ff3b017bc to your computer and use it in GitHub Desktop.
1. принципиальное различие скриптовых и “обычных” языков
Скриптовый язык программирования — язык программирования, разработанный для записи «сценариев»,
последовательностей операций, которые пользователь может выполнять на компьютере.
Интерпертируется с помощью интерпретатора. Имеет динамическую типизацию.
Интерпретация — пооператорный (покомандный, построчный) анализ, обработка и тут же выполнение исходной программы
или запроса (в отличие от компиляции, при которой программа транслируется без её выполнения)[2][3][4].
2.Duck Typing
вид динамической типизации, применяемой в некоторых языках программирования
(D, Perl, Smalltalk, Python, Objective-C, Ruby, JavaScript, TypeScript, Groovy, ColdFusion, Boo, Lua, Go),
которая позволяет полиморфно работать с объектами, которые не связаны в иерархии наследования,
но имеют необходимый набор методов. То есть считается, что объект реализует интерфейс, если он содержит все методы
этого интерфейса, независимо от связей в иерархии наследования и принадлежности к какому-либо конкретному классу.
3. Ruby OOP
способность объекта быть черным ящиком — инкапсуляция;
совокупность публичных методов объекта составляют его интерфейс;
возможность перекрывать методы в потомках — полиморфизм.
4. Multiple Inheriting
Сила модулей в том, что он может одновременно входить в состав различных классов,
а в один класс к тому же можно «подмешивать» различные модули, за счет чего достигается сумасшедшее
количество комбинаций функциональных возможностей объекта без дублирования кода.
Модули являются отличным решением для группирования методов, классов и констант вместе.
Использую модули можно извлечь две значительные выгоды:
-Модули обеспечивают пространства имен и, следовательно, предотвращают возникающие с именованием методов,
классов и констант ошибки.
-Модули реализуют примеси (mixins) — элегантное решение заменяющее множественное наследование.
Модули определяют пространства имен, песочницу в которой ваши методы и константы могут работать без возникновения
проблем с другими методами и константами, которые имеют такие же имена.
5. Threads Ruby
http://bs.shikhalev.org/2015/04/ruby-multitasking.html ???
6. что такое MVC и зачем это нужно
Возожно, вы уже слышали о MVC в отношении других фрэймворков, однако что представляет собой MVC в RoR? MVC –
это паттерн архитектуры приложения, четко разделяющий три его компонента:
Model (далее Модель) является «сутью» приложения и отвечает за непосредственные алгоритмы,
расчёты и тому подобное внутреннее устройство приложения. Также предоставляет линк к хранилищу данных.
View (Представление, дальше Вид) предназначен для вывода данных, предоставленных Моделью.
Это единственная часть MVC, которая непосредственно контактирует с пользователем.
Controller (Поведение, далее Контроллер) получает данные от пользователя и передаёт их в Модель.
Кроме того, он получает сообщения от Модели и передаёт их в Вид.
Active Record
Active Record – это Модель в RoR. Модель хранит данные и предоставляет базу для работы с данными.
Кроме этого Active Record также является ORM фрэймворком. ORM значит Object-relational mapping
(Объектно-реляционная проекция). Собственно Active Record делает следующие вещи:
Проекция таблицы на класс. Каждая таблица проецируется на один или несколько классов по принципу
convention over configuration (соглашение выше конфигурации). Одно из таких соглашений – имя таблицы
должно быть во множественном числе, а название класса – в единственном. Атрибуты таблицы налету проецируются
в атрибуты экземпляра Руби. После того, как все проекции сделаны, каждый объект ORM класса представляет
определенную строку таблицы, с которой класс был спроецирован.
Соединение с БД. Вы можете подключиться к базе данных, используя API, предоставляемый Active Record, который
создает необходимый вам запрос непосредственно в движок БД при помощи адаптеров. У Active Record есть адаптеры для MySQL,
Postgres, MS SQLServer, DB2, и SQLite. Необходимо лишь записать параметры доступа к БД в файле database.yml.
Операции CRUD. Это операции create (создание), retrieve (получение), update (обновление) и delete (удаление) над таблицей.
Так как Active Record – это ORM фрэймворк, вы всегда работаете с объектами. Чтобы создать новую строку таблицы, вы создаете
новый объект класса и заполняете его переменные экземпляра значениями. Стоит заметить, что все это Active Record делает за
вас.
Проверка данных. Проверка данных перед помещением их в таблицу – это первый шаг в безопасности вашего проекта. Active Record
предоставляет проверку Модели. Данные могут быть проверены автоматически с помощью множества готовых методов, которые, в
случае необходимости, можно переписать под собственные нужды.
Action View
Вид включает в себя логику, необходимую для вывода данных Модели. Роль Вида в RoR играет Action View.
Наилее часто используемые функции Action View:
Шаблоны (Templates). Шаблоны – это файлы, содержащие заполнители (placeholders), которые буду заменены на контент.
Шаблоны могут содержать HTML-код и код Ruby, встраиваемый в HTML с использованием синтакса встроенного (embedded)Ruby (ERb).
Помощники (helper, далее хелпер) форм и форматирования. Хелперы форм позволяют создавать такие элементы страниц, как
чекбоксы, списки, используя готовые методы. В свою очередь хелперы форматирования позволяют форматировать данные необходимым
нам способом, методы существуют для дат, валют и строк.
Макет. Макеты (layouts) определяют, как контент будет расположен на странице. Динамически создаваемая страница может
содержать вложение из нескольких страниц, даже без использования таблиц и фрэймов, используя API Макета.
Action Controller
В веб-приложении Контроллер регулирует поток логики приложения. Он находится на границе программы, перехватывая все
запросы, на основе которых он изменяет какой-то объект Модели и вызывает Вид, чтобы отобразить обновленные данные.
В RoR Action Controller является Контроллером, вот его основные функции:
Поддержка сессий. Сессия – это период времени, проведенный пользователем на сайте. Его можно отследить с помощью cookie
или объекта сессии. Cookie – небольшой файл, он не может содержать объекты, в отличие от объекта сессии.
Фильтрация. Бывают ситуации, когда необходимо вызвать определенный код, перед тем как исполнять логику Контроллера или
после него, например, аутентификация пользователей, логирование событий, предоставление персонального ответа. Помогают
в таких случаях фильтры, предоставляемые Action Controller. Существуют три основных фильтра: before, after и around.
О них – позже.
Кэширование. Кэширование – это процесс, при котором наиболее запрашиваемый контент сохраняется в кэше, чтобы не было
необходимости запрашивать его вновь и вновь.
7. локига в контроллере, должна ли быть и почему
It depends. In the spirit of object oriented programming it is better for a model (class) to encapsulate it's own
data and behaviour that is related to manipulating that data. The way the data is manipulated is of course dependant
on your business logic but if it's tightly coupled with the data then it should belong in the model.
That doesn't mean all business logic belongs in the models, the controllers should be responsible for marshalling
interaction between the user and the data and possibly any interactions between models.
8. назначение миграций
Миграции - это удобный способ изменять схему вашей базы данных всё время неизменным и простым образом.
Они используют Ruby DSL. Поэтому вам не нужно писать SQL вручную, позволяя вашей схеме быть независимой от базы данных.
Каждую миграцию можно рассматривать как новую 'версию' базы данных. Схема изначально ничего не содержит,
а каждая миграция изменяет ее, добавляя или убирая таблицы, столбцы или записи. Active Record знает, как обновлять
вашу схему со временем, перенося ее из определенной точки в прошлом в последнюю версию. Active Record также обновляет
ваш файл db/schema.rb, чтобы он соответствовал текущей структуре вашей базы данных.
9. Зачем нужны тесты
Автоматические тесты дают уверенность, что ваша программа работает как задумано.
Такие тесты можно запускать многократно. Успешное выполнение тестов покажет разработчику,
что его изменения не сломали ничего, что ломать не планировалось.
Провалившийся тест позволит обнаружить, что в коде сделаны изменения, которые меняют или ломают его поведение.
Исследование ошибки, которую выдает провалившийся тест, и сравнение ожидаемого результата с полученным даст возможность
понять, где возникла ошибка, будь она в коде или в требованиях.
10. TDD
Разработка через тестирование (англ. test-driven development, TDD) — техника разработки программного обеспечения,
которая основывается на повторении очень коротких циклов разработки: сначала пишется тест, покрывающий желаемое изменение,
затем пишется код, который позволит пройти тест, и под конец проводится рефакторинг нового кода к соответствующим стандартам.
Кент Бек, считающийся изобретателем этой техники, утверждал в 2003 году, что разработка через тестирование поощряет простой
дизайн и внушает уверенность (англ. inspires confidence)[1].
Я не буду тут ссылаться на статьи и презентации корифеев IT индустрии. Мне запомнилась одна фраза из Twitter по
поводу TDD которая засела в моем сознании, и которая на мой взгляд четко и коротко характеризует TDD подход.
К сожалению дословно я её привести не могу, но смысл в ней следующий: «если вы следуете TDD, то можете быть 100%
уверены, что каждая строчка кода была написана благодаря упавшему(ым) тесту(ам)». Я видел и слышал много дебатов
по поводу достоинств и недостатков TDD и BDD, но а) тесты писать надо б) если код был написан благодаря упавшему тесту,
то этому коду можно доверять, и с легкостью его изменять (рефакторить) не боясь испортить поведение системы.
11. BDD
Керована поведінкою розробка (англ. behavior-driven development (BDD)) — процес розробки програмного забезпечення,
що виникла з керованої тестами розробки (TDD).[1][2][3] BDD поєднує основні засади та техніки TDD з ідеями
предметно-орієнтованого проектування та об'єктно-орієнтованого дизайну з метою командам розробників та менеджменту
спільні інструменти для співпраці під час розробки програмного забезпечення.[1][4]
Теперь про BDD. Появилось это явление позже и как утверждает Фаулер в статье «Mocks Aren't Stubs» благодаря так
называемым мокистам. С другой стороны этот подход активно продвигают ребята из Agaile тусовки, сводя к минимуму расстояние
между разработчиками, пользователями и аналитиками систем. Достигается это путем получения Executable Scenarios, иными
словами, сценарии которые описывают пользователи переводятся в исполняемый тест.
12. JS
Node Ember React ES16 !!!!!
13. Настройки HTTP серверов
Веб-сервер — сервер, принимающий HTTP-запросы от клиентов, обычно веб-браузеров, и выдающий им HTTP-ответы,
как правило, вместе с HTML-страницей, изображением, файлом, медиа-потоком или другими данными.
Веб-сервером называют как программное обеспечение, выполняющее функции веб-сервера, так и непосредственно
компьютер (см.: Сервер (аппаратное обеспечение)), на котором это программное обеспечение работает.
Клиент, которым обычно является веб-браузер, передаёт веб-серверу запросы на получение ресурсов,
обозначенных URL-адресами. Ресурсы — это HTML-страницы, изображения, файлы, медиа-потоки или другие данные,
которые необходимы клиенту. В ответ веб-сервер передаёт клиенту запрошенные данные. Этот обмен происходит по протоколу HTTP.
https://developer.mozilla.org/ru/docs/Learn/%D0%A7%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_%D0%B2%D0%B5%D0%B1_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80
14. Ngix and Apache
https://habrahabr.ru/post/267721/
15. Балансировка нагрузики на сервера приложений
https://blog.selectel.ru/balansirovka-nagruzki-osnovnye-algoritmy-i-metody/ ????
16. Транзакции БД
https://www.w3schools.com/sql/
17. блокировочные и версионные СУБД
???
18. Индексы ДБ (+ - ?)
Индексы - это специальные структуры в базах данных, которые позволяют ускорить поиск и сортировку по определенному
полю или набору полей в таблице, а также используются для обеспечения уникальности данных. Проще всего индексы сравнить
с указателями в книгах. Если нет указателя, то нам придется просмотреть всю книгу, чтобы найти нужное место, а с указателем
то же действие можно выполнить намного быстрее.
Обычно чем больше индексов, тем больше производительность запросов к базе данных. Однако при излишнем увеличении количества
индексов падает производительность операций изменения данных (вставка/изменение/удаление), увеличивается размер БД, поэтому
к добавлению индексов следует относиться осторожно.
https://ruhighload.com/post/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0+%D1%81+%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B0%D0%BC%D0%B8+%D0%B2+MySQL
19. Репликация БД
https://ruhighload.com/post/%D0%A0%D0%B5%D0%BF%D0%BB%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85
20. Шардинг БД
https://ruhighload.com/post/%D0%93%D0%BE%D1%80%D0%B8%D0%B7%D0%BE%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9+%D1%88%D0%B0%D1%80%D0%B4%D0%B8%D0%BD%D0%B3
https://ruhighload.com/post/%D0%92%D0%B5%D1%80%D1%82%D0%B8%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9+%D1%88%D0%B0%D1%80%D0%B4%D0%B8%D0%BD%D0%B3
22. PGSQL ...
23. Система Контроля версий
Что такое контроль версий, и зачем он вам нужен? Система контроля версий (СКВ) — это система, регистрирующая
изменения в одном или нескольких файлах с тем, чтобы в дальнейшем была возможность вернуться к определённым
старым версиям этих файлов. Для примеров в этой книге мы будем использовать исходные коды программ, но на самом
деле под версионный контроль можно поместить файлы практически любого типа.
Если вы графический или веб-дизайнер и хотели бы хранить каждую версию изображения или макета — а этого вам
наверняка хочется — то пользоваться системой контроля версий будет очень мудрым решением. СКВ даёт возможность
возвращать отдельные файлы к прежнему виду, возвращать к прежнему состоянию весь проект, просматривать происходящие
со временем изменения, определять, кто последним вносил изменения во внезапно переставший работать модуль, кто и когда
внёс в код какую-то ошибку, и многое другое. Вообще, если, пользуясь СКВ, вы всё испортите или потеряете файлы, всё можно
будет легко восстановить. Вдобавок, накладные расходы за всё, что вы получаете, будут очень маленькими.
24. Git
https://keep.google.com/#label/Git
25. как перенести изменени из одной ветку в другую (2 способа)
git checkout -b "new-branch" "ffe5069daa6d42e4f9e0efc28892e5401d42183f"
git cherry-pick 8fe1498
TEST IT!
26.зачем нужна команда git rebase
Перемещение работает следующим образом: находится общий предок для двух веток (на которой вы находитесь сейчас
и на которую вы выполняете перемещение); для каждого из коммитов в текущей ветке берётся его дельта и сохраняется
во временный файл; текущая ветка устанавливается на тот же коммит, что и ветка, на которую выполняется перемещение;
и, наконец, одно за другим применяются все изменения. Рисунок 3-29 иллюстрирует этот процесс.
Предположим, вы решили, что хотите внести свои изменения для клиентской части в основную линию разработки для релиза,
но при этом хотите оставить в стороне изменения для серверной части, пока они не будут полностью протестированы.
Вы можете взять изменения из ветки client, которых нет в server (C8 и C9), и применить их на ветке master при помощи
опции --onto команды git rebase:
27. Ruby Questions
https://gist.github.com/ryansobol/5252653
28. SQL
https://keep.google.com/#label/SQL
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment