Skip to content

Instantly share code, notes, and snippets.

@thinkler
Last active March 18, 2021 16:07
Show Gist options
  • Save thinkler/b689942d7e1165b6a95d3f1cd6d13df8 to your computer and use it in GitHub Desktop.
Save thinkler/b689942d7e1165b6a95d3f1cd6d13df8 to your computer and use it in GitHub Desktop.
Ruby
What is a class? - Каркас для объектов, содержит данные, методы, инстансы.
What is the difference between a class and a module? - Модуль - пространство имен, не может иметь экземпляров.
What is an object? - Экземпляр класса.
How would you declare and use a constructor in Ruby?
def initialize(some, data)
p "Initializer #{some} #{data}"
end
How would you create getter and setter methods in Ruby?
attr_accessor :name
attr_writer :name
attr_reader :name
Describe the difference between class and instance variables?
Переменные класса доступны везде где есть связь с этим классом. Инстансные переменные доступны только в этом классе
What are the three levels of method access control for classes and what do they signify?
private - недоступные извне
public - доступные отовсюду
protected - доступны только в контексте данного объекта (REsearch)
What does ‘self’ mean?
Отсылка к объекту в текущей области видимости.
Explain how (almost) everything is an object in Ruby.
Duck Тайпинг, отсуствие сюрпризов
Explain what singleton methods are. What is Eigenclass in Ruby?
Синглтон методы - методы у единственного класса.
Describe Ruby method lookup path.
http://pascalbetz.github.io/ruby/2016/03/14/lookup-path/
Describe available Ruby callbacks. How can we use them in practice?
http://blog.khd.me/blog/2008/12/28/ruby-callbacks/
What is the difference between Proc and lambda?
http://awaxman11.github.io/blog/2013/08/05/what-is-the-difference-between-a-block/
Lamb - возвращает значение, чувствительная к параметрам
Proc - return глобального скоупа, не чувствителен к параметрам
RACK
What is Rack?
Rack - это интерфейс, который создан, чтобы обеспечить минимальное API для подключения веб-серверов поддерживающих
Ruby (WEBrick, Mongrel и т.д.) и веб-фреймворками (Rails, Sinatra и др.). В нем реализован базовый функционал для
работы с HTTP протоколом: утилиты для парсинга, классы Response, Request, Session и многое другое.
Explain the Rack application interface.
Блок принимающий единственный параметр - переменные среды, возвращет - Статус, контент тайп, аррай тела. Возврат респонса.
Тот же хеш.
Write a simple Rack application.
require 'rack'
class RackApp
def call(env)
[200, {'Content-type' => html/text'}, ['Some Data']]
end
end
run RackApp.new
How does Rack middleware works?
Используя middleware (посредник/фильтр) можно изменить/подготовить запрос перед тем как он попадет в Application,
аналогично и с ответом для клиента. Запускается между приемом запроса и возвращением ответа.
GEMS
What is RubyGems? How does it work?
Инструмент для менеджмента гемами(руби либами). Работает как обычный либ менеджер. Устанавливая гем ставит все зависимости.
How can you build your own Ruby gem?
Explain the structure of a Ruby gem.
Code (including tests and supporting utilities)
The lib directory contains the code for the gem
The test or spec directory contains tests, depending on which test framework the developer uses
A gem usually has a Rakefile, which the rake program uses to automate tests, generate code, and perform other tasks.
This gem also includes an executable file in the bin directory, which will be loaded into the user’s PATH when the gem
is installed.
Documentation is usually included in the README and inline with the code. When you install a gem, documentation is
generated automatically for you. Most gems include RDoc documentation, but some use YARD docs instead.
The final piece is the gemspec, which contains information about the gem. The gem’s files, test information, platform,
version number and more are all laid out here along with the author’s email and name.
Can you give me some examples of your favorite gems besides Ruby on Rails?
Rspec, Rails, Bundler
Top Ruby on Rails Interview Questions
What is ActiveJob? When should we use it?
Фреймворк для организации отложенных задач (транзакции письма генерации пдф итп)
Используется для фоновой обработки задач, которые занимают много времени. (Rescue, Sidekiq, DelayedJob)
What is Asset Pipeline?
Инструмент для организации ассетов в rails (css, js), a также преобразования из различных языков (SCSS, CofeeSc, Erb).
Первой задачей - объединение файлов для ускорения процесса обработки браузером.
Вторая - минимизация файлов для того же ускорения и преобразования из высокоуровневых препроцессоров.
Explain the difference between Page, Action, Fragment, Low-Level, SQL caching types.
Page Caching - Кеширование страницы для возврата статических страниц веб браузером. (Без предварительных фильтров)
Action Caching - Идентично первому, только с использованием идентичных фильтров
Fragment Caching - Прямое указание на веб странице области, которая будет кешироваться
<% @products.each do |product| %>
<% cache product do %>
<%= render product %>
<% end %>
<% end %>
Low-Level - Прямое указание какие именно данные будут кешироваться. (Rails.cache.fetch)
SQL Caching - Кеширование одинаковых запросов ТОЛЬКО в пределах экшена.
What is a Rails engine?
Миниатюрное приложение, дополняющие функционал основного приложение. Практические полностью копирует
структуру основного приложение. READ MORE
Routing, Controllers, and Views
Provide an example of RESTful routing and controller
REST routing - роуты, основанные на HTTP методах, POST GET DELETE. /books/1
РЕСТ роуты должны соотносится с HTTP методами. Глагол + УРЛ
REST controllers - соотношение с роутами. Основные экшены (CRUD)
HTTP METHODS
OPTIONS - Пред запрос для получения списка доступных ХТТП методов
GET - Метод для получения данных
HEAD - Как Гет только без тела ответа и скорее всега проверяет ресурс на доступность.
POST - Отправка данные на создание записи.
PUT - Как Пост, только передает новые ресур заместь существующего(ранне созданного)
PATCH - Как Пост, только обновление части записи.
DELETE - Удаление данных.
TRACE - ?
CONNECT - ?
Describe CRUD verbs and actions
СreateReadUpdateDelete - REST методы для создания, чтения, обновления, и удаления ресурсов. Соотносятся с экшенами
create destroy update show index edit new
How should you test routes?
Проверкой комплексных роутов рспеком.
How should you use filters in controllers?
Использовать для обворачивания экшенов циклиескими действиями. Для того чтобы не повторять себя.
What are Strong Parameters?
Явное указание какие параметры мы ожидаем увидеть от формы
What do we need to test in controllers?
Спеки Фабрики Стабы Моки Хелперы (Доп либы для тестирования типа капибары)
Mocks Stubs ... http://www.hostettler.net/blog/2014/05/18/fakes-stubs-dummy-mocks-doubles-and-all-that/
How should you use content_for and yield?
Yield - место в главном лейауте куда будут отправляться все view темплейты.
Content for - явно указать блок который пойдет вы выше стоящий темлейтный yield
<html>
<head>
<%= yield :head %>
</head>
<body>
<%= yield %>
</body>
</html>
<% content_for :head do %>
<title>A simple page</title>
<% end %>
Active Record
Explain the Active Record pattern
Представление таблиц базы данных как классы. Объект - запись в таблице. Обновляя одно обновляется другое.
Используется в ORM.
What is Object-Relational Mapping?
технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков
программирования, создавая «виртуальную объектную базу данных». Существуют как проприетарные, так и свободные
реализации этой технологии. Осовобождает от потребности писать чистый SQL код.
Describe Active Record conventions
Конфигурирование сводится к минимуму или вообще упраздняется. Суть в том что конфиги и обычное проектирование очень часто
совпадают.
Конвенция имен - мн чилсо и ед число в различных моментах.
Конвенция ид в моделях - сопоставляются с названием моделей.
Конвенция спец записей в моделях - записи отвечающие именно того чего нужно
Explain the Migrations mechanism.
Инструмент для внесения изменений в базу данных использую Ruby а не SQL. Schema.rb - отражает содержание базы.
Также инструмент для менеджмента данных в базе.
Describe types of associations in Active Record.
belongs_to - ассоциация принадлежности к друго моделе, должна иметь ИД релейшена
has_one - ассоциация принадлежности только к одной модели
has_many - тут ясно
has_many :through - часто для many to many. Либо если цепочка наследования. В случае мени ту мени юзаем промеж таблицу
has_one :through - сейм щит
has_and_belongs_to_many - мени ту мени для бендых.
полиморфные   belongs_to :тип, polymorphic: true - добавить тип_ид и тип_тайп в таблицу и может быть у кого хош
присоединение к себе has_many :subordinates, class_name: "Employee", foreign_key: "manager_id"
What is Scopes? How should you use it?
Скоупы позволяют обернуть частые запросы в переменную. Для частых запросов.
Explain the difference between optimistic and pessimistic locking.
Оптимистик - 2 юзера могут получить доступ к объекту но один может поменять
Пессимистик - Только 1 может получть доступ к объекту.
SECURITY
Explain what is a sessions mechanism. How does it work?
Сесии - хеш, позволяющий не аутентифицировать клиента при каждом запросе. Т.е. запоминание каких либо данных.
Describe cross-site request forgery, cross-site scripting, session hijacking, and session fixation attacks.
СSRF - несанкционирование обращение к ресурсам сервера через не истекшую сессию
Фиксация Сессии - принуждение использовать общий для клиента и злоумышленника ID
XSS - отправка авторизованными пользователями скриптов для совершение несанц действий
Session Hijacking - просмотр данных между клиентов и сервером и пересылка своих данных
What is the difference between SQL Injection and CSS Injection?
SQL - инъекции позволяющие получать доступ к базе через передаваемые запросы
CSS - Js скрипты идущие через пользовательский css код
Для защиты пользоваться белыми списками
How should you store secure data such as a password?
Хешировать пароль в одностороннем порядке
Why do we need to use HTTPS instead of HTTP?
Шифровка данных между клиентом и сервером для предотвращения похищения данных.
TESTS
What is unit testing (in classical terms)?
Модульные тесты позволяют тестировать отдельные методы когда для проверки функционала.
Интеграционные тесты позволяют тестировать различные фичи вместе.
Функциональные - тестить интерфейс приложения.
What is the primary technique for writing a test?
Каждый тест должен иметь один ассерт. Тест должен чётко описывать только 1 действие. Юзать датабейз клинер.
Сетап - Инициализация - Проверка - Завершение.
Стабить вещи которые невозможно или проблемно проверить
TDD - разработка тест - код
BDD - тож самое только описание текста человеческими спецификациями
What are your favorite tools for writing unit tests?
Rspec, FactoryGirls, VCR, DBCleaner
What are your favorite tools for writing feature tests?
Rspec, Capybara
REFACTORING
What is a code smell?
Код, который нуждается в рефакторинге.
What are your favorite tools to find code smells and potential bugs?
Rubocop, Byebug
Why should you avoid fat controllers?
Why should you avoid fat models?
Перенасыщение кода, сложности рефакторинга/тестов.
Разбиение на маленькие куски кода - решение!
Explain extract Value, Service, Form, View, Query, and Policy Objects techniques.
http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment