类加载过程
加载(创建class对象) -> 连接(验证-准备-解析) -> 类初始化
类加载器类别
根类加载器:加载java核心类
扩展类加载器:加载JRE目录中的jar包
系统类加载器:加载用户自定义类和classpath下的jar包
Java反射机制基于什么原理
通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属性和方法,调用方法或者构造对象,甚至可以运行时修改类定义
动态代理基于什么原理
方便运行时动态构建代理、动态处理代理方法调用的机制
动态代理和静态代理的区别
静态代理:事先写好代理类,缺点是每个业务类都要对应一个代理类,不灵活
动态代理:运行时自动生成代理对象,缺点是生产代理对象和调用代理方法需要额外时间
有哪些字节流?
InputStream,FileInputStream,BufferedInputStream
OutputStream,FileOutputStream,BufferedOutputStream
DataInputStream,DataOutputStream
ByteArrayInputStream,ByteArrayOutputStream
ObjectInputstream,ObjectOutputStream
PrintStream,SequenceInputStream
有哪些字符流?
Reader,InputStreamReader,FileReader,BufferedReader
Writer,OutputStreamWriter,FileWriter,BufferedWriter
CharArrayReader,CharArrayWriter,PrintWriter
还有哪些IO流?
StringReader,StringWriter,RandomAccessFile,Properties
常见网络小问题
问题 | 答案 |
TCP客户端socket是什么? | Socket |
TCP服务端socket是什么? | ServerSocket |
UDP所用socket是什么? | DatagramSocket |
UDP所发和收数据报的packet是什么? | DatagramPacket |
GC主要算法
GC主要对象是堆和方法区,堆中把短命对象归为新生代,长命对象归为老年代
- 根搜索算法
- 标记-清除算法
- 复制算法(新生代GC)
- 标记-整理算法(老年代GC)
- 分代收集算法(新生代+老年代GC)
触发主GC(Garbage Collector)的条件
1、当应用程序空闲时,即没有应用线程在运行时,GC会被调用
2、Java堆内存不足时,GC会被调用。当应用线程在运行,并在运行过程中创建新对象,若这时内存空间不足,JVM就会强制地调用GC线程,以便回 收内存用于新的分配。
内存泄漏的原因
- 数据库连接,网络连接,iod连接,不调用close方法,则不被GC
- 单例模式,持有外部对象的引用,长生命周期的对象
- vector,对象放入vector中
- 集合,对象放入集合中,对象被修改属性后remove对象失败