T31项目第8天

  • 工程结构规约
    • 1.应用分层
      • 1.1分层作用:
      • 1.2分层架构示例
        • 1.2.1 MVC框架
        • 1.2.2 分层结构
      • 1.3分层异常处理
      • 1.3分层领域模型
    • 2.maven
      • 2.1构建工具
      • 2.2主要功能
      • 2.3 G A V
      • 2.4 依赖仲裁
      • 2.5 排除依赖
    • 3.二方库依赖
      • 3.1GAV的定义
      • 3.2G 引入二方库的规约
      • 3.2G 引入二方库的原则
    • 4.TCP/ICP
      • 4.1 五层结构
      • 4.2 IP协议的报头
    • 5.服务器设定
      • 5.1 高并发服务器参数调优

今天是孤尽班第八天学习,今天跟着无尘老师学习了工程结构的规约,包括应用层设计、Maven、二方库、TCP/IP、服务器调优的方法。

工程结构规约

1.应用分层

1.1分层作用:

可扩展性:将流程细化,降低系统业务之间耦合,便于后续功能扩展;
可维护性:适应永适应各种场景的使用,增加代码的复用性,提升了编程的效率;
扩展:计算机的任何问题可以通过中间层来解决;

1.2分层架构示例

1.2.1 MVC框架

M:数据处理的业务逻辑和数据
V:表现层,用户页面渲染展现
C:控制器,全盘统筹

1.2.2 分层结构

终端显示层/开放API
请求处理层:controller
业务逻辑层/通用逻辑层:service
数据持久层/第三方服务:manage/dao
数据存储系统/第三方数据服务:jdbc,redis,

1.3分层异常处理

dao层:异常不打印日志
manager/service:跨服务器,AB服务器都需要打印日志,异常信息都需要记录日志信息
web:不能向上抛出异常,捕获异常之后,给用户一个友好性提示
开放性接口层:将异常处理为错误码和错误信息返回

1.3分层领域模型

DO:和数据库表一一对应,dao层向上传输信息
DTO:服务之间交换数据,不应该包含所有信息,设计序列化和反序列化处理
BO:业务对象,由service向上传输,可以是多个DO的组合信息,可以暴露所有信息,例如:controller层调用service 的数据,
QUERY:各层接受上层的查询请求,2个参数的传输需要封装查询,禁止map传输,例如:/user/queryByname/xiaoming
VO:显示层对象,web向模板渲染层传输,可以包含多个对象

2.maven

管理项目中依赖和项目的构建

2.1构建工具

Ant(不能打包,管理依赖)、Maven(约定大于依赖,统一管理,)、Gradle

2.2主要功能

依赖管理,目录结构(依赖层级查询),项目构建阶段(maven的插件 test,jar,clean)

2.3 G A V

G:组织的ID,一般用组织的名称
A:依赖名称
V:版本号

2.4 依赖仲裁

如果在项目中同一个依赖被定义了多次,项目中依赖版本的确定遵循依赖仲裁原则:
1.DependencyManagement中依赖进行仲裁(父工程约定了子工程的依赖版本号)
例如:父工程依赖(spring-boot-parent)中的pom文件中会定义了相关的依赖(jdbc,spring-boot-starter-web等)
2.无依赖关系(DependencyManagement),按照最短的路径来确定版本(是否在同一个Pom文件中,优先使用同一个pom文件中依赖)
3.路径相同,按照第一声明优先原则(同一个Pom文件,相同依赖,优先使用先声明的依赖)

2.5 排除依赖

在依赖中增加exclusion标签,标签中添加去除的依赖,例如在spring-boot-starter-web中依赖中去掉tomcat的依赖(spring-boot-starter-tomcat)
扩展:jetty作用和Tomcat的依赖作用一致
在项目打包之前要排除依赖冲突,否则上线之后会有错误信息

3.二方库依赖

一方库:工程内各个模块的依赖
二方库:公司内部的依赖库,公司内部其他项目的依赖
三方库:公司之外开源库,google,alibba,apache发布的依赖

3.1GAV的定义

G:com.{公司名称}.{业务线}.{子业务线},最高四级
A:产品名称—模块名称
V:1.0.0 主版本号(大规模的API和架构升级) 次版本号(相对兼容,少量API的修改,增加模块) 修订号(修改BUG或者兼容性)

3.2G 引入二方库的规约

不依赖SNAPSHOT版本(镜像版本)
使用RELEASE(正式版本)
类库版本号不允许覆盖升级
二方库升级或者新增时,保证其他jar包仲裁一致
依赖二方库群时,定义统一的版本号
GAV保持一致

使用建议:
底层基础技术框架、核心数据管理平台、或接近硬件谨慎引入
所有仲裁使用<.DependencyManagement>
二方库不需要配置型
不使用不稳定的工具包或Util类

3.2G 引入二方库的原则

精简原则:
移除不必要的API
只包含必须的API和工具类
可追溯原则
记录每个版本的变化
二方库位置,源码维护者

4.TCP/ICP

网络中实现信息传输的协议簇

4.1 五层结构

应用层:HTTP,IP,SMAPT
传输层:TCO/UDP
网络层:IP/ARP
链路层:IEEE 802
物理层:网卡

4.2 IP协议的报头

IP:

TCP

SYN(建立连接的信息),ACK(确认信息),FIN(断开连接)
三次握手:

**总结:**建立连接需要AB机器都能获取对方的确认信息,才能建立连接;
作用:确认信息,防止超时

*断开连接–四次挥手:

TIME_WAIT 的默认时间是2分钟,过了2分钟,也会自动断开连接,谁发起来连接,谁最后断开连接
扩展:TIME_WAIT 时间可以设置减少,长期占用SOCKET连接数资源(1024),影响系统传输;
**总结:**断开连接需要保证AB机器都同时断开,连接才断开,所以需要AB机器向对方都发送fin信号来确认断开

5.服务器设定

5.1 高并发服务器参数调优

服务器的优化:
TCP协议的time_wait超时时间
操作系统超时时间默认240s超时
调大服务器所支持的文件句柄数
JVM调优:
ORM异常时打印堆中异常信息
Xms和Xmx设置一样大小内存(堆内存4G以下)

开课吧T31项目第8天相关推荐

  1. 开课吧T31项目第6天

    T31项目第6天 日志设计 日志设计作用 T31项目异常分析 日志设计核心思想 错误码设计 今天是孤尽班第6天学习,今天主要对日志设计的做了一些梳理和思考. 日志设计 日志设计作用 日志的作用分为三点 ...

  2. 开课吧T31项目第14天

    T31项目第14天 学习总结 1. 知识点总结 1. 1工程结构规约 1. 2项目架构设计 1. 3编码规约 2. 知识点扩展学习和思考 不知不觉在孤尽班已经跟着老师学习了2周,这一周对我来说,这周学 ...

  3. 开课吧T31项目第13天

    T31项目第13天 接口文档 1.接口文档的作用 2.接口文档编写的规范 3.接口文档编写实例 4.java实现接口文档的技术 今天是孤尽班学习的第13天,今天学习了接口文档的编写规范 接口文档 1. ...

  4. 开课吧T31项目第9天

    T31项目第9天 项目架构设计 1.项目业务分析 2.项目架构选型 3.项目主要模块功能 4. 项目使用技术栈 5. 项目问题分析(后续补充) 项目架构设计 1.项目业务分析 该系统模拟12306购票 ...

  5. 开课吧T31项目第10天

    T31项目第10天 技术架构选型 1.架构技术架构选项 1.1 巨石架构(单体架构) 1.2 SOA架构 1.3 微服务 1.4 Spring-boot(优秀的构建项目的框架) 1.5 Spring- ...

  6. 开课吧T31项目第2天

    T31项目第2天 1.UML 1.1UML图分类 2.T31项目 2.1 系统用例图 2.1.1 用例图设计要素 2.1.2 模块之间的关系 2.1.3 用例图设计总结 2.2系统时序图 2.2.1 ...

  7. T31项目架构选型方案

    服务选型 曾经的技术选型 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GjyeLuSg-1636378253985)(C:\Users\Zyf\Desktop\T31 ...

  8. 孤尽T31项目Day3

    孤尽T31项目Day3 Mysql设计规范 1 建表规约 1.1 表.字段的命名 1.必须使用小写字母或数字. 2.禁止出现数字开头. 3.禁止两个下划线中间只出现数字. 4.不使用复数名词. 5.禁 ...

  9. 孤尽T31项目第6天-Java项目工程结构规约

    文章目录 前言 一.应用分层 1. 分层的目的 2. MVC框架模式 3. 推荐的分层结构 4. 分层的异常处理 5. 分层数据模型 二.Maven管理 1. Maven的作用 2. 构建 3. Ma ...

最新文章

  1. androidwakelock_Android音频播放时wakelock的实现
  2. 构造方法前可以用public修饰吗_程序员,你连反射都不会,还敢说自己会Java吗?...
  3. 计算二叉树叶子节点的数目
  4. 法线有接缝_发送带有接缝的活动邀请
  5. extjs中Store和grid的刷新问题
  6. nuxt添加.html,Nuxt内导航栏的两种实现方式
  7. P1540 机器翻译 模拟
  8. 国内Maven仓库--阿里云Aliyun仓库地址及设置
  9. Linux批量清空当前目录中的日志文件
  10. h3csyslog_H3C-syslog配置命令
  11. bmp格式如何转换成jpg?
  12. 学术答辩PPT模板分享
  13. 目前服务器cpu主流参数,服务器CPU天梯图-包含所有主流设备及服务器处理器
  14. python 处理word 分页符、分节符
  15. Openwrt平台搭建
  16. 用 Python 编辑 PDF 文件
  17. unity3d 反射获取面板的Rotation的值
  18. 微信抢抢票服务器,已有多人被坑!抢票“加速包”慎用!
  19. 有关阿里云ECS访问端口和加入安全组的说明
  20. axure树形表格_表格 树形菜单/excel 如何实现分级显示,也就是树形的菜单

热门文章

  1. Linux centos+selenium+firefox+java (无图形界面)获取动态网页
  2. 常见的免费遥感卫星数据服务网站
  3. BZOJ 4407: 于神之怒加强版|莫比乌斯反演
  4. 【Go进阶】如何让你Go项目中日志清晰有趣-Zap日志库
  5. 手把手教你学51单片机-变量进阶与点阵LED
  6. 你手上有50万,你会干什么?
  7. ImageJ如何测量物体的面积大小
  8. 华兴数控g71外圆循环编程_G71外圆循环
  9. 艾永亮:超级产品战略助戴森品牌C位出道,它却在汽车行业栽跟头
  10. React使用echarts-for-react