Skip to content

Тестовые задания для кандидатов на участие в стажировке 2019.1

Notifications You must be signed in to change notification settings

tslava/trainee-2019-4

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 

Repository files navigation

Тестовые задания на стажировку Backend KODE 2019.4

1. Алгоритмы

Необходимо написать функцию, которая будет принимать первым параметром список объектов

{ 
    id: int,
    phrase: str,
    slots: List[str]
}

Пример

[
    {"id": 1, "phrase": "Hello world!", "slots": []},
    {"id": 2, "phrase": "I wanna {pizza}", "slots": ["pizza", "BBQ", "pasta"]},
    {"id": 3, "phrase": "Give me your power", "slots": ["money", "gun"]},
]

и вторым параметром строку для поиска в объектах

Условия объекта

  • Длинна example_object > 0
  • ID объектов > 0
  • Длинна phrase <= 120
  • Длинна массива slots <= 50
search_string: str

Например, I wanna pasta

Функция должна проверить наличие строки поиска в объекте с комбинациями и вернуть id объекта в случае совпадения или 0 в случае отсутствия совпадений строки в объекте

В объекте в строке phrase, при наличии {} и строк в slots необходимо сделать все возможные комбинации. Например:

{"phrase": "I wanna {eat}", "slots": ["pizza", "BBQ", "pasta"]}

должен скомбинировать следующие варианты:

"I wanna eat"
"I wanna pizza"
"I wanna BBQ"
"I wanna pasta"

и сравнить их со строкой поиска.

Функцию необходимо реализовать без сторонних библиотек (только python stdlib)

Повышенная сложность

  • Рассмотреть вариант, что список объектов может быть с такими фразами:
{"phrase": "I wanna {eat} and {drink}", "slots": ["pizza", "BBQ", "pepsi", "tea"]}
  • Реализовать неточный поиск (fuzzy search). Например:
'I wanna eat' и 'i wanna eat' как строки поиска. Функция должны вернуть один id для них.

Python file

def phrase_search(object_list: list, search_string: str) -> int:
    ...
    # type your code here


if __name__ == "__main__":
    """ 
    len(object) != 0
    object["id"] > 0
    0 <= len(object["phrase"]) <= 120
    0 <= len(object["slots"]) <= 50
    """
    object = [
        {"id": 1, "phrase": "Hello world!", "slots": []},
        {"id": 2, "phrase": "I wanna {pizza}", "slots": ["pizza", "BBQ", "pasta"]},
        {"id": 3, "phrase": "Give me your power", "slots": ["money", "gun"]},
    ]

    assert phrase_search(object, 'I wanna pasta') == 2
    assert phrase_search(object, 'Give me your power') == 3
    assert phrase_search(object, 'Hello world!') == 1
    assert phrase_search(object, 'I wanna nothing') == 0
    assert phrase_search(object, 'Hello again world!') == 0
    assert phrase_search(object, 'I need your clothes, your boots & your motorcycle') == 0

2. Проект

Реализовать сервис, который позволит подписываться на изменения по биржевым котировкам. Сервис должен предоставлять HTTP API со следующими запросами:

Создание подписки на уведомления по тикеру:

  • email - email для подписки на уведомления
  • ticker - код акции или инструмента
  • max_price - если цена ticker поднимется выше этого значения, на email будет отправлено уведомление
  • min_price - если цена ticker опустится ниже этого значения, на email будет отправлено уведомление

Пример запроса

POST /subscription Content-Type: application/json { "ticker": "TSLA", "email": "[email protected]" "max_price": "270.5200", "min_price": "240.200", }

Удаление подписки на уведомления по тикеру:

при отсутствии в запросе параметра ticker должны удаляться все подписки по заданному email

Пример запроса

DELETE /[email protected]&ticker=TSLA 


 Должна быть предусмотрена возможность подписаться только на min_price или только на max_price или на min_price и max_price. По одному email можно подписаться максимум на пять тикеров.

  • Для получения информации о котировках рекомендуется использовать API https://www.alphavantage.co
  • Список тикеров можно посмотреть тут: https://finance.yahoo.com/trending-tickers
  • Для реализации сервиса рекомендуется использовать Python 3
  • Код проекта может быть выложен в открытом репозитории на github, bitbucket или gitlab, содержать файл requirements.txt со списком зависимостей и инструкцию по запуску.

3. Проектирование

  • Задача: спроектировать алгоритм работы
  • Результат: блок-схема
  • Формат: файл *.jpg
  • Инструмент визуализации: https://www.draw.io/

Описание предметной области:

Необходимо спроектировать алгоритм работы блока управления кофейного автомата

Характеристики автомата

  • Выдача сдачи: Да
  • Кол-во напитков: 18
  • Кол-во стаканов: 700
  • Купюроприемник: Да
  • Монетоприемник: Да
  • Регулировка уровня сахара: Да
  • Питание: 220 В

Алгоритм должен учитывать все возможные ситуации работы, как штатные, так и внештатные.

Примеры сценариев работы автомата

  • позитивный: пользователь выбирает напиток, вносит оплату, выбирает уровень сахара, получает напиток, получает сдачу
  • позитивный: пользователь выбирает напиток, вносит оплату, нажимает кнопку "Отмена", получает возврат оплаты
  • негативный: пользователь выбирает напиток, автомат сообщает, что данный напиток недоступен
  • негативный: автомат выводит на дисплей сообщение о том, что он не работает (закончилась сдача или напиток)

About

Тестовые задания для кандидатов на участие в стажировке 2019.1

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published