2011-2012工作总结

**********************************************************************************

*                                   工  具                                       *

**********************************************************************************

1,     飞秋:/nic IP

2,     vc 6.0的spy++获取窗口句柄

3,     版本控制工具:svn

                ·注意:

                        用了其他地方的东东的时候,要自己再提交上去,否则,别人是更新不下来的。

                        (隐形错误!!)

4,     vs2008:

                1,。def文件:导出接口,然后才会产生lib文件。

                导出函数前,加了extern ”C",因为不加的话,编译器会修改它(c++下面哦!)。

                加了的话,c也可以用啦。。

                        还有需要注意的是,删除def后,要把工程属性的input的def也要删除。

                2,      在工程名上,右键,选中view class diagram,,可以看到类图。。不错。。

                3,      tools的attach to process这个工具,可以运行时,调试。

                注:

                        在任务管理器中的名字:devenv

5,     Notepad++

6,     dependency:查看动态库link的函数有木有都连接到。

        右上角的 两块(从上到下):该dll用到选中的dll的那些函数,米有的就是红色;

                下方是,选中的dll中有哪些函数。

7,     灵格斯翻译专家;

8,     谷歌浏览器;

9,     谷歌的桌面书签         

10,飞鸽绑定网关的格式:/nic 192.168.13.142

11,126邮箱,设置一下自动保存,否则发送邮件大于1M的,就不会保存下来。

               

               

**********************************************************************************

*                                   NET××××                                     *

**********************************************************************************

1,RTSP

        0,     RTSP简单地说就是对从Intel上下载的数据进行控制播放;

                RTSP是在RTP之上的协议,使用TCP和RTP完成数据传输;

                实现RTSP的控制功能,一个是协议,还要支持协议的服务器和播放器;

        1,     与HTTP的区别:

                        HTTP传送HTML,此传送多媒体数据;

                        HTTP的响应是单向的,此时双向;

                RTSP与万维服务器的区别:

                        支持流式播放,边下载边播放;

                RTSP(控制),RTP(流)

        2,     RTSP的报文格式:

                        请求报文和响应报文。

                        主要是请求OPTION(有那些方法),DESCRIBE(媒体描述),

                                                SETUP(请求会话),PLAY(请求播放)

                                                TEARDOWN(停止)

        3,     RTSP和RTP的端口是挨着的。

       

2,     模板中的设备断线和流断线的重连。

        1,设备:设置定时器,定时间向设备发送请求,看设备有反应没;

        2,流  :设置定时器,利用时间差,(定时器中的时间是参考时间,填流片的

                         的时间是会因为网络而延迟。)

 

3,     公司业务的理解:

        一个抽象设备,对应几个抽象通道,一个通道对应几个用户。

       

4,     设置回调函数的方法,把一个线程内的数据给回调出来。注意,因为是要把一个类的函数

        给设置进去,所以:

                要static声明;

                因为,还要用此类的东东,所以,把this指针作为此static的参数。

 

5,     extern "C"

        C++中用到c写的dll,#include头文件时,

        #ifdef__cplusplus

        extern"C"

        {

        #endif

                #include".."

        #ifdef__cplusplus

        }

        #endif

        主要是f(int, int)在c++中编译成f_itn_int大概这样

        编译器,根据看到的原型进行相应的编译,比如,看到是c的函数声明(c++中extern”C")

        ,那么就按照这个声明方式进行函数的编译。

       

6,      一个算法,将周围的小方块整理成大的方块

 

7,     LoadLibrary();

        GetProcAddr()

 

8,     写过HostTest

 

9,     写在组件下方的宏的作用:

                我觉得:1,公开的接口,开始的就是创建host的类。

                                2,用内存池分配对象,不会造成内存浪费。

 

10,细节:

        1,ltmsel是64位,dword是32位:时间的表示64位才表示的完!!

        这是需要注意的细节的地方。

        2,windows下应用程序分配的地址空间2-4g,linux下可能更大,所以,用atoi64

 

11,不要轻易全局

       

12,placement new:new对象有两个动作,空间+构造。

        形式:  ·char* buff = new char[sizeof(OBJ)*N];

                         memset(buff, 0, sizeof(OBJ)*N);

                       

                        ·OBJ* pObj = new (buff)OBJ;

                       

                        ·必须显示调用析构函数

                       

                        ·delete []buff;

                       

13,来这里工作,最开始的体会是,类的继承者,使用者,设计者的概念,从protected理解到的。

 

14,模板与一般函数的编译的区别:

                ·模板在用到的时候才实例化。所以,会造成

                        f.hf.cpp | main.cpp中,包含f.h但是却没有实例化。

 

15,设置回调函数:A要用到B中源源不断的数据。

                                设置回调函数。在A中,b.setCallBack。因为作用域,所以,只有

                                把A的static函数设置进去。同时,把A的this指针一起穿进去。。

                                所以,setCallBack(DWORD pThis, pCallBack fun);

 

16,     purecall错误,,纯虚构函数,不能在基类中的构造函数和析构函数中调用。

                                在其他函数中是可以的。

 

17,#if !defined()对typedef的判断是无效的:一个是预编译一个是编译时

 

18,fatal error C1088: Cannot flush compiler intermediate file:'C:\DOCUME~1\ADM

        c内存空间不足

 

19,拷贝构造函数与赋值符号重载的私有化的原因:

        主要是因为,如果,不去写这两个东东的话,会位拷贝,拷贝指针就麻烦老。。

        所以,偷懒呗,就直接私有化了。。呵呵。。

        不过,要会怎么写这两个函数,前者简单,后者,注意要判断自赋值。

 

20,在往队列中增减元素的时候,用到线程锁比较多。。      

 

21,char c;

        while((c= fgetc(fp)) != EOF)

        {

                putchar(c);

        }

        1,//这里有错。

        2,//错误分析:

                        1,如果char被编译器认为是unsignd char,那么while循环永远不成立;

                        2,如果,自己定义char为signed char,那么读到0xFF字符时,就会误

                                认为是文件尾,就会提前退出

        3,//修改错误,声明c为int                     

       

22,习惯在析构函数前写,virtual

 

23,熟悉一个环境:

                怎么进行错误检查,

                assert的行为和意义

                开发了什么调试的工具或者函数没

                熟悉公司的打印日志的一些函数

               

**********************************************************************************

*                                                                                    *

**********************************************************************************

1,      异步IO

2,      对rtp扩展头的处理

3,     调试:OSMsgQ.h中报func参数个数不对,一层层看下去,,

4,     PFUNC pp = &CInsLibrary::Func;否则就是Compiler ErrorC3867

5,     指针跟&有别

 

**********************************************************************************

*                                   C++                                              *

**********************************************************************************

1,     纯虚析构函数,还是要把{}加起,因为,对象的销毁是需要父类的纯虚函数的。

        否则就会在linking是出错。

2,     类的头文件,没有任何分配内存,它更像一个使用说明书。这也是理解初始化例表的

        关键。初始化例表是在自动分配内存之前。对于对象的成员变量,这点非常重要。

3,     模板中的析构函数都是virtual,delete时的自动化;

4,     c++在设计函数时,是基于重载的考虑,所以编译出来跟c有所不同。这也是extern “C"的意义。

5,     {

                CNPLOCKlock;//利用局部对象自动销毁。

                。。。

        }

6,     static属于类的,在单件构造中,static函数只能访问米有this的成员函数和变量;

        static成员,在外面初始化。

 

工作习惯总结:

0,     工作框架:

        1,每日文件夹:文档,时间记录,图片,资料;

        2,收集程序的codelib;

        3,有个自己的tst工程。

1,     自己的东西提交完整,什么是完整,就是别人用我提交的东西,可以编译运行。

        注意:1,库所要的要提交完整;

                  2,要用自己的svn(虽然看到是提交了状态,但是是别个人的。这个很容易忽略)

                  3,depends和ldd来查看需要哪些库。

                  4,保持清醒,直到自己的组件是要哪些库的,表含糊。

2,     工作要问对人,善于问,提前想好问题。

3,     听清楚别人说的是什么?确认。

4,     养成复习昨天代码的习惯;

5,     养成计划一周,特别是周五和周六,要细致才有效果。

6,     传达消息的时候,用明显的符号区分,表空格

7,     对于别人的请求,首先是自己去查看是个什么意思。

                                |

                                V

                        向有关负责人反映此请求

                                |

                                V

                        最后才是去处理此请求。

8,     适应每次变化,也要注意变化会带来什么变化。onvifreceiver.h头文件没有提交

9,     磨刀很多时候不费砍柴功。。。(至少在自己这一级别上来说)

10,z_主题公园

11,一个草稿文件,专门记载代办事项。

 

mfc随笔:

1,     a,//{{afx_data  ------------------ (.h文件中声明)

        b,//{{afx_data_init----------------- (构造函数中初始化)

        c,//{{afx_data_map-------------- (DoDataExchange中变量与控件关联)

 

 

线程随笔:

1,     critical section;event; semaphore;

       

设计模式随笔:

1,     弄过单件构造模式,

       

       

编程习惯一二:

1,     类的函数的实现,把默认的传参也靠过来,因为编译器不允许这样,然后再注释掉。     

2,      结构体清零的重要性.

3,     一个指向派生类的基类指针,当调用只有派生类的函数时,要强制转换。。

4,     sock初始化为invalid_socket(-1),初始化为-1。不是0哈,,

5,     打印调试信息#ifdef DEBUG #endif

6,      #defineOUT这样的字眼,是程序可读性强

7,     断言的认识。

                断言的行为,会暂时中断程序执行,用户可以选择“继续”,“终止”,“重试”。

                程序中断言编程,在断言的后面,一定要越过异常条件。eg:

                                        ASSERT(p!=NULL);

                                        if(p!=NULL)//这句就是我说的要跳过异常条件

                                        {

                                        }

8,     在调试的地方,写好///111这样的标识,,好删除。

9,     if for while else if与()之间有一个空格

10,

一个真实的故事:

在SunOScar 4.0.3下,打印程序/usr/ucb/lpr有时会产生一条错误信息,表示“内存不足”,拒绝打印任务。

最后确定下来,是一个Interpositioning导致了这个错误。

 

bug具体:

程序员写了一个函数mktemp(,,),而库中有这个函数mktemp()。而,getwd()调用mktemp,就调用

到需要传三个参数的那个函数。这时,把一个参数压入栈(因为只有一个参数)。但是,提取的时候却三

个参数。当然是垃圾了哦!根据垃圾内容的不同,有时会以“内存不足”提示。

 

解决方案:

不要让程序中的任何符号成为全局的,除非友谊吧他们作为程序的接口。

所以要声明为static。

 

******************************************************************************

编程规范:

1,int* p; int& r;

        禁止一行定义指针,普通变量和引用变量。

2,接口的使用说明在.h文件中书写;

        接口的实现原理在.cpp文件中书写。

3,对于较难理解的地方加适量说明。

 

沟通技巧:

1,     特别怀疑别人没加载上自己的组件的话,就在程序的一开始部分,打印自己的信息。

       

**********************************************************************************

*                                   快 捷 键                                     *

**********************************************************************************     

快捷键总结:

ctrl+>

shift+上

alt+f8

f3

alt+f4

w+e

w+d

w+f

 

 

感悟:

c++自动化;

extern和static的感想

回调:

**********************************************************************************

*                                    知识源                                      *

**********************************************************************************

知识源:

1,      新浪下载;

2,      整理URL;

3,      CSDN;

4,      开源中国。

 

 

**********************************************************************************

*                                   学习习惯                                     *

**********************************************************************************

学习感悟:

1,     没有文档的规范不是很好的东东,最好表去。。

2,     对于不熟悉的东东,还是要结合程序,如果是光板的,不是非不得已,

        不碰他。否则浪费时间。

3,     现象是什么?

        解释是什么?

        支撑这个解释的理由是什么?

        例子是什么?

4,     思考为什么不懂

5,     怎么看本好书:

                ·技术产生的背景是什么;

                ·这个技术怎么用;

                ·用在什么情况下(多半是背景,也可能可以解决更多的问题)

                ·需注意些什么

6,    

        学习使用一个东西的需求:(比如socket)  

                1.      Socket的机制是什么?

 

                2.  用C/C++写Socket需要什么头文件、库文件、DLL,它们可以由谁提供,安装后一般处于系统的哪个文件夹内?

 

                3.  编写Socket程序需要的编程基础是什么?

 

                4.  Socket库内最重要的几个函数和数据类型是什么?

 

                5.  两个最简单的例子程序;

 

                6.  一个贴近应用的稍微复杂的Socket应用程序。

 

**********************************************************************************

*                                   素  材                                       *

**********************************************************************************

1,     windows中\n\r

        unix\n

        mac\r

 

2,     a.out的来历:PDP-7(一种语言)不存在链接器,编译器把源文件连接,编译,把汇编语言

        输出到a.out中。

        但是现在多了个链接器,所以,因为历史的原因吧,虽然是链接器生成了这个文件,但仍然

        叫做a.out。

 

3,    

 

**********************************************************************************

*                                   杂  记                                       *

**********************************************************************************

杂记:

1,      有时候就是很怪,一方面,不要过了,一方面,就要过了。

        矛盾,才能平衡生活。

        就像骑自行车,整个过程,一直都是在左过了,纠正,右过了,纠正,,,

        只是这些动作太自然,以至于忽略了这确实是平衡

        ,而对象是矛盾。

2,      纪伯伦:我们已经走的太远,以至于我们忘记了为什么而出发

3,     虽然不晓得会确定发生什么,但是可以比较确定的会发生的程度和时间(推迟决定)

4,      指导性的书虽好,但如果你连需要发酵的葡萄都没有准备,怎么可以两成一瓶好酒呢?

 

**********************************************************************************

*                                  DEBUG库                                       *

**********************************************************************************

1,     动态库相关错误:

        最常见的是,目录下放有两个相同组件。。衰,,

       

2,     ·现象:

                mtest.obj:errorLNK2001:unresolved external symbol __imp__htonl@4

        ·原因:

                缺少库

        ·解决方法:

                #pragma   comment(lib,"ws2_32.lib ")

                或者

                project--setting--link--library/module加入:ws2_32.lib

 

3,     在默认参数时,A::A(int i, int j = 1)那么初始化时,一个也可以。       

 

4,     怎么分析断言:见codelib的同名。问题出在,第一行,下面的函数栈调用。特别是(126)

                表示,断言在126行。

               

5,     在公司中,传地址,用%u传过去,用%p传会有问题。

 

**********************************************************************************

*                                  零碎的知识                                    *

**********************************************************************************             

0,

        pascal        从左到右          系统                   

        cdecl         从右到左          调用者(主要用于变长参数)

        stdcall       从右到左          系统

       

1,     static 

        static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;

        static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;

        static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝.

 

2, double为8

 

3, malloc一类的考题记得,释放空间

 

4, 用两个栈实现一个队列的功能?我没考虑到的是,判断专门弹出栈顶的那个栈是否为空。

 

5, 频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现? c用宏定义,c++用inline

 

6, 网络字节序是:大端法(主要考察htonl)

 

7, 用什么函数开启新进程、线程

 

*8,Pb是一个局部指针在函数返回的时候就被释放掉了,但是其申请的空间还在,所以会出现内存泄漏。

    (自己忘了考虑内存泄露这块了)

       

1,      c中定义的int等,是至少多少位,

 

2,     什么是实模式,保护模式:

                事实上,实模式将整个物理内存看成分段的区域,程序代码和数据位于不同区域,系统程序和

                用户程序并没有区别对待,而且每一个指针都是指向实际的物理地址。这样一来,用户程序的

                一个指针如果指向了系统程序区域或其他用户程序区域,并修改了内容,那么对于这个被修改

                的系统程序或用户程序,其后果就很可能是灾难性的。再者,随着软件的发展,1M的寻址空间

                已经远远不能满足实际的需求了。最后,对处理器多任务支持需求也日益紧迫,所有这些都促

                使新技术的出现。

                为了克服实模式下的内存非法访问问题,并满足飞速发展的内存寻址和多任务需求,处理器厂

                商开发出保护模式。在保护模式中,除了内存寻址空间大大提高;提供了硬件对多任务的支持;

                物理内存地址也不能直接被程序访问,程序内部的地址(虚拟地址)要由操作系统转化为物理地

                址去访问,程序对此一无所知。至此,进程(程序的运行态)有了严格的边界,任何其他进程根

                本没有办法访问不属于自己的物理内存区域,甚至在自己的虚拟地址范围内也不是可以任意访

                问的,因为有一些虚拟区域已经被放进一些公共系统运行库。这些区域也不能随便修改,若修

                改就会有出现linux中的段错误,或Windows中的非法内存访问对话框。

 

 

*********************************************************************

*                                                               c-FAQ                                                           *

*********************************************************************

 

1,      externint i;(这里的extern可以省略,这也是看程序会造成歧义的地方):“看”是我们在看哦。。

 

2,     全局变量怎么放

                1,专门一个.c文件放定义;

                2,专门一个.h文件放extern声明;(可以不加extern表示是全局变量的引用,但是程序时给程序员看的哦!!)

                注:切勿在.c文件中放函数的原型。如果函数变了的话,很容易忘掉修改原型。所以放在一个统一的地方,方便管理

 

3,     file1.c:                                                |               file2.c:

       

        intarray[] = {1, 2, 3};                |               extern int array[];    

        描述:file2.c中的sizeof(array)失去效果,(造成编译错误)。

        原因:sizeof是编译时起作用,而编译期间,这里的array还只是个符号。

        解决方案:

       

        1,在定义的地方把数组的长度给计算出来。

        file1.c:                                                |               file2.c:

 

        intarray[] = {1, 2, 3};                |               extern int array[];

        intarraysz = sizeof(array);    |               extern int arraysz;

       

        2,在.h文件中预编译显示的写出来

        file1.h:

 

        #defineARRAYSZ 3

        externint array[ARRAYSZ];

 

        file1.c:                                                |               file2.c:

 

        #include"file1.h"                              |               #include "file1.h"

        intarray[ARRAYSZ];                             |

       

        3,在数组的最后设置一个“哨兵”

        file1.c:                                                |               file2.c:

 

        intarray[] = {1, 2, 3, -1};    |               extern int array[];

 

4,     那么.h文件中应该放什么呢?为什么呢?

        macrodefinition;

        struct,union,and enumration的声明;

        typedefdeclaration;

        externalfunc declaration;

        globalvariable declaration.

 

5,      在c中的私有。就把声明或者定义放在那个.c文件中。

 

6,     当你觉得源文件实在太多了,想重新整理文件的时候,可以按照,把static变量和static函数以及共享

        他们提供的接口的放在一个文件中。

 

7,     typedef 与 #define 的区别:工作经验。

 

8,     typedef进阶:

        描述:

                #definex int *                         |               typedef int * x;

                constx y;                                      |               const x y;

                区别:

                y所指向的字符串被限定           |               y本身被限定。

        理解:

                这是typedef与#define的有一区别。

                可以这样理解typedef,在编译时,才识别x。所以,用x去定义y。之后再用const去限制y。

               

9,     描述:

                constint n = 5;        int a[n];

                错误。

        原因:

                n要在运行时才能知道。

               

10,计算结构中域的位偏移

        #definesetof(type, f) ((size_t) \

                ((char*)&((type*)0)->f - (char*)(type *)0))

               

11,枚举类型的一个优点是:

                调试的时候可以看到字符串

               

*********************************************************************

*                                                       一些机器表达式                                                  *

*********************************************************************

1,     交换a,b

        a^= b ^= a ^= b;

       

*********************************************************************

*                                                               杂      记                                                              *

*********************************************************************

1,     看了c的一些工程组织,更体会c++是一个工业效率的产物。

        也感觉makefile

       

       

*********************************************************************

*                                                               进      阶                                                              *

*********************************************************************

1,     操作系统

2,     编译原理

3,     算法

4,     数据库

 

       

*********************************************************************

*                                                               目      录                                                              *

*********************************************************************

 

*********************************************************************

*                                                               一些数据                                                        *

*********************************************************************

 

*********************************************************************

*                                                       多      线      程                                                              *

*********************************************************************

1,     Handle1 = CreateThread(NULL,0, ATM_1, NULL, 0, &ThreadID1);

        Handle1是进程级的,ThreadID1是系统级的。

2,     有信号:可能应该理解成,提醒下面的程序可以执行了,的意思吧。

 

 

 

*********************************************************************

*                                                               MY_URL                                                          *

*********************************************************************

1,      算法

        1,     http://www.keithschwarz.com/interesting/       

       

2,     GNU:

        http://www.gnu.org/prep/standards/

       

*********************************************************************

*                                                               业界权威                                                        *

*********************************************************************

1,     在编程语言的统计,Tiobe是个权威的机构。

        方式是:

                每月进行评估,进行跨年度同期比较

 

杂记一二:

协议编程,,最主要的是,晓得要用到协议的什么命令,,然后最重要的定义结构体。。

然后,再通过网络编程,填充这些结构的成员。。

 

印度的大多外包公司,都不是先驱者。他们一般都会坐等编程语言市场份额的变化,然后

再以相应低廉的薪水来做出反应。

///

///

//要养成的习惯/

 

1,先有个方向,大致方向,立马,前进

2,尽快从愤怒中冷静下来。

 

 

1,每天花点时间来了解手边的工具

你可能感兴趣的:(c++,总结,总结,工作,习惯,反思)