百度校园招聘(笔试题集)

1>数据库以及线程发生死锁的原理以及必要条件,如何避免死锁

 解答:产生死锁的原因主要有:1.系统资源不足。2.进程运行顺序不恰当。3资源分配不当。

 产生死锁的四个必要条件:1.互斥条件(某种资源一次只能被一个进程使用)2.请求与保持条件(一个进程因请求资源而阻塞时,不会释放掉已经获取的资源)3.不可剥夺   (进程已经获得的资源,在还没使用完之前,不会被剥夺)4.循环等待

避免死锁:通过合理的分配系统资源

 

2>面向对象的三个基本元素,五个基本原则

解答:三个基本要素:封装、继承、多态。

五个原则:单一职责原则(Single-Respoibility):一个类,最好只完成一件事情,只有一个引起它的变化。这一原则可以看做是低耦合、高内聚度的延伸。

开放封闭原则(Open-Closed):软件实体要求可扩展,不可修改。

Liskov替换原则(Liskov-substituion):子类必须能够替换基类。

依赖倒置原则(Dependecy-inversion):依赖于抽象,就是高层模块不依赖于底层,具体不依赖于抽象。

接口隔离原则(interface-Segregation):使用多个小的专门的接口,而不是使用一个大的总的接口。

 

3>windows内存管理机制以及优点

解答:分页存储管理:用户程序地址空间被划分为若干固定大小的区域,称之为“页”,内存被划分成块。块和页大小相等。可将用户程序的任何一页分配到内存中的任何一个块。实现了离散分配。

分段存储管理:将用户地址空间分成若干个大小不等的段,每一段定义一组相对完整的逻辑信息,存储分配时,以段为单位。段与段之间可以不邻近。实现了内存离散分配。

段页式管理:分页系统能有效的提高内存的利用率,而分段系统能反映程序的逻辑结构,将两者结合起来就实现了段页式内存管理。在段页式内存管理中,首先用户程序空间被分成大小相等的逻辑分段,每个段有自己的段号,进一步将每个段分成若干个页。主存空间分成大小相等的页,内存分配以页为单位进行。段页式系统中,作业地址结构包含三个部分:段号  页号 页内偏移量。为了实现段页式管理,系统应该为每一个进程设置一个段表。

 

4>程序设计:

公司里面有1001个员工,现在要在公司里面找到最好的羽毛球选手,也就是第一名,每一个人度必须参数。问至少得需要多少次才能完成。

解答:两两比赛,分成500组剩下1人。继续两两比赛,分成250组剩下1人,依次类推。

 

5>程序设计:

现在有100个灯泡,每个灯泡都是关着,第一趟把所有的灯泡打开,第2趟把所有偶数位的灯设置反,第3趟让3,6,9....,反,第100趟让第100个灯反,问有多少灯亮着。

解答:规律:1,对于每个灯,拉动奇数数次灯是亮着,拉动偶数次灯是灭着

2,每个灯拉动的次数与其编号所包含的约数有关,它的编号有几个约数就被拉动几次。

3,1-100这100个数中有那几个数的约数是奇数。我们知道一个数的约数都是成对出现的,只有完全平方数的约数才是奇数个

4,所以这100个灯亮着的个数为10.

 

6>程序设计:

有20个数组,每个数组有500个元素,并且都是排序好的,现在在20*500个数中找出前500个数

解答:TOP-K问题,采用个数为K的最小堆来解决。

 

7>程序设计

字符串左移。例如abcde左移两位,变成cdeab。要求空间复杂度O(1),时间复杂度O(n).

解法:将整个字符串颠倒abcde----->edcba.之后再分别颠倒edc 和ba 结果为cdeab。

 

8>选择题

*在排序方法中,关键码比较次数与记录地初始排列无关?A:Shell排序 B:归并排序 C:直接插入排序 D:选择排序

解答:正确答案为D。shell排序是插入排序的变形,直接插入排序和初始排列相关,如果初始序列有序比较次数为n.初始序列如果倒序比较次数n*(n-1)/2。而归并排序很明显,和初始排序相关。

 

*以下多线程对int型变量x的操作,哪几个需要同步:A:x=y B:x++ C:++x D:x=1

解答:正确答案ABC。ABC赋值等式左变量是建立在变量的基础上,如果该变量改变的话,必定引起等式的改变。

 

*代码void func(){static int val;.......}中,变量val的内存地址位于:A:已初始化数据段 B:未初始化数据段 C:堆 D:栈

解答:正确答案B。静态变量和全局变量放在同一个区域,已经初始化的全局变量和静态变量放在同个区,未初始化的放在一个区,由系统释放。

 

*同一进程下的线程可以共享以下:A:stack  B:data section C:register set D:Thread ID

解答:正确答案B。只有数据段可以共享。

 

*short a[100],sizeof(a)返回?A:2 B:4 C:100 D:200 E:400

解答:正确答案D。short占2个字节,对于数组sizeof,求的是数组的大小所以返回100.

 

*以下哪种不是基于组件的开发技术。A:XPCOM B:XP C:COM D:CORBA

解答:正确答案B。很明显B是操作系统的一种。

 

*以下代码打印的结果是(在i386系列机器上)

struct st_t

{

    int status;

    short* pdata;

    char errstr[32];

};

 st_t st[16];  char* p=(char*)(st[2].errstr+32); cout<<p-(char*)(st)<<endl;

A:32 B:114 C:120 D:1112

解答:正确答案C。对于上述结构体每个结构体占40字节(int 4字节,指针4字节,char数组32字节),p指向st[2]结束的下一位即st[3]的开头,该题理解为st[3]到开头的距离,中间隔了3个结构体。

 

*STL中哪种结构是连续形式存储。A:map B:set C:list D:vector

解答:正确答案D。

 

9>重复多次fclose一个打开过一次的FILE *fp指针会出现什么情况?

解答:导致文件描述符结构中指针指向的内存被重复释放,程序异常。

 

10>求符合指定规则的数

给定函数d(n)=n+n的各个位之和,n为正整数,如d(78)=78+7+8.求1000以内不符合这样的数。

解答:思路可以很容易的求出1,2,3.....等等符合条件的数,扣除符合的就剩下不符合的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值