172 search results
在复杂的微服务架构中,排查 Bug 往往像是在做刑侦探案。而最令人绝望的 Bug,通常被称为 Heisenbug(测不准 Bug)——你重启它就好了,你打断点它就不出现了,它只在特定的并发量和特定的业务数据组合下,才会露出獠牙。本文记录了一次真实的线上 UGC(用户生成内容)违禁词系统故障排查过程。从一个看似简单的“数据修改不生效”客诉开始,顺藤摸瓜,最终竟然挖出了潜伏在系统深处、完美利用了 Java 底层机制的 4 个连环隐患。全篇硬核无水分,建议先收藏再看,如果你正在使用 HashMap 和线程池,这篇文章绝对能帮你避开几个暗雷。
不知道你有没有过这样的体验:在地铁里刷着社交软件,突然进了一个信号盲区,屏幕瞬间变成一片刺眼的空白,只剩下一个“网络连接失败”的加载圈在无情旋转。这种时候,用户往往会烦躁地直接滑掉 App。为了给用户提供无缝的体验,离线缓存(Offline Caching) 是移动端开发无法绕过的一环。但是,App 里的数据五花八门:有几 KB 的“夜间模式”开关状态,有几万条结构化的聊天记录,还有几十 MB 的视频文件……在 Android 开发中,数据也是分“轻重缓急”和“体量大小”的。 你总不能把一个 50MB 的离线视频,塞到跟“夜间模式开关”一样的地方去存储吧?现代 Android 开发为我们提供了 4 种主流的本地存储方式。今天,我们就用大白话和生活中的生动比喻,带你彻底理清它们各自的特点、适用场景,以及在 Kotlin 中如何优雅地实现它们。