Ahao's Technical Blog Ahao's Technical Blog
首页
  • 001.基础篇
  • 002.玩转AOSP篇
  • 003.学穿Binder篇
  • 004.基础组件篇
  • 005.系统启动过程分析
  • 006.Hal开发入门与实践
  • 007.显示系统
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

阿豪讲Framework

不积跬步无以至千里
首页
  • 001.基础篇
  • 002.玩转AOSP篇
  • 003.学穿Binder篇
  • 004.基础组件篇
  • 005.系统启动过程分析
  • 006.Hal开发入门与实践
  • 007.显示系统
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础篇

  • 玩转AOSP篇

  • 学穿Binder篇

    • 000.Binder 专题导学 —— 如何深入掌握 Binder
    • 001.学习 Binder 的预备知识
    • 002.Binder 基本原理
    • 003.Binder 程序示例之 C 语言篇
    • 004.Binder 服务注册过程情景分析之 C 语言篇
    • 005.Binder 服务获取与使用过程情景分析之C语言篇
    • 006.Android Binder 驱动框架设计与分析
    • 007.Binder 驱动情景分析之 ServiceManager 启动过程
    • 008.Binder 驱动情景分析之服务注册过程
    • 009.Binder 驱动情景分析之服务获取与使用过程
    • 010.Binder 程序示例之 C++ 篇
    • 011.Binder C++ 程序分析之主要类解析
    • 012.Binder 服务注册过程情景分析之 C++ 篇
    • 013.Binder 服务获取与使用过程情景分析之C++篇
    • 014.Binder 程序示例之 aidl-cpp 篇
    • 015.添加 Android Native 系统服务
    • 016.添加 Native 系统服务回调
    • 017.Binder 程序示例之 Java 篇
    • 018.Binder Java 层初始化
    • 019.Binder Java 层服务注册过程分析
    • 020.Binder Java 层服务获取与使用过程分析
    • 021.添加 Java 系统服务
    • 022.Android Java 系统服务框架与第三方 App 使用自定义 Java 系统服务
    • 023.添加 Java 系统服务回调
    • 024.AIDL 数据类型详解之 Java 篇
    • 025.AIDL 数据类型详解之 C++ 篇
    • 026.Java 调用 Native 服务
    • 027.Native 调用 Java Binder 服务
    • 028.AIDL 关键字 in out inout oneway 解析
    • 029.Binder 驱动 Debug 入门指南
    • 030.Binder 匿名服务源码分析
    • 031.Binder 中的 Parcel 数据结构分析(C++)
    • 032.Binder 中的 Parcel 数据结构分析(Java)
    • 033.Binder 多线程情景分析
    • 034.Binder 线程池溢出问题
    • 035.Binder 代理对象泄露问题分析
    • 036.Binder 死亡通知情景分析
    • 037.Binder 异常处理机制
    • 038.Binder 系统源码演进
    • 039.Binder 面试题汇总
      • 问原理
      • 问流程
      • 问细节
      • 问实践
    • 补充——LocalService
  • 基础组件篇

  • 系统启动过程分析

  • Hal开发入门与实践

  • 显示系统

  • Framework
  • 学穿Binder篇
阿豪
2023-09-9
目录

039.Binder 面试题汇总

# 问原理

  • 什么是 Android Binder?
  • Android Binder 是如何实现进程间通信的?
  • Android 为什么采用 Binder 作为主要的的 IPC 机制?
  • Binder 是如何实现仅通过一次拷贝将数据从 A 进程传递给 B 进程的?
  • Binder 的优势是什么?

这些都是问 Binder 的基本原理,回答都大同小异。对于应用层开发,99% 止步于此,再问就不礼貌了。

如果是应聘 Framework 岗位,可能还需要熟悉下面的问题。

# 问流程

  • 说一下进程从ServiceManager获取服务的流程
  • Binder 是如何找到目标服务并唤醒目标进程/线程的
  • Android Binder 中的 Proxy 和 Stub 是什么
  • 应用该如何获取和添加 Binder 服务?
  • AIDL 是什么?如何使用的?
  • Android Binder 中有哪些组件?工作的流程是什么?

无论怎么问,只要把之前讲的 Native 和 Java 层示例程序的源码分析掌握,就可以以不变应万变了。

# 问细节

  • 了解 mmap 的原理吗?
  • 使用 Binder 传输数据的最大限制是多少,被占满后会导致什么问题?
  • Intent 传递大数据限制?
  • binder_proc 结构体中有两个 binder_ref 红黑树,它们的作用是什么?
  • Android APP 进程天生支持Binder通信的原理是什么?
  • AIDL 中的 in out inout oneway 这些关键字的作用是什么?
  • Intent 传递大数据限制?
  • Binder 服务在调用期间抛出了 RuntimeException 异常,服务端会 Crash 么?
  • 客户端调用 Binder 接口后抛出的 DeadObjectException 是什么意思?
  • Binder 驱动加载过程中有哪些重要的步骤?
  • Binder 的死亡通知机制的作用是什么,它是如何实现的?
  • bindService 所绑定的"服务概念和 Binder 中的服务 Server 有什么区别?
  • writeStrongBinder与readStrongBinder的作用和原理?
  • 每个进程最多存在多少个 Binder 线程,这些线程都被占满后会导致什么问题?
  • Binder 驱动什么时候释放缓冲区的内存?
  • 为什么使用广播传输 2MB的Bitmap会抛异常,而使用AIDL生成的 Binder 接口传输 Bitmap 就不会抛异常呢?
  • 应用进程为什么支持 Binder 通信,直接可以使用四大组件呢?
  • 四大组件中常见的 2 个 Binder 服务是?
  • Binder 都有什么主要的协议?
  • Binder 协议中BC_与BR_开头的协议都有什么区别?
  • A 是 C 端,B 是 S 端,问 如何保证 A 知道 B 是否存活,,B 如何知道 A 存活, 如果 A 死了,B 该怎么办?B 死了 A 该怎么办?

细节就比较见功底了,需要我们从应用到内核层,对 Binder 有非常全面的了解。

# 问实践

  • 工作中有处理过 Binder 相关的问题吗?

Binder 经过了很多年的迭代,Binder 本身已经很少会出问题了,更多的会从使用的角度去回答。

038.Binder 系统源码演进
补充——LocalService

← 038.Binder 系统源码演进 补充——LocalService→

最近更新
01
如何调试 SurfaceFlinger
10-05
02
SurfaceFlinger 概述
10-05
03
HWC 接口分析
10-05
更多文章>
Theme by Vdoing | Copyright © 2020-2025 AHao Framework | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式