一点体会

        昨天晚上做了微软校招的笔试题目,感觉自己的基础知识还是很不扎实,不能形成一个体系。思考问题的时候,要从自己的体系结构中来思考而不是完全靠直觉,直觉这种东西说有突然就有了,说没有怎么也来不了。很多不该错的题目都弄错了,这完全暴露了自己的基本功还不扎实,不能够运用自如。比如有一道题目求N!后零的个数,这是编程之美上的一道题目,自己虽然知道解法,但忘了具体的原理,感觉虽然看了编程之美好几遍了,还没有将这些东西完全转化为自己的知识,就等于是白看。所以说,一定要静下心来,好好思考,不要着急,错一题会扣分。

        1、临界区vs临界资源:临界区是指每个进程中访问临界资源的那段代码,临界资源是一次只允许一个进程使用的共享资源。详见:http://www.uml.org.cn/zjjs/2008111011.asp

              windows中进程通信主要有以下几种方法:

             1)文件映射(Memory-Mapped Files)

       2)共享内存(Shared Memory)

       3) 匿名管道(Anonymous Pipe)

       4) 命名管道(Named Pipe)

       5) 邮件槽(Mailslots)

       6) 剪贴板(Clipped Board)

       7) 动态数据交换(DDE)

       8) 应用程序利用对象连接与嵌入(OLE)

       9) 动态连接库

       10) 远程过程调用

       11) NetBios函数

       12) Sockets

       13) WM_COPYDATA消息

    2、程序输出结果

    

#include<stdlib.h>
#include<iostream>
using namespace std;

class Base{
   public:
       char Value(){ return 'A';}
       virtual char VirtualValue(){return 'V';}
};
class Derived:public Base{
    public:
        virtual char Value(){return 'D';}
};
class VirtualDerived:virtual public Base{
    public:
        char Value(){return 'Z';}
        char VirtualValue(){return 'X';}
};

int main(){
 	Base* b1=new Derived();
 	Base* b2=new VirtualDerived();
 	
 	cout<<b1->Value()<<" "<<b1->VirtualValue()<<endl;
 	cout<<b2->Value()<<" "<<b2->VirtualValue()<<endl;
        system("pause");
        return 0;
}
结果为:A V

        A X

解释:首先我们看一下 class VirtualDerived:virtual public B这句,虚继承以前没见过,查了一下C++ primer后发现,这儿写virtual对这题目的结果并没有什么影响。虚继承(P923),虚继承是一种机制,类通过虚继承指出它希望共享其虚基类的状态。在虚继承下,对给定虚基类,无论该类在派生类层次中作为虚基类出现多少次,只继承后一个共享的基类子对象。共享的基类子对象成为虚基类。

下面解释第一行的输出,由于Base中并没有将Value()设为虚函数,所以首先输出A是显然的,下面输出V也是更显而可见的了,因为只有子类有这个函数。

第二行:同理首先输出A,由于函数VirtualValue为虚函数,所以根据多态,可得输出的结果为X。

我们对代码添加一些的内容,以便更加便于我们理解:

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

class Base{
   public:
       char Value(){ return 'A';}
       virtual char VirtualValue(){return 'V';}
};
class Derived:public Base{
    public:
        virtual char Value(){return 'D';}
};
class VirtualDerived:virtual public Base{
    public:
        char Value(){return 'Z';}
        char VirtualValue(){return 'X';}
};
class B:public Derived{
    char Value(){return 'M';}
};

int main(){
 	Base* b1=new Derived();
 	Base* b2=new VirtualDerived();

 	Derived* b3=new B();
 	cout<<b3->Value()<<endl;
 	
 	Base* b4=new B();
 	cout<<b4->Value()<<endl;
 	
 	cout<<b1->Value()<<" "<<b1->VirtualValue()<<endl;
 	cout<<b2->Value()<<" "<<b2->VirtualValue()<<endl;
    system("pause");
    return 0;
}
则前两行输出的为:

M

A

3、树的层数:从根开始定义,根为第一层,根的子节点为第二层,以此类推;

4、最后一题很经典,将几种排序算法考了一遍,看过算法导论的应该没有什么问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值