最后
感谢您的阅读,在文末给大家准备一个福利。本人从事Android开发已经有十余年,算是一名资深的移动开发架构师了吧。根据我的观察发现,对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
所以在此将我十年载,从萌新小白一步步成长为Android移动开发架构师的学习笔记,从Android四大组件到手写实现一个架构设计,我都有一一的对应笔记为你讲解。
当然我也为你们整理好了百度、阿里、腾讯、字节跳动等等互联网超级大厂的历年面试真题集锦。这也是我这些年来养成的习惯,一定要学会把好的东西,归纳整理,然后系统的消化吸收,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。这和我们收集资料就要收集那些系统化的,是一个道理。
最后,赠与大家一句诗,共勉!
不驰于空想,不骛于虚声。不忘初心,方得始终。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
这个程序员在忧虑这offer能不能接,而我面试字节却惨遭扑街…简直不要太难受!
面试扑街经历
一面问的 Java 和 Android 基础
-
Jvm虚拟机
-
messageQueue会不会阻塞ui线程
-
对象锁和类锁
-
之字形打印树
-
还有其他的记不清了,主要是我对二面印象太深刻了。
二面问的 Flutter 和 Dart
-
dart是值传递还是引用传递
-
Widget和element和RenderObject之间的关系
-
widget的root节点
-
mixin extends implement之间的关系(除了extends其他的没怎么用过。。)
-
jvm内存模型(感觉这个是面试官可怜我,看我什么都不会才问的=。=)
-
Future和microtask执行顺序
-
dart中…的用法(基本没用过。。)
-
await for(没用过。。)
说实话,第一个、第三个、第六个我准备的话应该能答出来的,但是一个多月没碰Flutter了,忘了都差不多。。。
此外GitHub和博客维护好很重要,像我这种demo随手写,随手删的人直接GG。。
三面问的Android扩展技术
-
描述下事件拦截机制
-
hanlder 机制
-
ui卡顿 卡顿的原因 如何监控
-
热修复的原理是什么
-
聊聊组件化
-
ndk 有没有写过(肯定没写过啊)
-
sharedperfence原理 commit apply之间的差别 如果写入失败了会怎么样
-
如何做包体积优化,如果让你做dex包体积优化你会怎么做
-
apt 和gradle transform的差别是什么
apt生成的是java的class,而且不能更改原始的类,而transform这个东西你可以为所欲为,但是毕竟操作的是字节码,风险系数更高,面试官还特地问了我下是不是有classnotfound问题,其实貌似真的发生过,但是想想感觉有些丢人没敢承认,毕竟有点一知半解。
- .class .java .dex之间的区别是什么
吐了,虚拟机什么的我面试的时候都给忘了。哎,太难了。.java是给开发看的,.class是给机器看的,而.dex是给安卓虚拟机看的。当然这边更多是想问安卓虚拟机相关的,反正答的稀烂
- okhttp 的拦截器机制 如果让你监控网络请求的耗时你会怎么写
把责任链说了,写了关键字得分了,面试官也没继续往下问,其实还是可以聊聊dispatcher什么的,okhttp的源代码说实话有点深。
-
kotlin 协程和java的线程有什么区别
-
启动优化是如何做的
我个人拙见哦,启动的东西要么延迟,要换缓存。时间轴总长其实比较难以优化,我们参考的是阿里的starup的任务图模式。
- 如何只拉起推送进程而不拉起app的进程
死亡题目,完全不知道答案。
- TraceView 和 Systrace直接的区别
哈哈哈,之前看过,然后忘了,这种东西一阵子不用吧就真的会忘掉。
面试总结:
对于这次的面试我的看法就是真的好难啊。要准备基础还要刷算法题,不仅问Android,还要问jvm虚拟机,顺便问问并发,还要会kotlin,最好还能来个flutter,给各位跪了。
下面是我在这次面试之后做出的一些反思以及对之后面试的一个学习复习方法:
技术储备不够面试被怼
为什么有些程序员就算是开发很多年了,去面试依旧会被怼呢?
大部分原因都来自于:技术储备不够。
太多程序员在平时都是做着crud的工作,有些技术都是等到工作上要用到了才去学习,就是因为大家平时用到什么去学习什么,以至于面试的时候面试官问点延伸性或者他需要的人才技术就回答不上了。
简单来说就是:只有当下公司的业务能力,没有解决技术的能力,缺少技术创新的能力。
以至于最后只敢找跟之前公司差不多性质的,缩短了自己的职业规划,工作越找越不满意。
平时应该如何进行技术储备、高效复习呢?
那些底层知识都很枯燥,每次学完就忘,一合上书就忘得差不多了,不知道要怎样学才好了。
其实造成这样的现象最主要的原因是没有掌握系统的学习方法,也没有系统的资料辅助理解和学习。
知识点就是那些,基本上,翻来覆去就是那些换汤不换药的问法。但是现在大家上班要写业务代码,下班又是家庭琐碎,要想自己静下心来好好学习根本不可能,仅仅只是有用信息的筛选就足够麻烦。
1、去学习「自己知道自己不会」的知识
其实在开发过程中,总有一些自己想学但是因为项目压力或者其他原因,然后自己打算放在以后 再学的东西,也就是所谓「自己知道自己不会」的知识。
例如:
-
比较常用的一些框架,比如客户端的网络请求、图片加载框架
-
常用的一些类和集合的源码,比如 ArrayList、LinkedList、HashMap(面试必问)
-
觉得自己无法清晰表达出来的概念,如「内存泄露」、「Java 并发」
这个阶段是一个对自己当前知识体系查漏补缺的一个阶段,你要做的,就是把自己不会的东西完 整的列出来,然后逐个击破。
2、全方位的学习,构建自己的「知识体系」
其实很多人在平时学习技术和日常开发过程中,学了非常多的东西,但很少有人会去系统地复习,从而构建自己的知识体系,导致自己学到的很多知识点没办法更好的产生联系,而且可能会 导致学了某个知识点没过多久就忘了。
那如何构建我们的「知识体系」呢?
Android 里面所谓的「知识体系」,我认为主要包含这几个部分:
-
Java 和 Anroid 基础
-
计算机网络
-
操作系统
-
设计模式
-
数据结构和算法
也就是说我们需要将这几个部分逐步击破,慢慢完善我们的知识体系,这个阶段是最花时间和精力的,但是坚持下来会让我们的基础变得更加扎实,而且能最大限度的构建我们的知识体系。
3、学习「自己不知道自己不会」的知识
这时候面试题的作用就出来了,「面向面试题编程」其实是一个查漏补缺、增强自己编程基础的非常好的方式。
在做面试题的时候,你会遇到很多奇奇怪怪的问题,很多都是你「之前没有接触过」或者「有接触过却没有往那方面想」的问题。
刚开始遇到这些面试题确实很让人很不舒服,但是这些面试题也确实能够最大限度地提升我们对知识之间联系的理解以及引发我们对一些具体使用场景的思考。
当然更重要的是我们可以通过刷往年各大互联网公司的面试题,让我们对于公司面试题有一个大致的认识而且也能提前了解到面试官面试时候的一些套路和做法。
遇到不懂的面试题直接回答不懂,但最好能将面试官的思路往我们会的东西带。
在面试的时候,切勿不懂装懂
我们面试的是技术岗位,有几斤几两,面试官问几个问题就知道 了,如果面试官问到的某个知识点,你只是有点印象或者没多少了解的话,直接回答这个知识不是很熟就行了。不然被面试官针对这个知识点追加几个问题的话,分分钟打你脸。
当然,在说对这个知识不是很熟之后,可以试着将面试官的面试思路往我们会的东西带,例如我 在阿里二面的时候,面试官问我有没有用过 B 树,因为我对 B 树不是很熟,所以我当时是这么讲 的:“对于 B 树不是很熟悉,但之前在看 HashMap 源码的时候,有研究过红黑树,对红黑树比较熟。” 然后成功地将面试官的问题转向了我熟悉的红黑树和 HashMap 的源码上面。
总结
想要拿到满意的 offer,**「坚持」**是最重要的,抛开了努力和坚持,其他的一切方法论都毫无用处。
尾声
开发是需要一定的基础的,我是08年开始进入Android这行的,在这期间经历了Android的鼎盛时期,和所谓的Android”凉了“。中间当然也有着,不可说的心酸,看着身边朋友,同事一个个转前端,换行业,其实当时我的心也有过犹豫,但是我还是坚持下来了,这次的疫情就是一个好的机会,大浪淘沙,优胜劣汰。再等等,说不定下一个黄金浪潮就被你等到了。
- 330页 PDF Android核心笔记
- 几十套阿里 、字节跳动、腾讯、华为、美团等公司2020年的面试题
- PDF和思维脑图,包含知识脉络 + 诸多细节
- Android进阶系统学习视频
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
g-sUgaonuk-1715241993650)]
- Android进阶系统学习视频
[外链图片转存中…(img-uVJTVD4g-1715241993651)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!