Android面试

297 阅读3分钟

今天面试了一家做出行项目的公司,现将面试题总结如下:

1. 说一下目前使用的项目技术框架

这个主要是介绍自己在开发中的技术栈,每个人的使用的技术栈可能不同,我使用的是mvp + retrofit + rxjava,介绍了自己上家公司的项目人员组成情况。

2. 项目线上稳定性如何统计

面试的时候主要说了通过手动埋点,bugly框架,友盟统计等 来跟踪线上项目的异常,数据。其实应该谈到APM,但是面试的时候忘记提这一点了。

如果项目是出于研发期,可能更加关注异常,此时接入bugly比较合适, 如果项目处于快速成长期,数据有限,可以考虑使用商业APM,这样可以快速拥有一套APM性能监控组件,但是数据安全问题则无法避免。 如果项目处于稳定期,可以考虑自建APM

3. 线上特殊机型问题异常如何排查解决?手里没有该机型真机

这个问题,在面试的时候确实没有回答好,提到了使用云测真机,但是这需要花钱。下来才想起APM,通过APM来抓取日志进行分析,如果项目没有搭建APM,那说什么也白搭,根本没法还原线上特殊机型现场。

4. 如何检测并解决内存泄露

这个在面试的时候,主要提到了一些常见的内存泄漏,比如单例模式,匿名内部类,流,cursor等使用完毕后需要关闭,这个是从编码层面来说,至于说如何检测,可以使用leakCanary工具,MAT工具来分析内存泄漏,当然现在的Android Studio 版本更新特别快,你也可以使用profile来分析内存泄漏。

5. 一个activity卡顿,如何排查问题?

这个面试题,当时答得不是特别好,也忘了请教面试官。当时主要就是说,卡顿可能的原因,比如layout渲染问题,层级过多,或者短时间执行了多次特别消耗CPU或者GPU的动画,现在回想,或许可以通过traceView或者sysTrance来分析整个activity的生命周期,到底是哪些地方耗时严重,这个还要下来看看文章。

6. 说一下事件分发机制

事件分发机制也是安卓面试的时候常问的面试题,主要就是一个事件,从activity从上往下分发,涉及到三个方法,dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent,主要就是解释清楚这三个方法,以及事件从上往下分发的流程,事件的分发,拦截,消费。

7. 如何设计一个大图加载

这个面试题没有回答上来,确实也忘记了,关于bitmap大图加载的优化,因为平时使用的glide加载图片,而忽视了这一块基础知识的学习。确实,bitmap的加载,是安卓中特别容易占用内存,非常容易导致OOM的发生。主要优化方向,也就是根据bitmap的宽高,和ImageView的宽高,进行按比例压缩,如果是长图加载,可以考虑采用分段加载的方式,涉及到的类是BitmapRegionDecoder这个类,以及bitmap图片的几种模式,ARGB_8888,RGB_565,ARGB_4444,Alpha_8,这些能够解释清楚。

8. 是否做过地图,机车应用,如果有介绍一下

这个确实没有做过,没办法,有大佬告诉我怎么回答这个问题好呢?