分类 经验 下的文章

问题

字段别名

同一个含义的属性在不同地方出现的时候名称可能有细微变化,如果将其视为不同字段在需要修改的时候可能需要修改多处,一定程度上违背的数据初始化的初衷

命名规范

  1. 对相似的中午应该有相似的英文
  2. 类似id和no,seqNo和serialNo之间的选择

缩写规范

  1. cust和cus

结构体规范化

例如公共的审计,逻辑删除,拉链字段可以作为一个整体进行规范

应用标准

  1. dto代码扫描
  2. 开发工具自定义字典生成
  3. 数据库ddl扫描

解决思路

对公共字段设置抽象参考

标准字段可以直接设置长度名称等属性也可以从一个抽象定义中继承长度,码值等属性
在使用的时候不能使用抽象定义,配合代码生成工具们可以对码值生成枚举

设置词典和词根

使用词典来规范专有名词的使用

定期扫描

数据标准化极大概率是一个持续进行的工作,所以事后补偿机制是很有必要的

深分页

深分页也就是在分页的场景下查询靠近末尾的页,因为数据库原理的问题,以每页10条数据为例查询第n页的数据是总是需要先查询10n条数据然后丢弃10(n-1)条数据,所以查询越靠后花费的时间越长.当表字段很多的时候可以使用延迟join来优化性能

select * from table all inner join(
 select id from table limit x,y
)id on all.id=id.id

延迟join的核心思想是在分页查询中只查询主键(或者唯一索引)减少结果集的大小,然后在外层通过inner join主键查询,查询少量数据,但是这种优化方式对小表可以产生负优化

背景

因为国产化需要,计划将部署服务使用的基础镜像替换为麒麟v10,替换完成后遇到了中文乱码的情况,按照以前处理方案,需要安装locales,并重新生成本地化文件但是在麒麟镜像源中没有找到locales软件包.且从网上找到的解放方法大多是需要外网环境,不适用

解决方法

安装软件源中的glibc-all-langpacks-2.28-98.p02.ky10.x86_64.rpm软件包,并设置环境变量

export LANG=zh_CN
export LC_ALL=zh_CN

需要注意,不同于其他系统,语言代码后面需不需要加.UTF-8,加了之后反而不会生效

问题现象

在idea中打开class文件会提示行号与反编译的结果不符,正常打断点挑食的时候会发现代码没有在正确的位置停下(一般是在打断点的行之前停止)

可能的原因

目前这个问题只在idea社区版中发现,专业版不会有这个问题,考虑到两个版本使用的反编译插件不同(有些文件在社区版上无法反编译出内容,只有函数名),应该是有些编译工具在编译的时候虽然删除了注释的内容,但是在计算行号的时候没有忽略这些空白行,反编译插件反编译的时候重新处理了行号

可以解决但是不太优雅的方法

在调用class内方法之前打断点,然后利用step into进入方法内部,这时候就可以利用单步调试一步一步走了,但是如果在jar包内的调用链路过长,还是会有问题,这种场景暂时就无解了

将spring cloud应用部署在有多ip的服务器或者容器内的时候,注册中心有时候会显示错误的ip,通常这不会影响使用,但是有些情况下会显示为主机名导致openfegin不通,偶然看到可以通过spring.cloud.inetutils下的配置项来控制忽略网卡或ip,也可以指定某个固定的ip