百度笔试题之0-2011-09-28济南笔试

1.虚拟内存的概念及意义;

虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

2.深度、广度优先遍历的概念及区别,以及深度、广度序列;

图的深度优先遍历

首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止。

图的广度优先遍历

广度优先遍历从某个顶点出发,首先访问这个顶点,然后找出这个结点的所有未被访问的邻接点,访问完后再访问这些结点中第一个邻接点的所有结点,重复此方法,直到所有结点都被访问完为止。

3.面向对象的基本特征以及它们的含义;

继承,封装,多态

4.英文句子逆序输出,单词逆序,单词内字符不用逆序,给出代码及复杂度分析;

不考虑字符

void ReverseWord(char* p, char* q)
{
    while(p < q)
    {
        char t = *p ;
        *p++ = *q ;
        *q-- = t ;
    }
}

// 将句子按单词逆序
char* ReverseSentence(char *s)
{
    // 这两个指针用来确定一个单词的首尾边界
    char *p = s ;    // 指向单词的首字符
    char *q = s ;    // 指向空格或者 '\0'

    while(*q != '\0')
    {
        if (*q == ' ')
        {
            ReverseWord(p, q - 1) ;
            q++ ; // 指向下一个单词首字符
            p = q ;
        }
        else
            q++ ;
    }

    ReverseWord(p, q - 1) ; // 对最后一个单词逆序
    ReverseWord(s, q - 1) ; // 对整个句子逆序

    return s ;
}


5.100万个数中求前100大,代码及复杂度分析;

基本想法有两个: 
1. 
算法如下:根据快速排序划分的思想 
(1) 递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内的数 
(2) 对(b,d]重复(1)操作,直到最右边的区间个数小于100个。注意[a,b)区间不用划分 
(3) 返回上一个区间,并返回此区间的数字数目。接着方法仍然是对上一区间的左边进行划分,分为[a2,b2)b2(b2,d2]两个区间,取(b2,d2]区间。如果个数不够,继续(3)操作,如果个数超过100的就重复1操作,直到最后右边只有100个数为止。 

2.先取出前100个数,维护一个100个数的最小堆,遍历一遍剩余的元素,在此过程中维护堆就可以了。具体步骤如下: 
step1:取前m个元素(例如m=100),建立一个小顶堆。保持一个小顶堆得性质的步骤,运行时间为O(lgm);建立一个小顶堆运行时间为m*O(lgm)=O(m lgm);       
step2:顺序读取后续元素,直到结束。每次读取一个元素,如果该元素比堆顶元素小,直接丢弃 
如果大于堆顶元素,则用该元素替换堆顶元素,然后保持最小堆性质。最坏情况是每次都需要替换掉堆顶的最小元素,因此需要维护堆的代价为(N-m)*O(lgm); 
最后这个堆中的元素就是前最大的10W个。时间复杂度为O(N lgm)。 

 6.100亿个网页,每个不超过1M,设计一个网页读取显示系统,给出思路

参考http://www.cnblogs.com/graphics/archive/2011/03/09/1977717.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jxf205-fpga开发工程师笔试题是一个针对FPGA(Field Programmable Gate Array)开发工程师的笔试题。FPGA是一种可编程的逻辑芯片,可根据设计需要重新配置其硬件电路。以下将就这个笔试题进行回答。 FPGA开发工程师是负责使用HDL(硬件描述语言)来设计、开发和测试FPGA的专业人士。这些工程师需要具备深厚的FPGA硬件知识、熟练的HDL编程技能以及丰富的电路设计经验。 在笔试题中,可能会包含一些关于FPGA开发的基础知识和编程技巧的问题。例如,可能会涉及如何使用VHDL或Verilog编程语言编写一个简单的FPGA设计,如何使用FPGA开发工具(如Xilinx ISE或Vivado)进行设计和仿真,以及如何评估和优化FPGA设计的性能。 此外,笔试题可能会要求解决一些特定的FPGA设计问题,如时序约束、时钟分配、布线和时序优化等。这些问题对于一个合格的FPGA开发工程师来说是常见的挑战,需要工程师具备扎实的理论基础和解决问题的能力。 最后,笔试题可能还会涉及到一些FPGA开发中常用的外设接口和协议,如UART、SPI、I2C和PCIe等。对于一个优秀的FPGA开发工程师来说,熟悉这些接口和协议,能够设计和实现各种外设接口,是非常重要的技能。 综上所述,作为一名FPGA开发工程师,需要掌握FPGA硬件知识、HDL编程技巧、电路设计经验以及熟悉外设接口和协议。通过扎实的理论基础和实践经验,能够解决各种FPGA设计和开发中的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值