zoukankan      html  css  js  c++  java
  • java goodcoder的一些反思!编码思维杂谈

    正好洗完澡,有空就把这个坑填了。

    说道百度的编码规范,确实能从严谨性锻炼人的思维。

    先谈一下背景吧。百度有一个代码规范考试,需要你提交一份符合考试要求的代码,之后会有两审去给你提出意见。

    这次我通过的java,从这次考试分如下几点谈一谈:

    一。代码的质量:线程安全,同步问题,异常处理,设计模式一类一类的

    以下还是用我自己代码来说明吧!

    单例模式:

    举个例子:

    这个地方是要实现单例,让整个系统中只存在一个MessageCenter,从下图可以看到我创建一个私用成员变量messageCenter,

    同时实现了一个私有的构造函数,保证调用MessageCenter类只能使用getInstance()去创建(唯一入口)

    然后回到第一张图,评审人提出来的问题是:同步问题。其实这个一开始我很困惑,我已经加了synchronized

    去进行同步。(这里可以这样理解,就从我目前的能力来看)句子内加了synchronized(class)代表了在这个class

    里面获取了一个互斥锁mutex,之后整个代码块{}结束了之后释放互斥锁。

    假如学过python的话可以这样理解:

    with threading.Lock():

      something todo

    回到问题,我已经构建了添加单例的代码块为synchronized,那为何还有同步问题?

    其实查询了一下单例模式的例子,不难发现其实我还是少了一个null的判断,代码如下:

    在synchronized代码块里面还有一个判断messageCenter为空?这是为何?

    这个具体的描述还是看看单例模式的那篇文章吧,双重null判断的含义不同,前者是为了让已存在了单例后不需要去在

    创建浪费很多时间,后者则是避免在A进程执行sychronized模块(创建MessageCenter对象的时候),又有一个进程B请求了

    互斥锁,虽然没进去在外面等待,但是等A执行完毕释放了互斥锁,B之后的步奏就是做和A一样的事情,在创建一次。结果:单例失败!

    谈一下对自定义异常 

    首先为什么要自定义异常?

    主要原因是Java提供的异常类在还是不能很好的阐述异常发生的原因(虽然内置的异常类型已经够多了)

    从我下面的这个截图来阐述吧!首先我声明了一个自定义异常 MessageNotFindHandlerException 

    从名字就能很清楚的了解,消息找不到处理器(这句话其实可以说从业务的这个纬度去表诉的,那是不是也可以理解为自定义异常

    可以很好的描述业务逻辑的异常,使程序可读性更强也更有健壮性)

    我这个异常继承了一个RuntimeException(运行时异常导致运行不了)

    从评审的角度来看,缺少包装异常,那什么是包装异常?

    其实我弄了很久都没弄明白,后面找评审人,评审人只打开了Exception类的实现,我就大概了解该去改什么了!

    很明显我们能看到对于Exception 起码存在三个构造函数 Exception() Exception(String message) Exception(String message, Throwable cause)

  • 相关阅读:
    分层图最短路(DP思想) BZOJ2662 [BeiJing wc2012]冻结
    动态规划 BZOJ1925 地精部落
    线性DP SPOJ Mobile Service
    线性DP codevs2185 最长公共上升子序列
    数位DP POJ3208 Apocalypse Someday
    线性DP POJ3666 Making the Grade
    杨氏矩阵 线性DP? POJ2279 Mr.Young's Picture Permutations
    tarjan强连通分量 洛谷P1262 间谍网络
    树链剖分 BZOJ3589 动态树
    二分图 BZOJ4554 [Tjoi2016&Heoi2016]游戏
  • 原文地址:https://www.cnblogs.com/hexie/p/4911108.html
Copyright © 2011-2022 走看看