Java开发的30点心得
来源:互联网 发布:软件著作权变更费用 编辑:程序博客网 时间:2024/04/28 01:11
本文首发在我的简书账号,原文
本文为自己在写Java代码中积累的一些心得,今天拿出来分享,不妥之处,请不吝赐教!若你有好的idea,也请评论区说说,我一并加上。
通用(General)
1.虽然有JVM帮你回收内存,但这不等于内存就不会溢出。请慎重new对象,能够复用就复用吧,new那么多对象,即使JVM及时帮你回收了,性能也是个大问题,更何况“JVM及时帮你回收”就是个不靠谱的假设。
2.有些时候,GC(Garbage Collection)是个鸡肋。
3.你理解JVM的深度决定了你的Java代码质量。JVM基础,看这里。
4.任何强制类型转化都是B-U-G的沃土(对任何语言都适用)。
5.Java源代码是个桃花源,没事就去逛逛,当然里面也有些代码写得很烂,不过极少。
6.字符串频繁改变时,请使用StringBuilder或者StringBuffer,把String扔了吧。三者的区别,看这里。
7.追求优雅代码之路永无止境,能否写出优雅代码取决于扎实的计算机系统观,对特定语言(比如Java)的理解深度。
8.折中是面临两难问题时的最佳解决方案,其来自于“中庸”思想。
9.拿到一个功能,半小时内没有思路,就去maven中央仓库找一个开源实现吧。开源时代,不必重复造轮子,但可造一个还没有的轮子并与全球分享。
10.虽然我们只使用编程语言写代码,但对程序员来说英语比任何编程语言都重要。
集合(Collection)
1.遍历集合时,有remove操作的情况下,不能使用下标遍历,会漏掉元素,需使用迭代器遍历。
异常(Exception)
1.低层抛出,高层处理。
2.catch多个异常,使代码更简洁。
3.使用带资源的try语句,资源自动关闭,使代码更简洁,资源需实现AutoCloseable和Closeable接口。
4.异常跟踪栈中,排在最前面的就是异常的根源所在,参考活动记录的原理(《编译原理》里有活动记录的解释)。
日志(Log)
1.飞机失事了,找黑盒子,程序失事了,找日志(日志对程序的重要性可见一斑)。
2.程序中出现e.printStackTrace(),难道应用上线后,我们专门搬个凳子盯住控制台?不然有什么意义呢?请使用logger.error([额外的描述]+e.getMessage(),e)代替,[额外的描述]可选。
3.程序中出现System.out.println([额外的描述]),道理同上,请使用日志代替它吧。
4.让日志成为程序的守护神。
JDBC
1.如果关系型数据库是金矿,那么SQL就是提炼金子的利器,花点时间练练它。磨刀不误砍柴工。
2.禁止使用SELECT *。
虽然很多开发经理都写了这条,但是总有开发人员不理你,我给你个办法,拦截所有SELECT,一旦发现SELECT *,给他个BadSQLException,让他疼上几次就好了!
3.和笛卡尔积作斗争,禁止使用FROM table1,table2,tableN。
实际应用不是我们在学校做的那些“XX管理系统”,这走的是笛卡尔积啊,如此大的开销,你透支得起?请使用连接查询吧!避免的方法和3类似。
4.SELECT时,不要取多余的数据,但也要保证能取到的都一次拿到(当然内存要放得下,否则另当别论)。
5.INSERT和UPDATE,能够批量更新就不要单条更新,访问数据库是I/O,开销很大,次数越少越好。
6.那些不经常变化的基础数据,一次捞出来缓存吧,会给你带来成倍的性能提升。
7.数据库连接池是个好东西,你值得拥有。
多线程
1.如果在你心中,实现多线程的方式只有extends Thread或者implements Runnable,你该去看看implements Callable了,实现Callable,线程可以有返回值,还可以抛出异常,何乐而不为?
2.Java线程池是个花花世界,何不常去逛逛?
3.synchronized是个脾气大的家伙,不要轻易使用它,非要使用的话,锁的代码块越小越好。
设计模式
1.单例模式要保证反序列化后仍然是单例,需要有readResolve方法。
2.通用的算法(业务)步骤,采用模板方法模式设计吧。
实践出真知,不断更新中……
- Java开发的30点心得
- 嵌入式开发的几点心得
- 51单片机开发的几点心得
- 51单片机开发的几点心得
- 开发几点心得
- 最近Java编程的几点心得
- VB.NET分层开发的几点心得
- 关于java和jar命令的几点心得
- 关于java和jar命令的几点心得
- WM_NCHITTEST的几点心得
- 今天的几点心得
- 注册表的几点心得
- VB数据库编程的几点心得
- 使用strcpy的几点心得
- 使用Eclipse3的几点心得
- 使用strcpy的几点心得(转)
- web service的几点心得
- 关于tomcat配置的几点心得
- 前段开发有必要知道的 10 个 JavaScript 难点
- 自定义计时器
- [译]定时任务Cron表达式详解
- 解决mybatis查询日期时间数据得到long类型数据的问题
- JavaScript闭包
- Java开发的30点心得
- jQuery datatable 跳转至指定页
- vue.js-脚手架
- 记录IDEA学习过程——第一集
- H-Index
- BZOJ 2763 [JLOI2011]飞行路线
- gitlab-runner-maven卡死的情况
- 【Spring】 (5)根据机器环境不同运行不同代码
- 文件上传漏洞(绕过姿势) 转载防丢失