当前位置:编程学习 > C/C++ >>

淘宝技术类2011年校招笔试题

一、选择题(所有同学必答题,至少有一个选项是正确的,每题4分)
1.以下哪些命令可以解压缩.tar.bz2文件?()
A. tar -cjvf
B. tar -xjvf
C. tar -czvf
D. tar -xzvf
答:B
[cpp]
-c :建立一个压缩文件的参数指令(create 的意思); 
-x :解开一个压缩文件的参数指令! 
-t :查看 tarfile 里面的文件! 
特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在! 
因为不可能同时压缩与解压缩。 
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩? 
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩? 
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程! 
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数! 
   例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成 
   『 tar -zcvPf tfile sfile』才对喔! 
-p :使用原文件的原来属性(属性不会依据使用者而变) 
-P :可以使用绝对路径来压缩! 
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中 

2.Unix系统中,文件存储管理采用的是()
A. 位图法
B. 空闲块表法
C. 成组连接法
D. 单块连接法
答:C
[cpp] 
位图法用的场合比较多,比如设备分配、PCB分配等,早期Linux的文件系统MINIX也使用位图。现在的ext2、ext3都不用了。 
空闲块表法使用的场合也很多,比如内存分配等。 
成组连接法用于文件系统,它将空闲块分成若干组,每100个空闲块为一组,每组的第一空闲块登记了下一组空闲块的物理盘块号和空闲块总数。如果一个组的第一个空闲块号等于0,则有特殊的含义,意味着该组是最后一组,即无下一个空闲块。分配空闲块的时候,从前往后分配,先从第一组开始分配,第一组空闲的100块分完了,才进入第二组。释放空闲块的时候正好相反,从后往前分配,先将释放的空闲块放到第一组,第一组满了,在第一组前再开辟一组,之前的第一组变成第二组。 
单块连接法:不了解 

3.以下硬盘分区方案中可行的是()/*P代表主分区,L代表逻辑分区*/
A. 2P + 1L
B. 3P + 2L
C. 4P + 3L
D. 5P + 4L
E. 6P + 5L
答:AB
[cpp] 
各个分区的作用: 
主分区用于启动操作系统 
扩展分区用于建立逻辑分区。主分区数量有限,如果需要更多的分区,就在扩展分区上增加逻辑分区。 
逻辑分区用于增加分区数量。 
分区的数量规定: 
主分区+扩展分区 <= 4 (排除DE) 
逻辑分区 <= 12,逻辑分区必须建立在扩展分区上(C排除) 

4.C语言中,下列哪两个定义是相同的?
A. const int* a = &b;
B. const* int a = &b;
C. const int* const a = &b;
D. int const* const a = &b;
答:AB CD
[cpp]
AB:如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。 
CD:指针本身和指向的内容均为常量 

5.关于下面的C语言代码片段,说易做图确的是()
int test(char *src)
{
    char dest[102] = {0};
    strncpy(dest,src,strlen(src)-1);
    return 1;
}
A. 这段代码没有任何安全问题
B. 这段代码存在条件竞争漏洞
C. 这段代码存在栈溢出漏洞
D. 这段代码存在堆溢出漏洞
答:C
[cpp]
复制的长度是src-1,如果src-1>1024,dest就会溢出。因为dest是在栈中开辟的空间,所以是栈溢出 

二、填空题(所有同学必答题,每道4分)
1.以下是linux系统中ls命令的一行输出结果:
drwxr-xr-x 14 root root 20K 2010-08-20 23:18 Photos 共有7个字段,意义分别是文件类型及访问权限、该目录所包含的子目录的个数、文件的拥有者、文件拥有者所在的组、文件所占用的空间(以字节为单位)、文件最近访问时间、文件名
答:http://hi.baidu.com/yzzcheng/item/1a2141878447891dc31627f5
 
2.某二叉树,先序遍历的结果为BACEDFG,中序遍历的结果为CAEBFGD,其后序遍历的结果为CEAGFDB
答:图略
 
3.代码覆盖测试分:语句覆盖、判定覆盖、条件覆盖、路径覆盖
答:
[cpp] 
代码覆盖测试,评测测试过程中已经执行的代码的多少,与之相对的是要执行的剩余代码的多少。具体而言代码覆盖率分析是这样一个过程:(1)找出程序经过一系列测试而没有执行的部分代码(2)创建一个附加的测试用例来增加覆盖率(3)决定代码覆盖的定量度量。 
的测试覆盖率有许多种度量方式,例如: 
语句覆盖(StatementCoverage):也称为行覆盖(linecoverage),段覆盖(segmentcoverage)和基本块覆盖(basicblockcoverage)。它度量每一个可执行语句是否被执行到了,这个覆盖度量的主要好处是它可以直接应用在目标代码上,不需要对源代码进行处理,主要缺点是对一些控制结构很迟钝。 
判定覆盖(DecisionCoverage):也被称为分支覆盖(branchcoverage),所有边界覆盖(all-edgescoverage),基本路径覆盖(basispathcoverage),C2覆盖,判定路径覆盖(decision-decision-path或DDPtesting)。它度量是否每个BOOL型的表达式取值true和false在控制结构中都被测试到了。这个度量有语句覆盖的简单性,但是没有语句覆盖的问题,缺点是忽略了在BOOL型表达式内部的BOOL取值。 
条件覆盖(ConditionCoverage):它独立的度量每一个子表达式,报告每一个子表达式的结果的true或false。这个度量和判定覆盖(decisioncoverage)相似,但是对控制流更敏感。不过,完全的条件覆盖并不能保证完全的判定覆盖。 
路径覆盖(PathCoverage):也称为断言覆盖(predicatecoverage),它度量了是否函数的每一个可能的分支都被执行了。路径覆盖的一个好处是:需要彻底的测试。但有两个缺点:一是,路径是以分支的指数级别增加的,例如:一个函数包含10个IF语句,就有1024个路径要测试。如果加入一个IF语句,路径数就达到2048;二是,许多路径不可能与执行的数据无关。 
循环覆盖(LoopCoverage):这个度量报告你是否执行了每个循环体零次、只有一次还是多余一次(连续地)。对于do-while循环,循环覆盖报告你是否执行了每个循环体只有一次还是多余一次(连续地)。这个度量的有价值的方面是确定是否对于while循环和for循环执行了多于一次,这个信息在其它的覆盖率报告中是没有的。 

3.软件开发生命周期模型有瀑布模型、快速原型模型、迭代模型。
答:
[cpp] view plaincopy
  瀑布模型(Wate易做图ll Model):该模型由于酷似瀑布闻名。在该模型中,首先确定需求,并接受客户和SQA小组的验证。然后拟定规格说明,同样通过验证后,进入计划阶段…可以看出,瀑布模型中至关重要的一点是只有当一个阶段的文档已经编制好并获得SQA小组的认可才可以进入下一个阶段。这样,瀑布模型通过强制性的要求提供规约文档来确保每个阶段都能很好的完成任务。但是实际上往往难以办到,因为整个的模型几乎都是以文档驱动的,这对于非专业的用户来说是难以阅读和理解的。想象一下,你去买衣服的时候,售货员给你出示的是一本厚厚的服装规格说明,你会有什么样的感触。虽然瀑布模型有很多很好的思想可以借鉴,但是在过程能力上有天生的缺陷。 
快速原型(Rapid Prototype)模型:在功能上等价于产品的一个子集。注意,这里说的是功能上。瀑布模型的缺点就在于不够直观,快速原型法就解决了这个问题。一般来说,根据客户的需要在很短的时间内解决用户最迫切需要,完成一个可以演示的产品。这个产品只是实现部分的功能(最重要的)。它最重要的目的是为了确定用户的真正需求。在得到用户的需求之后,原型将被抛弃。因为原型开发的速度很快,设计方面是几乎没有考虑的,如果保留原型的话,在随后的开发中会为此付出极大的代价。  
迭代式模型是是RUP(统一软件开发过程)推荐的周期模型。在RUP中,迭代包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他外围元素。所以,在某种程度上,开发迭代是一次完整地经过所有工作流程的过程:(至少包括)需求工作流程、分析设计工作流程、实施工作流程和测试工作流程。实质上,它类似小型的瀑布式项目。RUP认为,所有的阶段(需求及其它)都可以细分为迭代。每一次的迭代都会产生一个可以发布的产品,这个产品是最终产品的一个子集。迭代和瀑布的最大的差别就在于风险的暴露时间上。“任何项目都会涉及到一定的风险。如果能在生命周期中尽早确保避免了风险,那么计划自然会更趋精确。由于瀑布模型的特点(文档是主体),很多的问题在最后才会暴露出来,为了解决这些问题的风险是巨大的。"在迭代式生命周期中,根据主要风险列表选择要在迭代中开发的新的增量内容。每次迭代完成时都会生成一个经过测试的可执行文件,这样就可以核实是否已经降低了目标风险。" 

5.已经代码段如下
[cpp]
#include <iostream> 
using namespace std; 
class Class1 

  &n

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,