WebGame服务器Java编码技巧版本1.0

一.常用技巧

    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的构造函数时,其源码为:

    public ArrayList()

    {

        this(10);

    }

     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+上下方向键-复制一份代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL Deadlock ERROR 1213 (40001)是一个常见的错误,通常发生在高并发的情况下。这个错误表示在一个事务中出现了死锁,也就是两个或多个事务相互等待对方释放资源的情况。下面是排查这个错误的一般步骤: 1. 查看错误日志 首先,查看MySQL的错误日志,以了解死锁的详细信息。可以使用以下命令查看错误日志: ``` sudo tail -f /var/log/mysql/error.log ``` 2. 查看死锁信息 在错误日志中,可以看到死锁的详细信息,包括哪些事务参与了死锁、哪些表和行受到了影响等。可以使用以下命令查看当前的死锁信息: ``` SHOW ENGINE INNODB STATUS; ``` 3. 分析死锁原因 分析死锁的原因非常重要,因为只有找到原因,才能采取相应的措施来避免死锁。通常,死锁的原因包括以下几个方面: - 并发访问同一行数据 - 事务执行顺序不当 - 事务中使用了不同的锁类型 4. 解决死锁问题 解决死锁问题的方法也有很多种,根据死锁的原因不同,采取的措施也会有所不同。以下是一些常用的解决方法: - 优化SQL语句,减少事务执行时间 - 使用合适的锁类型,例如行锁、表锁、读锁、写锁等 - 调整事务隔离级别 - 对于高并发的场景,可以考虑使用分布式数据库或者缓存等技术来降低单个数据库的压力 综上所述,排查MySQL Deadlock ERROR 1213 (40001)错误需要综合考虑多方面的因素,并采取相应的措施来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值