java问题解答_java基础常见问题整理

java面试题之java基础

1. JDK 和 JRE 有什么区别?

JDK:java development kit :java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,JDK包含JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具。

JRE:java Runtime Environment :java的运行环境,包含了java的虚拟机,java的基础类库,是使用java语言编写程序运行所需要的软件环境。

2. == 和 equals 的区别是什么?

== 是判断两个变量或实例是不是指向同一个内存空间,== 是java的一个运算符合

Equals 是判断两个变量和实例所指向的内存空间的值是不是相同,Equals是java的一个方法

3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

如果equals相等,则hashCode一定相等,反之则不然,两个方法的关联:

A.equals(B)==ture --> A.hashCode() == B.hashCode()

两个方法的定义:

Equals():用来判断两个对象是否相等,相同返回true,不相同返回false。

hashCode():返回一个int数,该int数的含义是:将该对象的内部地址转换为一个整数返回。

两个方法的规范:

1.若重写equals(Object obj)方法,必须重写hashcode()方法,确保通过equals(Object obj)方法判断结果为true的两个对象具备相等的hashcode()返回值。

2.如果equals(Object obj)返回false,即两个对象“不相同”,并不要求对这两个对象调用hashcode()方法得到两个不相同的数。说的简单点就是:“如果两个对象不相同,他们的hashcode可能相同”。

hashCode是所有java对象的固有方法,如果不重载的话,返回的是该对象在jvm的堆上的内存地址,而不同对象的内存地址肯定不同,所以这个hashCode也就肯定不同。

哈希表是结合了直接寻址和链式寻址两种方式,将需要加入哈希表的数据首先计算哈希值,哈希值就是预先分个组,然后再将数据挂到分组后的链表后面,随着添加的数据越来越多,分组链上会挂接更多的数据,同一个分组链上的数据必定具有相同的哈希值,java中的hash函数返回的是int类型的,也就是说,最多允许存在2^32个分组,也是有限的,所以出现相同的哈希码就不稀奇。

4. final 在 java 中有什么作用?

特征:凡是引用final关键字的地方皆不可修改

1.修饰类:类不能被集成

2.修饰方法:方法不能被重写

3.修饰参数:参数不能被修改

5. java 中的 Math.round(-1.5) 等于多少?

1.round(arg):返回arg的四舍五入值,负.5返回较大的整数,如-0.5返回-1。

2.ceil(arg):返回小数所在两整数之间的最大值,如-0.5返回-1。

3.tail(arg):返回小数所在两整数之间的最小值,如-0.5返回-2。

6. String 属于基础的数据类型吗?

不是,java是用final修饰引用数据类型。

Java的基础数据类型有:byte、short、char、int、long、float、double、boolean

7. java 中操作字符串都有哪些类?它们之间有什么区别?

String,StringBuffer,StringBuilder。

相同点:都是以char[]的方式保存字符串。

不同点:

String类型的字符串是不可变的,我们对String的任何操作都相当于new一个新的String 。

StringBuffer和StringBuilder进行增删操作都是对一个对象做操作

StringBuffer中的方法大多数都使用synchronized关键字修饰,所以StringBuffer是线程安全的。

StringBuilder的方法没有用synchronized进行修饰所以线程不安全,但是正因为如此,所以他的性能更高。

使用:

单线程的情况下使用StringBuilder

多线程的情况下使用StringBuffer

如果在一个生命周期内,这个字符串几乎不做什么操作,那使用String,因为不调用new关键字声明Sting时,他不会再堆内存中创建对象,直接指向String的常量值,并可以复用,效率更高。

8. String str="i"与 String str=new String(“i”)一样吗?

不一样,因为内存的分配方式不一样。

String str="i"的方式,Java 虚拟机会将其分配到常量池中;

而 String str=new String(“i”)方式,则会被分到堆内存中。

9. 如何将字符串反转?

StringBuffer的reverse()方法。

String的charAt()方法从后向前取出。

10. String 类的常用方法都有那些?

.length()获取长度。

.charAt(int index)返回指定索引的字符。

.substring(2)截取。

.compareTo(str2)比较。

.concat(String str)连接。

.toLowerCase()小写。

.toUpperCase()大写。

.replace(char oldChar, char newChar)替换。

11. java 中 IO 流分为几种?

1.如果按流的流向分,可分为输入流和输出流。

2.如果按流的单元分,可分为字节流和字符流。

3.按照流的角色划分,可分为节点流和处理流。

InputStream:字节输入流的基类,OutputStream:字节输出流的基类。

Reader:字符输入流的基类,Writer:字符输出流的基类。

12. BIO、NIO、AIO 有什么区别?

默认情况:服务端启动一个ServerSocket,客户端启动Socket来对服务端进行通信。

BIO (Blocking I/O): 同步阻塞I/O

1.服务器实现模式为一个连接一个线程。即客户端有连接请求时服务器就需要启动一个线程进行处理

2.如果这个连接不做任何事情会造成不必要的线程开销

3.适用于连接数目比较小且固定的架构,这种方式对服务端资源要求比较高,应对小于单机1000的并发量。

NIO (New I/O): 同步非阻塞的I/O

1.服务器实现模式为一个请求一个线程。即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有IO请求时才启动一个线程进行处理。

2.适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器

AIO (Asynchronous I/O): 异步非阻塞I/O

1.服务器实现模式为一个有效请求一个线程。客户端的IO请求都是由操作系统先完成了再通知服务器用其启动线程进行处理

2.适用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂。

13. 同步与异步的区别:

同步:发送一个请求,等待返回,再发送下一个请求,同步可以避免出现死锁,脏读的发生

异步:发送一个请求,不等待返回,随时可以再发送下一个请求,可以提高效率,保证并发

14. Files的常用方法都有哪些(NIO包下)?

1.Files.exists():检测文件路径是否存在。

2.Files.createFile():创建文件。

3.Files.createDirectory():创建文件夹。

4.Files.delete():删除一个文件或目录。

5.Files.copy():复制文件。

6.Files.move():移动文件。

7.Files.size():查看文件个数。

8.Files.read():读取文件。

9.Files.write():写入文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值