java修炼之道

2 篇文章 0 订阅

目录

 

项目与工程化

Maven

git

开发框架

注解

循环依赖

ORM

Spring

AOP

数据存储

大表优化

DDL优化

DML优化

数据通信

restful

RPC


项目与工程化

Maven

配置文件:

  • maven试用groupId:artifactId:version三者来标识一个唯一的二进制版本。
  • packaging代表打包的方式,有pom、jar、war、ear、custom。
  • properties是全局属性的配置
  • dependencies是对依赖的管理
  • plugins是对插件的管理。

依赖管理:

  • 一些jar依赖可以由groupId:artifactId:version标识
  • 完整的标识为:groupId:artifactId:classifer:version
  • 依赖再编译部署中参与的情况可以由scope来指定,分别为compiler、test、peovider、system、import,默认是compiler。
  • 依赖是一个树状结构,采用最左依赖原则,可以通过exclusions排除一些包。(在依赖树种,离当前节点最近的依赖优先级最高,一样远的时候第一个优先)

构建流程:

  • validate:验证项目以及信息是否正确
  • compiler:编译源代码和相关资源文件
  • test:测试代码进行测试
  • package:根据不同的项目类型进行打包
  • verify:验证打包的正确性
  • install:安装到本地maven
  • deploy:打好包发布到远程仓库

git

分支:

  • master:生产环境的分支
  • develop:最新开发成果的分支,实现了软件需求的功能,完成了测试,可以合并到master
  • feature:从develop拉取的分支,用于开发
  • releas:辅助版本的分支,从develop分支派生,必须合并回develop和master
  • hotfix:修改生产代码中有缺陷的分支

日志规范:

<type>(<scope>):<subject>

<body>

<footer>

type:用于说明commit类别:

  • feat:新功能(feature)
  • fix:修复bug
  • docs:文档
  • style:格式
  • refactor:重构
  • test:测试
  • chore:构建或辅助工具的变动

scope:说明commit影响的范围

subject:是commit的简短描述

body:详细描述

例子:

fix(xxxservice):修复了xxxx的bug。

feat(basket):优化结构

 

开发框架

注解

spring注解主键兼容JSR-330

@Autowired根据类型匹配,通过名称需要配合@Qualifier;@Resource根据bean的名称匹配获取不到再根据类型去匹配。

@PostContruct在构造bean结束后会执行一些初始化动作

@PreDestory在构造bean销毁前会执行一些初始化动作

循环依赖

替换provider,在构造器或方法用get方法打破

对于方法或字段注入的情况,将依赖的一边通过单例作用域。

ORM

mybatis和hibernate对比:

mybatis灵活性好,是半orm,修改字段需要修改mapper,需要手写sql,对数据量大性能要求高的场景能高度定制sql。

Spring

  • bean的初始化到销毁的生命周期
  • 容器事件侦听器:
    ContextStartedEvent上下文启动事件
    ContextRefreshedEvent上下文刷新事件完毕
    ContentStoppedEvent上下文停止事件
    ContentClosedEvent上下文关闭事件
  • Bean的初始化和销毁。

AOP

重要知识点:

  • Aspect:切面
  • JoinPoint:连接点
  • Advice:通知befrore、after、after-returning、after-throwing、around
  • PointCut:切面位置
    • execution:用于匹配方法执行的连接点
    • within:匹配指定类型内的方法执行,@within
    • this:匹配当前AOP代理对象类型的执行方法 
    • target:匹配当前目标类型的执行方法 @target
    • args:匹配当前执行的方法传入的参数为指定类型的执行方法 @args
    • @annotation:匹配当前执行方法持有指定注解的方法

spring的AOP实现原理涉及两种方式,分别是JDK和CGLIB

  • 如果目标对象实现了接口,默认情况会使用JDK
  • 如果目标对象没实现接口必须使用CGLIB,使用CGLIB会获取不到方法上的注解,需要用其他方法处理

@EnableAspectJAutoProxy(proxtTargetClass = true) 强制使用CGLIB

数据存储

使用uft8mb4作为字符集,这样可以区分emoji,而校对规则使用utf8mb4bin,使用utf8mb4_gengeral_ci会有emoji无法区分的问题。


大表优化

  • 限定范围,如最近一个月的数据
  • 读写分离
  • 垂直分区(一个表拆成两个表)
  • 水平分区(分表)

DDL优化

  • 禁用存储过程、函数、触发器、外键约束
  • 允许为null的列在!='a'时为null的无法匹配
  • 枚举或整数代替字符串
  • Id为bigint即可
  • 避免使用decimal和浮点数数据,可以用bigint代替(*100)
  • cre和updatetime带上CURRENT_TIMESTAMP(0)和 ON UPDATE CURRENT_TIMESTAMP(0)
  • 整数存ip而不是字符串

DML优化

  • 不适用*查询
  • 避免使用!和<> 或or查询而用in,in的效率俄日logn
  • 连续条件查询用between而不是in
  • 模糊查询尽量不加前缀模糊
  • 使用union尽量使用union all
  • 插入数据如果是自增可以用select last_insert_id()获取自增值
     

数据通信

restful

表现层架构转移

  • Resource:资源,主要是数据
  • Representational:数据表现形式,如json。xml。html
  • state Transfer:状态变化

返回码

  • 2xx请求正常
  • 3xx重定向
  • 4xx请求有误
  • 5xx服务端错误

RPC

remote procedure call 远程调佣,如feign

 

 

 

 

 

 

 

其他参考资料:后端知识积累,https://g.yuque.com/fidel-yiu/yeyasn/ditrff

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值