快手、饿了么、小红书等 14 家互联网企业面经分享,感谢 60 多位面试官让我更加认清我自己
公司:快陪练
还是先填个人信息表格,其实我不太喜欢这种方式,一上来就是个人的详细信息,你又没有给我发 offer,我也没决定要来,而且还没技术面。不过既然来了就要尊重公司的办事方式,我只简单写了一下我觉得可以告诉公司的个人信息。然后做了一份笔试题,一道算法和一些网络方面的知识,不难。快陪练整体的环境并不是很好,环境很嘈杂,而且我是在门口面试的,很乱。
一面
MVC、MVP 和 MVVM 的原理和区别
设计的六大基础原则
使用 UML 画一下访问者设计模式
二面
先聊了聊为什么离开现在公司,毕竟现在这么火
我做的项目中的一些解决方案,组件化、字节码注入、包体积的极致优化
直播的架构设计
三面
设计一个上传日志的大小,涉及到,性能、文件大小、怎样压缩、时机、TopK 问题等聊了聊在字节跳动做的事情
总结
是一家创业公司,给的薪资还是挺不错的,但是由于是 996,没有加班工资,多出来的钱可能就是加班工资吧,后面听 hr 说公司正在打算取消 996
公司:探探
是通过脉脉上网红马映怡推荐的,马映怡之前在字节跳动,今年 4 月份到了探探,在脉脉找到了我,正好我有出去看看的意向,就约了时间去面试,探探的办公环境还是比较好的。
一面
OpenGL 一些知识,顶点着色器、片元着色器的工作原理,什么是 VBO(这个没想起来),以及 shader 的一些简单问题
View 的事件传递机制
包体积优化
JVM 相关知识,Dalvik 和 ART 的区别
组件化的实现方案
算法题,ViewGroup 的层级深度,转换为二叉树的层级深度
二面
二面面试官,比较注重思维,我理解为聪不聪明的意思,有点脑筋急转弯的意思,要求的最简单有效的方法。
RecyclerView 防止内存 OOM 的一道题,充分利用自身的缓存机制,可能我始终没理解问题所在,虽然给出解决方案,但是面试官不满意,太繁琐
讨论 LRUcache 的实现和时间复杂度
三面
cto 面试
聊了一下抖音发展的过程中我的角色,做过什么事情,有什么收益
在华为的一些经历,为什么离开华为
聊了一到算法题,查找两个字符串的交集和字符串 1 中有字符串 2 中没有的问题。
四面
这次主要是聊一下我将要做的工作,以及让其他面试官再次了解一下我,因为评级比较高,所以需要谨慎点。
总结
整体来说探探发展还是不错,尤其近两年要上市(和陌陌签了对赌协议),环境也不错,管三餐,加班不严重,双休,工资也给力,但是也是由于近两年要上市,所以要做的东西还是比较多和急,需要你有一定的能力。很尴尬的是在给我 offer 的第二周,探探就被 Android 市场下架了。
公司:猿题库
我是在 boss 投递的猿题库的 Android 开发岗位,结果 hr 小姐姐把我当成了 server 开发,先进来一位 server 的童鞋,让我写了一到算法题(二叉树的镜像),然后看看我的简历问我,是不是面试 android 的,我说是,她尴尬的说我是 server 面试官,然后赶紧与 hr 沟通,调整成为 Android。猿题库面试应该是有硬性的时间指标,应该是每一轮面试都要差不多 1 个小时,并且会出 1~2 道算法题。
一面
热修复,主要说了 ClassLoader 的方式和 Rubost 的插装方式,重点介绍了 Rubost 的原理。
实现直播礼物的一些技术选型,和播放带有 alpha 通道 MP4 的解决方案
怎么实现字节码注入
抖音组件的探索,SPI 到字节码注入,优缺点。
接下来就是两道算法题
1. String 字符串的数字相加
2. 使用三个线程顺序打印有序的数组
提问环节
二面
包体积优化:静态 Lint,Proguard,AndResGuard 和删除 R.java 中的所有字段,删除 access 方法,在 gradle 的 transform 阶段将压缩 png 和 jpeg,使用 google 开源的 redex 方案,每种方案的原理以及优缺点
MVVM-livedata 的实现原理
属性动画的原理,这里没看过,不太清楚
Kotlin 写一个 let 的扩展函数,大体写了一下代码。
算法,可能是我写的太慢了,所以就只有一道
1. 给定一个有序的数组和目标数,找出与目标数最近接的 index,要求复杂度是 log(n)的时间复杂度
三面
三面就比较轻松了,面试官一直乐呵呵的,又问了一下 alpha 视频的解决方案,然后聊了聊为什么要离开这么火的项目,问了问我的经历之类的,最后写了两道算法题
二叉树的深度和广度,要求一次遍历给定一个二叉树和一个目标数,在二叉树中是否存在一条路径的所有节点的和与目标数是相同的 case,并且打印。
总结
效率并不是很高,而且并不主动,可能是跟我要的薪水太高有关系,后面通过询问才知道,技术面试是通过了,可能字节跳动本来薪水就很高,我再跳过来,猿辅导考虑到我的工作年限和年龄,会倒挂一大批人,所以只能平薪过来,而且这样知道我肯定不会来,就没主动跟我说。
整个面试环节总体来说还可以,但是就是效率不高,也可能是我运气不好,我是 4:10 到猿题库的,然后在前台等了 20 所分钟,hr 才来,说了刚才在电话会议耽误了,这个理解,然后等待面试又等了 10 多分钟,来了 server 的面试童鞋,写了道算法题,重新调整到 Android 面试,又等了 15 分钟,真正 Android 面试开始在 5:10 左右,面试完成后基本到了 8:30 了。对自己的表现基本满意,就是好久不手写代码,有点生疏,写的比较慢,大多数问题和答案都得到了面试的认可,对一些知识点没有复习到,其实我是这样认为的,并不是所有的问题或者知识都需要知道,你只需要有 1~2 个方面了解的很透彻,得到面试官的认可就行。
公司:趣头条
一面
在抖音上显示自己做的功能,框架的搭建,实现原理,所做的优化点等。
组件化的实现,为什么做组件化,不同实现的优缺点。
hashmap 的实现原理
view 的优化,减少层级,异步加载,x2c 框架引入,优缺点,textview 的优化。
mp4 播放 alpha 视频实现的原理
一面面试官大概聊了 1 个小时左右,没让我写算法,细究原理和细节,非常仔细。
二面
冷启优化的一些方案。
数据驱动业务的理解,怎么做,和 pm 产生分歧怎么解决。
我所有做的优化的收益是什么,有什么数据支撑。
事件分发机制,举了一个具体的例子来解决。
http 的一些问题,1.1 和 2.0 区别,心跳机制,https 怎么建立链接,怎么进行数据加密等。
为什么离开抖音,职业发展,诉求等。
聊了大概一个小时,面试官的思路相对独特,不是为做技术而做技术,技术始终要服务于业务,我非常认可。
总结
趣头条北京位于海淀,位置不靠近地铁,需要步行一段时间,整体的环境也一般,不过效率挺高的,在面试完的第二天就给我发 offer 了,面试流程也相对较少。对趣头条的营收模式看的不是很清楚,类似发钱看新闻,但是现在头条也再做这个,趣头条能够搞得过头条是个问题,如果没有增长点,那后期的转型是什么?ps:从我拿到 offer 到现在已经一个多月了,股价从 10 美金跌倒了 5 美金,也就是说,我如果来趣头条,我的期权已经退水了一半,瑟瑟发抖,看来期权什么的还是很虚呀。
公司:瓜子二手车
瓜子二手车真的是太远了,从海淀到工作地方将近花费了 2 个小时,而且还不在地铁附近,还需要坐公交。
一面
聊了一下项目中做过的东西,字节码注入相关知识,transform 优化,mp4 礼物实现等
从桌面点击 icon 图标开始,整个启动 activity 的启动过程
Binder 的实现原理
插件化的原理,以及 hook 点,大概有两个,可以网上搜索一下
hashmap 的实现原理
单例的实现,sychrnized 的实现原理,以及双锁不加 violate,会不会有线程安全问题
二叉树,读取每一层最右边的节点
二面
聊聊大概履历,以及在华为、字节跳动都做了什么,为什么要离开。
职业规划,怎么带领团队
代码设计的基础原则,以及用 UML 画出工厂模式
将两个有序的链表合并成一个有序的链表,递归和循环两中方式
时间分发机制,并且需要从 Android 的 sensor 开始到应用层,我只知道从 Activity 开始的流程。
聊操作系统 Unix,汗颜,我知之甚少。
对新技术的看法(flutter),瓜子二手车也已经开始在项目中使用 fultter 相关技术
三面(总监)
自我介绍,为什么要离开抖音
线程安全的问题,sychronized 和 viloated 的使用
实现一个 CAS(乐观锁)的方法
HashMap 的实现原理,怎么优化内存占用,优化 resize 的过程,这个是开放的问题
四面(VP?)
自我介绍,在抖音做了什么
在抖音做的比较好的两件事情
设计一个美团的框架,组件化
总结
瓜子二手车是众多二手车中做的还算比较好的公司,现在像优信、人人二手车好像都不是很好了,就是太远了,公司附近也没有地铁站,就算是公交站还需要走 2 公里,但是面试官感觉还是比较有水平的,后期的 hr 跟我谈也是诚意满满,整个团队在我来看,还是一个想做事情的态度。总体来说 hr 还是非常真诚的,想去的朋友可以考虑考虑。
公司:伴鱼
笔试
双锁单例,为什么要价 violate
内部类访问外部类
函数值传递的一些题
子类继承父类,个字都有静态变量、静态代码块、构造函数,执行的顺序
int 数组,除了一个数字外,其他数字都出现两次,找出这个只出现一次的数字
一面
图片压缩原理,以及在 transform 阶段进行的必要性,讨论的还挺激烈
内部类引用外部函数的参数,为什么要 final 定义,值传递
判断一个应用是否切到后台
组件化的探讨,假设场景,怎么处理
插件化的实现方式,以及对相应的场景进行讨论
二面(伴鱼的架构师)
一个疑难杂症,也是自定义插件,讨论是否有更好的方式,最后结果是,他想了一个比较巧妙的方式,没有实践过,但是告诉我可以,保留自己的意见。
字节码相关知识,ASM 以及 MD5 的实现原理,png 的压缩原理,这里比较乱,就是说到哪问道哪,比较发散。
对成为架构师的几点看法
三面
mp4 实现 alpha 通道的原理,优缺点,收益是什么
m*n 的二维数组,做(0,0)出发,可以上下左右走,0 为畅通,1 为阻塞,目标位置(k,j),问是否能到达这个位置,类似迷宫的算法总结
感觉伴鱼的面试目的是问倒你,很多次讨论问题,我说你有什么看法或者正确答案的时候,面试官就让我回去自己上网搜一下,或者给出的方案,经不起我的推敲,我问上两三个问题,面试官反而有点语塞,感觉很奇怪。
公司:最右
笔试题
Android 中的引用关系
自定义 view 步骤
activity 生命周期
一面
介绍最右的现状
常用的播放器,以及优缺点
opengl 的绘制流程
音视频编解码的流程
二面
在抖音做的工作
性能优化,包体积优化,冷启优化,卡顿优化的一些实现方案
mvc mvp mvvm 的区别,以及自己实现的轻量级 mvvm 的原理
编解码的相关知识
ijkplayer 的优缺点,以及是否看过相关源码
flutter 的探讨
总结
总体来说面试流程中规中矩,但是面试官的问题并不是很全面,更加关心的是自己的关心的领域,对于我提出的问题(大前端和 flutter),见解也仅仅是需要对新技术保持一定的敏感度,从公司产品来看,尤其是 4 月份出过一些事故,dau 跌的非常厉害,好像只有 100w+的日活,办公环境也一般,后面 hr 让我去跟 cto 再谈一轮,因为考虑到各个方面的因素,就直接拒绝了。
公司:BIGO
BIGO 是 YY 旗下的一个公司,目前刚刚收购了一个海外的直播产品,而且将来会把业务放到北京,还是想做一些事情,员工福利也是不错的。由于现在主要的人员还是在广东,前两面都是电话面试
一面
多线程怎么保证线程安全,violated、sychronized、reenterLock,这三个锁的原理以及区别,JVM 是怎样实现 sychronized 线程安全的。
HashMap 的实现原理,put()原理。hash 冲突,resize,1.8 的改动,什么是红黑树,优点。
ui 优化,主要从检测和优化两个部分说明,优化又分为通用的优化,和改变绘制流程的优化。
jvm 的介绍,内存介绍,gc 等
binder 机制
二面
hashmap 是否线程安全,concurenthashmap 实现原理,1.8 之后有什么改变
播放透明的 mp4 的原理
冷启优化和 ui 卡顿的监测和优化
thinker 实现插件化的原理,我们使用什么什么实现热更新,热更新的通用方案,以及优缺点
三面
介绍自己之前的工作经历,在华为做了什么,为什么离开华为,在抖音都做了什么工作
实现 mp4 播放 alpha 视频的原理
是否使用过 kotlin,kotlin 的一些特性
内存泄漏和 oom 怎么产生的,内存泄漏的监控,leakcanery 的实现原理
看过哪些第三方框架的源码,具体的实现原理。retrofit、okhttp 和 eventbus 等
总结
BIGO 一二面还是偏基础的知识,并没有很深或者很偏的问题,三面面试官是之前腾讯的大佬,面试更多的我做过的项目讨论和架构的问题,以及其他方面的一些问题,整体感觉还是比较好的,hr 小姐姐是广东人,说话的声音很好听,也很真诚。
公司:音娱科技
主要做的日本的直播产品,好像是 A 轮,公司并不大,创始人好像也是头条出来的,各种福利制度和头条进本类似。
一面
activity 生命周期 以及各个函数的含义
activity task 的四种类型
fragment 的生命周期
启动 server 的两种方式
intent 传输数据的大小限制
binder 的原理
activity 的启动流程
hashmap 实现原理,1.8 的改动,红黑树概念
合并两个有序的链表
二面
为什么离开抖音
组件化实现方案 spi 的缺点,怎么使用字节码注入
Dex 的组成,为什么每个 dex 会有 65536 的限制
还有好多,时间太长记不太清楚了
总结
是 A 轮创业公司,面试技术是通过了,最终卡在薪资,可能我要的太高,公司可能觉得依照我现在背景,性价比不高,就没谈下去,后面跟其他公司聊的时候,又了解了一些这个公司的情况,拿完年终奖后,很多人开始跳槽了。
公司:小红书
一面
Activity 的生命周期、fragment 的生命周期,onRestart()什么时候调用
service 的两种启动方式,service 的生命周期
binder 机制
进程保活:1.防止进程被杀 2.杀死后再拉起,详细的答案网上搜一下,这里就不列举出来了 app 的包体积优化,lint、proguard、andresguard 原理,字节码注入,删除 R.java 的变量,删除 access001 方法,压缩图片资源和使用 redex 等。
二面
自我介绍
对 JNI 和 C++了解吗?基本不了解,就略过了
Activity 的 launchMode,每个 Mode 的含义,Activity 的启动流程
怎么样实现 MP4 播放 alpha 的视频,编解码的一些流程,NV20、YUV、RGB 一些概念,SurfaceView 和 TextureSurfaceView 的区别
组件化的实现,都有什么技术方案,优缺点
使用数组实现一个队列,有 void add(int val)和 void pop()两个函数,而且需要考虑扩容
三面(业务线负责人)
介绍自己,介绍在抖音做过的事情
哪两件事情做得最有成就感
怎样重构代码,基本的 6 大原则,详细讨论每个原则的含义,使用过的设计模式
假定场景,接口定义的有缺陷,第二版需要修改,是增加还是直接修改,以及还有没有其他的方案,怎么去做,为什么,这个是开放的题,结合设计原则,以及真实的情况和自己的一些例子说明即可
四面(Android 负责人)
介绍自己,为什么离开抖音
mp4 播放 alpha 视频的实现方案,详细解说
跨部门合作,具体的一个例子,怎么去沟通,假设一个例子,用最恰当的方式去沟通。
怎么向上管理以及向下管理
五面(类似 VP 级别)
对技术选型的看法,flutter、c++、java、kotlin,核心是解决问题
是否会使用 kotlin,优势,以及在项目中真正带来的收益
组件化,依赖版本号不同的解决办法
插件化,一些实际问题的,具体是什么记不太清楚了
总结
小红书的装修真是豪,办公环境特别棒,但是面试流程有点多,足足面了 5 轮,不过总体来说技术还是很不错的,不论是广度还是深度,是一个值得加入的公司。
公司:饿了么
一面
包体积优化,Lint、proguard、andResGuard 的原理,以及抖音做的一些包体积优化的方案
线程和线程池的讨论,为什么要用线程池,线程池各个参数的含义,如果队列满了会发生什么,为什么线程池的数量是 cpu 核数+1 好吧,记不起来了
二面
自我介绍
线程安全的方式,sychronized 和 violated 的区别
怎么自定义 Transform、自定义 Task,Task 之间怎么依赖,大致顺序是什么,增量编译的概念,异步加快文件的读取,ASM 接口的使用 cookie、session、token 的含义和区别,这里我确实不熟悉,就直接说我不太清楚了。
三面
自我介绍
在抖音都做过什么事情,相关的几个方向深入讨论一下
对于架构的思考,怎样设计一个好的架构,6 大设计原则,分别说明一下
用过什么设计模式,为什么要用设计模式,对于设计模式的思考
怎样提高开发效率,较少沟通成本,实例说明下
为什么要引入 kotlin,优缺点
以后的规划
四面(交叉面)
介绍自己,为什么离开抖音
音视频的相关知识,NV20,YUV,RGB 的关系,为什么 mp4 的压缩率比 webp 的动画要高,编解码的流程,通用的编码格式,软硬解的区别。
View 的绘制流程,硬件加速的原理和软件绘制的区别,以及相关的 view 的优化
总结
总体来说面试体验还是不错的,三面面试官对于职业发展和新技术的见解都是非常深刻,也给与了我很多建议。
公司:美菜网
一面
动画实现的方式,帧动画和属性动画的实现原理
一张图片加载到手机内存中真正的大小是怎么计算的
OOM 产生的原理,内存泄漏是由于什么引起的,GCRoot 有哪几种类型,JVM 等
一个二分查找的变形题,具体的题目记不清楚了
为什么要做组件化,组件化的实现方案都有什么,优缺点
Activity 的启动流程
View 的绘制流程,从 VSYNC 信号开始
二面
性能优化,包体积优化,R.java 优化,access$xx 方法优化,资源优化原理
MVVM 是什么,我自己做的轻量级的 MVVM 的实现方式,优点是什么
看过什么第三方的源码,retrofit 原理,动态代理和静态代理的区别,是否使用反射,okhttp 的原理,Http 和 Https 的区别,Https 的 socket security layer 的握手,EventBus 的原理,3.0 的区别,APT 的使用以及怎样处理字节码(ASM、javaassit、BECEL 等)
总结
美菜网真的是好乱呀,面试人感觉有几十个,现在美菜网扩张这么厉害吗?我面试的时候我旁边的哥们也在面试,真的是很嘈杂,不过面试官的基础还不错,看过一些源码,但是并没有问到什么特别好的点,对整个新技术的见解和对我的建议(一般会问面试官一些对于新技术例如 flutter 看法,和对我的一些建议)感觉不是很深。跟 hr 谈完后就离开了。
公司:爱奇艺
一面
从 Activity A 跳到 Activity B 的生命周期的调用过程,如果是异步进程呢
冷起优化,systrace 怎么使用,实现原理
ANR 是什么,怎么上报 ANR,有些手机拿不出,有些手机拿不出 anr/traces.txt,怎么查找 ANR 问题
插件化的原理,Activity 的启动流程,hook 点
一个类,内部有一个链表的数据结构,实现 void add(Node n)和 void remove(int index)的函数
二面
介绍工作经验,为什么离开抖音
HashMap 的实现原理
在抖音做的工作,主要说了 ui 优化和冷起优化两个部分,扩展开来,讨论了很多相关的知识点
手写消费者生产者模型的代码
总结
这次面试的是爱奇艺 TV 端奇异果,并不是爱奇艺移动端 app,因为我还是想做 app,二面之后,我就跟面试官说了我的想法,就没必要聊下去了,就直接走了。
公司:快手
一面
handler 介绍,为什么阻塞不会造成 anr,屏障消息,产生内存泄露原因,handler 内存泄露的引用链
事件拦截机制,view 的绘制流程
android 的系统渲染原理,renderthread 的解释,三缓冲机制播放透明 mp4 的原理,surfaceview 和 textureview 的区别
opengl 的绘制流程,texturesurface 是什么,顶点着色器和片元着色器各自作用,VOB 是什么
一个无序的 int 数组,给一个 target 数字,找出数组中两个数字相加为 target,并输出坐标
二面
二面面试官是 facebook 回来的,面试风格的确和之前的面试官讨论不一样
hashmap 的实现原理,怎样找到 index,size 为什么是 2 的倍数,怎样 resize,resize 过后,之前的 hash 冲突还存在吗?currenthashmap 的实现原理
怎样保证多线程的安全,什么是乐观锁,怎么使用
设计一个发送语音模块的架构,需要写出所有接口函数,并且需要详细说明,可能面试官更加在意设计能力,这里讨论的时间非常长。view 的绘制流程,onMeasure、onLayout、onDraw,各个参数是什么含义,尤其是 widthMeasureSpec、heightMeasureSpec 以及对应的 AT_MOST、EXACTLY 和 UNSPECIFIED
数组中存有 1-3 的三种数字,例如[1,2,3,1,2,2,1,3,3],将其排序为[1,1,1,2,2,2,3,3,3],要求时间复杂度,后续将内容变为一个对象,继续排序
三面
工作经历介绍,为什么离开抖音
mp4 播放 alpha 视频的原理,与其他方案的对比,收益点是什么
"之"字形打印二叉树
1~100 盏灯,都是亮的,第一次将能被 1 整除的数的灯按下,变暗,第二次将能被 2 整除的数的等按下,变亮,第三次将能被 3 整除的数的等按下,变暗…第 100 次将能被 100 整除的数的灯按下,问,最后有多少盏灯是亮的。
总结
总体来说面试官的技术还是很厉害的,二面面试官的背景很好,思路也独特,有点外企风格。三面面试官比较注重算法,和解决问题的思路。整个面试流程真的是不太友好,三次面试去了三次,而且前两次都是在茶水间,一直说会议室订不到,环境特别嘈杂,而且前两次都是临近饭点,茶水间送饭更是杂乱,感觉快手效率和环境有一些混乱(个人面试感觉),但是不能否认快手在 2018 年的成绩还是很好的,尤其是直播的营收甩抖音直播几条街。
HR 面总结
在大多数互联网公司内(除了外企),到了 HR 面,基本上已经定下来,正常的聊聊就能发 offer 了,只要别太“个性”,或者三观异于常人就能收到 offer,大体就是一个积极乐观的态度。有几点需要注意下:
不要说前公司和前 leader 的坏话
对于为什么离开原公司,标准答案是目前公司不适合现有的自身发展,寻求更好的机会,(当然大部分都是因为钱 心知肚明就行,不用说出来)
展现自己积极乐观和乐于助人的一面
注意以上几点大体就没问题了
这次最大的收获就是跟 60 多位面试官的交流,更加让我认清我自己,认清自己的长处、短板和以后的规划,和对做人做事的看法,在这里真诚的感谢 60 多位面试官。
学习总结、资料分享
下面是我自己总结整理的互联网企业高频面试题目及答案详解和一些学习笔记,希望能对大家有些帮助(有需要的朋友见文末获取)
需要获取得话麻烦一键三连+评论,然后添加 VX(tkzl6666)即可免费领取
评论 (1 条评论)