💪💪💪欢迎订阅本专栏,持续更新,本专栏内容为我参加的各个公司面试的复盘专栏。将完整记录面试细节问题。
七牛云面试 实习后端Java开发 一面 [视频面试]
首先自我介绍
我是XXX,来自XXX,XXXX。
面试官提问:
1.先问几个基础题,循序渐进的来哈,谈谈Java⾃动装箱与拆箱
答:⾃动装箱与拆箱就是对象和基本数据类型之间进行转换。
装箱就是基本数据类型转换为包装器类型:int–>Integer,valueOf方法
拆箱就是⾃动将包装器类型转换为基本数据类型:Integer->int,intValue方法
2.Hashcode了解吧,有没有可能两个不相等的对象有相同的hashcode?
答:了解的,Hashcode就是根据对象的内存地址换算出的⼀个值,当集合要添加新的元素时,先调⽤这个元素的hashCode⽅法,就⼀下⼦能定位到它应该放置的物理位置上。如果这个位置上已经有元素了,就调⽤它的equals⽅法与新元素进⾏⽐较,相同的话就不存了,不相同就散列其它的地址。
有可能.在产⽣ hash 冲突时,两个不相等的对象就会有相同的 hashcode 值。
3. 说说怎么处理hash 冲突?
答:处理hash 冲突有几个方法:
拉链法:每个哈希表节点都有⼀个next指针,多个哈希表节点可以⽤next指针构成⼀个单向链表,被分配到同⼀个索引上的多个节点可以
⽤这个单向链表进⾏存储.
开放定址法:⼀旦发⽣了冲突,就去寻找下⼀个空的散列地址,只要散列表⾜够⼤,空的散列地址总能找到,并将记录存⼊
再哈希:⼜叫双哈希法,有多个不同的Hash函数.当发⽣冲突时,使⽤第⼆个,第三个….等哈希函数计算地址,直到⽆冲突
4. String、StringBuffer 和 StringBuilder 的区别是什么**?**
-
String 是只读字符串,它并不是基本数据类型,⽽是⼀个对象。
-
StringBuffer和StringBuilder是Java中用于处理可变字符串的两个类,它们之间的主要区别在于线程安全性和性能。
线程安全性:
- StringBuffer是线程安全的,所有的方法都使用了synchronized关键字进行同步,因此可以安全地在多线程环境下使用。
- StringBuilder:StringBuilder不是线程安全的,它的方法没有进行同步处理。
性能:
- StringBuffer:由于StringBuffer的方法都是同步的,这会导致在多线程环境下性能略低于StringBuilder。
- StringBuilder:StringBuilder没有进行同步处理,因此在单线程环境下执行速度更快。
5.重载和重写的区别
答:重写顾名思义就是重写一遍:
其实就是在⼦类中把⽗类本⾝有的⽅法重新写⼀遍。⼦类继承了⽗类原有的⽅法,但有时⼦类并不想原封不动的继承⽗类中的某个⽅法,所以在⽅法名,参数列表,返回类型(除过⼦类中⽅法的返回值是⽗类中⽅法返回值的
⼦类时)都相同的情况下,对⽅法体进⾏修改或重写,这就是重写。
重载:
在一个类中定义相同名字但参数不同的多个方法,调用时会根据不同的参数表达来选择对应的方法,重载方法可以修改返回类型,可以修改返回权限。
6.ArrayList和linkedList的区别
1.数据结构不同:
ArrayList:动态数组
linkedList:双向链表
2.效率不同:
随机访问:ArrayList》linkedList
增加和删除的效率:ArrayList《linkedList 链表的优势
内存空间的占用:ArrayList《linkedList linkedList 存储数据还存储了2个引用,一个指向前面,一个指向后面
7.HashMap和HashTable的区别
HashMap 是线程不安全的,在多线程并发的环境下,可能会产⽣死锁等问题,但是效率高
Hashtable 是线程安全的,它的每个⽅法上都有 synchronized 关键字,因此可直接⽤于多线程中。但是效率低
8.深拷贝和浅拷贝的区别是什么**?**
- 浅拷贝只复制对象的引用,而不复制引用指向的内容,因此多个对象共享相同的引用,修改一个对象会影响其他对象。
- 深拷贝复制对象及其引用指向的内容,每个对象都拥有各自独立的内存空间,修改一个对象不会影响其他对象。
- 浅拷贝适用于对不可变对象或可共享的对象进行复制,而深拷贝适用于需要独立拷贝的对象。
- 实现深拷贝的方法有多种,例如通过实现Cloneable接口并重写clone()方法,使用序列化和反序列化,或者手动递归复制对象及其引用指向的内容。
9.try catch finally,try⾥有return,finally还执⾏么?
无论如何,finally块中的代码总是会在try块结束后执行,除非发生了异常导致程序中断或虚拟机退出。finally块通常用于进行资源的清理和释放,以确保资源的正确关闭,例如关闭文件、释放数据库连接等。