乐趣区

关于android:Android面试字节飞书5轮面试Android-Framework层的源码就问了4轮

前言

说起字节跳动的这次面试经验,真的是当初都让我感觉背脊发凉,几乎被面试官折磨的太难受了。尽管曾经工作了三年,然而也只是纯正的在写业务,对底层并没有一个很深的意识,这次面试经验间接的让我感触到我和那些一线大厂开发之间的差距,说句实话,是真的很好受。

也不多说什么了吧,咱们还是来回顾一下我在字节跳动的这次面试经验。一共是面了 5 轮,至于为什么面了 5 轮的起因,可能是面试官还是想试试我的技术水平吧

尽管说最终还是没能拿到 offer,然而这次的面试经验让我更加直观的理解了我和大厂 Android 开发之间的差距,算是收益颇丰吧

字节飞书客户端一面

  • 讲讲 Android 开机启动的流程

讲了一大堆,其中说到 ServiceManager 过程是用来管理系统服务的,面试官说你确定?不是 SystemServer 过程来管理系统服务的吗?探讨了一番面试官懵逼了,提到了 SystemUI 服务,提到了桌面过程,问到了怎么替换开机启动的动画?

  • 零碎是怎么帮咱们启动找到桌面利用的

我说通过用意,他说怎么找到是哪个用意? 我说 PMS 会解析所有 apk 的 AndroidManifest.xml,如果解析过会存到 package.xml 中不会重复解析,PMS 有了它就能找到了。

  • 讲讲动静状态页的加载,为什么要这么弄?

我说为了缩小 xml 解析和反射创建对象的工夫,防止同时创立多个用不上的对象,我就写了个框架用代码动静增加的。这时面试官误会了我的意思,认为所有的界面都是用代码写的,那得多麻烦呀,起初解释分明了。

  • 讲讲页面的刷新机制,GPU 调试工具几个色彩值别离代表什么?

讲到了 Surface 底层治理的其实是 IBPQ , 讲了异步信号的由来是 SurfaceFlinger 由硬件和软件机制收回来的,讲了咱们 app 界面绘制的内容是怎么提交传递到 SurfaceFlinger 的。GPU 调试工具几种色彩的意思也大略讲了下。

  • 为什么 Activity 间传递对象须要序列化?
  • 你晓得 okhttp 是怎么复用连贯的吗?

这是个网络优化的问题,同一个 ip 同一个端口能复用一个连贯,前面问道了 http 2.0 的多路复用,我说一个 tcp 能够多个申请,原理呢?我说不晓得。前面让我说了下 https。

  • 快排和递归(算法题)

总体来讲,一面还是答得不错的,或者是面试官感觉小瞧了我,接下来的四轮面试我好像受到了严打

字节飞书客户端二面

  • 讲一讲动静注册和动态注册

动态注册是通过包名和函数名去找办法,动静注册是通过注册办法表,其中还被问到了具体是调用哪个函数注册办法表。

  • so 的加载流程是怎么的,生命周期是怎么的

这个要从 java 层去看源码剖析,是从 ClassLoader 的 PathList 中去找到指标门路加载的,同时 so 是通过 mmap 加载映射到虚拟空间的。生命周期加载库和卸载库时别离调用 JNI\_OnLoad 和 JNI\_OnUnload() 办法。

  • native 层怎么检测内存透露

我说按情理能够 hook 函数,开拓内存和开释内存的次数应该是一样的,如果不一样能够狐疑内存透露。面试官接着问有没有什么第三方工具或者库能够检测?我说我在公司其实也写的不多,不晓得引擎组集成的是啥框架,次要善于应用层开发。

  • 请你简述一下 Zygote 的启动流程
  • 请你剖析一下 init 过程的作用
  • 请你剖析一下 Zygote 的源码
  • eakcanary 的原理,哪些对象能够用来做 gc-root

好,你说你次要善于应用层开发,那 Java 层的内存透露怎么检测,我说咱们用的 leakcanary,让我说说原理,说完原理又问我是不是所有对象透露 leakcanary 都能检测失去,他的援用链是怎么治理的?前面问到你刚说弱援用对象在 gc 的时候会被开释,那什么时候不会被开释?我这时懵逼了,其实就是有内存透露的时候不会被开释,我过后脑子短路了竟然没反馈过去。

字节飞书客户端三面

  • Service 的运行线程
    (生命周期办法全副在主线程)
  • ServiceConnection 外面的回调办法运行在哪个线程?
  • 简述一下过程保活的机制
  • 相熟插件化吗?说一下实现一个插件化框架的思路
  • 说一下 Bander 机制的弊病
  • 手写一个简略的热修复框架
  • 请你剖析一下 AMS 和 PMS 是如何进行通信的?
  • 手撕算法

字节飞书客户端四面

  • Jetpack 的开发劣势在哪?
  • LiveData 和 Databinding 的源码剖析
  • 单相绑定与双向绑定
  • Recycleview 回收池的设计思维
  • HandlerThread 的源码剖析
  • 多个 Handler 往 MessageQueue 中增加数据,外部是如何保障线程是平安的呢?
  • 压轴算法题

字节飞书客户端五面

  • Activity 之间传递数据最大为什么是 4M?
  • 简述一下 Looper 的事务对调?
  • 问个简略点的?那你说一下 ViewGroup 的绘制流程?
  • Kotlin 和 Flutter
  • 压轴算法题

经验总结

我也不是什么大佬,最初唠叨几句。心愿各位没拿到 offer 的真的不要灰心,可能你之前所有的失败都是你胜利的垫脚石,我面挂的时候也已经自闭过,但更多的是反思,如何调整本人的复习计划。在温习的时候肯定要有本人的强项,能把这个知识点了解的很透彻并且把相干的知识点拓展进来。另一方面就是让面试官看到你对这个岗位的激情,可能自发性地去学习与岗位相干的货色,上面给大家分享一份我收藏的《2022 最新 Android 中高级面试题合集》品质十分搞,心愿能对你有帮忙!

《2022 最新 Android 中高级面试题合集》

内容概要:包含 Handler、Activity 相干、Fragment、service、布局优化、AsyncTask 相干、Android 事件散发机制、Binder、Android 高级必备:AMS,WMS,PMS、Glide、Android 组件化与插件化等面试题和技术栈!内容特点:条理清晰,含图像化示意更加易懂。

Android Framework 开发尽管比拟偏底层,圈子窄,然而能把握一些原理的货色,能够举一反三,往应用层倒退也能够。目前大公司的 app 开发都要基于模块化、层次化、组件化、控件化的思路来设计架构,而这所有的根底都建设在 Android Framework 零碎框架底层原理实现之上。

这里给大家分享一份由腾讯技术团队出品的《Android Framework 开发揭秘》总共有 19 万字,蕴含 109 个知识点,通过经典 Binder、Handler、AMS 等面试题解析加深你对 Android Framework 框架层的了解,材料支付点这里

《Android Framework 开发揭秘》

第一章 系统启动流程剖析
  • 第一节 Android 启动概览
  • 第二节 init.rc 解析
  • 第三节 Zygote
  • 第四节 面试题

第二章 Binder 解析
  • 第一节 宏观意识 Binder
  • 第二节 binder 的 jni 办法注册
  • 第三节 binder 驱动
  • 第四节 数据结构
  • 第五节 启动 service_manager
  • 第六节获取 service_manager
  • 第七节 addService 流程
  • 第八节 Binder 面试题全解析

第三章 Handler 解析
  • 第一节 源码剖析
  • 第二节 难点问题
  • 第三节 Handler 常问面试题

第四章 AMS 解析
  • 第一节 引言
  • 第二节 Android 架构
  • 第三节 通信形式
  • 第四节 系统启动系列
  • 第五节 AMS
  • 第六节 AMS 面试题解析

第五章 WMS 解析
  • 第一节 Activity 与 Window 相干概念
  • 第二节 Android 窗口治理服务 WindowManagerService
    计算 Activity 窗口大小的过程剖析
  • 第三节 Android 窗口治理服务 WindowManagerService 对
    窗口的组织形式剖析
  • 第四节 Android 窗口治理服务 WindowManagerService
    对输入法窗口(Input Method Window)的治理剖析
  • 第五节 Android 窗口治理服务 WindowManagerService
    对壁纸窗口(Wallpaper Window)的治理剖析
  • 第六节 Android 窗口治理服务 WindowManagerService 计
    算窗口 Z 轴地位的过程剖析
  • 第七节 Android 窗口治理服务 WindowManagerService 显
    示 Activity 组件的启动窗口(Starting Window)的过
    程剖析
  • 第八节 Android 窗口治理服务 WindowManagerService 切
    换 Activity 窗口(App Transition)的过程剖析
  • 第九节 Android 窗口治理服务 WindowManagerService
    显示窗口动画的原理剖析

第六章 PKMS Android10.0 源码解读
  • 第一节 前言 PKMS 是什么货色?
  • 第二节 PKMS 概述信息
  • 第三节 PKMS 角色地位
  • 第四节 PKMS 启动过程剖析
  • 第五节 APK 的扫描
  • 第七节 PMS 之权限扫描
  • 第八节 PackageManagerService 大综合笔记

篇幅无限,须要《2022 最新 Android 中高级面试题合集》和《Android Framework 开发揭秘》的敌人点击这里收费支付,保障收费分享!

退出移动版