作者:牛客634075352号 链接:https://www.nowcoder.com/discuss/611079?source_id=discuss_experience_nctrack&channel=-1 来源:牛客网 1、最简单的就是乐观锁,抛异常让业务端重试 2、new Thread或者线程池 3、核心线程(一般等于机器核数)、最大线程、阻塞队列、线程存活时间(针对超过核心线程数的线程),存活时间单位,拒绝策略,线程生产策略 4、redis一般做缓存用,其他的可以根据具体项目使用情况说 5、看着像是分布式锁?分布式锁一般不建议用,有个很大的坑:A线程持有一个分布式锁,并且设置了4s超时时间,然后调用了一个远程服务,正好遇到接口返回慢,导致分布式锁超时失效,这时候B线程成功获取了分布式锁,然后A调完服务回来了,这时候A和B就会出现并发执行。 6、k/v(最常用的缓存键值对)、hash(复杂一点的缓存)、zset(用户评分排序)、list(先进先出队列,一般推荐MQ去实现) 7、缓存击穿就是一个数据库根本没有的值,每次访问会先读缓存,再读DB,解决方案就是放个代表空的数据,缓存雪崩就是短时间大量缓存失效导致大量请求回流DB,会把DB打挂,解决方案是失效时间随机化,然后DB加限流。 8、hashmap实现方式:数组+链表,1.8的优化:链表超过8个节点变红黑树,防止极端情况的线性遍历 9、元空间用的是本地内存,不是java堆内存,因此不存在OOM的情况,之前的永久代是JVM管的,因此会出现OOM,而且很难优化很难排查。 10、因人而异 11、题库里都有 12、3台4核8G的处理器是啥意思?没明白