2020安卓开发面试总结

今年因为公司的一些变动,深思熟虑后决定出来重新找工作。刚开始以为找工作会一帆风顺,也没多做准备,结果发现现实狠狠的给了我一耳光。所以,找工作之前还是要把面试相关的知识点仔细的准备才行。一般的面试会有以下几个方面的面试题,基础知识Android和常用框架的源码项目经历。记录以下面试过程中遇到的一些方向和问题。

基础知识

可以细分为Java基础,Android基础和网络基础

Java基础

1,集合相关:SparseArray,ArrayMap,HashMap,ConcurrentHashMap。
1-1,SparseArray和ArrayMap,与HashMap相比的优点是什么?
1-2,SparseArray的get操作时间复杂度?
1-3,什么时候适合使用SparseArray替代HashMap
1-4,HashMap的put方法
1-5,ConcurrentHashMap的get和put方法,如何实现同步的

2,多线程和锁相关
2-1,sychornized修饰静态方法和非静态方法的区别?
2-2,volatile关键字
2-3,线程状态转换,wait和sleep的区别
2-4,java的4个线程池的工作流程

3,虚拟机相关,gc,内存,引用
3-1,标记清楚marked-sweep算法,复制coying算法,标记压缩算法
3-2,内存分布,新生代(Eden,Survivor1,Survivor2),老年代,永久代
3-3,art的gc算法
3-4,强引用,弱引用,软引用,虚引用(这个好像用不到)的区别
3-5,daivik和art的区别
3-6,dex文件为什么有最大方法数限制

4, 设计模式
4-1,单例的实现,如何防止被反射调用。

Android基础

1,进程间通信
1-1,有哪些进程间通信的方式
1-2,对Binder的理解
1-3,Binder的优势

2,Handler机制的理解
2-1,描述Handler机制
2-2,postDelay是如何实现的
2-3,HandlerThread的理解
2-4,Messenger的理解

3,事件分发机制move,down,up,cancel
3-1,描述点击事件分发机制,这个一定要搞的很清楚,会有各种问题。
3-2,有一个LinearLayout-A,里面有一个Button-B,按住B,然后移动到B外,事件是如何分发的。

4,activity相关
4-1,activity启动模式
4-2,activity启动过程
4-3,activity生命周期,与fragment嵌套的时候,启动过程生命周期,销毁过程的生命周期,启动一个透明的activity生命周期,返回上一层时的生命周期
4-4,window,decorView的理解
4-5,如何实现activity在不同应用之间的转移(taskAffinity + allowTaskReparenting)
4-6,taskAffinity的理解

单纯使用 taskAffinity 不能导致 Activity 被创建在新的任务栈中,需要配合 singleTask 或者 singleInstance

5,Service
5-1,start和bind的区别,多次start和多次bind的生命周期

6,其他
6-1,SurfaceView和View
6-2,apk安装过程
6-3,插件化的理解
6-4,统计方法执行时间的方法,安卓AOP相关知识(APT, AspectJ, Javassist,Javapoet,TransformAPI,JVMTI,ASM)
6-5,webview相关知识,如何设置cookie
6-6,卡顿检测的两种方法MainLooper的setMessageLogging和Choreographer.getInstance().postFrameCallback
6-7,anr的原理(postdelay延迟消息,埋炸弹 拆炸弹 引爆炸弹)

网络基础

1,https的过程解析
2,http状态码206等
3,http请求头和响应头的相关参数,range,host等
4,http的缓存机制:expire cache-control last-modify E-tag
5,tcp三次握手

Android常用框架源码

1,ViewModel和LiveData

1-1,LiveData的生命周期是如何实现的,旧版本的Activity如何实现Liveda的生命周期
1-2,LiveData会有什么问题吗-粘性的,生命周期resume时才会生效。
1-3,LiveData如何让他不要粘性
1-4,ViewModel的数据什么时候会销毁,例如手机屏幕旋转导致activity销毁时,ViewModel的数据会怎么样

2,Kotlin

2-1,Kotlin的协程
2-2,常用关键字
2-3,object关键字
2-4,kotlin中的静态方法的理解

3,LeakCanary的实现原理

4,RxJava

4-1,背压
4-2,线程池管理
4-3,为什么subscribeOn第一次执行生效

5,EventBus

5-1,EventBus的实现原理
5-2,粘性事件是怎么实现的

6,fresco和glide

6-1,fresco和glide的缓存机制

项目经历

1,你觉得最有难度的项目,最成功的项目

2,你做过什么性能优化相关的工作

3,遇到问题的时候,怎么解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值