Тех собес на middle-senior Java Developer в ****

Доступно с премиум-подпиской

Оформите премиум-подписку, чтобы получить доступ к:

  • Фильтрации по компаниям
  • Названиям компаний в интервью
  • Видеозаписям собеседований в категории Java Developer

Посмотреть видео в категории

(2025-03-10)

Был один лайнкондинг.

Задача 1. Провести review.

/*
* Сервис тарификации вознаграждений сотрудникам за дополнительную работу.
*
* Каждый сотрудник может выполнять что-либо помимо основной работы: проводить лекции, выступать на конференциях и т.д.
* Такие действия оплачиваются согласно тарифам, с учетом заслуг сотрудника (личного бонусного коэффициента).
* Оплата проходит через внешний сервис, вызываемый по REST.
*/
@Service
public class RewardBillingService {
    @Autowired
    private RewardRepository rewardRepository;

    @Autowired
    private TariffRepository tariffRepository;

    @Autowired
    private RewardRestClient rewardRestClient;

    @Transactional
    public void handleRewards(List<Employee> employees) {
        for (Employee employee : employees) {
            List<Reward> rewards = rewardRepository.findByEmployeeId(employee.getId());
            for (Reward reward : rewards) {
                if (List.of("speech", "lesson", "help").contains(reward.getType())) {
                    Tariff tariff = tariffRepository.findByTypeAndDate(reward.getType(), new Date()).get();

                    double amount = (1 + employee.getBonusCoefficient()) * tariff.getAmount();

                    rewardRestClient.payReward(employee.getId(), amount);
                    System.out.println("Отправлен платёж");

                    reward.setStatus("paid");
                    rewardRepository.save(reward);
                }
            }
        }
    }
}
- Задача 2. Написать SQL-запросы.
-- Выбери профили, у которых больше 10 постов
-- Выбери все посты, опубликованные пользователями, у которых количество подписчиков больше 500

CREATE TABLE profile (
    id BIGSERIAL PRIMARY KEY,
    nickname VARCHAR,
    registered_at TIMESTAMP
);

CREATE TABLE post (
    id BIGSERIAL PRIMARY KEY,
    owner_id BIGINT REFERENCES profile (id),
    body TEXT,
    inserted_at TIMESTAMP,
    likes_count INT -- кол-во лайков
);

CREATE TABLE subscription_count (
    profile_id BIGINT REFERENCES profile (id) UNIQUE,
    followers_count INT, -- кол-во подписчиков
    following_count INT -- кол-во подписок
);

- Задача 3. Что выведет программа?
String a = "123";
String b = "123";
String c = new String("123");

System.out.println(a == b)
System.out.println(a == c);
System.out.println(a.equals(b));
System.out.println(a.equals(c));

- Задача 4. Провести review.
@Service
public class ConfirmDocService {
    @Autowired
    ConfirmDocMapper confirmDocMapper;

    @Autowired
    ConfirmDocRepository confirmDocRepository;

    @Autowired
    ConfirmDocStateMachineService confirmDocStateMachineService;

    @Autowired
    StateMachineFactory<DocStatusState, DocStatusEvent> confirmDocStateMachineFactory;

    @Transactional
    public ConfirmDocDto createConfirmDoc(ConfirmDocDto confirm DocDto) {
        ConfirmDoc confirmDoc = confirmDocMapper.toEntity(confirmDocDto);
        StateMachine <DocStatusState, DocStatusEvent> sm = confirmDocStateMachineFactory.getStateMachine();
        sm.getExtendedState().getVariables().put("CONFIRM_DOC_TO_BE_SAVED", confirmDoc);
        sm.start();
        confirmDoc.setDocStatusId(sm.getState().getId());

        ConfirmDoc savedConfirmDoc = saveOrUpdate(confirmDoc);

        return confirmDocMapper.toDto(savedConfirmDoc);
    }

    @Transactional
    public ConfirmDoc saveOrUpdate(ConfirmDoc confirmDoc) {
        if (confirmDocRepository.findAll().stream().filter(it -> it.id == confirmDoc.Id).count() == 1) {
            ConfirmDoc confirmDocFromDb = confirmDocRepository.findById(confirmDoc.Id);
            ConfirmDoc updConfirmDoc = confirmDocMapper.update(confirmDocFromDb, confirmDoc);
            return confirmDocRepository.save(confirmDoc);
        } else {
            return confirmDocRepository.save(confirmDoc);
        }
    }
}

- Задача 5. Какие проблемы в коде видишь? Можно ли как-то поправить?
import java.util.concurrent.CountDownLatch; 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 
 
public class Increment { 
    private static int counter1 = 0; 
    private static int counter2 = 0; 
 
    public static void main(String[] args) throws InterruptedException { 
        int tasksCount = 100_000; 
        CountDownLatch latch = new CountDownLatch(tasksCount); 
        ExecutorService executor = Executors.newFixedThreadPool(10); 
 
        for (int i = 0; i < tasksCount; i++) { 
            executor.submit(() -> { 
                counter1++; 
                counter2++; 
                latch.countDown(); 
            }); 
        } 
 
        latch.await(); 
        executor.shutdown(); 
 
        System.out.println(counter1); 
        System.out.println(counter2); 
        System.exit(0); 
    } 
}