安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

Java后端开发规范

2月26日 鬼神氏投稿
  Java后端开发规范
  一、技术栈规约
  二、命名规范
  三、Java代码规范(注释规范、异常与日志、代码逻辑规范)
  四、Mybatis与SQL规范
  五、结果检查(单元测试及代码扫描)
  六、安全规范一、技术栈规约
  二、命名规范命名使用英文词组合,严禁使用中文拼音或拼音首字母组合命名(专有名词例外)OrganizationTreeNode,OrganizationVO;不推荐使用PSTree,TlogsgroupId,package包名前缀统一为:com。wiwj包名第三位为产品分类名,如com。wiwj。cbs常量命名全大写,单词间下划线分隔。如:DEFAULTPAGESIZE其他命名遵循驼峰式命名法:类名:首字母大写的UpperCamelCase,如:Organization方法名、变量名:首字母小写的lowerCamelCase,如:orgName特定标识命名:领域模型增加类型后缀标识,如xxVO,yyDAO基类抽象类使用BaseAbstract等前缀标识设计模式类添加Factory,Builder,Proxy等标识Controller,Service,Mapper统一添加到对应分层目录接口实现类添加Impl后缀标识枚举类添加Enum后缀标识CRUD接口采用统一前缀:get,count,create,delete,update,batchCreate三、Java代码规范注释规范Java文件统一添加固定Header,通过IDE统一配置(codetemplates)Description
  authormazhicheng5i5j。com
  version1。0
  date{YEAR}{MONTH}{DAY}
  接口和方法统一添加JavaDoc标准注释缓存keyvalue并设定过期时间paramkey缓存对象的keyparamvalueList缓存对象return缓存是否成功TbooleanaddList(Stringkey,ListTvalueList);需暂留的弃用类方法添加Deprecated废弃标记和see链接指向新接口seecom。wiwj。common。cache。redis。JedisSentinelPoolUtilDeprecatedpublicclassJedisUtils{}异常与日志调用外部服务等可能异常的代码块,用trycatch代码块捕获并在catch中记录异常跟踪日志及业务逻辑处理禁止吞掉异常信息
  禁止catch里不做任何记录和处理,吞掉异常及其堆栈信息
  禁止:logger。error(XXX操作异常)或logger。error(XXX操作异常e)或e。printStackTrace()
  正确:logger。error(XXX操作异常,e)对于非预期的条件,尽量增加else记录跟踪日志禁止通过System。。out()打印日志(单元测试例外)日志记录logger需使用Slf4J代理声明,禁止绑死具体日志系统的API,避免后期更换日志组件导致代码的大量改动
  privatestaticfinalLoggerlogLoggerFactory。getLogger(OrganizationServiceImpl。class);
  如采用了lombok,可用Slf4j注解替代以上声明。对tracedebuginfo级别的日志输出,必须使用占位符形式,避免直接String拼接异常信息(即使日志级别不匹配也会执行拼接操作空耗资源)。
  正确写法如:log。debug(当前用户id:{},操作对象:{}{},userId,objectType,objectId);或条件输出形式如:if(log。isDebugEnabled()){log。debug(当前用户id:id,操作对象:objectTypeobjectId);}逻辑代码规范废弃的无用的代码一律直接删除,禁止以注释等方式保留。如需查看历史代码,通过SVNGit的history找回
  (无用的代码会干扰团队成员的阅读或被误调,越积越多会导致代码维护成本增高)接口类中的方法不需添加public修饰符需要序列化的Bean类统一实现Serializable接口并用IDE生成serialVersionUIDpublicclassMyEntityimplementsSerializable{privatestaticfinallongserialVersionUID123456L;。。。}常用字符串统一定义在常量类里,如:utf8,yyyyMMdd避免数字类型比较的坑:统一采用equals进行比较其值,不用进行比较,避免踩坑。ifelseforwhile语句后必须使用大括号,即使只有一行代码。(需求总是变化的,一行是暂时的)嵌套层次过多的代码块利用反向思维缩减层次方法单一职责:单个方法代码行数控制在100行以内,超长的需要拆分(拆分成多个方法或类)避免NPE(NullPointException)的一些建议:equals比较将非空对象前置:如true。equals(request。getParameter(isXx)),即使后者为空也不会导致NPE。数据库字段可空的映射属性使用包装类型定义:如基本数据类型的int映射到数据库的null值将产生NPE,而用吧包装类型Integer则不会。可能为空的变量进行必要判空,并在非预期条件下打印必要的跟踪日志,不但避免NPE,还非常便于跟踪调试。如:级联调用obj。getA()。getB()。getC()易产生NPE,先进行判空或使用JDK8的Optional类包装。调用Dubbo接口拿到返回值时,进行判空。封装统一的判空类用于常用类型的判空,代码需要判空时统一调用即可。如XX。isEmpty(),XX。isNotEmpty()遵循:Don’tRepeatYourself,即DRY原则。避免进行简单的复制粘贴修改,当出现重复代码时思考是否封装
  当代码中存在大量重复代码时,一旦代码逻辑变动将很容易导致顾此失彼,产生bug,非常不利于维护。Bean属性拷贝推荐用SpringBeanCopier或者Mapstruct,避免ApacheBeanUtils或调用setter禁止在循环中执行耗时的操作,如在循环中执行SQL语句调用外部服务等错误的示例:for(Longid:idList){循环执行SQL查询或调用外部系统接口,产生性能问题EntityentityxxService。getEntityById(id);。。。}此案例的更优方案是通过idList一次性查询获取到Entity集合,然后转换为MapId,Entity供后续获取。需要多次使用的可复用对象将对象单独定义,禁止多次调用取不同属性。如:StringnameuserService。getUser(id)。getName();LongdeptIduserService。getUser(id)。getDepeId();替换为:UseruseruserService。getUser(id);Stringnameuser。getName(),。可异步执行的耗时操作采用异步处理:使用SpringAsync或MQ,或夜间Timer定时常用数据考虑缓存,存入Redis,设置缓存过期时间需要保证写一致性的逻辑,在外层方法上添加事务Transactional(rollbackForException。class)四、Mybatis与SQL规范表名、字段名、索引等数据结构定义大小写:Oracle大写,MySQL小写。名称使用英文下划线,并控制总长度,如username。表名建议采用模块标识前缀,如basuser(如果模块库独立可省略模块名标识)禁止程序中的SQL使用并行计算parallel(t,n)SQL使用标准SQL,避免出现数据库特定的语法未经评审不可直接使用视图、触发器、存储过程SQLJOIN表数量不超过3张,超过3张表需要经过评审(拆分成多次单表查询、主表冗余、程序绑定idname映射、根据条件动态JOIN等)。合理创建索引,并尽量避免不走索引的情况:如LIKE右任意匹配(‘xx’,‘xx’)不走索引,换为精确匹配或固定前缀的左匹配’张’不等条件(!、、NOT)不走索引,应尽量避免(转换成INBETWEEN等)IS(NOT)NULL不走索引,应尽量避免(如字段给定默认值,避免NULL)索引列使用函数或隐式转换都将导致索引失效,如tochar(createdate,yyyymmdd)20190102禁止手动拼接SQL语句,利用Mybatis等ORM框架的动态SQL实现。参数使用{}(避免{}产生SQL注入问题)。禁止使用数据库处理函数decode(),改为Java枚举或Map定义,通过id进行绑定decode(client。TYPE,1,私客,2,店组公客,3,组团公客‘)禁止动态拼接时强加11之类的写法,如WHERE11。使用Mybatis动态SQL标签实现,如,,SQL中的参数类型确保与列定义一致,避免数据库隐式转换开销且无法使用索引,如:列定义为日期类型,参数要转换为Date日期类型进行比较:CREATETIME2019041423:59:59’CREATETIMEtodate(2019041400:00:00,yyyyMMddHH24:mi:ss’)列定义为数字类型,参数不用StringDEPTID123’ID主键自增的情况下,按createtime排序改为按ID排序,效果一样效率更高五、检查结果后端服务及其他需要自测的代码,编写对应的单元测试类,统一采用Junit,禁止直接在原Java类中写main()方法自测。单元测试会在打包前统一运行,可及时发现受影响的代码问题(比如新代码导致了之前的代码逻辑产生问题,如果有单元测试可在打包时及时发现)Junit单元测试类示例:publicclassTestApollo{Test标记为单元测试方法publicvoidtestApolloConfig(){StringappIdFoundation。app()。getAppId();预期结果断言Assert。assertNotNull(appId);}}IDE中安装代码质量检查插件:FindBugs及AlibabaJavaCodingGuidelines
  六、安全规约
  说明:本文限于篇幅,故而只展示部分的面试内容,完整的Java面试学习文档小编已经帮你整理好了,有需要的朋友点赞关注私信我777免费领取Java、大厂面试学习资料哦!
  原文作者:地球其实挺好
  原文出处:https:www。cnblogs。comzltblogp10839955。html
投诉 评论 转载

巨咖BATTLE秀炫酷开幕悦享精彩嗨不停北京U5PLUS咖位9月23日,巨咖BATTLE秀北京U5PLUS天团直播大会在抖音平台炫酷开场,7万级悦享生活家轿北京U5PLUS咖位出道,售价6。99万元10。09万元,将以7万元价格回馈用户……病毒都去哪儿了?为什么你的电脑现在很少中病毒了?过去病毒是打砸抢的土匪,搞的用户电脑无法正常运行;现在的病毒是小偷,偷偷拿走你的东西还要让你不知道,所以你就感觉现在很少有病毒了杀毒软件免费了〔捂脸〕〔捂脸〕蛇鼠一……网络对柳传志褒贬不一你认为他是好人还是坏人?历史会证明:柳传志就是历史罪人,一个披着民族企业的外衣,其实就是彻头彻尾的美国企业,为美军免费送电脑,公开资敌,投敌叛国,把全资国有企业通过自己诡异的骚操作,把联想改成自己的企……余承东和前华为太子李一男,哪个人对华为的贡献更大?李一男带着华为短短七年从销售额一亿做到到一百亿,可以说没有李一男就没有华为,华为的第一桶金CC08机和万门机都是李一男研发出来的,没有余大嘴华为手机一样成功,没有李一男华为早倒……Python其实很简单第十二章函数与变量的作用域在前面已经多次提到函数这个概念,之所以没有解释什么是函数,是因为程序中的函数和数学中的函数差不多,如input()、range()等都是函数,这些都是Python的标准函数,直……抗衰老科技初创公司AltosLabs获贝索斯等投资30亿美元据《泰晤士报》近日报道,亚马逊创始人杰夫贝索斯等已向细胞再生初创公司AltosLabs投资30亿美元。AltosLabs将开发生物技术,以恢复细胞的健康及它们对疾病、伤害甚至残……数科日报丨微博注册多项微博电商商标小鹏汽车回应因侵权被罚01丨瑞幸正式完成债务重组4月11日,瑞幸咖啡在官网发布公告称,公司完成金融债务重组,未来在任何司法管辖区不再受到破产或破产程序的约束。公告显示,瑞幸于3月4日向纽约南区……互联网经营到底如何?网传的大裁员时代是真的么?一直以来,互联网企业的程序员都是大家羡慕的对象,收入高是出了名的。不过这几年,陆续有35岁危机的说法,各种裁员的传闻也是屡见不鲜。随着去年下半年到今年中概股的大跌,限制资本无限……46940元起售,全球限量19台!iPhone13Pro乔布俄罗斯奢侈品制造商Caviar是我们的老朋友,时不时开始整活引发大量关注,例如推出定制版本的华为、三星等众多品牌手机,最多当然还是iPhone系列产品。Caviar最新推出定制……Java后端开发规范Java后端开发规范一、技术栈规约二、命名规范三、Java代码规范(注释规范、异常与日志、代码逻辑规范)四、Mybatis与SQL规范五、结果检查……捷报!华为发布业内首个5G路由器速度达4G的21倍!世界移动通信大会简称MWC,是全球移动通信系统协会组织举办的一场移动通信业的大会,来自世界各地的手机厂商、软件公司、设备提供商和其他行业的科技公司每年都会在MWC上推出自家的新……新能源光环褪色基金经理激辩风格转换新年以来,新能源板块连续两个交易日大幅下跌,中证内地新能源主题指数累计跌幅达7。29。与此同时,资金也在加速流出新能源板块。市场人士认为,新能源板块表现疲弱的背后存在机构调仓的……
腾讯再次大调整,这次轮到了哪些人oppowatch2和华为watch3区别点在哪里,对比哪个运动化外观,搭载代客泊车系统长安C385纯电轿车或明年上市韵达快递房山长阳分中心20余万件货物接受追溯调查2022年3月,互联网大裁员,你明白了什么?俄罗斯航天局网站遭到来自各个IP地址的大规模DDoS攻击!目新证据显示地球生命始于陨石2022年了,这些ES7我国将加强人工智能等关键技术标准研究田言梦语佳能停产,数码相机终究拼不过手机视频解说里的箭头是如何做的?平时怎么保护听力?听力不好怎么办?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利