Ответ
Баг с некорректной инвалидацией кеша в мобильном приложении.
Суть: Приложение отображало устаревшие данные после их обновления на сервере, хотя API возвращало актуальные. Проблема заключалась в отсутствии стратегии инвалидации кеша.
Пример проблемного кода на Kotlin:
fun loadData() {
val cachedData = cache.get("key")
if (cachedData != null) {
showData(cachedData) // Использование устаревших данных
return // Свежие данные не запрашивались
}
// ... загрузка с сети
}
Решение и почему оно важно:
- Добавлена принудительная инвалидация кеша при пользовательских действиях, изменяющих данные (например, «pull-to-refresh»).
- Внедрена проверка версий (ETag/Last-Modified): при запросе данных отправляется хэш или метка времени текущей копии; сервер возвращает новые данные только если они изменились (статус 200), иначе — «Not Modified» (304). Это оптимизирует трафик.
Почему баг был интересен: Он проявлялся только в специфическом сценарии (после фонового обновления данных на сервере) и требовал понимания полного цикла данных: сервер → сеть → кеш → UI.