开头
在大厂,写得一手好文档是一个非常吃香的技能。这可不只是一个锦上添花的东西,而是很多工程师晋升,打造自己话语权的武器。 我这两年在组内的深刻体会就是,大部分厉害的高级工程师(不包括那些纯混日子靠资历晋升的人),写文档的能力一点也不含糊,很能抓住上级和项目的G点。
可能有人会觉得,我技术牛逼就行了,为啥还要提高写文档的能力,有这功夫我还不如多看看源码分析?这是一些初级或者刚入门的工程师的普遍的困惑。这是因为大部分刚刚入行的朋友有一个很深的误区,就是他们以为做软件工程是一个和计算机打交道的工作,其实不然。软件工程不只是和代码打交道,更重要的是和人打交道,是一份社会性质很强的工作。在大部分公司里面,尤其是大厂,牵涉到的人,组,都是非常非常多的。在小厂,人与人之间交流意见和设计可以口口相传,心领神会,但是一旦人开始多了,就只能靠文档了。除非你可以厉害到一个人把所有代码撸完,不然还是最好老老实实的夯实自己写文档的能力。
如果你有写技术博客的习惯,那么恭喜你,相信你已经对如何抓住文档受众的技巧有所了解了。这对你在大厂生存有很大的帮助。如果没有也不要伤心,这篇文章就是为你精心设计的。
在这篇文章里,我会大致的把一份安卓的项目设计文档的骨架,和一些我工作中实际遇到的正反例都列出来,方便大家以后在工作中实践。
一般官网或者猎聘网的职位要求都写的很清楚,大家对照看一下就大体清楚能否胜任了。就算没成功也能发现自己的不足然后补上挺好的。
OPPO这些大点的厂子,对java语言,源码层,项目经验等都看到很重。需要有比较系统的知识体系,懂原理会自己手写源码等
这里简单跟大家分享一下我这次面试经历吧,希望给那些准备跳槽的朋友一个参考
Oppo一面:
1.你要面的是Android开发工程师,那么Android开发主要是做什么的?
2.你的问题是什么?
3.Java中的难点?
4.Java当中遇到的锁?
5.线程的了解?线程的创建?线程的切换?AsyncTask什么时候是在工作线程?什么时候是在主线程?
6.Violate关键字和变量不可见性。
7.Android SDK是个啥?如何开发?SDK如何使用?
8.项目上的问题?
Oppo二面(部长面):
部长面其实答得不好,有些问题不是很清楚,但是答的比较有深度。很多基本的概念容易忘,静下心来复习才是硬道理。
1.项目介绍:
2.Android虚拟机允许的最大内存
3.职业规划
4.Activity和Service之间的交互
5.Bundle的最大限制,Bundle有什么要求?
6.OOM及其解决方案
7.BroadCastReceiver有几种?开机启动的广播是什么广播?
8.对导师专利一作是怎么看的?
9.可以问我一个问题?
本来这里就分享完了,你能收获的主要是一个方向。不可能说你开发好几年了,现在连架构和底层源码都没去研究过,看几篇别人的面经自己也能去面试高级岗位了。
最后
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司21年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
详细整理在文档可以见;
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。