Тестовые задания по Java

Здесь собраны реальные тестовые задания, которые дают соискателям на стажировках и junior-позициях. Эти задания помогут лучше подготовиться к отбору, потренироваться и пополнить портфолио

стэк>
Компания>
Сложность>

СКБ Контур • Высокая сложность

Высокий уровень сложности - 3 звезды

Тестовое задание по Java от компании СКБ Контур

Задача: Реализовать функцию автодополнения следующим образом: по началу слова необходимо выдавать список из 10 наиболее часто встречающихся слов, начинающихся с указанного префикса. Сортировать варианты автодополнения в порядке убывания частоты использования. В случае равенства частот - варианты сортируются естественным образом (по алфавиту). Если вариантов меньше 10, то выдавать столько, сколько нашли. I часть Решение должно быть в виде консольного java-приложения. Исходные данные подаются через стандартный поток ввода, а все результаты выводятся в стандартный поток вывода. Исходные данные: В первой строке находится единственное число N (1 ≤ N ≤ 10^5) - количество слов в словаре. Каждая из следующих N строк содержит слово wi (непустая последовательность строчных латинских букв длиной не более 15) и целое число ni (1 ≤ ni ≤ 10^6) - частота употребления слова wi. Слово и число разделены единственным пробелом. Ни одно слово не повторяется более одного раза. В (N+2)-й строке находится число M (1 ≤ M ≤ 15000). В следующих M строках содержатся слова uj (непустая последовательность строчных латинских букв длиной не более 15) - начала слов, введённых пользователем. Результат: Для каждой из M строк необходимо вывести наиболее употребляемые слова, начинающиеся с uj. Варианты дополнения для каждого слова необходимо разделять переводами строк. Пример: stdin 5 kare 10 kanojo 20 karetachi 10 korosu 7 sakura 3 3 k ka kar stdout kanojo kare korosu karetachi kanojo kare karetachi kare karetachi II часть Решение должно быть в виде web-приложения с использованием [Spring MVC] (http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html) и [AngularJS] (https://angularjs.org/). Запускать приложение на [Apache Tomcat] (http://tomcat.apache.org/). Исходные данные подаются через файл. Исходные данные: В первой строке находится единственное число N (1 ≤ N ≤ 10^5) - количество слов в словаре. Каждая из следующих N строк содержит слово wi (непустая последовательность строчных латинских букв длиной не более 15) и целое число ni (1 ≤ ni ≤ 10^6) - частота употребления слова wi. Слово и число разделены единственным пробелом. Ни одно слово не повторяется более одного раза. Результат: На главной странице web-приложения должна быть единственная строка с вводом. Ввод символов в строку должен сопровождаться выдачей вариантов автодополнения. Дополнительные требования: Использование [maven] (https://maven.apache.org/) приветствуется (либо требуется иной скрипт для сборки) Код на Java в стиле, соответствующем рекомендациям http://google.github.io/styleguide/javaguide.html Приоритет на скорость работы (решение должно отрабатывать не дольше 1-10 секунд на тестовом файле [test.in] (https://github.com/dmitryanufriev/kontest/blob/master/test.in))

СКБ Контур • Лёгкая сложность

Лёгкий уровень сложности - 1 звезда

Тестовое задание по Java от компании СКБ Контур

Тестовое задание на позицию стажер-java в СКБ Контур Сокращатель ссылок Необходимо разработать HTTP-сервис, который генерирует короткие ссылки. Описание В сервисе должна быть реализована следующая функциональность: 1. Генератор ссылок Ресурс /generate должен обрабатывать POST-запрос, содержащий оригинальную ссылку, и генерировать короткую ссылку. Оригинальная ссылка передается в теле POST-запроса в поле “original” JSON-объекта. Сгенерированная короткая ссылка передается в теле ответа в поле “link” JSON-объекта. Сгенерированная короткая ссылка должна иметь формат /l/{some-short-name}, то есть не должна содержать адрес сервера, где some-short-name - идентификатор ссылки. Алгоритм генерации этого идентификатора и его формат остается на усмотрение автора. Пример запроса: POST /generate Пример тела запроса: { “original”: “https://some-server.com/some/url?some_param=1” } Пример ответа: { “link”: “/l/some-short-name” } 2. Редирект Ресурс /l/{some-short-name} должен осуществлять редирект на оригинальный url. Параметры пути запроса: - some-short-name - идентификатор ссылки Пример запроса: GET /l/some-short-name Предлагаем подумать, каким образом можно оптимизировать работу с ссылками, по которым происходит много переходов. 3. Статистика 3.1 Статистика по конкретным ссылкам Ресурс /stats/{some-short-name} должен обрабатывать GET-запрос и возвращать статистику переходов по конкретной ссылке. Параметры пути запроса: - some-short-name - идентификатор ссылки В ответе сервиса должен содержаться JSON-объект со следующими полями: - link - сгенерированная короткая ссылка - original - оригинальная ссылка - rank - место ссылки в топе запросов - count - число запросов по короткой ссылке Пример запроса: GET /stats/some-short-name Пример ответа: { “link”: “/l/some-short-name”, “original”: “http://some-server.com/some/url” “rank”: 1, “count”: 100500 } 3.2 Рейтинг ссылок Ресурс /stats должен обрабатывать GET-запрос и возвращать статистику запросов с сортировкой по частоте запросов по убыванию и возможностью постраничного отображения. Параметры строки запроса: - page - номер страницы - count - число записей, отображаемых на странице, максимальное возможное значение 100 (включительно) В ответе сервиса должен содержаться массив из JSON-объектов, описанных в разделе 3.1 Статистика по конкретным ссылкам. Пример запроса: GET /stats?page=1&count=2 Пример ответа: [ { “link”: “/l/some-short-name”, “original”: “http://some-server.com/some/url” “rank”: 1, “count”: 100500 }, { “link”: “/l/some-another-short-name”, “original”: “http://another-server.com/some/url” “rank”: 2, “count”: 40000 } ] Требования к сервису 1. При создании сервиса можно воспользоваться любым из указанных фреймворков: Spring Framework, Spring Boot, Undertow, или написать приложение на чистой Java. 2. Сервис должен запускаться как standalone-приложение (java -jar service.jar). 3. Необходимо покрыть сервис Unit-тестами. Полнота покрытия остается на усмотрение автора решения. 4. Приложение должно собираться с использованием Apache Maven. 5. По возможности необходимо придерживаться REST-архитектуры. 6. Не использовать отдельно устанавливаемые базы данных, кэши и т.п. Можно использовать embedded базы данных (например, H2 в режиме встроенной БД). Прочие требования 1. Язык программирования: Java 8. 2. Оформление кода должно соответствовать общепринятым нормам (например, https://google.github.io/styleguide/javaguide.html) 3. Исходники необходимо упаковать в ZIP-архив вместе с кратким описанием решения и инструкцией по сборке и запуску. Архив необходимо загрузить на файлообменник, и отправить ссылку на архив в заявке на стажировку 4. Проверка решения будет осуществляться в автоматизированном режиме (функциональные и нагрузочные тесты), поэтому важно соблюдение указанных в задании требований. 5. Всё, что явно не указано в условиях, остаётся на усмотрение автора решения.

Eltex • Средняя сложность

Средний уровень сложности - 2 звезды

Тестовое задание по Java от компании Eltex

Многопользовательский тайм-трекер Задача: разработать Backend сервиса Многопользовательский тайм-трекер, доступ к которому можно получить по REST. Тайм-трекер (англ. Time-tracker или Time-tracking software) - это категория компьютерного программного обеспечения, которое позволяет сотрудникам, работающим за компьютерами, записывать время, потраченное на выполнение задач или проектов, а работодателям их контролировать. Типы запросов создать пользователя трекинга; изменить данные пользователя; начать отсчет времени по задаче Х; прекратить отсчет времени по задаче Х; показать все трудозатраты пользователя Y за период N..M в виде связного списка Задача - Сумма затраченного времени в виде (чч:мм) с сортировкой от большего к меньшему (для ответа на вопрос, На какие задачи я потратил больше времени); показать все временные интервалы занятые работой за период N..M в виде связного списка Временной интервал (число чч:мм) - Задача (для ответа на вопросы, На что ушла моя неделя или Где за прошедшую неделю были ‘дыры’, когда я ничего не делал); показать сумму трудозатрат по всем задачам пользователя Y за период N..M (как будто для отображения на панели Отработано на этой неделе); очистить данные трекинга пользователя Z; удалить всю информацию о пользователе Z. Дополнительные условия Если пользователь не завершил отсчет своего времени, то он должен завершаться автоматически в 23:59 текущего дня. Данные должны храниться в системе не более периода, указанного в конфигурации сервиса. Очистка данных производится задачей по расписанию, работающей в составе java приложения. Детали реализации Только backend! RESTful, HTTP, JSON. Разбивать на микросервисы не нужно. Все SQL таблицы существуют в одной схеме данных. Запуск на Ubuntu/Debian или Docker compose. Security не требуется. Доступ к API может быть открытым без аутентификации и авторизации. В реальной системе имя пользователя, конечно, передавалось бы в заголовках, token’ах или где-то еще. В данной задаче имя пользователя передается в запросе. Данные следует хранить в базе данных MySQL или PostgreSQL. Система должна журналировать происходящие события и ошибки с помощью одного из общепринятых логгеров logback/log4j. Проект должен содержать список всех REST команд которые можно выполнить с кратким описанием входных и выходных данных. Спецификация OpenAPI приветствуется. Язык для документации русский или английский на усмотрение разработчика. Проект должен содержать README файл с описанием, из которого должно быть понятна процедура сборки, места хранения персистентных данных и журналов работы приложения. Исходный код Проект необходимо вести в публичном GitHub. По истории commit'ов должна быть видна самостоятельная разработка кандидата. Один commit с полным набором исходников не приветствуется. Язык программирования Java 8+ или Kotlin. Можно использовать Spring, другие фреймворки и библиотеки на усмотрение автора. В проекте должны быть написаны тесты, демонстрирующие все типы запросов и сценарии. Сроки Мы никуда не спешим. После ознакомления с ТЗ вы сами определяете срок, за который сможете его выполнить. Обычно это 2-4 недели. Можно быстрее, если это не навредит качеству. Можно дольше, но все равно срок надо обозначить заранее. При проверке оценивается Работоспособность решения Удобство и надежность API Полноты README и другой документации Журнал работы Код решения Обработка ошибок Javadoc, комментарии Тесты Контакты автора MikhaelGaydamaka можно задавать вопросы.

KazanExpress • Лёгкая сложность

Лёгкий уровень сложности - 1 звезда

Тестовое задание по Java от компании KazanExpress

Тестовое задание на Android разработку Тут находится описание тестового задания для кандидатов на Android-разработку в команду KazanExpress. Задача Нужно реализовать простое приложение, которое помогает пользователю найти интересующий его коктейль. Работать данное приложение должно с TheCocktailDb API. Есть три уровня сложности: [Easy] - для претендующих на позицию Junior Android Dev [Medium] - для претендующих на позицию Middle Android Dev [Hard] - для претендующих на позицию Senior Android Dev Требования к задаче Ниже будут описаны требования для выполнения задачи к каждому из уровней сложности. Уровни Medium и Hard подразумевают собой выполнение предыдущего уровня сложности. Easy На начальном уровне сложности главной задачей приложения будет отрисовка экрана с информацией о коктейле. Для получения рандомного коктейля во время загрузки приложения можно использовать данный GET запрос. Требования: У приложения должны быть онбординги, на них можно отобразить любую информацию о приложении; При запуске приложения на старте показываем индикатор прогресса на время ожидания ответа с сервера (по желанию можно добавить splash screen до экрана загрузки на свой вкус); На странице коктейля должно быть отображено: фото коктейля, название, id, категория, тип коктейля, тип стакана для сервировки; Статус бар должен быть прозрачным, а изображение коктейля "лежать" под статус баром; Картинки коктейлей нужно подгружать асинхронно (на время загрузки показываьб индикатор прогресса); Также дополнительно должен быть раздел "Ингридиенты", который появляется при скролле страницы товара; Должна быть кнопка "Добавить в избранное" в виде иконки сердечка. При клике на иконку нужно менять ее состояние (полезная работа не выполняется, просто меняем состояние иконки - например, закрашиваем); Через Pull-to-Refresh (Swipe-to-Refresh) отображать новый коктейль (повторно запросить рандомный и отрисовать); Нужно уметь обрабатывать ошибки сети. При возникновении ошибки выводить кнопку Retry, при клике на которую приложение пытается загрузить новый коктейль и отобразить его. Medium Нужно реализовать все, что было перечислено в Easy, но помимо этого: Сделать стартовый экран приложения с поисковой строкой и миниатюрными "карточками" уже посещённых коктейлей; Позволить пользователю с помощью поисковой строки находить коктейли. В случае, если запрос на поиск по названию коктейля вернул результат, переходить на страницу первого элемента из списка. Если же запрос ничего не вернул - показывать соответствующий toast с информацией; Добавить на страницу коктейля кнопку "Назад", которая возвращала бы на главный экран. Hard Нужно реализовать все, что было перечислено в Medium, но помимо этого: Сделать навигационное меню с пунктами "Главная", "Категории" и "Избранное"; Функционал главной страницы оставить по аналогии с уровнем сложности Medium; На странице "Категории" отобразить список категорий коктейлей; При клике на любой элемент из списка категорий, отображать экран с каталогом миниатюрных "карточек" коктейлей из соответствующей категории; Все картинки коктейлей на миниатюрах должны асинхронно подгружаться; Каталог "карточек" должен появиться как только все данные по карточкам подгрузятся. Во время ожидания подгрузки нужно отображать скелетоны карточек; Со страницы коктейля кнопка "Назад" должна отправлять пользователя на последний активный Activity. Правила сдачи задания Нужно будет создать Pull Request с ваши решением в данный репозиторий, а также отправить apk-файл на почту kevin@kazanexpress.ru. Сроки - Easy и Medium - 7 дней, Hard - 14 дней. P.S. Приятный визуал приветствуется. Особое внимание будет уделено чистоте кода.

Получите доступ более чем к 500 тестовым заданиям
Сервис можно использовать бесплатно,
без ограничений. Чтобы получить полный доступ,
вам необходимо зарегистрироваться.
где найти тестовые задания для практики
пример тестового задания junior
тестовые задания для junior java
практические задачи по java
решение тестового задания java