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

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

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

Web строитель • Лёгкая сложность

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

Тестовое задание по Java от компании Web строитель

Задание 1 Разработать Rest Api c Spring Hateoas для To-do листа с регистрацией пользователей: Регистрации нового пользователя Авторизация пользователя Возможность добавления, просмотра, изменения, удаления задачи в to-do list Возможность создания задач с прикрепленными файлами. Файлы хранить в приватном бакете Yandex.Cloud. При просмотре задач в json'е возвращать временные ссылки на файл. Хранить временные ссылки до истечения срока действия. Используемый стек: Spring Boot 2, Spring Data, Spring Hateoas, Spring Security, PostgreSQL, Maven, AWS S3 v2 для работы с Object Storage. Плюсом будет использование микросервисной архитектуры. Приложить файл Postman с запросами на rest-сервис.

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

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

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

SQL query parser In SQL, the most syntactically complex and tricky query is probably the SELECT query. It has explicit and implicit joins, groupings, subqueries, sorting and truncation of selects - all this beauty can occur repeatedly even in one single select query. For example, like this: ```sql SELECT * FROM book ``` or like this: ```sql SELECT author.name, count(book.id), sum(book.cost) FROM author LEFT JOIN book ON (author.id = book.author_id) GROUP BY author.name HAVING COUNT(*) > 1 AND SUM(book.cost) > 500 LIMIT 10; ``` Please write a parser for an arbitrary SELECT query, representing it as a class of approximately this structure: ```java class Query { private List<String> columns; private List<Source> fromSources; private List<Join> joins; private List<WhereClause> whereClauses; private List<String> groupByColumns; private List<Sort> sortColumns; private Integer limit; private Integer offset; } ``` The structure of this class is not a requirement, but a guide to action :) If you have invented a class that reflects the SQL query structure better than the one given here - feel free to use your solution. What constructs the parser must support in a mandatory way: - Enumeration of sample fields explicitly (with aliases) or * - Implicit join of several tables (select * from A,B,C) - Explicit join of tables (inner, left, right, full join) - Filter conditions (where a = 1 and b > 100) - Subqueries (select * from (select * from A) a_alias) - Grouping by one or several fields (group by) - Sorting by one or more fields (order by) - Selection truncation (limit, offset) What can be ignored: - Complementing selections (union and union all) - CTE - Window functions Some details: - The assignment should be done in Kotlin or Java (version 21 or higher). - The assignment must have a working main() method, to demonstrate how it works - If you have any questions, feel free to write to join-ecom@lightspeedhq.com. - The completed assignment should be posted on GitHub

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 можно задавать вопросы.

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

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

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

Sometimes you want to make a complete copy of some object. Something like this: ComplexObject obj = ... ComplexObject copy = CopyUtils.deepCopy(obj); The problem is that classes in Java can be of arbitrary complexity - the number of class fields and their types are not regulated in any way. Moreover, the type system in Java is closed - elements of an array/list can be absolutely any data types, including arrays and lists. And also there are recursive data structures - when an object somewhere in its depths contains a reference to itself (or to a part of itself). You need to write a deepCopy() method that takes all these nuances into account and works on objects of arbitrary structure and size. Some details: If you have any questions, feel free to write to join-ecom@lightspeedhq.com. First of all, the method should work correctly. Speed is also important, but not as much as correctness You can only use the features of the standard J2SE library Code should be written in Java (version 21 and above) or Kotlin. The assignment must have a working main() method, to demonstrate how it works The completed assignment should be posted on GitHub P.S. I know about hacks with java.io.Serializable and java.lang.Cloneable, please don't use them Before submitting, I recommend testing the solution on a class like this: class Man { private String name; private int age; private List<String> favoriteBooks; public Man(String name, int age, List<String> favoriteBooks) { this.name = name; this.age = age; this.favoriteBooks = favoriteBooks; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List<String> getFavoriteBooks() { return favoriteBooks; } public void setFavoriteBooks(List<String> favoriteBooks) { this.favoriteBooks = favoriteBooks; } }

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