Java面试总结

Java基础相关:

面向对象的特征:封装、继承、抽象、多态

jdk、jre、jvm的关系:jdk>jre>jvm

Java8的新特性:Lambda表达式和集合之流式操作

Java字节码:.class文件,Java源程序通过编辑器编译为字节码,字节码通过虚拟机解释执行

equals方法和hashCode方法:equals方法常用于比较两个对象是否相等。hashCode方法主要在集合中用到。将对象放入集合中时,如果该对象的hashCode与集合中任意对象的hashCode均不相等则直接将该对象放入,否则调用equals方法判断是否相等,若不等则放入。重写了equals方法必须重写hashCode方法,否则会降低map等集合索引速度。

VO、DTO、DO、PO分别是什么:VO视图对象、DTO数据传输对象、DO领域对象、PO持久化对象。

Java对象的克隆:Java对象的克隆分为深克隆和浅克隆。实现Cloneable 接口,可以实现浅克隆也可以实现深克隆;实现Serializable接口通过对象的序列化和反序列化实现克隆。

java异常体系:Java异常体系分为Error和Exception两大类,它们都继承自Throwable。其中errror分为VirtualMachineError和其它error。这些几乎不通过代码处理。Exception分为RuntimeException(也称为运行时异常)和其它Exception(受査异常)。

类的实例化顺序:由父到子:静态变量,静态块,再由父到子:非静态变量,构造函数。

反射相关:

反射的功能:运行时构造一个类对象;生成动态代理;判断一个类所具有的成员变量和方法。

反射的应用:Spring框架中IOC基于反射创建对象和设置依赖属性。

其它:

Java中没有默认的拷贝构造方法,需要自己实现。

StringBuilder线程不安全

对象中某个值不需要序列号的时候可以使用transient关键字修饰。

多线程相关:

Java线程是重量级线程

多线程上下文切换:当线程数大于程序分配的cpu数量时就需要轮转使用cpu,这个就是上下文切换。(进程控制块PCB)。

如何结束一个线程:设置一个flag变量,这个变量要多线程可见;使用interrupt 方法,结合isInterrupt方法使用 。

对象监视器

Java提供的锁是对象级的。

sleep、join、yield方法的区别:

ThreadLocal:典型应用场景为数据库连接管理、session管理等。

synchronized原理:同步块使用monitorenter和monitorexit实现,同步方法使用ACC_SYNCHRONIZED实现。

volatile原理:采用内存屏障来实现的。

happens-before原则:1:A happens-before B则A的操作结果对B可见,而且A的执行顺序排在B之前。2:如果两个操作之间存在happens-before关系,并不意味一定要按照happens-before关系来执行,只要于该关系执行的结果一致即可。

Java内存模型:

线程间的通信方式:共享内存;消息传递(wait、notify、BlockingQueue)

阻塞队列:7个

CAS相关:

countDownLatch和cyclicBarrier:

Executors相关:四个参数(最大线程数、核心线程数、阻塞队列、拒绝策略)

虚拟机相关:

为对象分配内存:

分为两种情况:内存绝对规整和内存不连续的。内存规整的情况是:虚拟机只需要在被占用的内存和可用空间之间移动指针即可,这种方式被称为“指针碰撞”;内存不规整的情况是:虚拟机需要维护一个列表,来记录哪些内存是可用的。分配内存的时候需要找到一个可用的内存空间,然后在列表上记录下已被分配,这种方式成为“空闲列表”。

对象如何定位访问:

直接指针访问和句柄访问

内存溢出怎么排错?

1、查看控制台日志

2、查看堆栈日志(JDK 自带的 jvisualvm)

3、定位出内存溢出的空间

哪些可以作为gcroot?

1、方法区中类静态熟悉引用的对象

2、方法区中常量引用的对象

3、本地方法栈中JNI引用的对象

4、虚拟机栈中引用的对象

Java对象的引用类型:

强引用、软引用、弱引用、虚引用

哪些可以作为安全点?

1、循环的末尾

2、方法返回前

3、调用方法call之后

4、抛出异常的位置

垃圾收集器:

新生代:Serial收集器、ParNew收集器、Parallel Scavenge 收集器

老年代:Serial Old 收集器、Parallel Old 收集器、CMS收集器

新生代+老年代:G1收集器、ZGC收集器

cms:初始标记、并发标记(和用户线程一起)、重新标记、并发清除(和用户线程一起)

G1:初始标记、并发标记、最终标记、筛选回收

对象分配规则:

对象优先分配在Eden区、大对象直接进入老年代、长期存活的对象进入老年代、动态判断对象的年龄、空间分配担保

gc日志:

双亲委派:

1、共享功能:避免类重复加载

2、隔离功能:为了安全性

Java对象在内存中的标志:

1、可达的

2、可恢复的

3、不可达的

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值