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

145 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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

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

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

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

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

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

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

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

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

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

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个小技巧

———————————————— csdn链接:blog.csdn.net/guoqi_666/a…