直击面试
文章平均质量分 51
高频面试相关点
Jack@Wang
NullPointerException
展开
-
Java之线程池详解
在创建的线程池中,如有100个线程任务,核心数为10,最大线程数为20,队列大小为10,当执行100个任务是,会在第31个线程触发拒绝策略异常,因为最大线程20+队列10=30,执行31个任务就触发了拒绝策略。在创建了线程池后,当有请求任务进来之后,就会安排池中的线程去执行请求任务,近似理解为今日当值线程,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放入缓存队列中。内存溢出问题:因为队列的的大小是int最大值,队列线程太多容易出现内存溢出,因为线程队列任务满了。原创 2023-05-03 22:25:32 · 467 阅读 · 0 评论 -
服务的熔断与降级详解
它主要有一个断路器,相当于一个保险丝,当服务调失败,没有达到预期的失败率,只会降级处理,如果超过预期的失败率后,直接跳闸,所有请求不能调用,都走降级处理。同时会设置一个重试时间,重试启动后,断路器半启动状态,如果正常调用或失败率低,在全启用,如果失败或失败率高,继续跳闸。就是访问业务方法时,失败后配置一个可以提供成功调用的方法实现降级,这样可以给调用者一个很好的提示,以及不让服务出现卡超时,影响调用其他服务的一种解决策略(超时/异常/宕机都会到服务降级)原创 2023-05-03 15:12:18 · 290 阅读 · 0 评论 -
事务的四大特性(ACID)与四大隔离级别
事务是一个不可分割的数据库不可分割的序列,是并发控制的基本单位,要么全部成功,要么全部失败。原创 2023-05-03 14:54:07 · 125 阅读 · 0 评论 -
Java中HashMap面试详答
6.当调用hashCode方法结合数组长度计算出来的索引如果在数组中存在,再判断hash值是否相等,如果相等,此时发生hash碰撞,然后会调用对象中的equals来判断对象是否相等,如果相等,第二次的的值直接覆盖第一次的value值,如果不相等,会向下与链路比较其他key,如果都不相等,规化出一个节点存储数据,java1.8后,会判断链表大于8并且数组角标大于64启用红黑树,变成红黑树为了高效的查询。java1.8前:链表+数组 , java1.8后:链表+数组+红黑树,数组默认长度是16。原创 2023-05-03 14:40:13 · 218 阅读 · 0 评论 -
Java的四大引用强、软、弱、虚
引用队列可以与软引用、弱引用以及虚引用一起配合使用,当垃圾回收器准备回收一个对象时,如果发现它还有引用,那么就会在回收对象之前,把这个引用加入到与之关联的引用队列中去。在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统会回收软引用对象,如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常。这种特性常常被用来实现缓存技术,比如网页缓存,图片缓存,内存不足会自动回收。弱引用的引用强度比软引用要更弱一些,无论内存是否足够,只要 JVM 开始进行垃圾回收,那些被弱引用关联的对象都会被回收。原创 2023-05-03 14:18:28 · 297 阅读 · 0 评论 -
深拷贝和浅拷贝的理解
在 Java 里面,无论是深拷贝还是浅拷贝,都需要通过实现 Cloneable 接口,并实现 clone()方法。然后我们可以在 clone()方法里面实现浅拷贝或者深拷贝的逻辑。实现深拷贝的方法有很多,比如通过序列化的方式实现,也就是把一个对象先序列化一遍,然后再反序列化回来,就会得到一个完整的新对象。在 clone()方法里面重写克隆逻辑,也就是对克隆对象内部的引用变量再进行一次克隆。原创 2023-04-09 17:10:47 · 68 阅读 · 0 评论 -
finally 块一定会执行吗?
finally 语句块在实际开发中使用得非常多,它是和 try 语句块组合使用通常情况下,不管有没有触发异常,finally 语句块中的代码是必然会执行的所以我们会把资源的释放、或者业务日志的打印放在 finally 语句块里面。所以,当大家把这个理念当成是固定的公式以后,就很少会去思考 finally 语句块什么情况下不执行。原创 2023-04-09 17:00:43 · 774 阅读 · 0 评论 -
CAS机制理解
CompareAndSwap 是一个 native 方法,实际上它最终还是会面临同样的问题,就是先从内存地址中读取 flag 的值,然后去比较,最后再修改。这个过程不管是在什么层面上实现,都会存在原子性问题。所以CompareAndSwap 的底层实现中,在多核 CPU 环境下,会增加一个Lock 指令对缓存或者总线加锁,从而保证比较并替换这两个指令的原子性。CAS 主要用在并发场景中,比较典型的使用场景有两个。原创 2023-04-09 16:34:20 · 70 阅读 · 0 评论 -
Java之volatile详解
保证可见性,不保证原子性,禁止指令重排序,在并发情况下,将volatle修饰的值存在每个线程的本地内存中去,如果有更新操作,触发总线嗅探将强制更新内存中值,并将其他线程的副本值失效,其他线程会重新获取副本。原创 2023-04-11 10:56:14 · 553 阅读 · 0 评论