乐趣区

关于java:java面试题整理

多线程

1.java 如何开启线程?怎么保障线程平安?

a. 继承 thread 类重写 run 办法,实现 runnable 接口实现 run 办法,实现 callable 接口实现 call 办法(返回值), 通过线程池创立
b.JDK 提供的锁,应用 Synchronized 关键字及提供的其余锁 lock

2.Volatile 和 Synchronized 什么区别?Volatile 能不能保障线程平安?DCL(Double Check Lock) 单例为什么要加 Valatile?

a.Sy 关键字是用来加锁,volatile 只是保障变量在线程之间的可见性
b. 不能,volatile 只能保障线程之间的可见性,不能保障原子性
c. 应用 volatile 避免指令重排,解决多线程之间指令重排安全性问题

3.java 线程锁机制是怎么的?偏差锁、轻量级锁、重量级锁的区别是什么及降级过程?

a.java 的锁就是在对象的 Markword 中记录一个锁状态,不同的锁及无锁对应不同的锁状态
b. 锁机制是依据资源竞争的强烈水平一直进行锁降级的过程

4. 谈谈对 AQS 的了解,AQS 如何实现可重入锁?

a.AQS 是 java 线程同步的框架。是 JDK 中很多锁工具的外围实现框架
在 AQS 中保护了一个信号量 state 和一个线程组成的双向链表队列,用来给线程排队,state 管制是否放行
b. 在可重入锁场景下,state 是用来示意加锁的次数,0 示意无锁。每加一次锁就加 1,开释一次锁就减 1

5. 有 ABC 三个线程,如何保障三个线程同时执行?如何在并发状况下保障三个线程顺次执行?如何保障三个线程有序交织执行?

CountDownlatch、Cylicbarrier、Semaphore

6. 如何对一个字符串疾速进行排序(多线程状况下作答)?

通过应用 fork/join 框架,分而治之,通过多线程解决先拆分计算,在合并后果

JVM

1. 对于 jvm 内存模型了解

2.java 类加载的全过程是怎么的?什么是双亲委派机制?有什么作用?

JAVA 的类加载器:AppClassLoader->ExtClassLoader->BootStrapClassLoader
a. 每个类加载器都有本人的加载目录
b. 每个类加载器对加载过的类都有一个缓存
c. 双亲委派:向上委托查找(缓存),向下委托加载;作用:是为了爱护 java 的层的类不会被其余应用程序所笼罩

d. 类的加载过程:加载 -> 连贯 -> 初始化

 加载:把类的字节码文件(.class)加载到 JVM 内存中,并将其映射成 JVM 认可的数据结构
连贯:1. 验证:查看加载的字节信息是否合乎 JVM 标准
     2. 筹备:创立类和接口的动态变量,并赋予初始值,处于半初始化状态
     3. 解析:把合乎援用转为间接援用
初始化 本人写的那些代码的执行 

3. 一个对象从加载到 JVM,再到被 GC 革除,都经验了什么过程?

4. 怎么确定一个对象是否是垃圾?什么是 GC Root?

1. 援用计数法,2. 可达性分析法

5.JVM 有哪些垃圾回收算法?

a.MarkSweep 标记革除算法。b. 拷贝算法。c. 标记整顿算法

6.JVM 有哪些垃圾回收器?他们都是怎么工作的?什么是 STW?他们都产生在哪些阶段?什么是三色标记?如何解决错标记和漏标记的问题?为什么要设计这么多垃圾回收器?









7. 如何进行 JVM 调优?JVM 参数有哪些?怎么查问 JAVA 过程的 JVM 参数?谈谈你理解的 JVM 参数。如果一个 java 程序每次运行一段时间就会变得十分卡顿,你会如何对他进行优化?

退出移动版