JAVA 学习方法
思考方式
程序员思维
开发方式:面向功能开发
PD-> 开发(代码设计、库表设计、编码)
缺少:非功能需求(安全、性能、代码结构)
驱动模式:面向金钱开发(MDD)
- 通常 :心态被动(老板、PD、装母娘)
- 例外: 主动学习(兴趣、理想、习惯)
知之者不如好治者,好治者不如乐之者。
架构师思维
开发模式:功能开发 + 肺功能开发
- 功能
- 技术选型
- 开发效率
- 团队接收情况
- 主动接收
- 心里的抵制
- 半推半就(设计上没有绝对的强奸,哈哈哈哈哈)
- 技术选型
- 非功能需求
- 安全
- Web 安全
- SQL 安全
- 代码安全(反射滥用)
- 性能
- 并发
- I/O
- CPU
- 代码结构
- 设计模式
- 代码风格
- 个人偏好
- 字段命名
- private int age;
- private int _age;
- 缩进格式
- 类型名
- 前缀模式
I
开头表示 接口
- 后缀模式:
- VO(Value Object)
- DTO(Data Transfter Object)
- DO (Data Object)
- DAO(Data Access Object)
- JDBC、数据库
- 前缀模式
- 字段命名
- 安全
小马哥个人经验:
- 数据模型类,不需要前后缀,一般都是 entity -> Person
- 仓储模型: PersonRepository
- 数据库、Redis、Cache、Mongo
- 接口:如果没有两个以上的实现或远程调用,不要写接口。接口就是多态,
- 你只有一个实现,要什么接口
这个没有很绝对的好坏。拓展也是一样,所谓的拓展有时候就是
你写代码是手淫的话,你拓展就是意淫了。很多时候,你要什么拓展。互联网公司,大多数都是改的比较多,今天完成的任务,明天就发生了翻天覆地的变化,少意淫。
学习方法
点:只是梳理
java SE
语言
- java5 泛型、注解、For each
- java7 try-catch 提升、AutoCloseable(自动关闭)
- Java8 Lambda
- Java9 模块化
元编程
- Class、Package、Module ( java 9 )
- ClassLoader
- 反射(Reflection)
- Bytecode: ClassLoader、ASM、CGLB 等
- Annotatins
- Common Annotations
@Resource
@PostConstruct
- Common Annotations
- Function
Consumer
Supplier
Function
Predicata
数据结构
- JAVA 集合:Collection、List、Set、Map
- Apache Commons 拓展:Bag
- Google Guava 拓展
I/O 和 网络
- 文件系统
-
URL 资源
- Socket(BIO、、、)
- NIO(Non-Blocking I/O)
- NIO2
- 文件系统提升
- 文件监听修改
- 文件系统提升
- AIO
- 异步 (Future)+ NIO
并发/并行
- JAVA Thread / Runable
- JAVA 5 Executor / ExecutorService
- JAVA 7 Fork / Join ( 是一个场景,相当于你把任务分摊再聚合 )
- JAVA 8 CompletableFuture ( 函数式+非阻塞 )
- JAVA 9 Flow API (Reactive Streams API 的实现)
数据库
-
JDBC
-
数据源(DataSource)
- Apache DBCP
- C3P0
- Hikari
-
事务 / 隔离级别
-
关注数据的一致性(事务是解决一致性问题。)
java.sql.Connection
1 2 3 4 5 6 7
int TRANSACTION_NONE = 0; int TRANSACTION_READ_UNCOMMITTED = 1; int TRANSACTION_READ_COMMITTED = 2; int TRANSACTION_REPEATABLE_READ = 4;
-
SQL 92 / 99 / 03 标准。
- Mysql
- Oracle
- PregressSqL
-
学习 JAVA ,要学习规范,标准,没有捷径
Sql 标准是为了统一数据库厂商。
安全
- Permission 管理 (java 主要关注)
- 加密 / 解密
- 安全证书管理(HTTPS)
管理 / 运维
- JMS
- 进程管理
- Process
- JAVA 进程管理 API
AOP 其实是字节码的提升
JAVA EE
- Servlet / JSP / JSTL / EL
- JSF
- EJB
- JPA
- JMS (activityMq)
- Bean Validation
- JTA (Java Transaction API)
- JTS(Java Transaction Service)
- JAX-RS(REST)
- JAX-WS(Web Services)
技术不存在所谓的过时,所谓的多阶段提交,就是 JTA 中的。 XARsource Interface
开源,就是把闭源的东西的精华拿出来,然后让你去用。
基础非常重要
线:知识的衔接
JAVA SE
- 语言
- 面向对象编程(OOP)与设计模式(GOF 23)
- 面向函数编程(FOP)与 Reactive
- 数据结构
- 接口设计与数据结构选择
- JAVA 集合和线程安全
CopyOnWriteArrayList
- Apache Commons-collection 与 Guava 拓展背景
- I/O 与网络
- BIO 与 I/O 接口的关系
- NIO 新数据结构(ByteBuffer)
- 数据库
- DML(数据操作语句)、DDL(数据定义语句) 与 JDBC API 的关系
- JDBC 与数据事务的关系
- Spring 事务(利用 AOP)
setAutoCommit(false)
- begin transaction
- INSERT、Delete、UPDATE
- end transaction
commit()
- Spring 事务(利用 AOP)
- 事务传播
- EJB
JAVA EE
数据层
- Bean Validation
- JPA
Web 相关
- Servlet / JSP / JSTL / EL
- JSF
- JAX-RS(REST)
- JAX-WS(Web Services)
- WebScokets
服务/集成层
- EJB
- JMS
事务
- JTA(Java Transaction API)
- JTS(Java Transaction Service)
Statement.java
#excute
#executeQuery
preparedStatement
防止 Sql 注入。
不用webFlux 也可以实现 reactive,你如果绑定到一个框架上边会下不来的。
不用 ByteBuffer ,可不可以实现 NIO 的接口?他只是一个数据结构。都是一个数组,转化一下就行了,Netty 的时候就没有用啊。这是一个思维的方式。
面:知识的运用
Zuul 可以做负载均衡,网关,调度。
Nginx
也可以硬负载
技术相关联的关联起来
RestTemplate
- WebScoket
- rest
- WebService
- RPC
都是调用
关注序列化,和反序列化的问题,安全的问题。JSON 调用反射,就有反射漏洞,Hession 也有过漏洞。
服务发现
Eureka
zookeeper
消息中间件
基于 Spring Cloud Stream 扩展一个自己的 RPC
JAVA 的生态太大了。至少需要两到三年的打磨
小马哥个人经历:
专业: 数学与信息系
07 年毕业(大专)
- 外企(英语+ 规范)
- 更抽象思考(高度更高)
- 实践(用不同的技术实现 同样的需求)
- ExcutorService、Fock Join、CompletableFuture
- 一定的代码量:大学(20W)
- 60个人(07 毕业) -> 6-7 个人了
学习路径
Java基础学习路径
java语言
- JAVA 9 系列
java资源管理
高并发
- 高并发系列
技术在与时俱进,大家要不断的学习新的技术。
Spring Boot 学习路径
vip -> SF -> 慕课