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

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

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

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; } }

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

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

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

First, some facts: There is key-value storage: Redis. Java has interface java.util.Map We like Redis a lot, but using it through a separate client library in Java doesn't really appeal to us. It works, it's convenient, but it's not fun. Again, Java has a basic interface for implementing hash tables - Map. And Redis has a hash data structure. We would like to work with hashes in Redis through this base interface. That is - I have some object that implements the Map interface, I just pull its get/put/etc. methods, and the data is actually stored in Redis, not in my Java application. Then I could pass that object anywhere the Map interface is expected and everything would just work. All sorts of other thoughts: We have a lot of data and it just won't fit on a single Redis machine. It would be nice if the implementation itself could split the data across a cluster of Redis's, completely hiding details about the number of Redis instances and whatnot. Support for adding/removing Redis servers on the fly is very good. The key word is "on the fly". Redundancy of data storage in this cluster of redis is an interesting thought. Well, it's so that one redis goes down and its data doesn't go anywhere. In Java Collections Framework there are other interfaces besides Map - List, Set, SortedSet, Queue, Deque, SortedMap. Here we go. Details: It will be quite enough to make only Map[String, Integer] support. You don't need a universal solution for any data types. For List, Set, etc. it will be enough to make List[Integer] or List[String] You can use any redis-solutions: standalone redis, sentinel or redis-cluster. You don't need to write your own library to work with Redis, you can use a ready-made one (for example, jedis). You should write in Java (version 21 and above) or Kotlin. The assignment must have a working main() method, to demonstrate how it works In general - do whatever you want, as long as it works. If you have any questions, feel free to write to join-ecom@lightspeedhq.com. The completed task should be placed on GitHub

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

Высокий уровень сложности - 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. Всё, что явно не указано в условиях, остаётся на усмотрение автора решения.

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