一线互联网公司面试简单分析

  1. 介绍自己负责的部分,如何实现的。
  2. 自定义view viewGroup
  3. activity的启动流程
  4. 事件传递及滑动冲突的处理
  5. 插件化(activity如何加载及资源处理
  6. 内存优化 ,如何避免oom
  7. 内存泄漏如何处理及如何排查
  8. handler问题
  9. 图片加载用的什么以及原理
  10. 从一堆数据里怎么查找最大的n个数
  11. 快速排序
  12. 字符串匹配

介绍自己负责的部分,如何实现的

这个把自己负责的模块说清楚就好,一般有一下几个方面可以说一下,前提是不要给自己挖坑

  1. 自己负责模块在整个项目中的角色,也就是功能描述
  2. 开发前的自己的一些思考,比如对业务的抽象,接口的定义,协议的定义等等
  3. 开发编码过程中遇到的难点以及坑
  4. 排查问题以及结解决方式
  5. 兼容性保证
  6. 性能优化
  7. 上线之后模块导致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,不同人对这个理解不一样,最好的,够用的,最适合业务的才是好架构,这个也很多要说,评论说吧。

    原文作者:ActivityManagerService
    原文地址: https://juejin.im/entry/5849194261ff4b006cb607aa
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞