当前位置:   article > 正文

面试题 3-5年java开发_5年java面试题库

5年java面试题库

面试题 3-5年java开发(15-25k)

地址坐标:成都

面试题是参加的大大小小的面试整理而来的,都是自己经历的,可能有一些是后期补充的,欢迎指正和讨论,一起进步。

1、java 基础

1、java中的三大集合

主要考究的是java中的集合类型: List MapSet 分别的数据类型和底层结构是如何的:

2、Spring&SpringBoot

1、Spring相关

3、SpringCloud

4、多线程

1、Volatile 关键字

Q1:volatile关键字有什么作用?

  • 内存可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。
  • 禁止指令重排

Q2:内存可见性和防止指令重排是如何实现的?

内存屏障 : …

Q3:有哪些内存屏障?

​ 一共有四种内存屏障,

2、AQS相关

Q1:AQS加锁的过程请你谈一下?

3、Synchronized 关键字

Q1: Synchronized 关键字从JDK1.6后进行了锁升级,请问锁升级过程和对应条件?

**锁的升级过程:**JDK1.6之前一直是重量级锁,即要么无锁要么就是加了锁;JDK1.6之后引入了轻量级锁/偏向锁,

​ 它的过程为: 无锁 ----> 轻量级锁 ----> 偏向锁 ----> 重量级锁

对应条件为:

Q2: synchronized 与 Lock 的区别

4、创建线程的几种方式

基础的问题肯定不是要问你的内容:但是也还是提一句

  • 1、继承Thread
  • 2、实现Runnable 或者是 Callable 接口
  • 3、使用线程池【重点】

Q1: 线程池有哪些参数分别代表什么含义

​ 使用线程池主要是使用:ThreadPoolExecutor 类进行线程池的相关创建;

public ThreadPoolExecutor(
  int corePoolSize, // 线程池长期维持的线程数,即使线程处于Idle状态,也不会回收。
  int maximumPoolSize, // 线程数的上限
  long keepAliveTime, // 超过corePoolSize的线程的idle时长
  TimeUnit unit, // 超过这个时间单位,多余的线程会被回收。
  BlockingQueue<Runnable> workQueue, // 任务的排队队列
  ThreadFactory threadFactory, // 新线程的产生方式
  RejectedExecutionHandler handler) // 拒绝策略
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Q2:线程池的执行过程是如何?

​ 主要是询问线程池从创建线程到核心线程数,然后再到最大线程数,然后请求边上如何从最大线程数一步一步退回到核心线程数的一个过程,可以理解为请求慢慢增多,线程池是如何处理的,直到请求下降了,线程池如何回收;

详情后面补充:

Q3:线程池是如何回收线程的

​ 第二个问题中的线程回收的一个细节问题,主要考究的是阻塞队列

Q4:项目中是如何设置线程池的个数,在cpu密集型 和 I/O密集型 两个类型中分别如何设置

​ 这里主要考究的是: CPU密集型 IO密集型 分别应该如何考虑设置线程数量

5、并发下的集合安全

主要考究的是多线程情况下集合如何从线程不安全转变成线程安全的,主要问的较多的是 hashmap的并发包的CurrentHashMap

还有就是list的并发包下的 CopyOnWriteList 的写时复制的list 等等。

Q1:CurrentHashMap的实现原理 是如何的

5、Redis

6、其他中间件

CurrentHashMap

还有就是list的并发包下的 CopyOnWriteList 的写时复制的list 等等。

Q1:CurrentHashMap的实现原理 是如何的

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/429902
推荐阅读
相关标签
  

闽ICP备14008679号