Вопросы с собеседований для Ruby-разработчиков уровня Middle и Senior

Сайт DOU.UA попросил интервьюеров-практиков прислать свои списки вопросов, а затем обобщил их в одной статье. Представляем вам перевод второй части этого материала, с вопросами для мидлов и сеньоров. Вопросы для джуниоров читайте здесь.

Middle

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

1. Что такое SOLID? Приведите примеры на каждую из букв.

2. Что такое микросервисная архитектура? Какие плюсы и минусы вы видите при ее использовании?

3. Знаете ли вы шаблоны проектирования Singleton / Factory / Facade / Decorator / Template Method / Strategy?

4. Можно ли измерить скорость выполнения алгоритма? Какие факторы влияют на скорость? Какие виды зависимостей вы знаете?

5. Что такое методология Scrum? На каких активностях / встречах может присутствовать / быть полезным Software Developer?

6. Какие инструменты для логирования используете в работе?

7. Какие инструменты для мониторинга веб-приложений используете?

8. С помощью какого / каких инструментов вы деплоили приложения на staging / production? Опишите процесс.

9. Если один из ендпоинтив в приложении отрабатывает очень долго, что делать, чтобы улучшить скорость?

10. Чем отличается библиотека от фреймворка?

11. Что такое трехуровневая архитектура? Зачем и когда ее используют? Приведите примеры.

12. Что такое кэширование? Зачем и когда его используют? Приведите примеры.

13. Что такое функциональное разделение? Зачем и когда его используют? Приведите примеры.

14. Что такое Comet-сервер? Зачем и когда его используют? Приведите примеры.

15. Что такое денормализаця? Зачем и когда ее используют? Приведите примеры.

16. Что такое деградация функциональности? Зачем она нужна и в каких случаях используется? Приведите примеры.

17. Что такое сервис-ориентированная архитектура? Зачем и когда ее используют? Приведите примеры.

18. Что такое монолитное приложение? Зачем и когда его используют? Приведите примеры.

19. Что такое асинхронная обработка? Зачем и когда ее применяют? Приведите примеры.

20. Что такое ленивые вычисления? Зачем и когда их используют? Приведите примеры.

Предметно-ориентированное проектирование

21. Что такое DDD? В чем его преимущества перед классическим MVC?

22. Что такое домен?

23. Что такое модель?

24. Что такое контекст?

25. Что такое сущность?

26. Что такое value object?

27. Что такое агрегирование?

Git и code review

28. Что делают команды cherry-pick, log, stash, reset, squash?

29. Что такое Gitflow? Какие правила использования Git были на вашем прошлом проекте?

30. Каких правил именования коммитов / ветвей / Pull Request-ов вы придерживаетесь?

31. На что обращаете внимание при code review?

32. Что бы вы могли назвать плохо проведенным code review?

Базы данных

33. Для чего нужны индексы?

34. Какие есть виды индексов?

35. Ускоряют ли индексы все операции с базами?

36. Что такое DB view?

37. Чем отличаются materialized db view от non-materialized db view?

38. Как можно сохранить данные в различные таблицы и гарантировать, что все они или запишутся, или нет?

39. Можно ли строить индексы по нескольким полям? Важен ли порядок этих полей в индексе?

40. Какие вы знаете constraints при создании столбцов?

41. В чем разница между SQL и NoSQL базами данных?

42. Как бы вы импортировали большие массивы данных в БД (1-2 миллиона строк в CSV-файл)?

43. Что такое N+1 и как избегать?

Реляционные базы данных

44. Какие различия есть между джоинами FULL OUTER JOIN, CROSS JOIN, NATURAL JOIN, INTERSECT и EXPECT?

45. Какие специфические типы данных есть в PostgreSQL?

46. Что такое view? С какой целью используется?

47. Что такое materialized view?

48. Что такое recursive view?

49. Что такое хранимая процедура и зачем она нужна?

50. Что такое партиционирование и какую проблему оно решает?

51. Умеете ли вы работать с чистыми SQL-запросами?

52. Каким образом можно работать с геолокацией в PostgreSQL?

53. Какие есть способы резервного копирования данных? Что такое pg_dump? В каком виде можно создавать резервные копии?

NoSQL базы данных

Redis

54. Что такое Redis? Какие задачи он выполняет?

55. Какие типы данных есть в Redis и для чего нужен каждый из них?

56. Что такое pub / sub?

57. Что такое транзакции?

58. Что такое mass insertion?

59. Что такое партиционирование?

60. Умеете ли вы работать с Redis в консоли?

61. Умеете ли настраивать Redis?

Elasticsearch

62. Что такое Elasticsearch и какие задачи он выполняет?

63. Что такое кластер?

64. Что такое нода?

65. Что такое индекс?

66. Что такое тип?

67. Что такое документ?

68. Что такое шарды и реплики?

69. Что такое Query DSL?

70. Что такое мапинг?

Статический анализ кода

71. Что такое overcommit и зачем нужна эта утилита?

72. Что такое danger и для чего используют эту утилиту?

73. Какие задачи выполняет каждый из нижеперечисленных гемов?

  • Rubocop;
  • Reek;
  • Rails Best Practices;
  • Brakeman;
  • RubyCritic;
  • SimpleCov;
  • Bundle Audit;
  • Bundle Leak;
  • Traceroute.

74. Какие задачи выполняет каждый из нижеперечисленных модулей?

  • Eslint;
  • Stylelint;
  • Prettier.

Ruby

75. Какие проблемы в Ruby (как языке программирования) вы видите, какие, по вашему мнению, нужно решать как можно быстрее?

76. Какими библиотеками, кроме фреймворка Rails, вы пользовались для создания структуры проекта?

77. Как можно в Ruby запросить посторонний API? Какой встроенный класс позволяет это сделать?

78. Что такое Thread? Чем он отличается от Process?

79. Есть ли в Ruby возможность создать абстрактный класс? Есть ли способ искусственно создать абстрактный класс?

80. Есть ли в Ruby возможность множественного наследования? Есть ли способ искусственно заменить множественное наследование?

81. Назовите максимально точный путь поиска методов в Ruby?

82. Какие минусы использования method_missing знаете?

83. Можно ли узнать идентификатор объекта в памяти, если да, то каким образом?

84. Какие виды enumerator для массива вы знаете?

85. Что такое мемоизация методов? Зачем ее используют?

86. С помощью какого хука можно посчитать количество потомков определенного класса?

87. В чем разница запуска rspec и bundle exec rspec?

88. Создавали ли вы гем в Ruby? Какова механика / последовательность действий для создания гема?

89. Что такое Rack middleware?

90. Есть такой код:

    users = User.where(id: [1,3,4])
     users.where(name: 'Alex')
     users.inspect

После какой строчки кода ActiveRecord выполняет запрос в базу?

Ruby on Rails

91. Что такое ActiveSupport? Зачем нужен? Какие задачи выполняет? Приведите пример методов, которые добавляет ActiveSupport.

92. Что такое Action Cable? Зачем используют этот фреймворк?

93. Как создать функциональность для отправки email в Rails-приложения?

94. Какие библиотеки для background jobs вы использовали? Какова механика работы таких библиотек?

95. Какие виды кэша в Rails знаете? Где можно хранить кэш?

96. Какие библиотеки / подходы для создания API-документации знаете / используете?

97.Что такое Swagger? Каковы преимущества создания API-документации в Swagger-формате?

98. Что такое Query Objects? Когда и как их можно использовать?

99. Что такое Decorators? Когда и как их можно использовать?

100. Что такое Form Objects / Contract? Когда и как их можно использовать?

101. Где и как вы рекомендуете содержать бизнес-логику в Rails-приложения?

102. Что такое JSON API формат? Использовали ли вы библиотеки для сериализации объектов в JSON API формате?

Тестирование

103. Работали ли вы с feature-тестами? Что такое capybara?

104. Что такое TDD? Какие преимущества / недостатки использования TDD-подхода видите?

105. Что такое BDD? В чем отличие между TDD и BDD?

106. Что может быть фактором того, что тесты на проект выполняются очень долго?

107. Что такое принцип тестирования FIRST?

108. Как порекомендуете писать тесты на код, в котором посылается запрос на сторонний сервис (API)?

109. Какие инструменты помогают контролировать качество тестов?

110. Какие составляющие response вы тестируете, когда пишете тест на определенный ендпоинт?

111. Является ли 100% code coverage на проект залогом низкой вероятности что-то «сломать» во время багфиксинга / имплементации новой функциональности? Объясните свой ответ.

Управление, сервисы и DevOps

112. Опишите CI/CD-подход на своем последнем проекте. Как бы вы его изменили?

113. Какие вообще Continuous strategies знаете? Чем отличается Continuous Deployment от Continuous Delivery?

114. Что такое Docker? Чем отличается Docker от виртуальной машины?

115. Для чего используют docker-compose?

116. Умеете ли вы работать с Docker?

117. Что такое image в Docker? Как работать с ним в Docker?

118. Что такое container в Docker? Как работать с контейнерами? Как запускать и останавливать контейнеры? Как узнать список рабочих контейнеров?

119. Что такое Docker Daemon?

120. Что такое Docker Client?

121. Что такое Docker Hub?

122. Что такое Docker Compose?

Практические задания

123. Написать клиент для открытого API ресурса с использованием только низкоуровневых библиотек: Net::HTTP, HTTP. rb, Faraday, etc.

124. Как бы вы посчитали количество пассажиров, которые заходят или выходят на определенной станции метро?

125. Посчитать количество автомобилей в пробке.

126. Организовать автомобильную стоянку.

127. Написать функцию, которая вернет уникальные элементы массива, не используя uniq или set, to_set из стандартной библиотеки. Ожидается вариант с применением хеш-таблицы, где ключами будут уникальные элементы из массива, а значениями true.

Senior

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

1. Опишите основные способы аутентификации в API.

2. Назовите основные принципы построения REST API.

3. Вам нужно спроектировать API. Какие основные вопросы будете задавать клиенту?

4. Каковы основные преимущества и недостатки монолитной архитектуры?

5. Каковы основные преимущества и недостатки микросервисной архитектуры?

6. Что такое SOLID? Какие из принципов, по вашему мнению, чаще всего нарушаются, какие являются наиболее критичными?

7. Опишите Singleton-паттерн. Где и когда вы его использовали?

8. Опишите принцип работы DNS.

9. Что такое code smells? Каковы основные признаки плохого кода?

10. Что такое reverse proxy, для чего он нужен?

11. Что такое load balancer, основные разновидности?

12. Что такое MVC и как не попасть с ним в беду?

13. Опишите процесс обработки HTTP-запроса на примере любого веб-фреймворка Ruby (Rails, Hanami, Sinatra, Roda, etc).

14. Чем отличается refactoring от оптимизации? Как и когда нужно выполнять каждый из этих процессов?

15. Знаете ли вы GraphQL? Какие плюсы и минусы вы видите по сравнению с REST?

16. Что такое multi-tenant architecture? Когда порекомендуете ее использовать?

17. Чем отличается понятие Dependency Inversion от Dependency Injection и от Inversion of Control?

18. Что такое GDPR? Назовите правила, которые использовали, чтобы быть GDPR compliant.

Метапрограммирование и DSL

19. Параллельное выполнение кода через Thread, Fiber, Ractor. Объясните на примерах.

20. Дизайн-паттерны: Service, Form, Value, Policy, Guard, etc. Объясните на примерах.

21. Расскажите об архитектурных паттернах: Monolith, Microservices, Distributed app, etc.

22. Как организовать бизнес-логику, когда в проекте уже 1000+ бизнес-операций?

23. Что такое Sidekiq? Как правильно организовывать очереди?

24. Расскажите об оптимизации быстродействия через benchmark, lineprof и flamegraph.

25. Работали ли вы с Garbage collector? Расскажите.

26. Расскажите, какими своими решениями гордитесь и почему.

Ruby / Rails

27. Что такое Thread? Каковы особенности использования тредов в разработке?

28. Что такое Process? Каковы особенности использования процессов в разработке?

29. Что такое Mutex? Приведите примеры использования мютексов в разработке.

30. Если нужно определить, сколько выполняется тот или иной код, как порекомендуете это сделать?

31. Какие недостатки видите в Ruby? Когда и как они могут себя проявить во время разработки?

32. Можно ли передать контекст выполнения одного метода в другой метод? Если да, то как это сделать?

33. Какие callback-и знаете в Ruby?

34. Как реализовать Singlethon-класс Ruby? Опишите базовые концепты.

35. Как работает Garbage collection в Ruby? Опишите базовые концепты.

36. Что такое Ractor? В чем разница между классической моделью работы с тредами и работой с помощью Ractor?

37. Как работают Lazy Enumerators? Чем они отличаются от классических Enumerators? Как и когда они могут помочь?

38. Назовите примеры использования Fiber-ов?

39. Как include добавляет метод модуля в класс? Что происходит на уровне MRI? В чем разница по сравнению с extend и prepend?

40. У вас есть задача импортировать пользователей в базу Rails-приложения. Пользователи записаны в CSV-файле, где каждая строка — это данные. Опишите ваш подход к решению проблемы. Как изменится решение, если файл станет очень большим (> 300000 строк)?

41. Если в модели User у вас есть callback, какие могут возникнуть проблемы при решении предыдущей задачи?

42. Как мы можем отслеживать прогресс Background Job?

43. Опишите жизненный цикл Request — Response в Rails. Через какие основные компоненты фреймворка проходит запрос и для чего они нужны?

44. Какие основные типы тестов используете и с какой целью?

45. Как вы относитесь к интеграционным тестам?

46. Что такое полиморфные ассоциации в ActiveRecord?

47. Как бы вы порекомендовали построить semantic versioning для Rails API, работающего с мобильными приложениями (IOS, Android, Web)? Опишите стратегию на верхнем уровне.

48. Если необходимо, чтобы каждый запрос, пришедший к Rails app независимо от роута, возвращал 403 статус быстрее, как бы вы порекомендовали реализовать код для этой задачи?

49. Какие, по вашему мнению, пять основных минусов Rails? Что бы вы порекомендовали изменить, чтобы нейтрализовать эти минусы?

50. Можно ли в Rails работать с несколькими базами, если да, то как это сделать?

Базы данных

51. Что такое транзакция? Каковы основные свойства транзакций?

52. Что такое database lock и чем он отличается от транзакций?

53. Что такое Pessimistic и Optimistic locking?

54. У нас есть таблица Users. Мы добавили к ней индекс в трех полях: first_name, last_name, email. Именно в таком порядке.

Теперь делаем запрос

SELECT * FROM users WHERE first_name = "Alex" AND  email = "<a href="mailto:test@mail.com">test@mail.com</a>"

Поможет ли нам индекс ускорить запрос и почему?

55. Что такое Database View? Какие виды?

56. Что такое Database trigger?

57. Что такое партиционирование? Опишите кейсы, когда партиционирование было бы полезным.

58. Верхнеуровнево опишите шаги для реализации партиционирования на примере любой СУБД.

59. Что такое триггеры? Как и когда их можно использовать? Какие плюсы и минусы вы видите в сравнении с тем, чтобы использовать триггеры / колбеки на уровне бэкенда?

60. Что такое WAL? Какую роль он играет?

61. Была ли у вас возможность / необходимость использовать шардинг? Чем отличается шардиг от партиционирования?

62. Опишите принципы, преимущества и недостатки работы с primary / secondary (master / slave) репликацией.

63. Знакомы ли вы с CAP-теоремой? Если да, объясните основную идею.

64. Знаете ли ACID? Как вы понимаете букву «I» в этой аббревиатуре?

65. Представьте ситуацию, когда ваш сервер, на котором размещен redis, по неизвестным причинам перезапустился. Что посоветуете сделать заранее, чтобы такие ситуации не нанесли большой вред?

Тестирование

66. Знаете ли вы, что такое Load Testing? Чем может помочь разработчик при Load Testing?

67. Какие инструменты используют для того, чтобы собрать как можно больше метрик при Load Testing?

68. Какие подходы вы бы порекомендовали использовать, чтобы ускорить тесты на CI?

69. Как внедрить процесс написания тестов, если на проекте (Rails API) их совсем нет?

Практические задания

70. Написать реализацию структуры данных Set. Объяснить алгоритмическую сложность добавления элементов к сету.

71. Спроектировать реферальную систему (то есть пользователь может пригласить других пользователей, которые становятся его рефералами, они приглашают своих рефералов, и так формируется древовидная структура). Есть модель:

class Users < ActiveRecord::Base
    end

Как бы вы связали ее с рефералами?

72. Добавьте метод:

class Users < ActiveRecord::Base
    end

который возвращает рефералы пользователя поуровнево. Например, user имеет рефералы user1, user2. user1 имеет реферала user3, user2 имеет рефералов user4 и user5. Нужно получить результат:

{ 0 => [user], 
      1 => [user1, user2],
      2 => [user3, user4, user5 }

[customscript]techrocks_custom_after_post_html[/customscript]

[customscript]techrocks_custom_script[/customscript]

1 комментарий к “Вопросы с собеседований для Ruby-разработчиков уровня Middle и Senior”

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх