文章目录
- 1,HashMap在扩容场景下,高并发请求多个线程过来,会出现什么情况?
- 2,自定义线程池corePoolSize,maximumPoolSize,workQueue,RejectedExecutionHandler这四个参数怎么配合使用的?
- 3,什么场景下适合使用cms收集器?
- 4,CMS和G1有什么区别?
- 5,jvm调优的时候有什么心得没有?
- 6,一台实例CPU使用100%,怎么查?
- 7,lock和synchronized区别?
- 8,mysql乐观锁和悲观锁?
- 9,mysql分库分表,什么时候适合分表?什么情况适合分库?
- 10,缓存穿透?
- 11,Redis solt槽的概念?
- 12,redis 分布式锁?
- 3,rpc原理?你自己能设计一个rpc吗?
- 14,主键索引和二级索引(普通索引)有什么区别?主键索引为什么比普通索引快
- 15,搜索从大局看分为哪几块?
- 16,es ,分词,排序?
- 17,项目中使用的设计模式,代理模式,反射,单例模式?
- 18,spring ioc和aop的原理,怎么实现的?
1,HashMap在扩容场景下,高并发请求多个线程过来,会出现什么情况?
- 在扩容resize方法中调用了transfer()方法,而这种方法实现的机制就是将每一个链表转化到新链表,而且链表中的位置发生反转,而这在多线程情况下是非常easy造成链表回路。从而发生get()死循环
2,自定义线程池corePoolSize,maximumPoolSize,workQueue,RejectedExecutionHandler这四个参数怎么配合使用的?
l 如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,要创建新的线程来处理被添加的任务。
2 如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。
3 如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。
4 如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。也就是:处理任务的优先级为:核心线程corePoolSize、任务队列workQueue、最大线程maximumPoolSize,如果三者都满了,使用handler处理被拒绝的任务。
当线程池中的线程数量大于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。
线程拒绝策略:
- ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出ejectedExecutionException异常。
- ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
- ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,执行后面的任务
- ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务
相关链接
3,什么场景下适合使用cms收集器?
- CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。目前很大一部分的Java应用集中在互联网站或者B/S系统的服务端上,这类应用尤其重视服务器的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。CMS收集器就非常符合这类应用的需求
4,CMS和G1有什么区别?
5,jvm调优的时候有什么心得没有?
相关链接
未完善
6,一台实例CPU使用100%,怎么查?
相关连接
jstack 生成线程信息
7,lock和synchronized区别?
8,mysql乐观锁和悲观锁?
9,mysql分库分表,什么时候适合分表?什么情况适合分库?
10,缓存穿透?
- 布隆过滤器
- 缓存null字符串,设置过期时间
- 双重检测同步锁
11,Redis solt槽的概念?
12,redis 分布式锁?
了解下ThreadLocal 用于保存某个线程共享变量
相关视频
3,rpc原理?你自己能设计一个rpc吗?
14,主键索引和二级索引(普通索引)有什么区别?主键索引为什么比普通索引快
如果不是覆盖索引,普通索引需要再查一遍聚集索引,才能拿到数据
相关答案
相关地址