多线程

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程序每次运行一段时间就会变得十分卡顿,你会如何对他进行优化?