Java基础面试题

一、Java 基础

1.JDK 和 JRE 有什么区别?

jdk是java的开发环境,jre是运行环境,jdk包含了jre,jre里面含有Java虚拟机jvm。jdk里面还有编译java源码的编译器javac。

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

== 是Java提供的一个比较方法,比较的是内存的地址,而equals()方法是Object中提供的方法,是可以被重写的,你也可以自己重写,所以在使用equals()方法时应该看看此类是如何重写的。

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

错,两个对象的hashCode相同,但equals也不一定相同。

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

final作为Java中的关键字可以用于三个地方。用于修饰类、类属性和类方法。

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

(1)修饰类:表示该类不能被继承;

(2)修饰方法:表示方法不能被重写;

(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)

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

Math.round()的原理是对传入的参数+0.5之后,再向下取整得到的数就是返回的结果,返回值为long型。

这里的向下取整是说取比它小的第一个整数或者和它相等的整数。

因此Math.round(-1.5)的结果是-1.5 + 0.5 再向下取整,即-1.0取整,结果是-1。

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

java中操作字符串的类,我知道的有三个类,分别是String,StringBuffer和StringBuilder.这三个类都是以char[]的形式保存的字符串,但是String类型的字符串是不可变的,对String类型的字符床做修改操作都是相当于重新创建对象.而对StringBuffer和StringBuilder进行增删操作都是对同一个对象做操作.StringBuffer中的方法大部分都使用synchronized关键字修饰,所以StringBuffer是线程安全的,StringBuilder中的方法则没有,线程不安全,但是StringBuilder因为没有使用使用synchronized关键字修饰,所以性能更高,在单线程环境下我会选择使用StringBuilder,多线程环境下使用StringBuffer.如果生命的这个字符串几乎不做修改操作,那么我就直接使用String,因为不调用new关键字声明String类型的变量的话它不会在堆内存中创建对象,直接指向String的常量池,并且可以复用.效率更高.到这时候还不过瘾的话你就接着说这三个类创建的时候都是什么状态,扩容的时候又怎么扩容的等等,感觉应聘的初级程序员应该够用了吧。

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

不一样,使用String str=“i”,java虚拟机会把它分配到常量池中,而 String str=new String(“i”)创建了一个对象,会被分到堆内存中。

Java为了避免产生大量的String对象,设计了一个字符串常量池。工作原理是这样的,创建一个字符串时,JVM首先为检查字符串常量池中是否有值相等的字符串,如果有,则不再创建,直接返回该字符串的引用地址,若没有,则创建,然后放到字符串常量池中,并返回新创建的字符串的引用地址。

所以,当你创建一使用String str="i"创建一个字符串时,str指向的是常量池中的这个字段。

Object obj会反映到java虚拟机栈的变量表中,作为一个引用类型数据出现,“new Object()”会反映到java堆中,在java堆上创建一个Object类型的实例数据值的结构化内存,这块内存的长度是不固定的。在java堆中还存放了了能查到此对象类型数据(对象类型、父类、接口、方法等)的地址信息,这些信息存放在方法区中。

11.抽象类必须要有抽象方法吗?

不是,抽象类里面可以没有抽象方法,但抽象方法必须在抽象类里面。

12.普通类和抽象类有哪些区别?

(1)普通类可以去实例化调用;抽象类不能被实例化,因为它是存在于一种概念而不非具体。

(2)普通类和抽象类都可以被继承,但是抽象类被继承后子类必须重写继承的方法,除非自类也是抽象类。

13.抽象类能使用 final 修饰吗?

不能,抽象类是被用于继承的,final修饰代表不可修改、不可继承的。

14.接口和抽象类有什么区别?

抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。

接口是对动作的抽象,抽象类是对本质的抽象。

15.java 中 IO 流分为几种?

IO流的分类:
(1)按照数据的流向:
输入流、输出流
(2)按照流数据的格式:
字符流、字节流
(3)按照流数据的包装过程:
节点流(低级流)、处理流(高级流)

最基本的几种进行简单介绍:
•InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。

•OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

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

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

BIO是一个连接一个线程。
NIO是一个请求一个线程。
AIO是一个有效请求一个线程。

BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
NIO:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
AIO:异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。
适用场景分析

17.Files的常用方法都有哪些?

Files.exists()
判断文件是否存在
public static void main(String[] args) throws Exception {
Path path = Paths.get(“F:/ceshi13.txt”);
boolean pathExists = Files.exists(path,new LinkOption[]{ LinkOption.NOFOLLOW_LINKS});
System.out.println(pathExists);
}
Files.createDirectory()
创建文件夹
public static void main(String[] args) {
Path path = Paths.get(“F:/nnn”);
try {
Files.createDirectory(path) ;
} catch (IOException e) {
e.printStackTrace();
}
}
Files.copy()
复制文件
public static void main(String[] args) throws IOException {
Path path = Paths.get(“F:/ceshi.txt”);
Files.copy(path,new FileOutputStream(new File(“F:/nnn.txt”))) ;
}

Files.move()
移动文件
Path path = Paths.get(“F:/nnn.txt”);
Path path2 = Paths.get(“F:/nnn/nnn.txt”);
Files.move(path,path2) ;

Files.delete()
删除一个文件或目录(空目录):如果不存在会报错
Path path = Paths.get(“F:/ccc”);
Files.delete(path);

Files.deleteIfExists()
删除一个文件或目录(空目录):如果存在就删除

public static void main(String[] args) throws IOException {
Path path = Paths.get(“F:/nnn”);
Files.deleteIfExists(path);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值