曾经的百度面试

C or C++实现静态栈:not thread safe

//stack.h

const int stackSize=256;

static int g_top=stackSize-1;

static int g_stack[stackSize];

bool push(int aData);

bool pop(int &aData);

//stack.cpp

#include "stack.h"

bool push(int aData)

{

    if(g_top>=0)

        {

             g_stack[g_top--]=aData;

             return true;

        }

    return false;

}

 bool pop(int &aData)

{

    if(g_top<stackSize-1)

        {

             aData=g_stack[++g_top];

             return true;

        }

    return false;

}

实现动态栈:not thread safe

//stack_dynam.h

static int* g_stackArray;

static int g_top;

static int g_stackNum;

bool initialize_stack(int size);

bool push(int aData);

bool pop(int &aData);

void destory_stack();

//stack_dynam.cpp

bool initialize_stack(in size)

{

if(size>0)

    {

      g_stackArray=new int[size];

      if(!g_stackArray)return false;

      g_stackNum=size;

      g_top=g_stackNum-1; 

      return true;

    }

return false;

}

bool push(int aData)

{

    if(g_top>=0)

    {

     g_stackArray[g_top--]=aData;

     return true;

    }

return false;

}

bool pop(int &aData)

{

    if(g_top<g_stackNum-1)

    {

     aData=g_stackArray[--g_top];

     return true;

     }

     return false;

}

void destory_stack()

{

if(g_stackArray)

delete[] g_stackArray;

g_stackArray=NULL;

}

定义二叉树:

typedef struct BTree

{

int data;

struct BTree* left;

struct BTree* right;

}*pBTree;

用二节点定义多叉树:

左子树为其节点的左儿子,右子树为该节点同层右相邻节点,可遍历多叉树

 

设计大型系统,需求为该系统 内部可存储20G,每天接受100K份文本的提交,每个文本500K至1兆,如果文件有类似,这及时判重忽略。

比较两个文件:判断类似(文件名不同,但内容相差仅多一行or多特殊字符,多几段重复等)

可用jude画组件图,系统初始化时开启监听/备份/索引线程等待触发。当文本请求到达,observer模式通知engine创建线程池,将数据库文件分n块提交给n线程扫描判重,有一个类似则立刻通知engine同步返回,无则直至扫描结束通知。

同时扫描两个文件,归并思想。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值