Android面试复盘:认真刷题,掌握原理很重要!百般努力终入腾讯成功上岸!,干了5年Android开发还没掌握binder机制

字节一轮

  1. 先聊简历。

  2. 聊性能优化方面的问题,我这边体系化展开讲卡顿,瘦身,内存,crash等方面的优化经验。

  3. sychronized,volatile区别?

这里可以体系化的回答,主要从JMM角度去回答,最后深入到字节码层面的区别。因为提到了修饰的范围有差别,就有了下一题。

  1. 对于锁的对象的不同,效果会有什么差别。

  2. 讲一下Handler机制。

这个问题问得太多了,一定要去看一回源码。

重点答的是MessageQueue这块,包括什么时候空闲,阻塞。

发散讲了线程相关的ThreadLocal,还有IdleHandler

  1. 出了一个设计题,当你的服务商出现问题,设计一个网络请求可用性的兜底方案。

大概从HttpDNS,域名容灾等方面回答吧。

  1. 设计一个方案,apk已经发出去了,java代码是最新,但是分包下发的so文件是旧版本,如何做一个兼容方案,保证兼容可用。

这里没答好,我也忘了怎么答的了。

  1. Java类加载机制。

这是个基础概念题,没答好,回答的双亲加载机制。

然后引出PathClassLoader,DexClassLoader的区别,一个dex的加载到一个java类的加载过程。

  1. 一道算法题。

字节二轮

  1. 聊简历。

  2. 性能优化,展开讲了卡顿,内存。

  3. 数据结构的题,hashCode的扰动算法,涉及到一个数字,31,这个31是怎么来的?

  4. 类的static属性字段,比如 public static int a = 1,被赋值几次?

这个需要对类的加载机制有了解。

  1. 多个Activity共同bind一个service,一个Activity destory,问service的情况。

这里就是问service的生命周期,考察bind跟start的区别。

  1. 装饰器模式,跟代理模式的区别。

考察对常用的设计模式

  1. okhttp的缓存逻辑实现。

我以为是问的 链接缓存跟io缓存,我回答的是连接池复用跟 okio的io复用。

后来提醒是cache,就回答CacheInterceptor,及其源码实现。

  1. SharedPreference的commit ,apply区别。

  2. SharedPreference的其性能问题。

apply的anr是有一个字段,会block住主线程,需要清理queuedWork队列。

  1. SharedPreference线程安全性,还有是否进程安全,SharedPreference锁的对象是谁?

  2. synchornized锁对象,汇编实现。volatile的汇编实现。

  3. volatile 修饰 boolean能保证原子性么?

  4. Android有哪几种动画。

  5. 设计题,设计一个埋点数据上报库,需要哪几个模块,提供哪样的接口。

  6. 算法题,生产消费者模型。

  7. ConcurrentHashMap的相关。

包括实现原理,put方法,树化,扩容,继承了谁,扩容的时候,其余桶怎么感知。

  1. 安卓打包签名v1,v2,v3的区别。

字节三轮

  1. 装饰器模式,适配器模式区别。举个Android或java里的应用例子。

  2. 单例的优缺点。

  3. 架构有做过么。

  4. 说一下项目,项目中最能体现你能力的事情。

  5. 平时怎么学习的。

  6. 以后的职业规划

  7. 离职原因

  8. 插件化,做过插件化么,了解的主流方案?

  9. 算法题。

因第三轮挂了,捞出来换岗位再战。

字节加餐一轮(这轮面了175分钟,记忆深刻)

基础题目

  1. 聊聊平时做过的性能优化。

  2. 界面卡顿

从ViewStub源码开始谈LayoutInflate的整个过程

包括xml的解析,如何解析tag,细节到里面哪些特殊tag。

  1. xml的解析耗时在哪些方面,反射,读文件,解析。

  2. 如何优化这个过程:xml在编译期就生成为class文件,那这是gradle编译的哪个阶段做这个事情。

  3. checkthread的问题,从Window到ViewRootImpl的创建,几者之间的关系。

以上这是绘制相关,然后是渲染。

  1. 矢量图的原理。

  2. canvas怎么来的。

  3. Window跟View的关系。

  4. 硬件加速原理。

  5. 双缓冲机制。

  6. 丢帧的原因。

  7. 帧数计算。

  8. 设计如何检测过度绘制的工具,要具体到View。

  9. blockcanary原理,目的。

  10. Listview的滑动优化,比如一个emoji可以用TextView渲染,也可以用ImageView渲染,哪个更优。

  11. Toast为什么不需要权限就可以显示。

  12. Window BadTokenExcetion的原因。

  13. 怎么实现悬浮窗。

启动加速

  1. 怎么做app启动加速

我的回答说利用IntentService,就是异步加载机制。但是还不够。

  1. 引导我从app启动流程开始讲一遍,看从启动流程上能不能找到方法。

  2. zygote的内部实现,zygote.fork有没有了解。

  3. zygote跟ams的通信方式用的是什么。

  4. 整个启动过程中,mHandler做哪些事。

  5. 设计一个工具,监控启动时间,粒度要求在方法级别。

内存相关

  1. 讲下内存泄露。以handler匿名内部类做例子讲。泄露链是怎样的。

  2. looper.prepare干了啥。

  3. ThreadLocalMap的实现。

  4. leakcanary原理。

  5. 为什么要做抖动的检查,有啥用。

  6. 为什么会出现抖动。

  7. 线上有泄露,怎么收集,排查,设计方案。

稳定性

  1. 解决线上稳定性bug的方法论。

  2. 讲个能体现亮点的解决线上bug的案例。

  3. 给了一个具体案例,让我现场分析原因。

主要考察思维方式吧。

  1. 怎么收集java的crash。

  2. 怎么收集native的crash。

  3. 用线程安全的数据结构,ConcurrentHashMap会出现modifyCountException么?

ANR相关

  1. 常见的anr问题怎么解。

  2. 不常见的anr,比如

MessageQueue.nativePollOnce都很正常,怎么去定位,如果是线上,怎么去收集。

  1. ANR的原因

  2. IntentService会ANR么,讲内部实现。

保活相关问题

  1. 杀进程机制的源码。

  2. 进程优先级。

  3. 怎么提升优先级。

  4. 常见的保活手段。

我这里着重讲了Tim的保活原理。还有第三方库Leonic的原理。

APP瘦身相关

  1. andRes原理。

  2. proguard源码。

  3. Facebook 的redex,字节的bytex原理。

  4. multidex原理。

  5. 很多资源包,如何瘦身。

问了一下我自己维护的github库相关问题

  1. 防多开原理

  2. 检测模拟器原理

  3. 查root权限,如果是自编的rom怎么处理。

聊了下简历里的经历

  1. contentProvider的初始化时机。

这里主要是问我LeakCanary 1.* 跟2.*有啥不同引出的问题。

  1. LocalBroadcast 和Broadcast的区别。

  2. xposed的原理。

  3. beforeMethodHooked,xposed内部做了什么事

  4. 免root hook框架 legend的源码实现。

记不太清,好像我说的是native方法指针的变更。

  1. 一道算法。

  2. 设计一个埋点库。

需要哪些模块。

  1. 设计一个组件,统计activity的前台时长,fragment的前台时长。

字节后续的面试我忘了记录复盘了,现在也记不住了。这一轮面试反正是把我榨干了。

最后进入谈薪阶段。只不过没谈拢,哈哈。

三、面试-鹅厂

===================================================================

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长。而不成体系的学习效果低效漫长且无助。时间久了,付出巨大的时间成本和努力,没有看到应有的效果,会气馁是再正常不过的。

所以学习一定要找到最适合自己的方式,有一个思路方法,不然不止浪费时间,更可能把未来发展都一起耽误了。

如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

325)]

[外链图片转存中…(img-bSB8ly9X-1712445335326)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长。而不成体系的学习效果低效漫长且无助。时间久了,付出巨大的时间成本和努力,没有看到应有的效果,会气馁是再正常不过的。

所以学习一定要找到最适合自己的方式,有一个思路方法,不然不止浪费时间,更可能把未来发展都一起耽误了。

如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值