最近老是有粉丝私信我说感觉自己学java越来越难了,这其中有刚毕业的应届生说自己的技术找不到满意的工作,也有在学校的大学习说找不到学习方式,更多的是正在工作的java开发人员说是现在的技术更新太快,自己很难跟得上大厂的需求跳槽太难!针对粉丝跟我说的这些情况我为大家整理了java全栈的这一套学习路线,深入浅出,简单好学!满满的干货都放在下面了!
Java 入门 学什么?Java 语言从诞生到现在已经有20多年了,从Tiobe排行榜上来看,Java 语言常年霸榜经久不衰,所以不要怕学完 Java 后突然不流行了,至少这几年Java 就业机会非常多。
如果你有其他语言的基础,比如之前学过 C、C++等,那学起 Java 应该是非常容易的,也容易上手。如果你没有语言基础,又不想了解太底层的东西,那学 Java 还是不错的。至于说 python,光从语言层面上看,python 确实非常简单,估计你一周内就可以学会并且代码写的还不错,但是 Java 不一样,一周你只能简单了解一下语法,想写好代码几乎不可能。另外 Go 语言势头很猛,大家也可以关注一下。
一般来说 Java 入门你需要掌握下面这些知识点:
面向过程 VS 面向对象
面向对象基本特征:封装、继承、多态
访问控制符:private、default、protected、public
数据类型:基本类型、引用类型
控制流程:for、while、switch 等
序列化
异常处理(有点难度)
泛型(有点难度)
怎么学?如果你是零基础,建议你可以找一些 Java 入门的视频看一下,网上视频鱼龙混杂,大家注意甄别。推荐一个比较好的平台:B 站
不是让你去看二次元的,里面有很多学习资源。(嘿哈)
敲黑板啦:视频不要贪多,因为没有一个大牛是看视频看出来的。 看视频是别人将知识点往你脑袋里灌,最大的好处是能让你快速入门,如果你想学到更多,你需要的是自我学习,带有思考的自我学习。
计算机基础科班出身的同学对《计算机网络》和《操作系统》这两门课应该不会陌生,至于掌握了多少,你懂得,都是在考前一两周突击学习的,哈哈。
现在大公司对于应届生的要求越来越高,计网和操作系统这两门课是必考的。那些拿了 SSSP Offer 的大牛计算机基础都非常扎实。
学什么?计算网络的协议非常非常多,很多同学学完都一头雾水,或者仅仅懂一点 HTTP,但是真正要掌握的东西可不少:
OSI 七层模型、TCP/IP五层模型
常见网络协议:HTTP、TCP/IP、UDP
网络安全:非对称加密、数字签名、数字证书
网络攻击:DDOS、XSS、CSRF 跨域攻击
怎么学?计算机网络面试有一道非常经典的面试题:说说你从URL输入到最终页面展现的过程。这一题可以覆盖大部分计网的知识点,可以从 DNS 解析到 HTTP、TCP/IP协议、物理层协议,一直到浏览器渲染页面,你技术功底有多深你就可以聊多深。希望大家学完了也能试着回答一下这个问题。
数据结构和算法 学什么?有些同学可能要问了:我学 Java 的有必要学习算法吗?答案是:别无选择!
国内互联网面试的流程逐渐在向国外靠拢,像字节跳动、BAT 等大厂,手撕算法题已经成为了必选动作。
确实, Java 相对于 C、C++有着丰富的类库和三方框架,进入工作后大部分人都是在写业务代码,俗称 API boy 或者 Crud boy,算法看起来并不是那么重要,但是考算法真的是公司面试筛选人的低成本办法,如果你写出了算法并且通过了,要么你聪明要么你勤奋(刷题了)。
所以不管你是学什么语言:C、C++、python、Java、GO,算法这一关你必须得过。数据结构和算法的面试核心知识点我已经列出来了,大家可以参考学习,逐个击破。
栈与队列:先进先出、后进先出
线性链表
查找:顺序查找、二分查找
排序:交换类、插入类、选择类
树、二叉树、图:深度优先(DFS)、广度优先(BFS)
递归
分治
滑窗
三大牛逼算法:回溯、贪心、动态规划(DP)
怎么学?最好或者最笨的方法就是刷题,强烈推荐力扣
建议刷300题以上,要覆盖简单、中等、困难的题目。面试前要训练手感,不要生疏了,可以选保持每日或几日一题。
金庸小说中牛叉的武功太多了,综合性最强的还是九阳真经,九阴真经分为上、下两卷,上卷为内功基础,下卷为武功招式,这些都是极负盛名的武学秘籍。
那大家思考一下什么是武学秘籍?其实打开来开就是一些固定的招式,牢记这些招式并运用好就是绝顶高手了。
回到编程上来,除了要写干净的代码(clean code),还要运用各种设计模式使代码可读性强、扩展性好、松耦合,这便是大家经常说的编码大牛。
所以不管是学武功还是学编码,都是有一些固定的招式,也就是设计模式。
说到设计模式很多同学可能会跳出来:这个我知道,就是单例模式、工厂模式……
巴拉巴拉说了一堆,但是真正在写代码的时候又是一脸蒙:为什么我写的代码用不到设计模式?究其原因是你的代码经验不够。