第一天上班的时候,我感到非常新奇和不可思议,我竟然真的成为了一名Android程序员,坐在工位上写代码都在窃喜。
与字节结缘
2020 年上半年的时候,刚复工没多久,我又一次选择了裸辞。或许出于对自己非科班出身的介怀,又或许只是想踏踏实实接受比较系统的计算机相关知识的学习,前一年的时候我就又一次萌生了考计算机研的想法,把操作系统、计算机网络、数据结构、计算机组成原理四件套都恶补了个遍。总之我又想脱产学习了。
4 月中旬的时候,我又成为了一名光荣的无业游民。当时告诉自己,冲一波大厂,不行的话就去考研,我甚至抽空还回学校看了一下房子,等这边房子到期就搬到学校里天天泡馆。
(当时在学校看房的时候,临近黄昏,觉得这种处在人生转折点的迷茫感受很奇妙,于是随手拍了一张)
后来收到了字节的面试邀请,结局你们也知道,我通过了面试,拿到了 offer,导致那一年的考研大军直接少掉了一名强有力的竞争者(bushi)。
字节的面试效率很高,不过我为了提高把握,每次约下一轮面试时间的时候都给自己预留了很长时间,然后在这段时间里疯狂学习。还有一个小窍门就是,及时总结输出学习成果,我当时把自己的学习成果总结成了许多知识点上传到了Github。(需要参阅的朋友,我待会把Github放在文章下方);
这里附上我当时总结的一些知识吧:
大概部分如下:
-
**
Java基础
:**JVM、String、内部类、多态、抽象和接口、集合框架(Hashmap、Arraylist)、单例、线程、Synchronized、Look锁、动态代理、引用 -
**
Android基础
:**四大组件、View、进程、Bitmap、屏幕适配、消息机制、线程异步、WebView。 -
**
Android扩展
:**Framework、AMS/PMS/WMS、Binder源码、Handler源码、ART、Apk优化、Hook、Proguard、架构(MVC/MVP/MVVM)、Jetpack、NDK开发、Rxjava、 -
**
Android源码
:**Leakcanary、Eventbus -
**
设计模式
:**面向对象六大原则、工厂模式、单例模式、建造者模式、观察者模式、适配器模式、策略模式、代理模式。
数据结构与算法:
-
线性链表
-
查找:顺序查找、二分查找
-
排序:交换类、插入类、选择类
-
树、二叉树、图:深度优先(DFS)、广度优先(BFS)
-
递归
-
分治
-
滑窗
-
三大牛逼算法:回溯、贪心、动态规划(DP)
-
…
**PDF格式版:**想对未来的自己说
实际上这些知识基本上工作几年的大部分Android开发者都能达到的水平,因此面试的时候只需要沉着冷静的思考,从源码的角度对面试官抛出来问题进行分析,就能比较轻松的解决。
技术参考版
《Android高级提升手册》内容完整版我已经上传到
Github
里面, 点击下方的推荐阅读
即可进入;
推荐阅读:2021年Android程序员春招面试题收藏整理笔记+知识点整理(获取通道);
尾声
评论里面有些同学有疑问关于如何学习material design控件,我的建议是去GitHub搜,有很多同行给的例子,这些栗子足够入门。
有朋友说要是动真格的话,需要NDK以及JVM等的知识,首现**NDK并不是神秘的东西,**你跟着官方的步骤走一遍就知道什么回事了,无非就是一些代码格式以及原生/JAVA内存交互,进阶一点的有原生/JAVA线程交互,线程交互确实有点蛋疼,但平常避免用就好了,再说对于初学者来说关心NDK干嘛,据鄙人以前的经历,只在音视频通信和一个嵌入式信号处理(离线)的两个项目中用过,嵌入式信号处理是JAVA->NDK->.SO->MATLAB这样调用的我原来MATLAB的代码,其他的大多就用在游戏上了吧,一般的互联网公司会有人给你公司的SO包的。
至于JVM,该掌握的那部分,相信我,你会掌握的,不该你掌握的,有那些专门研究JVM的人来做,不如省省心有空看看计算机系统,编译原理。
一句话,平常多写多练,这是最基本的程序员的素质,尽量挤时间,读理论基础书籍,JVM不是未来30年唯一的虚拟机,JAVA也不一定再风靡未来30年工业界,其他的系统和语言也会雨后春笋冒出来,但你理论扎实会让你很快理解学会一个语言或者框架,你平常写的多会让你很快熟练的将新学的东西应用到实际中。
初学者,一句话,多练。
由于文章篇幅问题复制链接查看详细文章以及获取学习笔记链接:前往我的GitHub