Подтвердить что ты не робот

Тема интервью: что может пойти не так с этим кодом?

Простой класс калькулятора, подключенный как Spring bean в веб-приложении:

public class Calculator { 
    int result; 

    public int addTwoNumbers(int first, int second) { 
        result = first + second; 
        return result; 
    } 
} 

Что может помешать этому?

4b9b3361

Ответ 1

Многопоточные проблемы. По умолчанию Spring beans являются одноточечными.

Ответ 2

Целочисленное переполнение - еще одна проблема, если это считается.

Чтобы решить эту проблему, вы можете вернуть long вместо:

long result;
public long addTwoNumbers(int first, int second)
{
    result = (long)first + second;
    return result;
}

Будьте осторожны, просто говоря result = first + second;, поскольку два int будут добавлены, давая int (который может переполняться), который будет только тогда преобразован в long.

result = (long)first + second; эквивалентен result = ((long)first) + second; (not result = (long)(first + second);), что означает, что мы сначала конвертируем один из int в long, поэтому это будет long + int, что дает long.

Ответ 3

Этот класс не является потокобезопасным, если предположить, что это Spring singleton bean. Если два вызова потока addTwoNumbers есть вероятность, что первый поток получит результат вычисления второго потока, поэтому мы можем получить 2 + 2 = 5. Если поле результата не должно использоваться где-либо еще, оно должно быть избавлено от

public class Calculator { 
      public int addTwoNumbers(int first, int second) { 
        return first + second; 
     } 
}