持续了大半年的面试终于结束了,年后回来到这个月月初,一直陆陆续续有面试邀约。
收获offer还是比较满意的,拿下了网易、小米的offer。
着实有点可惜的是字节跳动,倒在了三面,只能说自己还是太菜,以后还需要继续努力。
这期间只投递了互联网中大厂,面试并不多,以下是我在这大半年以来的面试经历,发出来总结一波,也供大家参考参考!
以下面试均为Android开发的社招岗。
网易 (已offer)
整体难度不大,都是常规题。
一面(90min)
1、自我介绍
2、MVP和MVVM的区别
3、Activity被强杀了ViewModel会不会被强杀
4、ViewModel能恢复数据的原理是什么
5、从源码上说说View的绘制流程(绘制起点到三大流程的)
6、如何通过自定义View实现一个类似流式布局,讲思路
7、invalidate和postInvalidate区别
8、说说LiveData源码
9、创建线程的几种方式
10、重写Thread类和重写Runnable的区别
11、线程之间的通信方式有哪些
12、说说Handler的源码
13、volatile的作用
14、Synchronized和Lock区别
15、Synchronized的底层实现原理是什么
16、Synchronized在java 6后具体做了哪些优化
17、Activity的四种启动模式
18、Server的启动方式,各个方式有什么特点
19、广播类型,具体描述一下
20、设计模式了解哪些,挑一个熟悉的讲一讲
21、为什么要跳槽?
算法:删除排序链表的重复元素
二面(50min)
1、自我介绍
2、介绍一下项目中遇到的困难
3、说说一个音视频文件从打开到能播放的流程
4、怎么优化一个Mp4格式的视频的起播速度
5、软解和硬解的区别
6、组件化的原理
7、从源码上讲讲View的绘制流程
8、如何实现一个可以换行的View
9、View的分发流程
10、如何实现一个有下拉刷新功能的View
11、Activity和Fragment的生命周期
12、Service的生命周期
算法:判断一个链表是否有环
三面(40min)
1、自我介绍
2、公司的产品有哪些
3、介绍下协程以及它的原理
4、协程怎么取消
5、了解直播框架吗
6、直播的推流和拉流的流程是怎样的
7、H246和H265的区别
8、说一下编解码时的 IPB 帧
9、项目所用到的架构
10、说一说MVI框架
11、为什么选择来北京
12、平时刷算法吗
四面-HR(25min)
1、自我介绍
2、你在团队中担任什么职责
3、你在项目中最大的挑战是什么
4、你所在的组织架构
5、你认为你的优势和劣势是什么
6、为什么跳槽
7、当前薪资以及期望薪资
8、手头上有几个offer,如果正在面的几个公司都拿到offer,你会选择哪个
小米汽车(已offer)
整体难度不大,问的也比较常规,还以为会有三轮技术面试,没想到只有两轮,整体面试流程还算是比较轻松的。
小米汽车部门是小米在上一年新成立的部门,汽车是未来的一个风口,前景还是相当可以的!
但据 Hr 说,工作压力可能会有点大,需要做好 995 的心里准备 …
一面(80min)
1、视频流的格式有哪些
2、TextureView的Surface的区别
3、TextureView是在主线程渲染吗
4、项目里遇到的困难,是怎样保证项目的进度和质量的
5、项目参与度最深的是什么
6、组件化和模块化的区别
7、组件化的原理
8、MVP和MVVM的区别
9、RecyclerView和ListView的区别
10、RecyclerView的缓存机制
11、布局优化的方式有哪些
12、使用过哪些工具查看布局的层级
13、kotlin和java的区别
14、jetpack用过哪些库
15、说说LiveData的源码
16、说说Handler的源码
17、Handler如何避免内存泄漏
18、同步屏障有了解吗
19、IdleHandler有用过吗
20、线程同步的方式有哪些,以及它们的原理
21、synchronized修饰实例方法和静态方法的区别
22、为什么要跳槽
算法:判断链表是否有环
二面(80min)
1、自我介绍
2、视频编解码的流程是什么
3、边播边缓存的原理是什么
4、Android原生编解码器MediaCodec的解码流程
5、音视频封装格式了解哪些
6、音画同步怎么处理
7、一个APK文件包含哪些文件
8、说说Android的签名机制
9、说说Activity的启动流程
10、AMS和ServerManager的关系
11、让你继承自ViewGroup,怎么实现LinearLayout的功能
12、引用类型占多少字节
13、HashMap的数据结构是怎样的
14、HashMap查询复杂度是多少,假设数组中每个桶的链表长度相同,用复杂度又怎样表示
15、为什么要引入红黑树
16、红黑树查找和插入效率是多少
17、各种排序算法的时间复杂度和空间复杂度是多少
18、怎么排查和解决内存泄漏
19、MAT工具使用过吗
20、JVM内存模型
21、手上有其他offer吗
22、为什么来北京
手撕:生产者消费者模式
三面-HR(20min)
1、自我介绍
2、为什么跳槽
3、当前薪资以及期望薪资
4、当前工作内容是什么
5、给我介绍了一下小米的福利(让我做好 995 的心理准备…)
6、手头上有几个offer
字节跳动(三面凉)
tiktok直播业务,工作时间10-10-5。
有一说一,字节跳动的面试难度还是稍微有点大的(自己太菜是原罪) …
其实,Android / java / 计算机相关 的知识问的其实不算难,难的是算法
!
一、二面直接扔了两道困难级别的算法题,所幸平时有写过,运气比较好,过了,
三面的两道算法是面试官基于 LeetCode 的题改的,实属给我整蒙了,其实做题思路还是有的,这两道题还够不上困难的级别,但我就是写不出来,完全不在状态,菜啊!最终也是倒在了三面。
等字节什么时候10-7-5了,再找机会冲一冲!🐶
一面(60min)
1、自我介绍
2、项目中你觉得最有成就的一件事是什么
3、播放器的生命周期
4、线程的状态有哪些
5、sleep和wait的区别
6、内存泄漏和OOM区别
7、如何处理内存泄漏问题
8、LeakCannary的原理
9、开发中做过哪些内存优化
10、线程和Handler和Looper的关系
11、如何保证一个线程只有一个Looper
12、为什么Looper的死循环不会导致ANR
13、ANR的原理是什么
14、Synchronized和Lock和volatile的区别以及它们的原理
15、HTTP状态码有哪些
16、APP的内存限制是多少
算法:合并K个升序链表(时间关系,没写完,说了思路)
二面(60min)
1、自我介绍
2、线程的状态
3、播放器各个状态以及它的生命周期
4、sleep和wait的区别
5、说说Handler的源码
6、视频流渲染出来的整个过程是什么
7、TextureView和SurfaceView区别
8、SurfaceView在不同Android版本下的区别
9、Activity的启动流程
10、Activity的启动过程中会涉及到哪些线程
11、Launcher进程和system_server进程实现通信的线程是
12、ANR触发机制,ANR的原理是什么
13、平时是怎么学习的、以后向做什么方向的东西
14、闲聊时间
算法一:下一个排列(leetcode 31,medium)
算法二:K个一组反转链表(leetcode 25,hard)
三面(50min,凉,算法题没搞不出来…)
1、自我介绍
2、项目中最有挑战性的地方是什么
3、模块化和组件化的区别
4、线程创建的方式有哪些
5、线程同步的方式有哪些
6、volatile如何实现线程通信
7、kotlin协程和RxJava区别
算法一:两个16进制的字符串相加
算法二:实现一个迭代器,next()函数按照二叉树的前序遍历的方式来返回元素
长城汽车(OC,已拒)
做的是长城汽车的车机系统,面试难度基本为0,这个公司仅是拿来找找面试的感觉,对它并没什么其他想法。
另外,面试流程巨慢!最后接到 HR 电话,开的薪资也比较低,直接拒了。
一面(20min)
1、自我介绍
2、kotlin有了解吗
3、Synchronized关键字的实现原理
4、Java原子操作类的实现原理
二面(35min)
1、自我介绍
2、static关键字用在类、方法、变量上的区别
3、final关键字用在类、方法、变量上的区别
4、说一下Activity的启动模式
5、ActivityABC依次打开,退出C怎么直接返回A?
6、Server的启动方式
7、Server可以做耗时操作吗
8、设计一个音乐播放器用Server怎么实现?
9、DataBinding是什么
10、Activity上如何监听返回键
11、对MVVM的理解
12、Serializable 和 Parcelable 区别
三面(25min)
1、自我介绍
2、全程问项目,项目中参与度最深的地方,遇到的难点是什么
作业帮(已凉,二面挂)
面试难度中等,也是拿来尝试一下面试的感觉,整体面试体验不错,面试官也聊得很来。
已收到感谢信。
二面问的太过基础了,反而回答不出来,一、二问都没答对…连建造者模式也没撕对,难受,挂了也正常,只能说自己太菜了!
受到上一年 “双减” 政策的影响,听面试官说公司业绩下滑挺严重的。
一面(70min)
1、自我介绍,项目经历,重点介绍一下工作经历和内容
2、你所负责的短视频框架是怎么搭建,遇到了哪些困难
3、jni有了解吗
4、java层怎么调native的代码,或者说native层怎么掉java层的代码
5、RecyclerView的缓存机制
6、先从数据库获取数据A,再从网络获取数据B(要求两个获取逻辑并发执行),然后在再A和B进行处理,用协程怎么实现
7、用java的锁能实现上面的逻辑吗
8、Lock有了解吗,AQS机制有了解吗
9、说一下CAS机制
10、volatile关键字说一下,禁止指令重排的原理
11、说一下retrofit的源码
12、为什么跳槽?
算法:手写一个LRU缓存
二面(30min)
1、String a=“a”; String b=“b”; System.out.print(a==b);输出什么
2、String a=“a”; String b=“b”; String ab=“ab”; System.out.print(ab==(a+b));输出什么
3、java值传递和引用传递的区别
4、类A构造方法中创建类B,类B构造方法又创建类A,如果new一个类A,程序执行后将会发生什么
5、说一下你熟悉的设计模式
6、写一个单例
7、手写一个建造者模式的例子(没写对,凉凉)
百度(凉凉)
全回答上了,但没收到二面通知,应该是凉了,不知道是不是被 kpi 了 ?
一面(20min)
1、Activity和Fragment的生命周期的区别
2、ANR的触发场景
3、内存泄漏和OOM的关系
4、内存泄漏如何排查
5、线程池的作用以及类型
算法:求二叉树中两个子节点的最近的公共祖先节点
豆瓣(凉)
据说豆瓣是 965 互联网公司,评价还可以,所以就投了一波,也接到了面试。
整体面试体验较差,问题回答得都没毛病,可能是鸽了面试官15分钟?… 然后面试官整场面试板着脸,中途他还关掉了摄像头。
出的算法题都是简单题,英文版,也做出来了,就是不知道为何挂了,目前没有任何通知。
一面(60min)
1、自我介绍
2、组件化和模块化的区别
3、边播边缓存的原理是什么
4、APK打包流程
5、如何对一个apk进行签名
6、说说git相关命令
手撕算法一:有效的括号
手撕算法二:查找插入位置【O(logN)时间复杂度】
文末
整理不易,白嫖太易!有需要的读者朋友们可以关注一下。以上面试题+解析都可分享~
网友评论