一年经验 Android 面试记录

Posted code小生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一年经验 Android 面试记录相关的知识,希望对你有一定的参考价值。

code小生,一个 android 领域技术分享平台

前言

记不太清了,一面二面合在一起写。

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打包流程
https://blog.csdn.net/jason0539/article/details/44917745

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去删除。




以上是关于一年经验 Android 面试记录的主要内容,如果未能解决你的问题,请参考以下文章

一面之缘也不能放弃->一年Android社招经验

一年iOS工作经验,如何一举拿下百度美团快手等Offer面经(附面试题)

如果你是面试官,我来应聘一年Android开发经验,你会问什么?

面试官一句话点醒了我:三年的 Android 开发经验 = 人家一年!凭啥给你 25K?

记大厂Android开发的一些面试经验

Android 面试官精心整理: “五年面试经验“