ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2020-2021华为Android面试真题,面试必备

2021-07-07 20:53:10  阅读:57  来源: 互联网

标签:真题 对象 面试 算法 2020 内存 https com 加载


### 正文 **1.图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理?** 参考回答: 首先我们要清楚图片的三级缓存是如何的 ![](http://www.icode9.com/i/li/?n=2&i=images/20210707/1625661747259368.jpg) 如果内存足够时不回收。内存不够时就回收软引用对象 **2.内存中如果加载一张500X500的png高清图片.应该是占用多少的内存?** 参考回答: - 不考虑屏幕比的话:占用内存=500 * 500 * 4 = 1000000B ≈ 0.95MB - 考虑屏幕比的的话:占用内存= 宽度像素 x (inTargetDensity / inDensity) x 高度像素 x (inTargetDensity / inDensity)x 一个像素所占的内存字节大小 - inDensity表示目标图片的dpi(放在哪个资源文件夹下),inTargetDensity表示目标屏幕的dpi ![](http://www.icode9.com/i/li/?n=2&i=images/20210707/1625661747518733.jpg) **3.WebView的性能优化 ?** 参考回答: 一个加载网页的过程中,native、网络、后端处理、CPU都会参与,各自都有必要的工作和依赖关系;让他们相互并行处理而不是相互阻塞才可以让网页加载更快: - WebView初始化慢,可以在初始化同时先请求数据,让后端和网络不要闲着。 - 常用 JS 本地化及延迟加载,使用第三方浏览内核 - 后端处理慢,可以让服务器分trunk输出,在后端计算的同时前端也加载网络静态资源。 - 脚本执行慢,就让脚本在最后运行,不阻塞页面解析。 - 同时,合理的预加载、预缓存可以让加载速度的瓶颈更小。 - WebView初始化慢,就随时初始化好一个WebView待用 - DNS和链接慢,想办法复用客户端使用的域名和链接。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210707/1625661748340114.jpg) **4.Bitmap如何处理大图,如一张30M的大图,如何预防OOM?** 参考回答:避免OOM的问题就需要对大图片的加载进行管理,主要通过缩放来减小图片的内存占用。 - BitmapFactory提供的加载图片的四类方法(decodeFile、decodeResource、decodeStream、decodeByteArray)都支持BitmapFactory.Options参数,通过inSampleSize参数就可以很方便地对一个图片进行采样缩放 - 比如一张10241024的高清图片来说。那么它占有的内存为102410244,即4MB,如果inSampleSize为2,那么采样后的图片占用内存只有512512*4,即1MB(注意:根据最新的官方文档指出,inSampleSize的取值应该总是为2的指数,即1、2、4、8等等,如果外界输入不足为2的指数,系统也会默认选择最接近2的指数代替,比如2) 综合考虑。通过采样率即可有效加载图片,流程如下 - 将BitmapFactory.Options的inJustDecodeBounds参数设为true并加载图片 - 从BitmapFactory.Options中取出图片的原始宽高信息,它们对应outWidth和outHeight参数 - 根据采样率的规则并结合目标View的所需大小计算出采样率inSampleSize - 将BitmapFactory.Options的inJustDecodeBounds参数设为false,重新加载图片 ![](http://www.icode9.com/i/li/?n=2&i=images/20210707/1625661748823986.jpg) **5.内存回收机制与GC算法(各种算法的优缺点以及应用场景);GC原理时机以及GC对象** 参考回答: **1.内存判定对象可回收有两种机制** - **引用计数算法**:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。然而在主流的Java虚拟机里未选用引用计数算法来管理内存,主要原因是它难以解决对象之间相互循环引用的问题,所以出现了另一种对象存活判定算法。 - **可达性分析法**:通过一系列被称为『GCRoots』的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。其中可作为GC Roots的对象:虚拟机栈中引用的对象,主要是指栈帧中的本地变量*、本地方法栈中Native方法引用的对象、方法区中类静态属性引用的对象、方法区中常量引用的对象 **2.GC回收算法有以下四种:** - 分代收集算法:是当前商业虚拟机都采用的一种算法,根据对象存活周期的不同,将Java堆划分为新生代和老年代,并根据各个年代的特点采用最适当的收集算法。 - 新生代:大批对象死去,只有少量存活。使用『复制算法』,只需复制少量存活对象即可 - **复制算法**:把可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用尽后,把还存活着的对象『复制』到另外一块上面,再将这一块内存空间一次清理掉。**实现简单,运行高效。在对象存活率较高时就要进行较多的复制操作,效率将会变低** - 老年代:对象存活率高。使用『标记—清理算法』或者『标记—整理算法』,只需标记较少的回收对象即可。 - **标记-清除算法**:首先『标记』出所有需要回收的对象,然后统一『清除』所有被标记的对象。**标记和清除两个过程的效率都不高,清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。** - **标记-整理算法**:首先『标记』出所有需要回收的对象,然后进行『整理』,使得存活的对象都向一端移动,最后直接清理掉端边界以外的内存。**标记整理算法会将所有的存活对象移动到一端,并对不存活对象进行处理,因此其不会产生内存碎片** ### 结尾 **最后,针对上面谈的内容,给大家推荐一个Android资料,应该对大家有用。** 首先是一个知识清单:(对于现在的Android及移动互联网来说,我们需要掌握的技术) >泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶 >注解原理丶注解原理丶序列化 >Activity知识体系(Activity的生命周期丶Activity的任务栈丶Activity的启动模式丶View源码丶Fragment内核相关丶service原理等) >代码框架结构优化(数据结构丶排序算法丶设计模式) >APP性能优化(用户体验优化丶适配丶代码调优) >热修复丶热升级丶Hook技术丶IOC架构设计 >NDK(c编程丶C++丶JNI丶LINUX) >如何提高开发效率? >MVC丶MVP丶MVVM >微信小程序 >Hybrid >Flutter ![](http://www.icode9.com/i/li/?n=2&i=images/20210707/1625661748120190.jpg) 接下来是资料清单:(**敲黑板!!!**) **领取通道在这里给你们摆上了~** ##### **[点击我的GitHub免费获取](https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)** * * * **1.数据结构和算法** ![](http://www.icode9.com/i/li/?n=2&i=images/20210707/1625661749947616.jpg) **2.设计模式** ![](http://www.icode9.com/i/li/?n=2&i=images/20210707/1625661749815808.jpg) **3.全套体系化高级架构视频**;七大主流技术模块,视频+源码+笔记 ![](http://www.icode9.com/i/li/?n=2&i=images/20210707/1625661750432283.jpg) **4.面试专题资料包**(怎么能少了一份全面的面试题总结呢~) ![](http://www.icode9.com/i/li/?n=2&i=images/20210707/1625661750502808.jpg) >不论遇到什么困难,都不应该成为我们放弃的理由!共勉~ 如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210707/1625661750782176.jpg)

标签:真题,对象,面试,算法,2020,内存,https,com,加载
来源: https://blog.51cto.com/u_15285973/3006507

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有