美文网首页
Android开发个人总结常问的面试题

Android开发个人总结常问的面试题

作者: 你的益达233 | 来源:发表于2021-02-27 11:06 被阅读0次

前言

  • 这里只是做些我认为可能被问到的面试题,难度中级开发吧。高级开发估计我也不会,毕竟一直在做应用层次的开发,虽然每次都想进行代码的优化,用户的体验的升级等等

  • 总结面试提其实我觉得挺无奈的,很多情况下都是面试建航母,工作拧螺丝。现实如此,好像无解,只能坦然做好准备

开始吧

1、Activity的启动模式

标准模式(standard):每次都会新建Activity
单例模式(singleInstance):打开该Activity时,直接创建一个新的任务栈,并创建该Activity实例放入新栈中。
一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例

2、MVC,MVP,MVVM架构的区别

mvc: m代表model,网络请求 v代表xml c代表Activity,处理网络请求数据
mvp: m代表model,网络请求 v代表xml,Activity p作为mv之间的桥梁,同时处理复杂的逻辑
mvvm: m代表model,网络请求 v代表xml,Activity vm是ViewModel,主要用databinding技术,将控件和数据先结合

3、从A页面打开B页面,两个页面的生命周期

先A界面:onPause 然后B页面:onCreate onStart onResume 然后A界面:onStop

4、主线程的Looper死循环为什么不会导致ANR?

因为主线程的Looper实现的是可阻塞的死循环,当它有消息的时候处理消息,没消息的时候进入阻塞状态

5、Handler,Looper,MessageQueue的关系

Handler发信息到MessageQueue,Looper不断循环获取MessageQueue中的消息发给Handler处理

6、Handler通过sendMessageDelayed发送延时消息, 消息什么时候入队列

立刻就进入队列,只是会根据延迟时间,赋值给msg.when,队列根据msg.when整理链表,整理出时间从小到大的序列

7、默认线程池有多少种

有4种
newFixedThreadPool:只有核心线程
newSingleThreadExecutor:只有一个核心线程,不用处理线程同步问题
newCachedThreadPool:没有核心线程,都是非核心线程,无穷大,它可以根据程序的运行情况自动调整线程池的线程数量
ScheduledThreadPoolExecutor:定时定期线程池

8、做过哪些优化性能的工作

  1. 优化布局,减少布局层次,不必要的背景设置
  2. 在自定义控件中,onDraw尽量不新建局部对象,不做耗时任务
  3. 避免内存泄漏
  4. 如果有耗时操作,采用异步处理

9、如何对apk进行极限压缩

在Android studio中的outputs,双击apk,可以看到那些文件占多大

  1. 压缩图片
  2. 去除多语言
  3. 去除不必要so库,其实只需适配armeabi-v7a架构
  4. 开启混淆
  5. 移除无用资源shinkResource

10、HashMap的原理,hashCode的作用,重写equals为什么还要重写hashCode方法

HashMap原理:是数组和链表的组合体,数组的元素是链表,在jdk1.8中还加入了链表过大时链表转化为红黑树的设计,大大减少了查询时间
hashCode的作用:通过hash它的key确定数据放的数组的位置,如果该位置有数据了,就在形成的链表后面加入
重写equals为什么还要重写hashCode方法:因为要存放的位置,就相当于先找到桶,才能找到桶里面的东西

11、常见的内存泄漏原因和解决方案

  1. Static关键字修饰的成员变量
  2. 非静态内部类或者匿名类
  3. 资源对象使用后未关闭

12、说下动态代理和静态代理

编译时就确定了被代理的类是哪一个,是静态代理。
运行时才确定被代理的类是那个,是动态代理

相关文章

网友评论

      本文标题:Android开发个人总结常问的面试题

      本文链接:https://www.haomeiwen.com/subject/mdgbfltx.html