平时工作遇到的一些小问题

我平是的工作主要是写一些功能模块和接口,以及bug的定位和修复,罗列一些工作中遇到的小问题,算是个整理

1 一次开发dubbo接口时,在dubbo调用的接口里又调用了第三方接口,于是我本地同时启动两个springboot项目,但是一直报错,后来才突然意识到,是dubbo的默认20880TCP端口和tomcat的8080端口冲突了,且注意,dubbo的请求与响应实体类要实现序列化接口,另外,dubbo的测试可以直接使用命令行,telnet IP port,调用方法用invoke,不要再去安装jemeter插件啦

2 将Arrays.asList()转为set时,有一次的场景是去掉set中的"",我直接调用了remove()方法,但是debug发现无法删除,查阅资料发现是与hashCode算法有关,解决方案是,将得到的set集合作为入参新建一个set即可

3 @Slf4j注解使用的log日志,打印时常常使用log.info("{} get***failed!","service")的占位符打印,但是在error级别的日志就不在支持占位符,你这么写它能通过编译,日志不会打印

4 在idea代码编辑界面的行号位置,鼠标右键点击第一个annotate可以看到这行代码的git提交者信息

5 必要的操作,如必须写入DB的日志,流的关闭等,最好放到finally代码块处理

6 set集合和list集合的retainAll() removeAll()这些方法可以帮你很好的提高效率

7 ES的deleteByQuery请求可能导致数据删除不干净,最好是把要删除的数据统一放到某个索引中然后再删除索引

8 Bigdecimal构造方法参数不要传dubble类型,会有精度问题,尽量使用String入参

9 如果一个模块中调用了多个接口,接口无顺序要求,且整体新能较差,可以考虑启用多线程异步化接口调用

10 反射很好用,尤其是当你需要做新旧数据对比,同时记录对象中那些字段值变更的时候,利用反射可以快速获取字段名称和值,且在java中,反射获取的字段顺序和类中的定义顺序是一致的

11 对于第三方接口的调用,可以设定一个日志记录表,每次调用接口时,记录请求的时间,请求体,接口响应以及调用成功/失败的结果记录,写入日志表的操作放在finally模块中,这样排查起问题来很方便

12 开发中时常用到各种常量,通常会建立一个常量类,最好可以将这个类直接声明成接口,将常量声明为public static final

13 如果你的系统中需要处理多个不同版本之间的ES问题,构建请求的时候建议直接手写json请求体而不是使用restHighClient去代码构建,因为不同版本对代码构建的兼容可能有问题

14 oracle在插入数据时候,超过4000字节的字符串会被oracle自动转为long,插入时会报类型错误,先将字段类型改为long,再改为clob可以解决这个问题

15 尽量使用批量处理的SQL而不是循环写DB,频繁的IO磁盘会导致性能降低

16 在处理字符串的时候,习惯使用equals和spring的StringUtils,尽量避免==和!=判断,同时注意indexOf方法,有时这个下标方法会很坑爹

17 无论你多自信,写完的代码先debug是个好习惯,我就出现过把三个本该不同的变量粘贴成同一个

18 保护好自己的头发,不要得罪产品经理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值