Skip to content

Commit 3b3563e

Browse files
Polina Janochkinainstallero
Polina Janochkina
authored andcommitted
Added test assignments
1 parent dc26448 commit 3b3563e

21 files changed

+823
-1
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
Roadmap или карта знаний современного web-программиста и список рекомендуемой литературы.
66

7-
А также [список](interview) типичных вопросов с собеседований Rails разработчика
7+
А также список [типичных вопросов](interview) и [тестовых заданий](test_assignments) с собеседований Rails разработчика
88

99
## Базовые навыки
1010

test_assignments/README.md

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Список тестовых заданий на позицию Ruby on Rails разработчика
2+
3+
[SQL: запрос к БД](SQL_find_max_score.md)
4+
5+
[SQL: написать запросы к базе данных](SQL_query_for_users.md)
6+
7+
[Non-rails framework: text web-app with self-destructing messages](app_with_self_destructing_text_messages.md)
8+
9+
[RoR + Selenium: автоматизированный сбор списка активных юзеров](automated_collection_of_active_forum_users.md)
10+
11+
[RoR + Selenium: автоматизированный поиск тем по ключевым словам на форуме](automated_keyword_search.md)
12+
13+
[RoR + Selenium: автоматизированная проверка новых личных сообщений на форуме](automated_unread_messages_checking.md)
14+
15+
[RoR + Selenium: автоматизированный сбор данных юзеров](automated_user_data_collection.md)
16+
17+
[RoR: бот-калькулятор для Telegram](calculating_bot_for_telegram.md)
18+
19+
[Ruby + JSON RESTful API: приложение с объявлениями о работе](job_advertisement_site.md)
20+
21+
[RoR: JSON API с экшенами для блога](json_api_for_blog.md)
22+
23+
[RoR: meals delivery service](meals_delivery_service.md)
24+
25+
[RoR: выгрузка тестового прайс-листа и создание карточек для онлайн-магазина](price_list_export_algorithms_for_marketplace.md)
26+
27+
[JSON API: прототип для системы бронирования авто](prototype_for_car_hiring_system.md)
28+
29+
[RoR + Ember: API для сайта продажи/аренды недвижимости](rails_api_for_real_estate_site.md)
30+
31+
[Ruby: функция Checkout для магазина](shop_with_checkout.md)
32+
33+
[RoR + Ember: простой трекер задач](simple_to_do_list.md)
34+
35+
[RoR: таск-менеджер с функцией аутентификации](task_manager_with_authentication.md)
36+
37+
[Ruby: тотализатор](totalizator.md)
38+
39+
[Ruby: сервис статистики видеопросмотров](video_view_statistics_service.md)
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
## SQL: запрос к БД
2+
3+
Есть таблица `users` [ id (int), email (str), score (int), company_id(int) ] 
со связью «один ко многим» с таблицей `companies` [ id(int), name(str) ]
4+
5+
**Задание**
6+
7+
Получить выборку [ id, email, score, company_id ] с максимальным `score` по каждой компании.
8+
9+
`Users`
10+
11+
|ID|email|score|company_id|
12+
|---|---|---|---|
13+
14+
15+
16+
17+
18+
19+
20+
21+
22+
23+
Result
24+
25+
|ID|email|score|company_id|
26+
|---|---|---|---|
27+
28+
+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
## SQL: написать запросы к базе данных
2+
3+
**Условия**
4+
5+
Дана таблица `users` с полями `id`, `group_id`.
6+
7+
```
8+
create temp table users(id bigserial, group_id bigint);
9+
insert into users(group_id) values (1), (1), (1), (2), (1), (3);
10+
```
11+
12+
В этой таблице, упорядоченной по `id` необходимо:
13+
14+
- выделить непрерывные группы по `group_id` с учётом указанного порядка записей (их 4);
15+
16+
- подсчитать количество записей в каждой группе;
17+
18+
- вычислить минимальный `id` записи в группе.
19+
20+
Для таблицы:
21+
22+
| id | group_id |
23+
| ------- | -------- |
24+
| 1 | 1 |
25+
| 2 | 1 |
26+
| 3 | 1 |
27+
| 4 | 2 |
28+
| 5 | 1 |
29+
| 6 | 3 |
30+
31+
Непрерывными группами можно считать:
32+
33+
| group_id |
34+
| -------- |
35+
| 1 |
36+
| 2 |
37+
| 1 |
38+
| 3 |
39+
40+
Запрос должен выводить:
41+
42+
| min_id | group_id | count |
43+
| ------ | -------- | ------ |
44+
| 1 | 1 | 3 |
45+
| 4 | 2 | 1 |
46+
| 5 | 1 | 1 |
47+
| 6 | 3 | 1 |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
## Non-rails framework: text web-app with self-destructing messages
2+
3+
Build a web application, which creates text self-destructing
4+
messages.
5+
6+
**Requirements**
7+
8+
A user opens the website and creates a message. The application generates a safe link to this saved message (such as: http://yourapp.com/message/ftr45e32fgv56d2 ).
9+
10+
The user should be able to choose a destruction option:
11+
12+
- destroy message after the first link visit
13+
14+
- destroy after 1 hour
15+
16+
All the messages stored on the server side should be encrypted using the AES algorithm (you can use any library for text encryption).
17+
18+
Cover your application with the unit and integration tests using
19+
rspec.
20+
21+
**Technologies**
22+
23+
Use any non-rails framework (sinatra, hanami or any other) for ruby backend. Also please deploy your application to Heroku.
24+
25+
**Bonus points for implementing**
26+
27+
- message should be encrypted on the frontend side, using a password and should be sent to backend in an encrypted format (to view the message, the user should enter a correct password)
28+
29+
- self-destruction of messages after a given number of link visits or after a given number of hours
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
## RoR + Selenium: автоматизированный сбор списка активных юзеров
2+
3+
Необходимо продемонстрировать умение не только решать поставленную задачу, но и качественно оформлять код:
4+
5+
- выбирать содержательные названия для классов, методов и переменных;
6+
7+
- писать разумные комментарии к каждому классу и методу, указывать тип и описание для каждого параметра;
8+
9+
- создавать методы и классы разумного размера (по количеству строк);
10+
11+
- использовать константы с понятными названиями вместо «магических чисел».
12+
13+
Необходимо обдумать не только «позитивный» случай, но и возможные ошибки в процессе обработки (на практике они более чем возможны). В том числе случай, когда меняется структура страниц и алгоритм перестаёт функционировать корректно. Все такие ошибки должны правильно и, по возможности, унифицированно обрабатываться.
14+
15+
**Задание**
16+
17+
Реализуйте автоматизированный сбор списка самых активных участников вашего любимого форума (или любого форума, где есть список пользователей, отсортированный по числу сообщений).
18+
19+
**Предполагаемый алгоритм решения задачи**
20+
21+
- залогиниться на форуме, используя предоставленные логин и пароль аккаунта, если это требуется для получения списка пользователей;
22+
23+
- получить список пользователей, отсортированный по числу сообщений;
24+
25+
- собрать все `username` аккаунтов (и число их сообщений), у которых больше N сообщений, пролистывая страницы списка;
26+
27+
- занести информацию в таблицу `forum_users` базы данных с полями `{ VARCHAR username, INT messages_count, DATE scraped_date }`, где `username` + `scraped_date` (дата сбора данных) имеют ограничение на уникальность (unique constraint). В случае наличия записи — не обновлять данные.
28+
29+
**Технологии**
30+
31+
Задание нужно реализовать на Ruby On Rails в виде периодической задачи Resque + Resque Scheduler, где логин и пароль аккаунта, а также расписание выполнения хранятся в конфигурационном файле.
32+
33+
Рекомендуем продумать архитектуру решения: желательно выделить «низкий уровень» элементарных запросов и «высокий уровень» управления навигацией и обработки ошибок навигации. Обязательно использовать принцип «тонких контроллеров» для resque jobs.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
## RoR + Selenium: автоматизированный поиск тем по ключевым словам на форуме
2+
3+
Необходимо продемонстрировать умение не только решать поставленную задачу, но и качественно оформлять код:
4+
5+
- выбирать содержательные названия для классов, методов и переменных;
6+
7+
- писать разумные комментарии к каждому классу и методу, указывать тип и описание для каждого параметра;
8+
9+
- создавать методы и классы разумного размера (по количеству строк);
10+
11+
- использовать константы с понятными названиями вместо «магических чисел».
12+
13+
Необходимо обдумать не только «позитивный» случай, но и возможные ошибки в процессе обработки (на практике они более чем возможны). В том числе случай, когда меняется структура страниц и алгоритм перестаёт функционировать корректно. Все такие ошибки должны правильно и, по возможности, унифицированно обрабатываться.
14+
15+
**Задание**
16+
17+
Реализуйте автоматизированный поиск тем по ключевым словам на вашем любимом форуме.
18+
19+
**Предполагаемый алгоритм решения задачи**
20+
21+
- залогиниться на форуме, используя предоставленные логин и пароль аккаунта, если это требуется для получения списка пользователей;
22+
23+
- получить список тем с ключевыми словами, используя поиск по форуму;
24+
25+
- собрать все названия и URL тем из списка результатов, а также количество сообщений в каждой из них;
26+
27+
- желательно также получить стартовое сообщение темы.
28+
29+
**Технологии**
30+
31+
Задание нужно реализовать на Ruby On Rails в виде API-вызова, где логин и пароль аккаунта, а также поисковая фраза (`query`) являются GET-параметрами, а ответ — JSON-объектом с полем `success: true`, `data` - списком объектов с полями `title`, `body`, `replies_count`, `url`, описывающих найденные темы.
32+
33+
Рекомендуем продумать архитектуру решения: желательно выделить «низкий уровень» элементарных запросов и «высокий уровень» управления навигацией и обработки ошибок навигации. Обязательно использовать принцип «тонких контроллеров» для resque jobs.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
## RoR + Selenium: автоматизированная проверка новых личных сообщений на форуме
2+
3+
Необходимо продемонстрировать умение не только решать поставленную задачу, но и качественно оформлять код:
4+
5+
- выбирать содержательные названия для классов, методов и переменных;
6+
7+
- писать разумные комментарии к каждому классу и методу, указывать тип и описание для каждого параметра;
8+
9+
- создавать методы и классы разумного размера (по количеству строк);
10+
11+
- использовать константы с понятными названиями вместо «магических чисел».
12+
13+
Необходимо обдумать не только «позитивный» случай, но и возможные ошибки в процессе обработки (на практике они более чем возможны). В том числе случай, когда меняется структура страниц и алгоритм перестаёт функционировать корректно. Все такие ошибки должны правильно и, по возможности, унифицированно обрабатываться.
14+
15+
**Задание**
16+
17+
Реализуйте автоматизированную проверку наличия новых личных сообщений на вашем любимом форуме.
18+
19+
**Предполагаемый алгоритм решения задачи**
20+
21+
- залогиниться на форуме, используя предоставленные логин и пароль аккаунта;
22+
23+
- перейти в раздел личных сообщений;
24+
25+
- попытаться найти элемент,содержащий число новых сообщений;
26+
27+
- в случае его наличия — прочитать `inner Text/value`.
28+
29+
Задание нужно реализовать на Ruby On Rails в виде API-вызова, где логин и пароль аккаунта являются GET-параметрами, а ответ - JSON-объектом с единственным полем `unread_messages_count`.
30+
31+
Рекомендуем продумать архитектуру решения: желательно выделить «низкий уровень» элементарных запросов и «высокий уровень» управления навигацией и обработки ошибок навигации. Обязательно использовать принцип «тонких контроллеров».
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
## RoR + Selenium: автоматизированный сбор данных юзеров
2+
3+
Необходимо продемонстрировать умение не только решать поставленную задачу, но и качественно оформлять код:
4+
5+
- выбирать содержательные названия для классов, методов и переменных;
6+
7+
- писать разумные комментарии к каждому классу и методу, указывать тип и описание для каждого параметра;
8+
9+
- создавать методы и классы разумного размера (по количеству строк);
10+
11+
- использовать константы с понятными названиями вместо «магических чисел».
12+
13+
Необходимо обдумать не только «позитивный» случай, но и возможные ошибки в процессе обработки (на практике они более чем возможны). В том числе случай, когда меняется структура страниц и алгоритм перестаёт функционировать корректно. Все такие ошибки должны правильно и, по возможности, унифицированно обрабатываться.
14+
15+
**Задание**
16+
17+
Реализуйте автоматизированный сбор данных о пользователях вашего любимого форума.
18+
19+
**Предполагаемый алгоритм решения задачи**
20+
21+
- залогиниться на форуме, используя предоставленные логин и пароль аккаунта, если это требуется для получения списка пользователей;
22+
23+
- получить список пользователей, отсортированный по алфавиту;
24+
25+
- Собрать все `username` аккаунтов и для каждого получить аватар (именно картинку, а не просто URL) со страницы профиля;
26+
27+
- занести информацию в таблицу `forum_users` базы данных с полями `{ VARCHAR username, VARCHAR profile_url, VARCHAR avatar_image, DATE last_scraped_date }`, если запись уже существует - обновить данные.
28+
29+
**Технологии**
30+
31+
Задание нужно реализовать на Ruby On Rails в виде периодической задачи Resque + Resque Scheduler, где логин и пароль аккаунта, а также расписание выполнения хранятся в конфигурационном файле.
32+
33+
Работу с аватарами реализовать с использованием гема carrierwave.
34+
35+
Рекомендуем продумать архитектуру решения: желательно выделить «низкий уровень» элементарных запросов и «высокий уровень» управления навигацией и обработки ошибок навигации. Обязательно использовать принцип «тонких контроллеров» для resque jobs.

0 commit comments

Comments
 (0)