☞ JDK和JRE有什么区别?
- Java程序设计语言,Java虚拟机,Java API类库统一称为JDK(Java development kit),是用于支持Java程序开发的最小环境
- Java虚拟机,Java SE API类库称为JRE(Java runtime environment);是Java程序运行的最小环境
☞ ==和equals的区别是什么?
==解读
- 基本类型,==比较的是值是否相同
- 引用类型,==比较的是引用是否相同
equals()解读
equals()本质是==,对于String和Integer等类,其内部重写了equals()方法,使之比较值是否相等;如果不重写,默认使用Object的equals()方法,比较是否指向同一个引用
☞ 两个对象的hashCode()相同,则equals()也一定为true,对吗?
不对;“通话”和“重地”的hashCode相同,但是equals显然不同;
public static void main(String[] args) {
String s4="通话", s5="重地";
System.out.println("s4:"+s4.hashCode()+", s5:"+s5.hashCode()+", s4与s5的equals结果:"+s4.equals(s5));
}
结果:
s4:1179395, s5:1179395, s4与s5的equals结果:false
☞ final在java中有什么作用?
- final修饰类,该类不可被继承
- final修饰方法,该类不可被重写
- final修饰字段,该字段是常量,需要初始化,并且不可修改
☞ java中的Math.round(-1.5)等于多少?
等于-1;
- Math.floor():向下取整
- Math.ceil():向上取整
- Math.round():四舍五入
☞ String属于基础的数据类型吗?
String是引用类型,不属于基本类型;Java中8种基本类型为:byte,boolean,char,short,int,long,float,double
☞ java中操作字符串都有哪些类?它们之间有什么区别?
String,StringBuilder,StringBuffer
- String
String创建的是不可变的对象,每次操作都会创建新的对象;在Java中无论使用何种方式进行字符串连接,实际上都使用的是StringBuilder
- StringBuilder和StringBuffer
StringBuilder和StringBuffer都在原对象的基础上操作;StringBuilder线程不安全,但是性能强于StringBuffer;StringBuffer的线程安全机制基于synchronized
☞ String str="i"与String str=new String(“i”)一样吗?
不一样;使用str="i"这种形式jvm会将其分配到常量池中;使用new的形式,会将其分配在堆内存中
☞ 如何将字符串反转?
StringBuild或StringBuffer的reverse()方法
☞ String类的常用方法都有那些?
- indexOf()
- charAt()
- valueOf()
- length()
☞ 抽象类必须要有抽象方法吗?
不一定;抽象类使用abstract修饰,内部不一定有抽象方法;但是内部有抽象方法的类,必须是抽象类
☞ 普通类和抽象类有哪些区别?
- 普通类中不能包含抽象方法,抽象类中可以包含抽象方法
- 普通类可以实例化,抽象类不能实例化
☞ 抽象类能使用final修饰吗?
抽象类是用来继承的,不能使用final修饰;final修饰的类不能被继承
☞ 接口和抽象类有什么区别?
- 继承于实现:抽象类的子类使用extends来继承;接口的实现类使用implements来实现
- 构造方法:抽象类中可以有构造方法;接口中不能有
- 访问修饰符:抽象类中的方法可以使用任意的修饰符;接口中的方法默认都是public
☞ java中IO流分为几种?
- 按功能来分:输入流和输出流
- 按类型来分:字节流和字符流;字节流按照字节(8位)为单位来传输;字符流按照字符(16位)来传输
☞ BIO、NIO、AIO有什么区别?
- BIO:block IO,同步阻塞式IO,即传统的阻塞式IO,特点:简单易用,并发处理能力低
- NIO:new IO,同步非阻塞IO,客户端和服务端使用Channel通信,实现了多路复用
- AIO:asynchronous IO异步非阻塞IO,实现了异步非阻塞IO,基于事件和回调机制
☞ Files的常用方法都有哪些?
- Files.exists():检测文件路径是否存在。
- Files.createFile():创建文件。
- Files.createDirectory():创建文件夹。
- Files.delete():删除一个文件或目录。
- Files.copy():复制文件。
- Files.move():移动文件。
- Files.size():查看文件个数。
- Files.read():读取文件。
- Files.write():写入文件。
☞ jdk乐观锁,悲观锁
- 乐观锁:假设不会发生并发冲突,在拿数据时认为别人不会修改,只有在写入数据时会判断一下是否被别人更新过;可以利用版本号和CAS锁来实现乐观锁; 数据库提供的write_condition和Java juc包中的atomic包下的都是乐观锁的体现
- 悲观锁:假设会发生并发冲突,在操作数据时总是会上锁,这样别人在操作数据时只能阻塞直到拿到锁;传统关系型数据库中的表锁,行锁,读写锁,Java中synchronized和Reentrantlock都是利用了悲观锁的思想
参考:面试必备之乐观锁与悲观锁
☞ 面向对象的基本原则(六原则一法则)
三大特性
- 封装
- 继承
- 多态
五大原则
- 单一职责原则
- 开放封闭原则
- 里是替换原则
- 依赖倒置原则
- 接口分离原则
☞ jdk8新特性
- lambda表达式
- Stream API(大大简化了集合操作,而且不仅仅局限于集合操作)
- 并发
☞ Java中序列化
- 序列化:将Java对象转为字节序列的过程称为序列化
- 反序列化:将字节序列转为Java对象的过程称为反序列化
om/LiuYanYGZ/p/6206159.html)
☞ Java中序列化
- 序列化:将Java对象转为字节序列的过程称为序列化
- 反序列化:将字节序列转为Java对象的过程称为反序列化