常见的java面试八股文——java基础(1)

本文探讨了面向过程与面向对象的编程思想,对比了两者优缺点,强调了面向对象的封装、继承和多态特性。深入讲解了HashMap的数据结构,特别是JDK1.8中数组、链表与红黑树的转换条件。同时,介绍了HashMap的扩容机制和哈希算法。此外,还讨论了sleep方法和wait方法在多线程中的区别,以及final、finalize、finally的区别。最后,文章阐述了Java中equals()与hashCode()的关系,= =与equals()的区别,以及JDK不同版本HashMap的变化和扩容机制原理。
摘要由CSDN通过智能技术生成

java面试八股文

1.面向过程与面向对象
面向过程(PO):把事情拆分成一个个的方法和数据,然后按照一定的顺序,执行完毕这些方法,等方法执行完了,事情就搞定了。因为每个方法都可以看作一个过程所以叫面向对象。
面向对象(OO):面向对象会把事物抽象成对象的概念,先抽象出对象,然后对对象赋一些属性和方法,然后让每个对象去执行自己的方法。问题得到解决。

面向过程与面向对象的优缺点对比:
面向过程:
优点:性能比面向对象高,因为不需要实例化对象。
缺点:可维护性差
面向对象:
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态的特性,可以设计出低耦合的系统,使系统更加灵活,更加易于维护。
缺点:性能比面向过程低。

面向对象编程的特性:封装、继承、多态
封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承:继承可以使用现有的类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
多态:一个类实例的相同方法可以有不同的表现形式。

2.深入理解HashMap与Hash算法
(1)HashMap的数据结构
JDK1.7及之前HashMap底层是数组和链表
在这里插入图片描述

JDK1.8及之后HashMap底层是数组和链表以及红黑树
在这里插入图片描述(2)JDK1.8什么时候链表会转化成红黑树?
HashMap在元素比较少的时候。也只会有数组+链表结构。
当链表的长度大于8,HashMap可能会树化(链表转变成红黑树),不过就是需要再满足一个条件,就是数组长度必须大于等于64(默认是16经过两次扩容<每次扩容*2>),链表才会转变成红黑树。否则只会触发数组的扩容。
在这里插入图片描述
源码(JDK1.9)根据key值计算hash值的方法

 static final int hash(Object key) {
   
        int h;
        return (key == null) ? 0 : (h = key.hashCode
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值