Framework面试之(Binder)&(Handler)脚踏大厂面试大赏

前言

framework的底层技术,在Android开发中的地位可谓是数一数二的存在。学好framework技术决定你在Android领域能找到好工作进大厂,拿高薪。话说的好:“面试造火箭,进厂拧螺丝”所以说你进大厂技术不厉害没事,但面试你一定要会说会讲。把面试题刷好一样能就进大厂。当然技术也是重要的,毕竟拧螺丝也是一门粗活。脚踏进大厂才能去考虑打螺丝的事。

那我今天就带来一部分有关:framework比较高刷的Binder&Handler两块技术点面试题分享。从我的《Android精选面试题库》抽取部分;如下:

1

Framework面试题

Binder篇

  1. Android为什么不用linux已有的IPC进程通信?
  2. Binder核心函数mmap的理解?
  3. mmap内存映射原理?

答案:

  • 进程启动映射过程,并在虚拟地址空间中为映射创建虚拟映射区域
  • 调用内核空间的系统调用函数mmap(不同于用户空间函数),实现文件物理地址和进程虚拟地址的一一映射关系
  • 进程发起对这片映射空间的访问,引发缺页异常,实现文件内容到物理内存(主存)的拷贝
  1. MVVM设计模式看mmap函数读写机制?
  2. Binder机制是如何跨进程的?
  • 传统的跨进程通信方式有很多,比如 Socket、信号量、管道、内存共享、消息队列等,这些都存在于 Linux 中。
  1. 一次拷贝是发生在客户端还是服务端
  2. Activity传递数据最大为什么是1M-8k
  • 答案:因为mmap函数的基本单位为页,而每页的大小为4K,也就是说有2页的数据是额外的数据,额外的数据是什么呢?参考一下http通信协议,http由请求行、请求头、请求体三部分组成,同样的道理,其实binder进行进程间通信也需要这些信息,因此留出来来8K的内存大小来传递请求头和请求行等信息,这8K的内容为系统自动配置的,我们无法使用这8K内存大小。具体到底层代码,底层copy_from_user方法,被调用了2次,第一次传递的数据大小为8K,第二次传递的数据大小为我们传递的真实数据内容,大小为1M-8k。
  1. 为什么activity间传递对象需要序列化
  • **答案:**跨进程调用可能是原因之一。还有是为了恢复被杀死的activity。有时候activity会因为很多原因被杀死,然后使用的时候再恢复。而一个app有多个入口点页面,如果不能序列化就不好恢复到某个acitivty。

Handler篇

  1. 多个handler往MessageQueue中添加数据,内部是如何确保线程安全的?
  2. looper,loop()为什么不会阻塞主线程?
  • 答案:因为主线程的Looper实在ActivityThread里面准备出来,创建出来的,那么其实我们Android程序也就是Java程序,你启动它,进入main方法,执行完所有的方法,也就会退出了 。写的代码就是通过handler驱动起来的,我们activity的onCreate、onResume、onStop等等这些生命周期方法,包括我们的UI绘制的信号,这些UI绘制的事件都是通过Handler Looper循环内部发起的,来调用回调我们的各个Activity,各个Fragment等等这样的一些组件里面的各个生命周期方法,我们的代码就是在循环里面执行的,所以不会阻塞。
  1. 简述Handler的实现原理
  • 答案:Android 应用是通过消息驱动运行的,在 Android 中一切皆消息,包括触摸事件,视图的绘制、显示和刷新等等都是消息。Handler 是消息机制的上层接口,平时开发中我们只会接触到 Handler 和 Message,内部还有 MessageQueue 和 Looper 两大助手共同实现消息循环系统。
  1. 延迟消息是怎么实现的
  • 答案:无论是即时消息还是延迟消息,都是计算出具体的时间,然后作为消息的when字段进程赋值。然后在MessageQueue中找到合适的位置(安排when小到大排列),并将消息插入到MessageQueue中。这样,MessageQueue就是一个按照消息时间排列的一个链表结构。
  1. 一个线程有几个Handler?

  2. 为什么handler会报内存泄漏?

  • 答案:因为是内部类持有外部类的对象,sendMessage的时候会调用到handler的enqueueMessage方法,msg.target = this; Message会持有handler,而handler持有调用handler的对象,所以gc不能回收

2

诶嘿,就举例这么多,面试题也不是几个就能全部覆盖的,毕竟面试官不是吃素的,换着花样问你。为什么有些不附上答案,因为文章篇幅长?[懒得写];想跳槽拿高薪的Android开发的朋友,我必须拿出这些个面试PDF文档 《Android精选面试文档》。想拿高薪的人很多,就看你能不能利用上 {卷王}

3

话说太多没用,好好刷题学技术。Android开发高级工程师人才必经少缺;强者为王,抢饭碗这件事都是为强者制定的。

猜你喜欢

转载自blog.csdn.net/m0_71524094/article/details/126613086