zoukankan      html  css  js  c++  java
  • 学习总结

        额。。。。。。。。。。。今天下午要去面试了。。。紧张中。希望能顺利通过哈。下面是昨天晚上到现在的学习总结,希望能完全应付这次的面试额。由于时间的原因,整理的很乱,很简单,等下次面试之前能做能完完整整的整理一下,俺要过面试额,我要找个好工作,哈哈

       具体如下:

    COM所在的DLL中必须导出四个函数:
    dllgetobjectclass, dllregisterserver, dllunregisterserver, dllunloadnow
    这四个函数各有作用,有些是提供给COM管理器用的,通过CLSID和IID来使用,有些是提供给注册机用的.

    Com组件一般提供给其他程序调用(对外)
    DLL一般是自己的程序调用(也可能是自己的几个程序)(对内)

    VARIANT变量是COM组件之间互相通信的重要的参数变量之一,它可以容纳多种不同的类型,如short、long、double等,包括各类指针和数组。
    1、使用SAFEARRAY实现二维数组
    SAFEARRAY安全数组可以实现多维数组,SAFEARRAY实现的步骤可以大致分为三步。
    (1)创建SAFEARRAY安全数组,包括设置数组元素的类型、数据的维数,大小等。
    (2)对SAFEARRAY数组赋值,既可通过SafeArrayPutElement函数逐个元素进行负责,也可通过指针来获得SAFEARRAY的数据地址,然后对指针指向的值进行赋值操作。其中,如果SAFEARRAY中的数组时多维数组,即可以把多维数组转换为一维数组,也可以通过获得指向数组的指针方式来操作数组中的元素。
    (3)使用VARIANT变量把SAFEARRAY进行包装。

    使用COleSafeArray实现二维数组
    COleSafeArray继承于VARIANT,是MFC的自动化类,因此,只有在使用MFC类库时才能使用该类。COleSafeArray封装操作相关的函数,可通过MSDN查询该类的成员函数来了解与安全数组相关的函数。COleSafeArray还可以直接转换为VARIANT。因此,相对于SAFEARRAY,COleSafeArray的使用更方便。COleSafeArray和SAFEARRAY之间的关系就是MFC类库和Win32 SDK的关系,使用步骤类似。

    进程间通信的消息方法
    当进程要与其它进程通讯时,可利用msgsnd()系统调用来发送消息。对于msgsnd()系统调用,核心检查消息队列描述符合许可权是否合法,消息长度是否超过系统规定的长度。通过检查后,核心为消息分配消息数据区,并将消息从用户消息缓冲区拷贝到消息数据区。分配消息首部,将它链入消息队列的末尾;在消息首部中填写消息的类型、大小以及指向消息数据区的指针等;还要修改消息队列头标中的数据(如消息队列中的消息数、字节数等)。然后,唤醒等待消息到来的睡眠进程。 消息的接收: 进程可利用msgrcv()系统调用,从指定消息队列中读一个消息。对于msgrcv()系统调用,先由核心检查消息队列标识符合许可权,继而根据用户指定的消息类型做相应的处理。消息类型msgtyp的参数可能有三种情况:当msgtyp=0时髦核心寻找消息队列中的第一个消息,并将它返回给调用进程;当msgtyp为正整数时,核心返回指定类型的第一个消息;当msgtyp为负整数时,核心应在其类型值小于或等于msgtyp绝对值的所有消息中,选出类型值最低的第一个消息返回。如果所返回消息的大小等于或小于用户的要求,核心便将消息正文拷贝到用户区,再从队列中删除该消息,并唤醒睡眠的发送进程;如果消息长度比用户要求的大,则系统返回出错信息。用户也可以忽略对消息大小的限制,此时,核心无需理会消息的大小而一概把消息内容拷贝到用户区。

    管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。

    ATL,Active Template Library活动模板库:对COM组件的开发提供最大限度的代码自动生成以及可视化支持。首先ATL的基本目标就是使COM应用开发尽可能地自动化,这个基本目标就决定了ATL只面向COM开发提供支持

    关于本机流量监控
    使用setsockopt(socksrv,IPPROTO_IP,IP_HDRINCL,(char *)sockFlag,sizeof(sockFlag));
    绑定端口后,使用 ioctlsocket(socksrv,SIO_RCVALL,&dwvalnue);实现把套接字设置为接收所有数据包
    获取协议栈信息:AllocateAndGetTcpExTableFromStack,AllocateAndGetUdpExTableFromStack,GetProcessHeap
    TCP协议三次握手过程分析:
    第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
    第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包
    第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

    挂起进程的实习:
    CreateRemoteThread创建远程线程,用这个挂起某进程的所有线程,实现挂起进程
    dump(转存):MiniDumpWriteDump
    查询进程信息:NtQueryInformationProcess
    hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); 获取线程快照
    if (Thread32First(hThreadSnap, &te32))
    {
    do
    {
    if (te32.th32OwnerProcessID == ProcessID)
    {
    HANDLE hThread = OpenThread(THREAD_SUSPEND_RESUME, FALSE, te32.th32ThreadID);
    if (bResumeThread)
    {
    //cout << _T("Resuming Thread 0x") << cout.setf( ios_base::hex ) << te32.th32ThreadID << ' ';
    ResumeThread(hThread);
    }
    else
    {
    //cout << _T("Suspending Thread 0x") << cout.setf( ios_base::hex ) << te32.th32ThreadID << ' ';
    SuspendThread(hThread);
    }
    CloseHandle(hThread);
    }
    }while (Thread32Next(hThreadSnap, &te32));
    bRet = TRUE;
    }


    二叉树的遍历:
    (1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树。简记根-左-右。

    (2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树。简记左-根-右。

    (3)后序遍历(LRD),首先遍历左子树,然后遍历右子树,最后访问根结点。简记左-右-根。

  • 相关阅读:
    解决克隆后eth0不见的问题
    mysql自关联插入数据-级联地区
    java运行时接收参数
    python 安装lxml
    python安装pip
    cv 景深
    cv 计算机视觉研究现状
    CV 光流场计算1( area correlation optical flow)
    cv 纹理
    cv 灰阶分割
  • 原文地址:https://www.cnblogs.com/foreverme/p/2550443.html
Copyright © 2011-2022 走看看