作为一名资深技术宅,国漫和日番一直让我爱不释手。平时有了时间也不太爱出门,基本都是躺着用B站刷番,而这次去B站算是了却我之前的心愿。
一、面试
第一面(7.11)
7月10日,跟B站的HR进行了第一次通话,了解完公司的业务、技术、团队规模等情况后、就跟HR约了一面,面试时间是在11号下午,11号,我到了B站在杨浦的国正中心3号楼,在一楼大厅的机器人旁边等HR下来接我。然后HR带我到楼上面试会议室,先给了我两份试题,一份技术的,一份类似公务员行策考试的试题。
技术面的试题一共有10个,全是简答题。考了JVM、悲观锁、Android的四大组件、View的事件分发,Eventbus,Http2.0、NDK、设计模式、最后用了一个算法题压轴,总体感觉回答的还行,就是源码那个模块回答的不是太好。以后还要多看看源码之类的复习书籍。
第二面(7.17)
一面过后,HR让我回去等消息,终于在16号的晚上来了电话约二面,问我17号上午有没有时间,我答应二面时间后,便在17号上午来到B站的总部开始了第二轮面试。
这次走出来的是一个架构师和一个部门经理,问的问题还是比较简单,但是唯一不同的是比一面的问题做了延伸。总结下来差不多是JVM、翻转链表、hashmap、屏幕适配、双亲委托模式、Jetpack、Fragment、Handler、内存优化、动画机制二面延伸的问题有一个没有接触过,没有回答出来。一样回去等通
第三面(7.26)
等了一星期,当我以为要凉了时,结果在26号上午HR又给我来了电话,说下午的三面。命运总是爱捉弄人,总把一些原理上不可能的事情进行反转。三面的时候那个HR来了,跟她一起的还有一个级别较高的面试官(也就是我后来大部门的领导),问了我:音视频开发有过了解吗?我说有过了解,但是不是特别熟悉,中途还聊了一些职业规划、个人以后发展的想法。
二、拿到offer
三、B站面试复盘
哔哩哔哩—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、理论知识的梳理
因为面试时考验你原理性的知识,虽然我在腾讯工作了两年,但是毕竟是工作,很多理论知识都忘的一干二净,于是去面试前,我给自己做了一次完整的知识梳理。
(个人建议:去面试之前,给自己做一次完整的知识梳理是很有必要的,不仅加深了对理论知识的认知,还可以从中知晓自己对哪一模块的不了解,加深学习)
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)、类加载器
2、刷题
对于面试,刷题是非常重要的,刷题不仅能加深你对技术原理的认识,而且假如刷到当天的面试题血赚(不过,这种可能性非常小),但刷题还是很有必要的,起码加深了自己对原理、底层的理解。
这是我离职之后,在去bilibili之前在家里刷过的面试题,已整理成完整的PDF,需要的朋友点击(免费分享)即可领取
Android500道高阶面试题汇总
面试题答案
3、完善简历
简历该怎么写?
制作简历一定要学会突出重点,写出自己的优势,如你在上一家公司做出的贡献,就要写在显眼的位置进行突出,用颜色加深再好不过。如果你的优势是学历,那么学历就要放在第一页,因为HR在筛选简历时,一份简历往往只看那么几秒钟,你需要做到的就是让HR一眼看中你的简历。
很多程序员会在自己的项目或是技术栈里这样描述:在某项目,我负责xxxx,如重构,如优化。但实际上,面试官想要看到的是你在项目中,重构和优化带来了什么样的好处和效果,如果说性能提升了,那么提升的数据和情况是如何的,要一一描述出来,所以重点应该是“将项目做到了什么样子,做成了什么事”。
五、后话
上文所涉及到的**@Android知识点梳理复习资料+@Android500道高阶面试题汇总等PDF**,全部免费分享哟,只需要你动动手点个赞,支持我一下即可。
——可以直接点这里看到全部内容后免费打包分享