要做最充分的准备,也要有最坏的打算
2020年对我来说是最难忘的一年,各种挫折,各种不如意,可是人生总归是要强撑着面对各种磨难,不管你是否准备好,亦或者是你是否愿意面对。
言归正传,8月和9月,我面了一些大公司,也面了一些中小公司,我这里做一个记录,希望对求职中的朋友有帮助。
简历
简历的话,其实也没什么好讲的,网上会有模板,照着模板写就行。
我的简历挺简单的,2页,第一页就是个人信息,然后按时间顺序简单描述了在每家公司做的一些项目;第二页就是项目经历,这里要劲量体现自己的技术水平和业务能力,这一块也是面试中,特别是二面三面重点要问的。
体会
我在面试的时候,比较怂,就是容易紧张,自己掌握的东西不能很好的表述出来,这点很致命,会让面试官觉得你掌握的不好。
不知道大家有没有“电话恐惧症”,我觉得我还挺严重的,因为疫情的原因,基本上公司的一面是通过电话面试或者视频面试的,我这人,一打电话就紧张,不知道为什么,现场面试我倒是很放松很放松。
总之,不管是电面,视频面还是现场面,一定要清楚清晰地表述自己的想法和观点,让面试官觉得你是掌握这些知识的。
手淘特价版
一面
这个HC是急招的。所以一面的时候都是围绕我简历中写的项目来展开,然后面试官会提出一些问题,看看你的一些解决方案,一方面看你解决问题的能力,另一方面也能看出来这项目是不是你自己做的。项目问完以后,面试官问了跨进程通信的问题,我讲了Binder相关的东西。
二面
二面是笔试题,一共三题,一共2个小时
第一题数据结构相关的
用数组实现队列:
push(x) -- 将一个元素放入队列的尾部。
pop() -- 从队列首部移除元素。
peek() -- 返回队列首部的元素。
empty() -- 返回队列是否为空。
第二题多线程相关
有 n 个文件的下载地址,实现这样一个逻辑功能:
要求同时下载他们,并在等它们全部下载完成之后一次性输出文件总大小(单位字节)。
举个例子: 输入 urls = ["gw.alicdn.com/tfs/TB1suNw…", "gw.alicdn.com/tfs/TB10R71…", "gw.alicdn.com/tfs/TB1hPq0…", "gw.alicdn.com/tfs/TB1FghF…"]
第三题程序设计题
实现一个客户端的key-value存储模块sdk,给出整体设计,包含内部子系统的职责、对外公开 API以及API的意图说明。
要求:
1.支持简单类型字段存储,即int、boolean、float、double、long等。
2.支持字节流存储。
3.要能持久化。
4.满足多业务方安全地使用。
5.尽可能高性能。
这三题前两题我是写出来了,第三题写的不好,写的太简单了,估计因为第三题挂了。
不过是我自己能力有限,2小时写3题,确实对我来说有点难度,所以挂的心服口服的。
滴滴
杭州的滴滴,给我的感觉就不是很正规,然后做的也是一些边缘业务,毕竟总部在北京。为什么说不正规呢,我3轮技术面都面完了,而且我个人觉得面的都没什么毛病,八九不离十的,我就一直等HR答复,一直到现在,都没有个HR的官方回复,内推我的小伙伴说他们HR是外包的(我第一次听说HR还有外包的),然后说可能是因为没有HC了,我真的当场吐血了,没HC面个鸡呢???
一面
gradle transform原理,执行时机
APT中AbstractProcessor的process执行时机
注解除了APT还有其他处理方式吗
handler怎么保证在主线程中执行
HashMap
hybrid如何通信
因为我项目经历里写了gradle插件,路由相关的东西,所以面试官一直在问路由的问题
二面
业务部门的负责人面的,就是介绍了项目是怎么做的,问我为什么通过字节码插桩的方式去做路由框架的初始化而不是其他方式,没问什么太多技术问题。
三面
应该是直接Leader面试,还是主要讲项目,然后一些PM的问题,怎么保证上线前功能是没问题的,个人规划之类的。
到这就没有消息了,后来内推我的同事说可能没HC了。。。我真的挺无语的。。。过了大概两个礼拜,内推我的同事说我挂了。我那时候已经懒得评价了,爱咋咋地。
网易云音乐
一面
网易云音乐怎么说呢,感觉一面的时候,面试官是照着题库问的,问的问题又很细节
View事件分发机制
viewgroup和view在dispatch时有什么不同
move和up事件的分发跟down为什么不同
生产者消费者模式
线程池中的线程什么时候创建
一个项目里,创建几个线程池?
ThreadLocal
Handler
Handler的postdelay是怎么样的
Handler.post一个runnable的时候是怎么执行的
view.post与handler.post的区别
LeakCanary实现原理
APP中如何设计线程池,需要几个线程池
Kotlin、jetpack
二面+三面
项目相关
1.为什么用ASM来进行字节码插桩
2.ASM的设计模式
3.ASM的原理
4.图片上传怎么做断点续传
gradle打包流程
1.打包整个流程是怎么样的
2.transform在哪一步(因为项目中有用到自定义transform)
3.aidl文件怎么处理
锁相关
1.Synchronized用法
2.什么是公平锁,什么是非公平锁
3.cas在哪里用到了
4.怎么判断项目中使用cas还是Synchronized
binder
1.数据拷贝几次
2.有0次拷贝的通信方式,为什么不用
动画
1.怎么实现类似于支付宝支付成功以后的画圆打钩动画
2.帧动画的弊端
3.view怎么监听Activity或者Fragment的生命周期
跨端通信(没用过)
1.weex、RN
Hybrid通信的原理
WebView调用js怎么调
面完以后面试官挺犹豫的看起来,第二天通知我挂了。不过大部分问题我都回答上来了,可能面试官觉得我不够深入吧,有些问题我没有回答的很深,这个怎么说呢,只能怪自己没有研究透吧。
有赞
一面
Glide缓存机制
App启动优化
热修复机制
JVM
JMM
OOM
LeakCanary原理
面有赞的时候我可以说很随意,因为前一天的面试,内推我的同事说我没问题的,然后我就飘了,但是结果是前一天的面试也没通过,有赞的也没通过。。。这件事教会我:
无论别人怎么说,你都要时刻保持悲观,直到事情有了百分百肯定的结果。
哈啰
一面
我面了1个半小时,先让我说了一个项目,我就说Router的,然后他问了Router相关的,我把我知道的全说了,然后他追问了降级
然后问了JMM JVM GC
问了线程池核心线程数需要怎么定(根据CPU决定,具体算法说不出来)
APP启动优化
countdownlatch原理
framework(我说只是偶尔瞟过几眼)
app安装过程(不会)
message和messagequeue是怎么工作的(不让我讲整个handler、looper,只问message和messagequeue,我讲完以后发散讲了IdleHandler)
IdleHandler怎么工作的
Https从客户端发出到服务端接受,中间流程(没说好,只说了SSL+HTTP,证书啥的讲的七七八八的)
为什么装了证书以后,抓包工具就能抓Https了?(面试官说我一直答非所问,我就认怂了,我说这方面比较薄弱)
哈啰怎么说呢,一方面是我自己电话恐惧症吧,有些项目没有很好的表述出来,问的其实挺深的,有些问题确实没去了解过,不过面试官给我的评价是线程池优化不了解,我就有点懵,毕竟线程池的就问了核心线程数这一个问题。。。
总结
其他公司的面试题我就不说了,我就记录没成功的这些吧,钉到耻辱柱上,永远记住,因为有些机会是我自己白白浪费掉的。
我自己的总结就是,1.自己准备不够充分但是自我感觉良好,2.电话里表述不清楚,3.没自信,4.不懂套路
希望看我这篇面经的人能好好认清自己,谦虚认真准备每一场面试。
最后祝大家能收到心仪的Offer~