记录之前一次面试。
先说一下面试问到的需要的点:tcp/udp.volatile关键字.多进程.hashmap.anr.activity.MVP.算法题.自定义view.OKHTTP.java相关.数据结构.性能优化.
为此我整理了一份983页的PDF,把自己平时收集的面试题,和平时工作中碰到的都融合进去了
(更多完整项目下载。未完待续。源码。图文知识后续上传github。)
可以点击关于我联系我获取完整PDF
(VX:mm14525201314)
问到的问题中,还是性能优化相关的对我的印象比较深刻,所以着重讲一下(答案仅供参考)
首先我们要清楚图片的三级缓存是如何的
如果内存足够时不回收。内存不够时就回收软引用对象
inTargetDensity
/inDensity
) x 高度像素 x(inTargetDensity
/ inDensity
)x 一个像素所占的内存字节inTargetDensity
表示目标屏幕的 dpi一个加载网页的过程中,native、网络、后端处理、CPU 都会
参与,各自都有必要的工作和依赖关系;让他们相互并行处理
而不是相互阻塞才可以让网页加载更快:
参考回答: 避免 OOM 的问题就需要对大图片的加载进行管理,主要通
过缩放来减小图片的内存占用。
BitmapFactory
提供的加载图片的四类方法(decodeFile
、decodeResource
、decodeStream
、decodeByteArray
)BitmapFactory.Options
参数,通过 inSampleSize
参inSampleSize
的取值应该总是为 2 的指数,即BitmapFactory.Options
的inJustDecodeBounds
参数设为 true 并加载图片BitmapFactory.Options
中取出图片的原始宽高信inSampleSize
BitmapFactory.Options
的inJustDecodeBounds
参数设为 false,重新加载图片参考回答:
内存判定对象可回收有两种机制:
引用计数算法: 给对象中添加一个引用计数器,每当有
一个地方引用它时,计数器值就加 1;当引用失效时,
计数器值就减 1;任何时刻计数器为 0 的对象就是不可
能再被使用的。然而在主流的 Java 虚拟机里未选用引用
计数算法来管理内存,主要原因是它难以解决对象之间相互循环引用的问题,所以出现了另一种对象存活判定
算法。
GC 回收算法有以下四种:
AndroidProfiler
工具或 MAT另外,影响界面卡顿的两大因素,分别是界面绘制和数据处
理。
ConstraintLayout
等)onCreate()
中不执行耗时操作 把页面显示的 View 细AsyncTask
里逐步显示,用 Handler
onCreate()
和onReume()
的时间,使得用户能尽快看到页面,操作AdapterView
的效率。startActivity
中的 intent 的信息,然后在去创建进程,最后启Acitivy
,即冷启动。而启动出现白黑屏的问题,就是在这段windowIsTranslucent
和 windowNoTitle
,将这两个android:windowBackground
属性为启动页背景图即不会立即释放对象占用的内存。 如果对象的引用被置为 null,
只是断开了当前线程栈帧中对该对象的引用关系,而 垃圾收集
器是运行在后台的线程,只有当用户线程运行到安全点(safe
point)或者安全区域才会扫描对象引用关系,扫描到对象没有被
引用则会标记对象,这时候仍然不会立即释放该对象内存,因
为有些对象是可恢复的(在 finalize 方法中恢复引用 )。只有
确定了对象无法恢复引用的时候才会清除对象内存。
动画区别:
RecyclerView
中,内置有许多动画 API,例如:notifyItemChanged()
, notifyDataInserted()
,notifyItemMoved()
等等;如果需要自定义动画效果,RecyclerView.ItemAnimator
类)完成RecyclerView.setItemAnimator();
ListView
并没有实现动画效果,但我们可以在刷新区别:
ListView
中通常刷新数据是用全局刷新notifyDataSetChanged()
,这样一来就会非常消耗资onItemChanged()
方法,在方法里面获取到这个 itemgetFirstVisiblePosition()
),然getView()
方法来刷新这个 item 的数据;RecyclerView
中可以实现局部刷新,例如:notifyItemChanged();
缓存区别:
RecyclerView
比 ListView
多两级缓存,支持多个离ItemView
缓存,支持开发者自定义缓存处理逻辑,支RecyclerView
共用同一个RecyclerViewPool
(缓存池)。 ListView
和 RecyclerView
缓存机制基本一致,但缓存BaseAdapter
:抽象类,实际开发中我们会继承这个类并且重ArrayAdapter
:支持泛型操作,最简单的一个适配器,只能展SimpleAdapter
:同样具有良好扩展性的一个适配器,可以自SimpleCursorAdapter
:用于显示简单文本类型的 listView
,RelativeLayout
会让子 View 调用 2 次 onMeasure
,LinearLayout
在有 weight 时,也会调用子 View 2 次onMeasure
RelativeLayout
的子 View 如果高度和RelativeLayout
不同,LinearLayout
和FrameLayout
而不是 RelativeLayout
。
请查看完整的PDF版
(更多完整项目下载。未完待续。源码。图文知识后续上传github。)
可以点击关于我联系我获取完整PDF
(VX:mm14525201314)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。