Forwarded from Реальные задачи с собеседований | Java
WB🔥
#wilberries
Прислать задачу | Подписаться
Реализовать функцию решения уравнения вида ax^2 + bx + c = 0.
Результат работы вывести в консоль
public void solve (double a, double b, double c)
#wilberries
Прислать задачу | Подписаться
Forwarded from Реальные задачи с собеседований | Java
Uzum
Провести код ревью, назвать проблемы. Потом написать решение одной из проблем
Прислать задачу | Подписаться
Провести код ревью, назвать проблемы. Потом написать решение одной из проблем
@Slf4j
public class SyncServiceImpl implements SyncService {
@Autowired
private SellerRestClient restClient;
@Autowired
private ShopRepository shopRepository;
@Autowired
private ProductRepository productRepository;
@Autowired
private KafkaTemplate<String, ProductDto> kafkaTemplate;
@Schedule(cron = "* * * * * * ") // 1 sec
@Override
public void syncShops() {
for (Shop shop : shopRepository.findAll()) {
try {
syncShop(shop);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Transactional
@Override
public void syncShop(Shop shop) {
log.info("Syncing shop");
shopRepository.lockShop(shop.getId()); // @Query(native = true, value = ""SELECT * FROM shop WHERE id = ? FOR UPDATE"")
var products = shop.getNotSynchedProducts();
products.parallelStream()
.forEach(product -> {
log.info("Syncing product");
var seller = product.getSeller();
var sellerDetails = restClient.getLegalDetails(seller.getInn());
var dto = new ProductDto();
dto.setProduct(product);
dto.setSellerDetails(sellerDetails);
kafkaTemplate.send("product_details", "product", dto); // topic, key, value
product.setSynced(true);
productRepository.save(product);
});
shop.setSynced(true);
}
}
Прислать задачу | Подписаться
Forwarded from Реальные задачи с собеседований | Java
Яндекс
#yandex
Прислать задачу | Подписаться
/*
Реализуйте простую pub-sub систему для обмена событиями между компонентами с возможностью отписки через токены.
Требования:
- Подписка на события должна возвращать уникальный токен
- Отписка происходит по токену
- События должны доставляться асинхронно
- Система должна быть потокобезопасной.
*/
import java.util.function.Consumer;
class OrderCreated {
final String orderId;
OrderCreated(String orderId) {
this.orderId = orderId;
}
}
// Токен подписки - можно использовать любую реализацию
interface SubscriptionToken {
}
interface EventBus extends AutoCloseable {
SubscriptionToken subscribe(Consumer<OrderCreated> handler);
void unsubscribe(SubscriptionToken token);
void publish(OrderCreated event);
}
@Test
public void testEventDeliveryWithToken() throws InterruptedException {
EventBus eventBus = new EventBusImpl();
AtomicInteger orderCount = new AtomicInteger();
AtomicReference<String> lastOrderId = new AtomicReference<>();
SubscriptionToken token = eventBus.subscribe(order -> {
orderCount.incrementAndGet();
lastOrderId.set(order.orderId);
});
eventBus.publish(new OrderCreated("ORDER-123"));
Thread.sleep(100);
assertEquals(1, orderCount.get());
assertEquals("ORDER-123", lastOrderId.get());
}
#yandex
Прислать задачу | Подписаться
Forwarded from Реальные задачи с собеседований | Java
Сбер
#sber
Прислать задачу | Подписаться
/*
* Дано дерево папок. Вывести названия папок рекурсивно
* с отступами (как в IDE), где каждый уровень вложенности
* добавляет отступ.
*
* Пример вывода:
* src
* main
* java
* service
* repository
* resources
* test
*/
public static void printTree(File dir, int depth) {
// TODO
}
#sber
Прислать задачу | Подписаться
Forwarded from Реальные задачи с собеседований | Java
Forwarded from Реальные задачи с собеседований | Java
Сбер #sql
#sber
Прислать задачу | Подписаться
-- Найти имена, которые встречаются более одного раза
-- Таблица: users(id, name, ...)
#sber
Прислать задачу | Подписаться
Forwarded from Реальные задачи с собеседований | Java
cdti
Прислать задачу | Подписаться
Необходимо перенести все нулевые элементы в конец массива, сохраняя относительный порядок элементов, не являющихся нулем. Решение должно производится на месте, без использования дополнительного массива, а также решение должно иметь минимальную сложность по времени и пространству.
Input: [0, 1, 0, 3, 12]
Output: [1, 3, 12, 0, 0]
Прислать задачу | Подписаться
Forwarded from Реальные задачи с собеседований | Java
Альфа банк
#alfabank
Прислать задачу | Подписаться
import lombok.Data;
@Data
class User {
private String username;
private Integer age;
private List<Group> groups;
}
@Data
class Group {
private String name;
private String description;
}
public class SomeConsumer {
// получить список пользователей которые состоят в группе, с наименованием начинающемся на "X"
public List<User> consume(Stream<User> usersStream) {
}
}
#alfabank
Прислать задачу | Подписаться
Forwarded from Реальные задачи с собеседований | Java
Сбер
#sber
Прислать задачу | Подписаться
// 1. [Java Memory Model] - сколько объектов и в какой области памяти создано?
public void foo() {
Object[] array = {new Object(), new Object()};
log.info("");
}
public class Operator {
private String id;
private String fio;
}
Set<Operator> operators = new HashSet<>();
operators.add(new Operator("1", "Иванов"));
operators.add(new Operator("1", "Иванов"));
#sber
Прислать задачу | Подписаться
Forwarded from Реальные задачи с собеседований | Java
сбер #sql
#sber
Прислать задачу | Подписаться
// 6. Написать запрос, выводящий список клиентов у которых сумма значений ордеров > 100.
// [client]
// id
// fio
// [deal]
// id
// client_id
// amount
#sber
Прислать задачу | Подписаться
Forwarded from Реальные задачи с собеседований | Java
сбер #sql
#sber
Прислать задачу | Подписаться
// 6. Написать запрос, выводящий список клиентов у которых сумма значений ордеров > 100.
// [client]
// id
// fio
// [deal]
// id
// client_id
// amount
#sber
Прислать задачу | Подписаться