01java面试题之java基础

java基础

1.JDK 和 JRE 有什么区别?

​ JDK包含了JRE,JDK相当于程序员需要开发的SDK,简单说开发环境,需要写代码就要用到。

JRE: java runtime env ,运行环境,编译时用到。

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

在string字符串上有区别以及自行扩展的equals比较上有区别,其他所有类型都是比较地址。 kotlin中==是比较具体数值, ===比较地址

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

错误,hashCode,可能存在冲突(也就是不同的数据,存在相同的hashcode),所以再次添加equals,进行比较数值,这样可以确定是否是同一个对象。

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

​ 1.修饰类,类不能被继承

​ 2.修饰方法,方法不能被继承

​ 3.修饰变量,这里许多博客说的有问题,在java中,只能代表内存中的地址不变换,但是内存空间数值是可以变化的,比如list集合。

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

四舍五入, -1

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

不属于,非基本类型,java中,传参是地址值传递,基本类型是值传递。 记住,java中,没有引用。引用是常量指针,int * const p = &a;

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

  • String : 字符串,而且是不变的,源码中final限制,与c++概念完全不同
  • StringBuffer:线程安全,增删改查, 但是效率低。
  • StringBuilder:线程非安全,效率高。

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

​ 不一样,String str=“i”;从c++角度去理解,本质是初始化,也就是str的指针指向了常量"i"的地址,没有在内存空间中开辟内存,

​ String str=new String(“i”);从c++角度去理解,本质是拷贝初始化,只不过在C++中进行了右值引用进行了优化, 但是本质是拷贝初始化,在内存空间中开辟新的内存,将常量“i”的数值拷贝过去。

9.如何将字符串反转?

​ 第一种方式:自带reverse;

​ 第二种方式:递归,原理,第一个与最后一个交换,同时–,直到i =j停止,时间复杂度n/2,大O法O(n);

​ 第三种方式:字符串拼接,用的新的字符串拼接完,stringBuilder,然后输出。

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

​ 增删改查,长度,比较equals,拼接,转换为数组toCharArray

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

​ 不必须,抽象类只是声明,而非实现。

​ 有一个抽象方法的为抽象类,

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

​ 1.抽象类不能直接实例化,C++中也是如此

​ 2.抽象类可以含有抽象方法,但是普通类不能包含抽象方法

​ 3.普通类继承抽象类,必须实现抽象类中方法,但是抽象类继承抽象类,则不必要

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

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

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

​ 接口:父类是object,抽象类不一定,所以抽象类可以被多继承

​ 至于接口不能实现方法,这个在JDK1.8改了,可以有自己的方法。

​ 抽象类:C++中通过抽象类来实现接口。

​ 二者在某种程度上,接口只是抽象类的一种特例。

15.java 中 IO 流分为几种?

​ 字节流,字符流,InputStream,OutputStream,Reader,Writer

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

​ 不会:

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

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

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

18.Java 和 C++ 的区别?

java:堆内存,分配是由jvm自己决定的,程序员无法决定。 java是半动态语言,可以反射。 java中没有引用,全部是值传递,只不过有的是地址值传递

c++:堆内存是由自己手动分配的,程序员自己决定。C++是静态语言,不可以反射,但是有友元。C++有引用,引用本质是指针常量。

19.那些状态下 finally 不会被执行?

​ 1.fi else中,finally没有执行到

​ 2.system.exit() 退出,虚拟机退出

​ 3.守护(daemon)线程被中止时:虚拟机都会kill掉守护线程从而中止程序。

20.ConcurrentHashMap

​ 线程安全,遍历时,没有加锁,其他操作都加锁了。

21.说说 ArrayList 源码中 ensureCapacity() 作用吧?

​ 等价于C++ capacity。优点,避免频繁扩容带来开销。不划算

22.HashMap 的长度为什么是 2 的幂次方?

不知道:

  1. comparable 和 Comparator 的区别?

    comparable :函数,类中函数

    Comparator :外部比较,接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值