从事java EE开发4年多了,从2011年尾开始参与一个大型电子商务系统,一直做到现在。项目在2012年10月完成了验收,2012年11月开始转运维,巧的是自己跟另外一个同事被客户指定为长期固定运维人员。就这样开始了1年多了运维工作。虽说是运维,但我们不需要管理服务器,不需要管理数据库,做的工作就是修改上生产后项目出现的一些问题(处理用户报障),同时开发一些新的需求(开发新功能),以及不断的优化重构项目源码,处理一些原功能存在的严重性能问题,提炼或从新定义共用的业务API等。
下面列举一些我这1年多运维工作中碰到的一些常见的不规范的代码。(之前有整理过文档,所以现在写这个博文一些内容直接copy过来的)
一、存在警告的代码。
1、冗余转换。
2、集合类未使用泛型。
3、定义未使用的变量或方法。
4、import引入了过多的未用到的类。
二、其它不规范的代码
5、在spring容器中存在的bean却使用new方式来构建实例。
6、业务层捕获了异常却不抛出,导致事物无法回滚,而且异常没有抛出,但功能出错时,使用火狐的firebug插件也看不到错误信息,加大的代码的调式难度。
7、大量定义辅助性的vo类。(个人建议,开发业务功能时,尽可能使用pojo,封装数据或接收参数pojo搞不定的时候使用Map<String, Object>,而不用再定义一个java类,因为里面大量的字段跟pojo是重复的,大量的setter,getter操作也影响性能)
8、NullPointException,在对一个对象进行使用前,没有判断是否非空导致的空指针异常。
9、业务代码写到了controller层。(这样写不但降低了代码的可读性,而且如果controller中写了增、删、改的业务代码时也破坏了事物的完整性,一些对spring理解不深,对事物控制没什么概念的新手经常这样搞)
10、常量类的大量重复定义。(开发时可能各个开发人员很少去看别人的代码,如果项目经理没有统筹规范好的话,很容易导致开发人员自己定义常量自己用,而有些常量是整个系统可以共用的,大量的重复定义加大了维护的难度。)
11、在js中拼写HTML代码。(对于很多jQuery用的不熟的新手经常这样搞)
12、与金额有关的字段,很多被定义成了double类型,其实double是存在精度问题的,应该采用BigDecimal替换之。(运维期修改了很多这样的代码)
以上列举了12种常见的不规范代码,下面我贴一些代码举例说明。
1、冗余转换。
上图中因为List使用了泛型,下面的for循环中就不需要强制转型了。(当然转了也不会有错)
2、集合类未使用泛型。
上诉报警告的代码虽然也没错,但jdk1.5就推出了泛型,所以用集合类时应该养成使用泛型的习惯。
3、定义未使用的变量或方法。
上诉报警告的代码编译也不会错,但是既然一个变量定义了没有用到,就应该删掉。
多定义一个变量,应该就会多占用一点内存。
4、import引入了过多的未用到的类。
这个问题同样也不会引起编译错误,但没用到的类没必要引入进来。可通过按ctrl+shift+o来去除多余的import,也可通过设置eclipse,在保存java文件时自动删除这些多余的import,eclipse的设置方式如下图:
5、在spring容器中存在的bean却使用new方式来构建实例。
我见的最多的是使用在业务bean中注入dataSource,然后new 一个JdbcTemplate对象,其实JdbcTemplate对象也是在spring定义了的,所以直接注入JdbcTemplate对象即可。而且spring容器默认的bean的scope是single=true,即单实例,直接注入JdbcTemplate对象可以避免大量JdbcTemplate实例占用内存(虽然会被gc自动回收掉)。
如下图:
上图注入的是一个dataSource,其实可以直接注入JdbcTemplate对象的,因为JdbcTemplate对象也定义在了spring容器中,见下图:
所以前面的代码可修改为直接注入JdbcTemplate对象,修改后如下图:
6、业务层捕获了异常却不抛出。
直接打印了一下,写这样代码的开发人员明显是刚从学校出来的。
7、大量定义辅助性的vo类。
如上图代码,会员各种数据按业务需要分别存放在dealer表跟dealer_personal_info表,当视图层需要会员数据时,需要将这两个表的一些数据进行返回。一些开发人员首先想到的就是新建一个vo类,里面定义好视图层需要的所有字段,然后从数据库查询数据封装好这个vo类并进行返回。这样做其实对性能影响挺大的,特别当查询很多数据,在一个循环里大量的setter getter。让我来重构这个代码,首先我就会删掉DealerInfoVo.java这个类,然后将会员数据封装到一个Map<String, Object>中,然后返回给视图层使用。
修改后的代码如下图:
现在都流行“约定优于配置”,更应该采用Map的方式。
8、NullPointException,在对一个对象进行使用前,没有判断是否非空导致的空指针异常。
这个不举例了,有个1年开发经验的朋友都知道。
9、业务代码写到了controller层。
有开发经验的朋友都应该知道业务代码不能写在controller层,而要写到业务层或说应用层。
10、常量类的大量重复定义。
为避免大量重复的枚举常量定义,我的建议及现在的做法就是使用枚举类。首先把所有数据表字段有枚举值的字段定义一个枚举类,在开发时告知大家对于数据表枚举字段不允许定义常量,而要统一使用对应的枚举类。
以上是个人这些年的一些开发经验总结和见解,特同大家分享,欢迎指正,讨论。
相关推荐
基于C++开发的WEB服务器,支持C/C++、Python、Java等多语言混合开发WEB应用
基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助
基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助
该靶场仅供学习使用!
电影详情链接 图片链接 影片中文名 影片外国名 评分 评价人数 概况 相关信息 https://movie.douban.com/subject/1292052/ https://img2.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg 肖申克的救赎 The Shawshank Redemption 9.7 2529468 希望让人自由 导演: 弗兰克·德拉邦特 Frank Darabont 主演: 蒂姆·罗宾斯 Tim Robbins ... 1994 美国 犯罪 剧情 https://movie.douban.com/subject/1291546/ https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2561716440.jpg 霸王别姬 9.6 1880353 风华绝代 导演: 陈凯歌 Kaige Chen 主演: 张国荣 Leslie Cheung 张丰毅 ........
汽车中间件市场调研报告:2023年全球汽车中间件市场销售额达到了78亿美元 在数字化转型的浪潮中,汽车中间件作为连接硬件与软件的关键桥梁,正引领着汽车行业的新一轮变革。随着全球汽车产业的快速发展,中间件市场规模持续扩大,展现出前所未有的增长潜力。然而,面对复杂多变的市场环境和不断涌现的新技术,企业如何精准把握市场脉搏,实现可持续发展?本文将深入探讨全球及中国汽车中间件市场的现状、趋势及竞争格局,为您揭示咨询的重要性。 市场概况: 根据QYResearch(恒州博智)的统计及预测,2023年全球汽车中间件市场销售额达到了78亿美元(约7803百万美元),预计2030年将达到156亿美元(约15630百万美元),年复合增长率(CAGR)为10.3%(2024-2030)。这一数据不仅彰显了中间件市场的强劲增长动力,也预示着未来巨大的市场空间。 技术创新与趋势: 随着自动驾驶、车联网等技术的不断发展,汽车中间件正面临着前所未有的技术挑战与机遇。新一代中间件需要具备更高的实时性、更低的延迟以及更强的数据处理能力,以满足复杂多变的汽车应用场景。同时,云计算、大数据、人工智能等技术的融合应用,将进
python语言mp3pl爬虫程序代码QZQ
# 小语种字体TTF文件转PNG图片的方法 ## 准备工作 1. 下载python3.9,推荐3.6~3.9,几个依赖包在这个版本运行的好。 2. 下载 FontForge-mingw-w64 ,可自行下载,或从文末打包好的工具包直接使用。 3. 下载需要导出的字体ttf文件,最好先装在本机系统上。 ## 导出方法 1. 把 `tts2png2.py` 文件复制到软件的bin目录下。 2. 修改 `tts2png2.py` 文件中的字体路径,注意Windows用双斜杠。 3. 从bin目录打开终端(管理员模式启动)。 4. 运行脚本 `./ffpython .\tts2png2.py`。
在21世纪的科技浪潮中,人工智能(AI)无疑是最为耀眼的明星之一,它以惊人的速度改变着我们的生活、工作乃至整个社会的运行方式。而在人工智能的广阔领域中,大模型(Large Models)的崛起更是开启了智能技术的新纪元,引领着AI向更加复杂、高效、智能的方向发展。本文将深入探讨人工智能大模型的内涵、技术特点、应用领域以及对未来的影响。 一、人工智能大模型的内涵 人工智能大模型,顾名思义,是指具有庞大参数规模和数据处理能力的AI模型。这些模型通过深度学习算法,在海量数据上进行训练,能够学习到丰富的知识表示和复杂的模式识别能力。与传统的小型或中型模型相比,大模型在理解自然语言、生成高质量内容、进行跨模态信息处理等方面展现出前所未有的优势。它们不仅能够执行特定的任务,如图像识别、语音识别,还能进行创造性的工作,如文本生成、音乐创作,甚至在某些情况下展现出接近或超越人类的智能水平。 二、技术特点 海量数据与高效训练:大模型依赖于庞大的数据集进行训练,这些数据涵盖了广泛的主题和情境,使得模型能够学习到丰富的语义信息和上下文理解能力。同时,高效的训练算法和硬件加速技术,如TPU(Tensor Processing Unit)和GPU,使得大规模模型的训练成为可能。 自注意力机制与Transformer架构:许多领先的大模型采用了Transformer架构,特别是其自注意力机制,这种设计使得模型在处理序列数据时能够捕捉到长距离依赖关系,极大地提高了模型的表达能力和泛化能力。 多任务学习与迁移学习:大模型通常具备多任务学习的能力,即在一次训练中同时学习多个任务,这有助于模型学习到更通用的知识表示。此外,迁移学习使得这些模型能够轻松适应新任务,只需少量额外数据或微调即可。
下垂控制-基于T型三电平逆变器的下垂控制,电压电流双闭环,采用LCL滤波,SPWM调制方式 1.提供simulink仿真源文件 2.提供下垂控制原理与下垂系数计算方法 3.中点平衡控制,电压电流双闭环控制 4.提供参考文献
城市选择器一个仿大众点评的城市快速选择器, 最少只需 一行 代码即可启动城市选择器, 支持页面样式修改,多元化自定义截屏 版本日志V0.4.6优化地理位置设置时有时会设置不成功问题修复其他若干问题修改UI默认主题色V0.4.5修改设置位置信息方式,由之前必须在打开页面之前获取位置信息改为允许用户在打开页面后设置位置信息,具体使用方式见 Step3简化配置项,不需要在AndroidManifest中再注册Activity,并默认隐藏titlebarV0.4.3修复更新数据库表结构后第一次进入会闪退问题V0.4.0数据库表结构修改,增加了高德地图citycode设置gps城市的api略有改动见 Step3V0.3.3紧急修复一个可能导致内存泄漏问题优化提高滑动检索效率隐藏下拉刷新labelV0.3.1在搜索框后面添加一个清空搜索框按钮修复搜索框中输入空格会搜索出全部城市问题修复搜索结果弹出框中文字在不同theme下显示不同颜色问题,现在已统一为黑色其他调用时参数合法性校验V0.3.0简化api调用形式,修改为Rx形式,见操作步骤
慢性病大数据分析处理慢性病项目
Multisim单片机资源单片机C语言程序设计实训100例提取方式是百度网盘分享地址
PMSM永磁同步电机最大转矩电流比MTPA控制仿真,弱磁控制仿真,前馈补偿仿真程序,详细解析教程文档。 这是一份非常完美的仿真文件及详细教程,从仿真效果图看转速、电流及转矩跟随非常稳定。 该算法架构包含如下模块: 1)SVPWM矢量控制模块 2)转速环PI调节器、电流环PI调节器; 3)MTPA调节器; 4)弱磁控制器; 5)前馈补偿; 一份该仿真的算法说明文档,每一步都有详细介绍如何搭建,包括环路参数怎么算,拿来做毕设或者学习都很方便; 几篇参考文献; 一篇作者自己写的算法总结,让你少走弯路; 两个视频;
手绘卡通儿童人物幼儿园教学课件模板
Simulink电动汽车仿真模型(包含行驶阻力模型,工作模式切模型,驾驶员模型,PID控制模块等,NEDC,CLTC工况仿真结果)东西很全
是一款全功能的备份软件,支持增量备份、差异备份、完全备份和同步备份,帮助用户轻松保护关键文件。支持多种存储选项,包括本地硬盘、USB驱动器、网络文件夹、云存储和 FTP 服务器等。 【使用方法】: 1. 下载并安装 Perfect Backup。 2. 打开软件,选择备份类型(增量、差异、完全或同步)。 3. 指定源文件和目标存储位置。 4. 设置备份计划,选择备份频率。 5. 点击“开始备份”,执行备份任务。
基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助
资源描述: HTML5实现好看的创意房屋设计公司网页源码,好看的创意房屋设计公司网页源码,创意房屋设计公司网页源码模板,HTML创意房屋设计公司网页源码,内置酷炫的动画,界面干净整洁,页面主题,全方位介绍内容,可以拆分多个想要的页面,可以扩展自己想要的,注释完整,代码规范,各种风格都有,代码上手简单,代码独立,可以直接运行使用。也可直接预览效果。 资源使用: 点击 index.html 直接查看效果