java常问面试题10道,offer来碗里(一)

目录

1.线程池的底层⼯作原理 :

2.JVM中垃圾回收算法你知道几个?

3.说说类加载器双亲委派模型 

4.项⽬如何排查JVM问题:

5.Redis内存淘汰和过期策略:

7.RocketMQ如何避免消息重复消费

8.RocketMQ如何保证消息的可靠性传输

9.开发中使用的设计模式

10.谈谈项目中你做的sql优化


1.线程池的底层作原理 :

线程池内部是通过队列+线程实现的,当我们利⽤线程池执⾏任务时:

 1. 如果此时线程池中的线程数量⼩于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建 新的线程来处理被添加的任务。

 2. 如果此时线程池中的线程数量等于corePoolSize,但是缓冲队列workQueue未满,那么任务被放⼊ 缓冲队列。

3. 如果此时线程池中的线程数量⼤于等于corePoolSize,缓冲队列workQueue满,并且线程池中的数量⼩于maximumPoolSize,建新的线程来处理被添加的任务。

4. 如果此时线程池中的线程数量⼤于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等 于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。

 5. 当线程池中的线程数量⼤于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被 终⽌。这样,线程池可以动态的调整池中的线程数

简化说:核心线程数-队列-最大线程数,当最大线程数满后执行拒绝策略

2.JVM中垃圾回收算法你知道几个?

  1. 标记清除
  2. 标记整理
  3. 分代回收算法(新生代:复制  老年代:标记清除/整理)

3.说说类加载器双亲委派模型 

JVM在加载⼀个类时,会调⽤AppClassLoader的loadClass⽅法来加载这个类,不过在这个⽅法中,会 先使⽤ExtClassLoader的loadClass⽅法来加载类,同样ExtClassLoader的loadClass⽅法中会先使⽤ BootstrapClassLoader来加载类,如果BootstrapClassLoader加载到了就直接成功,如果 BootstrapClassLoader没有加载到,那么ExtClassLoader就会⾃⼰尝试加载该类,如果没有加载到, 那么则会由AppClassLoader来加载这个类。 所以,双亲委派指得是,JVM在加载类时,会委派给Ext和Bootstrap进⾏加载,如果没加载到才由⾃⼰ 进⾏加载。

4.项如何排查JVM问题:

对于还在正常运⾏的系统:

1. 可以使⽤jmap来查看JVM中各个区域的使⽤情况

2. 可以通过jstack来查看线程的运⾏情况,⽐如哪些线程阻塞、是否出现了死锁

3. 可以通过jstat命令来查看垃圾回收的情况,特别是fullgc,如果发现fullgc⽐较频繁,那么就得进⾏ 调优了

5.Redis内存淘汰和过期策略:

   客户端设置过期时间:1.惰性删除(key被操作时检查,过期时间)

                                        2.定期删除(随机检查部分key到达25%,并清理)

内存淘汰:默认策略,申请内存操作报错

  1. 越早过期的key,越早删除
  2. 随机删除
  3. 最近最少使用的key先删除
  4. 最不经常使用的key先删除

6.SpringMVC 运行流程大致说一下?

  • 客户端请求被 DisptacherServlet 接收。
  • 根据 HandlerMapping 映射到 Handler。
  • ⽣成 Handler 和 HandlerInterceptor。
  • Handler 和 HandlerInterceptor 以 HandlerExecutionChain 的形式⼀并返回给 DisptacherServlet。
  • DispatcherServlet 通过 HandlerAdapter 调⽤ Handler 的⽅法完成业务逻辑处理。
  • Handler 返回⼀个 ModelAndView 给 DispatcherServlet。
  • DispatcherServlet 将获取的 ModelAndView 对象传给 ViewResolver 视图解析器,将逻辑视图解 析为物理视图 View。
  • ViewResovler 返回⼀个 View 给 DispatcherServlet。
  • DispatcherServlet 根据 View 进⾏视图渲染(将模型数据 Model 填充到视图 View 中)。

7.RocketMQ如何避免消息重复消费

RocketMQ不保证消息不重复,如果需要保证严格的不重复消费,需要自己在业务端去重,接口幂等性保障,消费端处理业务消息需要要吃幂等性,可以用Redis、关系数据库等来配合验证消息是否被消费。

8.RocketMQ如何保证消息的可靠性传输

Rocketmq如何保证消息不丢失,如何保证消息不被重复消费_码上得天下的博客-CSDN博客_rocketmq如何保证消息不丢失

9.开发中使用的设计模式

这个一定要说一两个,几遍实际开发中没有使用过,也要吹出来一个,说出来使用的场景和对该设计模式的理解。

开发中没有实际的同学,可以参考我之前写的博客。吹就完了,写的很详细保证不丢分。

策略模式,工作中你用上了吗?

10.谈谈项目中你做的sql优化

可以看我之前写的博客:sql优化的15个小技巧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

only-qi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值