Реальные задачи с собеседований | Java
4.54K subscribers
296 photos
62 videos
2 files
619 links
Буду сюда выкладывать реальные задачи и вопросы с собеседований, без копипаста с интернета и других каналов)

Ссылка для друга - https://t.me/+K4vJFdalwlthYTQy

Прислать задачи, реклама - @privatevoidmain
Download Telegram
x5

Необходимо реализовать сервис для работы с каталогом товаров.
Метод init вызывается один раз модератором для сохранения данных в системе (жестких требований к быстродействию нет).
После отработки метода init пользователи начинают обращаться в два других метода (высокий RPS, требуется быстрый ответ методов)


public interface Category {
Long getId();
String getName();
}

public interface Product {
Long getId();
String getName();
List<Category> getCategories();
}


public class ProductCategoryService {

/**
* Метод вызывается 1 раз,
* инициализирует сервис всеми товарами и категориями.
*/
@Override
public void init(List<Product> products, List<Category> categories) {
//TODO implement
}


/**
* Проверяет принадлежность товара к категории,
* может вызываться много раз и часто.
*
* @param productId идентификатор товара
* @param categoryId идентификатор категории
* @return {@code true} если товар принадлежит к категории,
* в остальных случаях {@code false}
*/
@Override
public boolean isProductInCategory(Long productId, Long categoryId) {
//
//TODO implement
}

/**
* Возвращает список товаров по категории.
* Товары должны быть отсортированы по имени.
* Может вызываться много раз и часто.
*
* @param categoryId идентификатор категории
* @return список товаров, принадлежащих к категории
* или пустой список,
* если к категории не принадлежит ни один товар
*/
@Override
public Collection<Product> getProductsByCategory(Long categoryId) {
//
//TODO implement
}
}

#x5tech
Прислать задачу | Подписаться
❤2👍1
Recordlinker

Write a simple tool to normalize company names that reads stream of lines (one company name per line) and outputs a stream of tab separated pairs (old name\tnormalized name)

Rules do not imply order and case insensitive

Should be lowercase

Trim unnecessary spaces and remove duplicate spaces

Filter out lines prefixed with "xx", "donotuse", "DO NOT USE"

Normalize terms:
"insurance" from "ins", "insur", "insuran", "insuranc"
"company" from "companies", "comp", "co", "corp", "company inc"

spell out year
"2006" as "two thousand six"

fix spelling
"Ameican" -> "American"
"Adminstrative" -> "Administrative"

Remove punctuation

Replace "&" with " and "

Keep only unique results

Sort by normalized names, then by original name



"ABRDN COMPANY TWO THOUSAND SIX",
"PROTECTIVE INSURANCE COMPANY",
"donotuseHULL & COMPANY INC",
"Rochdale Insurance Co.",
"Scottsdale Ins. Co. ",
"CRC- UMB CAMP (2006)",
"ABRDN CO. 2006",
"Adminstrative&Services Group",
" Great Ameican Insurance Co.",
"Fidelity & Deposit Companies",
"DO NOT USE-Less than A rated",
"ROCHDALE INSURANCE CO.",
"Fidelity Investments Institutional Services Co, Inc."

Прислать задачу | Подписаться
🤯7❤3
ВК
/**
* Есть два ступенчатых графика некоторых наблюдаемых величин, заданных отсортированными списками
* координат начала ступенек (<время измерения>, <значение>). Подразумевается, что величина сохраняет
* своё значение между измерениями. До первого измерения величина равна нулю.
* Требуется построить новый график, который будет являться суммой двух представленных.
* Т.е. построить график, на котором для каждой точки (измерения) из первого и второго графика
* есть соответствующая точка.
* <p>
* Напишите функцию, которая по двум заданным массивам измерений вернёт сумму двух представленных
* массивов.
* <p>
* Input: a={{1, 2}, {5, 1}}, b={{2, 4}, {3, 6}, {9, 7}})
* Output: {{1, 2}, {2, 6}, {3, 8}, {5, 7}, {9, 8}}
*/
public class Template12 {

public static void main(String[] args) {
var res12 = stepSumWithMemory(new int[][]{{1, 2}, {3, 6}, {5, 1}}, new int[][]{{2, 4}, {3, 6}, {9, 7}});
System.out.println(res12.stream().map(Arrays::toString).collect(Collectors.toList()));
}

public static List<int[]> stepSumWithMemory(int[][] first, int[][] second) {
// todo
}
}

#vk
Прислать задачу | Подписаться
💩2
Сбер
@Data
@AllArgsConstructor
public static class Person {

public Integer id;
public String firstName;
public String secondName;
public String lastName;
}




@Test
public void test() {
List<Person> persons = new ArrayList<>();
persons.add(new Person(1,"Ivan","Vasya","Petr"));
persons.add(new Person(2,"Ivan","Vasya","Petr"));
persons.add(new Person(3,"Ivan","Vasya","Petr"));
persons.add(new Person(4,"Ivan","Gupta","Ivan"));
persons.add(new Person(5,"Petr","Rama","Igor"));

Collection<Person> uniquePersons = unique(persons);
assert uniquePersons.size() == 3;
}

//Unique collection by combination first-second-last names
public static Collection<Person> unique(List<Person> persons){
//Реализовать
}

#sber
Прислать задачу | Подписаться
👍1😁1
яндекс

public interface UserNotificationApi {
void sendCode(String orderId, String code);
}

/**
* Постамат - автоматическая станция приёма/выдачи посылок.
* В маркете формируются заказы, и хочется добавить возможность получения через постамат.
* Запускаем MVP: небольшая аудитория пользователей, несколько постаматов в Москве.
* При заказе пользователь сможет выбрать, что хочет получить заказ в постамате.
* <p>
* В рамках задачи нужно реализовать код для MVP решения:
* - курьер привозит заказ и пробует положить его в ячейку, указывая номер заказа. Постамат сам выбирает ячейку и возвращает в ответ. Она откроется вызывающим этот метод кодом.
* - после того, как заказ положили в ячейку, пользователю отправляется СМС c кодом получения. Заказ будет ждать вечно
* - в случае любых ошибок - курьер забирает заказ назад и попробует положить заказ в ячейку на следующий день (для MVP это ок)
* - пользователь может получить заказ по коду выдачи из СМС. При вводе кода выдачи постамат должен вывести на экран текст "ваш заказ ХХХ в ячейке YYY", ячейка откроется сама.
* <p>
* Ограничения:
* - все ячейки одного размера, но их может быть разное количество, зависит от конкретного постамата
* - один заказ - одна коробка, она влезает в ячейку
* - ячейки каждого постамата пронумерованы
* - каждый постамат сам хранит своё состояние
* <p>
* Для отправки сообщения пользователю надо использовать клиент UserNotificationApi.
*/
public class PostalBox {

public ??? placeOrder(??? orderId) {
}
public ??? getOrder(??? receiveCode) {
}
}

#yandex
Прислать задачу
| Подписаться
👍12