在看完孤尽老师展示的UML图的标准答案后,说实话还是有点奔溃,自己做的和答案的差距还是挺大的。在绘制UML图上今后还需要多多努力。
工程结构规约
我使用Maven已经有段时间了,但一直不太清楚它的仲裁机制,通过这次学习算是搞了个基本明白。
Maven的依赖仲裁
- 按照DependencyManager版本声明进行仲裁
- 如无仲裁声明,则按照依赖最短路径确定版本。
- 若相同路径,则按照第一声明优先原则。
要解决依赖冲突,可以查看工程的依赖树,Maven中可以在用“mvn dependency:tree”来查看。而在intellij中,则更方便,如下图所示,按一下红色圆圈里的按钮,就能可视化dependency tree。
在TCP/IP规约中,我们复习了TCP/IP的三次握手和四次挥手。在四次挥手中,我们发现在最后一次挥手后,主动关闭方需要等待TIME_WAIT的时间才会彻底关闭连接。而TIME_WAIT一般是MSL(Maximum Segment Lifetime)的2倍,而MSL一般是2分钟。这个确实有点长,在高并发的环境下,句柄资源(file descriptor)很快就会就消耗完。
高并发服务器建议
- 调小TCP协议的time_wait超时时间
MSL: Maximum segment lifetime is the time a TCP segment can exist in the internetwork system. It is arbitrarily defined to be 2 minutes long.[1]
技术架构选型
我们回顾了各种服务架构的特点。在需求简单的时候,我们应该使用单体架构来开发。但是当需求变得越来越复杂,对于团队之间的合作的要求越来越高的时候,我们就应该选择微服务架构来进行协作和并行开发。
技术本身没有好坏,只有是不是适合特定的需求。为做好技术选型,我们要与时俱进,不仅要了解各种新兴技术工具,而且要从底层的原理去深入地解剖每个工具的优劣。在决定是否要采用一个技术框架时,我们要从多个方面去考虑,比如学习成本,维护成本,与现有技术的兼容性,是否满足业务的需求等等。
编码规约
在编写代码时,一定要注意细节。可能一个不经意的常量定义不规范就能导致产品在关键时刻掉链子。
当然,在这堂课中,印象最深刻的就是如何用Float类型来存储数字,以及为什么float存储数字会带来精度问题。其实float类型就没打算精准地来表示每个数字,它本身就是科学计数法的一种应用。而科学计数法则是用来表示极大数和极小数的,在表示这些极端数时,损失一些精度是完全在容忍的范围之内的。