ВК
#vk
Прислать задачу | Подписаться
/**
* Есть два ступенчатых графика некоторых наблюдаемых величин, заданных отсортированными списками
* координат начала ступенек (<время измерения>, <значение>). Подразумевается, что величина сохраняет
* своё значение между измерениями. До первого измерения величина равна нулю.
* Требуется построить новый график, который будет являться суммой двух представленных.
* Т.е. построить график, на котором для каждой точки (измерения) из первого и второго графика
* есть соответствующая точка.
* <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
Прислать задачу | Подписаться
💩4
This media is not supported in your browser
VIEW IN TELEGRAM
Всех с окончанием рабочей недели
#fridaymemes
#fridaymemes
😁22👏3🔥1
Сбер
#sber
Прислать задачу | Подписаться
@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
яндекс
#yandex
Прислать задачу | Подписаться
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
Прислать задачу | Подписаться
👍14❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Всех с окончанием рабочей недели
#fridaymemes
#fridaymemes
😁25👏1
Яндекс на стажера
#yandex
Прислать задачу | Подписаться
public interface WeightedRandomPicker {
void add(int value, int weight);
int getRandom();
}
Реализовать структуру, которая добавляет элемент и его вес, и с определенной вероятностью возвращает его.
То есть для элементов
(1,2,3,4) с весом (1,2,3,4)
getRandom() должен вернуть 1 с вероятностью 1/10, 2 с вероятностью 1/5, 3 с вероятностью 3/10 и 4 с вероятностью 2/5
#yandex
Прислать задачу | Подписаться
💩6😁2👍1
x5
#x5tech
Прислать задачу | Подписаться
4) UserService рефакторинг
@Service
public class UserService {
// Стандартный Spring репозиторий
private final UserRepository repo;
// Сервис email оповещений. Для отправки письма делает запрос в сторонний сервис.
private final EmailNotificationService service;
// Сервис аудита, важно чтобы он не влиял на основной flow даже если не смог сохранить информацию
private final AuditService auditService;
@Transactional
public List<User> getAll() {
return repo.findAll();
}
@Transactional
public List<User> saveAll(List<User> users) {
repo.saveAll(users);
try {
users.forEach(user -> service.notify(user));
} catch (Exception ex) {
System.out.println("Error sending email");
}
logCreateOperation(saved);
}
@Transactional()
private void logCreateOperation(List<User> users) {
auditService.log("Users created: " + users.size());
}
}
#x5tech
Прислать задачу | Подписаться
👍3😁3
x5
#x5tech
Прислать задачу | Подписаться
3) Пространственная, временная сложность
var matrix[n][n]
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < 100_000_000; k++) {
sout(matrix[i][j])
}
}
}
#x5tech
Прислать задачу | Подписаться
🤯2
x5
#x5tech
Прислать задачу | Подписаться
2) class User {
String name;
int age;
} // Из List<User> вернуть имена пользователей, которые страше 16 лет, и их имена начинаются на Я
#x5tech
Прислать задачу | Подписаться
😁13👍1
Яндекс
#yandex
Прислать задачу | Подписаться
/*
Реализуйте throttler для ограничения частоты событий от IoT устройств.
Датчики отправляют события, но нужно контролировать их частоту для экономии bandwidth.
Требования:
- Использование sliding window алгоритма
- Потокобезопасность - события приходят из разных потоков
- Очистка устаревших записей
*/
import java.time.*;
import java.util.*;
import java.util.concurrent.*;
class EventThrottler {
private final int maxEventsByDevice;
private final Duration windowDuration;
public EventThrottler(int maxEventsByDevice, Duration windowDuration) {
this.maxEventsByDevice = maxEventsByDevice;
this.windowDuration = windowDuration;
}
/**
* Проверяет, можно ли принять eventCount событий от устройства.
* Каждое устройство имеет свой независимый лимит.
*
* @param deviceId идентификатор устройства
* @param eventCount количество событий для добавления
* @return true если события приняты, false если превышен лимит
*/
public boolean shouldAcceptEvent(String deviceId, int eventCount) {
// TODO: реализуйте sliding window алгоритм
return false;
}
}
@Test
public void testBasicEventThrottling() throws InterruptedException {
EventThrottler throttler = new EventThrottler(3, Duration.ofSeconds(1));
String deviceId = "sensor-temp-01";
assertTrue(throttler.shouldAcceptEvent(deviceId, 1));
assertTrue(throttler.shouldAcceptEvent(deviceId, 2));
// 4-е событие должно быть отклонено
assertFalse(throttler.shouldAcceptEvent(deviceId, 1));
Thread.sleep(1100);
assertTrue(throttler.shouldAcceptEvent(deviceId, 1));
}
#yandex
Прислать задачу | Подписаться
🤯7💩1
Яндекс (стажировка)
#yandex
Прислать задачу | Подписаться
Дана строка.
Найти количество её непрерывных подстрок,
которые содержат все уникальные символы из этой строки хотя бы по одному разу.
#yandex
Прислать задачу | Подписаться