背完字节大佬整理的Android Framework面试资料,终于在金三银四找到年薪百万的工作

前言

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」,如下图所示:同时,还给出一些常见问题的思考方式,以帮助读者在面试中更好地表达自己!
在这里插入图片描述

第一章 算法和数据结构面试题汇总

在这里插入图片描述

第二章 Java核心基础面试题汇总

在这里插入图片描述

第三章 Java深入泛型与注解面试题汇总

在这里插入图片描述

第四章 Java并发编程面试题汇总

在这里插入图片描述

第五章 Java虚拟机原理面试题汇总

在这里插入图片描述

第六章 Java反射类加载与动态代理面试题汇总

在这里插入图片描述

第七章 网络编程面试题汇总

在这里插入图片描述

第九章 高级UI面试题汇总

在这里插入图片描述

第十章 Framework内核解析面试题汇总

在这里插入图片描述

第十一章 Android组件内核面试题汇总

在这里插入图片描述

第十二章 程序性能优化与数据持久化面试题汇总

在这里插入图片描述

第十三章 开源框架面试题汇总

在这里插入图片描述

完整面试题+答案解析领取方式:扫描下方二维码!
  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值