JAVA基础面试题总结(不定时更新~)

1 Java基础语法

1、JDK和JRE,JVM有什么区别?

jdk是java开发工具包,包含了jre和jvm

jre是开发环境,包含了jvm和核心类库

jvm是虚拟机

2、说下你对==和equals的认识,它们有什么差别?(高频)

对于==来说,如果比较基本数据类型比较的就是值,比较引用数据类型比较的就是地址

对于equals来说,只能比较引用数据类型,对于equals()方法,在Object类中所定义的equals方法底层也是==比较对象的地址值,重写了equals方法后,比较的就是内容

3、如果两个对象的 hashCode值一样,则它们用equals()比较也是为 true,是不是?(高频)

不是.

object中,hashcode()和equals()是两个方法,hashcode()默认返回的是对象的地址,equals比较的是对象的地址,可以通过重写hashCode()方法让让不同值的对象有相同的hashCode ,但是equals不一定相同.

4、综合说下final的作用?和finally,finalize有什么区别

final修饰的类不能被继承,修饰的方法不能被重写,修饰的变量为常量不能被重新赋值

finally 一般在try..catch结构中,不管是否出现异常,finally后面的语句都会执行

finalize是Object类的方法,用在垃圾回收器中

5、String str="abc"与 String str=new String("abc")的定义方法一样吗?

不一样

String str="abc":  是在常量池中创建了一个对象abc

String str=new String("abc"): 创建了两个对象."abc"字符串对象在常量池中 ,new String("")在堆内存中又创建了一个新对象

6、String 类的常用方法都有那些?(高频)

indexOf():返回指定字符的索引。

length():返回字符串长度。

equals():字符串比较。

replace():字符串替换。

trim():去除字符串两端空白。

split():分割字符串,返回一个分割后的字符串数组。

toLowerCase():将字符串转成小写字母。

toUpperCase():将字符串转成大写字符。

substring():截取字符串。

reverse(): 对字符串进行反转

7、是否可以继承String类?为什么用final修饰

不能,String是final修饰的类,不能被继承,为了效率和安全

1.只有字符串是不可变的,字符串池才有可能被继承

2.只有字符串是不可变的,所以多线程是安全的,同意个字符串实例可以被多个多线程共享

3.因为字符串是不可变的,所以他在被创建的时候就已经被hashcode缓存了,不需要重新计算,使得字符串很适合做map中的键.

4.如果字符串是可变的,会引用很严重的安全问题

8、什么是面向对象编程?

面向对象编程的基本思想就是类 方法 继承 封装 多态 等概念进行程序设计,从实现世界中实际存在的事物(对象)出发来构造软件系统,尽可能的运用人类的自然思想进行程序设计

9、面向对象的三大特征?

继承:子类继承父类可以实现代码代码的抽取和复用,单继承,多实现

封装:将事物的属性和行为抽取出来封装到类中

多态:父类的引用指向子类的实现 三个条件:继承 重写 向上转型

10、this和super的区别

this指向的是自身的对象,代表对象本身

super指向的是自己的一个超类对象,这个超类对象是最近的一个父类

this()调用的是本类的其他构造方法

super()调用的是父类的构造方法

11、break,continue,return 的区别及作用

break跳出当前循环 

continue结束当前循环进入下一个循环

return 结束整个方法

12、抽象方法能被final修饰吗?

不能,final修饰的类不能被继承,而抽象类本身就是用来被继承的,相桲所以不能

13、局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final?

因为生命周期不一样,局部变量保存在栈中当方法结束后 非final

14、重载和重写的区别

重载:方法名称相同 参数类型不同 参数类型:参数数量 参数类型 参数顺序

重写:发生在父类中 方法的名称参数必须相同 抛出的异常小于父类 访问修饰符大于等于父类

15、构造器是否可以被重写

构造器不能被继承,所以不能被重写,但是可以被重载

16、Java中创建对象的方式有哪里

1 使用new关键字

2 使用class类的newInstance方法

3 使用constructor类的newInstance方法

4使用clone方法

5使用反序列化

3 集合

1、ArrayList和LinkList的区别

ArrayList查询速度快,局部增删快,头部增删慢,随机访问速度快;

LinkList头尾增删速度快,中间不高,性能远比arrayList差 ,不适合做查询;真想查询hashMap

(1) 是否保证线程安全:ArrayList和LinkedList都不保证线程安全

(2)底层数据结构:ArrayList底层使用的是数组;LinkeList底层使用的是双链表

(3)插入和删除是否受元素位置的影响:

ArrayList采用数组存储,所以插入和删除元素时间复杂度受元素位置的影响

LinkList采用链表存储,所以插入删除元素复杂度不受元素位置的影响

(4)是否支持快速随机访问:LinkedList不支持高效的随机元素访问,ArrayList实现了RandomAccess接口,所以有随机访问功能

(5)内存空间占用:

ArrayList的空间浪费主要是尾部会预留一定的容量空间

LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间

2、HashMap的底层原理

jdk8之前:数组+链表

jdk8之后:数组+链表+红黑树

3、HashMap的resize过程是什么?

HashMap的底层是数组+链表,1.8之后会引入红黑树.会初始化一个长度为16的数组,负载因子为0.75,当数组长度大于阈值(数组长度*0.75)的时候就会扩容到之前的两倍.链表长度大于8数组长度大于64就会转换成红黑树.

4、HashMap和HashTabled的区别?

1 HashMap去掉了HashTable的contains方法,但是加上了containsValue()和containskey()方法

2 Hashtable是同步的,HashTable是非同步的效率上要比HashTable高

3 HashMap允许有空键值对,但是HashTable不行

5、List Map set三个接口,存取元素时,有什么特点

List集合:有序无索引可重复

Map集合:以key-value方式存储,value可以多个

Set集合:无序 无索引 不可重读

6、HashSet是如何保证元素的唯一性

通过元素的两个方法Hashcode和equals比较

7、TreeSet怎么对元素中的集合进行比较

TreeSet的底层是二叉树

对元素自身具备比较性:需要元素对象实现comparable接口,覆盖comperTO方法

对集合自身具备比较性:需要定义一个实现了comparator接口的比较器,覆盖compare方法

8、map的两种取方式

通过map.keyset,先拿到map集合的键,在根据键拿到值

通过map.entrymap拿到所有的键值对

9、collection和collections的区别

collection是集合类的顶层接口,继承他的接口主要有set和list

collections是工具类,有很多操作集合的方法

10、concurrentHashMap的工作原理以及代码实现

concurrentHashMap底层采用分割的概念,只对Map的一部分进行上锁,这样能保证同步的同时,锁住的不是整个Map

11、HashCode的方法和作用

hashcode()的作用是读取哈希码也称散列码;它实际上是返回一个int整数,这个哈希码的作用就是确定该对象在哈希表中的索引位置.

3 IO流

7 java 中 IO 流分为几种?

按功能分:输入流(input)和输出流(output)

按类型分:字节流和字符流

8、BIO、NIO、AIO 有什么区别?(高频)

BIO:是Block IO的简称,同步阻塞式IO,就是平常经常使用的传统 IO,特点是简单方便,但并发处理能力低。

NIO:是new IO的简称,同步非阻塞IO,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用(由一个线程管理多个通道默认管理的通道数量为1024个)。

AIO:是Asynchronous IO,是 NIO 的升级,实现了异步非堵塞 IO ,它是基于事件和回调机制。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tmlh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值