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

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

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

Стандартные вопросы по работе транзакшнал -
public class BeanA() {
private BeanB b;
}

@Transactional
public void m1(List list) {
for (Integer i : list) {
b.m2();
}
}

public class BeanB() {
@Transactional
public void m2(Integer i) {
// Добавляем запись в таблицу
}
}

#itone
Прислать задачу | Подписаться
4
IT ONE #repeat


Найти всех сотрудников, у которых общий размер начислений превышает 20
-- Persons со списком работников
-- id | name
-- ------------
-- 1 | Petya
-- 2 | Vasya
-- 3 | Kolya

-- Payments с зарплатными начислениями ежемесячно.
-- id | person_id | amount
-- -----------------------------
-- 1 | 1 | 10
-- 2 | 1 | 20
-- 3 | 3 | 15

#sql
#itone | Прислать задачу | Подписаться
1👍1
cdti #repeat

Необходимо написать функцию, которая проверяет, является ли заданная строка палиндромом.

Прислать задачу | Подписаться
😁61🔥1
Яндекс #repeat (чуть изменили описание задачи, убрали название "рога и копыта") )

Вы — backend-разработчик в интернет-магазине.
Дела идут в гору и магазин решил повысить лояльность покупателей, предоставляя им персональные скидки.
К вам обратился product owner с задачей создать простую систему лояльности,
которая предоставляет процентную скидку на корзину.
Размер скидки зависит от покупателя.
Аналитики уже определили, какие скидки должны быть предоставлены покупателям.


## Определения

Корзина - список покупок покупателя.

Покупка:
- id товара
- цена
- итоговая стоимость c учетом скидки

Скидка. Для покупателя может быть задан % скидки (целое число).


## Задача
Написать часть новой системы лояльности, которая:
- на вход получает id покупателя и корзину
- вычисляет и применяет скидки
- возвращает корзину, в которой учтены скидки. Скидка учитывается в стоимости покупки

#yandex
Прислать задачу | Подписаться
6
WB #repeat(была подобная задача, но не вб)
Есть матрица n на m. 1-суша, 0-вода. Нужно сосчитать кол-во островов.
Остров - это произвольный фрагмент суши, не соединенный с другими участками суши.
Связь по диагонали - не считается. Все, что за пределами матрицы - вода

Example 1:

Input: grid = [
["1", "1", "1", "1", "0"],
["1", "1", "0", "1", "0"],
["1", "1", "0", "0", "0"],
["0", "0", "0", "0", "0"]
]

Output: 1

Example 2:

Input: grid = [
["1", "1", "0", "0", "0"],
["1", "1", "0", "0", "0"],
["0", "0", "1", "0", "0"],
["0", "0", "0", "1", "1"]
]

Output: 3

#wilberries
Прислать задачу | Подписаться
👍11
Сбер #repeat #sql

Вывести имена клиентов, у которых на активных(status = open) счетах больше 10000
CREATE TABLE clients
(
client_id int primary key,
name varchar(100),
manager varchar(255)
);

CREATE TABLE accounts
(
account_id int primary key,
client_id int,
account_number varchar(255),
balance decimal(10, 2),
created_at date,
status varchar(10),
foreign key (client_id) references clients (client_id)
);

#sber
Прислать задачу | Подписаться
😁2
Тбанк

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


//Отработает ли CountDownLatch нужное количество раз?
public class Increment {
private static int counter1 = 0;
private static int counter2 = 0;
Lock lock = new ReentranLock();

public static void main(String[] args) throws InterruptedException {
int tasksCount = 100_000;
CountDownLatch latch = new CountDownLatch(tasksCount);
ExecutorService executor = Executors.newFixedThreadPool(100);

for (int i = 0; i < tasksCount; i++) {
executor.submit(() -> {
counter1++;
counter2++;
latch.countDown();
});
}

latch.await();
//сколько будет выведено?
System.out.println(counter1);
System.out.println(counter2);
System.exit(0);
}
}

#tbank #repeat
Прислать задачу | Подписаться
👍2😱1
Яндекс #repeat

Вы — backend-разработчик в интернет-магазине.
Дела идут в гору и магазин решил повысить лояльность покупателей, предоставляя им персональные скидки.
К вам обратился product owner с задачей создать простую систему лояльности, которая предоставляет процентную скидку на корзину.
Размер скидки зависит от покупателя.
Аналитики уже определили, какие скидки должны быть предоставлены покупателям.


## Определения

Корзина - список покупок покупателя.

Покупка:
- id товара
- цена
- итоговая стоимость c учетом скидки

## Задача
Написать часть новой системы лояльности, которая применяет скидку покупателя к корзине.
- на вход получает id покупателя и корзину
- вычисляет и применяет скидки
- возвращает корзину, в которой учтены скидки
- все расчёты в рублях, точность до копеек. Округления по математическим правилам

Есть два вида скидки (не могут прийти одновременно):
- процент от суммы корзины
- фиксированная скидка

Сумма скидки распределяется равномерно между товарами, пропорционально цене товара.

Примеры:
- скидка 50%, в корзине товары на 50р и 100р. Скидка 25р и 50р
- скидка 10р, в корзине товары на 20р и 30р. Скидка 4р и 6р
- скидка 10р, в корзине товары на 1р и 99р. Скидка 10коп и 9р 90коп

#yandex
Прислать задачу | Подписаться
3
ВК (#repeat было от какой-то другой компании)

/**
Дан массив целых чисел, повторяющихся элементов в массиве нет.
Нужно преобразовать в строку, сворачивая соседние по числовому ряду числа в диапазоны.

Input: [1,4,5,2,3,9,8,11,0,13]
Output: "0-5,8-9,11,13"
Input: [3,1,5]
Output: "1,3,5"
Input: [1,3,5]
Output: "1,3,5"

Дополнительные примеры: пустой массив, массив из одного элемента.
*/

#vk| Подписаться
3
Иннотех, втб

Объяснить, что здесь происходит (#repeat)
@Component
public class SomeServiceWithTransactional {

@Transactional
public void someMethod() {
// some logic
someMethod1();
}

@Transactional(propagation = REQUIRED_NEW)
public void someMethod1() {
// some logic
someMethod2();
}

@Transactional(propagation = REQUIRED_NEW)
private void someMethod2() {
...
}
}

#innotech | Прислать задачу | Подписаться
👍6
WB #repeat
Сделать ревью #repeat
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

import java.util.List;
import java.util.Map;

@Component
public class InterviewService {

private final ScoreRepository scoreRepository;
private final TransactionTemplate transactionTemplate;
private final InterviewScoreMLService interviewScoreMLService;
private final ObjectMapper objectMapper = new ObjectMapper();

public InterviewService(ScoreRepository scoreRepository,
TransactionTemplate transactionTemplate,
InterviewScoreMLService interviewScoreMLService) {
this.scoreRepository = scoreRepository;
this.transactionTemplate = transactionTemplate;
this.interviewScoreMLService = interviewScoreMLService;
}

/**
* Метод считает сколько очков заработал кандидат,
* сохраняет результат в базу и кидает callback об этом во внешний сервис
*/
public void process(Candidate c) {
transactionTemplate.executeWithoutResult(status -> {
Score s = interviewScoreMLService.compute(c);
String body = objectMapper.writeValueAsString(Map.of(c.getName(), s));

Mono<ResponseEntity<Void>> request = WebClient.create()
.post()
.body(BodyInserters.fromValue(body))
.retrieve()
.toBodilessEntity();

scoreRepository.saveScore(s);
});
}
}

class Candidate {
private final String name;
private final List<Integer> tasksSolvedId;

public Candidate(String name, List<Integer> tasksSolvedId) {
this.name = name;
this.tasksSolvedId = tasksSolvedId;
}

public String getName() {
return name;
}

public List<Integer> getTasksSolvedId() {
return tasksSolvedId;
}
}

class Score {
private final String name;
private final int score;

public Score(String name, int score) {
this.name = name;
this.score = score;
}

public String getName() {
return name;
}

public int getScore() {
return score;
}
}

#wilberries
Прислать задачу | Подписаться
2
WB #sql #repeat

Есть таблица "employee" в которой записи про сотрудников, которые знают языки программирования

Name Lang
Nick C#
Nick SQL
Eva Rust
Vika Kotlin
Vika SQL
.... .....

Надо написать запрос? который выберет имена сотрудников, которые знают SQL и ещё хотя бы один любой язык. Считать, что один сотрудник — одно имя

#wilberries
Прислать задачу | Подписаться
👍2
itone #repeat
/**
* Посчитать сумму элементов списка (более 1 млн. элементов),
* используя для этого 10 потоков
*/

public static long sum(List<Long> numbers) {
final int threads = 10;
List<List<Long>> subLists = split(numbers, threads);

// TODO: make it work!

return ???;
}

private static List<List<Long>> split(List<Long> numbers, int parts) {
int size = numbers.size();
int subListSize = (int) Math.ceil((double) size / parts);

List<List<Long>> result = new ArrayList<>(parts);
for (int i = 0; i < parts; i++) {
int fromIndex = i * subListSize;
if (fromIndex >= size) {
result.add(Collections.emptyList());
} else {
int toIndex = Math.min((i + 1) * subListSize, size);
List<Long> sublist = numbers.subList(fromIndex, toIndex);
result.add(sublist);
}
}
return result;
}

#itone
Прислать задачу | Подписаться
1
Иннотех #repeat #sql #innotech

Даны две таблицы:
EMPLOYEES
-EMP_ID | NUMBER PK
-SURNAME | VARCHAR
-SALARY | NUMBER
-DEPARTMENT_ID | NUMBER FK

DEPARTMENTS
-DEPARTMENT_ID | NUMBER PK
-DEPARTMENT_NAME | VARCHAR

Получить список департаментов и среднюю з/п по департаменту, где средняя з/п по департаменту больше 5000.

Ожидаемый рез-т:
DEPARTMENT_NAME AVG_SALARY
HR 8000
IT 12000

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