写点什么

2019 年阿里 Android 面试必问:Java+ 性能优化,android 编程实战

用户头像
Android架构
关注
发布于: 18 小时前

一、Java 篇


1.多线程并发;


  • sleep 和 wait 区别

  • join 的用法

  • 线程同步:synchronized 关键字等

  • 线程通信

  • 线程池

  • 手写死锁


2.Java 中的引用方式,及各自的使用场景 3.HashMap 的源码 4.GC(垃圾回收)是什么?如何工作的?回收算法有哪些 5.Error 和 Exception 区别?6.反射和注解了解吗?项目中有使用过吗?7.网络相关:


  • http 状态码

  • http 与 https 的区别?https 是如何工作的?


8.Java 中 LRUCache 是如何实现的(源码角度)?为什么要用 LinkedHashmap?9.设计模式:


  • 手写单例,volitate 关键字的原理

  • 手写生产者消费者模式

  • 项目中都使用过哪些设计模式?

  • 编码常遵循的设计原则:单一职责、开闭原则、里氏替换等


10.ArrayList 和 LinkedList 区别?


二、Android


1.源码相关:


  • Activity 启动过程

  • 事件分发源码,以及由此衍生的事件拦截如何实现

  • 消息机制:Handler 源码(结合 Looper、MessageQueue),以及取不到消息时会怎样?

  • View.post 为什么可以拿到宽高?


2.自定义 View;


  • 流程:onMeasure, onLayout, onDraw

  • onMeasure 中的 MeasureSpec 是如何计算的?


3.Dalvik 运行的是自定义的.dex 字节码格式。4.如何捕获应用全局异常?5.Service 是使用,bind 和 start 的区别?6.Android 中的 IPC 机制有哪些?(接着往下问)7.属性动画源码?8.大图加载 9.ANR 如何定位,如何分析?(trace 日志)10.项目中使用了哪些开源库?挑一个说说源码?11.MVC 和 MVP 区别?12.Activity:


  • A 启动 B,生命周期是怎么走的?(注意区分 B 是否是透明的)

  • 启动模式


13.AsyncTask 原理?


三、性能优化


1.Android UI 适配;


字体使用 sp,使用 dp,多使用 match_parent,wrap_content,weight


图片资源,不同图片的的分辨率,放在相应的文件夹下可使用百分比代替。


2.app 优化:(工具:Hierarchy Viewer 分析布局 工具:TraceView 测试分析耗时的)3.App 启动优化 4.布局优化(尽量不要过于复杂的嵌套。可以使用,,)5.响应优化;;


  • Android 系统每隔 16ms 会发出 VSYNC 信号重绘我们的界面(Activity)

  • 页面卡顿的原因:(1)过于复杂的布局.(2)UI 线程的复杂运算(3)频繁的 GC

  • 导致频繁 GC 有两个原因:(-1)、内存抖动, 即大量的对象被创建又在短时间内马上被释放.(2)、瞬间产生大量的对象会严重占用内存区域。


6.内存优化:参考内存泄露和内存溢出部分


7.电池使用优化(使用工具:Batterystats & bugreport);


  • 优化网络请求

  • 定位中使用 GPS, 请记得及时关闭


8.网络优化(网络连接对用户的影响:流量,


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


电量,用户等待)可在 Android studio 下方 logcat 旁边那个工具 Network Monitor 检测


  • API 设计:App 与 Server 之间的 API 设计要考虑网络请求的频次, 资源的状态等. 以便 App 可以以较少的请求来完成业务需求和界面的展示.

  • Gzip 压缩:使用 Gzip 来压缩 request 和 response, 减少传输数据量, 从而减少流量消耗.

  • 图片的 Size:可以在获取图片时告知服务器需要的图片的宽高, 以便服务器给出合适的图片, 避免浪费.

  • 网络缓存:适当的缓存, 既可以让我们的应用看起来更快, 也能避免一些不必要的流量消耗.


9.图片优化;


  • 对图片本身进行操作。尽量不要使用 setImageBitmap、setImageResource、BitmapFactory.decodeResource 来设置一张大图,因为这些方法在完成 decode 后,最终都是通过 java 层的 createBitmap 来完成的,需要消耗更多内存.

  • 图片进行缩放的比例,SDK 中建议其值是 2 的指数值,值越大会导致图片不清晰。

  • 不用的图片记得调用图片的 recycle()方法


四、NDK 和前沿技术 1.谈谈你对 JNI 和 NDK 的理解;


  • JNI 是 Java Native Interface 的缩写,即 Java 的本地接口。

  • 目的是使得 Java 与本地其他语言(如 C/C++)进行交互。

  • JNI 是属于 Java 的,与 Android 无直接关系。

  • NDK 是 Native Development Kit 的缩写,是 Android 的工具开发包。

  • 作用是更方便和快速开发 C/C++ 的动态库,并自动将动态库与应用一起打包到 apk。

  • NDK 是属于 Android 的,与 Java 无直接关系。总结:

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
2019年阿里Android面试必问:Java+性能优化,android编程实战