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

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

Прислать задачи, реклама - @privatevoidmain
Download Telegram
Как вам 2026 в плане поиска работы? Ситуация на рынке лучше, чем в конце 2025?
Anonymous Poll
46%
Посмотреть результат
6%
Лучше
11%
Так же
24%
Хуже
14%
.
😱21
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
Прислать задачу | Подписаться
👍41
Сбер
Сбер

// 1. Добавить недостающие аннотации

public class OrganizationController {


private final OrganizationService organizationService

public void create(List<Organization> organizations) {
organizationService.create(organizations);
}
}

public interface OrganizationService {

void create(List<Organization> organizations);
}

public class OrganizationServiceImpl implements OrganizationService {

@Override
public void create(List<Organization> organizations) {
// Валидация атрибутов организаций
validate(organizations);

// Маппинг организаций на сущности
Set<OrganizationEntity> entities = map(organizations);

// Сохранение организаций в БД
save(entities);
}

private void validate(List<Organization> organizations) {
// 2. Проверить что список организаций не пустой

// 3. Проверить что нет организаций без счетов

// 4. Посчитать общее количество счетов у всех организаций
// и проверить что количество счетов не больше 10

// 5. Для каждого счета проверить что
// - счет не пустой
// - счет содержит только цифры


private Set<OrganizationEntity> map(List<Organization> organizations) {

// 6. Удалить дубликаты счетов
// Organization(accounts=[1, 1]) -> Organization(accounts=[1])

// 7. Из списка организаций составить множество сущностей
// Organization(accounts=[1, 2]) -> [OrganizationEntity(account=1), OrganizationEntity(account=2)]

return null;
}

private void save(Set<OrganizationEntity> entities) {
}
}

@Getter
@Setter
public class Organization {

/** Счета */
private List<String> accounts;
}

@Getter
@Setter
@Entity
@Table(name = "ORGANIZATION")
@EqualsAndHashCode(of = "account")
public class OrganizationEntity {

/** Идентификатор записи */
@Id
@GeneratedValue
@Column(name = "ID")
private UUID id;

/** Счет */
@Column(name = "ACCOUNT")
private Integer account;
}

#sber
Прислать задачу | Подписаться
😁132👏1
Иннотех, втб

Объяснить, что здесь происходит (#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
Иннотех, втб #sql
Доменная модель компании ООО "Рога и копыта” представлена таблицами Department и Employee.
Необходимо вывести список сотрудников (id, name), которые получают максимальную ЗП в своем отделе.


Department
===
id
name


Employee
===
id
department_id
name
salary

#innotech | Прислать задачу | Подписаться
3👍1
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
Прислать задачу | Подписаться
1🔥11
MerlionTech

Что будет выведено?
public class ExceptionTask2 {
public static void main(String[] args) {
try {
testException2();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}

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

Прислать задачу | Подписаться
Реальные задачи с собеседований | Java
MerlionTech Что будет выведено? public class ExceptionTask2 { public static void main(String[] args) { try { testException2(); } catch (Exception e) { System.out.println(e.getMessage()); } } public…
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");
}
}
}

Прислать задачу | Подписаться
Иннотех, втб
Объяснить, что здесь происходит
@Component
public class StartService {

private static final String CEO_USER_ID = "some_id";

@Autowired
private NotificationService notificationService;

public StartService( NotificationService notificationService) {
this.notificationService.notify(CEO_USER_ID, "Service successfully started");
}
}

Прислать задачу | Подписаться
😁15
Сбер #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);
}
}

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

Задание:Опишите, как бы вы реализовали отказоустойчивую систему доставки данных из топиков Кафка в распределенное файловое хранилище?

Требования:
гарантия доставки - Exactly Once
выходной формат данных должен позволять читать сообщения (партиция, оффсет, заголовки, ключ, тело сообщения)
задержка между временем сообщения в топике и записью в хранилище не должна быть больше 20 мин
100+ топиков и динамическое подключение новых топиков
20 Тб данных с топиков в сутки
рекомендуемый минимальный размер файла в хранилище 512Мб

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

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

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
Прислать задачу | Подписаться
👍5
Сбер

Ревью и объяснение
@Service
class Some1 {

private Repo1 dao;

@Transactional
public void update(UUID id, Status st) {
dao.updateDocumentStatus(id, st);
}

public void updateUnchecked(UUID id, Status st) {
if (id != null && st != null) {
update(id, st);
}
}
}

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

Ревью и объяснение
@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
Прислать задачу | Подписаться
4👍2
от подписчика (скорее всего не с собеса)

Решить задачу, чтобы получилось как на скрине
1😁652👍1
Сбер
// Сервис определения типа мяча по ID мяча
// Известно, что:
// * Вызываемый сервис BallPropertiesService возвращает список свойств (List<BallProperty>) для одного мяча. Размер списка от 0 до 2^30.
// * Значения BallProperty.code от 0 до 9 описывают размер мяча (т.е. 0 - микроскопический, 9 - гигантский).
// * Значения BallProperty.code от 100 до 129 описывают материал мяча.
// * Значения BallProperty.code в других диапазонах существуют, но бизнес ценности в данном случае не несут.
// * Если в списке:
// - пришел проперти с кодом 7, то считаем, что мяч баскетбольный
// - пришел проперти с кодом 6, то считаем, что мяч футбольный
// - пришел проперти с кодом 5, то считаем, что мяч тенисный
// - пришел проперти с кодом 5 и еще проперти 102, то считаем, что это ядро
// - не пришло что-то из выше описанного, то считаем, что это мяч для пингпонга
// * Гарантируется, что если в списке присутствует BallProperty с кодом из какого-то диапазона, то не может
// быть в этом же списке BallProperty с другим кодом из этого диапазона (т.е. в одном списке не будет
// одновременно кодов 1 и 2)
// Что не так?

@Service
@RequiredArgsConstructor
public class BallTypeService {
private final BallPropertiesService ballPropertiesService;

public BallType getType(Long ballId) {
List<BallProperty> ballProperties = ballPropertiesService.getBallProperties(ballId);
ballProperties.sort(Comparator.comparing(BallProperty::getCode).reversed());
return resolveType(ballProperties);

}

private BallType resolveType(List<BallProperty> ballProperties) {
long propertyNum = ballProperties.get(0).getCode();
long propertyNext = ballProperties.get(1).getCode();
if (propertyNum == 102 && propertyNext == 5) {
return BallType.CANNON_BALL;
}
if (propertyNum == 7) {
return BallType.BASKET_BALL;
}
if (propertyNum == 6) {
return BallType.FOOT_BALL;
}
if (propertyNum == 5) {
return BallType.TENNIS_BALL;
}
return BallType.PING_PONG_BALL;
}
}

public enum BallType {
BASKET_BALL,
FOOT_BALL,
CANNON_BALL,
TENNIS_BALL,
PING_PONG_BALL;
}

// библиотечный код
@Data
public class BallProperty {
private Integer group;
private Integer code;
private String description;
}

public interface BallPropertiesService {
List<BallProperty> getBallProperties(Long itemId);
}

#sber
Прислать задачу | Подписаться
🤯4
Прошли 3 месяца 2026 года. Кто в этом году искал работу, как у вас дела?

❤️ - нашел работу
👍 - есть офферы, выбираю
🤔 - есть офферы, но не подходят, ищу дальше
👎 - есть собесы, офферов нет
😢 - нет ни собесов, ни офферов
🤯 - ушел/ухожу из айти
😢9651👎51🤯15🤔12👍9