2015.03.14 网易CC笔试总结(TTT计划)
不难,但覆盖面广,目测已跪,总结经验教训以后争取不犯这样的错误,也希望能帮助各位师弟师妹。(不全,而且本人不是计算机专业,此文是按照个人水平总结,请对照他人版本阅读)
1、《c++ Primer》、《Head First设计模式》、《Effective C++》、《windows 核心编程(第5版)》哪本书最薄
答:《Effective C++》
评:好蛋疼的题!我是根据名称选的,如果不写的短一点怎么好意思叫effective嘛,哈哈
2、系统出现死锁的原因是()
答:若干进程因竞争资源而无休止地循环等待着,而且都不释放已占有的资源
评:答案参看http://zhidao.baidu.com/link?url=SoAzqDyTW0YJoiSyyu1DGTiPcWepYJB9lzbPgIITIMZCxWkpjRcNozcNE1qSVzv1_8L9dmgpQMy7qLGFI47YUa
3、数据库查询、选择、删除语句(编程题有一道给出一个学生表一个课程表一个选课表,让你按要求选出信息):参看http://blog.sina.com.cn/s/blog_7f4eec5b01016c27.html
(1)数据记录筛选:
sql="select * from 数据表 where 字段名=字段值 orderby 字段名 [desc] "
sql="select * from 数据表 where 字段名 like '%字段值%' orderby 字段名 [desc]"
sql="select top10 * from 数据表 where 字段名 orderby 字段名[desc]"
sql="select * from 数据表 where 字段名 in('值1','值2','值3')"
sql="select * from 数据表 where 字段名 between 值1 and 值 2"
(2)更新数据记录:
sql="update 数据表 set 字段名=字段值 where 条件表达式"
sql="update 数据表 set 字段1=值1,字段2=值2……字段n=值n where 条件表达式"
(3)删除数据记录:
sql="delete from 数据表 where 条件表达式"
sql="delete from 数据表 "(将数据表所有记录删除)
(4)添加数据记录:
sql="insert into 数据表(字段1,字段2,字段3…) values(值1,值2,值3…)"
sql="insert into 目标数据表 select * from 源数据表"(把源数据表的记录添加到目标数据表)
4、Linux查看和调度的指令是:参看http://www.jobui.com/mianshiti/it/linux/5033/
进程查看的命令是ps和top。
进程调度的命令有at,crontab,batch,kill。
5、什么是DDoS?
分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。
6、.h头文件中的ifndef/define/endif的作用?
答:防止该头文件被重复引用。
评:参看http://blog.sina.com.cn/s/blog_4bf29be90100wkz5.html
7、说出事务的四个特性:
答:参看http://bbs.csdn.net/topics/320025183
在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态,对数据库的增删改查都是事务操作。
理解了事务的含义。理解应该不难了吧
原子性:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分
一致性:在事务处理执行之前和之后,数据是一致的。
-- 插入数据A, 写进数据还是A,不会变成B
隔离性:一个事务处理对另一个事务处理没有影响。
-- 事务A 增加数据,事务B删除数据, 互相不影响
持续性:当事务处理成功执行到结束的时候,其效果在数据库中被永久纪录下来。
-- 插入数据库的数据写到了磁盘,就是永久了
8、如何判断CPU是大端还是小端:
答:参看http://blog.csdn.net/flickedball/article/details/4096991
#include
int main()
{
union ut{
short s;
char c[2];
}u;
if(sizeof(short) == 2)
{
u.s = 0x0102;
if(u.c[0] == 1 && u.c[1] == 2)
{
printf("big enidan/n");
}else if(u.c[0] == 2 && u.c[1] == 1)
{
printf("little endian./n");
}
return 0;
}
}
9、sizeof函数在什么阶段起作用()
A 编译 B预编译 C 链接 D运行
10、写堆排序代码(伪代码也可)
#include
//array是待调整的堆数组,i是待调整的数组元素的位置,nlength是数组的长度
//本函数功能是:根据数组array构建大根堆
voidHeapAdjust(intarray[],inti,intnLength)
{
intnChild;
intnTemp;
for(;2*i+1
{
//子结点的位置=2*(父结点位置)+1
nChild=2*i+1;
//得到子结点中较大的结点
if(nChildarray[nChild])++nChild;
//如果较大的子结点大于父结点那么把较大的子结点往上移动,替换它的父结点
if(array[i]
{
nTemp=array[i];
array[i]=array[nChild];
array[nChild]=nTemp;
}
elsebreak;//否则退出循环
}
}
//堆排序算法
voidHeapSort(intarray[],intlength)
{
inti;
//调整序列的前半部分元素,调整完之后第一个元素是序列的最大的元素
//length/2-1是最后一个非叶节点,此处"/"为整除
for(i=length/2-1;i>=0;--i)
HeapAdjust(array,i,length);
//从最后一个元素开始对序列进行调整,不断的缩小调整的范围直到第一个元素
for(i=length-1;i>0;--i)
{
//把第一个元素和当前的最后一个元素交换,
//保证当前的最后一个位置的元素都是在现在的这个序列之中最大的
array[i]=array[0]^array[i];
array[0]=array[0]^array[i];
array[i]=array[0]^array[i];
//不断缩小调整heap的范围,每一次调整完毕保证第一个元素是当前序列的最大值
HeapAdjust(array,0,i);
}
}
intmain()
{
inti;
intnum[]={9,8,7,6,5,4,3,2,1,0};
HeapSort(num,sizeof(num)/sizeof(int));
for(i=0;i
{
printf("%d ",num[i]);
}
printf("\nok\n");
return0;
}
参看http://baike.baidu.com/link?url=Ub2UniwKfkB94IhVPqNxPZbQw5ufVOMbFrOTxJ8Th724UsYq0fRf6ryooVKenbTW3eaFmjB_9RcDiS5-tKF-ia#2_1
虽然是基础知识但学渣还是不太懂,有人能用通俗语言介绍一下这个算法吗?
11、参看http://blog.csdn.net/liujinxunhappy08110/article/details/5514358
Michael喜欢滑雪这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。
Input
输入的第一行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。
Output
输出最长区域的长度。