1、String 类的实例化方式,直接赋值与构造方法的区别
- 直接赋值:开辟一块堆空间,该字符串对象可以自动保存在对象池中,以供下次使用;
- 构造方法:开辟两块堆空间,其中有一块为垃圾空间,不能自动保存到对象池,需要使用intern()手工入池。
2、StringBuffer 与 StringBuilder 区别:(String 对比)
- String 字符串常量不可变,StringBuffer与StringBuilder 可变;
- StringBuffer :采用同步处理,线程安全,效率较低;
- StringBuilder:采用异步处理,线程不安全,效率较高。
- (String 类的修改操作 “+”,JVM 底层会将String 变为StringBuilder 类处理,减少大量垃圾空间产生)
3、单例设计模式之饿汉式与懒汉式:
- 饿汉式:一个类只允许产生一个实例化对象;(不存在线程安全问题);
- 懒汉式:当第一次使用SIngleton对象时,才会产生实例化对象,之后不会产生。 (存在线程安全问题,解决方法即使用全局锁加内存屏障)
4、throw 与 throws 区别:
- throw :用于方法内部,主要表示手工异常抛出;
- throws:主要在方法声明上使用,明确告诉用户本方法可能产生异常,同时该方法可能不处理异常。
5、基本数据类型 与 包装类对象 使用规则:
- 所有POJO(简单Java类)必须使用包装类对象;
- 所有RPC方法的返回值和参数必须使用包装类对象;
- 所有局部变量使用基本数据类型。
6、所有相同类型的包装类对象比较,一律使用equals 方法;
其中 Integer Var=?(该值在-128~127区间内)中赋值,Integer 对象会在常量池中产生,会复用已有对象,因而可用 “==” 判断是否相等,若超出该区间,就会在对上开辟空间,不会复用已有对象,因而必须使用 equals 方法比较。
7、Java 将所有继承与Error 和 RubtimeException 类的异常称为非受查异常;
所有异常都继承于底层throwable ,分为两类:Error 描述运行时内部错误或资源耗尽错误(OOM 、Stackoverflow);Exception 应用程序抛出异常,IOException 本身没有问题,I/O错误(打开一个不存在的文件)、RuntimeException 运行时异常(ClasscastException 、NullPointException)。
8、单例与多例特点:
构造方法私有化;类内部提供有static 方法取得类内部的实例化对象。
9、关于异常的五个关键字:try 、catch 、finally 、throws 、 throw
- 不管catch是否捕获异常,finally 语句都要执行
- finally 语句块在catch 语句块中的return语句之前执行
- finally 块中的return 语句会覆盖try块中的return返回值
- 在 try语句块或catch 语句块中执行到Systm.exit(0)直接对出程序
10、封装 用private (90%),protected (10%)。