拜托,学妹,别再问我怎么自学 Java 了!和盘托出

沉默王二

共 4787字,需浏览 10分钟

 ·

2020-10-01 10:27

假如有那么残酷的一天,我不小心喝错了一瓶药,一下子抹掉了我这十多年的编程经验,把我变成了一只小白。我想自学 Java,并且想要找到一份工作,我预计需要 6 个月的时间,前提条件是每天都处于高效率的学习状态当中,并且每天的学习时间至少在 12 个小时以上。

即便是这样,我敢肯定,找到的工作肯定不会太好,勉强能够维持生活吧,毕竟是零基础入门啊。

如果想更进一步,真正成为一名不可或缺的高级 Java 工程师,时间需要更久,两年、三年、五年,直到秃的那天。

想着想着,我就觉得有必要为那一天做点准备,以备不时之需。

(无中生妹。。。。。。)

01、第一个阶段,环境和工具准备

  • 准备一台电脑,要能联网

  • 下载、安装 JDK,配置 Java 开发环境

  • 下载、配置 Maven

  • 下载、安装 IntelliJ IDEA

  • 准备一个 GitHub 仓库(或者码云),管理 Java 源代码

Java 是一门计算机编程语言,学它的话,连台电脑都没有,学个屁。我有个亲戚家的孩子想学编程,就只看书,家里连台电脑都不配,说什么“先打好理论基础,再实操”,我真的是有点醉。

有了电脑,还得联网,自学的过程中肯定会遇到很多问题,遇到问题的时候先问搜索引擎,推荐谷歌和必应;实在没有答案的话,也可以来找我,申请加入技术交流群,问问群里面的大佬们。

既然要学 Java,JDK 是必须要先安装的,否则 Java 程序就没法编译和执行。

Maven 也是需要提前安装和配置的,因为后面进阶的话,需要一些练手项目,它们通常都需要 Maven 来加载第三方类库。

使用集成开发环境 IntelliJ IDEA 来敲 Java 代码吧,比 Eclipse 更流行。千万不要使用记事本编写源代码了,对于小白来说,时间是宝贵的,记事本只适合大牛们用来装逼,不适合小白用来编程(入门),纯浪费时间。

有了 IDEA,后面学习源码的话,就会方便很多,包括反编译字节码。

如果英语功底不太好的话,建议安装这两款 IDEA 插件:chinese 和 translation

如果注重编码规范的话,建议安装这两款 IDEA 插件:Alibaba 和 SonarLint

为什么还需要 GitHub 仓库或者码云仓库呢?它们可以用来在线云同步源代码,防止版本丢失。学到最后,还可以形成一套自己的工具库,轮子就有了,上班的时候工作效率就会高很多,能直接用的代码再也不用重新写了。

02、第二个阶段,Java 基础入门

1)基本数据类型

2)操作符

  • 算术运算符

  • 逻辑运算符

  • 比较运算符

3)流程控制语句

  • 条件分支(if/else/else if、三元运算符、switch

  • 循环或者遍历(for、while、do-while)

  • break 和 continue

4)包

  • 创建包

  • 导入包

  • 包全名

5)main 方法详解

  • public 关键字

  • static 关键字

  • void 关键字

  • main 方法

  • 字符串数组参数(String[] args

6)数组

7)注释

8)字符串

03、第三个阶段,Java 核心技术

1)面向对象

2)常用工具类

  • 字符串相关的工具类

  • 日期时间相关的工具类

  • 枚举

  • 随机数

  • 正则表达式

  • Apache-commons 工具库

  • Guava 工具库

3)集合框架

4)反射机制

  • 什么是反射?

  • 反射有什么用?

  • Class 类

5)异常处理

  • 为什么需要异常处理机制?

  • Error 和 Exception

  • try-catch-finally

  • try-with-resource

  • 自定义异常

  • 尽量捕获原始异常

  • 不要打印堆栈后再抛出异常

  • 不要用异常处理机制代替判断

  • 不要过早捕获异常

6)注解

  • 注解是什么?

  • 注解的生命周期

  • 注解装饰的目标

  • 自定义注解

  • 使用注解

7)IO 流

  • 字符流、字节流

  • 输入流、输出流

  • 同步、异步

  • 阻塞、非阻塞

  • BIO、NIO 和 AIO

  • NIO 2.0

8)序列化

  • 什么是序列化和反序列化

  • Java 如何实现序列化和反序列化

  • Serializbale 和 Externalizable

  • serialVersionUID

9)泛型

10)单元测试

  • Junit

  • TestNG

11)编码方式

  • ASCII

  • Unicode

  • UTF-8

  • GBK、GB2312

  • 如何解决乱码问题

12)并发编程

  • 什么是并发

  • 什么是并行

  • 什么是线程

  • 什么是进程

  • 线程的状态

  • 线程的优先级

  • 创建线程

  • 创建线程池

  • 什么是线程安全

  • 多级缓存和一致性问题

  • CPU 时间片和原子性问题

  • 指令重排和有序性问题

  • 线程安全和内存模型

  • happens-before

  • 可重入锁

  • 阻塞锁

  • 乐观锁

  • 悲观锁

  • 分布式锁

  • CAS

  • ABA

  • 偏向锁

  • 轻量级锁

  • 重量级锁

  • 自旋锁

  • 什么是死锁

  • 如果避免死锁

  • synchronized

  • volatile

  • ThreadLocal

  • Executors

  • CountDownLatch

  • Thread

  • Runnable

  • Callable

  • ReentrantLock

  • ReentrantReadWriteLock

  • Atomic 相关类

13)Java 8 新特性

14)源码阅读

  • String

  • Integer

  • ArrayList

  • LinkedList

  • CopyOnWriteArrayList

  • HashMap

  • TreeMap

  • LinkedHashMap

  • ConcurrentHashMap

  • CopyOnWriteArrayList

04、第四个阶段,Java 进阶升级

1)JVM

  • Java 内存结构

  • 垃圾回收

  • JVM 参数调优

  • Java 对象模型

  • HotSpot

  • 类加载机制

  • 编译和反编译

  • 反编译工具

  • JIT

  • 虚拟机性能监控和故障处理工具(jps、jstack、jmap、jstat、jconsole、javap)

2)性能优化

  • 使用单例

  • 使用线程池

  • 减少上下文切换

  • 减小锁粒度

  • 数据压缩

  • Stream 并行流

  • GC 调优

  • JVM 内存分配调优

  • btrace

3)设计模式

  • 设计模式的六大原则

  • 创建型设计模式(单例、抽象工厂、建造者、工厂、原型)

  • 结构型设计模式(适配器、桥接、装饰、组合、外观、享元、代理)

  • 行为型设计模式(模板方法、命令、迭代器、观察者、中介者、备忘录、解释器、状态、策略、责任链、访问者)

  • 单例的七种写法

4)数据结构和算法

  • 简单的数据结构(栈、队列、链表、数组、哈希表)

  • 树(二叉树、字典树、平衡树、排序树、B 树、B+ 树、R 树、红黑树、多路树)

  • 图(拓扑、有向图、无向图)

  • 稳定的排序算法(冒泡排序、插入排序、鸡尾酒排序、桶排序、计数排序、归并排序、原地归并排序、二叉排序树排序、鸽巢排序、基数排序、侏儒排序、图书馆排序、块排序)

  • 不稳定的排序算法(选择排序、希尔排序、梳排序、堆排序、平滑排序、快速排序、内省排序、耐心排序、Clover 排序)

  • 时间复杂度

  • 空间复杂度

  • 贪心算法

  • KMP 算法

5)操作系统

  • Linux 常用命令(find、top、tar、move、grep、tail、netstat、curl、wget、ping、ssh)

  • 服务器性能指标(qps、CPU 利用率)

  • 进程同步

  • 分段和分页

  • 虚拟内存和主存

6)网络安全

  • CSRF

  • XSS

  • SQL 注入

  • 加密和解密(对称加密、非对称加密)

  • MD5、SHA1、DES、RSA

  • DDOS 攻击

  • HTTP 和 HTTPS

  • SSL

  • TLS

  • TCP 和 UDP

  • Cookie、Session

  • CDN

  • DNS

7)数据库

  • MySql

  • 索引

  • 存储过程

  • 分库分表

  • binlog

  • 读写分离

  • 数据库缓存(RedisMongoDB

  • 数据库中间件(MyCat)

  • 数据库连接池(Durid)

8)大数据

  • 搜索(Elasticsearch](https://mp.weixin.qq.com/s/ZjsZxle7m_dfmVwVkq2ayg) 、Solr)

  • 流式计算(Storm、Spark、Flink)

  • Hadoop

9)服务器

  • Tomcat

  • jetty

  • Nginx

10)框架

  • Spring

  • MyBatis

  • Spring MVC

  • Spring Boot

  • Spring Security

  • Spring Cloud

  • Netty

  • Dubbo

11)消息队列

12)容器

  • Docker

  • K8s

05、第五个阶段,活着最重要

技术是没有终点的,也是学不完的,最重要的是活着、不秃。

零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。

最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。

开源的项目我推荐 GitHub 上的 mall 和 vhr,前者是电商系统,后者是微人事,都用的最前沿的技术,并且文档很全面,不怕晕头转向。

自学最怕的就是缺乏自驱力,一定要自律,杜绝“三天打鱼两天晒网”,到最后白忙活一场。

高度自律的同时,要保持耐心,不抛弃不放弃,切勿自怨自艾,每天给自己一点点鼓励,学习的劲头就会很足,不容易犯困。

技术学到手后,找工作的时候一定要好好准备一份简历,不要无头苍蝇一样去海投简历,容易“竹篮打水一场空”。可以参考下面的链接,好好的准备一下简历,毕竟是找工作的敲门砖。

入职阿里后,才知道原来简历这么写

拿到面试邀请后,在面试的过程中一定要大大方方,尽力把自己学到的知识舒适地表达出来,不要因为是自学就不够自信,给面试官一个好的印象,面试成功的几率就会大很多,加油吧,骚年!


------------------

公众号:沉默王二
掘金:沉默王二
这是一枚沉默但有趣的程序员,你知道,他的文章风趣幽默,读起来就好像攒钱一样爽快。

长按下图二维码关注,你将感受到一个有趣的灵魂,且每篇文章都有干货。

------------------


原创不易,莫要白票,如果觉得有点用的话,请毫不留情地素质四连吧,分享、点赞、在看、留言,随你便,这将是我写作更多优质文章的最强动力!

浏览 18
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报