爱奇艺2018秋季校招Android工程师第三场这套题在我刷过的大厂校招卷里算很有代表性的一类不是纯八股文背诵而是把四大组件、Handler、View体系、工程化工具链、存储适配这些点全揉在一起考察一个候选人对Android的整体掌握程度。尤其爱奇艺本身就是视频类App业务场景决定了它特别看重跟“文件存储、播放性能、列表流畅度、跨应用分享”沾边的知识点。本文不逐题搬运而是把这场的考察方向拆开把高频考点背后的原理和备考逻辑串一遍给准备Android校招、或者社招想补基础的人做个参考。1. 先看这场笔试在筛选什么视频类App的Android岗位画像很多同学刷题喜欢直接背答案但方向错了刷再多也白搭。你要先搞清楚爱奇艺这类公司出这套Android笔试题到底想筛出什么样的人。1.1 业务场景决定考察权重视频类App的Android端日常都要面对这些东西播放器内核的对接、视频列表的滑动性能、本地缓存与下载、投屏与多端联动、会员支付的渠道安全、Push和分享。所以笔试里那些看起来零散的知识点基本都能映射到具体的业务场景上。我整理过一个对应关系业务场景对应核心考点视频列表页滑动卡顿RecyclerView复用、图片加载、内存抖动播放页前后台切换Activity启动模式、onSaveInstanceState、生命周期视频下载/本地缓存文件存储、FileProvider、分区存储适配播放器内核接入线程调度、JNI、硬解软解切换弹幕与倍速播放Handler机制、触摸事件、SurfaceView/TextureView你看这些不是孤立的“面试题”而是直接长在业务上的基础能力。出题人不会指望你刚毕业就懂播放器底层但会通过基础题判断你有没有能力在半年内接住这些业务。1.2 “第三场”在秋招批次里的定位秋招往年会分多批次笔试第三场通常处在一个微妙的位置第一批可能偏稳把最经典的基础题都放进去第二批开始加入少量新东西到第三场真题风格基本定型但会出现一些“稍微绕一下”的题。比如同样考启动模式前面可能直接问“singleTop和singleTask的区别”第三场可能就会给你一个具体场景——播放页点击推送跳到另一个页面再返回栈里Activity怎么变化。这就是在考察你“能不能在实际场景里用对知识”而不只是背概念。所以复盘这套题的时候别只盯着正确选项更值得关注的是题目背后的“业务化包装”。包装得越多说明这家公司越在意候选人的场景拆解能力。1.3 这家公司的技术栈倾向做视频出身的公司Android技术栈通常有几个倾向一是对Framework层有一定要求因为播放器、音视频硬解都绕不开底层二是对性能优化特别敏感毕竟视频产品是重流量重渲染场景三是对Kotlin、AndroidX这些新东西跟进得不算激进但也不排斥往往会用一两道题试探你对新技术的关注度。对应到复习上我的建议是四大组件和Handler这种地基必须吃到滚瓜烂熟系统机制要知道大概流程工程化工具要真的用过存储适配这种实战题要能写出细节。下面几章就按这个逻辑展开。2. 客观题的主战场组件、Handler与View体系的经典考法这一块是整场笔试的得分基本盘也是热搜词里“android面试题”“android ams”这些词扎堆出现的原因。客观题不会太偏但会在细节上给你挖坑。2.1 四大组件的经典陷阱Activity这一part启动模式是必考。你不仅要记住四种启动模式的含义还要能说出onNewIntent什么时候回调、singleTask和taskAffinity组合使用会怎样。常见的坑是singleTask的Activity在新任务栈中启动时系统会先查栈里有没有这个实例有就直接回调onNewIntent并且如果启动它的Intent带有.new_task标志还可能把整个任务栈拉到前台。很多人在这一点上没分清“清栈”和“拉前台”。Service也是高频考点。两种启动方式startService和bindService混用时的生命周期变化是最容易错的地方先start后bind停止的时候必须stopService和unbindService都调用才会走onDestroy只bind的话unbind就会销毁。这种题爱奇艺这类公司爱考因为播放器后台播放、音乐后台播放都是真实场景。BroadcastReceiver在Android 8.0之后静态注册隐式广播受限这个点几乎每年都出现在大厂笔试里。ContentProvider则常考一个冷门点Application的attachBaseContext、ContentProvider.onCreate、Application.onCreate三者的执行顺序。答案是attachBaseContext先执行然后是ContentProvider的onCreate最后才是Application的onCreate。很多业务初始化代码放错位置导致崩溃就是不懂这个顺序。2.2 Handler机制校招必考每次出法还不一样Handler机制在我看来是Android笔试的“试金石”因为它能区分出你是背了八股还是真的理解消息循环。基本考法包括子线程里能不能直接new Handler不能因为主线程的Looper已经prepare过了子线程要自己调Looper.prepare。MessageQueue里消息是怎么排序的按when时间戳排序不是按插入顺序。主线程的Looper.loop是死循环为什么不会卡死App这个问题要答到“没有消息时主线程会阻塞在nativePollOnce把CPU让出去”。比较进阶的考法是IdleHandler。它是在消息队列空闲时执行的回调可以用来做延迟初始化。有经验的候选人会主动提到用IdleHandler处理启动优化这在大厂笔试的开放简答里是加分项。还可以用removeCallbacksAndMessages防止Handler持有Activity导致内存泄漏这个点通常会和LeakCanary配合起来考。2.3 View体系与界面细节题View的自定义绘制流程——onMeasure、onLayout、onDraw——是笔试常客但爱奇艺这种偏业务的出题风格会更喜欢用“实际界面效果”来包装。比如热搜词里的“android中协调布局banner”就是在问你CoordinatorLayout配合AppBarLayout怎么实现折叠头图、Banner轮播的ViewPager翻页时如何协调手势冲突。拿Banner来说核心不只是Handler定时发消息还要处理好复用、生命周期和触摸冲突页面在滑动时暂停轮播、松手后恢复Adapter里的View要复用而不是每次新建页面不可见时要把任务移除。这些细节单独拆出来都可以出一道简答题。还有一些看似很琐碎的考点比如setColor和透明度对照表。为什么这类题会出现在笔试里因为Android的UI开发里颜色和透明度到处都用。Paint.setColor传的是ARGB整数Java里int是32位恰好每一位对应一个色值。透明度百分比和十六进制对应关系你得张口就来100%是FF、80%是CC、50%是80、30%是4D、0%是00。刷到“android透明度对照表”热搜的同学说明已经撞上过这种题了。还有类似“动态图标主题”的考点本质是深色模式适配与ThemeOverlay的使用以及Material You动态取色。这些属于Android 12之后的新特性笔试如果出现一般不会问得很深但你要知道这个特性的名字和大致原理不然一道组合题里会失分。3. 系统机制题AMS、Binder与系统升级这里拉开差距客观题大部分人都能拿分真正拉开差距的是系统机制题。这类题在爱奇艺第三场的笔试卷子里占比不一定高但一旦出现就是区分度。你能说清AMS做了什么和只会用Activity面试官一眼就看出来了。3.1 从startActivity到界面显示这条调用链要能默写笔试里考AMS很少直接问“AMS是什么”更多是让你描述一次startActivity的完整过程。大致链路是应用进程通过Instrumentation发起startActivity请求经Binder跨进程到SystemServer里的ActivityTaskManagerService去检查Activity栈、任务栈、进程是否存在等这些判断做完再通过Binder回调到应用进程在应用进程里创建Activity实例、调用生命周期。这里的关键点是Activity的创建主体是应用进程自己系统服务只是“裁判”负责决策栈和进程状态。很多人误以为Activity是系统服务创建的这就把问题答偏了。同理Service的启动、BroadcastReceiver的分发都会经过AMS或现在拆出来的ATMS相关模块做统一的调度。3.2 Binder一次拷贝的优势要讲透Binder几乎是Android系统机制题里必考的。问法一般是为什么Android的跨进程通信要用Binder而不是Socket、共享内存或者管道你要抓住核心Binder只需要一次拷贝数据从用户态A拷贝到内核态再让目标进程通过内存映射直接读到避免二次拷贝同时Binder给每个进程分配了UID内核层可以做身份校验安全性更高。再加上Android的ServiceManager用了Binder做统一服务注册与查询整套系统架构都基于它你没法绕开。为了答好最好还能说出AIDL的几个细节oneway方法会异步执行调用方不等待返回in/out/inout表示数据流向不是随便写的自定义类型需要实现Parcelable。这些都是笔试简答和电话面常追问的点。3.3 OTA、APEX与动态分区容易被忽略的加分项看到“android ota”“android apex”在热搜词里出现说明不少人在复习时撞到了系统更新机制。这类知识点在纯应用开发里用得少但大厂笔试偶尔会以“你对Android系统了解多少”的角度出题。OTA升级的核心是系统将升级包下载到指定分区重启后由Bootloader或Recovery模式去校验并写入系统分区。APEX则是Android 10之后引入的一种用于系统组件升级的包格式它让一些底层组件可以像普通App一样独立升级不必等整个系统镜像更新。动态分区Dynamic Partition是把system、vendor等逻辑分区放到super分区里OTA时按需调整各逻辑分区大小为无缝升级提供基础。这些听起来离业务很远但有项目经验的同学会发现自己在做系统定制、平板开发、车机Android时都会碰到。哪怕只是笔试里的一道选择题你能说出APEX和APK在签名、挂载机制上的区别也会给面试官留下“这个候选人系统知识面不窄”的印象。另外搜索词里的“android openocd”“i2c-tools 在 android 上使用”属于硬件调试工具链一般是嵌入式或系统开发岗位的考察方向。如果你投的是纯应用岗不需要深入但要了解它们是做驱动、外设调试用的不至于看到名词完全懵。4. 工程化与性能题Studio、Gradle、R8和火焰图都不该丢分我见过很多基础不错的候选人死在工程化题目上。理由很简单学校项目一般规模不大很少人认真研究构建系统、混淆、性能剖析这些“非功能”的部分。但大厂业务里这些都是日常所以笔试一定会探一探你的工程素养。4.1 构建工具链的版本匹配问题Android Studio版本和AGP版本的对应关系是笔试里很高频的“工程知识题”。比如热搜词里就有人在搜“android studio hedgehog | 2023.1.1 patch 2 支持AGP 8版本吗”。这个问题的答案是支持Hedgehog开头版本支持AGP 8.0以上但具体要用哪个AGP版本要以官方兼容表为准。笔试真正想考的是你有没有“版本敏感度”。Gradle、AGP、Kotlin插件、compileSdk、targetSdk这些版本之间是互相关联的乱升级会导致一堆诡异报错。我在实际项目里配过一套相对稳妥的组合AGP 8.x搭配Gradle 8.xKotlin插件版本和AGP版本保持同一大周期compileSdk用当前稳定版。笔试简答里写清“版本匹配原则”和“报错怎么排查”比背一个具体版本号更被认可。另外搜索词里有个报错信息“could not load compiled classes for settings file”这属于settings.gradle配置问题常见原因是构建缓存损坏或Gradle版本与配置语法不兼容。遇到这类问题标准排查链路是清掉.gradle和build目录、检查settings.gradle里的pluginManagement和dependencyResolutionManagement语法、最后确认JDK版本。这些步骤本身就能当工程题答案来写。4.2 R8、代码混淆与可维护性“android r8”和“android studio汉化”这种热搜词一起出现说明大家既想提升效率又在研究上架前那套处理。R8是Android官方在AGP 3.4之后默认开启的代码压缩与混淆工具它替代了早期的ProGuard但保留了keep规则文件的兼容性。笔试里常见问法R8和ProGuard有什么区别你要回答R8把压缩、优化、混淆、脱糖四步整合在一起编译更快产物体积更小ProGuard则相对传统很多规则需要手动写。问“混淆后如何还原崩溃堆栈”时要能说出mapping文件配合retrace或R8的重新映射命令。这些都是真实线上事故排查的必备技能。还会考keep规则的写法反射调用的类要keep、JNI方法要keep、Gson反序列化的数据类要keep、枚举和注解不能随便混淆。这些都是血泪教训换来的知识点。至于“关键词里提到的多包名构建”本质上可以理解为多渠道打包与多环境包管理这是应用市场运营和技术风险隔离的正常手段。笔试如果考到主要看你对productFlavors、buildConfigField、混淆规则的组合使用是否熟练。4.3 性能剖析火焰图不是让你看看而已Android Studio自带的CPU Profiler可以生成火焰图很多同学只在面试前背了名词却没真正看懂过。火焰图的每一列代表一个调用栈横向宽度代表耗时占比。你要学会看某个函数是不是自己代码里的“热点”然后针对它做优化。笔试或面试问性能优化一般套路是先问怎么定位问题让你打开Profiler或Perfetto去看调用栈再问怎么解决比如减少主线程耗时、用懒加载、用协程或线程池把耗时操作挪出去最后问怎么验证卡顿率、帧率、ANR率这些指标怎么统计。我建议大家至少自己跑一次火焰图分析找一个简单App点击某个按钮时生成火焰图找到那个耗时的函数再想想有没有优化空间。这个过程比背十道题都有用。搜索词里的“android studio 火焰图 指南”我推测很多同学就是在做这个练习时迷路的。除了CPU电池和网络也是性能题常客。蓝牙开发相关的考察点也会落在权限、BLE扫描、GATT连接上。视频类App里蓝牙场景主要是耳机播放、外设遥控笔试可能只考基础概念但面试时如果聊到项目能说清楚Android蓝牙适配的常见坑就有优势。5. 存储与FileProvider视频App最绕不开的适配题为什么存储这块我要单独拿一章出来讲因为视频类App本身就是重存储场景——视频下载、封面缓存、离线播放全都在跟文件打交道。而热词里那些挺长的content://URI路径恰好是很多人在实际开发和笔试刷题中绕不过去的东西。5.1 从内部存储到分区存储的演进Android的存储体系是笔试里特别容易出细节题的一部分。你得能一眼看出某个路径属于哪个区域路径所属区域访问难度/data/data/包名/内部存储应用私有通常需root或run-as/storage/emulated/0/Android/data/包名/外部存储应用专属目录高版本可用清理即删/storage/emulated/0/Android/media/包名/外部存储媒体目录Android 11后新增适合媒体文件/storage/emulated/0/Pictures/等公共目录公共媒体目录需要权限或SAFAndroid 10推出分区存储这个事去掉了应用直接访问公共目录的权限Android 11又加了MANAGE_EXTERNAL_STORAGE这类特殊权限的限制。笔试里的常见坑就是你把文件写到/storage/emulated/0/Android/data/包名/下面以为用户能用文件管理器看到实际上很多文件管理器在高版本系统上根本访问不了这个目录用户卸载应用这些缓存也没了。很多跨应用文件分享的bug都是没用对存储位置。5.2 FileProvider与content:// URI的本质FileProvider存在的意义是把内部文件通过content:// URI安全地共享给其他应用。为什么不能直接传file://路径因为Android 7.0之后禁止在Intent里暴露file:// URI否则会抛FileUriExposedException。这是大厂笔试里一个经典的“开发常识题”。FileProvider的配置里有个容易错的地方file_paths里写的是你实际要共享的目录路径标签有files-path、cache-path、external-path、external-files-path等。配置错一个标签运行时就一直报找不到文件。像搜索词里出现的那种特别长的URI类似content://包名.fileprovider/别名/...在真实场景里就是应用间传递文件时留下的。比如“下载好的视频想分享给微信”或“从一个App打开另一个App的缓存文件”Intent的Data就是这种URI。笔试如果让你写一个“分享视频给好友”的跨应用流程你需要完整答出FileProvider的xml配置、getUriForFile生成URI、Intent里setDataAndType、还要给目标应用临时授权Intent.FLAG_GRANT_READ_URI_PERMISSION。授权这件事特别容易被漏但它是Android安全模型的核心也是面试官最喜欢追问的地方。5.3 数据库、SharedPreferences与剪贴板存储题里还会带一点数据持久化。SQLite和Room的关系笔试常考到Room是SQLite的上层封装编译期做SQL校验用LiveData/Flow做观察。SharedPreferences要注意apply和commit的区别apply是异步落盘commit是同步主线程调用commit可能卡顿。现在很多项目换用MMKV考察点是它基于mmap内存映射性能和跨进程访问都比SharedPreferences好。剪贴板相关的“android复制”热搜词对应的是ClipboardManager的使用。这类题不难但要注意Android 13之后系统会弹剪贴板访问提示涉及隐私数据的复制要考虑用户感知。这类小知识点常常藏在“系统适配”的综合性题目里千万别只准备大块知识。6. 编程大题怎么拆从播放器集成到文件分享的完整思路笔试的编程大题爱奇艺通常不会给你一个纯算法题就算完而是会跟业务场景挂钩。很多候选人算法题刷得很溜碰到这种“半开放设计题”反而不会写了因为没建立“把业务需求翻译成技术方案”的思维。6.1 手写题先保证基本功不丢分手写题最常考的还是单例模式双重检查锁写对volatile、快速排序、LRU缓存、生产者消费者。这些题不偏不怪但你得在纸上或者在线编辑器里写干净。我建议平时练习时养成几个习惯写单例一定考虑线程安全和反序列化写LRU一定用LinkedHashMap或自定义双向链表并且说明为什么写生产者消费者一定要处理wait/notify的锁对象和虚假唤醒。这些细节才是阅卷人看得见的地方。如果编程题的量比较大策略上先写核心逻辑再补边界条件和注释。面试官看的不是你一次写对而是你的工程表达能力。6.2 播放器集成这类题考察的是生命周期管理搜索词里有个“android smartplayer 集成”这类播放器SDK集成题很有代表性。播放器的核心工作是初始化时设置Surface在Activity的onResume里开始播放、onPause里暂停、onDestroy里释放资源。很多候选人把播放器生命周期跟Activity生命周期耦合得太紧导致切后台、锁屏、来电时播放状态错乱。笔试设计题如果让你设计一个“视频播放页”你需要考虑的点包括播放器实例放哪里怎么跟随生命周期页面切换时音视频焦点怎么处理网络切换时播放器怎么重连列表页和播放页视频无缝衔接怎么做断网本地缓存的视频能否继续播我建议答题时用“分点陈述流程图描述”的方式告诉面试官我先会拆出播放器核心、业务桥接、页面状态三层再讲每层怎么做。这个回答结构本身就体现架构思维。6.3 一个典型开放题缓存视频分享给好友我拿一个比较典型的开放题举例产品经理提了需求“把已经缓存的视频分享给好友”你怎么实现这道题很综合你可以把前面所有知识串起来回答第一步确定视频存储位置放在应用专属外部目录或媒体目录第二步通过FileProvider生成content:// URI注意file_paths配置和授权标志第三步构造Intent并拉起系统分享面板设置type为video/mp4第四步处理Android 10之后的分区存储限制高版本系统还需要处理选择器Intent.createChooser第五步考虑大文件分享时的稳定性避免内存溢出。这种题没有标准答案但你答得越具体、越贴近系统限制越能证明你真的做过。一句话抛名词和完整答题的差距非常明显。6.4 MVVM、Jetpack与组件化的开放问答大厂笔试的简答题还会试探你的架构水平热搜词里的“android studio mvvm代码示例”就反映了这方面的需求。你要能说清楚MVVM里的ViewModel为什么能自动处理配置变更、LiveData或StateFlow为什么适合做UI状态分发、Repository层怎么屏蔽数据源差异。组件化的题目则更喜欢问“如果多个业务模块都要用播放器你怎么设计”你要答出公共模块下沉、路由解耦、资源冲突解决、ARouter等框架的原理。爱奇艺这种大体量App组件化是真实工程常态所以这道题在面试环节出现的概率比笔试更高。7. 复盘视角按这套优先级复习实战中少踩哪些坑最后聊聊复盘和备考策略。笔试结束后我习惯把题目按“掌握牢固、概念模糊、完全不会”三档归类然后重点补中间那档。经验是完全不会的题短期补不起来概念模糊的题靠接下来两周集中记忆就能拿分。7.1 知识点优先级清单结合这套笔试和同类公司出题风格我排了一个优先级优先级知识点建议投入时间P0四大组件、Handler、View流程、主线程模型必修反复练习P1文件存储、FileProvider、序列化、网络库必修配合项目实践P1构建配置、混淆、多渠道打包、性能剖析必修动手做一遍P2AMS、Binder、WMS、系统启动流程学有余力再深挖P3源码级细节、框架源码面试前按需补充这个顺序的出发点是笔试客观题覆盖面最广的是P0工程题和简答题对应P1P2和P3是面试分水岭尤其是当你进入二面三面时面试官会越来越往原理上问。7.2 笔试和面试怎么衔接笔试只是第一关通常两天到一周内会邀约面试。面试时考官的追问重点基本都会踩在笔试里你暴露出的薄弱点上。比如笔试考了FileProvider面试官就可能追问file://和content://还有什么区别跨应用临时授权除了URI权限还有没有别的方式这时如果你只会写xml配置答不出grantUriPermission、ClipData、ContentResolver配合使用就会被扣分。所以笔试复盘不要止步于“这道题正确答案是什么”要多想一步“出题人为什么考这个点”“真实业务里我还能怎么用”。我见过不少同学靠这套思维在后续面试里反客为主主动把自己做过的存储适配项目拿出来讲面试官反而频频点头。7.3 高频知识点要练成条件反射校招笔试时间紧、题量大容不得你每题都现场推导。像启动模式、Handler机制、透明度和颜色的换算、常见文件路径这些必须在平时练成条件反射。我自己的方法是做Anki卡片遇到一次错题就记一次反复测试直到不用思考就能选对。还有一个小习惯是在电脑上开一个Markdown笔记专门记录“排查过的报错”。比如构建时报“Could not load compiled classes for settings file”我把解决步骤记下来调试时发现content:// URI授权失败我把踩坑原因记下来。时间长了这部笔记就是最贴近真实工作的备考资料比任何面试题集都有用。另外建议练一遍Android Studio环境配置包括汉化设置、插件仓库配置尤其要把Gradle离线构建跑通。环境配置不熟练的人很容易在笔试通过的兴奋之后倒在“在线编程环境报错”这个环节。笔试时如果环境有坑做不出题不是因为不会而是被工具绊住太亏了。我后来带团队面试新人时发现校招笔试真正要筛掉的往往不是基础差的人而是那些“只背不练、只会名词不会场景”的人。知识和场景一旦打通这套笔试的复习过程本身就已经能帮你建立一份很好的Android工程认知地图。