写点什么

2021 最新 Java 面试真题解析!1

发布于: 12 小时前

前言:

金九银十过了金三银四还会远嘛,本文后面分享面试题给正准备跳槽,准备找工作的你,这次面试字节跳动也是做了很多的准备,还好顺利拿到了 offer,特分享一下这次的 4 面技术面真题,可能有些记不全了,但多少也能够给一些正在面试字节或计划面试字节的朋友提供帮助。


之前学校活动有去过字节跳动公司总部参观,所以一直以来就蛮想进入字节工作的,被字节的企业文化和工作氛围所影响。字节作为发展速度最快的互联网公司,旗下的很多产品的用户都比肩 BAT 了,所以自己也算是字节的死忠粉了。


这次字节跳动的面试,给我的感触很深,意识到基础的重要性,这次字节共 4 面技术面+HR 面



可见 str1 str2 并不是同一个对象 所以第一个判断输出 false


而第二个 equals 方法在子类中重写之后就不判断地址是否相等(是否为同一个对象)了 只去关注内容是否相等!


所以输出 true


注意下面这一条注意事项哦!


4.equals 方法课堂练习

练习重写 equals 方法

回头要记得来练习哦~一共有三道练习题


【零基础 快速学Java】韩顺平 零基础30天学会Java_哔哩哔哩

小练

【零基础 快速学Java】韩顺平 零基础30天学会Java_哔哩哔哩_


【2】hashCode方法




之后在讲 Hash 表相关结构的时候要用到这个方法~


想学好hashCode的底层 需要用到集合的知识 所以我们先学习下hashCode表面的知识

1.方法用途

返回该对象的哈希码值



支持此方法是为了提高哈希表(eg:java.util.Hashtable提供的哈希表)的性能


老韩给出的几个小结——


【1】提高具有哈希结构的容器的效率


【2】两个引用如果指向的是同一个对象 那么哈希值肯定是一样的



【3】两个引用如果指向的不是同一个对象 那哈希值就不一样咯~


【4】哈希值是根据地址给分配的一个特殊的值 并不是等价于地址哦!(之前在数据结构中学过哈希表的同学有没有点儿印象~)


【5】案例演示 测试一下几个对象的地址值是否相同



public class hashCode {
public static void main(String[] args) {
AA aa = new AA();
AA2 aa2 = new AA2();//两个不同的引用
AA aa3 = aa;
AA aa4 = aa;
System.out.println(aa.hashCode());
System.out.println(aa2.hashCode());
System.out.println(aa3.hashCode());
System.out.println(aa4.hashCode());


}


}
class AA{}
class AA2{}
复制代码


结果如下:



【6】后面在讲集合的时候 如果需要的话 也会重写 hashCode 到时候还会提到的哦~


【3】toString方法




默认(也就是 Object 中的toString方法)返回 “全类名(包名+类名) + @ + 哈希值的十六进制”



而子类往往会重写toString方法 用于返回对象的属性信息



比如 String 类中 这个方法就会返回对象的字符串表示~


来举个例子


然后来测试下 Object 类的toString方法——



重写下toString方法试试——




这时候调用toString方法就可以输出对象的属性了


直接输出一个对象的时候 toString方法会被直接调用

嗯是的


就是这么个神奇的规则!



【4】finalize 方法





对象被回收时 系统自动调用该对象的 finalize 方法



子类可以重写该方法 做一些释放资源的操作

对象什么时候被回收?

正如上面所说


对象没有任何引用时 jvm就认为这个对象是一个垃圾对象 就会使用垃圾回收机制来销毁该对象 比如:



销毁该对象前 会先调用 finalize 方法


我们可以重写这个方法哦~



举个例子——



但是我们在运行方法之后会发现并没有输出以上的语句


【???】


这是因为垃圾回收器并不是时时刻刻在监控 一有一个垃圾就去回收!这样效率很低啦~


而这个垃圾回收机制是很复杂的 我们后面再去讲



我们可以通过 System.gc() 主动触发垃圾回收机制


像是呼叫保洁阿姨的操作



一般来说阿姨会过来帮你打扫垃圾



但是也有一定几率阿姨不过来~


主动触发之后 可以看到重写的 finalize 方法被调用了


小结

实际开发中 我们几乎不会运用 finalize 方法


所以——


学这个更多就是为了应付面试 QAQ


当然了 还是要学的哈!


9.断点调试(Debug)


============================================================================


【1】断点调试的用途




  • 开发中 查找错误的时候 用断点调试一步步地看源码执行的过程 从而发现错误所在!

  • 重要提示 断点调试的过程中 是运行状态 所以方法是根据对象的运行类型来执行的


【2】断点调试介绍



断点调试的步骤

在程序的某一行设置一个断电 调试时 程序运行到这一行就会停住



然后我们可以一步步地往下调试 调试过程中可以看到各个变量当前的值


出错的话 调试到出错的代码行即显示错误


我们停下并进行分析 就可以找到这个 Bug 了~

断点调试是程序员必须掌握的技能

而且除了 Debug 这个功能 断点调试也可以帮助我们查看 java 底层源代码的执行过程 提高程序员的 Java 水平


【3】断点调试六个案例




二刷课程的时候一步步地跟着做嗷~


【零基础 快速学Java】韩顺平 零基础30天学会Java_哔哩哔哩_


为啥我多态之后这里的课程练习都不做了呢



一个是因为假期想快速过一下课程



还有一个就是假期在家没有双屏 IDEA 和视频共存超级难受啦!



我们二刷见!


10.本章作业

最后

现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。


所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份 Java 并发体系思维导图,希望对你有所帮助。


资料获取方式:戳这里免费下载



用户头像

还未添加个人签名 2021.07.29 加入

还未添加个人简介

评论

发布
暂无评论
2021最新Java面试真题解析!1