开发生涯中踩过的坑

踩过的坑,含着泪也要爬起来….

1、poi表格样式生成很慢,2千多行的数据就需要10s,单元格越多越慢
2、数据库一定要每天备份,如果可以,每小时备份一次
3、数据库操作前一定要备份
4、操作日志一定要有,关键操作日志一定要详细
5、过早的优化是没用的,需求总是在变
6、代码嵌套不能超过3层,缩进不能超过3层
7、redis查询禁止使用模糊查询,例如:keys *123456 ,如果数据量大会直接让redis挂掉
8、代码完成后一定要自测
9、绝对不能用 rm -rf $VARIABLE/dir,如果变量没取到值,就是全部删除了
10、价格一定要用double类型,mysql中float类型最长最7位,包括小数点,超过7位会出现精度丢失,double类型最大精度16位
11、服务之间的依赖一定要是单项依赖
12、url的处理一定要编码,解码,不然接受到的中文是乱码,不编码的URL发送请求时会出错
13、使用AOP拦截springmvc的controller时要注意,必须在springmvc.xml中配置<aop:aspectj-autoproxy proxy-target-class=”true” />,因为controller中的bean不是交给spring管理,而是由springmvc的bean容器管理
14、对于状态变化敏感的表,需要把每次的状态变化记下来,方便排查问题
15、boolean类型自动生成get和set时不是get,是isFlag,Boolean类型生成的是get和set方法
16、Beanutils赋值属性时,如果是list或map,赋值的是引用而不是new一个list
17、报表字段可以是基本类型,这样在更新时就可以避免非空判断
18、页面上要限制字数尽量不要使用subString,如果是按照字节切割会有问题,会把一个汉字切割成2部分,这就造成编码错误
19、发布订阅是实时的,只有在线的订阅者才能收到消息,而生产/消费不是不需要消费者在线
20、和别人做对接一定要有日志记录,方便核对数据
21、执行大量sql脚本时,数据库会发生死锁
22、File.pathSeparator指的是分隔连续多个路径字符串的分隔,如a.txt,b.txt,指的是 , 号,File.separator才是用来分隔同一个路径字符串中的目录的,例如 /
23、hive要单独部署,因为hive要从hadoop中拉数据,当数据量很大时会占满网卡流量,所以要尽量避免hive直接从hive中拉数据
24、不要用异常控制流程,更不要让异常参与到业务当中,异常只是用来处理的
25、运维的监控都是已经出问题了,所以一定要有能提前发现问题的办法,比如代码中的邮件通知,主动提醒告知
26、情况太多,定义非必填参数的code就是个错误,试图把每种情况都用code表示是个错误的想法,应该是只把关键必填参数用code定义,且一类错误用同一个code表示
27、springmvc中controller里面的方法必须有参数,即使get请求也需要有一个request或response参数
28、和前端打交道还是要用弱类型语言,比如nodejs,而不是用go、java之类的强类型语言
29、private的方法中使用了spring注入的对象,是注入不进去的,对象是null
30、保存到数据的时间不对时,都是时区问题,1.检查数据库时区,2检查jdbc.url的serverTimezone值
31、tomcat处理虚拟路径是把应用当成两个应用,所以如果两个应用向同一个文件写日志就会有问题
32、设计系统要有一个预留量
33、工时预估要乘以1.5倍,特别是涉及到和别的部门联调时
34、开发不懂业务,很容易埋坑
35、开发不能陷入一直修bug的泥潭,如果这种情况持续了很长时间,而且时间上允许,就要考虑重写了
36、如果一个问题出现了两次,那么一定要想办法解决
37、对于需要判断记录唯一的方法一般是:先查询后更新,但是如果有多个服务,这种方法就不适合,就需要使用数据库的ON DUPLICATE KEY UPDATE函数了
38、空字符串用split分隔后的数组长度是1,不是0
39、对于接口可以留一个后门,在header中增加一个debug参数、或token参数,如果有这个值并正确,就输出详细的错误信息,方便定位问题
40、操作线上数据库一定要备份当前表
41、save/update、add/edit,尽量统一
42、脚本能用crontab管理的尽量使用crontab,方便迁移服务
43、离线数据和实时数据如果采用分表的策略,需要处理跨零点的问题
44、如果需要保证数据一致性,遇到任何异常都应该主动抛出,暂停程序,而不是忽略异常,继续执行
45、hive添加字段后需要更新元数据,不然查询新的字段值全是null
46、流水日志一定要有唯一ID(雪花ID),例如广告请求日志、网站访问日志等等,方便后期核对数据

持续更新中…

JouyPub wechat
欢迎订阅「K叔区块链」 - 专注于区块链技术学习