【Android面经】中大厂Android面试真题集锦

持续了大半年的面试终于结束了,年后回来到这个月月初,一直陆陆续续有面试邀约。

收获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)时间复杂度】

文末

整理不易,白嫖太易!有需要的读者朋友们可以关注一下。以上面试题+解析都可分享~

你可能感兴趣的:(【Android面经】中大厂Android面试真题集锦)