随笔(2014.4)

1.不是所有设备都适合自动寻址,如果一个设备没有显示器,没有键盘接口,那么如果自动寻址失败,这个设备就可能再也找不到了。这也是有些设备比如路由器的ip固定死了为192.1.1.1的原因。

2.sip协议中之所以有1xx的回复是因为有响铃业务的需求,在去连接一个需要可能长时间响应的服务器,一般不会定下一个固定的等待时间等待服务器响应,服务器回定时回送一些“响铃”消息告诉连接的人在继续等待。

 

3.实体加载的顺序也很重要,像一些表示系统状态的协议要最后注册,例如注册协议,一般用户在登录成功后,即认为这个系统已经完全初始化好了,但是如果把登陆协议放在最前面,那么可能后面的业务模型实体还没有注册到系统中,这个时候发送未注册到系统中的实体的请求就不会处理,返回未知错误。

 

4.框架、设计模式这两个概念总容易被混淆,其实它们之间还是有区别的。框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块;代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。

框架与设计模式虽然相似,但却有着根本的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。
体系结构亦可称为架构,所谓软件架构,根据Perry和Wolfe之定义:Software Architecture = {Elements,Forms, Rationale/Constraint   },也就是软件主架构   ={组件元素,元素互助合作之模式,基础要求与限制}。Philippe Kruchten采用上面的定义,并说明主架构之设计就是:将各组件元素以某些理想的合作模式组织起来,以达成系统的基本功能和限制。体系结构又分为多种样式,如Pipes and Filters等。  
框架(Framework)亦可称为应用架构,框架的一般定义就是:在特定领域基于体系结构的可重用的设计。也可以认为框架是体系结构在特定领域下的应用。框架比较出名的例子就是MVC。     

 

5.对于启动顺序,如果有请求来的数据和主动上报的数据要同步的情况,就要考虑启动的顺序。不然如果先请求一部分数据,在加载模块,如果接受上报数据的模块启动晚,那么可能在启动的过程中数据发生变化,而上报数据接收模块没有启动好,最后造成数据的不同步。像实时告警的处理,如果客户端一开始就查询所有的告警,然后所有的告警都是主动上报,那么在启动过程中发生的告警变化客户端由于接收告警上报的模块没有启动会造成数据的不一致。

 

6.“需求可测性”大概网上查了下,自己简单总结下有以下主要目的:1)“列出使用的软件环境、硬件环境、外部设备、满足基本功能和性能的测试用例”,能够列出最基本的测试用例也是“需求是否可测”的表现,如果用例都列不出来,当然不可测。2)确定软件需求能否量化测试,例如有些功能是可以量化测试的,比如处理并发用户的数目,但是有些不能量化测试,比如显示图标的大小,位置。3)特殊测试用例的构建,例如压力测试、性能测试环境的构建,响应时间测试的构建,有些测试用例构建比较复杂,需要单独提取出可测试性需求,需要单独开发针对此项指标的测试工具。 后面两点是对第一个目的的补充与扩展,“需求可测性”是对写测试 用例前的一个评审,主要类似风险评估,像软件设计前的设计评审一样,找出开发(测试)的风险点与解决办法。

 

7.对于服务器操作系统,windows Server 2008是比较常见的,现在有了2012,其中企业版为64为操作系统,能够支持最大64G的内存。网上查了下,目前服务器程序还是32位的比较多,通常很多把32位程序放到64为的机器上运行,一是客户就是用的64位机器,二是内存比较大,虽然一个程序不能用那么多的内存,但是可以保证有充足的内存给一个32位的程序运行。如果64位的机器用的也是2g的内存,那可能32位的程序在64位同样2g内存下运行,意义感觉不是很大了。

 

8.抛出异常的情况,char *p = new char[10]; p[11]这个操作并不会抛出异常,只是计算了一个地址,并没有访问。

 

9. #include <afxmt.h>
#include <afxtempl.h> 要写在前面,否则恶心的“window.h”

 

10. 在用vs2005编译时候,生成的dll会依赖安装vs时候安装的一些文件,在发送别人时候可以用depends看下,把所需dll一并发送过去。

 

11. 客户端为utf-8,服务器为ASNI,GB2312那么客户端发送的协议里面是什么编码的呢?难道是UTF-8的么,如果是的话岂不是服务器收到的中文汉字看不到?
几个问题,其实服务器也不用看到是什么编码,因为客户端才呈现服务器只是收到一堆字符,然后放入数据库,什么也不管。
web上报的告警是什么编码的呢? 都是utf8的。

 

12. xxx 不是xxx 的成员,可以对某个函数改个名字试试。可能有重名的可能。

 

13. 在window下,“守护进程”指的是无控制终端的进程。

Linux下运行进程只需要后面添加&就可以实现。有的时候需要设计一个可以同时在Windows和Linux下运行的守护进程

为了避免过多的修改代码。可以添加如下伪指令来实现:

#ifndef WIN32

#pragma comment(linker,"subsystem:windows entry:mainCRTStartup")

#endif

设置链接选项,subsystem为windows,即GUI程序,窗口必须显示创建;entry指定进入的函数为int main(int argc, char*argv);

其实可以直接指定链接选项中的subsystem参数,把入口参数改为int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);

只不过在使用ACE情况下,需要入口函数必须是main,所以为了方便在Windows和Linux下同时运行,只好采用上述方法实现。

 

14. 多用多态,代码写的越少,后期维护越方便,但是是在写的过程中反复重构。


15. 不要总想着先写着后期再改,考虑全面点,会中途少写很多代码

 

16. 领用CData可以实现不定参数的传递,把参数以字节形式放在CData中,函数接口就可以统一。


17. 协议设计不仅要能表达清楚需求,而且要容易解析(包括写代码和解析速度),传输上要有拥塞控制,冗余字节要少

 

18. 如果服务端是监听,而且在连接建立后要主动先发送数据,该如果把句柄告诉服务端呢,服务端知道有句柄回调,但是如何区分是哪个子站的连接呢?目前想到的只有子站ip是固定预先知道好的,然后服务端根据ip找到对应的handle。


19. 而且如果子站与一个主站建立多余一个的连接,就没法区分了。这种情况在104中应该是不允许的。

 

20. 104问题,主站方向上数据激活问题,如果控制站发送了startDT,被控站回复了startDT,然后发送了初始化结束帧,控制方向认为可以发送数据了,如果控制站发送了stopDT,并且被控站回复了stopDT,控制站控制方向再次需要激活的时候发送了startDT,被控站回复了startDT,被控站还需要在此回复初始化完成帧么?(按道理,应该回复)

 

21. 在删除有定时的对象的时候析构时候一定要StopTimer因为还有定时器线程在运行,如果析构函数中不调用StopTimer定时器函数又访问了对象内的成员,会访问错误。而且一定要wait线程的完全退出。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值