Java高级

类加载过程

加载(创建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线程,以便回 收内存用于新的分配。

内存泄漏的原因

  1. 数据库连接,网络连接,iod连接,不调用close方法,则不被GC
  2. 单例模式,持有外部对象的引用,长生命周期的对象
  3. vector,对象放入vector中
  4. 集合,对象放入集合中,对象被修改属性后remove对象失败