背景
2021年7月,我从工作两年的腾讯离职了。离职前同事帮我弄到了B站的内推,经过3面后,9月4号我拿着26K的offer顺利的进入B站。
作为一名资深技术宅,国漫和日番一直让我爱不释手。平时有了时间也不太爱出门,基本都是躺着用B站刷番,而这次去B站算是了却我之前的心愿。
面试经过
第一面
8月10日,跟B站的HR进行了第一次通话,了解完公司的业务、技术、团队规模等情况后、就跟HR约了一面,面试时间是在11号下午,11号,我到了B站在杨浦的国正中心3号楼,在一楼大厅的机器人旁边等HR下来接我。然后HR带我到楼上面试会议室,先给了我两份试题,一份技术的,一份类似公务员行策考试的试题。
技术面的试题一共有10个,全是简答题。考了JVM、悲观锁、Android的四大组件、View的事件分发,Eventbus,Http2.0、NDK、设计模式、最后用了一个算法题压轴,总体感觉回答的还行,就是源码那个模块回答的不是太好。以后还要多看看源码之类的复习书籍。
第二面
一面过后,HR让我回去等消息,终于在16号的晚上来了电话约二面,问我17号上午有没有时间,我答应二面时间后,便在17号上午来到B站的总部开始了第二轮面试。这次走出来的是一个架构师和一个部门经理,问的问题还是比较简单,但是唯一不同的是比一面的问题做了延伸。
下来差不多是JVM、翻转链表、hashmap、屏幕适配、双亲委托模式、Jetpack、Fragment、Handler、内存优化、动画机制二面延伸的问题有一个没有接触过,没有回答出来。一样回去等通知。
第三面
等了一星期,当我以为要凉了时,结果在26号上午HR又给我来了电话,说下午的三面。命运总是爱捉弄人,总把一些原理上不可能的事情进行反转。三面的时候那个HR来了,跟她一起的还有一个级别较高的面试官(也就是我后来大部门的领导),问了我:音视频开发有过了解吗?我说有过了解,但是不是特别熟悉,中途还聊了一些职业规划、个人以后发展的想法。
和大领导聊完后,HR最后一面,跟我谈薪资了,想压价了!!!这是要成了吗?我心里嘀咕,感觉面试的一般啊。结束后,让我回去时说是等下周给通知。
拿到offer
到了7.30上午,,B站的HR说面试通过了,和我说了薪资是26K,比我预期的少了3K,但是也还能接受,也就同意了!
B站面试复盘
B站面试总体感觉还是挺不错,没有问到非常底层的、但是面试的广度还是有的。感觉面试官很喜欢问JVM、还有一个音视频,基本三面的问题大部分都是音视频开发有关、以后还有加强音视频的学习呀!
哔哩哔哩—Android面经
下面是我对三面的面试题做的一个总结。
一面
- 说说自己的做过项目
- 描述一下JVM加载class文件的原理机制?
- 解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法
- 悲观锁的使用场景
- Activity A启动另一个Activity B会回调哪些方法?如果Activity B是完全透明呢?如果启动的是一个Dialog呢?
- 描述一下view事件的分发机制
- 简述一下多路复用的原理
- 解释一下 JNI 中全局引用和局部引用的区别和使用
- 单例如何防止反射漏洞攻击
- 简述EventBus的基本使用
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。
二面
- 在项目过程中,你出现过什么问题?
- JVM的永久代中会发生垃圾回收么?
- 给出一个单链表(不带头节点)和一个数K,请翻转此单链表?
- HashMap的扩容方式?负载因子是多少?为什是这么多?
- 今日头条的轻量级适配方案了解吗 & 给我说说原理
- 多线程的情况下,类的加载为什么不会出现重复加载的情况?
- Jetpack Lifecycle是用来干啥?
- 谈谈Fragment3种切换的方式以及区别 & 使用场景
- Handler导致的内存泄露你是如何解决的?
- 给我谈谈插值器 & 估值器 的作用
- 说说Activity & BroadcastReceiver & Serice最长可耗时时间为多少?
三面
- 你知道无论是Kotlin或者是Java,程序运行的主要入口都是main()方法,那么Android的main方法在哪里?
- 谈谈Android系统安装apk的过程?
- 为什么子线程不能更新UI?
- 对音视频开发有过了解吗?
- 常见的数字音频编码文件格式有哪些,并简述其特点
- 列举一些音频编解码常用的实现方案
- 预测编码的基本原理是什么
- 请叙述MPEG视频基本码流结构
- 请叙述AMR基本码流结构
面试建议
1.多刷题,刷题是为了提升自己的运气
运气在面试过程中是非常重要的,刷题的目的很简单,除了巩固我们所掌握的,另一个就是为了能提高在面试中我们的运气,如果能够问到一样的题是再好不过了,当然这个办法是适用于职级中低岗位。
2.掌握基础,注意深度
大厂面试最喜欢问两类问题,一类是基础,另一类就是深度。基础部分,无非就是我们所掌握的技术基础内容,基本上只要是有准备的都没有太大的问题。另一部分就是深度问题,大多涉及到自己之前的工作、项目,面试官所问的问题不仅仅是停留在表面那么简单,背后的原理是什么才是面试官想要问的。
3.刷面试题
完善简历
大家都知道去面试的过程中,简历对于面试有着至关重要的作用,一份观赏清晰的简历能帮助求职者在面试官心中有着非常不错的印象,仅仅从这一点来看,简历的完善就是非常有必要的。
简历该怎么写?
1、尽可能突出自己的优势
制作简历一定要学会突出重点,写出自己的优势,如你在上一家公司做出的贡献,就要写在显眼的位置进行突出,用颜色加深再好不过。
如果你的优势是学历,那么学历就要放在第一页,因为HR在筛选简历时,一份简历往往只看那么几秒钟,你需要做到的就是让HR一眼看中你的简历。2、描述自己做到了什么,而不是做了什么 很多程序员会在自己的项目或是技术栈里这样描述:在某项目,我负责xxxx,如重构,如优化。
但实际上,面试官想要看到的是你在项目中,重构和优化带来了什么样的好处和效果,如果说性能提升了,那么提升的数据和情况是如何的,要一一描述出来,所以重点应该是“将项目做到了什么样子,做成了什么事”。
完成这两点,一份漂亮的简历即可出炉。由于文章篇幅有限,文档资料内容较多,本可以提供链接下载,但无奈容易被和谐,所以全部存档,需要这些文档这里的朋友,可以点击我的【Gitee】,希望能够共同进步,共勉!
后话
总得来说,这次面试能拿到offer,也跟我之前的努力分不开的。其实做程序员圈子很重要,因为有了圈子可以让你少走弯路,拓宽人脉,拓展思路,学习他人失败和成功的经验,获取最新经验与信息,才能抱团取暖!所以说,圈子的高度很大部分决定人生的高度,大家努力奋斗吧,与之共勉!