无论你是大学生还是在职人员,想学Java时,都会面临两个选择,自学或者报班。报班通常太费钱,时间又不自由;自学又不知道如何下手,担心自己坚持不下来。怎么办呢?
本文将解答你自学Java的N种问题:
- 你适不适合自学Java呢?
- 如何自学Java呢?
- 有没有靠谱的Java自学资料推荐?
- 怎样让自己看到进步,坚持下来?
- ……
以上问题,课程中我都会呕心给你梳理答案,赶快开始学习吧。
什么人适合自学Java
在自学前你可能会因为自身的条件有很多困惑和疑虑,不清楚自己是否适合自学Java。下面我们来做个测验,来检测一下你是否适合自学Java。
第一道题:你对学习Java的信念有多强?
最低分0分,最高分5分,你给自己打几分?
对学习Java抱有坚定的信念是学习Java的必备条件,如果你给自己的打分小于等于2.5分,建议你直接放弃学习Java吧。如果你给自己的打分大于2.5分(越高越好),恭喜你,第一关的考验过了!
第二道题:你学Java的目的是兴趣提升 or 就业?
如果你学习Java只是兴趣提升,那么你无论是自学或者报班怎么学都是适合的,因为你不差时间。那么后面的考验题你也可以直接跳过,看后面的干货。
但如果你是为了就业而学习Java,那对学习Java效果和时间都有一定要求,还要满足社会岗位要求。建议你好好考虑报班还是自学。
如果你大于30岁的话,我已经不推荐你学习Java了,一方面30岁后学习能力和精力堪忧,另一方面30岁的Java初级小白几乎找不到工作。
但如果你小于30岁的话,那你的客观条件还是可以学习Java的。剩下的就要考验你的自控力和毅力了。
第三道题:最低分0分,最高分5分,你给自己的自控力和毅力打几分?
如果你的打分小于3分,我建议你报班学习Java,自学不适合你。(如果你不能确定自己的自控力水平,你也可以去网上找一些自控力测试的问卷。)
但如果你自控力较强、个人时间较多、热爱独立思考钻研的话,那么恭喜你,我认为你是非常适合自学的。如果你也选择自学,那么本课程的内容你可以好好学习借鉴,相信你一定可以找到一条适合自己的道路!
最后你也许会问,性别、英语水平、数学水平、是否为科班等是否影响自学Java,如果你上面的测试都通过了,这些其实都是一些非关键性的影响因素。
我们用一张图总结一下以上的所有问题:
虽然性别、英语水平、数学水平、是否为计算机专业都等不是关键因素,但当你是女孩子,英语、数学水平较差,非计算机专业相对于男孩子,英语、数学水平较好的计算机专业还是会有一些影响,为了达到同样的结果可能需要付出更多的努力。
我们这里拿计算机专业和非计算机专业比较一下。
计算机专业和非计算机专业自学Java的区别?
虽然说计算机主要靠自学,但是计算机专业的学生相比非计算机还是有很大优势的,大部分计算机专业是有开设Java这门课程的,可以让这些学生在学习Java的道路上快速度过"冷启动";还有一些重要的基础课,例如数据结构、操作系统、数据库、计算机网络等课程能够帮助学生更深入地了解计算机,学习起Java语言也能有更深层次地理解。
而非计算机专业在自学Java时,会因为有原专业课程、作业的限制,学习时间相比计算机专业学生少了不少,但这些问题是可以被克服解决的,可以多花一些课余时间、周末时间,学习练习Java,也可蹭一蹭计算机专业开设的Java课程,多与计算机相关专业同学交流碰撞。自学Java的心态也很重要,不要因为被本专业课程拖累而埋怨,要乐观地去面对学习上的困难,有长远的眼光,阳光总在风雨后!
总的来说,计算机专业自学Java资源、时间更多,更需注重自学的方法和内容;而非计算机条件较难,除注重方法和内容之外,重要的是要坚持在百忙之中挤出很多时间留给Java,这对毅力是非常大的考验。
当你适合自学的时候,那么你就要寻求好的方法提高自学Java的效率,如何做呢?看看下面内容吧~
高效自学Java三大关键点
这里我总结了三大点,分别从认识、方法、反馈角度来写,其中一定有适合你的方案!
1 了解Java知识体系
自学Java前,要对Java和Java体系知识有一定认识,心中有个大概的轮廓去学习,方能更踏实。通过几个问题了解Java。
什么是Java?
Java是一种可以撰写跨平台应用程序的、面向对象的程序设计语言。简单说,Java就是一种语言,不过是一种跑在JVM上的语言,Java编译后是字节码,而JVM会把这些字节码解释成机器码,然后做出相应的动作。
Java能干什么?
Java当前用的较多的就是做后端开发、大数据开发、安卓开发,这是当前Java技术栈较为热门的三种岗位,其中以Java后端的市场需求最大。Java也可以做桌面应用开发、游戏开发,但需求相对较少。
国内大厂,像阿里巴巴、美团、京东、拼多多等,使用的主要语言都是Java,大部分中小企业为了成熟稳定也选择Java作为后端开发语言。此外,很多著名的中间件是由Java编写的,例如:Elasticsearch、RocketMQ、Hadoop等。
Java有哪些知识?
一、Java基础
Java入门部分:
JDK、IDEA安装,第一个HelloWorld
基础内容:输入输出、命名规范、注释
数据类型:基础数据类型(及其包装类)、引用类型
修饰符:访问修饰符、非访问修饰符
运算符:赋值、算数、自增自减、比较、逻辑、位、三元运算符及其优先级
控制流程:条件判断、循环语句
数组、字符型
类与对象
面向对象三大特征:继承、封装、多态
日期、正则、大数运算(简单了解)
Java进阶部分:
IO常见文件操作
集合框架:ArrayList、LinkedList、HashMap、HashSet、ArrayDeque等
异常处理
泛型
JDBC
网络编程
Java8新特性(Lambda)
反射、注解(有点难)
二、Java高级
多线程、高并发
23种设计模式
树、红黑树、B树、散列、堆、图等
算法:十大排序、二分查找、分治、贪心算法、位运算、回溯、动态规划、搜索算法(bfs、dfs)、最短路径(Dijkstra、Floyd)、最小生成树(Prim、Kruskal)、并查集、KMP等算法
三、JavaWeb:
HTML、JavaScript、CSS
XML、JSON
Tomcat
Servlet/JSP(以Servlet为主)
JQuery、Ajax
MVC
Cookie、Session
过滤器、监听器
文件上传下载(Servlet3.0)
Linux
四、常见框架:
ORM框架:Mybatis
Spring全家桶:Spring、SpringMVC、SpringBoot
安全框架:Shiro、Spring Security(可选一种先学)
其他框架:Swagger(在线接口)、Log4j2(日志)、Quartz(定时)等
微服务:SpringCloud、Dubbo等
五、常见中间件和工具:
版本控制:Git、SVN
包管理:Maven、Gradle
关系型数据库:MySQL、Oracle等
非关系型数据库:Redis(缓存)、Memcached(缓存)、MongoDB(文档型)等
搜索引擎:Elasticsearch、Solr等
消息队列:RocketMQ、ActiveMQ、RabbitMQ、Kafka等
Web服务器:Apache、 Nginx
容器:Docker、K8S
大数据:Hadoop、Spark、Strom、Flink等
当然,上面只是罗列了大部分知识点,还有很多知识比如日志分析监控(ELK)、持续集成、分库分表等也都是热门技术,Java后端技术体系庞大。这些内容可以根据你的工作或者兴趣,选择性深入学习。
2 自学Java的三大途径—书籍、视频、博客
自学Java一般有书籍、视频、博客等学习资料,这里主要讲解三者在自学Java中的异同点。
看书自学Java
看书是最为传统的学习方式,我们从小到大大部分的自学知识是通过看书来获得的,所以可能很多人都喜欢和适应这种方式。书籍具有严谨、体系完整等特点,并且纸质的内容来回翻阅在回顾的时候也更便捷。
但看书也有一些缺点:可能分不清主次,在学习Java的时候其实是有侧重点的,而书上可能在这方面并不会有太多的介绍和标注,并且一些冷门淘汰知识可以不用学习(例如Java Swing部分);有些内容即使作者写得很棒了,但可能会因为案例、解释较少不能完全理解(尤其是小白)。
看视频自学Java
比起书籍,更多人愿意看视频自学Java,因为看书时大部分人会觉得比较枯燥。但是视频就不一样了,视频中老师们通常会边敲边讲解,更易于知识点的理解,并且人是感性动物,看视频就如同与老师交流,好的老师会让学习效率直接翻倍。
看视频当然也会有些缺点,视频时间较长较多,很难快速回顾学过的知识或者快速浏览章节内容。
看博客自学Java
博客是程序员必不可少的学习资源,近些年高质量博客、文章也越来越多。这种博客文章阅读比较方便,内容选择也比较丰富,好的博客图文并茂生动形象非常有助于理解记忆,并且博客在代码拷贝学习方面更占优势。
看博客也有一些缺点:比如博客比较碎片化,体系不太完整。还有博客质量参差不齐差距较大,甚至有的博客还出现较大的错误,所以挑选好的博客是一大挑战。
总的来说,系统自学Java主力军还是 看视频和看书 ,可以以看视频为主,看书为辅,遇到疑难点不理解的可以通过搜索相关博客多看文章进行学习吸收。
3 回顾与交流,牢牢锁住知识点
学习很容易遗忘,因此要时常回顾。不推荐视频作为长期回顾的方法,更推荐博客、纸质书回顾,因为它们可以快速定位,很多内容看一遍就想起来了。
除了回顾以外,交流可能是另一种锁住知识的好方法了,通过交流倾听别人的意见,能深入思考,加深对知识的理解。交流的方式和途径有很多
和身边人交流:最方便和高效的交流方式就是和身边同学、舍友、一起学习的人进行交流,一起学习进步共享学习的心得;
社群论坛交流:最大众化的就是添加一些技术交流群或者在一些问答论坛交流,群中或者论坛中会有不少大神或者志同道合的人能够帮到你。作为技术人加几个技术社群、多逛技术论坛还是很有必要的。
当然还有一种方式并不一定适合所有人,就是和"自己"交流,将自己的学习内容重难点以笔记、文章形式输出出来,虽然这会耗费大量精力和时间,但这不断思考、优化、写的过程会使你对知识印象更深刻。
史上最实用的Java学习路径
上面已经介绍了高效自学Java的关键点,下面来推荐实用的Java自学路径。
实际上,阿里巴巴发展也离不开公司里的每一个付出的员工们,更值得一提的是阿里的程序员们除了完成自己的本分工作以外,还会抽出时间去总结自己的技术。近日,阿里迎来一里程碑,首推Java架构技术成长笔记,理论与实战兼备,被业内评级“钻石级”,可以说是程序员必备!
> 下文内容主要是写这份《Java技术成长笔记》的主要提纲内容,提纲内容包括Xmind思维图+实战文档+面试礼包,需要下载完整版的朋友,可以 [点击此处](https://docs.qq.com/doc/DVE5DZmNJV3BuckVU) 免费获取并下载。
一、架构筑基必备技能
1.并发编程进阶:
线程共享和协作+并发工具类实战+站在巨人肩上操作CAS+阿里面试常问的显式锁和AQS+并发容器源码解析及应用实战+仅会用线程池是不够的+架构师应该知道的并发安全解决方案+性能优化实战+并发编程面试题目汇集
2.JVM性能深度调优:
15种方式编写高效优雅Java程序实战+Java内存区域深入剖析+垃圾回收器和内存分配策略+你必须知道的JVM执行子系统+JVM的类加载机制及执行引擎原理+JVM性能优化实战+JVM面试锦囊妙计
3.网络编程与高效IO:
http/tcp/udp网络协议原理透析+原生JDK网络编程+Netty应用快速入门+Netty粘包/半包问题解决实战+Netty进阶和实战+Netty源码深入分析+Netty常被问到的那些面试题汇集
4.深入Tomcat底层:10分钟熟悉Tomcat体系架构+Tomcat容器及运用机制+Tomcat核心组件源码解读+Tomcat高级进阶+Tomcat面试题整理
5.MySQL深度优化:Mysql存储引擎选型及注意事项+解读Mysql的共享锁及排它锁+Mysql事务及隔离性级别+30分钟深入掌握执行计划+解读BTree与B+Tree索引+Sql慢查询配置及分析+Sql优化策略及实战+Mysql面试题汇总
6.架构筑基必备Linux:Linux安装指南+Linux基础命令+用户与用户组系列操作+文件与权限系列操作+架构师应该掌握的shell脚本基础
二、设计思想解读开源框架
1.六大原则:单一职责原+开闭原则+里氏替换原则+依赖倒置原则+接口隔离原则+迪米特法则
2.结构型模式:桥接模式+适配器模式+装饰器模式+代理模式+组合模式
3.创建型模式:建造者模式+单例模式+抽象工厂模式+工厂方法模式+静态工厂模式
4.行为型模式:模板方法模式+策略模式+观察者模式+责任链模式+命令模式+访问者模式
5.Spring5源码解读:5分钟快速理解Spring核心流程+熟练掌握Spring工作常用注解及陷阱+后置处理源码解读+IOC容器源码解读+AOP源码解读+声明式事务源码解读+Spring源码面试题汇总
6.SpringMVC框架源码解读:Servlet3.0+性能实战+手写SpringMVC实战
7.MyBatis框架源码解读:5分钟掌握MyBatis的配置使用+动态SQL、缓存及关联查询深入讲解+10分钟掌握Mybatis与Spring的集成实战+Mybatis插件开发及源码分析实战+多级关联实战+手写MyBatis框架实战+Mybatis常见面试题汇集
三、高效存储让项目性能起飞
1.Redis:5分钟搞定Linux下Redis安装+String、List、Hash、Set、Zset类型使用场景+时间轴、队列应用场景设计实战+购物车开发与设计实战+Redis与Lua模拟抢红包实战+网站投票设计与开发实战+Lua+Redis联合开发指南+Redis慢操作优化+Redis哨兵机制及底层机制分析+10分钟搭建Redis高可用集群实战+动态扩容、缩减集群节点实战+Redis常见面试题汇总
2.缓存解决方案实战:15分钟掌握项目中SpringCache的用法+缓存的一致性策略(更新及失效处理机制)+缓存雪崩解决方案+缓存穿透方案
3.mongoDB:Mongodb使用场景分析+20分钟玩转增删改查+MongoDB开发时你应该注意的事项+安全设置及存储引擎分析指南+性能调优与索引实战+复制架构解析实战+MongoDB分区实战
4.MySQL高可用:Mysql主从复制、读写分离高可用方案实战+Mysql、Keepalived实现双主高可用方案实战+Mysql实现分库分表高性能解决方案实战
5.Mycat:Mycat简介及用途+基于Mycat实现Mysql读写分离实战+基于Mycat实现数据库切分实战+全局表、ER表、分片机制分析
6.Sharding-Sphere:Sharding-JDBC+Sharding-Proxy
7.Fastdfs:文件存储实战+文件同步实战+文件查询实战+分布式部署实战
四、分布式拓展到微服务架构
1.从RPC开始:服务注册与发布+动态代理+序列化与反射+手写RPC框架实战
2.DUBBO:10分钟学会Dubbo使用+项目之间的依赖划分实战+传统项目拆解分布式实战+Dubbo spi 扩展实战+Dubbo源码深度解读+Dubbo面试题指南
3.Spring Boot:SpringBoot快速入门+核心组件分析+性能优化+jta+atomikos分布式事务+SpringBoot核心源码解读+手写SpringBoot实战+SpringBoot面试汇总
4.Spirng Cloud Netflix:Zuul路由网关详解及源码探析+Ribbon客户端负载均衡原理与算法详解+Feign声明式服务调用方式实现+Hystrix服务熔断及服务降级实战+Eureka注册中心构件分析+Config配置服务中心与svn、git快速集成+BUS消息总线技术+Sleuth调用链路跟踪+Stream消息驱动的微服务+SpringCloud面试题目汇总
5.Spring Cloud Alibaba:Nacos+SkyWalking+Sentinel限流+Seata分布式事务
6.Docker:5分搞懂定Docker安装与使用+Docker的基础操作+Docker File快速进阶+Docker网络与存储那些事+DockerCompose高阶用法+微服务与Docker集成实现动态扩容实战
7.K8S(Kubernetes):Kubernetes简介及安装配置+Kubernetes核心原理+Kubernetes集群管理方案实战
8.Service Mesh:10分钟快速入门与介绍+核心组件解析+如何用Helm部署Istio+快速解析Istio的常用功能+Mixer适配器的应用+http流量管理实战+Istio的安全加固实战
五、性能直线提升
1.分布式架构思维:大型互联网架构演进过程+架构师应具备的分布式知识+主流分布式架构设计详解
2.ZooKeeper:5分钟搞定Zookeeper安装及指令解析+原生客户端、zkclient、curotor快速开发实战+Zookeeper应用实战+Zookeeper底层协议解读+Zookeeper面试资料整理
3.Nginx:5分钟将你的项目实现Nginx分流+Nginx安装及基本使用+Nginx进程模型及配置详解+location规则及rewrite解析+动静分离实战+反向代理实战+跨域配置实战+缓存配置及Gzip配置实战+https安全认证实战+LVS高可用实战+Nginx那些面试题汇总
4.消息中间件概述:消息中间件和RPC的区别+消息中间件使用场景介绍+ActiveMQ、RabbitMQ、RocketMQ、Kafka对比+消息中间件的编年史
5.ActiveMQ:3分钟快速安装ActiveMQ+JMS规范解读+原生ActiveMQ的API编程+ActiveMQ高级特性和用法+限时订单实战+用户注册的异步处理实战+企业级高可用集群部署实战
6.RabbitMQ:Linux下安装与配置+消息发布与消费权衡+消息的拒绝怎么解决+控制队列与消息属性+与Spring集成完成应用解耦实战+集群化与镜像队列实战+RabbitMQ常见面试题汇总
7.RocketMQ:RocketMQ快速安装与配置+消息发送与消费流程解读+RocketMQ消息存储、消息过滤及事务消息+RocketMQ高可用实战+整体Spring完成用户注册的异步处理实战+整合Spring完成限时订单实战+RocketMQ面试题汇集
8.Kafka:Kafka快速安装部署+开启Kafka的集群模式+Kafka的生产者和消费者+Kafka高级特性解读+Kafka处理请求的内部机制剖析+整合Spring完成削峰填谷实战+Kafka面试题汇集
9.elastic:ElasticSearch+Logstash+Kibana+ELK常见面试题汇总
六、分布式方案团队协作工具
1.分布式事务解决方案:事务与锁+标准分布式事务+两阶段提交+BASE理论与柔性事务+TCC方案+补偿性方案+异步确保型与最大努力型
2.单点登陆方案:单点登陆的问题背景+页面跨域问题+Session跨域共享方案+session的扩展
3.分布式任务调度方案:Quartz调度的用法+Elastic-Job示例+分布式调度的疑难点+Quartz集群定制化分布式调度
4.maven:安装和配置+使用入门+坐标和依赖+聚合与继承+生命周期与插件+仓库及版本管理+私服-Nexus+手写Maven插件实战
5.Jenkins:Jenkins远程测试+Jenkins持续部署+Jenkins自动部署+Jenkins分布式构建+Jenkins管理+Jekins安装
6.Git:与SVN对比+基本运作流程+Git常用操作及问题处理
七、架构师应该具备的职场软技能
每个程序员心中都有一个大厂梦,无论是阿里还是腾讯,对于程序员的技术要求都是比较高的,抛开学历不谈,你的技术水平是否达到了阿里的标准和要求?
所以,不管你是否想要进入大厂,或是想要拥有一份满意的薪资,都需要认真对待自己。以上这份Java技术成长笔记,可以 [点击此处](https://docs.qq.com/doc/DVE5DZmNJV3BuckVU) 免费获取并下载
Java自学常见疑难解答
在自学Java前或者自学中你会不会有这样的疑惑:
自学Java,学多久可以找到工作?
进大厂和进中小公司自学Java的侧重点有区别吗?
为什么学了那么久还只会“Hello World” ?
编程能力从什么时候开始突飞猛进?
以上选项无关对错,让我慢慢给你唠~
1 自学Java,学多久可以找到工作?
如果是小白的话,每天保证8小时以上的学习时间,达到Java初级程序员的水平最快也要6个月。前5个月正常学习Java技术,最后一个月准备简历以及面试。Java面试非常重要,要找一些面经将面试常考的问题搞明白。
2 进大厂和进中小公司自学Java的侧重点有区别吗?
大厂更重基础,需要你对学习的Java内容有透彻地理解,以及学习和理解数据结构与算法、操作系统、计算机网络、设计模式。而小厂更重项目和框架的使用。因此不同的定位,决定了在学习和面试准备的时候要有不同的侧重点。
还要提一点,大厂都注重编程能力,会笔试算法题,对应届生的要求更高,所以如果有条件的话一定要把剑指offer刷2-3遍,力扣最好能刷100题以上(学生的话刷200题以上)。
3 为什么学了那么久还只会“Hello World” ?
学那么久只会"Hello World"就是因为只看不练或者练少了。很多人在学习时眼高手低,不去敲代码或者只是copy一下执行,到后面碰到有难度的代码,就发现自己啥都不会。
解决这个问题一方面是学习途中遇到的案例都要动手敲;另一方面就是要刷题巩固,因为跟着案例,逻辑上还是有所依赖,但刷题时必须要自己充分思考才能通过。
所以自学Java,要一步一个脚印,每部分的案例都要动手去实现,并在实现的基础上去巩固和创新。
4 编程能力从什么时候开始突飞猛进?
编程能力的进步靠练习,一般突飞猛进会有两个阶段。
第一个突飞猛进就是学完Java基础部分。刷了100题左右,这时候遇到简单逻辑题都可以轻松解决,自己的逻辑能力、编程能力都有不错的提升,你会觉得自学Java这么久,努力没白费。
第二个突飞猛进的体会就是独立完成一两个项目的后端模块时。从搭建项目、到MVC分层编写业务逻辑代码会让学到的知识真正应用起来,自己会有点窃喜:哇,我自己也能写项目啦!这时候就是编程能力的第二次突飞猛进。
当然,后面可能也会因为一些其他原因让自己再次突飞猛进,但总的来说,想要突飞猛进,就要在短期内高强度学习、高强度敲代码。
文章总结
如果你觉得自己适合自学Java,必须要鼓足干劲一鼓作气!自学前先了解Java知识体系,掌握一些学习资源和方法,学习过程一定要多敲代码、多回顾交流。
IT界经常流传这么一句话:"talk is easy,show me the code"。自学Java,就是学会写代码,多多练习是非常非常重要的。之后的锦上添花是懂原理,但深入理解原理是一个任重而道远的过程。
加油吧后浪!