一份【Android FrameWork】综合面试题,给你醍醐灌顶

文章分享了作者在春招中获得腾讯高级开发岗位的经验,重点介绍了AndroidFramework相关的面试知识点,包括IPC的几种方式及其注意事项,ThreadLocal的原理和使用,以及Looper的作用。还提及了检查线程耗时任务的机制如WatchDog和BlockCanary,并提供了AndroidFramework的学习资料和面试题。
摘要由CSDN通过智能技术生成

前言

春招已经接近尾声了,不知道各位小伙伴有没有找到自己心仪的工作呢。

我前几天内推刚刚收获了腾讯高级开发岗的 offer,得益于内推朋友面试时的面试经验,照着他给的方向复习刷题,顺利的通过了面试。在这里也无偿分享给广大网友们,喜欢也能帮助到你们。如果觉得文章不错,烦请点个关注转发,谢谢!

从做Android的第一天起,你一定听过无数次关于Framework的讨论,也曾在这个版块被面试官吊锤N次。掉帧监控,函数插桩,慢函数检测,ANR 监控,启动监控,都需要对 Framework 有比较深入的了解,才能知道怎么去监控,利用什么机制监控,函数插桩插到哪里,反射调用该反射哪个类哪个方法哪个属性……

关于FrameWork的面试问题是面试官喜欢问到的。

这里就整理了一些这方面的面试题:

IPC 方式传图

Binder:性能好,使用方便,但是大小有限制

Socket、管道:两次拷贝,也有大小限制

共享内存:性能不错

主要注意点

1.性能,减少拷贝次数

2.内存泄漏,资源及时关闭

TransactionTooLargeException

发出去的或者返回的数据量太大

Binder 缓存用于该进程所有正在进行中的 Binder 事务

进程弃用 binder 机制会映射一块内存,大小是 1M

跨进程通信申请的缓冲区大小是不能超过 1M 的

所有 binder 事务共享这 1M 内存空间,应该尽量避免同时跑多个事务,尤其是数据量很大的事务

大数据量打碎分批发,或按需发(官方建议)

总结?跨进程传递大图片的方式

图片写到文件,路径传到另一个进程,再读出来

intent 传图,但是容易抛异常,原因是什么

binder 调用传图,底层 ashmem 机制

2.ThreadLocal 原理

考察点

ThreadLocal 的适用于什么场景?

ThreadLocal 的使用方式是怎样的?

ThreadLocal 的实现原理是怎样的?

ThreadLocal 在 FrameWork 中的使用

Looper

在这里插入图片描述

Choreorgapher

在这里插入图片描述

原理

在这里插入图片描述

每一个线程都有一张表,其实就是一个数组,key 和 value 都存储在数组中

key 存储在 weakReference 中,value 对应对象如 Looper、Choreorgapher 等

一个应用里可以定义多个 ThreadLocal,ThreadLocal 都有自己的哈希值,哈希值根据 hashCounter 计算

算出 hash 值之后,对表的 size 取余数,就能算出 key:value 在表中的 index 值

如果发生了 hash 冲突,就会从当前 index 开始向下遍历数组,放在空闲的位置上

代码如下:

在这里插入图片描述

总结

同一个 ThreadLocal 对象,在不同线程 get 返回不同 value

Thread 对象里有张表,保存 ThreadLocal 到 value 的映射关系

这张表是怎么实现的?(见上面的原理分析)

是如何解决 hash 冲突的?(见上面的原理分析)

3.说说 Looper 的副业(待完善)
Looper 里可以监听其它描述符

创建管道,跨进程传数据,用 looper 监听描述符事件

4.怎么检查线程有耗时任务
两种情况

正常的,轻微阻塞

不正常的,严重阻塞

检测机制

WatchDog:

Framework 自带,检查 system_server 中系统服务是否正常

用于检查死锁或者线程异常

BlockCanary

开源框架,用于检查线程是否有耗时任务

更多Android FrameWork学习资料和面试题可以扫码免费领取!

《Android Framework 开发揭秘》

目录

imgimg

第一章 系统启动流程分析

​ ● 第一节 Android启动概览

​ ● 第二节 init.rc解析

​ ● 第三节 Zygote

​ ● 面试题

img

第二章 Binder解析

​ ● 第一节 宏观认识Binder

​ ● 第二节 binder的jni方法注册

​ ● 第三节 binder驱动

​ ● 第四节 数据结构

​ ● 第五节 启动service_manager

​ ● 第六节 获取service_manager

​ ● 第七节 addService流程

​ ● 第八节 Binder面试题全解析

img

第三章 Handler解析

​ ● 第一节 源码分析

​ ● 第二节 难点问题

​ ● 第三节 Handler常见面试题

img

第四章 AMS解析

​ ● 第一节 引言

​ ● 第二节 Android架构

​ ● 第三节 通信方式

​ ● 第四节 系统启动系列

​ ● 第五节 AMS

​ ● 第六节 AMS面试题解析

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值