Android开发三年,面了八家公司终于腾讯上岸,含泪整理面经
大概从httpDNS,域名容灾等方面回答吧。
7.设计一个方案,apk已经发出去了,java代码是最新,但是分包下发的so文件是旧版本,如何做一个兼容方案,保证兼容可用。
这里没答好,我也忘了怎么答的了。
8.java类加载机制。
这是个基础概念题,没答好,回答的双亲加载机制。
然后引出pathClassLoader,dexClassLoader的区别,一个dex的加载到一个java类的加载过程。
9.一道算法题。
字节二轮
1.聊简历。
2.性能优化,展开讲了卡顿,内存。
3.数据结构的题,hashCode的扰动算法,涉及到一个数字,31,这个31是怎么来的?
4.类的static属性字段,比如 public static int a = 1,被赋值几次?
这个需要对类的加载机制有了解。
5.多个Activity共同bind一个service,一个Activity destory,问service的情况。
这里就是问service的生命周期,考察bind跟start的区别。
6.装饰器模式,跟代理模式的区别。
考察对常用的设计模式
7.okhttp的缓存逻辑实现。
我以为是问的 链接缓存跟io缓存,我回答的是连接池复用跟 okio的io复用。
后来提醒是cache,就回答cacheInspector,及其源码实现。
8.sharedPreference的commit ,apply区别。
9.sharedPreference的其性能问题。
apply的anr是有一个字段,会block住主线程,需要清理queuedWork队列。
10.sharedPreference线程安全性,还有进程安全性,sharedPreference锁的对象是谁?
sharedPreference线程安全,锁的是contentImpl.class
11.synchornized锁对象,汇编实现。volatile的汇编实现。
12.volatile 修饰 boolean能保证原子性么?
13.Android有哪几种动画。
14.设计题,设计一个埋点数据上报库,需要哪几个模块,提供哪样的接口。
15.算法题,生产消费者模型。
16.concurrentHashMap的相关。
包括实现原理,put方法,树化,扩容,继承了谁,扩容的时候,其余桶怎么感知。
17.安卓打包签名v1,v2,v3的区别。
字节三轮
1.装饰器模式,适配器模式区别。举个Android或java里的应用例子。
2.单例的优缺点。
3.架构有做过么。
4.说一下项目,项目中最能提现你能力的事情。
5.平时怎么学习的。
6.以后的职业规划
7.离职原因
8.插件化,做过插件化么,了解的主流方案?
9.算法题。
因第三轮挂了,捞出来换岗位再战。
字节一轮(这轮面了175分钟,记忆深刻)
1.聊聊平时做过的性能优化。
2.界面卡顿
从viewStub源码开始谈layoutInflate的整个过程
包括xml的解析,如何解析tag,细节到里面哪些特殊tag。
3.xml的解析耗时在哪些方面,反射,读文件,解析。
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.职业规划相关。
最后欢迎大家来鹅厂,有一说一不吹牛逼,这里同事真的很不错。
下面是我花了将近一个月的时间整理的一份面试题库。这些面试题,包括我本人自己去面试遇到的,还有在面试之前刷过的题目,我都统一的整理了一下,希望对大家有用。
1.Activity启动模式
2.Activity的启动过程
3.进程通讯
4.Android Binder之应用层总结与分析
5.进程保活方法
6.从源码了解handler looper ,messageQueue思路
7.handler如何实现延时发消息postdelay()
8.Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
9.RxJava原理及如何封装使用
10.okhttp源码分析
11.retrofit源码分析
…
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。





既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!
Android架构师之路很漫长,一起共勉吧!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
230)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!
Android架构师之路很漫长,一起共勉吧!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
更多推荐
所有评论(0)