记不太清了,一面二面合在一起写。
1.事件分发机制。
这个调试过sdk的源码,断点调试大法好。从activity的dispatchTouchEvent->phoneWindow->frameLayout->viewGroup->view
中间提了下,viewGroup dispatchTouchevent的action_down和firstTouchTarget那里的逻辑,顺便解释了为什么第一次拦截后,viewGroup后续不再调用OnIntercept直接拦截的原因。以及disallowIntercept标记的作用(内部拦截方式),因为这写代码都是在一块的,调试过的同学应该都了解的(结合着开发艺术探索看,效果更佳)。
然后还有个点就是viewGroup的dispatchTransformeTouchevent到view的dispatchTouchEvent,那里有touchListener优先于performClick(onClick事件)
源码调试时,如果出现代码不对应的情况,尝试下genymotion版本和sdk版本对应,比如模拟器7.1,sdk25
2.设计模式
- 单例模式
手撸单例模式的双重检测方法
谈了下volite的作用(内存可见,禁止指令重排序)
谈了下静态内部类实现单例模式 - 责任链模式
接着上面事件分发机制是基于什么设计模式,这个了解过这是责任链模式。 - 模板方法模式
基于android activity生命周期 oncreat onresume那些方法基于什么设计模式,最开始没get到点,稍微提示了下,答这是模板方法。
3.android内存分析,描述分析的过程。如果怀疑一个activity存在内存泄漏,应该怎么做。这个平时在用,所以也比较简单。
4.问了是否看过okhttp源码,没看过(公司的技术太老了,okhttp retrofit就没在项目上用过)。看过volley源码的,大概讲了下缓存队列、方式。然后被追问了下队列的数据结构,priorityBlockingQueue这个倒是知道,然后顺便结合线程池通过Executors静态工程方式建造那几张常用的线程池,它们的主要区别也是工作队列。但是后面二面的时候被追问blockingQueue接口的几种get set方法的异同,这个没注意过,没答上来 GG。
5.android打包过程,如何把资源文件和java代码打成apk的。这个没具体了解过(平时项目中都是用打包服务器,确实没怎么接触过),知道class文件到dex文件,之前的重心放在了jvm 和 dalvik ART的异同上了。这个也回答的不好。
参考apk打包流程
6.android A->B->A的生命周期,如果页面被销毁,数据该怎么保存。这个比较基础,重点在onpause不能做耗时操作嘛。被销毁调用onSaveInstanceState存在bundle里面,在oncreate或者onrestore的时候从bundle里面取。接着问了一下如果oncreat第一次正常启动的时候也会调用也去取吗?在里面加一个判断,有bundle才去取。
7.问了下retrofit的原理,结合rxjava的使用,databindng的使用,mvp mvc mvvm的异同。虽然平时项目的技术很老,但是还好自己空余时间下去写demo用过这些技术,基本都答上来了。
8.和js交互的方式。jsInterface和jsBridage介绍了下。然后问了解过jsBridage是怎么实现的吗? 大概看过两端定义协议,然后js回调json数据给客户端。但是没有自己去实现一次jsBridage,所以还是有些模糊。
9.android模块化 aar相关的东西。我自己没做过aar开发,答知道和jar的区别,里面多了资源文件。然后追问aar的资源文件和主项目的资源文件起冲突了怎么办,比如string.xml冲突和manifest冲突。这个没做过,没答上来,GG。
10.图片相关。问用过哪些图片框架,答gilde。然后接着问看过源码吗。答没看过,但是ImageLoader写过。然后介绍了下三级缓存,lruCache的linkedHashMap,弱引用保存图片。
11.线程间通信。答handler和接口回调。说了下原理,这个因为之前都写过博客,所以还是比较容易。
12.arrayList删除元素 a,b,b,c删除完b。这个当时没答好,需要用iterator去删除。