Тех собес на middle-senior Java Разработчик в ****

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

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

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

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

(2024-07-06)

Этап 1: Код-ревью (Java Spring)

import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;

/**
 * сервис тарификации вознаграждений сотрудникам за дополнительную работу.
 *
 * Каждый сотрудник может выполнять что-либо помимо основной работы - проводить лекции, выступать на конференциях и т.д.
 * Такие действия оплачиваются согласно тарифам, с учетом заслуг сотрудника (личного бонусного коэффициента).
 * Оплата проходит через внешний сервис, вызываемый по 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 запрос

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 -- кол-во подписок
);
  • Выбери профили, у которых больше 10 постов.

Этап 3: Задача по строкам (Java)

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: Задача по многопоточности (Java)

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);
    }
}
  • Проанализировать код, выявить проблему и предсказать вывод.

Вложения

42_379_photo.jpg

42_380_photo.jpg

42_381_photo.jpg