如何设计系统

2019, Jan 10    

系统设计心得

1.通过划分实体和确定领域边界,确定设计的业务实体

2.对每个业务实体设计增、删、改、查接口,并且在这些接口前面增加修饰词

3.考虑接口支持批量操作

==============by =============

0.一般的异常栈信息,根源错误是由栈顶错误导致的,并逐级传递。

但是,含有cause by的异常信息要自底向上找错误根源

定位错误的顺序要按照请求的顺序来,按照流程往后找!!!!

1.仔细看抛出异常的原因是什么,从中得到提示对症下药

eg:user的id为空导致的外键异常

2.如果遇到空指针异常,首先要定位到空指针异常的语句是在哪一行。首先要查找的原因是,对象很可能是null

eg:代码提示空指针异常

3.使用一个对象的时候,要考虑,在这之前对象已经存在了怎么办

eg:如session中的order信息

4.如果一个数据的设置不对,就要去找数据设置源头是否成功,数据终点得到是否成功。类似于二分法查找。

数据出错的原因一般是get set方法出问题了

5.能用copy的时候就不要手动打字,容易使代码出错

6.导入一个类,如果这个类不能被加载,很有可能是这个类的字节码没有编译生成

==============by21read=============

1.有些时候发现说是因为Tomcat已经启动而产生的报错,重启电脑是最有效的解决方式;

除此之外,一些已经报错问题的原因已经解决了,但是继续报错,重启电脑也是有效的解决方式。

2.工程之间存在相互依赖的关系时,项目报错,一定要顺着依赖关系去迎刃而解。

================bye3mall============

1.一句SQL无法处理复杂业务场景,那么可以建立一个临时表,用于过度操作

================byUDCar============

1.单元测试所在的类里面不要有显示构造函数,函数不要有返回值

2.要仔细阅读官方文档,对常见工具的使用要熟练

例如:在配置消息队列时

①没有仔细读activeMQ的官方文档(不知道请求的格式)

②不会使用POSTMAN发送POST请求

③不能熟练使用Java 写HTTP的GET、POST请求

④没有admin:admin@的base编码常识,这也和不会熟练使用POSTMAN有关

3.相信一些常用的基本工具是没有错误的,也就是在错误排查时,首先把常用工具认为是正确的

例如:POSTMAN发送请求没有效果,说明请求链接不正确

================byActiveMQ============

1.发送http请求报出no protocol错误,是因为没有URL没有带上http协议

2.发送GET、POST请求,GET和POST要大写

================byPanda============

================投标项目============

================短信平台项目============

1.遇到工具启动,如docker、nginx等出现错误,一定要去看日志,不然解决问题就像无头苍蝇

2.用nginx服务器的windows版本的时候,出现了很多奇怪的玄学情况,立即尝试停机后,是否能继续访问。因为一个很容易忽略的情况是:不小心开启了两个后台nginx,导致修改配置后,没有效果。(所以,建议只进行启动、停止,不要用reload操作)

3.不是业务上必须依赖别人的接口,千万别依赖,要降低耦合为主

4.获取数据或者接收用户数据时要考虑数据出错或没有数据的情况,进行异常处理

5.相信计算机的逻辑一定是对的,有玄学的地方一定是错误源点。(注重逻辑分析,分析所有相关情况,不放过疑点)

首先,根据错误源点分析出可能出错的地方

其次,根据错误源点到可能错误的地方的距离,由近及远的排出错误

6.找错误,首先找到从日志上显示代码最近执行到的地方,然后从这个地方进行逻辑分析,找出可能的bug(这一个过程一定要心细,发现有玄学问题,就回过头再找一下,多半是不仔细导致的)

================日常=====================

1.工具安装或软件使用首先看官方文档,别的博客通常错误连篇,官方文档可以做事提高效率

2.查询R可定要涉及:分页、排序和多条件组合,还有两个维度模糊和精确,查询为空要返回标志位

3.接口要考虑CRUD的前缀条件,以及C是否批量;U中的减法要考虑业务边界问题以及是否批量;D是否要批量

4.数据要考虑加密存储、加密传输问题、备份

5.MySQL数据库要考虑:数据库连接池、分页插件、事务开启

6.调用接口后,系统自动生成的业务参数应当返回给调用者

7.页面显示要考虑没有数据和数据过多的显示方案,后台应该有字段反应是否有数据

8.属性的命名区分度要大(通过命名的首部或尾部能一眼看出区别,而不是中间有区别)

9.设计接口或操作,要让陌生人在不知情的情况下,按照一般逻辑,也能操作正确。总得来说就是一句话:习惯优于配置

================并发诡异问题=====================

1.如果使用了多线程,某块代码被执行多次,这就是并发导致的问题,可以通过加锁解决

2.如果线程不知道去哪儿了,一定是在某个地方死循环了,重点检查含有循环的代码