声明:我面试准备的是Android架构师岗位,下面的内容主要适用于 Android架构师方向的学习。
个人经历
重度网瘾
计算机专业,考研失利,虽然接受了调剂,去了一所双非院校,但是心里还是很不服气,感觉自己屈才了(年少轻狂,我现在只想打我自己),对现状一直不满意。
那时候王者荣耀刚出不久,我很容易就沉迷其中了,心醉于游戏世界中的快节奏和击杀快感,游戏带给了我现实中没有的刺激和成就感。渐渐地,我对学习也越来越敷衍,对找工作也不曾上过心。
遭受打击
读研的时间眨转瞬即过,我浑浑噩噩的毕了业,去了一个平平无奇的小厂做Android开发。
后面一次同学聚会,我发现班上很多没有考研的同学都进了OPPO、小米、爱奇艺这些大厂,薪资可观,而我还在小地方为了一点微薄的工资搬砖,我深受打击,没好意思把自己的现状说出来,心里暗暗下定决心——我要跳槽,我要进大厂。
菜醒
因为缺乏准备,一开始的面试被各个大厂轮着毒打,我真的急了,回头卸载了手机里的所有游戏和娱乐软件,开始找面试攻略,闭关刷题同时疯狂投简历(当时就是心里非常不甘心,想要改变现状,做了很多努力)。
所幸,经过了一阵子艰苦卓绝的闭关奋斗,认真准备了半年的结果还不错,我拿下了百度、美团、网易、小米、银联等大厂offer,成为offer收割机(基本上去面了的都过了)。
面经的话,后续会写文慢慢整理,大家可以关注一下动态,这里主要总结一下我的复习方法,分享一些在这个过程中给了我不少帮助的资料,大家也可以当做复习的一个参考。
内容大纲(干货满满):
-
Android就业要掌握哪些技能?
-
学习方法
Java
计算机网络
算法秘笈
设计模式
复习建议 -
学习资源、网站推荐
lets go ——
一、Android架构师要掌握哪些技能?
很多朋友心底都会有这样的疑惑:我学的东西是符合市场需求的吗?
这点其实很容易就能了解到,在这里我也庆幸自己在小厂的那几年,多少还是了解了一些行业相关的知识,下面结合我自己在boss等网站上找了半年工作的经历进行一些招聘需求总结。
互联网公司对Android开发的普遍要求:
(一)非技能要求
- 学历:重点高校本科及以上学历,计算机及相关专业毕业
(这个也不是绝对,技术牛掰的可以找朋友试试内推,找我也行,可以进我们的两千人技术交流圈,里面也有很多潜水的大厂大牛)
668350995 (这是群号)
-
工作背景:有一定的Android开发经验,有大项目的优先考虑
(基本上就是这样,大厂背景的有优势,没工作经验的有好项目的有优势,当然,不要作假,好好准备一下。项目不会说不要紧,这里推荐阅读项目经验不会说?字节跳动小姐姐手把手教你套路面试官!) -
热爱工作
(这个是他们对你加班能力的评估,哈哈哈,也算加分项吧)
(二)专业技能要求(Android架构师)
- 精通java语言,熟悉面向对象设计原则。
(虽然现在的Android官方语言是Kotlin,但是Java还是占有很重要的地位)
- 具有较强的编程和解决问题的能力,具有较好的数据结构及算法基础功底
(这些都是权重很高的加分项)
- 熟悉各种设计模式。
(掌握插件化、组件化框架设计,掌握图片加载框架、网络访问框架设计、RXJava响应式编程框架设计等)
我这样的一条咸鱼之所以能翻身也是得益于一份大佬整理的系统性学习资料。
白嫖指路↓↓↓↓↓(这是一个机构的大佬整理的,当时是参加了他们的活动免费领取的)
耗时298天,8大模块、3382页66万字,Android开发核心知识笔记!
这份资料的内容比较多,但是,根据我自己这些年的工作经验,Android架构师最重要的就是上面的三个点,下面我就分享一下我在这几个方向的学习方法。
二、学习方法
(一)Java部分
Java基础部分
一般来说 Java 基础知识点有以下这些:
- 面向过程 VS 面向对象
- 面向对象基本特征:封装、继承、多态
- 访问控制符:private、default、protected、public
- 数据类型:基本类型、引用类型
- 控制流程:for、while、switch 等
- 序列化
- 异常处理(有点难度)
- 泛型(有点难度)
怎么学?
可以找一些 Java 相关视频看一下,比如去B站。
敲黑板啦:视频不要贪多,因为没有一个大牛是看视频看出来的。
看视频是别人将知识点往你脑袋里灌,最大的好处是快速,但是深度不够,如果你想学到更多,你需要的是自我学习
,带有思考的自我学习。
看书是一种高效的自学方式,推荐基本比较好的书:
《Java 核心技术卷I》
这本书建议作为Java 之旅的第一本书,涵盖的内容非常全,比起那些30天学会 Java 之类的书,这边书更加务实。书中有些章节其实不用看,比如Swing GUI 的直接略过,因为用 Java 写桌面端应用已经过时了。
《阿里巴巴Java 开发手册》
大厂阿里巴巴出品的,这其实是一本 Java 编码规范,编码习惯从一开始就要养好。
《Java 编程思想(Thinking In Java)》
这是一本非常非常经典的书,你要问搞 Java 的人如果没听过这本书那算是白学了,哈哈。其实说实话这本书我试图看过几次,最终都没有看完,一个原因是它太厚了,另外我觉得讲得太啰嗦了,所以我现在拿来垫桌子,高度合适挺好的。所以呢,建议新人不要一开始看这边书,不然你会怀疑人生还没入门就放弃了,就把它当做编程圣经,等你后面有经验了拿起来再翻翻吧。
敲黑板了:学习编程要有耐心,不要急于求成,要打好基础。也许你一个月两个月还在运行一些简单示例,这是正常的,多学习多思考。
Java 高阶部分
学什么?
Java 高阶需要掌握的东西非常多,这里列举一些核心知识点,必须全部掌握的。这是 Java 面试高频考点,也是传说中 Java 八股文的一部分,面好了进入下一面,面不好回家等消息。
- Java 集合类源码
- 线程池
- Java 代理
- IO 模型
- JVM
- Java 并发编程(JUC)
怎么学?
建议你不要再找视频看了,一边看书一边思考吧。
《Effective Java》
书中列举了很多编程建议,其实就是告诉怎样去写好代码,你需要从
能写代码
(入门)过渡到会写代码
,这本书值得一看。如果你的编码经验比较少,那这边书你可以稍微往后延,因为看完了你可能没有感同身受。
《Java8 实战》
Java15 都出来了为什么还要学 Java8 ?因为现在很多公司都还停留在 Java8, Java8是继Java5之后改动很大的一个版本,得好好学。Java8之后的版本非常不给力,换一个 JDK 版本费时费力,收益也不明显,公司肯定不愿意动了。这边书将 Java8所有的新特性都详细讲解了,非常推荐。
《深入理解 Java 虚拟机 第3版》
周志明大神写的,非常非常经典,已经更新到第三版了。Java 虚拟机也就是 JVM,JVM 是Java 面试必考的知识,不懂这个直接回家等消息吧。这边书我看了很多遍,每次看完都有新的收获,墙裂建议大家看完。
《Java 并发编程的艺术》
这是一本专门讲解Java并发的书,涉及到各种锁、常见安全的集合类,基本就是将 JUC(java.util.concurrent包的简称)里所有的内容覆盖了一遍,看完你一定有收获。强烈推荐!
上面推荐的几本书可能不太容易读懂,建议多读几遍。书中看不懂的地方可以在网上搜,多找一些优质的博客或者公众号看。
至此 Java 语言特性基本学习完了,就算达不到高手的水平,你也在正轨上了。
(二)算法部分
众所周知,国内互联网面试的流程逐渐在向国外靠拢,像字节跳动、BAT 等大厂,手撕算法题
已经成为了必选动作。
算法也是一个分水岭,你的薪资上不上的去很多时候取决于你的算法基础是否扎实。一个优秀的算法工程师,薪资待遇基本上都很优渥,毕竟今日头条就是靠算法发家的,现在的互联网公司也越来越重视算法了。
所以,除了上面的刷题,大家最好还是安排专门的时间钻研一下算法。我个人的算法能力一开始也很差,但是经过我自己安排的算法专项训练,效果还是十分显著的。下面我把自己的复习方法分享给大家。
下面是数据结构和算法的面试核心知识点,大家可以参考学习,逐个击破。
- 栈与队列:先进先出、后进先出
- 线性链表
- 查找:顺序查找、二分查找
- 排序:交换类、插入类、选择类
- 树、二叉树、图:深度优先(DFS)、广度优先(BFS)
- 递归
- 分治
- 滑窗
- 三大牛逼算法:回溯、贪心、动态规划(DP)
怎么学?
最好或者最笨的方法就是刷题,强烈推荐力扣:https://leetcode-cn.com
建议刷300题以上,要覆盖简单、中等、困难的题目。面试前要训练手感,不要生疏了,可以选保持每日或几日一题。
在刷题之前我建议你看一些书:
《漫画算法-小灰的算法之旅》
《剑指 offer》
《labuladong的算法小抄》
《算法导论》
《数据结构与算法之美》
《算法面试通关40讲》
leetcode、书和极客专栏可以并行,学练结合,不要光看不练哦。
- 学习资源网站列表汇总
- 学习中常见的问题
(三)计算机网络部分
科班出身的同学对《计算机网络》和《操作系统》这两门课应该不会陌生,至于掌握了多少,你懂得,都是在考前一两周突击学习的,哈哈。
现在大公司对于应届生的要求越来越高,计网和操作系统这两门课是必考的。那些拿了 SSSP Offer 的大牛计算机基础都非常扎实。
(1)计算机网络
学什么?
计算网络的协议非常非常多,很多同学学完都一头雾水,或者仅仅懂一点 HTTP,但是真正要掌握的东西可不少:
- OSI 七层模型、TCP/IP五层模型
- 常见网络协议:HTTP、TCP/IP、UDP
- 网络安全:非对称加密、数字签名、数字证书
- 网络攻击:DDOS、XSS、CSRF 跨域攻击
怎么学?
计算机网络面试有一道非常经典的面试题:说说你从URL输入到最终页面展现的过程。这一题可以覆盖大部分计网的知识点,可以从 DNS 解析到 HTTP、TCP/IP协议、物理层协议,一直到浏览器渲染页面,你技术功底有多深你就可以聊多深。希望大家学完了也能试着回答一下这个问题。
推荐几本倍受好评的书:
《网络是怎么连接的》
这本书是一本日本作者写的。文章围绕着在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,图文并茂生动有趣,非常推荐!
《图解 HTTP》
也是一名日本作者写的。这本书对 HTTP 协议进行了全面系统的介绍,列举了很多常见通信场景及实战案例,相信读完会有恍然大悟的感觉。书很薄,几天就可以读完,强烈推荐!
《TCP/IP详解卷1:协议》
计算机网络的经典教材, 大部头书籍,很难啃。建议挑重点看。
最后安利一款工具,学习网络必备的抓包神奇:wireshark,如果你学网络没抓过包,那基本等于白学了(有点严重)。
(2)操作系统
学什么?
Java 学习者这部分的要求可以稍微放低,但是你如果是搞 C++的,那这部分可是你的重点。
- 进程和线程的区别
- 进程间的通信方式:共享内存、管道、消息
- 内存管理、虚拟内存
- 死锁检测和避免
怎么学?
想要精通操作系统难度非常大,但是在面试中你要能讲出一些具体的操作系统知识,面试官会对你刮目相看。
推荐一些视频学习资料:
B 站:
麻省理工 MIT 6.828(无字幕):https://www.bilibili.com/video/BV1px411E7ST
操作系统(哈工大李治军老师)32讲(全)超清:https://www.bilibili.com/video/BV1d4411v7u7
推荐书籍资料:
《深入理解计算机系统 CSAPP》
赫赫有名的 CSAPP,全称:Computer Systems:A Programmer‘s Perspective。科班同学的圣经,哈哈,黑色大部头书籍,难啃。
《现代操作系统 (第3版)》
操作系统领域的经典之作,因为是翻译过来的,遇到比较晦涩的先跳过,多读几遍才能消化。
(四)设计模式部分
学什么?
面试的时候有可能会问到。所以设计模式的理论知识我们还是要打好基础,需要掌握这些知识点:
- 设计模式的六大原则:单一职责、里氏替换、依赖倒置、接口隔离、迪米特法则、开闭原则
- UML 基础知识
- 设计模式三大分类:创建型、结构型、行为型
- 常用设计模式基本原理
经典设计模式总共有23种(现在远不止23种了,还有一些变种),全部掌握难度太大了,我们只需要掌握一些常用的就好了,必须要掌握的我用小红旗已经标出来了。
怎么学?
网上关于设计模式的学习资料非常多,质量也是参差不齐,大家找的时候可要擦亮眼睛。
在看书之前我还是推荐你熟悉一下 UML 的理论知识,因为你如果不懂 UML 那任何一本设计模式的书你都可能读不下去, UML 是设计模式的前提。
UML 学习网站:
https://www.w3cschool.cn/uml_tutorial/
不要花太多时间学习 UML,简单理解入门即可。
假设你已经入门 UML 了,那下面的这些书你可以考虑学习一下了:
《Head First 设计模式》
Head First 是一个比较经典的系列丛书,有些人非常喜欢这种风格。这本书讲枯燥的设计概念讲解的生动有趣,作为一本入手书非常值得推荐。
《大话设计模式》
大话系列是国内非常经典的系列丛书,有众多粉丝。这本大话设计模式以对话的形式讲解知识,在当时可开创了先河。虽然书中有些例子比较牵强,但任然不失为一本入门的好书。
《图解设计模式》
图解系列是日本的一位作者写的,有一本图解 HTTP 非常经典,这本图解设计模式也是类似的风格。由于是翻译过来的,书中有些例子可能听起来比较奇怪,貌似翻译过来的技术书都有这个问题。
《设计模式-可复用面向对象软件的基础》
又是一本黑色大部头书,书的作者就是 GoF,大家都说经典。但是呢,经典归经典,读起来真的是晦涩难懂,对新人非常不优化,如果你想入门学习设计模式,这本书就不推荐了。不推荐为什么要说出来?经典的书如果不提,你们又要说我菜。(害)
这几本书都要看吗?当然不是,如果你是在准备面试,我个人建议是读其中一本就够了。至于说看哪一本,你可以找对应的电子书,挑一个章节试读一下,符合你的胃口就选择这一本继续读下去。
如果你已经有几年的编码经验,又想把代码写好,建议你多挑基本读读,吸收每本书的精华。
(五)复习建议
合理安排复习时间。准备春招不用太紧张,也不用废寝忘食,只要好好做足准备,就可以坦然应对面试了。
复习周期个人建议是三个月,不宜太久,每天四五个小时(以上)就可以了(高效率专注的学习),久了就容易懈怠或者闭门造车,两个多月的时候最好出去开始试水,检验一下自己的学习效果。
复习计划的制定和进度的把控也很重要,可以参考别人的学习计划去学习,再根据自己的实际情况去做适当的调整。
除了刷题和看书,系统的复习一下基础知识,还有就是复盘下自己的项目经历,把亮点都发掘出来。在多如牛毛的简历中,一份简历能不能给面试官留下深刻的印象就看你的简历有没有亮点,这些亮点是可以从你的项目中看出来的。
项目相关准备可以参考一下上面说过的一篇文章:项目经验不会说?字节跳动小姐姐手把手教你"套路"面试官!
三、学习资源网站列表汇总
(1)Github
- Android 知识地图(推荐):https://github.com/xieyuliang/Note-Android
(2)阿里P7大佬整理Android核心知识点整理(3382页,超级详细)
(3)视频网站
(4)专栏
- 极客时间(推荐):https://time.geekbang.org/
- Gitchat https://gitbook.cn/
(5)技术博客:
- CSDN 博客:https://blog.csdn.net/
- 博客园:https://www.cnblogs.com/
- 掘金社区(推荐):https://juejin.cn/
- InfoQ:https://xie.infoq.cn/
- 思否:https://segmentfault.com/
- 开源中国:https://www.oschina.net/blog
(6)搜索引擎:
(7)刷题:
最后
文中推荐的书并不是要求全部看完,每本书的侧重点都不一样,大家要学会挑重点看。
在学习的过程中,或许会出现学了就忘的问题这时候就要考验我们的毅力了:坚持重复学习,不断加深印象。觉得一个人学习很孤独,想相互鼓励互相促进的朋友也可以加入我们的两千人学习交流圈。
668350995 (这是群号)
由于篇幅有限,我把更多详细的面试题及答案整理成了PDF文件,有需要的朋友可以通过点击下面蓝色字体找我免费领取。
最后在这里,希望大家可以好好利用上面准备,在接下来的面试中大展拳脚,一举拿下心仪的offer。
需要的可以通过戳这里的蓝色字体找我免费领取。