昨天百度笔试题没探讨的吗?
这个应该不需要什么保密的吧。。。
一
1.线程或数据库死锁的原理?如何避免?
2.面向对象的3个基本要素和5个基本设计原则。
3.windows内存管理机制有哪几种?优缺点?
二、算法题
1.1001个员工羽毛球比赛,单淘汰制,求比几场能比出冠军(代码模拟过程)?
2.100个灯,初始状态亮着,第一次每隔一个灭一个,第二次每隔两个(如果是亮的就灭,反之亮之)。。。依次类推,100次后还剩几个亮着?
3.字符串左移,void *pszStringRotate(char *pszString, int nCharsRotate),比如ABCDEFG,移3位变DEFGABC,要求空间复杂度O(1),时间复杂度O(n)
三、设计(这题记不大清楚了)
要把10W条数据放进内存,每条数据包括一个key(16字节),一个数据1M,6台电脑,每台64g内存,设计一个存储系统要满足7*24小时运行。(有可能会宕机)
话说上学地方偏僻的应届生找工作真心纠结。。。
[解决办法]
前面不用说了
第一个 锦标赛排序
第二个 感觉题目说得不清楚 下一次灭灯到底是从哪开始啊
第三个 先把翻转前n-3个 然后翻转后3个 也可以先后后前 如 ABCDEFG -> DCBA GFE -> EFGABCD 这样就OK了 来自《编程艺术》
后面的不知道
[解决办法]
2.100个灯,初始状态亮着,第一次每隔一个灭一个,第二次每隔两个(如果是亮的就灭,反之亮之)。。。依次类推,100次后还剩几个亮着
#include <iostrem>
using namespace std;
int main()
{
const int SIZE=100;
int ct=0;
int n=1;
//初始化pt数组为0
int pt[SIZE]={0};
//运行100次
for(int x=0;x<100;x++)
{
//每次间隔+1
n++;
for(int y=0;y<SIZE;y+=n)
{
if(pt[y]==0)
pt[y]=1;
else
pt[y]=0;
}
}
//记录亮灯数ct
for(int i=0;i<SIZE;i++)
{
if(pt[i]==0)
ct++;
}
cout<<"亮灯:"<<ct<<endl;
cout<<"Done!\n";
return 0;
}
实际就是平方数最后是开的
[解决办法]
算法题目都好简单啊
1.1001个员工羽毛球比赛,单淘汰制,求比几场能比出冠军(代码模拟过程)?
一场比赛淘汰一个人.1001 -1 = 1000场
2.100个灯,初始状态亮着,第一次每隔一个灭一个,第二次每隔两个(如果是亮的就灭,反之亮之)。。。依次类推,100次后还剩几个亮着?
我理解为第N次是将被N+1整除的等都反转.
任何一个n,有
n=a1*b1 = a2* b2 = ......
如果是素数,就只会被翻转一次(第n次翻转)必定灭
如果不是素数,则每一个ai的翻转都会有对应的bi翻转,回到初始状态,直到第n次翻转,就第n盏灯灭了
除非出现ai=bi,也就是n是平方数,到最后才会保持亮灯
3.字符串左移,void *pszStringRotate(char *pszString, int nCharsRotate),比如ABCDEFG,移3位变DEFGABC,要求空间复杂度O(1),时间复杂度O(n)
先整个字符串逆转GFEDCBA,再第三个字符串为分解分解成两个子字符串,内部逆转
[解决办法]
2.100个灯,初始状态亮着,第一次每隔一个灭一个,第二次每隔两个(如果是亮的就灭,反之亮之)。。。依次类推,100次后还剩几个亮着?
解(一):
#include <stdio.h>
#include <math.h>
#define N 100 //灯的总数
int main(void)
{
int sum = 0;//用来累计熄灭的灯的个数
sum = N - int(sqrt(N));
printf("还剩下%d栈灯亮着\n",sum);
return 0;
}