正好洗完澡,有空就把这个坑填了。java
说道百度的编码规范,确实能从严谨性锻炼人的思惟。python
先谈一下背景吧。百度有一个代码规范考试,须要你提交一份符合考试要求的代码,以后会有两审去给你提出意见。设计模式
此次我经过的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)