七牛云面试复盘-实习后端Java开发 一面复盘 【已通过】

本文分享了作者参加七牛云实习后端Java开发一面的面试经历,涵盖Java基础知识如自动装箱拆箱、哈希码、处理哈希冲突、String与StringBuilder的区别、重载与重写、ArrayList与LinkedList的区别、HashMap与HashTable的区别、深拷贝与浅拷贝、以及List、Set、Map的区别等核心知识点。
摘要由CSDN通过智能技术生成

💪💪💪欢迎订阅本专栏,持续更新,本专栏内容为我参加的各个公司面试的复盘专栏。将完整记录面试细节问题。
在这里插入图片描述

七牛云面试 实习后端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. StringStringBufferStringBuilder 的区别是什么**?**

  • String 是只读字符串,它并不是基本数据类型,⽽是⼀个对象。

  • StringBuffer和StringBuilder是Java中用于处理可变字符串的两个类,它们之间的主要区别在于线程安全性和性能。

    线程安全性:

    • StringBuffer是线程安全的,所有的方法都使用了synchronized关键字进行同步,因此可以安全地在多线程环境下使用。
    • StringBuilder:StringBuilder不是线程安全的,它的方法没有进行同步处理。

    性能:

    • StringBuffer:由于StringBuffer的方法都是同步的,这会导致在多线程环境下性能略低于StringBuilder。
    • StringBuilder:StringBuilder没有进行同步处理,因此在单线程环境下执行速度更快。

5.重载和重写的区别

答:重写顾名思义就是重写一遍:

其实就是在⼦类中把⽗类本⾝有的⽅法重新写⼀遍。⼦类继承了⽗类原有的⽅法,但有时⼦类并不想原封不动的继承⽗类中的某个⽅法,所以在⽅法名,参数列表,返回类型(除过⼦类中⽅法的返回值是⽗类中⽅法返回值的

⼦类时)都相同的情况下,对⽅法体进⾏修改或重写,这就是重写。

image-20230705005244501

重载:

在一个类中定义相同名字但参数不同的多个方法,调用时会根据不同的参数表达来选择对应的方法,重载方法可以修改返回类型,可以修改返回权限。

6.ArrayListlinkedList的区别

1.数据结构不同:

ArrayList:动态数组

linkedList:双向链表

2.效率不同:

随机访问:ArrayList》linkedList

增加和删除的效率:ArrayList《linkedList 链表的优势

内存空间的占用:ArrayList《linkedList linkedList 存储数据还存储了2个引用,一个指向前面,一个指向后面

7.HashMapHashTable的区别

HashMap 是线程不安全的,在多线程并发的环境下,可能会产⽣死锁等问题,但是效率高

Hashtable 是线程安全的,它的每个⽅法上都有 synchronized 关键字,因此可直接⽤于多线程中。但是效率低

8.深拷贝和浅拷贝的区别是什么**?**

  • 浅拷贝只复制对象的引用,而不复制引用指向的内容,因此多个对象共享相同的引用,修改一个对象会影响其他对象。
  • 深拷贝复制对象及其引用指向的内容,每个对象都拥有各自独立的内存空间,修改一个对象不会影响其他对象。
  • 浅拷贝适用于对不可变对象或可共享的对象进行复制,而深拷贝适用于需要独立拷贝的对象。
  • 实现深拷贝的方法有多种,例如通过实现Cloneable接口并重写clone()方法,使用序列化和反序列化,或者手动递归复制对象及其引用指向的内容。

9.try catch finallytry⾥有returnfinally还执⾏么?

无论如何,finally块中的代码总是会在try块结束后执行,除非发生了异常导致程序中断或虚拟机退出。finally块通常用于进行资源的清理和释放,以确保资源的正确关闭,例如关闭文件、释放数据库连接等。

10.说说List,Set,Map三者的区别?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值