JavaGuide是github上的一个五万星的项目,该项目包含java的大部分知识点和面试题
链接:https://github.com/Snailclimb/JavaGuide
1.finally块不会执行的四种情况
(1)finally语句的第一行发生异常(个人感觉其实第一行是执行了的,只是执行时发生了异常)
(2)在前面的代码中用了System.exit(int)已退出程序
(3)程序所在的线程死亡
(4)CPU关闭
2.Java序列化中如果有些字段不想进行序列化,怎么办?
对于不想进行序列化的变量,使用transient关键字修饰。transient只能修饰变量,不能修饰类和方法
3.static关键字主要有以下四种使用场景:
(1)修饰成员变量和成员方法
(2)静态代码块
(3)静态内部类 (static修饰类的话只能修饰内部类)
(4)静态导包 (用来导入类中的静态资源,1.5之后的新特性)
4.静态代码块
(1)静态代码块在非静态代码块之前执行(静态代码块—非静态代码块—构造方法)
(2)静态代码块只会被初始化一次(非静态代码块在每new一次就执行一次),通过 [类名].class 获取类对象时不会执行静态代码块
(3)静态代码块对于定义在它之后的静态变量,可以赋值,但是不能访问
5.单例模式(参考csdn博客)
(1)饿汉式实现
(2)懒汉式实现 (线程不安全)
(3)懒汉式实现 (给过去实例的方法加锁,影响性能)
(4)双重锁实现,给静态变量加上valatile关键字,同时给方法加锁
(5)静态内部类实现
6.浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用 equals 来判断。
7.基本数据类型和包装数据类型(阿里开发手册:防止NPE问题)
(1)【强制】所有的 POJO 类属性必须使用包装数据类型。(当数据库查询的结果为空时,使用基本数据类型自动拆箱会导致NPE)
(2)【强制】RPC 方法的返回值和参数必须使用包装数据类型。(远程调用结果异常用null表示,0可以被赋予其他含义)
(3)【推荐】所有的局部变量使用基本数据类型。
8.使用Arrays.asList()是需要注意的两点(JavaGuide中的解释)
(1)传递的数组必须是对象数组,而不是基本类型。(传入基本类型数组会将改数组看做成一个总的对象,达不到转成list类型的目的)
(2)使用集合的修改方法:add()、remove()、clear()会抛出unsupportedOperationException异常。