Задачи с собеседований😎
155 subscribers
169 photos
16 videos
2 files
386 links
Всем привет!

Будем сюда выкладывать реальные задачи и вопросы с собеседований

@privatevoidmain - по всем вопросам

Еще больше задач с собеседований на нашем основном канале - https://t.me/+SlsR25MJs_1iYTcy
Download Telegram
BetweenExchange

Реализуйте класс CustomLinkedList, который будет работать по принципу очереди (FIFO - First In, First Out). методы push() и pop()

public class CustomLinkedList<T> {

// Push - добавление нового элемента
public void push(T data) {

}

// Pop - Удаляет и возвращает элемент из очереди
public T pop() {

}

class Node<T> {
}

Прислать задачу | Подписаться
Сбер

Задача на подсчет частоты чисел (Доп задание, отсортировать по значениям)
public static void main(String[] args) {
List<Integer> list = List.of(1, 2, 3, 1, null, 2, 1, null, 3);
System.out.println("Частоты: " + countNumberFrequency(list));
}

//Java 8
public static Map<Integer, Integer> countNumberFrequency(List<Integer> numbers) {
// todo
return null;
}

#sber
Прислать задачу | Подписаться
Сбер

Написать метод, который принимает массив целых чисел и число target и возвращает элемент, наиболее близкий к target по модулю


#sber
Прислать задачу | Подписаться
Сбер
import java.util.*;

public class Main {
public static void main(String[] args) {
System.out.println(multiply(3, 4) + ", Ожидается 12");
System.out.println(multiply(-2, 3) + ", Ожидается -6"); // Ожидается -6
System.out.println(multiply(2, -3) + ", Ожидается -6"); // Ожидается -6
System.out.println(multiply(-3, -4) + ", Ожидается 12"); // Ожидается 12
System.out.println(multiply(1, 0) + ", Ожидается 0"); // Ожидается 0
System.out.println(multiply(0, 0) + ", Ожидается 0"); // Ожидается 0
System.out.println(multiply(0, 5) + ", Ожидается 0"); // Ожидается 0
System.out.println(multiply(Integer.MAX_VALUE, 1) + ", Ожидается " + Integer.MAX_VALUE); // Проверка на максимальное значение
System.out.println(multiply(Integer.MIN_VALUE, -1) + ", Ожидается " + Integer.MIN_VALUE); // Проверка на минимальное значение
}

public static int multiply(int a, int b) {
//TODO Реализовать умножение без использования операнда умножения
return a*b; //это для компиляции


}
}

#sber
Прислать задачу | Подписаться
WB

1. Сделать ревью
2. Что будет если упадет сеть в строке "//упала сеть" (и что делать)
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
Прислать задачу | Подписаться
Иннотех, втб

Объяснить, что здесь происходит (#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 | Прислать задачу | Подписаться
WB (не точно)
/**
* Интерфейс для взаимодействия с аппаратной частью банкомата.
*/
interface Hardware {
/**
* Возвращает массив с количеством купюр по номиналам 50, 100, 500, 1000, 5000.
* Метод работает медленно и создает шум.
*
* @return массив, где каждый элемент соответствует количеству купюр определенного номинала.
* Например, [10, 20, 30, 40, 50] означает:
* - 10 купюр номиналом 50 рублей
* - 20 купюр номиналом 100 рублей
* - 30 купюр номиналом 500 рублей
* - 40 купюр номиналом 1000 рублей
* - 50 купюр номиналом 5000 рублей
*/
fun billsCounts(): IntArray

/**
* Загружает в бокс выдачи указанные купюры.
*
* @param billsCounts массив с количеством купюр по номиналам [50, 100, 500, 1000, 5000].
* Например, [0, 1, 0, 2, 0] означает:
* - 0 купюр номиналом 50 рублей
* - 1 купюру номиналом 100 рублей
* - 0 купюр номиналом 500 рублей
* - 2 купюры номиналом 1000 рублей
* - 0 купюр номиналом 5000 рублей
*/
fun giveBills(billsCounts: IntArray)
}

/**
* Класс для реализации логики работы банкомата.
* Тут нужно писать код
*/
class MyATM {
/**
* Аппаратная часть банкомата.
*/
var hardware: Hardware? = null
val nominals = [50, 100, 500, 1000, 5000]

fun calcTotal(): Int

fun giveMoney(req: OperationRequest): OperationResponse


data class OperationRequest(val sum: Int)

data class OperationResponse(val status: OperationStatus)
}

#wilberries
Прислать задачу | Подписаться
MerlionTech

Что будет выведено?
public class ExceptionTask {
public static void main(String[] args) {
testException();
}

public static void testException() {
try {
throw new RuntimeException("Main Exception");
} catch (RuntimeException e) {
System.out.println("RuntimeException: " + e.getMessage());
} catch (Exception e) {
System.out.println("Exception: " + e.getMessage());
} finally {
System.out.println("Inside finally");
}
}
}

Прислать задачу | Подписаться
Сбер #sber

сделать ревью

class UserService {

private UserRepository repo = new UserRepository();
private RegionService regionService;

public UserService(final ApplicationContext appCtx) {
regionService = appCtx.getBean("regionService", RegionService.class);
}

public void processNewUsers(final List<User> users, String regionName) {

users = createUsers(users);

users.stream()
.foreach(u -> regionService.updateRegionLink(u.getId(), regionName));
}

@Transactional
public List<User> createUsers(final List<User> users) {
return users.stream()
.map(u -> repo.saveUser(u))
.collect(Collectors.toList());
}

private User getUser(final int userId) {
return repo.getUserById(userId);
}
}

Прислать задачу | Подписаться
Газпромбанк

Сделать код-ревью

public class Parser {

File file;

public synchronized void setFile(File file) {
this.file = file;
}

public synchronized File getFile() {
return file;
}

public String getContent() throws IOException {
InputStream i = new FileInputStream(file);
String output = "";
int data;
while ((data = i.read()) > 0) {
output += (char) data;
}
return output;
}

public String getContentWithoutUnicode() throws IOException {
InputStream i = new FileInputStream(file);
String output = "";
int data;
while ((data = i.read()) > 0) {
if (data < 0x80) {
output += (char) data;
}
}
return output;
}

public void saveContent(String content) throws IOException {
OutputStream o = new FileOutputStream(file);
for (int i = 0; i < content.length(); i +=1) {
o.write(content.charAt(i));
}
}
}

#gazprombank
Прислать задачу | Подписаться
Сбер

Ревью и объяснение
@Component
class A {

@Autowired
private SomeRepository repo;

@Autowired
private MessageService mss;

@Autowired
private MessageRepository mssRepo;

@Transactional
void call(String id) {
Optional<SomeEntity> entOpt = repo.findById(id)
if (!entOpt.isEmpty()) {
SomeEntity ent = entOpt.get();
ent.setStatus("catched");
repo.save(ent);
}
String msgId = mss.sendBroadcast(id+ " catched");
mssRepo.save(new MessageEntity(msgId));
}
}

#sber
Прислать задачу | Подписаться
от подписчика (скорее всего не с собеса)

Решить задачу, чтобы получилось как на скрине
🤣1
WB #kotlin
@Component
class InterviewService(
private val scoreRepository: ScoreRepository,
private val transactionTemplate: TransactionTemplate,
private val interviewScoreMLService: InterviewScoreMLService,
) {
private val objectMapper = ObjectMapper()

/**
* Метод считает сколько очков заработал кандидат,
* сохраняет результат в базу и кидает callback об этом во внешний сервис
*/
fun process(c: Candidate) {
transactionTemplate.executeWithoutResult {
val s: Score = interviewScoreMLService.compute(c)

val request: Mono<ResponseEntity<Void>> = WebClient.create()
.post()

.body(BodyInserts.fromValue(objectMapper.writeValueAsString(c.name to s)))
.retrieve()
.toBodilessEntity()

scoreRepository.saveScore(s)
}
}
}

data class Candidate(
val name: String,
val tasksSolvedId: List<Int>,
)

data class Score(
val name: String,
val score: Int,
)

#wilberries
Прислать задачу | Подписаться
Блокировка телеграма и как она повлияла на мой канал 😏

После начала блокировки телеграм в России начался спад активности на моем канале 😱
Максимум был 1 апреля - 4149 подписчиков, а сегодня через 5 дней - 4137. Теряю по два бойца ежедневно.

Раньше канал всегда рос, даже когда задачи не публиковались по две недели.

Отписки были и раньше, но их всегда перекрывал рост.
Теперь приток сильно просел🫡
x5тех

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

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

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

public interface Category {

Long getId();

String getName();

}

public interface Product {

Long getId();

String getName();

List<Category> getCategories();

}


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

#x5
Прислать задачу | Подписаться
1
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
Прислать задачу | Подписаться
Яндекс

# Нужно посчитать скалярное произведение двух векторов, заданных в RLE‑виде: список пар (value, count).
#
# Пример из условия:
# [(1, 3)] — это вектор [1, 1, 1].
# [(1, 2), (10, 1)] — это [1, 1, 10].

#yandex
Прислать задачу | Подписаться
Дижитал Сектор Поддержка


Есть сервис A и сервис авторизации B.
Чтобы вытащить аккаунты из сервиса B по REST используется класс DataService. У него есть 3 метода:
1. dataService.getCount() - возвращает кол-во аккаунтов (int)
2. dataService.getPersons(int from, int to) - возвращает упорядоченные по индексу аккаунты (Person) из сервиса B от from до to.
3. dataService.getAllPersons() - возвращает упорядоченные по индексу все аккаунты из сервиса
(Эти методы изменять нельзя)
Известно, что некоторые аккаунты имеют дополнительную нагрузочную информацию (Person.description), из-за чего ответ сервиса блокируется прокси-сервисом gateway по ограничению для тела ответа.
Реализовать получение всех валидных Persons, максимально быстро

Прислать задачу | Подписаться
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
Прислать задачу | Подписаться
Иннотех #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

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