Skip to content

Latest commit

 

History

History
160 lines (133 loc) · 8 KB

rails.md

File metadata and controls

160 lines (133 loc) · 8 KB

Вопросы для разработчиков на Ruby On Rails

Вопросы по soft skills Вопросы по алгоритмам

Junior

Общие вопросы

  1. Почему ты решил стать бэкенд-разработчиком, чем тебя привлекает профессия?
  2. Приходилось писать тесты и на чем?
  3. Знаком с пирамидой тестирования? Какие виды тестирования знаешь?
  4. Приходилось профилировать код?

Ruby

  1. Какие типы данных в Ruby знаешь?
  2. Чем тип данных символ отличается от строк?
  3. Что вернётся в результате сложения 10.5 и 10?
  4. Чем отличаются proc от lambda
  5. Что такое блок? Что такое yield? Можно ли передавать блоки в методы? Каким образом?
  6. Как происходит наследование в Ruby?
  7. Есть ли в Ruby множественное наследование если нет чем можно заменить?
  8. Модули что такое зачем нужны, extend, include, prepend - в чем отличие
  9. Какие ORM знаешь и какие использовал? Какие плюсы и минусы можешь выделить?
  10. Что такое Манкипатчинг? Применял ли?

Сети

  1. Чем PUT от PATCH отличается?
  2. Что из себя представляет HTTP запрос? Структура? Тело есть у всех HTTP запросов?
  3. Можешь рассказать, что такое REST? Использовал ли в работе REST?
  4. В чем разница между GET и POST?

Базы данных

  1. Базы данных - какие базы бывают, чем отличаются.
  2. Индексы в БД что это для чего нужны, какие типы индексов бывают.
  3. Ассоциации(один к одному, один ко многим, многие ко многоим) как реализовать на уровне БД, как реализовать на уровне Rails-моделей.
  4. Какие виды JOIN-ов бывают, чем отличаются.

Задачки на код

  1. Есть два приложения между ними шина данных(Kafka, RabbitMQ, gRPC), из одного в другой пришли кривые данные, как будешь дебажить?
  2. Есть таблица posts и таблица comments, связь один ко многим, в таблице comments вторичный ключ post_id - напиши запрос который вытащит все посты у которых > 3 комментариев и дата создания поста после 20 ноября
  3. Есть новые данные вот такой структуры
json:
[
  {
    id: 1,
    number: 'H1111',
    position: [
      {
        id: 1
        name: 'Хлеб'
        cost: '59.90'
      },
      # ......
    ]
  },
  #......
]

И им соответствуют модели

class Order < ApplicationRecord
  has_many :positions
end

class Position < ApplicationRecord
  belongs_to :order
end

Нужно в соответствии с этими данными обновить таблицу Orders в которой 100_000 записей

  1. Есть код Контроллер и две модели
class Order < ApplicationRecord
  has_many :positions
end

class Position < ApplicationRecord
  belongs_to :order
end

class OrdersController < ApplicationController
  def index
    # solution
  end

  def show
    #solution
  end
end

class OrderSerialiser < ActiveModel::Serializer
# solution
end

Нужно дописать экшены в контроллере и сериалайзер, что вернет из экшенов такую структуру

index:
[
  {
    id: 1,
    number: 'H1111',
    position: [
      {
        id: 1
        name: 'Хлеб'
        cost: '59.90'
      },
      # ......
    ]
  },
  #......
]
show:
{
  id: 1,
  number: 'H1111',
  position: [
    {
      id: 1
      name: 'Хлеб'
      cost: '59.90'
    },
    # ......
  ]
}

Middle

Общие вопросы

  1. Достаточно ли валидации в ORM при реализации проверки на уникальность, например, email при регистрации? Раскройте
  2. Какие последствия возможны при отправке email прямо в контроллере? Как можно решить эти проблемы?
  3. Как бы вы реализовали смену email на сайте, так чтобы соблюсти баланс между сложностью и безопасностью?
  4. Можно ли доверять email, который мы получаем по oauth от соц сетей и мержить аккаунты автоматически? Приведите примеры
  5. Как ограничить отправку email пользователю, который добавил письмо нашего проекта в спам? И почему это стоит делать (или не стоит)?
  6. Предположим что вы реализуете редакцию журнала, где редактора могут в админке править статьи. Как предотвратить ситуацию, когда два редактора могут начать одновременно редактировать одну статью и перетирать изменения друг друга?
  7. Каких принципов разработки нужно придерживаться, для обеспечения механизма zero downtime deployment. Как это достигается?
  8. Что может произойти, если ваша cron задача, которая запускается раз в минуту, стала выполняться больше 1 минуты? Как это можно предотвратить?
  9. Если вы пишите тесты, то как вы обходите проблему того, что код который вы тестируете, делает внешние вызовы? Доп условие, говорим о том, что на CI внешние вызовы запрещены (почему так правильно?)
  10. Предположим что в вашей системе реализована смена емейла. При этом этот емейл хранится еще и во внешней системе, например эквайринге, который шлет пользователю свои письма (но пользователь им напрямую не пользуется). Как бы вы реализовали синхронизацию емейла с внешней системой?
  11. Как вы узнаете об ошибках, которые происходят на продакшене? От пользователей или это автоматизировано?
  12. Как обеспечивается изоляция тестов друг от друга если они ходят в базу и меняют ее? Если в вашем фреймворке этого нет, то как вы это делаете или сделали бы?