Java 基础学习方法

Posted by NotGeek on December 18, 2018

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
  • 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()
    • 事务传播
      • 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 -> 慕课