2020.04.09 腾讯音乐后台开发一面(第一次面试,感觉不行,有大佬指点吗)
背景
2020.04.03官网投递简历,岗位 :java后台开发。本人本科硕士期间都不是计算机相关专业,非科班出身,且java是在19年11月左右才开始入门,之前用过C++、C,也只是简单用来做项目。
面试官人感觉说话很温柔,很奈斯,没有出现手撕代码环节。
我觉得问我真的是很基础得东西,事后回盘都想清楚了一点。还是在于我太菜。
面试问题
1.自我介绍,简单介绍一些科研项目背景。
2.DDoS攻击原理(因为这个和我项目相关才问的吧);
3.根据上个问题就引到了计算机网络方面,介绍一些TCP三次握手原理;
4.流量控制
答了一下基本概念
5.流量控制窗口发送报文后变小了如何恢复?
答了一下收到了ACK报文之后会窗口前进。
6.慢启动。
7.丢包速度会怎么下降(发送了ack报文对方未响应,会速度下降吗)
这题我答了重发机制。(是不是想让我回答拥塞避免得窗口阈值减少和窗口大小减少的形式啊)
8.网络通信中积累了多个才发送,作用,节省了什么?
我知道这题是答延时ack相关的,但是一时想不起来怎么答,就答的特别口语化,还没说清楚。
问节省时间还是空间,没回答上。
9.根据我的项目,问技术架构,和表设计。
技术架构应该是要问Spring MVC,但是我真的就只围绕我的业务功能在答,没有具体介绍Spring MVC;(太紧张了,真的是浪费了这道题)
表结构设计:这个答的不好,问我索引是建立在什么数据上面(没考虑这么多,瞎答)
10.引申到了数据库,问ACID;
11.隔离性的实现方式。
加锁,分别介绍了两种数据库引擎的加锁方式的区别:行级锁、表级锁;
12.问索引结构有哪些?
答了非聚簇索引和聚簇索引,然后扯了一下B+树;
13.通过索引查找时间复杂度?
我答的二分查找时间O(logN);
14.正常B+树有多少层。
我答得是4层,我当时想的可能是3-4层,反正往多了说,我大概看过怎么算的,当时忘记了。
参考答案:为什么生产环境中B+树的高度总是3-4层?https://zhuanlan.zhihu.com/p/86137284
15.B+树层数扩大的影响。
我答的大概是数据容量肯定会更多,然后我查询花的时间很更多。
面试官又补了主要消耗在什么地方,内存还是cpu,我当时脑子一热答了内存,现在想想层数增加不就是读取磁盘IO次数更多吗。
16.介绍一下java堆(垃圾回收)
我先介绍了一下垃圾回收方法:标记清除、标记整理、复制、分代收集。然后就引入到了年轻代、年老代的具体划分。说了一下不同代采用的方法。
17.垃圾回收会停顿吗?
这题答STW,我知道,我答了垃圾收集都会导致STW,影响程序性能。然后有提了一下串行、并行、CMS垃圾收集器,说不同的垃圾收集器会导致不同的STW时间,比如CMS收集器,会在初始标记、重新标记期间导致STW。
应该在补充一个G1收集器的。
18.若年老代空间够放入年轻代对象时,将年轻代的对象迁移入年老代一定能迁入吗?
本来我想,空间够为啥不行,答了个能啊。
面试官提示了一下,空间一定都连续吗?
这才想起来,老年代采用标记清除的话其空间不连续,可能放不下大的对象。
19.接上个问题,年老代放不下怎么处理。
我答的是进行垃圾清理,比如通过标记整理法,将存活对象放在同一边,这样就有连续空间够放对象了。
20.HashMap数据结构。
数组+链表
21.Hashcode一样,对象是否一样,为什么。
不一样,我答是因为hashcode计算的方式导致的。
面试官问,怎样判断是否为同一key。我答若出现hash冲突,则找到其链表位置,比较链表中的key是否与当前值相等,相等则覆盖,不等则添加在后面。
22.Hash查询效率,时间复杂度。
我先答得O(n),就是遍历链表嘛,后面又补了一句,jdk1.8后链表超过8会优化为红黑树,树的话就O(logN);
23.为什么优化为红黑树,而不是查找树?
不知道。。。
参考学习一下:
(1)AVL以及红黑树是高度平衡的树数据结构。它们非常相似,真正的区别在于在任何添加/删除操作时完成的旋转操作次数。
(2)两种实现都缩放为a O(lg N),其中N是叶子的数量,但实际上AVL树在查找密集型任务上更快:利用更好的平衡,树遍历平均更短。另一方面,插入和删除方面,AVL树速度较慢:需要更高的旋转次数才能在修改时正确地重新平衡数据结构。
(3)在AVL树中,从根到任何叶子的最短路径和最长路径之间的差异最多为1。在红黑树中,差异可以是2倍。
(4)两个都给O(log n)查找,但平衡AVL树可能需要O(log n)旋转,而红黑树将需要最多两次旋转使其达到平衡(尽管可能需要检查O(log n)节点以确定旋转的位置)。旋转本身是O(1)操作,因为你只是移动指针。
https://blog.csdn.net/weixin_43258908/article/details/89174471
24.equals方法,equals方法相等,hashcode相等吗。
这块之前没咋看,补充一下。
https://www.cnblogs.com/duanxz/p/3724275.html
25.比如对 A B C 三个值进行hash计算,存入HashMap中,若改了C,再进行hashcode还能找到HashMap中原记录吗?
当时没不太懂啥意思
26.多态 重写重载。
多态就是运行期间才确定一个引用变量具体指向哪。
重写:函数名一样,参数列表什么都不一样,本质上就是2个函数。
重写:父子类间方法的作用不同,通过向上转型可以使得某对象调用父类、子类的方法。
面试官又补了一问:多态的好处??
我也不知道咋说,答得十分口语化,精简代码、功能丰富,又扯了一下重写。
27.了解并发中同步吗?
不了解,并发是我最头疼得地方,看不懂啊,难啃。直接pass掉了。
28.学习中的困难和难点?
第一次面试我也不知道答啥套路,老老实实说理论学习上实践验证不够,实践是检验真理的唯一标准。
29.你觉得你比其他人的优势在于什么?
由于我简历上嵌入式、C++、python都沾了点边,所以我就答得我学习能力强。
总结
2021届毕业,2020年找工作第一次面试就献给了腾讯音乐。有的东西会,但是没讲出来。有的内容真的只浮于看了几篇面经的程度,稍微深入一点就不知所措了(但是事后仔细想想概念性东西,也能知道一点,答得时候就答错,说明面试过程不够沉着冷静,乱了阵脚)。
目前操作系统、并发这两块还没啃,不知道咋啃下来,有了解得兄弟姐妹们支个招啊。
还要目前缺乏知识点得深度,太浮于表面了,有没有大佬指定一下如何在这方面提高,指条明路。