前言
笔者17年华东某211大学毕业,软件工程专业。毕业后本地一家中型互联网企业从事Android移动应用开发。年前辞职了,打算年后“金三银四”换个更大一点的舞台。目标有阿里、字节跳动、上海哔哩哔哩。比较中意他们的企业文化。
将近过年的时候,疫情席卷了全国(到现在已经是全世界了)。导致我的面试计划被推迟。在家里待了半个多月,简单的刷了一些面试题。感觉自己在学校的知识学得已经八九不离十了,加上有将近三年的工作经验,计划的阿里P5应该是十拿九稳的。
将近三月底的时候,才得到了阿里社招的信息,我很快投递了简历(简历很漂亮,211毕业、Android垂直领域三年开发经验)。不久后就收到了面试邀请。视频面试,下面是我的三面凉经。
阿里一面:
1.自我介绍
2.JVM内存布局,GC垃圾回收机制
3.对做智能家居有没有兴趣
4.设计模式怎么分类,每一类有哪些
5.乐观锁、悲观锁
6.动态代理的几种实现方式以及优缺点
7.直接在Activity Sleep 5000ms,再post一个runable会不会ANR。
8.looper的唤醒是在Java还是Native层,怎么做到的
9.Binder通信机制
10.如果让你设计一套进程间通信的机制,你会怎么设计
阿里二面:
1.写一个二叉树的深度度优先遍历,递归 非递归
2.Koltin为什么比Java更安全
3.安装包优化有哪几种方式
4.如果一个app无法访问网络,你怎么做数据存储。
5.事件处理函数有哪几个,父View 子View 监听同一个事件,重写哪些方法。在哪个View重写?
6.如果android没用对应的view,flutter能运行吗?手写单例模式,volatile 跟 synchronized区别?
7.如何处理Crash,NativeCrash呢?Google是怎么做到的?如果上报过程中再次产生Crash能不能捕捉到?
8.apk编译打包流程 V1,V2 签名区别
9.binder的Native层代码看过吗
10.Android 沉浸式状态栏 怎么实现的
阿里三面:
1.handler中loop方法为什么不会导致线程卡死,动画的原理,有没有实战过补间动画;bugly上面收集到的最难的bug是怎样的,如何解决的?
2.网络协议okhttp中的缓存机制,dex加载流程,组件化的原理;
3.应用启动流程,activity 启动流程,为什么要每个应用有一个自己的虚拟机,这个虚拟机和JVM的关系。
4.如果让你实现一个调试器,你会怎么设计?静态调试?动态调试呢?
5.React Native跟原生开发的优劣
6.hashmap的基本原理
7.如果要你自己去实现一个图片库,怎么做?
8.插件化的原理有了解过吗?
9.MVC MVP MVVM原理和区别
10.做过哪些页面卡顿优化,是怎样做的。
11.谈谈对热修复的理解
经验总结
以上就是我的阿里之路三面凉经了,前两面还算比较顺利,到第三面基本上没有回答出来几个。细心的朋友可能已经发现了。阿里三面问的大多是底层的原理。总结一下我的失败经验大多是:
我并没有去追根溯源搞清楚那些方法、工具、框架到底是怎么实现的,他们的工作原理是什么。我个人觉得自己在大学时期的项目经历已经足够丰富了,但都只是把纸面上别人的东西搬运、组装,变成了我自己东西,其实那终究不是我的东西,社会需要的是创新型的人才,并不是一个敲代码的搬运工。要创新,那必然要搞懂原理,你才能够是一个创造者。
重整旗鼓,血虐字节面试官
经历阿里的惨痛教训后,LZ卧薪尝胆,在家恶补历年各大厂Android岗中高级岗面试题。将掌握知识,系统化的整理了出来。恶补各种底层代码。魔鬼训练两个月后,终于在五一节前收获了字节跳动offer。已经拿到offer了,lz决定把我两个月恶补整理的几十套腾讯、字节跳动,京东,小米,头条、阿里、美团等公司19年的Android面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。以下是部分截图。需要的朋友关注后,私信我【面试】即可领取
最后想说的话
引用一个知乎高赞回答吧
问:程序员应该关注哪些技术?
答:这些问题,每天都会有人在群里议论,也会有人经常在群里求工作职位坑。那么我的看法是不要纠结学什么,先学了再说,与其抓住变量(新的技术手段)还不如好好学习,我特别喜欢《暗时间》的一段重视知识的本质:对于程序员来说这一点尤其重要,程序员行业的知识芜杂海量,而且总是在增长变化。很多人感叹跟不上新技术。应对这个问题的办法只能是:抓住不变量。
底层知识永远都不过时。算法数据结构永远都不过时。基本的程序设计理论永远都不过时。良好的编码习惯永远都不过时。分析问题和解决问题的能力永远都不过时。强大的学习能力和旺盛的求知欲永远都不过时。你大脑的思维方式永远都不过时。
网友评论