面试题 3-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) // 拒绝策略

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的实现原理 是如何的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值