Назад к вопросам
Senior
6
Расскажите о сложном баге или сложной доработке на последнем проекте
Компании, где спрашивали
Сбер лизинг
Ответ от нейросети
sobes.tech AI
На последнем проекте я столкнулся с багом, связанным с многопоточностью в Java-приложении, который проявлялся при высокой нагрузке и приводил к состоянию гонки и некорректным данным.
Проблема заключалась в том, что несколько потоков одновременно изменяли общий ресурс без должной синхронизации. Для решения я:
- Проанализировал стек вызовов и логи, чтобы локализовать место возникновения гонки.
- Внёс изменения, используя
synchronizedблоки иReentrantLockдля контроля доступа к общим данным. - Провёл нагрузочное тестирование, чтобы убедиться, что баг устранён и производительность не пострадала.
Пример использования ReentrantLock:
import java.util.concurrent.locks.ReentrantLock;
public class Counter {
private int count = 0;
private final ReentrantLock lock = new ReentrantLock();
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
public int getCount() {
return count;
}
}
Этот подход позволил устранить состояние гонки и повысить стабильность приложения.