再见,Tencent ! 你好,bilibili!

2020年6月,我从工作两年的腾讯离职了。离职前同事帮我弄到了B站的内推,经过3面后,8月4号我拿着26K的offer顺利的进入B站。

image

作为一名资深技术宅,国漫和日番一直让我爱不释手。平时有了时间也不太爱出门,基本都是躺着用B站刷番,而这次去B站算是了却我之前的心愿。

一、面试

第一面(7.11)

7月10日,跟B站的HR进行了第一次通话,了解完公司的业务、技术、团队规模等情况后、就跟HR约了一面,面试时间是在11号下午,11号,我到了B站在杨浦的国正中心3号楼,在一楼大厅的机器人旁边等HR下来接我。然后HR带我到楼上面试会议室,先给了我两份试题,一份技术的,一份类似公务员行策考试的试题。

技术面的试题一共有10个,全是简答题。考了JVM、悲观锁、Android的四大组件、View的事件分发,Eventbus,Http2.0、NDK、设计模式、最后用了一个算法题压轴,总体感觉回答的还行,就是源码那个模块回答的不是太好。以后还要多看看源码之类的复习书籍。

image

第二面(7.17)

一面过后,HR让我回去等消息,终于在16号的晚上来了电话约二面,问我17号上午有没有时间,我答应二面时间后,便在17号上午来到B站的总部开始了第二轮面试。

这次走出来的是一个架构师和一个部门经理,问的问题还是比较简单,但是唯一不同的是比一面的问题做了延伸。总结下来差不多是JVM、翻转链表、hashmap、屏幕适配、双亲委托模式、Jetpack、Fragment、Handler、内存优化、动画机制二面延伸的问题有一个没有接触过,没有回答出来。一样回去等通

第三面(7.26)

等了一星期,当我以为要凉了时,结果在26号上午HR又给我来了电话,说下午的三面。命运总是爱捉弄人,总把一些原理上不可能的事情进行反转。三面的时候那个HR来了,跟她一起的还有一个级别较高的面试官(也就是我后来大部门的领导),问了我:音视频开发有过了解吗?我说有过了解,但是不是特别熟悉,中途还聊了一些职业规划、个人以后发展的想法。

和大领导聊完后,HR最后一面,跟我谈薪资了,想压价了!!!这是要成了吗?我心里嘀咕,感觉面试的一般啊。结束后,让我回去时说是等下周给通知。

二、拿到offer

到了7.30上午,,B站的HR说面试通过了,和我说了薪资是26K,比我预期的少了3K,但是也还能接受,也就同意了!过了半个小时,邮件便下来了!

image

三、B站面试复盘

B站面试总体感觉还是挺不错,没有问到非常底层的、但是面试的广度还是有的。感觉面试官很喜欢问JVM、还有一个音视频,基本三面的问题大部分都是音视频开发有关、以后还有加强音视频的学习呀!

哔哩哔哩—Android面经

一面

  1. 说说自己的做过项目

  2. 描述一下JVM加载class文件的原理机制?

  3. 解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法

  4. 悲观锁的使用场景

  5. Activity A启动另一个Activity B会回调哪些方法?如果Activity B是完全透明呢?如果启动的是一个Dialog呢?

  6. 描述一下view事件的分发机制

  7. 简述一下多路复用的原理

  8. 解释一下 JNI 中全局引用和局部引用的区别和使用

  9. 单例如何防止反射漏洞攻击

  10. 简述EventBus的基本使用

  11. 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。

二面

  1. 在项目过程中,你出现过什么问题?

  2. JVM的永久代中会发生垃圾回收么?

  3. 给出一个单链表(不带头节点)和一个数K,请翻转此单链表?

  4. HashMap的扩容方式?负载因子是多少?为什是这么多?

  5. 今日头条的轻量级适配方案了解吗 & 给我说说原理

  6. 多线程的情况下,类的加载为什么不会出现重复加载的情况?

  7. Jetpack Lifecycle是用来干啥?

  8. 谈谈Fragment3种切换的方式以及区别 & 使用场景

  9. Handler导致的内存泄露你是如何解决的?

  10. 给我谈谈插值器 & 估值器 的作用

  11. 说说Activity & BroadcastReceiver & Serice最长可耗时时间为多少?

三面

  1. 你知道无论是Kotlin或者是Java,程序运行的主要入口都是main()方法,那么Android的main方法在哪里?

  2. 谈谈Android系统安装apk的过程?

  3. 为什么子线程不能更新UI?

  4. 对音视频开发有过了解吗?

  5. 常见的数字音频编码文件格式有哪些,并简述其特点

  6. 列举一些音频编解码常用的实现方案

  7. 预测编码的基本原理是什么

  8. 请叙述MPEG视频基本码流结构

  9. 请叙述AMR基本码流结构

四、面试前我做的准备

1、理论知识的梳理

因为面试时考验你原理性的知识,虽然我在腾讯工作了两年,但是毕竟是工作,很多理论知识都忘的一干二净,于是去面试前,我利用收集来的字节大牛的面试笔记给自己做了一次完整的知识梳理。

(个人建议:去面试之前,给自己做一次完整的知识梳理是很有必要的,不仅加深了对理论知识的认知,还可以从中知晓自己对哪一模块的不了解,加深学习)

Java基础方面:JVM、String、内部类、多态、抽象和接口、集合框架(Hashmap、Arraylist)、单例、线程、Synchronized、Look锁、动态代理、引用
Android基础方面:四大组件、View、进程、Bitmap、屏幕适配、消息机制、线程异步、WebView。
Android扩展方面:ART、Apk优化、Hook、Proguard、架构(MVC/MVP/MVVM)、Jetpack、NDK开发。
Android源码方面:Leakcanary、Eventbus
设计模式方面:面向对象六大原则、工厂模式、单例模式、建造者模式、观察者模式、适配器模式、策略模式、代理模式
算法方面:排序、二叉树、链表、栈和队列、二分、hash表、堆、数组/双指针、字符串处理、动态规划
网络知识:Http(缓存、Https、Http2.0)、TCP(三次握手四次挥手、socket)、类加载器

这是我面试前复习的Android复习资料,已整理成完整的PDF,需要的朋友————此处加入即可免费打包获取

image
image
image
image
image
image

2、刷题

对于面试,刷题是非常重要的,刷题不仅能加深你对技术原理的认识,而且假如刷到当天的面试题血赚(不过,这种可能性非常小),但刷题还是很有必要的,起码加深了自己对原理、底层的理解。

这是我离职之后,在去bilibili之前在家里刷过的面试题,已整理成完整的PDF,需要的朋友————此处加入即可免费打包获取

Android500道高阶面试题汇总

image
image
image
image

面试题答案

image

3、完善简历

大家都知道去面试的过程中,简历对于面试有着至关重要的作用,一份观赏清晰的简历能帮助求职者在面试官心中有着非常不错的印象,仅仅从这一点来看,简历的完善就是非常有必要的。

简历该怎么写?

1、尽可能突出自己的优势

制作简历一定要学会突出重点,写出自己的优势,如你在上一家公司做出的贡献,就要写在显眼的位置进行突出,用颜色加深再好不过。如果你的优势是学历,那么学历就要放在第一页,因为HR在筛选简历时,一份简历往往只看那么几秒钟,你需要做到的就是让HR一眼看中你的简历。

2、描述自己做到了什么,而不是做了什么

很多程序员会在自己的项目或是技术栈里这样描述:在某项目,我负责xxxx,如重构,如优化。但实际上,面试官想要看到的是你在项目中,重构和优化带来了什么样的好处和效果,如果说性能提升了,那么提升的数据和情况是如何的,要一一描述出来,所以重点应该是“将项目做到了什么样子,做成了什么事”。

完成这两点,一份漂亮的简历即可出炉。

五、后话

总得来说,这次面试能拿到offer,也跟我之前的努力分不开的。其实做程序员圈子很重要,因为有了圈子可以让你少走弯路,拓宽人脉,拓展思路,学习他人失败和成功的经验,获取最新经验与信息,才能抱团取暖!所以说,圈子的高度很大部分决定人生的高度!

image

大家努力奋斗吧!与之共勉。

上文所涉及到的字节大牛的@Android知识点梳理复习资料+@Android500道高阶面试题汇总等PDF,全部免费分享哟,只需要你动动手点个赞,支持我一下即可。

——————此处加入即可免费打包获取

推荐阅读更多精彩内容