不过当时还没有现在这么内卷,所以我在大四秋招刚开始就找到工作了。
行业现状
========
程序员现状
=========
由于程序员的薪水比较高,最近几年有很多其他专业的人涌进了程序员行业,加速了这个行业的内卷,但是据某招聘网上的数据统计,程序员当前的需求量还是远高于全行业的平均线的。所以,程序员的现状我觉得是不错的,至少几年内是无需担心的。
Java 现状
最近几年,Go、Python 等语言快速崛起,大有挑战 Java 地位的趋势,但是 Java 毋庸置疑仍是当前互联网行业里招聘需求量最大的。
众多大厂:阿里、美团、快手、拼多多、滴滴、网易等,都是以 Java 为公司的主语言,部分大厂:腾讯、百度、字节等,虽然以其他语言为主语言,但是多多少少也会有一些 Java 岗。
所以,Java 的现状及未来,我觉得都是比较不错的。岗位多也代表着机会多,对于新人来说比较友好,所以我个人是比较推荐新人学 Java 的。
自学前你应该知道
============
自学前请做好心理准备,自学是一个既寂寞又漫长的过程,如果想踏进来,请做好放弃几乎所有娱乐生活的准备,包括过年的时候。如果只是抱着三天打鱼两天晒网的态度,那我建议还是放弃吧。
但是如果你能坚持下来,我相信一定能有所回报,我自己就是个例子,我走了那么多弯路,跟着本文走,你们没理由比我当时更差。
自学预估周期
==========
自学的周期我给大家定了一个参考时间:6个月,平均每天6-8小时,共1200个小时左右,大致安排:
1、3个月基础知识学习和强化。
2、2个月 SSM 项目实战反复练习,项目实战同时也在复习和巩固之前的基础知识。
3、1个月面试高频题准备,看面试题其实也会增加自己的专业知识,而且可能比你想象的要多,不夸张的说,前几年我从面试题里学到的知识可能比工作里获得的还多。
自学教程获取
==========
授人以鱼不如授人以渔,一个简单又靠谱的的教程获取方式:B站搜索关键字+教程,例如:Java零基础教程视频、JDBC教程、MySQL基础教程、JavaWeb视频教程、SSM整合教程、Java项目实战等等,然后按“最多点击”排序,在前几个里寻找一个合适的即可,一般点击高的都是质量还可以的。
如果你想要学习Java的话,我给你分享一些Java的学习资料,你不用浪费时间到处搜了,从Java入门到精通的资料我都给你整理好了,这些资料都是我做Java这几年整理的Java最新学习路线,Java笔试题,Java面试题,Java零基础到精通视频课程,Java开发工具,Java练手项目,Java电子书,Java学习笔记,PDF文档教程,Java程序员面经,Java求职简历模板等,这些资料对你接下来学习Java一定会带来非常大的帮助,每个Java初学者都必备,请你进我的**Java技术qq交流群**自行下载,所有资料都在群文件里,进去要跟大家多交流学习哦。
很重要的建议
==========
1、爱因斯坦的成功公式:成功 = 效率 * 时间,自学也一样,需要劳逸结合,不要搞的太累,否则效率下降,花再多时间也没用。
2、自学是一个漫长的过程,循序渐进、保持耐心,如果可以,找个伴一起学习,互相鼓励,互相交流,可以让自己更有动力坚持下去。
3、将自己的学习过程记录下来,当你发现累计的越来越多的时候,心里会有一种小成就感,这会提高你学习的动力。
4、专注于重点知识的学习,本文介绍的基本涵盖了当前你应该学习的内容,没有提到的大部分是没那么重要的,如果你无法判断是否重要,可以在本文下面留言,我会一一解答,至于像一些什么:k8s、hadoop、hbase 等等,看都别看,对于当前的你来说只是浪费时间。
5、利用好搜索引擎,有什么问题就百度,新手大部分的问题百度都能解决。
6、看视频不要看书,当前阶段的你看任何书,包括大名鼎鼎的《Java编程思想》都是浪费时间。
7、看视频要跟着敲一遍甚至多遍,如果只看视频不跟着敲,你会发现最后啥都学不会。
8、视频中一些介绍历史的视频可以过一遍简单了解就行,节省点时间。
9、关于视频教程的选取:选择近2~3年的教程,讲师让自己听着舒服即可,点击高的视频水平基本差不多。
10、不懂的知识可以反复看,例如同一个知识点有两套教程,看完第一个没完全理解,可以再看第二个,加深印象,也可以查些资料帮助理解。
自学知识点
=========
1、Java SE
=============
1.1、Java基础
基础概念/语法:面向对象(继承、封装、多态)基础、包、类、接口、方法、对象、属性、第一个 Java 程序。
数据类型:1)基本数据类型8种:byte、short、int、long、float、double、char、boolean;2)引用数据类型
变量类型:局部变量、实例变量(成员变量)、类变量(静态变量)
修饰符:public、private、不写、protected、static、final、abstract、synchronized ,volatile
运算符:1)算术运算符:+、-、*、/、%、++、–;2)关系运算符:==、!=、>、<、>=、<=;3)逻辑运算符:&&、||、!;4)赋值运算符:=、+=、-=、*=、/=;5)条件运算符:Object x = (expression) ? value if true : value if false;
循环结构:for 循环、while 循环、do…while 循环
条件语句:if…else、if…else if…else
异常处理:try…catch…finally、throws、throw
字符串:String、StringBuilder、StringBuffer
其他:switch case、数组、日期时间、枚举、使用 IDE 进行 DEBUG
1.2、集合
Map:HashMap(最重要)、ConcurrentHashMap、TreeMap、Hashtable
List:ArrayList(最重要)、LinkedList
Set:HashSet(最重要)、TreeSet
1.3、多线程
线程生命周期
创建线程的三种方式:继承 Thread、实现 Runnable;实现 Callable
ThreadPoolExecutor(线程池)
锁:synchronized 和 Lock
1.4、I/O流
1.5、网络编程
1.6、反射
1.7、泛型
1.8、注解
小结:
1、该阶段很重要,建议至少看两套不同的教程。由于每个老师的观点都会有一些片面性,当遇到疑惑的时候,可以看看其他老师的理解,可能就想通了。
2、看第一遍时会比较慢,第二遍会快一点,已经掌握的知识可以快速带过。
3、有疑问的知识多看几遍,也可以网上看点博文辅助理解,实在看不懂的可以先记下来,后面学到一定程度可能就理解了。
4、对于重点知识,可以做笔记来加深自己的理解,也方便后续自己复习。
5、Java基础、集合、多线程是核心中的核心。
章节目标:熟练掌握该章节所列的所有 Java 核心基础知识,能熟练的编写 Java 程序。
2、SQL
=========
2.1、SQL
1)了解基础概念;2)掌握 DML 语句的使用:SELECT、UPDATE、INSERT 和 DELETE;3)掌握 DDL 语句的使用:操作表时用到的一些SQL语句。例如:CREATE、ALTER、DROP等。
2.2、JDBC
掌握基本的使用。
2.3、MySQL
掌握基本的使用。
章节目标:熟练掌握SQL语句的基础使用,了解JDBC和MySQL的基础使用。
3、Java Web
==============
3.1、偏前端内容
HTML、CSS、JS(JavaScript)、Ajax、jQuery
3.2、偏后端内容
Servlet、JSP、Request、Response、HTTP、Session、Cookie、Filter、Listener
Java Web初级内容的相关技术在当前 Java 后端已经比较少直接使用到了,最近几年的 Java 程序员甚至可能都没接触过。大部分是被下一节的 SSM 框架给封装代替掉了,但是这一章节初学者还是有必要认真学习一下,做到能看得懂、能照着改。
章节目标:了解该章节所涉及的知识,做到能看得懂、能照着改。对于 Servlet 可以稍微多留意一下,Servlet 是本章节比较重要的知识。
4、常用工具
==========
4.1、Tomcat
Web 应用服务器。
4.2、Maven
项目构建管理,简单理解为用于导入 Jar 依赖的工具。
4.3、Git
分布式版本控制系统,简单理解为代码管理工具。
章节目标:需要知道有这么些工具,然后掌握其基本的使用即可。
5、核心框架
==========
5.1、Spring
1)掌握基本的使用;2)掌握核心概念,需重点注意的知识点:IoC(控制翻转)、DI(依赖注入)、AOP(面向切面编程)、事务控制。
5.2、SpringMVC
1)掌握基本的使用;2)掌握核心概念,需重点注意的知识点:MVC 架构、Controller 里的各种注解、一个 HTTP 请求的流程。
5.3、MyBatis
1)掌握基本的使用;2)掌握核心概念,需重点注意的知识点:XML 文件力的 SQL 语法、接口(interface)和 SQL 的映射。
5.4、Spring Boot
掌握基本的使用。
章节目标:了解 SSM 框架的基本使用,该阶段可以不用做到完全理解,可以在项目实战里去通过实际的例子加深自己对 SSM 的理解。
6、项目实战
==========
准备 2~3个项目实战,将之前所学的知识点应用起来,做出一个真正的项目(网站)。学习的项目必须使用 SSM 框架,加深自己对 SSM 的理解。该阶段所做的项目,也是未来写在你简历里的“项目经验”,需要跟着敲一遍。
目标:将之前所学知识串联起来,熟练掌握一个 Web 项目的完整流程,通过项目加深对之前所学知识的理解,特别是 SSM 框架知识。
7、面试准备
==========
如果对于上述的 Java 基础知识你已经能熟练使用,然后也能熟练搭建一个简单的 SSM 的项目。那我建议你可以将时间多花在面试准备这一章节上,面试准备的重要程度可能超过很多人的想象。同时在看面试题的过程中也能加深自己对之前知识的认知。
7.1、重点内容
-
Java 基础高频面试题
-
集合高频面试题,重点:HashMap
-
多线程高频面试题,重点: synchronized、线程池
-
MySQL高频面试题,重点:索引、锁
-
Spring/SpringMVC/MyBatis高频面试题,重点:Spring
-
SSM 实战项目
该模块对应我们上面学习的知识,但是只会使用是很难满足当前的面试要求的,因此需要针对这些知识进行面试强化,具体的题目可以看下我的面试系列文章。
7.2、进阶内容
-
JVM
-
Redis
-
Kafka
-
Zookeeper
-
Dubbo
-
算法:常见的算法,二分、排序等,可以刷剑指offer的题目
-
设计模式:可以主要看下单例模式
你可能会有疑问,为什么进阶里列的知识点都是之前上面没有提过的,还需要准备面试题。之所以补充进阶部分,主要是为了应对当前互联网行业内卷越来越严重的现象,这几个知识点都是当前 Java 面试的高频考点,但是要像前面的基础知识一样,系统的学习这些知识对于初学者当前阶段来说基本不太可能,所以一个比较合适的方式是直接看高频面试题,然后将高频面试题带着理解记下来。
章节目标:各个知识点的高频面试题熟记于心,尽量做到理解,不能理解就先硬背。
面试真题可以参考我的文章:
常见问题
========
1、自学时遇到不懂的知识怎么办?
答:百度/谷歌找答案,初学者遇到的问题基本百度上都能找得到,多利用搜索引擎,锻炼自己的解决问题的能力,这个能力会贯穿你的整个程序员生涯。
2、普通人按本文自学后能达到什么程度?
答:如果你确实很努力的花了超过1000个小时,按本文的路线去学习,掌握了本文所介绍的知识,那我相信你找个工作是不难的。
3、在网上看到有人自学6个月进 BAT?