前言
2024年的金三银四依旧形势严峻,甚至许多小伙伴已经躺平,说得不好听就是根本找不到Android相关的工作!
因为面经刷的少,技术知识点也没掌握透彻。
再不行动起来,怕是只能去送外卖了!
在这里为大家准备了字节大牛整理的Android Framework面试题,抓住最后的机会!
Android Framework 面试题分享
1.Android中多进程通信的方式有哪些?
- 总的来说,进程间通信方案有很多他们分别是:管道,信号,信号量,内存共享,socket,binder,消
息队列,但是使用最多的还是binder,尤其是用户空间的跨进程通信,基本大多采用的是binder。
2.描述下Binder机制原理?
- Binder是Android提供的一套进程间相互通信框架,它是一种效率更高、更安全的基于C/S架构的IPC通
信机制,其本质也是调用系统底层的内存共享实现。它基于开源的 OpenBinder 实现,从字面上来解释
Binder 有胶水、粘合剂的意思,顾名思义就是粘和不同的进程,使之实现通信。
3.为什么 Android 要采用 Binder 作为 IPC 机制?
- 性能方面
拷贝数据需要花时间,Binder只需拷贝一次,共享内存无需拷贝,其他的需要拷贝两次。 从速度上来说,Binder仅次于共享内存,优于Socket,消息队列,管道,信号,信号量等。 - 特点方面 Binder: 基于C/S 架构,易用性高。
共享内存: 多个进程共享同一块内存区域,必然需要某种同步机制。 使用麻烦,容易出现数据不同步,死锁等问题。
Socket: socket作为一款通用接口,其传输效率低,开销大。
主要用在跨网络的进程间通信和本机上进程间的低速通信。 - 安全性方面
Binder:(安全性高) 为每个APP分配不同UID,通过UID鉴别进程身份。 即支持实名Binder,又支持匿名Binder。
传统IPC:(不安全) 完全依赖上层协议,只能由用户在数据包中填入UID/PID。
访问接入点是开放的,任何程序都可以与其建立连接。
4.Binder线程池的工作过程是什么样?
- binder线程池并非一个传统意义上的线程池结构,它在client进程中只有一个继承自Thread的PoolThread类。而线程的启动以及管理都是由binderDriver来控制的。
- binder线程有主线程和非主线程之分,主线程是启动的时候才会有的,每个binder线程池只有一个。其他情况下申请的都是非主线程。
- binder线程池启动的时候,实际上只是启动了client中的binder主线程。
- binder线程(非主线程)有两种情况启动:client进程向binderDriver发送IPC请求,以及 client进程向binderDriver回复IPC请求结果。
- binder线程池的默认大小是16,1个主线程和15个非主线程。
5.AIDL 的全称是什么?如何工作?能处理哪些类型的数据?
- AIDL 全称是 Android Interface Definition Language(Android接口描述语言)是一种接口描述语言。编译器可以通过aidl文件生成一段代码,生成的代码封装了binder,可以当成是binder的延伸。
- AIDL的使用实质就是对Binder机制的封装,Binder原理详见《8.2 描述下Binder机制原理》,主要就是将Binder封装成一个代理对象proxy,从用户的角度看,就像是客户端直接调用了服务端的代码。
- Java基本数据类型(int,boolean等)引用数据类型,比如:String与CharSequence。
自定义的数据类型,但是有个条件,那就是数据需要实现了 Parcelable 接口。
List, Map和Parcelables类型, 这些类型内所包含的数据成员也只能是基本数据类型、String等其他支持的类型。
6 .Android中Pid&Uid的区别和联系
- Pid是进程ID,Uid是用户ID,只是Android和计算机不一样,计算机每个用户都具有一个Uid,哪个用户start的程序,这个程序的Uid就是那个那个用户,而Android中每个程序都有一个Uid,默认情况下,Android会给每个程序分配一个普通级别互不相同的 Uid,如果用互相调用,只能是Uid相同才行,这就使得共享数据具有了一定安全性,每个软件之间是不能随意获得数据的。而同一个application 只有一个Uid,所以application下的Activity之间不存在访问权限的问题。
7.Handler怎么进行线程通信,原理是什么?
- 在多线程的应用场景中,将工作线程中需更新 UI 的操作信息 传递到 UI 主线程,从而实现 工作线程对
UI 的更新处理,最终实现异步消息的处理。 - Handler 是一个消息管理机制,android 程序的运行必须依托于Handler机制,那么handler机制进行线程通信的原理思想如下: 1) 在启动handler通信机制的时候,首先会准备Looper,以及必须让Looper调用loop函数进入死循环;2)在Looper启动后,loop死循环就会不断的去轮询MessageQueue的next函数,试图通过这个方式获取到MessageQueue中存储的Message;3)当用户希望往当前创建handler的这个线程里面传递消息的时候,就可以调用这个handler的Message.
更多Android资料分享
其中大部分都是大企业面试常问的面试题,可以对照这查漏补缺,当然了,这里所列的肯定不可能覆盖全部方式,不过也希望能对即将找工作的朋友起到一些帮助!免费分享给大家。
【扫描下方二维码即可免费领取!!】
面试题内容包括:「Java 基础、集合、多线程、虚拟机、反射、泛型、并发编程、Android四大组件、异步任务和消息机制、UI绘制、性能调优、SDN、第三方框架、设计模式、Kotlin、计算机网络、系统启动流程、Binder、Handler、AMS、Dart、Flutter、算法和数据结构、NDK、H.264、H.265.音频编解码、FFmpeg、OpenMax、OpenCV、OpenGL ES」,如下图所示:同时,还给出一些常见问题的思考方式,以帮助读者在面试中更好地表达自己!