Java面试题(5)

OOM和SOF

OutOfMemory

  • 堆:对象实例存储过多,GC Roots 可达路径都有,所以不被垃圾回收机制清除,此时我们需要分析某些对象是否必要,内存泄露,即分配的对象来不及回收,导致有很多无用的引用
  • 方法区:类的相关信息,例常量池、类名、方法的描述、字段描述等

StackOverFlow

  • 栈:无限递归、死循环

线程、程序和进程

线程:比进程小的执行单位,一个进程可以有多个线程,线程直接互相影响,进程各自独立,进程执行程序,线程执行程序段,即程序被拆分成多个程序段

程序:静态的代码,有指令和数据的文件

进程:系统运行程序的基本单位,一个进程就是一个执行的程序,占用电脑内存、CPU、输入输出设备

防止某个字段序列化

transient关键字,只修饰变量,不能用于方法或类

IO

划分:

  • 输入流和输出流

  • 字节流和字符流

  • 节点流和处理流

注意:处理流的构造方法总是带一个其他流对象做参数,IO中所有类都是由四个抽象类基类派生出来的

  • Reader:字符输入流
  • Writer:字符输出流
  • InputStream:字节输入流
  • OutputStream:字节输出流

IO和NIO

NIO:new IO,效率比IO高,Java API有两套NIO,一套标准输入输出流,一套网络编程;Java NIO的选择器允许一个单独的线程来监视多个输入通道

IONIO
面向流面向缓冲
阻塞IO非阻塞IO
选择器

反射

只要知道类的名字,就可以知道类的所有信息,例方法、属性

例:Class.forName("com.mysql.jdbc.Driver.class")// 加载MySQL驱动类

实现方式

  1. Class.forName(类的路径)
  2. 类名.class
  3. 对象名.getClass()
  4. 基本类型的包装类.TYPE
// 类名.class
Class<Student> studentClass = Student.class;
// 对象名.getClass()
Class<? extends Student> aClass = stu.getClass();
// 基本类型的包装类.TYPE
Class<Integer> type = Integer.TYPE;

实现反射的类:大部分在java.lang.reflect包下

  1. Class:类和接口的信息
  2. Field:类或接口的属性信息,还有访问权限
  3. Constructor:类构造方法信息,还有访问权限
  4. Method:类或接口中方法的信息

优缺点

  • 优点:动态获取类的实例,有一定的灵活性
  • 缺点:
    • 性能低,需要解析字节码,解决方案是关闭JDK安全检查
    • 不安全,破坏封装性,例private修饰的方法和属性也可以被反射获取到
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值