Linux
线上频繁full gc怎么办,CPU使用率过高怎么办<br>
高并发
多线程
创建线程的方式及实现<br>
继承Thread类创建线程类
实现Runnable接口创建线程类
实现Callable接口配合Future创建线程
线程池
ThreadPoolExecutor的工作流程
来一个先到核心线程,核心线程满了到消息队列,消息队列满了最大线程还没满,就建非核心线程工作
fixedThreadPool() 启动固定线程数的线程池
CachedThreadPool() 按需分配的线程池
ScheduledThreadPoolExecutor() 定时,定期执行任务的线程池
ThreadPoolExecutor() 指定线程数的线程池
sleep()、wait()、yield()、join()的区别<br>
线程的生命周期及安全问题<br>
ThreadLocal原理及内存泄漏<br>
并发工具类使用详解及CountDownLatch、CyclicBarrier、Semaphore、Exchanger的区别<br>
volatile作用
保证可见性(这里指主内存与工作内存间的可见性)
防止指令重排(指令重排也会导致可见性问题)
volitale和synchronized的实现原理<br>
sysnchronized和Lock的区别<br>
CAS乐观锁,ABA问题<br>
乐观锁的业务场景及实现方式<br>
Java基础<br>
基本数据类型<br>
byte
char<br>
short
int
long
float<br>
double
boolean
修饰符访问权限
final、finally、finalize的区别<br>
int和Integer的区别<br>
抽象类和接口的区别<br>
接口中的方法会被隐式的指定为 public abstract<br>接口中的变量会被隐式的指定为 public static final
反射的用途及实现<br>
说说你对Java反射的理解
深克隆和浅克隆<br>
JDBC流程<br>
equals和==的区别,hashcode和equals的关系<br>
ArrayList、Linkedlist、Vector的区别<br>
HashMap和HashTable的区别<br>
HashMap和ConcurrentHashMap的工作原理及代码实现<br>
String类可以被继承吗<br>
String为什么要设计成不可变的
String、StringBuffer和StringBuilder的区别
简答:String是不可变类;StringBuffer对象则代表一个字符序列可变的字符串;StringBuilder和StringBufffer基本一样,但是线程非安全<br>
数据结构:树、排序算法、查找算法<br>
Exception和Error
Exception可以catch后处理,比如IOexception,出错后程序仍能运行
error是非检查性异常,比如OOM
成员变量和实例变量的区别<br>
时间复杂度<br>
泛型<br>
泛型中extends和super的区别
<? extends Parent> 指定了泛型类型的上届
<? super Child> 指定了泛型类型的下届
<?> 指定了没有限制的泛型类型
泛型类
泛型接口
泛型方法
进程和线程的区别
序列化的方式
静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?<br>
父类的静态属性和方法可以被子类继承
不可以被子类重写:当父类的引用指向子类时,使用对象调用静态方法或者静态变量,是调用的父类中的方法或者变量。并没有被子类改写。
原因:<br>因为静态方法从程序开始运行后就已经分配了内存,也就是说已经写死了。所有引用到该方法的对象(父类的对象也好子类的对象也好)所指向的都是同一块内存中的数据,也就是该静态方法。<br>子类中如果定义了相同名称的静态方法,并不会重写,而应该是在内存中又分配了一块给子类的静态方法,没有重写这一说。<br>
闭包和局部内部类的区别<br>
string 转换成 integer的方式及原理<br>
集合详解<br>
排序
IO流<br>
字节流
InputStrem字节输入流
FileInputStream
BufferedInputStream<br>
OutputStream字节输出流
FileOutputStream
BufferedOutputStream
字符流
Reader字符输入流
InputStreamReader转换流<br>
FileReader
BufferedReader
Writer字符输出流
OutputStreamWriter转换流<br>
FileWriter
BufferedWriter
JDK和JRE的区别
40道java基础面试题<br>
JVM内存模型
运行时数据区域(内存模型)
堆
方法区
栈(虚拟机栈)
本地方法栈<br>
程序计数器<br>
垃圾回收机制
强引用:会爆出OOM也不会被回收
软引用:在内存不够的时候被回收
弱引用:每次GC都会被回收(ThreadLocal中内部类Map的key就是)
虚引用:可以用来跟踪GC,对象准备被回收时发现他还有虚引用,会把这个虚引用加入一个引用队列,可以观察这个队列中虚引用是否存在来判断对象是否被回收了。<br>
垃圾回收算法
GCRoots(GCRoots可以简单记忆为,如果被删就一定会影响程序运行的对象,比如有虚拟机栈/本地方法栈中的引用对象,synchronized持有的对象,方法区中的静态对象、常量)
引用计数(redis就是用的这个)
标记清除
标记整理
复制(一般不用在老年代,太耗时,且浪费空间)
分代收集
Minor GC和Full GC触发条件
MinorGC:Eden区满
fullgc:大对象直接 到老年代,老年代空间不足,system.gc,minorgc后发现老年代剩余空间大小小于平均每次从新生代进入老年代的值
JVM调优总结
JAVA类加载机制<br>