暑假学习第一天

发布时间:2026/7/11 1:27:59

暑假学习第一天 今天早上先啃了 Redis 的三个经典问题。缓存穿透请求打过来Redis 里没有就直接砸到数据库上。要是有人故意用大量不存在的数据来刷数据库压力就很大查询变慢甚至可能崩掉。最简单的方案就是先去 Redis 里查有就返回没有再去数据库查数据库有的话写回 Redis没有就缓存一个空值这样后续同样的恶意请求就不会再穿透到数据库了。第二种方案是布隆过滤器底层是 bit 数组和哈希通过 0/1 来判断数据存不存在。如果判断不存在那就一定不存在可以直接返回空如果判断存在实际可能误判所以“没有就是没有有不一定有”这是要留意的点。缓存雪崩大量缓存的 key 在同一时间过期请求一瞬间全涌到数据库。一个有效的办法是给每个 key 的过期时间加上随机值让它们错开失效避免集体过期。缓存击穿某个热点 key 突然过期同时又来了海量请求就会直接击穿到数据库。两个方案第一个用互斥锁第一个请求进来时加锁去查数据库其他请求就排队等着锁可以用 Redis 的 setnx大概就是“不存在才能设成功”那类指令来实现存在锁的话就 sleep 一会儿再重试没锁的抢到锁就去查库然后回写缓存。第二个是逻辑过期这个今天还没完全搞明白明天再继续琢磨。课上复习了 SSM 和 SpringBoot。我现在差不多能分清它们了SpringBoot 相当于把 Spring、SpringMVC 那套都给你自动配好了MyBatis 下个 starter 就差不多能跑自己写个 BootApplication 启动类就行。Spring 像个大容器管着所有带注解的类和方法SpringMVC 主要是和前端交互那层底层还是 jsp、servlet 那一套这两块的细节我还没来得及深入看。下午学了个建造者模式感觉就是链式调用的写法。不写一堆 set 方法了用内部 Builder外部类通过return new Builder()链式设值最后 build。好处是对象一旦构建出来里面的数据就定死了不容易被乱改。晚上刷了两道哈希表的题。两数之和就是建个 HashMap一次遍历用 target 减当前值看 map 里有没有有就直接返回。第二道有点意思是用MapString, ListString把每个字符串排序后作为 key原始字符串加到对应的列表里。先排序再判断 map 里有没有这个 key有就 put 进去没有就 new 一个列表。这样就能把字母异位词归到一组了。

相关新闻