- 介绍自己负责的部分,如何实现的。
- 自定义view viewGroup
- activity的启动流程
- 事件传递及滑动冲突的处理
- 插件化(activity如何加载及资源处理
- 内存优化 ,如何避免oom
- 内存泄漏如何处理及如何排查
- handler问题
- 图片加载用的什么以及原理
- 从一堆数据里怎么查找最大的n个数
- 快速排序
字符串匹配
介绍自己负责的部分,如何实现的
这个把自己负责的模块说清楚就好,一般有一下几个方面可以说一下,前提是不要给自己挖坑
- 自己负责模块在整个项目中的角色,也就是功能描述
- 开发前的自己的一些思考,比如对业务的抽象,接口的定义,协议的定义等等
- 开发编码过程中遇到的难点以及坑
- 排查问题以及结解决方式
- 兼容性保证
- 性能优化
- 上线之后模块导致crash的比例
自定义view viewGroup
这个就是约定的几个方法,onMeasure,onLayout,onDraw,measure,layout,draw
同时注意写方法的调用时机以及区别,比如onMeasure是个模版方法是在measure下调用的,这个方法在viewGroup里面,
自定义的这些就已经足够了,如果还扩展一些更新问题,子线程能不能更新,是可以的,在ViewRootImpl没创建之前可以更新,不同sdk这个类可能名字不一样。
activity的启动流程
这个肯定不是说activity的生命周期,是启动加载过程,大致说下流程,具体的要自己看代码了,大致过程有:
这里可能分好几种情况,其实都差不很多,这里就说一种情况,startActivity这个怎么启动Activity的,
startActivity->ActivityManagerService->ActivityThread->Activity,大概参与就这几个核心类,里面经过了两层binder通信,最后路由到IApplicationThread,然后到ActivityThread中的H消息队列中启动Activity,细节很多,可以在评论询问。
事件传递及滑动冲突的处理
事件传递理解成责任链式调用就好,也就是从最内层到外层时间委派,如果事件consume了,那么就给这个view处理,不然从外向内冒泡,
冲突处理举个实例就好,比如SlideMenu与banner或者ListView与Scrollview的冲突等等,说出基本思路就行,这些解决一般都是重写那几个事件方法,然后各种判断就好
插件化(activity如何加载及资源处理)
Activity使用占坑hook加载,也可以使用静态代理,静态代理就需要自定义classloader,记住这个加载模式就行,再多细节在评论回复吧
,资源处理就是assetmanager的创建,然后资源冲突处理,简单的可以构建多个assetmanager就没有冲突问题,应为隔离了,如果使用一个那么
打包aapt定制一下就行,还有很多细节,在评论回复吧,说不完了。
内存优化 ,如何避免oom
内存优化太多要说的了,有套路的回答,基本就是避免跟gc配合好工作,比如:尽量复用对象,处理无用对象,避免内存泄漏,压缩对象等等
,尽量将大对象特殊处理,比如bitmap占用内存较多,可以jni层与java层配合一起,大小压缩,质量压缩,imsimplesize的大小定义,规范等等,程序中有内存管理模块,避免内存压力大的时候
,能够释放内存,避免oom发生的几率,还有很多方面,在评论回复吧。
内存泄漏如何处理及如何排查
内存泄漏最大的问题就是无用对象常驻内存,导致内存压力很大,最后可能导致oom发生。尽量将对象生命周期可以在控制的能力之内,具体的在回复说吧,也很多场景,比如:context 除了特殊情况用activity,其他我们没理由不用application。排查导出堆空间,然后mat分析,程序里面
用leackcanary定位。
handler问题
这个需要回复两个基本的,首先handler的创建需要loop,loop怎么创建的,同时这个里面怎么保证loop线程安全的,还有就是消息如何分发的,也就是消息发送到接受的流程,
还有callback对消息处理的影响,这些足够了,还可以说可以跨进程,这样就更棒了,具体的在回复说,太多了。
图片加载用的什么以及原理
图片加载的太多了,说个自己非常熟悉的就行,不要给自己挖坑,都懂的,比如你熟悉uil,那就说具体的加载过程,
套路都差不多,都是创建图片task,先从缓存取出来,取不到就去网络下载,下载完之后,同时缓存起来,这里需要说下,线程池,队列,pause,resume的具体细节,比如跟view,activity的绑定关系。回复具体说,也很多
从一堆数据里怎么查找最大的n个数
这个用归并排序,或者直接快排,没啥还说的。不会的自己google看算法,算法后面我会写出来到文章里面。
快速排序
基本思想挖坑,分而治之,按照这个思路看代码就行
字符串匹配
这个kmp算法,或者最基本的吧,不考虑时间,空间复杂度的条件下,但是不要说这个,太low了点。其实这些算法背下来就好,不是业务场景的,意义不大,但是必须要会,不然吃亏了
架构
其实架构没有固定模式,能够说出自己对架构的理解就很好,比如mvp,不同人对这个理解不一样,最好的,够用的,最适合业务的才是好架构,这个也很多要说,评论说吧。