年末我的Android面试复盘

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

5.checkthread的问题,从window到viewrootimpl的创建,几者之间的关系。

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

6.矢量图的原理。

7.canvas怎么来的。

8.window跟view的关系。

9.硬件加速原理。

10.双缓冲机制。

11.丢帧的原因。

12.帧数计算。

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

14.blockcanary原理,目的。

15.listview的滑动优化,比如一个kmoji可以用textview渲染,也可以用imageview渲染,哪个更优。

16.toast为什么不需要权限就可以显示。

17.badwindowtoken的原因。

18.怎么实现悬浮窗。

启动加速1.怎么做app启动加速我的回答说利用intentService,就是异步加载机制。但是还不够。

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

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

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

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

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

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

2.looper.prepare干了啥。

3.threadLocalMap的实现。

4.leakcanary原理。

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

6.为什么会出现抖动。

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

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

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

3.给了一个具体案例,让我现场分析原因。主要考察思维方式吧。

4.怎么收集java的crash。

5.怎么收集native的crash。

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

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

2.不常见的anr,比如 msgQueue.nativePollOnce都很正常,怎么去定位,如果是线上,怎么去收集。

3.anr的原因

4.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的初始化时机。这里主要是问我LeakCanary1.* 跟2.*有啥不同引出的问题。

2.LocalBroadCast 和broadCast的区别。

3.xposed的原理。

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

5.免root hook框架 legend的源码实现。记不太清,好像我说的是native方法指针的变更。

6.一道算法。

7.设计一个埋点库。需要哪些模块。

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

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

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

最后就是我一直想去的南山必胜客,粤海公仔厂了这里面试具体轮次我就不细说了。题目其实也都是那些题目,重点提供平时要学习的方向吧。

1.聊简历,性能优化。

2.view的绘制流程,尽可能越详细,越全面越好。因为有了字节之前的面试经验,这里聊了很多view相关的。大概从ActivityThread讲起,到window,windowManager,viewRootImpl,setContentView内部实现干了什么,layoutInflator下发到requestLayout,performShechdules,checkThread,绘制屏障消息双缓冲,sync信号,最后再performOnMesure,layout,draw。

这里真的是要求自己平时除了写界面,也一定要深入源码进行学习。很多奇奇怪怪的业务问题,真的就是靠读源码解决。

3.问网络优化,当网络带宽足够大,信号足够好,下载大文件,怎么快?开多个链接,wifi+4G同时,分片下。协议层 ,udp去下,本地做完整性校验,我记得qq客户端时这样做的。m3u8的思想去下。

4.apk安全措施,当apk已经被破解了,怎么处理?我回答借助v1签名思想,本地做对文件md5的校验。或者借助v3的思想,连续签名。

5.两个设计模式的区别。具体哪两个我忘了。

6.三道算法题第一题写一个必然死锁的代码。讲一下解决死锁的方式。锁对象的不同的区别。第一个出现的字符。数组里的元素,组合起来求最大值。

7.checkThread里的thread是什么时候被赋值的。

8.讲下数字证书是什么。

9.解决内存抖动的实际案例。

10.降低bug的实际案例。

11.设计一个如何处理 app接收到服务器脏数据的方案。

12.设计一个云相册。

13.classLoader机制的原理。

14.硬件加速的底层实现。15.操作系统相关问题。16.如何处理多语言问题。17.jvm虚拟机相关问题,具体忘了。18.职业规划相关。

最后欢迎大家来鹅厂,有一说一不吹牛逼,这里同事真的很不错。

3.算法题

多说两句,客户端要学算法,不是说算法没用,你知道什么叫树的遍历你就能理解viewTree解析过程。而且在大家层次不齐的情况下,用算法打回同一层次,看看谁的逻辑性强,代码书写风格好,这是对面试筛选有好处的。谁都会说,买菜要用高数嘛?但是人家会你不会,那就是在面试上吃亏。

正题,我的刷题路程剑指offer来入门https://cyc2018.github.io/CS-Notes/#/README

里面有很多题,你在力扣评论区可以看到各种解法,建议多看各种解法,体会不同的思路https://leetcode-cn.com/problemset/algorithms/?difficulty=%E7%AE%80%E5%8D%95

刷题的方式,一定要自己动手写代码,调试,运行。可以自己创个小库,督促自己提交。

也顺便把常见的设计模式复习了

差不多刷完了基本的排序,遍历,贪心,局部最优等思想,也就有个一百来道题了。此时面对面试,也就有个眼熟了。真心不建议采用突击的方式,应该要做一个长期写题的规划。

最后

最后,在这里我也分享一份干货,由大佬收录整理的Android学习PDF+架构视频+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

如果你需要的话,可以在GitHub上自行获取。

也可点此处快速入手通道免费获取。

最后

简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。

面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。

另外,描述问题一定要慢!不要一下子讲一大堆,慢显得你沉稳、自信,而且你还有时间反应思路接下来怎么讲更好。现在开发过多依赖ide,所以会有个弊端,当我们在面试讲解很容易不知道某个方法怎么读,这是一个硬伤…所以一定要对常见的关键性的类名、方法名、关键字读准,有些面试官不耐烦会说“你到底说的是哪个?”这时我们会容易乱了阵脚。正确的发音+沉稳的描述+好听的嗓音决对是一个加分项!

最重要的是心态!心态!心态!重要事情说三遍!面试时间很短,在短时间内对方要摸清你的底子还是比较不现实的,所以,有时也是看眼缘,这还是个看脸的时代。

希望大家都能找到合适自己满意的工作!

进阶学习视频

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中…(img-rIlhdCP4-1714633702419)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值