java基础知识面试
文章平均质量分 89
fxh13579
这个作者很懒,什么都没留下…
展开
-
Java线程的5种状态及切换(透彻讲解)
Java中的线程的生命周期大体可分为5种状态。1. 新建(NEW):新创建了一个线程对象。2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。3. 运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(t转载 2018-01-16 16:31:42 · 232 阅读 · 0 评论 -
FutureTask底层原理分析
FutureTask实现了接口Future,同Future一样,代表异步计算的结果。当然,FutureTask除了实现Future接口之外,还实现了Runnable接口,所以,FutureTask既可以由Executor来调度执行,也可以由调度线程调用FutureTask.run()直接执行。FutureTask状态根据FutureTask的run方法是否被执行以及是否被执行完成,FutureTa转载 2018-01-17 14:04:06 · 493 阅读 · 0 评论 -
缓存雪崩和缓存击穿的场景和解决方案
缓存穿透什么是缓存穿透?一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。如果key对应的value是一定不存在的,并且对该key并发请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。 如何避免?1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。2:对一定不存在的key进行过滤。转载 2018-01-18 11:07:46 · 878 阅读 · 0 评论 -
JVM面试题
1、你知道哪些或者你们线上使⽤什么GC策略?它有什么优势,适⽤于什么场景? 参考 触发JVM进行Full GC的情况及应对策略。 https://blog.csdn.net/chenleixing/article/details/46706039/ 2、Java类加载器包括⼏种?它们之间的⽗⼦关系是怎么样的?双亲委派机制是什么意思?有什么好处? 启动Bootst...转载 2018-07-31 19:32:15 · 302 阅读 · 0 评论 -
volatile 实现原理
定义java编程语言允许线程访问共享变量,为了确保共享变量能够被准确和一致的更新,线程应该通过排他锁获得这个变量。java提供了volatile,在某些情况下比锁更加方便。如果一个字段被声明成volatile,java线程内存模型确保所有线程看到的这个变量的值是一致的。内存模型的相关概念大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取...原创 2018-10-19 15:56:55 · 194 阅读 · 0 评论 -
线程池的设置
高并发,执行耗时短的任务,还有低并发,执行耗时长的任务,各自选取什么样的线程池比较合理?为什么?如果业务场景是高并发,且任务耗时长时,有什么解决思路?线程池的关键点是:1、尽量减少线程切换和管理的开支; 2、最大化利用cpu。对于1,要求线程数尽量少,这样可以减少线程切换和管理的开支;对于2,要求尽量多的线程,以保证CPU资源最大化的利用。 所以对于任务耗时短的情况,要求线程尽量少,如...转载 2018-11-09 10:04:36 · 205 阅读 · 0 评论 -
Java虚拟机垃圾回收(三) 7种垃圾收集器 应用场景
Java虚拟机垃圾回收(三) 7种垃圾收集器 主要特点 应用场景 设置参数 基本运行原理 在《Java虚拟机垃圾回收(一) 基础》中了解到如何判断对象是存活还是已经死亡?在《Java虚拟机垃圾回收(二) 垃圾回收算法》了解到Java虚拟机垃圾回收的几种常见算法。 下面先来了解HotSpot虚拟机中的7种垃圾收集器:Serial、ParNew、Par...转载 2018-11-09 14:55:58 · 707 阅读 · 0 评论 -
ThreadPoolExecutor线程池参数设置技巧
ThreadPoolExecutor线程池参数设置技巧一、ThreadPoolExecutor的重要参数 corePoolSize:核心线程数 核心线程会一直存活,及时没有任务需要执行 当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理 设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭 queue...转载 2018-11-02 10:34:59 · 152 阅读 · 0 评论