-
先聊了聊为什么离开现在公司,毕竟现在这么火
-
我做的项目中的一些解决方案,组件化、字节码注入、包体积的极致优化
-
直播的架构设计
三面
设计一个上传日志的大小,涉及到,性能、文件大小、怎样压缩、时机、TopK 问题等聊了聊在字节跳动做的事情
总结
是一家创业公司,给的薪资还是挺不错的,但是由于是 996,没有加班工资,多出来的钱可能就是加班工资吧,后面听 hr 说公司正在打算取消 996
2
公司:探探
是通过脉脉上网红马映怡推荐的,马映怡之前在字节跳动,今年 4 月份到了探探,在脉脉找到了我,正好我有出去看看的意向,就约了时间去面试,探探的办公环境还是比较好的。
一面
-
OpenGL 一些知识,顶点着色器、片元着色器的工作原理,什么是 VBO(这个没想起来),以及 shader 的一些简单问题
-
View 的事件传递机制
-
包体积优化
-
JVM 相关知识,Dalvik 和 ART 的区别
-
组件化的实现方案
-
算法题,ViewGroup 的层级深度,转换为二叉树的层级深度
二面
-
二面面试官,比较注重思维,我理解为聪不聪明的意思,有点脑筋急转弯的意思,要求的最简单有效的方法。
-
RecyclerView 防止内存 OOM 的一道题,充分利用自身的缓存机制,可能我始终没理解问题所在,虽然给出解决方案,但是面试官不满意,太繁琐
-
讨论 LRUcache 的实现和时间复杂度
三面
cto 面试
-
聊了一下抖音发展的过程中我的角色,做过什么事情,有什么收益
-
在华为的一些经历,为什么离开华为
-
聊了一到算法题,查找两个字符串的交集和字符串 1 中有字符串 2 中没有的问题。
四面
这次主要是聊一下我将要做的工作,以及让其他面试官再次了解一下我,因为评级比较高,所以需要谨慎点。
总结
整体来说探探发展还是不错,尤其近两年要上市(和陌陌签了对赌协议),环境也不错,管三餐,加班不严重,双休,工资也给力,但是也是由于近两年要上市,所以要做的东西还是比较多和急,需要你有一定的能力。很尴尬的是在给我 offer 的第二周,探探就被 Android 市场下架了。
3
公司:猿题库
我是在 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 的扩展函数,大体写了一下代
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
码。
-
算法,可能是我写的太慢了,所以就只有一道
-
1. 给定一个有序的数组和目标数,找出与目标数最近接的 index,要求复杂度是 log(n)的时间复杂度
三面
-
三面就比较轻松了,面试官一直乐呵呵的,又问了一下 alpha 视频的解决方案,然后聊了聊为什么要离开这么火的项目,问了问我的经历之类的,最后写了两道算法题
-
二叉树的深度和广度,要求一次遍历给定一个二叉树和一个目标数,在二叉树中是否存在一条路径的所有节点的和与目标数是相同的 case,并且打印。
总结
效率并不是很高,而且并不主动,可能是跟我要的薪水太高有关系,后面通过询问才知道,技术面试是通过了,可能字节跳动本来薪水就很高,我再跳过来,猿辅导考虑到我的工作年限和年龄,会倒挂一大批人,所以只能平薪过来,而且这样知道我肯定不会来,就没主动跟我说。
整个面试环节总体来说还可以,但是就是效率不高,也可能是我运气不好,我是 4:10 到猿题库的,然后在前台等了 20 所分钟,hr 才来,说了刚才在电话会议耽误了,这个理解,然后等待面试又等了 10 多分钟,来了 server 的面试童鞋,写了道算法题,重新调整到 Android 面试,又等了 15 分钟,真正 Android 面试开始在 5:10 左右,面试完成后基本到了 8:30 了。对自己的表现基本满意,就是好久不手写代码,有点生疏,写的比较慢,大多数问题和答案都得到了面试的认可,对一些知识点没有复习到,其实我是这样认为的,并不是所有的问题或者知识都需要知道,你只需要有 1~2 个方面了解的很透彻,得到面试官的认可就行。
4
公司:趣头条
一面
-
在抖音上显示自己做的功能,框架的搭建,实现原理,所做的优化点等。
-
组件化的实现,为什么做组件化,不同实现的优缺点。
-
hashmap 的实现原理
-
view 的优化,减少层级,异步加载,x2c 框架引入,优缺点,textview 的优化。
-
mp4 播放 alpha 视频实现的原理
-
一面面试官大概聊了 1 个小时左右,没让我写算法,细究原理和细节,非常仔细。
二面
-
冷启优化的一些方案。
-
数据驱动业务的理解,怎么做,和 pm 产生分歧怎么解决。
-
我所有做的优化的收益是什么,有什么数据支撑。
-
事件分发机制,举了一个具体的例子来解决。
-
http 的一些问题,1.1 和 2.0 区别,心跳机制,https 怎么建立链接,怎么进行数据加密等。
-
为什么离开抖音,职业发展,诉求等。
-
聊了大概一个小时,面试官的思路相对独特,不是为做技术而做技术,技术始终要服务于业务,我非常认可。
总结
趣头条北京位于海淀,位置不靠近地铁,需要步行一段时间,整体的环境也一般,不过效率挺高的,在面试完的第二天就给我发 offer 了,面试流程也相对较少。对趣头条的营收模式看的不是很清楚,类似发钱看新闻,但是现在头条也再做这个,趣头条能够搞得过头条是个问题,如果没有增长点,那后期的转型是什么?ps:从我拿到 offer 到现在已经一个多月了,股价从 10 美金跌倒了 5 美金,也就是说,我如果来趣头条,我的期权已经退水了一半,瑟瑟发抖,看来期权什么的还是很虚呀。
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 还是非常真诚的,想去的朋友可以考虑考虑。
6
公司:伴鱼
笔试
-
双锁单例,为什么要价 violate
-
内部类访问外部类
-
函数值传递的一些题
-
子类继承父类,个字都有静态变量、静态代码块、构造函数,执行的顺序
-
int 数组,除了一个数字外,其他数字都出现两次,找出这个只出现一次的数字
一面
-
图片压缩原理,以及在 transform 阶段进行的必要性,讨论的还挺激烈
-
内部类引用外部函数的参数,为什么要 final 定义,值传递
-
判断一个应用是否切到后台
-
组件化的探讨,假设场景,怎么处理
-
插件化的实现方式,以及对相应的场景进行讨论
二面(伴鱼的架构师)
-
一个疑难杂症,也是自定义插件,讨论是否有更好的方式,最后结果是,他想了一个比较巧妙的方式,没有实践过,但是告诉我可以,保留自己的意见。
-
字节码相关知识,ASM 以及 MD5 的实现原理,png 的压缩原理,这里比较乱,就是说到哪问道哪,比较发散。
-
对成为架构师的几点看法
三面
-
mp4 实现 alpha 通道的原理,优缺点,收益是什么
-
m*n 的二维数组,做(0,0)出发,可以上下左右走,0 为畅通,1 为阻塞,目标位置(k,j),问是否能到达这个位置,类似迷宫的算法总结
感觉伴鱼的面试目的是问倒你,很多次讨论问题,我说你有什么看法或者正确答案的时候,面试官就让我回去自己上网搜一下,或者给出的方案,经不起我的推敲,我问上两三个问题,面试官反而有点语塞,感觉很奇怪。
7
公司:最右
笔试题
-
引用关系
-
自定义 view 步骤
-
activity 生命周期
一面
-
介绍最右的现状
-
常用的播放器,以及优缺点
-
opengl 的绘制流程
-
音视频编解码的流程
二面
-
在抖音做的工作
-
性能优化,包体积优化,冷启优化,卡顿优化的一些实现方案
-
mvc mvp mvvm 的区别,以及自己实现的轻量级 mvvm 的原理
-
编解码的相关知识
-
ijkplayer 的优缺点,以及是否看过相关源码
-
flutter 的探讨
总结
总体来说面试流程中规中矩,但是面试官的问题并不是很全面,更加关心的是自己的关心的领域,对于我提出的问题(大前端和 flutter),见解也仅仅是需要对新技术保持一定的敏感度,从公司产品来看,尤其是 4 月份出过一些事故,dau 跌的非常厉害,好像只有 100w+的日活,办公环境也一般,后面 hr 让我去跟 cto 再谈一轮,因为考虑到各个方面的因素,就直接拒绝了。
8
公司: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 小姐姐是广东人,说话的声音很好听,也很真诚。
9
公司:音娱科技
主要做的日本的直播产品,好像是 A 轮,公司并不大,创始人好像也是头条出来的,各种福利制度和头条进本类似。
一面
-
activity 生命周期 以及各个函数的含义
-
activity task 的四种类型
-
fragment 的生命周期
-
启动 server 的两种方式
-
intent 传输数据的大小限制
-
binder 的原理
-
activity 的启动流程
-
hashmap 实现原理,1.8 的改动,红黑树概念
-
合并两个有序的链表
二面
-
为什么离开抖音
-
组件化实现方案 spi 的缺点,怎么使用字节码注入
-
Dex 的组成,为什么每个 dex 会有 65536 的限制
-
还有好多,时间太长记不太清楚了
总结
是 A 轮创业公司,面试技术是通过了,最终卡在薪资,可能我要的太高,公司可能觉得依照我现在背景,性价比不高,就没谈下去,后面跟其他公司聊的时候,又了解了一些这个公司的情况,拿完年终奖后,很多人开始跳槽了。
10
公司:小红书
一面
-
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 轮,不过总体来说技术还是很不错的,不论是广度还是深度,是一个值得加入的公司。
11
公司:饿了么
一面
-
包体积优化,Lint、proguard、andResGuard 的原理,以及抖音做的一些包体积优化的方案
-
线程和线程池的讨论,为什么要用线程池,线程池各个参数的含义,如果队列满了会发生什么,为什么线程池的数量是 cpu 核数+1 好吧,记不起来了
二面
-
自我介绍
-
线程安全的方式,sychronized 和 violated 的区别
-
怎么自定义 Transform、自定义 Task,Task 之间怎么依赖,大致顺序是什么,增量编译的概念,异步加快文件的读取,ASM 接口的使用 cookie、session、token 的含义和区别,这里我确实不熟悉,就直接说我不太清楚了。
三面
-
自我介绍
-
在抖音都做过什么事情,相关的几个方向深入讨论一下
-
对于架构的思考,怎样设计一个好的架构,6 大设计原则,分别说明一下
-
用过什么设计模式,为什么要用设计模式,对于设计模式的思考
-
怎样提高开发效率,较少沟通成本,实例说明下
-
为什么要引入 kotlin,优缺点
-
以后的规划
四面(交叉面)
-
介绍自己,为什么离开抖音
-
音视频的相关知识,NV20,YUV,RGB 的关系,为什么 mp4 的压缩率比 webp 的动画要高,编解码的流程,通用的编码格式,软硬解的区别。
-
View 的绘制流程,硬件加速的原理和软件绘制的区别,以及相关的 view 的优化
总结
总体来说面试体验还是不错的,三面面试官对于职业发展和新技术的见解都是非常深刻,也给与了我很多建议。
12
公司:美菜网
一面
-
动画实现的方式,帧动画和属性动画的实现原理
-
一张图片加载到手机内存中真正的大小是怎么计算的
-
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 谈完后就离开了。
13
公司:爱奇艺
一面
-
从 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,二面之后,我就跟面试官说了我的想法,就没必要聊下去了,就直接走了。
14