第六周总结

Java 学习第六周总结
一、学习概述
本周学习内容涵盖 NIO 网络编程实战、构建工具深度应用、Spring Boot 进阶配置以及《构建之法》中技术选型与工具应用的实践理论。在技术实践上,掌握了基于 Selector 的 NIO 服务端开发及粘包 / 拆包问题解决方法,深入学习了 Maven 与 Gradle 构建工具的配置技巧,完成了 Spring Boot 多环境配置与数据库连接池优化。理论层面,通过《构建之法》理解了技术选型的核心要素与开发工具的全流程应用。
二、NIO 网络编程实战
(一)Selector 核心编程模型

  1. NIO 服务端实现步骤

// 1. 创建Selector
Selector selector = Selector.open();
// 2. 配置ServerSocketChannel
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.bind(new InetSocketAddress(8080));
ssc.configureBlocking(false); // 非阻塞模式
// 3. 注册Accept事件
ssc.register(selector, SelectionKey.OP_ACCEPT);
// 4. 事件循环
while (true) {
selector.select(); // 阻塞等待事件
Set keys = selector.selectedKeys();
Iterator iter = keys.iterator();

while (iter.hasNext()) { 
    SelectionKey key = iter.next(); 
    iter.remove(); // 处理后移除键 
     
    if (key.isAcceptable()) { // 处理新连接 
        SocketChannel sc = ssc.accept(); 
        sc.configureBlocking(false); 
        sc.register(selector, SelectionKey.OP_READ); 
    } else if (key.isReadable()) { // 处理读事件 
        SocketChannel sc = (SocketChannel) key.channel(); 
        ByteBuffer buffer = ByteBuffer.allocate(1024); 
        int len = sc.read(buffer); 
        if (len > 0) { 
            buffer.flip(); 
            System.out.println("收到数据:" + StandardCharsets.UTF_8.decode(buffer)); 
        } 
    } 
} 

}
2. 关键组件解析

  1. Selector:实现多路复用,一个 Selector 可管理多个 Channel 的事件监听。
  2. SelectionKey:标识 Channel 在 Selector 上的注册关系,包含事件类型(OP_ACCEPT/OP_READ/OP_WRITE 等)。
  3. 非阻塞模式:通过configureBlocking(false)使 Channel 支持异步 IO 操作,避免线程阻塞。
    (二)粘包 / 拆包解决方案
  4. 定长协议
  5. 原理:固定每个数据包长度(如 100 字节),不足部分补零,接收方按固定长度读取。
  6. 示例:金融交易系统中使用固定长度报文传输账户信息。
  7. 分隔符协议
  8. 原理:用特定字符(如\n、\r\n)作为数据包边界。
  9. 应用:HTTP 协议使用\r\n\r\n分隔请求头与请求体。
  10. TLV 协议
  11. 结构:Type-Length-Value(类型 - 长度 - 值),如[2][4][hello]表示类型 2、长度 4、数据 hello。
  12. 优势:自描述性强,适用于复杂数据结构传输。
    三、构建工具实战
    (一)Maven 核心配置
  13. 依赖管理示例(pom.xml)
org.springframework.boot spring-boot-starter-web 3.1.0 commons-logging commons-logging log4j log4j 2. 镜像加速配置(settings.xml) aliyun 阿里云镜像 https://maven.aliyun.com/repository/public central (二)Gradle 快速入门 1. 构建脚本示例(build.gradle)

plugins {
id 'java'
id 'org.springframework.boot' version '3.1.0'
}
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
2. 常用命令
10. gradle build:编译打包项目
11. gradle test:运行测试用例
12. gradle bootRun:启动 Spring Boot 应用
四、Spring Boot 进阶配置
(一)多环境配置管理

  1. 配置文件拆分
  2. 主配置(application.yml):

spring:
profiles:
active: @activatedProperties@ # Maven/Gradle动态注入
14. 开发环境(application-dev.yml):

server:
port: 8081
logging:
level:
root: DEBUG
15. 生产环境(application-prod.yml):

server:
port: 80
logging:
level:
root: WARN
2. Maven Profile 动态激活(pom.xml)

dev true dev prod prod (二)数据库连接池优化(HikariCP)

spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: 123456
hikari:
maximum-pool-size: 20 # 最大连接数
minimum-idle: 5 # 最小空闲连接
connection-timeout: 30000 # 连接超时时间(毫秒)
idle-timeout: 600000 # 空闲连接存活时间(毫秒)
五、《构建之法》实践思考
(一)技术选型关键要素

  1. 业务需求适配
  2. 功能契合度:电商项目选择分布式架构与 Redis 缓存应对高并发(如淘宝双十一架构)。
  3. 拓展性预判:预留技术升级空间,避免业务增长导致架构重构。
  4. 性能与可靠性
  5. 响应时间:实时通信系统采用 WebSocket 协议降低延迟。
  6. 容错机制:银行系统双活数据中心实现故障自动切换。
  7. 成本效益分析
  8. 开源 vs 闭源:评估 Spring Boot(开源)与商业中间件的长期维护成本。
  9. 云服务选型:按需付费模式降低初期硬件投入(如 AWS/Azure)。
    (二)开发工具全流程应用
  10. 开发阶段
  11. IDE:IntelliJ IDEA 的智能提示与重构功能提升编码效率。
  12. 版本控制:Git 分支管理实现多人协作(如 GitHub Flow 工作流)。
  13. 测试与部署
  14. 自动化测试:JMeter 模拟高并发测试系统性能瓶颈。
  15. CI/CD:Jenkins 流水线实现代码提交到生产部署的自动化。
  16. 运维监控
  17. 容器化:Docker 封装应用依赖,保障跨环境一致性。
  18. 日志分析:ELK Stack 实时收集并分析系统日志(如异常堆栈追踪)。
    六、本周学习总结与反思
    (一)学习成果
  19. 掌握 NIOSelector 编程模型,能实现基本的非阻塞网络服务端。
  20. 熟练使用 Maven 与 Gradle 构建工具,解决依赖冲突与镜像加速配置。
  21. 完成 Spring Boot 多环境配置与 HikariCP 连接池优化。
  22. 理解技术选型的多维度考量因素,掌握开发工具全流程应用方法。
    (二)存在问题
  23. NIO 粘包 / 拆包的具体编码实现不够熟练,需加强协议解析实践。
  24. 构建工具的高级特性(如 Maven 插件开发、Gradle 自定义任务)尚未深入学习。
  25. 技术选型中对新兴技术(如 ServiceMesh)的评估方法缺乏实战经验。
    (三)改进方向
  26. 开发简单的 NIO 聊天程序,实践多种拆包协议。
  27. 学习 Maven/Gradle 插件开发,定制自动化构建流程。
  28. 通过模拟项目练习技术选型,对比不同方案的优劣。
    (四)下周计划
  29. 学习分布式事务解决方案(Seata),理解 AT/TCC 模式。
  30. 研究微服务网关(Spring Cloud Gateway/Nginx)的负载均衡策略。
  31. 阅读《领域驱动设计》,实践复杂业务场景的领域建模。
  32. 搭建简单的微服务架构,整合服务注册与配置中心。
posted @ 2025-06-15 20:50  执笔诉相思  阅读(9)  评论(0)    收藏  举报