博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java goodcoder的一些反思!编码思维杂谈
阅读量:5049 次
发布时间:2019-06-12

本文共 1343 字,大约阅读时间需要 4 分钟。

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

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

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

 

这次我通过的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)

 

转载于:https://www.cnblogs.com/hexie/p/4911108.html

你可能感兴趣的文章
PHP结合MYSQL记录结果分页呈现(比较实用)
查看>>
Mysql支持的数据类型
查看>>
openSuse beginner
查看>>
Codeforces 620E(线段树+dfs序+状态压缩)
查看>>
Windows7中双击py文件运行程序
查看>>
Market entry case
查看>>
bzoj1230 开关灯 线段树
查看>>
LinearLayout
查看>>
学习python:day1
查看>>
css3动画属性
查看>>
第九次团队作业-测试报告与用户使用手册
查看>>
Equal Sides Of An Array
查看>>
CentOS笔记-用户和用户组管理
查看>>
Mongodb 基本命令
查看>>
Qt中QTableView中加入Check列实现
查看>>
“富豪相亲大会”究竟迷失了什么?
查看>>
控制文件的备份与恢复
查看>>
返回代码hdu 2054 A==B?
查看>>
Flink独立集群1
查看>>
iOS 8 地图
查看>>