2021.11.2 孤尽训练营D8——工程结构规约

项目分层

应用分层:隐藏下层业务逻辑的复杂性,提高系统的组件化和可维护性

计算机领域的任何问题都可以通过增加一个中间层解决

严禁第三方状态码放到系统中

分层异常处理:

  • Dao层:异常类型很多,不需要打印日志
  • Manager/Service层:必须记录出错日志到磁盘,尽可能带上参数信息,保护案发现场
  • Web层:决不能向上抛异常,应该跳到友好错误页面,友好的错误提示信息
  • 开放接口层:将异常处理成错误码和错误信息方式返回

分层领域模型:

  • DO:此对象与数据库表结构一一对应,通过DAO层向上传输数据源对象
  • DTO:数据传输对象,Service或Manager向外传输的对象
  • BO:业务对象,可以由Service层输出的封装业务逻辑的对象
  • Query:数据查询对象,各层接收上层的查询请求。注意超过2个参数的查询封装,禁止使用Map类来传输
  • VO:显示层对象,通常是Web向模板渲染引擎层传输的对象

Maven、构建

Maven:管理依赖、对项目进行构建、支持多种插件、规范的目录结构、完整的项目构建阶段

什么是构建?手工情况下:使用javac编译程序成.class文件,使用打包工具打成jar包的过程

Java项目构建工具:

  • 传统构建工具:Ant(缺点:不能管理依赖)
  • 主流构建工具:Maven
  • 新兴构建工具:Gradle(安卓应用程序的标配)

什么是GAV?即工程的坐标:G:groupId,A:artifactId,V:version

Maven的依赖仲裁:(到底选择哪一个版本)

  • 按照DependencyManager版本声明进行仲裁
  • 如无仲裁声明,则按照依赖最短路径确定版本
  • 若相同路径,则按照第一声明优先原则

二方库管理

二方库依赖:定义GAV规则以及版本

一方库:本工程中的各模块的相互依赖

二方库:公司内部的依赖库,一般指公式内部的其他项目发布的jar包

三方库:公司之外的开源库,比如apache、google、alibaba等发布的依赖

GroupId:

  • 格式:com.{公司/BU}.业务线{.子业务线),最多4级
  • 例子:com.alibaba.dubbo.register

ArtifactID:

  • 格式:产品线名-模块名

Version:

  • 二方库版本号命名方式:主版本号.此版本号.修订号
  • 主版本号:产品方向改变,或者大规模API不兼容,或者架构不兼容升级
  • 次版本号:保持相对兼容性,增加主要功能特性,影响范围极小的API不兼容修改
  • 修订号:保持完全兼容性,修复BUG、新增次要功能特性等

二方库引用规约:

  1. 线上应用不要依赖SHAPSHOT版本(快照版本很有可能会覆盖发布,测试用的)
  2. 正式发布的类库必须去中央仓库查证,使RELEASE版本号有延续性
  3. 正式发布的类库版本号不允许覆盖升级
  4. 二方库的新增或升级,保持除功能点之外的其他jar包仲裁结果不变(不要增加新jar包的依赖)
  5. 二方库里定义的枚举类型,参数中可以使用返回值不允许使用
  6. 依赖于一个二方库群时,必须定义一个统一的版本变量,避免版本号不一致
  7. 禁止在依赖中出现相同的GroupId,相同的ArtifactId,但是不同的Version

二方库引用建议:

  1. 底层基础技术框架、核心数据管理平台、或近硬件端系统谨慎引入第三方实现
  2. 所有版本仲裁使用<dependencyManagement>语句块
  3. 二方库不要有配置项
  4. 不要使用不稳定的工具包或者Utils类

二方库发布原则:

  • 精简可控原则:
  1. 移除不必要的API和依赖
  2. 只包含Service API、以及必要的工具类
  3. 如果依赖其他二方库,尽量provided引入(不打到jar中)
  4. 无log具体事项,只依赖日志框架
  • 稳定可追溯原则:
  1. 记录每个版本的变化
  2. 二方库维护者
  3. 源码的位置
  4. 公共二方库的行为不变

网络传输和调优

TCP/IP:在多个不同网络间实现信息传输的协议簇

TCP/IP的五层结构:以定义数据格式和解决传输问题角度进行抽象的分层

  • 应用层:定义从端口获取到程序中的数据格式并解读和返回数据(http、ftp、smtp等)
  • 传输层:主要工作是定义端口,实现端口到端口的通信(TCP/UDP)
  • 网络层:定义IP地址和子网,并对于不同子网的数据包进行路由
  • 链路层:对电信号进行分组并形成具有特定意义的数据帧
  • 物理层:接口规格,信号电平,IEEE 802.1定义传送频率,帧结构

高并发服务器参数调优

  • 高并发服务器建议:
  1. 调小TCP协议的time_wait超时时间
  2. 操作系统默认240秒后超时
  3. 在高并发访问下,可能无法建立新的连接
  • 调大服务器:
  1. 调大服务器所支持的最大文件句柄数(fd)
  2. Linux系统一个连接对应一个文件描述符
  3. Linux系统默认所支持最大fd数量为1024
  4. 连接数很大时很容易无法建立连接
  5.  建议linux 服务器所支持的最大句柄数调高数倍(与服 务器的内存数量相关)
  • JVM环境参数设置:
  1. XX:+HeapDumpOnOutOfMemoryError参数
  2. JVM碰到OOM场景时输出dump信息
  • JVM的Xms和Xmx设置:
  1. JVM的Xms和Xmx设置一样大小的内存容量
  2. 避免在GC后调整堆大小带来的压力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值