[关闭]
@zifeng328573112 2021-05-18T01:59:14.000000Z 字数 10674 阅读 242

Android初中级面试题集锦(2021最新总结)

Java

1.java中equals和==的区别

2.String、StringBuffer、StringBuilder的区别(运行速度:StringBuilder>StringBuffer>String)

备注:

速度上面String不断的复制和更改是创建不同的对象来进行操作,这里涉及到GC垃圾回收机制,会影响速度;而StringBuffer和StringBuilder则处理同一个对象不存在JVM的GC回收。

线程安全与否:如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,不能同步的问题。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。 

3.java8新特性有哪些?

4.说说你对JVM的理解

Android

5.Handler机制的原理与RXJava有什么区别?

6.广播有几种创建方式,有什么区别?

  1. <receiver>
  2. <intent-filter>
  3. <action android:name = "android.intent.action.PICK"/>
  4. </intent-filter>
  5. </receiver>

7.Android的数据存储方式有哪些?

8.服务的启动方式和对应的生命周期以及区别?

9.线程间通信有哪些方式?

10.进程间通信有哪些方式

11.描述一下ANR错误,哪些情况会发生,如何避免?

12.横竖屏切换activity生命周期?

13.你对设计模式的理解,简单说几种?

一共23种,随便说几种就行,然后一般会问一些互相之间的区别啊,使用它们的好处之类的。

14.Android动画有几类,它们的特点和区别是什么?

Android3.0之前2种动画,3.0之后3种动画

15.平时开发中设计到哪些性能优化,你是从哪些地方来优化,你是通过什么工具来分析的?

16.你对主件开发,模块开发了解多少?模块之间怎么进行通讯,数据传输?

17.简单描述一下你对Gradle的理解

18.MVC与MVP的区别?

MVC
MVC:Model(数据模型)、View(视图)、(Controller)控制器(activity或者fragment),View将操作反馈给Activity,Activitiy去获取数据,数据通过观察者模式刷新给View。循环依赖

1.Activity(Fragment)重,很难单元测试。

2.View和Model耦合严重。

MVP
MVP:Model(模型层)、View、Presenter(接口,Model和View交互的桥梁),View将操作给Presenter,Presenter去获取数据,数据获取好了返回给Presenter,Presenter去刷新View。PV,PM双向依赖

1.如果功能复杂,Presenter接口爆炸(界面的操作更新UI都必须配合Presenter的接口来操作)。

2.Activity需要重写很多接口方法来更新UI。

3.Model和View不直接进行交互,达到解耦效果。

19.使用RXjava时,你是如何对它进行生命周期管理?

20.Lru算法的原理?

21.冒泡、选择、快排有没有相似之处?简单说一下他们的原理?

  1. /**
  2. * 冒泡排序 从小到大
  3. * 每次冒泡出相对最大的数到相对最后面
  4. */
  5. public static void bubbleSort(int[] data) {
  6. if (data == null) throw new IllegalArgumentException("data can't be null");
  7. if (data.length < 2) return;
  8. //外层循环data.length-1次
  9. for (int i = 0; i < data.length - 1; i++) {
  10. //内层循环每次选择一个最大的数冒泡到最后 循环次数每次都会少1次直到外层循环完毕data.length-i-1
  11. for (int j = 0; j < data.length - i - 1; j++) {
  12. if (data[j] > data[j + 1]) {
  13. int temp = data[j];
  14. data[j] = data[j + 1];
  15. data[j + 1] = temp;
  16. }
  17. }
  18. System.out.println(i + "冒泡排序:" + Arrays.toString(data));
  19. }
  20. System.out.println("冒泡排序:" + Arrays.toString(data));
  21. }
  1. /**
  2. * 选择排序 从小到大
  3. * 每次选出一个相对较小的排前面
  4. */
  5. public static void selectSort(int[] data) {
  6. if (data == null) throw new IllegalArgumentException("data can't be null");
  7. if (data.length < 2) {
  8. return;
  9. }
  10. //循环次数data.length-1
  11. for (int i = 0; i < data.length - 1; i++) {
  12. int index = i;
  13. //每次选择第i个数依次和后面的数进行比较,谁小谁变成第i个数;循环次数也是data.length-i-1
  14. for (int j = i; j < data.length - 1; j++) {
  15. if (data[index] > data[j]) {
  16. index = j;
  17. }
  18. }
  19. if (i != index) {
  20. int temp = data[index];
  21. data[index] = data[i];
  22. data[i] = temp;
  23. }
  24. System.out.println(index + "选择排序:" + Arrays.toString(data));
  25. }
  26. System.out.println("选择排序:" + Arrays.toString(data));
  27. }
  1. /**
  2. * 快速排序实现
  3. *
  4. * @param array
  5. * @param low
  6. * @param high     
  7. */
  8. public static void quickSort(int array[], int low, int high) {
  9. if (low < high) {
  10. int pivot = partition(array, low, high);
  11. quickSort(array, low, pivot - 1);
  12. quickSort(array, pivot + 1, high);
  13. System.out.println(pivot);
  14. }
  15. }
  16. /**
  17. * @param array 待排序数组
  18. * @param low 数组下标下界
  19. * @param high 数组下标上界
  20. * @return pivot
  21. *      
  22. */
  23. public static int partition(int array[], int low, int high) {
  24. //当前位置为第一个元素所在位置
  25. int p_pos = low;
  26. //采用第一个元素为轴
  27. int pivot = array[p_pos];
  28. for (int i = low + 1; i <= high; i++) {
  29. if (array[i] < pivot) {
  30. p_pos++;
  31. swap(array, p_pos, i);
  32. }
  33. }
  34. swap(array, low, p_pos);
  35. return p_pos;
  36. }
  37. /**
  38. * 交换指定数组a的两个变量的值
  39. *
  40. * @param a 数组应用
  41. * @param i 数组下标
  42. * @param j 数组下标
  43. *     
  44. */
  45. public static void swap(int a[], int i, int j) {
  46. if (i == j) return;
  47. int tmp = a[i];
  48. a[i] = a[j];
  49. a[j] = tmp;
  50. }

22.自定义View需要用到哪些方法,各自的作用?

23.事件分发机制的原理(点击上层如何传递给下层)?

https://www.jianshu.com/p/e99b5e8bd67b
此处输入图片的描述

注:

24.JVM和DVM有什么区别,以及ART垃圾回收机制?

但是在Android4.4引入了ART,也是 Android 5.0 及更高版本的默认 Android 运行时。目前google已经不再维护和发布dalvik(DVM)。
最后说一下回收机制:

25.IntentService和Service有什么区别?

26.Service和线程的区别,我们为什么不用service代替线程,相应在什么情况下使用?

使用情况:

27. OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象语言)基本原理

28.当调用摄像机的时候怎么保存当前activity的状态?

29.Activity与Fragment之间通信

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注