2021-03-05

Java面试题

1、Java跨平台性

Java语言编写的应用程序基于Java虚拟机(JVM)在不同平台上都可以运行,也称作Java具有良好的可移植性

2、JDK和JRE

·JDK:Java Development Kit的简称,Java开发工具包,提供了Java的开发环境和运行环境。
·JRE:Java Runtime Environment的简称,Java运行环境,为Java的运行提供了所需环境。
JDK包含了JRE,同时还包含了编译Java源码的编译器javac,还包含了很多Java程序调试和分析的工具。简单来说,如果你只需要运行Java程序,安装JRE就可以了,如果你需要编写Java程序,则需要安装JDK。

3、==和equals

==对于基本类型来说是值比较,对于引用类型来说是引用的比较;equals默认情况下是引用的比较,但是很多类重写了equals方法,比如String、Integer等把它变成了值比较,因此,一般情况下equals比较的是值是否相等。

4、两个对象的hashCode()相同,则equals()是否也一定为true?

不一定。在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。两个不同的键值对,哈希值相等,被称作“哈希冲突”。

5、final在Java中有什么作用?

final修饰的类叫最终类,该类不能被继承;
final修饰的方法不能被重写;
final修饰的变量叫常量,常量必须初始化,初始化后值不能被修改。

6、Java中操作字符串的类以及它们之间的区别

操作字符串的类:
String StringBuffer StringBuider
区别:
String声明的是不可变的对象,每次操作都会生成新的String对象,然后将指针指向新的String对象;
StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量,是多线程操作字符串 ;
StringBuilder是可变类,速度更快,线程不安全,单线程操作字符串。

7、String类常用方法

indexOf() 返回指定字符的索引
charAt() 返回指定索引处的字符
replace() 字符串替换
trim() 去除字符串两端空白
split() 分割字符串,返回一个分割后的字符串数组
getBytes() 返回字符串的byte类型数组
length() 返回字符串长度
toLowerCase() 将字符串转成小写字母
toUpperCase() 将字符串转成大写字符
substring() 截取字符串,返回字符串的子字符串
equals() 比较字符串中所包含的内容是否相同

8、Files的常用方法都有哪些?

Files. exists() 检测文件路径是否存在
Files. createFile() 创建文件
Files. createDirectory() 创建文件夹
Files. delete() 删除一个文件或目录
Files. copy() 复制文件
Files. move() 移动文件
Files. size() 查看文件个数
Files. read() 读取文件
Files. write() 写入文件

9、this和super的区别

this代表本类对象的引用,super代表父类对象的引用;
this用于区分局部变量和成员变量;
super用于区分本类变量和父类变量;
this.成员变量 this.成员方法() this([参数])代表调用本类内容;
super.成员变量 super.成员方法() super([参数]),代表调用父类内容;
this和super不可以同时出现在同一个构造方法里,他们两个只要出现都得放在第一行。

10、重写与重载的区别(Overload和Override的区别)

重载:是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同;
重写:是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型;
重写是父类与子类之间多态性的一种表现;
重载是一类中多态性的一种表现。

11、接口和抽象类有什么区别?

实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。
构造函数:抽象类可以有构造函数;接口不能有。
实现数量:类可以实现很多个接口;但是只能继承一个抽象类。
访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。

12、Java 中 IO 流分为几种?

按功能来分:输入流(input)、输出流(output)。
按类型来分:字节流和字符流。
字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。

13、BIO、NIO、AIO 有什么区别?

BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
NIO:Non IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。

14、如果redis中执行了flush all命令如何挽救?

	一般情况下,redis会开启AOF和RDB模式。执行了flush all命令,可修改AOF文件,删除flush all命令,重启redis即可。

15、 如果分区对不同的key hash(key1)= 3000 hash(key2)=3000 问? 算法是否有误? 是否影响数据的存取?

不影响
执行过程:
存:key1/key2 都归同一个主机node进行管理. redis.set(key1,value1), redis.set(key2,value2);
取: key1 hash(key1)=3000 找到node 进行取值操作 redis.get(key1) 结果一定正确

16、redis集群中最多存储16384个数据???

错!!
16384只是hash槽位的个数,与存储数量没有必然的联系. 能存储多少 完全由redis内存决定.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值