2019.5.31今日面试题 - Bitmap&性能优化

Bitmap

加载图片的时候需要注意什么?

技术点:Bitmap高效加载

参考回答

  • 直接加载大容量的高清Bitmap很容易出现显示不完整、内存溢出OOM的问题,所以最好按一定的采样率将图片缩小后再加载进来
  • 为减少流量消耗,可对图片采用内存缓存策略,又为了避免图片占用过多内存导致内存溢出,最好以软引用方式持有图片
  • 如果还需要网上下载图片,注意要开子线程去做下载的耗时操作

 LRU算法的原理?

技术点:LRU算法

参考回答:为减少流量消耗,可采用缓存策略。常用的缓存算法是LRU(Least Recently Used):

  • 核心思想:当缓存满时, 会优先淘汰那些近期最少使用的缓存对象。主要是两种方式:
    • LruCache(内存缓存):LruCache类是一个线程安全的泛型类:内部采用一个LinkedHashMap强引用的方式存储外界的缓存对象,并提供getput方法来完成缓存的获取和添加操作,当缓存满时会移除较早使用的缓存对象,再添加新的缓存对象。
    • DiskLruCache(磁盘缓存): 通过将缓存对象写入文件系统从而实现缓存效果

引申:感兴趣可了解具体实现算法

 

性能优化

项目中如何做性能优化的?

技术点:性能优化实例

思路:举例说明项目注意了哪些方面的性能优化,如布局优化、绘制优化、内存泄漏优化、 响应速度优化、列表优化、Bitmap优化、 线程优化......

 了解哪些性能优化的工具?

技术点:性能优化工具

思路:做项目时是否使用过的系统自带的性能优化工具?公司是否有自己的性能优化工具?实现原理怎样的?

 布局上如何优化?

技术点:布局优化

参考回答:布局优化的核心就是尽量减少布局文件的层级,常见的方式有:

  • 多嵌套情况下可使用RelativeLayout减少嵌套。
  • 布局层级相同的情况下使用LinearLayout,它比RelativeLayout更高效。
  • 使用<include>标签重用布局、<merge>标签减少层级、<ViewStub>标签懒加载。

 内存泄漏是什么?为什么会发生?常见哪些内存泄漏的例子?都是怎么解决的?

技术点:内存泄漏

参考回答:内存泄漏(Memory Leak)是指程序在申请内存后,无法释放已申请的内存空间。简单地说,发生内存泄漏是由于长周期对象持有对短周期对象的引用,使得短周期对象不能被及时回收。常见的几个例子和解决办法:

  • 单例模式导致的内存泄漏:单例传入参数this来自Activity,使得持有对Activity的引用。
    • 解决办法:传参context.getApplicationContext()
  • Handler导致的内存泄漏:Message持有对Handler的引用,而非静态内部类的Handler又隐式持有对外部类Activity的引用,使得引用关系会保持至消息得到处理,从而阻止了Activity的回收。
    • 解决办法:使用静态内部类+WeakReference弱引用;当外部类结束生命周期时清空消息队列。
  • 线程导致的内存泄漏:AsyncTask/Runnable以匿名内部类的方式存在,会隐式持有对所在Activity的引用。
    • 解决办法:将AsyncTask和Runnable设为静态内部类或独立出来;在线程内部采用弱引用保存Context引用
  • 资源未关闭导致的内存泄漏:未及时注销资源导致内存泄漏,如BraodcastReceiver、File、Cursor、Stream、Bitmap等。
    • 解决办法:在Activity销毁的时候要及时关闭或者注销。
      • BraodcastReceiver:调用unregisterReceiver()注销;
      • Cursor,Stream、File:调用close()关闭;
      • 动画:在Activity.onDestroy()中调用Animator.cancel()停止动画
  • 引申:谈谈项目中是如何注意内存泄漏的问题

 内存泄漏和内存溢出的区别

技术点:内存泄漏、内存溢出

参考回答

  • 内存泄漏(Memory Leak)是指程序在申请内存后,无法释放已申请的内存空间。是造成应用程序OOM的主要原因之一。
  • 内存溢出(out of memory)是指程序在申请内存时,没有足够的内存空间供其使用。

 什么情况会导致内存溢出?

技术点:内存溢出

参考回答:内存泄漏是导致内存溢出的主要原因;直接加载大图片也易造成内存溢出

引申:谈谈如何避免内存溢出(如何避免内存泄漏、避免直接加载大图片) 

                                                                 2019.5.31今日面试题 - Bitmap&性能优化

 


                                                                                                                                 by .k

 

关注"编程v",每一天涨一点

STAY HUNGRY & STAY FOOLISH

2019.5.31今日面试题 - Bitmap&性能优化