2024-01-09:更新

  1. 日志tag一定要细分,怎么打日志,怎么方便查询问题,99.99%可能用不到这些日志,一但出问题,没有日志,就没法定位问题,有日志可以甩锅,避免很多扯皮!

  2. 提交代码的时候要仔细审核

  3. 变量名要驼峰处理,要规范

  4. 接口注释要简单易懂

  5. mapper中数据库的字段要用resultmap处理,别直接用字段名,使用

  6. controller层中接口参数用req, service层中接受controller层的参数用dto,service返回给controller用bo

  7. 日期格式处理用org.apache.commons.lang3.time.DateFormatUtils 别用其他的,注意包名

  8. 判断代码是否提交,可以去git里面看,https://cfgitlab.cfmoto.com:8443/java/uip,切到自己的分支,

  9. 代码提交的时候一定要先拉取,遇到冲突先解决冲突, 合并代码,再提交,不要等出现重大线上事故再后悔

  10. 代码提交的时候要格式化,可以在提交代码这里勾选这个reformat,这样也会提交代码自动格式化

  11. controller层不要抛出异常,raise err,那样不就把错误传给用户了吗, 在service层处理,用try catch

  12. 代码在用到的时候再去new,别new 了,过了好几十行也没用到,

  13. 字符串判空别用 “” null, 用StringUtils.isBlank(sign)

  14. 写代码的时间永远是最少的,最快的,70%的时间设计,20%的时间调试, 10%的时间写代码

  15. 善于利用idea工具,善于使用DBG,

  16. 在设计前,设计时要多于前端,测试,设计沟通,避免之后出现返工的情况

  17. result如果没有返回值的,不需要返回String,直接返回Result即可 ,无须泛型,也不用返回ResultCode, 这样代码会简洁很多

  18. 所有的int都用Integer类型,包括出参和入参

  19. 所有的校验如果不通过,一定要返回错误的Result,还不是直接return null,这样前端会当做成功处理(访客系统提交预约传入参数校验),如果只是校验错误,前端只需要弹出错误提示,就直接写错误文案,不需要定义code,如 Result.buildErrorResult("人数不能为空");

  20. 这种重复代码调用的不能写,应该加一个变量接收,特别是调用service层, 不能为省一行代码,而直接写到一起,涉及到数据库的操作,调用多次那太可怕了

  21. 只有一个参数的情况下,就不要用对象传递,一般参数 >3个才用对象

  22. 每个接口的参数对象如果差别很多,不要共用一个对象,这里主要指前端传到controller层,

  23. 所有的类型字段,状态字段,如果值超过2个,需要加枚举对象,不要直接写1,2,3,都不知道代表什么意思,以后如果多加一个枚举值,或者修改一个枚举值,代码都不知道要改多少处

  24. 多个写操作的语句,需要加事务

  25. 不要直接导入类,要直接用类名. 不然代码可读性太差了,一眼不知道方法在哪里写的

  26. 代码中尽量不要有时间复杂度太高的操作,比如双重for循环,时间复杂度n^2, 数据量一大,耗时严重

  27. service层尽管返回result,但是controller层也不能不接受,在controller直接返回void,那样即使service层返回Result,但是依然无响应体

  28. 这种简单判空,不需要加通用errCode,下面那个状态不匹配要加一个通用errcode,不应会出现错误文案,相当于前端bug或者恶意篡改才会触发的就不用加通用errCode

  29. 改完的无用代码记得删除,即使内存不是自己家的也不能这么玩

  30. 错误的文案一定要多想一下,不能就直接写一个评价失败,评价错误,这些错误文案一定要让用户一眼就明白,不然他们还会找到技术看日志看代码才能定位问题,浪费很多时间,交互也不友好,这个错误文案很重要,一定要多思考,不要随便返回一个文案,在互联网公司,这一个文案可能别人就直接把公司告到倒闭

  31. 不能直接 sql里面写 state=1 type=1 这种,sql里面的值也要通过参数传递进来

  32. 前端没法直接传枚举对象,接口接收还是用Integer,只不过一般需要校验下前端传的1,2,3 是否再枚举值当中,有可能枚举值只有1,2,3前端传了4,这时候校验不在枚举对象中就报错了,说明前端bug或者恶意篡改

  33. 多个写操作,加事务,在写操作之前的判断,不需要进行抛出异常方式回滚,下面才是写语句,这种校验就直接return error即可,如果上面有写语句,下面需要回滚,才用抛出异常方式回滚

  34. 这种String类型的查询判断,如果前端传了空字符,可能就不生效了,需要加上 条件 != ”
    如: ,但是insert的时候也不需要加,即使设置的NotNull, 也没有设置default,在插入的时候也会有默认值

  35. 查询类的不需要加上这个注解,只有写操作,或者有敏感操作才加
    加了这个操作就代表要存入数据库记录,如果查询也加上,那记录太多了

  36. 数据库的注释和接口返回的,不一定要一样,数据库的注释和接口返回的,不一定要一样,接口的注释,是接口返回值的注释

  37. 方法命名一定小写开头,驼峰处理

  38. 不要图简单,方便,要理解封装、继承、多态,很多设计都是基于这三大特性

  39. 是一块逻辑的话不要把代码拆分开来,需要写在一起

  40. 解决的TODO记得删掉

  41. PO是数据库类,不能随便改动,要改动的话复制到BO层,再改

  42. springboot获取yaml配置,不要用@Envirment env.getProperty()来获取,用springboot注入的方式来获取,@Value(“${spring.profiles.active}”)
    private String profiles;

  43. 不用的代码记得删掉,不然越来越多,都不敢删

  44. 代码如果没有service层的其他处理没必要定义一个BO,直接用PO就行

  45. 0.5小时提醒是钉钉日程自带的, 不是定时任务触发的

  46. crud,除了update ,select很多方法可以公用,除非有些select很特殊,比如 用 != 或者不能共用参数对象的

  47. 批量删除增加,用select,和delete 直接 in(?,?), 写法类似这种,不要把foreach写在insert || delete外层

  48. 判断字符串不为空,用Strings.isNotBlank(),别用!Strings.isBlank()

  49. param.getRecDesc().length() > 100不要直接判断,这样会直接空指针,先判空在进行判断长度

  50. 从 0.1.0开始往上加 0.1.1, 最后一位是修bug的版本, 第二位是 小版本迭代, 第一位是大版本

  51. 字段名要记得加注释

  52. 私有方法最好也加上注释

  53. /** */用在方法和接口上

  54. lambda是java8除了g1垃圾回收器之外最重要的特性

  55. 循环里面不要涉及到与其他控件(数据库,mq,外部应用之类的)交互,尽量一次性批量
    查询,网络通信是很耗时的,单个查询可能会忽略不计,在循环里面查询就会很慢

  56. 两个下拉选框,第一个选择之后带出第二个,可以在第一个接口把全部关系数据返回,让前端处理,网络连接是很耗时的,每次选择都要调用接口,是很耗时的。


0 条评论

发表评论

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注

站点统计

  • 文章总数:304 篇
  • 分类总数:19 个
  • 标签总数:189 个
  • 运行天数:852 天
  • 访问总数:460603 人次
ICP备案号: 辽ICP备20003309号