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

作者:Dynamic_2018
链接:https://www.jianshu.com/p/d3742ec3a969
声明:本文是 Dynamic_2018 原创,转发等请联系原作者授权。

前言

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

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




更多相关文章

  1. android user模式下切换为root权限方法
  2. Android遇到的异常及解决方法
  3. Android(安卓)Studio中如何新建assets文件夹
  4. 【Android-FaceBook】facebook Android配置过程中生成密钥哈希+o
  5. Android(安卓)SDK Manager 代理服务器设置
  6. 描述清点击 Android(安卓)Studio 的 build 按钮后发生了什么
  7. android开发给linearlayout设置边框
  8. 将x264移植到Android
  9. webview 设定和使用缓存来获取网页中的js,css和图片资源

随机推荐

  1. android_tips
  2. Android:用DialogFragment实现LoadingDial
  3. Android AsyncTask 源码分析详解
  4. android基础学习--->Android(安卓)Shared
  5. Android SQLiteOpenHelper Sqlite数据库
  6. Mac下关于The "android" command is depr
  7. android RSA和Java RSA加密不一致的坑
  8. android配置X86虚拟机
  9. Android数字跑动效果NumberRunView 类似
  10. 睡眠唤醒机制简介