一.常用技巧
1.避免使用不易理解的数字,用有意义的常量来代替。
2.不要使用难懂的技巧性很高的语句。
3.在处理String的时候,推荐使用StringBuffer类。
String类将StringBuffer类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。当我们在构造字符串的时候,我们应该用StringBuffer来实现大部分的工作,当工作完成后将StringBuffer对象再转换为需要的String对象。如果用String对象代替StringBuffer对象的话,会花费许多不必要的创建和释放对象的CPU时间。
○ StringBuffer description = new StringBuffer();
○ description.append(str1).append(str2) .append(str3);
○ model.setDescription(description.toString());
× String description = “”;
× description = str1 + str2 + str3;
× model.setDescription(description);
但是在上述例子中,如果被拼接的对象是静态常量的话,直接使用“+”来拼接会效率更高一些。
4.为了避免死锁,请不要滥用或者使用不必要的synchronized关键字,应该在必要的时候才使用它。
5.在写代码的时候,请考虑性能的问题。但是并不是说要花很多时间在优化代码上,而是我们时刻应该提醒自己要注意代码的效率。
6.内存中的静态集合类要清楚的知道何时清理,否则可能出现内存泄露的情况。
7.避免使用while循环时出现死循环或者长时间无法跳出的情况。
8.对Collection,Map接口的类对象初始化时最好要先分配好合理的空间大小(建议),并且根据自己的需求选择合适的对象,我们常用的集合对象包括ArrayLIist,HashMap,TreeMap,当然还包括Concurrent类库,ConcurrentHashMap,CopyOnWriteArrayList等。
大家调用ArrayList的构造函数时,其源码为:
1 public ArrayList()
2
3 {
4
5 this(10);
6
7 }
8
9.不要用Timer定时执行任务,因为Timer有很多弊端,其采用单线程方式执行所有的TimeTask,如果某个TimerTask很耗时则会影响到其他TimerTask的执行。另外Timer不会捕获由TimerTask抛出的未检查的异常,故当有异常抛出时,Timer会终止,导致未执行完得TimerTask不再执行,新的TimerTask也不能被调度,最后Timer对调度的支持是基于绝对时间的。
所以我们选择jdk1.5引入的ScheduledThreadPoolExecutor或者ScheduledExecutorService。
10.开发人员慎用线程,除了上面的定时任务执行使用的ScheduledExecutor,因为如果线程不当的话,会造成很大的麻烦。
11.注意优化循环体,循环是重复运行的地方,如果循环次数很大的话,循环体内不好的代码将被放大而突出。
12尽量少用new实例,尽量在使用时再创建该对象,尽量重用对象。如ByteBuffer,每次不要都申请一个空间,而要clear后复用。
13.尽可能的优先使用Jdk提供的API,而不是自己写,如数组复制等,因为一般API都处于了性能的考虑。
14.针对异常处理,一定要调用e.printStackTrace()方法打印堆栈而不是调用e.getMessage()这样的方法。
15.统一用Log4j等log工具而不是用System.out.println()等方法打印调试,非常不方便维护。
16.一定要有缓存的概念,玩家游戏的一个操作都不能直接操作db,都是直接更新缓存中的数据,最常用的缓存就是本地内存。
17.对于DB的处理,大家最好同一规范,都用一个专门的JdbcTemplate或者一个封装数据库操作,接口的facade。
18.慎用反射,反射效率很低。
19.字符串操作很复杂的话,推荐使用强大的正则表达式进行处理。
20.设计到游戏中状态的判断,推荐使用位运算。
21.用统一的序列化接口序列化游戏中的数据。
22.游戏服务器代码中除了注释通常不能出现中文。
23.服务器通讯时能用byte的不用short,能用int的不用String,尽量减少通讯时的数据承载。
24.尽量不要在方法上加synchronized,这样效率会非常低。
25.涉及到到db编码时,原则即"一个东西不能存到两个地方",保证唯一性,避免不一致。
26.时间处理上要统一,统一用毫秒。
27.数据运算过程中,要注意数据的溢出处理。
28.对Concurrent类库有足够熟悉后才可以使用,不要认为用了就不必同步了。
29.尽量使用局部变量,调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中,速度较快。
30.写代码过程中要结合Junit反复测试,要写测试文档,画UML图等。
二.面向对象设计原则
1.单一职责原则:SRP-single responsibility principle
每个类应该只有一个职责,对外提供一种功能。
2.开闭原则:OCP-open for extendsion,close for modification
对类的改动是通过增加代码进行的,而不是改动现有的代码。
3.里氏替换原则:LSP-liskov substitution principle
在任何出现父类的地方都可以用它的子类来替代;同一个继承体系中的对象应该有共同的行为特征。
4.依赖注入原则:DIP-dependence inversion principle
要依赖于抽象,不要依赖于具体的实现。
5.接口分离原则:ISP-interface segregation principle
不应该强迫客户端程序依赖他们不需要使用的方法,一个接口不需要提供太多的行为。
6.迪米特原则:LOD-law of demeter
降低各个对象之间的耦合,提高系统的可维护性。在模块之间,应该通过接口进行通信,而不会理会模块的内部的工作原理。
7.优先使用组合而不是继承原则:CARP-composite/aggregate reuse principle
复用对象的时候,优先考虑组合,而不是继承。因为在使用继承时,父类的任何改变都可能影响子类的行为。
三.附eclipse开发最常用快捷键
Ctrl+L-查找行数
Ctrl+T-查找当前接口的实现类
Ctrl+ShiftO-快速生成import/去掉未使用的import声明
Alt+/-内容辅助
Ctrl+O-显示大纲
Ctrl+/-行注释,取消行注释
Ctrl+D-删除当前行
Ctrl+K-快速向下查找
Ctrl+Shift+K-快速向上查找
Ctrl+Shift+T-查找当前workspace的type
Ctrl+Shift+R-查找resource
Ctrl+Shift+G-查找类方法和属性的引用
Ctrl+Shift+F-格式化代码
Alt+左右方向键-前进和后退历史记录
F2-重命名(Alt+Shift+R)
F3-快速定位光标位置的类,方法或属性
F4-显示类的继承关系
Ctrl+Shit+/-块注释
Ctrl+Shift+\-取消行注释
Ctrl+1-快速修正
Ctrl+G/Ctrl+鼠标左键-查找当前元素的声明
Ctrl+H-综合搜索
Ctrl+Alt+上下方向键-复制一份代码
posted on 2011-08-06 18:12
landon 阅读(2209)
评论(0) 编辑 收藏 所属分类:
Program 、
GameServer