2019 -- 摘录
[TOC]
面试摘录
java平台的理解
- 一次书写,到处运行,跨平台性
- 垃圾收集
- 解释执行,通常是javac编译为字节码文件,虚拟机将字节码转换为机器码;但是常见的虚拟机都提供了动态编译器运行时将热点代码编译成机器码,这个时候是解释执行
- 语言特性:泛型、IO、网络、并发安全等基础类库
- JVM的一些概念,常见的垃圾收集器
- 这里很好奇PHP是怎么做到的热更新
exception和error的区别
- 都继承了Throwable类
- 尽量不要直接捕捉Exception这样的通用异常,给出明确的异常和处理更清晰
- 异常信息的打印一定要有明确的日志
- 大家认为java的异常设计存在缺陷,第一是大多数情况下我们捕获异常后都不可能恢复程序运行,第二是不兼容functional编程
- try catch会有额外的性能消耗影响JVM对代码的优化,所以尽量不要直接包含一大段代码;第二是不要用来做流程控制,因为性能远低于if else
- java没实例化一个exception都要对栈做快照,这个过程性能消耗很大
final、finally、 finalize的不同
- final用来修饰类、方法、变量
- final用来强调某些行为是不可更改的,避免意外赋值带来的编程错误,对于接口来说可以保证平台安全性
- 并发编程中final可以减少性能消耗(也说了现在的JVM会有自己的判断,对final的依赖不大,大多数时候不用从性能方面进行考虑)
- 另外,很多小技巧用来提升性能其实都有局限性,编程应该更偏于语意本身
- finally是用于保证某些动作一定会得到执行,资源释放、连接关闭之类的
- finalize保证对象被回收之前某些资源是否要释放
