2022届java后台开发面经

大华2021-09-27(大华面小白–老惨了)

一面

1.自我介绍:基本信息,籍贯,出生年月,个人校园经历
2.有无实习经验,没有,只有学校生产实习(博客项目)
3.博客项目具体实现
4.学校学习过程中比较有难度的,有意思,有价值的计算机技术
5.手写过的项目(感觉没有项目就不配找工作)
6.自己有没有搭建过spring,springMVC框架之类的?
7.多态的理解、Java中怎么实现多态(最好就是举个例子细说一下)
8.多态跟接口有啥关系?多个实现类实现了同一个接口叫多态吗?
9.java集合对ArrayList排序怎么做?
10.hashmap底层结构
11.jdk用那种方式实现hashmap
12.hashmap中key值重复hashmap会咋样(我说我不会,你觉得会咋样,我想了半天说会更新,面试官说更新是对的,是怎么更新的)
13.比如说1和1的位置key值重复跟1和3的位置key值重复有啥区别(就是key’值重复和哈希冲突两种情况有啥区别)
14.key是一样的算是哈希冲突吗
15.linkedHashMap有没有接触过
16.用java目前的数据结构去实现一个java的堆,实现一个栈?(我不知道,我说的是用两个栈实现队列哈哈)

总结

7.Java中怎么实现多态

① 继承的存在;(继承是多态的基础,没有继承就没有多态)。
②子类重写父类的方法。(多态下会调用子类重写后的方法)。
③父类引用变量指向子类对象。(涉及子类到父类的类型转换)。
最后使用父类的引用变量调用子类重写的方法即可实现多态
重载与重写是 Java 多态性的不同表现。
  重写是父类与子类之间多态性的表现,在运行时起作用(动态多态性,譬如实现动态绑定)
  而重载是一个类中多态性的表现,在编译时起作用(静态多态性,譬如实现静态绑定)。

8.接口与多态

Java的多态性体现在子类父类的继承关系,以及接口和实现类的实现关系上.具体表现为,父类引用变量可以引用子类对象,接口的引用变量可以引用实现类对象…
为什么接口最能体现多态?
因为接口和实现类的关系,以及各个实现类之间的关系,不像父类和子类之间,子类和其他子类之间的要求那么严格…
举个例子,拿"吃饭"这个method举例…
如果把这个method声明在父类中,那么子类必须要和父类是"同类",父类是人,那么"吃饭"这个功能就被限制死了,只能被人来完成…
如果把这个功能声明在"接口"中,那么完成这个功能的不光能是人,可以狗,可以是猫,可以是任何东西,只要它能"吃饭"…
这个就最大限度地体现了"多(种形)态"…
接口的多态性,就体现在只关心"你能做什么",而不关心"你是谁"…
多态并不只是通过接口才可以实现,父类也可以、实际上接口也是类,只不过是一个所有方法都是抽象方法的类,是一个完完全全的抽象类。

9. java集合对ArrayList排序怎么做

可以利用Collections集合工具类中的方法进行排序
public static <T> void sort(List<T> list):将集合中的元素按默认规则(升序)排序
public static <T> void sort(List<T> list,Comparator<? super T>:将集合中的元素按照指定规则排序
①如果存放的是整数或者字符串:Collections.sort(list)
如果是自定义的对象,Collections.sort(List list)中的list参数必须要有明确的排序规则,所以要对存放了自定义对象的list集合进行排序,需要该对象实现Comparable接口,并实现接口唯一的方法compareTo(T o),按照我们自定义的规则进行排序。例如自定义Person类,按照年龄升序排序
②第二种方法中的第二个参数是需要实现Comparator接口,需要实现接口中的compare(T o1,T o2)方法,一般对自定义对象排序的时候可采取这种方法。
Comparator和Comparable接口的区别在于,Comparator接口相当于第三方的裁判,对传入的两个参数进行比较;Comparable接口是用自身(this)与参数进行比较。

11.jdk用那种方式实现hashmap

如果新添加的key-value组成的Entry跟已经存在的key-value组成的Entry的hash一样,而且通过equals比较两者的Key返回的是false。那么,它们都会被存放在上述table这个Entry数组相同位置上,这两者会形成链表结构,新增的在表头,先加的在表尾。
所以总的来说,HashMap其实就是一个数组,如果没有指定初始容量大小,则这个数组初始长度就是16,数组中每个元素都是Entry组成的链表结构。新增key-value到HashMap时,先通过key计算出其hash值,通过hash值得到这对key-value应该存入数组中的哪个位置(也就是数组的下标),如果该下标的位置上已经存放了一对或多对key-value,则遍历并通过equals方法比较key是否返回true,如果是,则替换;如果否,则新的key-value(就是一个Entry)跟该下标的位置上已经存放Entry组成链表结构,新增的在链头。
由于key-value存放在数组中的下标是通过key的hash值得到的,所以HashMap并不保证顺序。而且上述提到一个叫负载因子的东西,新HashMap初始化时默认是0.75,也就是说,当这个HashMap储存元素个数达到了总容量(也就是数组的长度)的0.75时,HashMap就是自动扩容为原容量的2倍。就是默认情况下,HashMap储存元素个数达到了160.75=12时,HashMap的容量大小会扩展成162=32。然后重新计算每个元素在数组中的位置。所以如果我们使用HashMap时预知到存放键值对的个数时,给定初始容量大小,就可以避免扩容造成的性能消耗。

12.hashmap中key值重复hashmap会咋样

如果原本已经存在对应的key,则直接改变对应的value,并返回旧的value,而在判断key是否存在的时候是先比较key的hashCode,再比较相等或equals的。
代码中比较的对应Map.Entry的hashCode和key的hashCode,而实际上Map.Entry的hashCode其实就是其存放key的hashCode。而如果对应的key原本不存在的话将调用addEntry将对应的key-value添加到Map中。addEntry传递的参数hash就是对应key的hashCode。
实现引用对象作为keys的唯一性
通过对put()方法的研究,我们可以发现,判断key是否存在的时候是先比较key的hashCode,再比较相等或equals的,所以重写hashCode()和equals()方法即可实现覆盖keys的引用(指向具有相同实例变量的对象)。
重写这两个方法之后就可以覆盖重复的引用对象,如果需要对value进行叠加,调用put()方法之前用containsKey()方法判断是否有重复的键值,如果有,则用get()方法获取原有的value,再加上新加入的value即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值