前言
21年让我感觉经历了不少东西,不仅是生活还是工作方便。工作方面主要体现在面试吧,初步的算了一下我这一年面试了不下三十家公司,有大厂也有中小型公司,大厂偏多一些,应该每开发者和我一样都有想去大厂的想法,所以一些大厂的其他部门我也有面一些。
今天特意腾出时间整理了这一年我说面试过的一些公司,希望这段面经分享可以帮助到大家。同时为了帮助大家少走些弯路,我整理了一些 Android 中高级进阶的学习文档和面试文档 给大家参考学习,需要参考学习的可以坚持看到文末看图。
如有需要请去我 GitHub 中查阅,望这些干货能够帮助到大家!!!
小米
应用商店部
1.Java的基本数据类型
2.HashMap实现原理
3.多线程数据结构
4.手写JAVA单例模式
5.Kotlin单例的原理
6.内存泄漏的处理方案
7.单例内存泄漏处理
8.持有外部引用导致了内存泄漏的解决方案
9.弱引用
10.单例内存泄漏的根源,GCRoot
11.为什么单例持有对象不释放
12.多进程单例失效
13.进程和线程的区别
14.在多线程单例正常,多进程单例不正常
15.多进程
16.其他的GCRoot(内存泄漏)方式
17.handler内存泄漏
18.handler的message被什么持有
19.handler的postDelay实现
20.handler工作流程
21.handler适用场景
22.Android源码Activity中使用Handler
23.View中使用Handler
24.View中的Handler.post执行流程,Message运转
25.Kotlin的协程
26.Kotlin业务开发和页面绑定
27.Kotlin取消协程
28.Kotlin协程生命周期绑定
29.Kotlin自动取消协程
30.Kotlin对于协程对象处理
31.Jetpack ViewModel
32.ViewModel初始化方式
33.ViewModel初始化方式不同的区别
34.ViewModelProvider和ViewModelProviders
35.线程池
36.什么方式进行JS交互
37.JS调用android方法
38.ExoPlayer用过哪些相关功能
40.RTMP协议
41.三方框架的演变和追踪
42.Retrofit设计模式
43.Android反编译
44.Android为什么设计四大组件
45.Activity启动流程
46.启动模式CLEAR_TOP,表现形式
47.多进程可能会导致出问题的地方
48.多进程数据传输方式
49.SP多进程通信
50.SP同进程并发
51.锁
52.后台服务类似 Service,IntentService
53IntentService原理
54.git rebase的作用
55.手写二分查找
应用商店部
1.JetPack用到那些组件
2.LiveData源码的理解
3.LiveData在发送事件的过程中值被修改,会有什么结果
4.LiveData强制刷新相应事件如何执行
5.Retrofit原理
6.okHttp的拦截器原理
7.okHttp的拦截器内容
8.锁的升级过程
9.多线程相关
10.线程池的阻塞队列
11.volitile原理
12.volitile内存屏障
13.CPU如何保证缓存一致性
14.一个CPU的缓存发生了改变,如何通知其他CPU进行改变
15.硬件加速原理,用了什么硬件,加速了什么内容
16.View的绘制流程
17.Android 5.0以后 View绘制流程的改变内容
18.CAS
19.Unsafe的了解
20.对flutter的了解
21.View嵌套的优化
22.ConstraintLayout为什么性能更好,什么算法原理
23.内存优化
24.卡顿优化
25.加载一个布局,有什么思路让布局加载更快(减少嵌套层级是一种方案)
26.加载View的过程中有IO和反射操作,优化如何从这个方向进行优化
27.设计模式
28.ConcurrentHashMap原理
字节跳动
部门A
1.String的最大长度
2.==和equals
3.Java的引用类型
4.弱引用使用场景
5.ConcurrentHashMap实现原理
6.手写线程安全的单例模式
7.JAVA语言线程不安全
8.JVM角度为什么多线程不安全
9.List线程
10.cpu线程和java线程
11.Kotlin和JAVA区别比较大的地方
12.Kotlin扩展函数
13.data class 和 Gson
14.kotlin copy 与 Java clone 对比
15.kotlin object A 是什么样的单例模式
16.Kotlin协程原理
17.Kotlin挂起是什么
18.kotlin内联函数 inline
19.Kotlin其他优点
20.kotlin run和let的区别
21.Kotlin Flow
22.Kotlin SharedFlow
23.RecyclerView缓存机制
24.RecyclerView缓存对象
25.Android Focus焦点机制
26.Handler机制
27.Handler消息屏障
28.Hander死循环不引起ANR的原因
29.Message数据结构
30.广告标签加文案一共两行,代码处理
31.广告标签过多的处理逻辑
32.Jetpack组件在项目中做了什么
33.本地搜索FTS
34.IM撤回操作怎么做
35.gradle implementation和api
36.权限申请在项目中怎么做的
37.viewModel横竖屏切换不销毁
38.LiveData如何跟随事件变化
39.如何提升团队协作能力
40.二分查找
部门B
1.音视频播放的优化
2.优化播放失败率,播放失败时间
3.rtmp和m3u8的区别
4.rtmp和m3u8的结构
5.MVP到MVVM做了什么修改
6.MVVM的优势和劣势
7.MVP的优势和劣势
8.View 列表优化
9.RecyclerView原理
10.RecyclerView优化原理
11.Handler原理
12.Looper如何绑定线程
13.MessageQueue的Message数据结构
14.android手势事件分发机制
15.父布局如何拦截子布局事件
16.整个Android的View的结构
17.View的创建顺序
18.View.onMeasure原理
19.子View的onMeasure执行原理
20.onMeasure中如何处理wrap_content和march_parent
21.onMeasure时的数据结构
22.LinearLayout,RelativeLayout,ConstraintLayout优缺点
23.算法题:
给定一个数组,求最大的连续数组的和,并输出指针位置
百度
1.mvvm架构 相对mvp优点
2.crash率 常见的crash 业务需求的crash处理
3.java string Stringbuffer StringBuifder 区别
4.成员变量 、局部变量区别(局部变量需要默认值)这个问题答反了
5.数组跟链表的区别
6.hashmap原理 concorecttHashMap原理
7.activity启动模式简单介绍
8.布局优化 merge viewStub等
9.handler机制 looper初始化 message分发怎么区别handler、延迟消息
10.属性动画 以及跟不补间动画的区别
11.线程池的原理
滴滴
1.一次完整的网络请求流程
2.不同版本HTTP的区别
3.ArrayList底层数据结构
4.链表的查找时间复杂度
5.HashMap底层数据结构
6.HashMap数据结构工作流程
7.HashMap查找的时间复杂度
8.HashMap解决Hash冲突
9.多线程的生命周期
10.volitile如何保证可见性
11.volitile如何保证有序性
12.线程池工作原理
13.okHttp的责任链模式
14.okHttp连接池复用原理
15.Glide的bitmap复用原理
16.Glide的三级缓存
17.Handler如何导致内存泄漏
18.Handler为何导致内存泄漏
19.Handler如何避免内存泄漏
20.常见的GCRoot
21.生产者消费者模式
22.ViewGroup的invalidate和requestLayout的区别
23.ViewModel如何和Activity生命周期进行绑定的
24.自定义View和自定义ViewGroup的区别
25.自定义View和自定义ViewGroup的方法区别
26.遍历二叉树
京东
3C技术部
1.自我介绍
2.介绍自己的任务栈
3.组件化通信用了什么技术
4.Handler机制的理解
5.Handler匿名内部类AS警告内存泄漏的原因
6.Handler机制延时任务的执行方法
7.Kotlin的inline
8.Kotlin静态的原理
9.volitile的原理
10.DCL单例中volitile的作用
11.DCL单例中两次判空的原因
商城部
1.JAVA的多态
2.多态的作用
3.JVM内存分区
4.JVM垃圾回收算法
5.新生代老年代算法
6.性能优化
7.启动优化的数据分析
8.内存优化
9.内存泄漏
10.常见的内存泄漏场景
11.非静态内部类Handler持有外部类引用的解决方法
12.静态内部类以弱引用方式持有外部引用解决交互和内存泄漏
13.JAVA四种引用的区别
14.OOM处理方案
15.LeakCanary原理
16.okhttp连接与线程池
17.okhttp请求流程和同步异步区别
18.okHttp的责任链如何连起来
19.okhttp拦截器源码
20.HashMap源码
21.HashMap插入元素的原理
22.数组和链表的区别
23.sychronized升级过程
24.CAS作用
25.ConcurrentHashMap安全原理
26.乐观锁
27.线程池源码
28.线程池addWorker原理
29.类加载机制
30.热修复
31.热修复dex文件替换原理
32.Activity启动流程
33.Activity启动流程中的进程间通信
34.AMS
35.Zygote
36.自定义View
37.onMeasure测量原理(很复杂 仔细看)
38.从Activity的启动流程到View的绘制流程
39.对flutter的了解
40.设计模式
41.动态代理和静态代理的区别
42.设计模式六大原则
43.迪米特原则的意义
44.项目重构的思想
45.对AAC架构的理解
46.组件化实施方案
47.项目的版本控制如何实现
48.ARouter原理
49.一个未捕获的异常crash 怎么能让程序继续运行下去
国际部
1.线上BUG和行为的监控方案
2.ANR监控方案
3.Looper死循环不ANR原理
4.线上OOM监控方案
5.OOM可以捕获吗
6.Jetpack常用的内容
7.ViewModel的作用
8.ViewModel的生命周期
9.ViewModel保存在Application和ViewModelScope的区别
10.ViewModel如何保证Activity销毁后保存数据
11.Lifecycle的使用场景
12.自定义控件使用Lifecycle
13.Kotlin扩展函数适合使用场景
14.子线程Toast
15.子线程Dialog
16.子线程如何弹Dialog
17.广播和Service弹Dialog
18.Service使用场景
19.大文件下载然后加载的方案
20.Service启动方式
21.Service可以先start再bind或者先bind再start吗
22.多次调用bindService
23.Service后台常驻方案
24.Service保活方案
25.MVC,MVP,MVVM区别
26.databinding可能导致什么问题
27.自定义一个图片框架要考虑哪些内容
28.android在当前包名下的可用空间上限
29.LruCache原理
30.开发中常用的集合
31.线程安全的集合
32.synchronized可用范围
33.synchronized静态方法和普通方法的区别
34.同步方法继承
35.顺序请求多个接口方案
36.同时请求多个接口方案
37.线程池
38.系统提供的线程池
39.流式编程和响应式编程
40.Kotlin的Flow
41.SharedPreferences的apply和commit的区别
42.Parcelable和Serializable的区别
43.枚举和常量的性能区别
44.静态内部类和普通内部类的区别
45.Kotlin静态内部类
46.Kotlin 普通内部类和inner内部类
47.Kotlin直接声明变量 和 创建类再声明变量 的区别
48.ActivityA打开ActivityB,再从ActivityB返回到A的生命周期
49.ViewPager管理Fragment的生命周期
50.ViewPager预加载
51.ViewPager2和ViewPager懒加载的区别
52.ViewPager2懒加载机制
53.Flutter热更新方案
54.flutter_boost
55.Google Firebase
56.多语言切换可能有哪些问题
57.组件化动态依赖方案,如aar,jar包,在使用时下载对应的包
58同城
汽车部门
1.协程原理
2.挂起函数和多线程效率比较
3.Glide加载gif原理
4.MVVM架构在项目中如何设计
5.不用LiveData实现MVVM刷新View
6.LiveData在ViewModel注册
7.为什么使用ExoPlayer作为播放组件
8.ExoPlayer的进度条刷新原理
9.MediaPlayer和ExoPlayer的计时原理
10.MediaPlayer计时错误
11.ExoPlayer降噪处理
12.父View收到了ACTION_DOWN,子View对事件进行消费,父View能否收到ACTION_UP(onTouchEvent)
13.在自定义View中遇到过什么问题
14.res下的大图片多机型视频方案
吉利汽车
1.协程是什么
2.协程原理
3.线程的生命周期
4.线程池常用方法
5.系统提出的核心线程种类
6.自定义注解
7.性能优化
8.卡顿优化
9.ANR优化
10.什么代码容易出现ANR或卡顿
11.ANR分析
12.trace.txt生成的原理
13.Activity和Fragment的生命周期映射
14.Activity启动流程
15.一个比较好的APP架构应该怎么样
小红书
1.kotlin高阶函数
2.kotlin和Java的lamada
3.对lamada的理解,作为参数传递是对象吗
4.lamada内存泄漏
5.Kotlin双冒号
6.Kotlin协程
7.Kotlin协程和Java线程的区别
8.Kotlin协程的挂起和恢复
9.Kotlin协程和线程的联系
10.JAVA的线程和同步
11.synchronized关键字及升级过程
12.synchronized修饰方法和代码块的区别
13.对Lock接口的了解
14.volitile的理解
15.假定一个可能用到指令重排序的场景
16.JAVA线程池
17.线程池核心线程复用原理
18.线程池非核心线程如何不被回收
19.根据线程池设计网络请求的思路
20.线程池的队列
21.okhttp架构和流程
22.okhttp连接复用
23.对RxJava的了解
24.对lifecycle的理解
25.Kotlin 结构化并发
26.RxJava链式调用的原理
27.lifecycle如何封装成现在的使用形式的
28.ViewModel如何在Activity重建时保存数据原理
29.ExoPlayer协议如何适配
30.ExoPlayer整体架构的了解
31.ExoPlayer播放hls流和播放rtmp流的区别
吉利汽车
1.GCRoot是什么
2.Handler造成内存泄漏的原理,对应的GCRoot是什么
3.解决Handler内存泄漏的方案
4.弱引用
5.Runnable,Callable,Future的区别
6.synchronized使用及锁对象与竞争
7.volitile特点
8.DCL不加volitile可能会有什么问题
9.锁的升级过程
10.线程和JVM的栈的关系
11.Thread的生命周期
12.JAVA了解的数据结构
13.HashMap原理
14.不考虑碰撞的HashMap时间复杂度
15.ArrayList的增删改查时间复杂度
16.okHttp的原理
17.设计模式
18.动态工厂和静态工厂
19.日常的学习方式
20.对自己的技术定位
21.非android方面了解的技术
22.Fragment的使用及原理
23.四大组件的使用
24.深色模式的方案
25.工作难点及解决方案
26.deadline处理方案
搜狐
1.ViewModel的作用及原理
2.ViewModel被复用原理
3.LiveData的作用及原理
4.LiveData观察者模式的观察者和被观察者
5.LiveData本身观测了谁
6.DataBinding的理解,特点,优点
7.DataBinding在项目中的作用
8.优化做过哪些
9.如何获取卡顿优化具体的方法
10.内存优化
11.AndroidStudio的性能优化工具
12.内存泄漏的原因
13.GCRoot
14.SQLiteDatabase的helper及意义
探探
1.APP启动流程
2.对插件化的了解
3.一个Activity同时存在于两个进程
4.在A进程启动B进程的Activity
5.启动栈和进程的关系
6.Activity启动时获取View的属性
7.View的绘制流程和Activtivity的生命周期的关系
8.View.post原理
9.Handler.post原理
10.Handler如何保证线程安全
11.子线程创建Looper
12.MessageQueue消息分类
13.内存屏障消息使用场景
14.android系统什么时候会使用内存屏障消息
15.View的绘制流程
16.requestLayout和invalidate的区别
17.requestLayout和invalidate的底层实现机制
18.监听线上应用的帧率
19.IdleHandler的使用
20.View的事件传递机制
21.如何标记事件被拦截或消费
22.一个ViewGroup的View接收到了ACTION_DOWN事件,MOVE到了当前View的外界位置,View事件的执行流程
23.子View消费量ACTION_DOWN事件后,ACTION_MOVE是否会执行时间传递流程
24.在做项目的过程中有做过那些由技术驱动去做的内容
25.协程原理
26.性能优化
27.TCP与长链接
28.android保证长链接后台存活
29.长链接重试机制
APUS
1.自我介绍
2.介绍自己的任务栈
3.音视频用的什么技术
4.对kotlin的理解
5.kotlin =和区别
6.kotlin空安全原理
7.kotlin协程原理
8.kotlin协程解决问题的场景
9.JAVA的线程池
10.okhttp设置线程池参数
11.okhttp监控域名解析时长
12.Glide源码解析
13.Retrofit源码解析
14.Activity启动模式
15.Activity指定任务栈名称的方式
16.Android进程间通信方式
17.AIDL控制数据流向
18.Android6.0以后各个版本的特性
19.目前学习android的方法和途径
20.对组件化的了解
21.对插件化架构的了解
22.Jetpack框架的了解
23.ViewModel的原理
24.ViewModel组成的MVVM相比较MVP的优越性
瓜子二手车
1.JAVA int类型几个字节
2.每个字节几位
3.int的最大值
4.静态变量什么情况下会放在内存里
5.静态变量什么情况下会回收
6.有一个Long类型的静态变量,创建静态方法循环对静态变量进行++一百次,用一百个子线程调用这个方法,执行结果Long能不能确定,为什么
7.这个为什么线程不安全
8.如果方法里面i=i+1 会有什么不一样
9.这个Long的范围是多少
10.对这个静态变量加volitile关键字以后值能不能确定
11.把方法改成i=i+1 值会不会有问题
12.这个Long的值范围是多少
13.Http状态码404,400,500
14.域名写错会不会报404
15.一个dp等于几个像素
16.dp px相互关系
17.应用程序退到后台,被系统回收,调用的生命周期
18.横竖屏切换生命周期
19.android应用程序能使用的最大内存
20.android设置缓存大小
21.ANR触发时机
22.如何写好代码
理想汽车
1.和equals
2.String a = “abc”;String b = “abc”, ab ?
3.String c = new String(“abc”), a==c ?
4.重写equals的注意事项
5.hashcode的原理
6.hashcode注意事项
7.两个相等的对象hashcode值一样吗
8.抽象类和接口的区别
9.interface的关键字default的了解
10.JDK为什么提供interface的defalut
11.面向对象的特征
12.JAVA的四种引用
13.把变量声明为volitile的作用
14.volitile线程安全
15.JAVA的锁机制
16.建造者设计模式
17.建造者模式优缺点
18.策略设计模式
19.策略模式优缺点
20.代理设计模式
21.代理模式优缺点
22.动态代理设计模式
23.反射
24.不使用反射的动态代理模式
25.适配器设计模式
26.JVM内存模型内存回收
27.Class字节码的理解
28.对插件化的理解
29.Apk已经load了插件A,又load了插件B会不会有什么问题
30.Apk已经load了插件A,又load了插件B,有重名方法有什么问题
31.Activity生命周期
32.显示View的时候是什么生命周期
33.application启动流程
34.Fragment A里面弹出新的Fragment B,层层弹出,返回键时关闭Fragment的B,然后关闭A,怎么做
35.如果使用Fragment A里面的fragmentManager弹出Fragment B的方式,怎么做
36.Handler原理
37.Looper循环的过程中如何处理MessageQueue
38.自定义View的理解
39.android进程间通信方式
40.这几种里面哪个是通过binder实现的
41.对AIDL的理解
42.Binder机制
43.序列化数据
44.对注解的理解
45.如何获取注解标记的方法并调用
46.Retrofit源码解析
箩筐技术
1.JNI的理解
2.JVM的理解
3.JAVA线程的理解
4.线程安全的理解
5.volitile的理解
6.volitile修饰对象的问题
7.对Android系统源码的理解
8.Android事件传递机制
9.android ViewRoot
10.四大组件的使用场景
11.广播和服务的区别
博学明辨
1.组件间通信方式
2.约束布局原理
3.Handler执行流程原理
4.MessageQueue为什么使用链表实现
5.Looper休眠机制
6.Looper的for循环执行内容
7.eventBus原理
8.多进程开发的理解
9.多进程保活
10.Eventbus原理
火币
Global部门
一面
1.HashMap原理
2.创建HashMap要放入1000个不同hashCode的键值对,初始最大值多少
3.ArrayList的remove方法原理
4.对线程池的理解
5.使用线程池的考虑因素
6.线程池核心线程数数量的设计考虑因素
7.CPU密集型和IO密集型
8.DCL单例模式原理
9.Fragment的replace,hide,add,show的区别
10.多渠道打包
11.APK瘦身
12.Kotlin相比较java的好处
13.Retrofit中的Call对象如何转换成okhttp的call对象(这个题目是埋坑的)
14.Retrofit设计模式
15.项目中的组件化架构方案
16.对Arouter的理解
17.在Google Play上架过吗
18.对国外机型的适配方案
19.对低端机型和弱网的适配方案
20.线上问题排查方案
21.Room有什么问题
22.EditText的监控方法
二面
1.Android art 和 dalvik的区别
2.协程的理解
3.协程相对于线程的区别
4.内存优化
5.内存检测工具
6.优化方面可以做的内容
7.启动优化
8.单例能否继承(对象初始化过程)
9.APK体积优化
10.加载so有几种方法
11.okhttp责任链设计模式
12.Activity的onDestory回调时机
13.Activity调用finish后是否立即onDestory
14.Activity A 启动 Activity B,Activity A 的onDestory和Activity B 的onCreate执行顺序
15.Activity A 启动 Activity B,然后调用finish,Activity A 的onDestory和Activity B 的onCreate执行顺序
16.Activity的singleTop和singleTask的区别
17.Handler工作机制
18.Looper如何识别Handler
19.K线图的绘制和优化(非金融相关不用考虑这个问题)
钱包部门
1.Kotlin 闭包
2.Kotlin 静态方法
3.链表逆序
4.Handler的postDelay原理
5.P2P网络
6.okhttp发送请求的拦截方式
7.okhttp的拦截器设计模式
8.线上ANR监控策略
9.线上卡顿监控策略
10.区块链钱包的签名和交易原理
白龙马
1.项目的组件化实施方案
2.对Retrofit的理解
3.Retrofit调用接口的流程
4.SparseArray的理解
5.ArrayList的初始容量
6.HashMap的理解
7.HashMap为什么使用红黑树
8.对红黑树的理解
9.HashMap的时间复杂度
10.Android实现多线程
11.Android为什么设计handler机制
12.除了handler还有什么方式可以子线程刷新UI
13.Handler工作原理
14.IdleHandler的理解
15.对线程池的理解
16.线程池添加一个新任务的执行过程
17.多线程数据变量同步
18.synchronized实现原理
19.生产者消费者模式
20.LruCache
21.内存泄漏
22.JAVA中GC如何判断对象被回收
23.自定义View要继承哪几个方法
24.程序crash的收集
25.线上项目Crash的解决方案
26.把一千块钱分到10个钱包里面 要求分出的结果可以随意组成1-1000之间的值 怎么分
诺博汽车
1.Retrofit原理
2.okhttp原理
3.线程同步
4.handler
5.协程原理
6.viewModel原理
7.lifecycle原理
8.handler延时原理
9.okhttp复用连接池
向量之美
1.Android事件分发机制
2.onIntercept返回true的效果
3.dispatchEvent返回true的效果
4.Activity的PhoneWindow层级架构
5.在Activity的onCreate里获取控件的宽高
6.dialog弹窗对activity生命周期的影响
7.startService的方式启动service,service的生命周期执行哪些方法
8.Android 8.0新特性
9.Activity背景透明,强制竖屏,android8.0的问题
10.自定义View和ViewGroup的区别
11.ViewDragHelper的理解
12.Activity的onfinish执行后会立即执行onDestory吗
13.recyclerView如何删除条目
14.recyclerView删除条目不调用notifyItemRangeChanged后果
15.Looper死循环不会导致ANR的原因
16.handler机制
17.handler发送message发送到了哪里
18.handler发生内存泄漏的解决方案
19.Bitmap图片显示为400,实际图片为4000的解决方案
20.Bitmap缩放
21.非静态内部类创建静态实例会不会导致内存泄漏
22.性能优化
23.启动白屏的处理方案
24.kotlin的open关键字
25.kotlin的三元运算符
26.kotlin扩展函数
27.kotlin对象可空的意义
28.如何保证应用的稳定性
29.Retrofit的GET请求传递参数使用哪个注解
30.Retrofit的POST请求传递参数使用哪个注解
31.Retrofit的@url的作用
32.RxJava的ObserveOn和subScribeOn的意义
33.String,StringBuilder,StringBuffer的区别
34.-12.5四舍五入的结果
35.快速选择排序
聚信聚金
1.通信协议
2.Kotlin基本数据类型
3.字符串数字转换为数字
4.字符串转为数字原理
5.Android常用的数据结构
6.HashMap原理
7.为什么会有hash冲突
8.为什么HashMap使用红黑树不用二叉树
9.对自定义控件的理解
10.Activity B里面有大数据,耗时且即时的数据请求,用户在Activity A和B之间频繁切换,优化方案有哪些
11.网络请求没有取消为什么会导致内存泄漏
12.Handler机制
13.Looper无限轮询为什么不会卡死
14.Handler的消息什么时候发送到了主线程
15.Looper如何得到对应的线程
新氧医美
1.对优化做过哪些
2.对Glide的理解
3.Glide里的队列和线程池怎么做管理
4.TextView.setText执行了什么内容
5.在Android中绘出立体感的方案(GLSurfaceView)
6.自定义View的刷新怎么做
7.对ArrayMap的理解
8.ArrayMap和HashTable
美餐网
一面
1.给定一个有重复字符串的数组,求是否有重复字符串
2.给定一个链表,删除指定倒序的元素 链表 1-> 2-> 3-> 4-> 5 删除2号 则输出 1-> 2-> 3-> 5
3.给定一个long数字,32位运算求翻转结果,如:输入3 输出 3221225472
二面
1.各种业务方案,这个没有固定答案
2.handler原理
3.retrofit原理
亚洲创新集团
1.对于直播流播放的优化方案
2.直播页面渲染的优化方案
3.视频播放耗时的环节是哪个
4.视频流播放校验
5.Agora实现原理
6.Agora聊天的实现流程
7.MVVM对比MVP的优点
8.Kotlin对比Java的优点
9.性能优化
10.ANR
11.内存优化
12.项目规范
13.TCP/UDP区别
14.Jetpack用过那些
15.对ROOM的理解
16.android11适配方案
17.android12特性和适配
亮亮视野
1.为什么使用MVVM架构
2.DataBinding原理
3.DataBindingImpl打包
4.DataBinding空指针
5.组件间路由通信
6.Arouter原理
7.RTMP的理解
8.对音视频流二次处理在进行播放
9.声网直播用了什么功能
10.上下麦的业务逻辑处理
12.TCP的三次握手四次挥手
13.TCP链接校验可靠性
14.Socket保证信息序列
15.Socket保证信息链接
16.线程池
17.线程池工作原理
18.线程池能使用的队列
19.子线程创建Handler
20.单个线程如何判断looper唯一
21.ThreadLocal保证唯一性原理
22.ThreadLocal和Thread绑定
23.WebView渲染绘制内存优化
24.View占用内存优化
25.JVM一般是堆溢出还是栈溢出
十点读书
1.MVVM
2.DataBinding底层实现
3.View的事件分发机制
4.View事件冲突的处理方法
5.Glide原理
6.性能优化
7.内存泄漏
8.volitile的作用
9.Handler机制
10.RecyclerView对比ListView的优点
11.RecyclerView缓存机制
12.链表判断有环
13.比较2332和3223大小
14.短视频列表视频播放优化方案
微吼科技
1.组件间通信方案
2.不使用基础组件方案也不使用三方框架实现组件间通信方案
3.将一个页面的功能抽离成组件
4.线程同步
5.socket绑定的service可能会在后台被回收的处理方案
6.打开一个JS页面,替换顶部图片的方案
7.retrofit添加请求头
8.ExoPlayer缓存机制
9.View的绘制流程
10.View的传递机制
11.内存优化
12.内存泄漏
13.性能优化
14.绘制优化
15.RxJava
16.Kotlin优点
17.设计模式
18.反编译代码插入重新打包
带动热潮
1.进程和线程
2.线程之间内存共享
3.进程之间内存共享
4.多线程访问文件
5.多线程访问文件同步策略
6.同时进行多个网络请求在统一获取到结果后进行处理的解决方案
7.对多个网络请求进行先后顺序的请求执行方案(不使用硬编码的方式)
8.在launch里面包裹一个runBlocking,再包裹一个打印日志,会不会打印出来,可能会有什么问题
9.常见的GC回收算法
10.一个变量从栈赋值到堆,再从堆赋值到栈,最终引用计数是多少
11.android发生内存泄漏的场景
12.Http协议
13.401代表什么问题
14.400代表什么问题
15.https请求的过程中是一种加密还是两种加密
16.如何设计EventBus
17.EventBus设计时的监听如何设计响应
18.EventBus设计时的监听相应同步异步的设计方案
19.EventBus设计时的监听遍历执行阻塞处理方案
20.EventBus设计时,监听对应相关内容在子线程执行,在子线程中执行的内容长时间无法销毁的解决方案
21.对反编译的了解
22.近期看过什么技术书
红松科技
1.APP版本控制
2.APP强制更新方案
3.okhttp拦截器
4.okhttp拦截器加日志
5.okhttp和HttpClient区别
6.反射获取方法并调用
7.TCP和UDP区别
8.UDP可靠传输
9.线上日志方案
10.线上日志采集哪些信息
11.高日活音频卡顿方案
12.对逆向的了解
13.单例设计模式
14.EventBus
15.投屏功能
16.禁止截屏/录制功能
寰福科技
1.项目重构方案
2.项目重构以后的优势
3.线上崩溃和OOM统计
4.MVVM架构的优点
5.ViewModel在Activity横竖屏切换时保存属性原理
6.性能优化
7.ANR监控
8.埋点方案
9.ANR原理
10.ANR由什么触发
11.设计一个触发ANR的机制
12.ibinder机制
13.andoid绘制流程
14.andoid时间传递机制
15.handler机制
16.phoneWindow如何捕获焦点
17.JVM虚拟机和Dalvik虚拟机的区别
18.apk里面包含哪些文件
19.apk签名机制
20.apk打包流程及原理
21.static修饰静态方法和普通方法的区别
22.synchronized保证线程执行顺序
23.保证线程顺序的方案
24.在B线程中中断有死循环的A线程
25.Object的wait和notify方法
26.Object的notifyAll和notify方法的区别
27.JAVA的四种引用
28.弱引用和软引用区别
如影智能
1.JAVA的类加载机制
2.JAVA的GC内存模型
3.为什么JDK1.8使用新生代老生代内存模型
4.为什么新生代回收使用复制算法老年代不使用
5.JAVA虚拟机内存分布
6.JAVA虚拟机内存中哪些是线程共享哪些不共享
7.死锁的原理
8.synchronized使用及区别
9.HashMap的原理
10.HashCode的计算方法
11.HashMap如何使用HashCode计算下标
12.HashMap插入元素的原理
13.HashMap中数据结构使用红黑树的原理
14.volitile作用
15.设计一个volitile使用场景
16.volitile在底层实现
17.handler机制
18.handler post 延时消息的流程
19.okhttp原理
20.glide原理
21.retrofit原理
22.组件化方案
23.项目中的职责
智联招聘
1.JAVA的基本数据类型
2.静态内部类和内部类的区别
3.静态内部类访问外部类变量
4.常见的Exception
5.try catch 捕获 Error
6.try catch跨线程捕获异常
7.StringBuffer和StringBuilder的区别
8.StringBuffer线程安全原理
9.String线程安全
10.String可修改
11.静态变量,静态代码块,普通变量,普通代码块,执行顺序
12.静态变量,静态代码块,普通变量,普通代码块,构造函数执行顺序
13.equals和的区别
14.基本数据类型equals和的区别
15.JAVA引用类型
16.软引用使用场景
17.JVM内存模型
18.两个对象相互引用是否会标记为垃圾
19.哪些对象作为GCRoot
20.JVM内存模型分为哪几块
22.Activity启动模式
23.ActivityA 启动 ActivityB的生命周期流程
24.ActivityB 退回 ActivityA 生命周期流程
25.Handler机制
26.Handler延时消息
27.IDLEHandler
28.ThreadLocal
29.ThreadLocal的主要作用
30.常用的设计模式
31.对单聊的了解
32.okhttp原理
33.okhttp用到哪些设计模式
35.Retrofit和okhttp区别
36.动态代理和静态代理的区别
达不溜
1.APP启动模式
2.Handler原理
3.Handler绑定Looper
4.okhttp原理
5.RecyclerView和ListView的区别
6.JAVA中线程调度方式
7.APP启动流程
8.OOM的分析和解决
9.线上OOM排查方案
10.JVM的GC机制
11.android大图加载
12.超大视频加载策略
13.视频剪辑及美化的实现方案
14.视频提高加载速度及预加载方案
15.腾讯云IM自定义消息体实现方案
16.分享视频的某一帧
17.挑战性的工作及实现
18.常用设计模式
19.APP启动优化
20.APP卡顿优化
21.Handler有几种消息
22.Handler同步屏障
23.Handler同步屏障作用
24.RequestLayout和invalidate
25.View的事件分发机制
26.从点击屏幕开始View的事件传递过程
27.ViewGroup中执行View分发的详细过程
28.ViewGroup中dispatchEvent做了什么判断
29.WindowManager的了解
30.Dialog和PopupWindow的创建流程原理
31.自定义组件化路由框架
32.对ARouter的理解
33.EventBus的原理
34.对热修复原理的理解
35.Jetpack用到哪些
36.MVVM优势
37.HashMap的原理
38.HashMap初始值调整为2^n的计算过程
39.HashMap的put过程
40.HashMap计算下标的过程
41.HashMap扩容过程
42.LinkedHashMap原理
43.LruCache用的LinkedHashMap什么特性
44.synchronized和ReentrantLock
45.synchronized公屏锁
46.volitile的作用
47.DCL不使用volitile可能出现什么问题
48.层序遍历二叉树
新美互通
1.MVP和MVVM的优点
2.ARouter原理
3.路由实现方案
4.启动优化
5.ANR优化
6.启动优化在Application可优化的点
7.线程池提交任务的执行流程
8.线程同步的方式
9.synchronized和volitile
10.synchronized在静态方法和普通方法的区别
11.JVM回收算法
12.那些对象可以当做GCRoot
13.EventBus原理
14.内存优化
15.内存泄漏
16.native内存泄漏方案
17.热修复Tinker原理
18.Activity和AMS交互流程
19.哪个类管理Activity,比如有多少个Activity,在哪个栈,Activity在哪个生命周期
20.创建Handler如何关联主线程
21.主线程new Handler和子线程new Handler的区别
写到这我的面经分享就告一段落了,从上面一些公司问的问题可以看出,像Framework、APP性能优化、JVM、数据结构与算法还有架构方面的知识点是问比较多。大家可以通过自己薄弱知识点进行由浅入深的进行复习,来应对自己往后自己的面试。
在这里我给大家分享下我整理的一些 Android 中高级进阶的学习文档和面试学习文档(这些题我基本都刷了三遍以上,毕竟年前突然被裁心里是有点迷),其中大部分都是大企业面试常问的面试题,可以对照这查漏补缺,当然了,这里所列的肯定不可能覆盖全部方式,不过对大家找工作肯定是有帮助!
如有需要请去我 GitHub 中查阅,望这些干货能够帮助到大家!!!