Цифровые привычки (вроде на проект #sber )
Прислать задачу | Подписаться
@Service
public class Handler {
@Value("target.uri")
private String targetUri;
@Value("target.port")
private int port;
@Value("target.path")
private String path;
@Autowired
private RestTemplate template;
public boolean handle(Event event) {
try {
String fileContent = Files.readString(Paths.get(event.getSource()));
HttpEntity<String> request = new HttpEntity<>(fileContent);
template.postForObject(targetUri, request, String.class, port, path);
return true;
} catch (Exception exc) {
//exception
throw new RuntimeException("cannot read data");
}
}
}
Прислать задачу | Подписаться
👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤1
Сбер страхование
Какая сложность у этого цикла?
#sber
Прислать задачу | Подписаться
Какая сложность у этого цикла?
for (int i = 0; i < n; ++i) {
for (int j = 1; j < n; j *= 2) {
//something
}
}
#sber
Прислать задачу | Подписаться
👍3❤1
Яндекс
Написать без спринга и с юнитами(за час)
#yandex
Прислать задачу | Подписаться
Написать без спринга и с юнитами
/*
Вы — backend-разработчик в финтех компании.
Компания предоставляет платежные услуги и должна контролировать лимиты пользователей.
Product owner просит создать систему проверки лимитов перед проведением платежей.
## Определения
Платеж:
- id пользователя
- сумма (в рублях с копейками)
- тип операции (только списание)
- время операции
Лимиты пользователя:
- суточный лимит по сумме (за 24 часа)
- максимальный размер одной операции
История операций:
- список совершенных платежей пользователя
## Важно
Настройки лимитов пользователей и история платежей предоставляются другими компонентами системы.
Вам необходимо спроектировать контракты для получения этих данных.
Реализацию этих компонентов делать не нужно.
## Задача
Написать систему проверки лимитов, которая:
- на вход получает платеж
- проверяет лимиты
- возвращает результат проверки: можно ли провести операцию
- если нельзя, то указывает причину (какой именно лимит будет превышен)
Проведение платежа не входит в вашу задачу - другая команда займется обработкой платежей после проверки.
Ваша задача - только проверка возможности проведения платежа.
## Ограничения
В рамках данной задачи считаем, что все платежи одного пользователя происходят строго последовательно.
Во время проверки лимита не может быть проведен платеж того же пользователя.
*/
class PaymentsChecker {
public ??? checkPayment(??? payment) {
Написать систему проверки лимитов, которая:
- на вход получает платеж
- проверяет лимиты
- возвращает результат проверки: можно ли провести операцию
- если нельзя, то указывает причину (какой именно лимит будет превышен)
// TODO implement
}
}
interface PaymentsHistoryService {
// TODO any functions
}
interface UserLimitsService {
// TODO any functions
}
#yandex
Прислать задачу | Подписаться
❤1👍1
Uzum
Прислать задачу | Подписаться
Описать как такое будет работать от этапа что код написан до его выполнения на процессоре. Описать как можно данный код выполнить.
Что такое интерпретаторы? Какие бывают? Что такое JIT и GraalVM?
public class MainClass {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Прислать задачу | Подписаться
😁23🤯3🤔1💩1
Тбанк (стажировка)
#tbank
Прислать задачу | Подписаться
/*
* Дана строка s, которая содержит только цифры от 0 до 9,
* в которой не все элементы равны 0.
* Нужно переставить в ней цифры таким образом, чтобы число,
* которое представляет данная строка, было минимально возможным,
* а также чтобы в этой строке не было ведущих нулей.
*
* Число содержит ведущие нули, если число не равно нулю,
* но при этом в начале числа стоит цифра 0.
* Так, например, числа 01, 0303 содержат ведущие нули,
* тогда как 0, 30000 нет.
*
* Входные данные:
* Строка s, где 1 <= |s| <= 9
* Гарантируется, что в строке есть элемент, отличный от 0.
*
* Выходные данные:
* Строка — минимально возможное число без ведущих нулей.
*
* Примеры:
* "682902" -> "202689"
* "01" -> "10"
*/
public static String solve(String s) {
// TODO
}
#tbank
Прислать задачу | Подписаться
🤯14❤1
Тбанк (стажировка)
#tbank
Прислать задачу | Подписаться
/*
* Дана строка s, состоящая только из латинских строчных букв.
* Назовем строку хорошей, если в ней в качестве подстроки
* будут встречаться как строка "tbank", так и строка "study".
*
* Найти минимальное количество символов нужно поменять в строке,
* чтобы получившаяся строка стала хорошей.
*
* Входные данные:
* Строка s, где 10 <= |s| <= 10^5
* Гарантировано, что строка содержит только строчные буквы латинского алфавита.
*
* Выходные данные:
* Одно число — минимальное количество символов нужно заменить
* в старой строке так, чтобы встречались как подстрока "tbank", так и "study".
*
* Примеры:
* "tbankstudy" -> 0 (уже содержит обе подстроки)
* "studtbankk" -> 5 (нужно поменять 5 символов)
*/
public static int solve(String s) {
// TODO
}
#tbank
Прислать задачу | Подписаться
❤3
райф
@Service
class A {
@Autowired
private B b;
// исходный вызов приходит сюда
@Transactional
public void doA() {
// some work with BD A
try {
b.doB();
} catch (Exception ex) {
// just log
}
}
}
@Service
class B {
@Transactional
public void doB() {
// some work with DB
if (true) { // some operation with exception
throw new IllegalStateException();
}
}
}
// Вопрос: Какие изменения окажутся в БД:
// 1. A and B
// 2. A
// 3. B
// 4. nothing
@Service
class A {
@Autowired
private B b;
// исходный вызов приходит сюда
@Transactional
public void doA() {
// some work with BD A
try {
b.doB();
} catch (Exception ex) {
// just log
}
}
}
@Service
class B {
@Transactional
public void doB() {
// some work with DB
if (true) { // some operation with exception
throw new IllegalStateException();
}
}
}
// Вопрос: Какие изменения окажутся в БД:
// 1. A and B
// 2. A
// 3. B
// 4. nothing
👍3❤1
Сбер
#sber
Прислать задачу | Подписаться
Сделать удаление элементов из списка, начиная с 3 повторений
// Input: ['A', 'B', 'A', 'B', 'A', 'B', 'C', 'C', 'D', 'C', 'C']
// Output: [A, B, A, B, C, C, D]
List<Character> removeDuplicates(List<Character> elements);
#sber
Прислать задачу | Подписаться
👍1
Forwarded from RR | Бегущий по легаси
Купил Claude Max за $100,что дальше? 👀
Работадатель оплачивает подписку на ИИ) Пока взял claude max 5x.
Поделитесь в комментариях самым полезным инсайтом или приемом работы с ИИ, который реально помог в работе.
Неочевидные фишки, удачные промпты, что прописали claude.md — всё интересно
Работадатель оплачивает подписку на ИИ) Пока взял claude max 5x.
Поделитесь в комментариях самым полезным инсайтом или приемом работы с ИИ, который реально помог в работе.
Неочевидные фишки, удачные промпты, что прописали claude.md — всё интересно
😁9👍2❤1
Всем привет! был в отпуске🌴
задачи скоро подъедут💻
задачи скоро подъедут
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29❤1
Яндекс
#yandex
Прислать задачу | Подписаться
/**
Постамат - автоматическая станция приёма/выдачи посылок.
В маркете формируются заказы, и хочется добавить возможность получения через постамат.
Запускаем MVP: небольшая аудитория пользователей, несколько постаматов в Москве.
При заказе пользователь сможет выбрать, что хочет получить заказ в постамате.
<p>
В рамках задачи нужно реализовать код для MVP решения:
курьер привозит заказ и пробует положить его в ячейку, указывая номер заказа. Постамат сам выбирает ячейку и возвращает в ответ. Она откроется вызывающим этот метод кодом.
после того, как заказ положили в ячейку, пользователю отправляется СМС c кодом получения. Заказ будет ждать вечно
-
<p>
пользователь может получить заказ по коду выдачи из СМС. При вводе кода выдачи постамат должен вывести на экран текст "ваш заказ ХХХ в ячейке YYY", ячейка откроется сама.
<p>
Ограничения:
все ячейки одного размера, но их может быть разное количество, зависит от конкретного постамата
один заказ - одна коробка, она влезает в ячейку
ячейки каждого постамата пронумерованы
каждый постамат сам хранит своё состояние
<p>
Для отправки сообщения пользователю надо использовать клиент UserNotificationApi.*/
class PostalBox {
private final UserNotificationApi notificationApi;
public int placeOrder(Long orderId) {
}
public getOrder(Integer receiveCode) {
}
/**
Синхронный клиент, вызывающий postalbox.notify.market.yandex.net
Реализацию интерфейса описывать не нужно.*/
interface UserNotificationApi {
// нужно описать метод(ы) для отправки сообщения с кодом выдачи
boolean sendNotification(Long orderId, Integer code);
}
#yandex
Прислать задачу | Подписаться
💩7👍4❤1
Сбер
#sber
Прислать задачу | Подписаться
// Input: ['A', 'B', 'A', 'B', 'A', 'B', 'C', 'C', 'D', 'C', 'C']
// Output: [A, B, A, B, C, C, D]
//Удаление элементов из списка, начиная с 3 повторения
#sber
Прислать задачу | Подписаться
❤1👍1
Uzum
Что выведет код?
Запустится ли он?
Что такое CountDownLatch?
Как решить проблему в этом коде? Предложить несколько вариантов и реализовать каждый.
Прислать задачу | Подписаться
Что выведет код?
Запустится ли он?
Что такое CountDownLatch?
Как решить проблему в этом коде? Предложить несколько вариантов и реализовать каждый.
public class Application {
private static int counter1 = 0;
private static int counter2 = 0;
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(100_000);
ExecutorService executorService = Executors.newFixedThreadPool(100);
for (int i = 0; i < 100_000; i++) {
executorService.submit(() -> {
counter1++;
counter2++;
});
countDownLatch.countDown();
}
countDownLatch.await();
System.out.println(counter1);
System.out.println(counter2);
}
}
Прислать задачу | Подписаться
❤3👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Всех с окончанием рабочей недели)
#fridaymemes
#fridaymemes
❤26😁22
Uzum
Какие проблемы тут возникнут если этот блок вызовет 2 человека одновременно?
Прислать задачу | Подписаться
Какие проблемы тут возникнут если этот блок вызовет 2 человека одновременно?
@Transactional(isolation = Isolation.REPEATABLE_READ)
{
var product = productDao.findById(id);
var newPrice = product.getPrice - 100; //вычисляется очень долго (сложная логика)
product.setPrice(newPrice);
productDao.save(product);
}
Прислать задачу | Подписаться
❤1👍1
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);
}
}
Прислать задачу | Подписаться
❤2👍1
Яндекс
#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
Прислать задачу | Подписаться
💩15❤1👍1
Сбер
#sber
Прислать задачу | Подписаться
/*
* Дано дерево папок. Вывести названия папок рекурсивно
* с отступами (как в IDE), где каждый уровень вложенности
* добавляет отступ.
*
* Пример вывода:
* src
* main
* java
* service
* repository
* resources
* test
*/
public static void printTree(File dir, int depth) {
// TODO
}
#sber
Прислать задачу | Подписаться
👍1