Блог пользователя mmaxio

Автор mmaxio, 11 лет назад, По-русски

Сегодня я обнаружил довольно забавную вещь, связанную со вкладкой "Запуск".

Будем тестировать следующий код на Java 7:

public class CurrentTime {
	public static void main(String[] args){
		System.out.println(System.currentTimeMillis());
	}
}

Запустив его сколько угодно раз, на выходе мы всегда будем получать одно и то же число A, даже если между запусками обновлять страницу. Если в конец кода добавить пробел, то на выходе всегда будет другое число B.

Но если же стереть этот пробел, то неожиданно на выходе опять появится наше знакомое число A!

Изменение ввода дает тот же эффект, что и добавление пробела в код. На ссылках http://mirror.codeforces.com/contest/1/customtest и http://mirror.codeforces.com/contest/327/customtest результаты абсолютно одинаковые. В разных браузерах, однако, получаются разные числа.

Мораль такова: если вы хотите, чтобы ваш код действительно тестировался каждый раз, когда вы нажимаете на кнопку "Запустить", добавляйте пробел в конец кода.

Впрочем, все вышеописанное может оказаться багом, проявляющемся только на моем компьютере, поэтому предлагаю всем желающим повторить этот эксперимент.

  • Проголосовать: нравится
  • +16
  • Проголосовать: не нравится

»
11 лет назад, # |
  Проголосовать: нравится +14 Проголосовать: не нравится

Не, где-то же писали, что результаты кешируются и так и должно быть. У меня также на других языках

»
11 лет назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

А если отправить код с пробелом, получить число X. Потом отправить тот же код с пробелом — будет опять X? UPD: Да

»
11 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Это не баг, это кэш. Зачем один и тот же код запускать еще раз если он точно такой же и ввод точно такой же?

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Посылка 3553789 и 3555423. Разница незначительна. Первая работает 1609 мс, вторая 1045 мс. Причина видимо в разной загруженности сервера. Если хочется перепроверить время, то обязательно что-то менять в коде?

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +36 Проголосовать: не нравится

    Почему бы тогда не написать "Вы уже запускали точно такой же код", вместо "Исполняется..." в окошке вывода? Просто при тестировании на TL может сильно не повезти с первым запуском, а из-за постоянного времени работы можно подумать, что решение быстрое и спокойно его послать.