记录之前一次面试。
先说一下面试问到的需要的点:tcp/udp.volatile关键字.多进程.hashmap.anr.activity.MVP.算法题.自定义view.OKHTTP.java相关.数据结构.性能优化.
为此我整理了一份983页的PDF,把自己平时收集的面试题,和平时工作中碰到的都融合进去了
更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取
- 自定义view的过程
- java线程,安卓线程池
- handle
- gc,gc的使用方式
- okhttp源码
- 设计模式
- hashmap源码
- 线程安全性
- hash运算过程
- java相关(面向对象的理解 多态的实习 接口和抽象类 内存模型 多线程 线程池原理)
- 性能优化相关
问到的问题中,还是性能优化相关的对我的印象比较深刻,所以着重讲一下(答案仅供参考)
1、图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理
首先我们要清楚图片的三级缓存是如何的
如果内存足够时不回收。内存不够时就回收软引用对象
2、内存中如果加载一张 500*500 的 png 高清图片.应该是占用多少的内存?
- 不考虑屏幕比的话: 占用内存=500 * 500 * 4 = 1000000B ≈
0.95MB - 考虑屏幕比的的话: 占用内存= 宽度像素 x (
inTargetDensity
/inDensity
) x 高度像素 x(inTargetDensity
/inDensity
)x 一个像素所占的内存字节
大小 - inDensity 表示目标图片的 dpi(放在哪个资源文件夹下),
inTargetDensity
表示目标屏幕的 dpi
3、WebView 的性能优化 ?
一个加载网页的过程中,native、网络、后端处理、CPU 都会
参与,各自都有必要的工作和依赖关系;让他们相互并行处理
而不是相互阻塞才可以让网页加载更快:
- WebView 初始化慢,可以在初始化同时先请求数据,
让后端和网络不要闲着。 - 常用 JS 本地化及延迟加载,使用第三方浏览内核
- 后端处理慢,可以让服务器分 trunk 输出,在后端计算
的同时前端也加载网络静态资源。 - 脚本执行慢,就让脚本在最后运行,不阻塞页面解析。
- 同时,合理的预加载、预缓存可以让加载速度的瓶颈更
小。 - WebView 初始化慢