TOC

转载:如何看待一些大学生说 3 天学会了 Java? - 沉默王二的回答 - 知乎

01、第 1 个小时,环境和工具准备

  1. 准备一台电脑,要能联网
  2. 下载、配置 Maven
  3. 下载、安装 IntelliJ IDEA
  4. 准备一个 GitHub 仓库(或者码云),管理 Java 源代码

Java 是一门计算机编程语言,学它的话,连台电脑都没有,学个屁。有了电脑,还得联网,遇到问题的时候就问搜索引擎,推荐谷歌和必应,搜索引擎用得好,几乎没有解决不了的问题。

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

敲代码就用 IntelliJ IDEA 吧,千万别用记事本,否则 3 天时间真学不会!有了 IDEA,连 JDK 都可以直接下载了,舒服啊!后面学习源码的话,还可以直接反编译字节码。什么?英语功底不行,安装这两款 IDEA 插件啊:中文汉化包和 translation 翻译插件。

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

02、第 2 - 12 个小时,Java 基础入门

1)基本数据类型

  1. 8 种基本数据类型(booleancharbyteshortintlongfloatdouble
  2. 整形中 byteshortintlong 的取值范围
  3. 单精度和双精度为什么不能使用 == 比较
  4. 浮点数基本类型和包装类型的区别
  5. 自动拆箱与装箱
  6. Integer 的缓存机制

2)操作符

  1. 算术运算符
  2. 逻辑运算符
  3. 比较运算符

3)流程控制语句

  1. 条件分支(if/else/else if、三元运算符、switch
  2. 循环或者遍历(forwhiledo-while
  3. breakcontinue

4)包

  1. 创建包
  2. 导入包
  3. 包全名

5)main 方法详解

6)数组

  1. 什么是数组?
  2. 访问数组
  3. 遍历数组
  4. 打印数组
  5. 可变参数
  6. 数组排序
  7. 数组转成 Stream
  8. 数组转成 List
  9. 数组搜索
  10. java.util.Arrays
  11. 数组越界

7)注释

  1. 单行注释
  2. 多行注释
  3. 文档注释
  4. 注释真的不会被执行吗?

8)字符串

  1. 双引号字符串和 new 字符串对象
  2. 字符串为什么是不可变的?
  3. StringStringBuilderStringBuffer 之间的区别
  4. 字符串拼接的几种方式
  5. 字符串常量池
  6. 关于 intern
  7. 字符串比较(==equals
  8. 字符串拆分
  9. 字符串操作小技巧
  10. 字符串转整形
  11. 生成 UUID(多谢知友的提醒,链接已更新)
  12. 字符串可以引用传递吗?
  13. 字符串长度
  14. 关于 substring

03、第 13 -20 个小时,Java 核心技术

1)面向对象

  1. 面向对象和面向过程
  2. 封装
  3. 继承
  4. 多态
  5. 接口
  6. 抽象类
  7. 重写和重载
  8. 重载的 11 条规则
  9. 构造方法
  10. 局部变量、成员变量、静态变量、常量
  11. 值传递还是引用传递
  12. final 关键字
  13. this 关键字
  14. super 关键字
  15. 不可变对象
  16. equals()hashCode()
  17. 打印 Java 对象
  18. NullPointerException

2)常用工具类

  1. 字符串相关的工具类
  2. 日期时间相关的工具类
  3. 枚举
  4. 随机数
  5. 正则表达式
  6. Apache-commons 工具库
  7. Guava 工具库
  8. 日志组件(Log4j、SLF4J、Logback、Log4j 2)
  9. JSON 解析器(Jackson, fastjson, Gson)
  10. Hutool

3)集合框架

  1. ArrayList
  2. LinkedList
  3. ArrayListLinkedList 之间的区别
  4. 不可变 List
  5. CopyOnWriteArrayList
  6. HashMap
  7. LinkedHashMap
  8. TreeMap
  9. ConcurrentHashMap
  10. fail-fast

4)反射机制

5)异常处理

  1. try-with-resource

6)注解

7)IO 流

  1. 字符流、字节流
  2. 输入流、输出流
  3. 同步、异步
  4. 阻塞、非阻塞
  5. BIO、NIO 和 AIO
  6. NIO 2.0

8)序列化

9)泛型

10)单元测试 JunitTestNG

11)编码方式

  1. ASCII
  2. Unicode
  3. UTF-8
  4. GBK、GB2312
  5. 如何解决乱码问题

12)并发编程

  1. 什么是并发
  2. 什么是并行
  3. 什么是线程
  4. 什么是进程
  5. 线程的状态
  6. 线程的优先级
  7. 创建线程
  8. 创建线程池
  9. 什么是线程安全
  10. 多级缓存和一致性问题
  11. CPU 时间片和原子性问题
  12. 指令重排和有序性问题
  13. 线程安全和内存模型
  14. happens-before
  15. 可重入锁
  16. 阻塞锁
  17. 乐观锁
  18. 悲观锁
  19. 分布式锁
  20. CAS
  21. ABA
  22. 偏向锁
  23. 轻量级锁
  24. 重量级锁
  25. 自旋锁
  26. 什么是死锁
  27. 如果避免死锁
  28. synchronized
  29. volatile
  30. ThreadLocal
  31. Executors
  32. CountDownLatch
  33. Thread
  34. Runnable
  35. Callable
  36. ReentrantLock
  37. ReentrantReadWriteLock
  38. Atomic 相关类

13)Java 8 新特性

  1. Lambda 表达式
  2. Stream
  3. Optional

14)源码阅读

  1. String
  2. Integer
  3. ArrayList
  4. LinkedList
  5. CopyOnWriteArrayList
  6. HashMap
  7. TreeMap
  8. LinkedHashMap
  9. ConcurrentHashMap
  10. CopyOnWriteArrayList

04、第 21 -24 个小时,JVM 和性能优化

1)JVM

  1. Java 内存结构
  2. 垃圾回收
  3. JVM 内存区域
  4. Java 虚拟机栈
  5. class 文件
  6. 字节码指令
  7. JVM 参数调优
  8. Java 对象模型
  9. HotSpot
  10. 类加载机制
  11. 编译和反编译
  12. 反编译工具 (javap)
  13. JIT
  14. 虚拟机性能监控和故障处理工具(jpsjstackjmapjstatjconsolejavap

2)性能优化

  1. 使用单例
  2. 使用线程池
  3. 减少上下文切换
  4. 减小锁粒度
  5. 数据压缩
  6. Stream 并行流
  7. GC 调优
  8. JVM 内存分配调优
  9. btrace

05、第 2 天,补充基础知识

1)设计模式

  1. 设计模式的六大原则
  2. 创建型设计模式(单例、抽象工厂、建造者、工厂、原型)
  3. 结构型设计模式(适配器、桥接、装饰、组合、外观、享元、代理)
  4. 行为型设计模式(模板方法、命令、迭代器、观察者、中介者、备忘录、解释器、状态、策略、责任链、访问者)
  5. 单例的七种写法

2)数据结构与算法

  1. 简单的数据结构(栈、队列、链表、数组、哈希表)
  2. 树(二叉树、字典树、平衡树、排序树、B 树、B+ 树、R 树、红黑树、多路树)
  3. 堆图(拓扑、有向图、无向图)
  4. 稳定的排序算法(冒泡排序、插入排序、鸡尾酒排序、桶排序、计数排序、归并排序、原地归并排序、二叉排序树排序、鸽巢排序、基数排序、侏儒排序、图书馆排序、块排序)
  5. 不稳定的排序算法(选择排序、希尔排序、梳排序、堆排序、平滑排序、快速排序、内省排序、耐心排序、Clover 排序)
  6. 时间复杂度
  7. 空间复杂度
  8. 贪心算法
  9. KMP 算法

3)操作系统

  1. Linux 常用命令(findtoptarmovegreptailnetstatcurlwgetpingssh
  2. 服务器性能指标(qps、CPU 利用率)
  3. 进程同步
  4. 分段和分页
  5. 虚拟内存和主存

4)网络安全

  1. CSRF
  2. XSS
  3. SQL 注入
  4. 加密和解密(对称加密、非对称加密)
  5. MD5、SHA1、DES、RSA
  6. DDOS 攻击
  7. HTTP 和 HTTPS
  8. SSL
  9. TLS
  10. TCP 和 UDP
  11. Cookie、Session
  12. CDN
  13. DNS

5)数据库

  1. MySql
  2. 索引
  3. 存储过程
  4. 分库分表
  5. binlog
  6. 读写分离
  7. 数据库缓存(Redis、MongoDB)
  8. 数据库中间件(MyCat)
  9. 数据库连接池(Durid)

6)大数据

  1. 搜索(Elasticsearch 、Solr)
  2. 流式计算(Storm、Spark、Flink)
  3. Hadoop

7)服务器

  1. Tomcat
  2. jetty
  3. Nginx

8)框架

  1. Spring
  2. MyBatis
  3. Spring MVC
  4. Spring Boot
  5. Spring Security
  6. Spring Cloud
  7. Netty
  8. Dubbo

9)消息队列

  1. RabbitMQ
  2. Kafka

10)容器

  1. Docker
  2. K8s

06、第 3 天 半天刷面试题和算法题 + 半天准备简历

Markjour.com 注释:跳过,一份 Java 面试攻略,一份 LeetCode 刷题笔记。