XX科技公司校园招聘笔试题目
总结
含有答案但是答案仅供参考
1.写出判断BCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)
int a = 4;
()a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
a = ?
答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;
改后答案依次为9,10,10,11
2.某32位系统下, C++程序,请计算sizeof 的值(5分).
char str = "http://www.xxxxx.com"
char *p = str ;
int n = 10;
请计算
sizeof (str ) = ?(1)
sizeof ( p ) = ?(2)
sizeof ( n ) = ?(3)
void Foo ( char str[100]){
请计算
sizeof( str ) = ?(4)
}
void *p = malloc( 100 );
请计算【更多免费素材 ,微信lbgzkf1】
sizeof ( p ) = ?(5)
答:(1)17 (2)4 (3) 4 (4)4 (5)4【更多 免费素材,微信lbgzkf1】
3. 回答下面的问题. (4分)
(1).头文件中的 ifndef/define/endif 干什么用?预处理
答:防止头文件被重复引用
(2). #include <filename.h> 和 #include "filename.h" 有什么区别?
答:前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。
(3).在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?
答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变
量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调
用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。
(4). switch()中不允许的数据类型是?
答:实型
4.回答下面的问题(6分)
(1).Void GetMemory(char **p, int num){
*p = (char *)malloc(num);
}
void Test(void){
char *str = NULL;
GetMemory(str, 100);
strcpy(str, "hello");
printf(str);
}
请问运行Test 函数会有什么样的结果?
答:输出“hello”
(2). void Test(void){
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL){
strcpy(str, “world”);
printf(str);
}
}
请问运行Test 函数会有什么样的结果?
答:输出“world”
(3). char *GetMemory(void){ 【更多免费素材,微信lbgzkf1】
char p = "hello world";
return p;
}
void Test(void){
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test 函数会有什么样的结果?
答:无效的指针,输出不确定
5. 编写strcat函数(6分)
已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);
其中strDest 是目的字符串,strSrc 是源字符串。
(1)不调用C++/C 的字符串库函数,请编写函数 strcat
答:
VC源码:
char * __cdecl strcat (char * dst, const char * src)
{
char * cp = dst;
while( *cp )
cp++; /* find end of dst */
while( *cp++ = *src++ ) ; /* Copy src to end of dst */
return( dst ); /* return dst */
}
(2)strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值?
答:方便赋值给其他变量
6.MFC中CString是类型安全类么?
答:不是,其它数据类型转换到CString可以使用CString的成员函数Format来转换
7.C++中为什么用模板类。
答:(1)可用来创建动态增长和减小的数据结构
(2)它是类型无关的,因此具有很高的可复用性。
(3)它在编译时而不是运行时检查数据类型,保证了类型安全
(4)它是平台无关的,可移植性
(5)可用于基本数据类型
8.CSingleLock是干什么的。
答:同步多个线程对一个数据类的同时访问
9.NEWTEXTMETRIC 是什么。
答:物理字体结构,用来设置字体的高宽大小
10.程序什么时候应该使用线程,什么时候单线程效率高。
答:1.耗时的操作使用线程,提高应用程序响应
2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。
3.多CPU系统中,使用线程提高CPU利用率
4.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独
立的运行部分,这样的程序会利于理解和修改。
其他情况都使用单线程。
11.Windows是内核级线程么。
答:见下一题
12.Linux有内核级线程么。
答:线程通常被定义为一个进程中代码的不同执行路线。从实现方式上划分,线程有两种类型:“用户级线程”和“内核级线程”。 用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。这种线程甚至在象 DOS 这样的操作系统中也可实现,但线程的调度需要用户程序完成,这有些类似 Windows 3.x 的协作式多任务。另外一种则需要内核的参与,由内核完成线程的调度。其依赖于操作系统核心,由内核的内部需求进行创建和撤销,这两种模型各有其好处和缺点。用户线程不需要额外的内核开支,并且用户态线程的实现方式可以被定制或修改以适应特殊应用的要求,但是当一个线程因 I/O 而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会;而内核线程则没有各个限制,有利于发挥多处理器的并发优势,但却占用了更多的系统开支。 Windows NT和OS/2支持内核线程。Linux 支持内核级的多线程
13.C++中什么数据分配在栈或堆中,New分配数据是在近堆还是远堆中?
答:栈: 存放局部变量,函数调用参数,函数返回值,函数返回地址。由系统管理堆: 程序运行时动态申请,new 和 malloc申请的内存就在堆上
14.使用线程是如何防止出现大的波峰。
答:意思是如何防止同时产生大量的线程,方法是使用线程池,线程池具有可以同时提
高调度效率和限制资源使用的好处,线程池中的线程达到最大数时,其他线程就会排队等候。
15.函数模板与类模板有什么区别?
答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。
16.一般数据库若出现日志满了,会出现什么情况,是否还能使用?
答:只能执行查询等读操作,不能执行更改,备份等写操作,原因是任何写操作都要记录日志。也就是说基本上处于不能使用的状态。
17. SQL Server是否支持行级锁,有什么好处?
答:支持,设立封锁机制主要是为了对并发操作进行控制,对干扰进行封锁,保证数据的一致性和准确性,行级封锁确保在用户取得被更新的行到该行进行更新这段时间内不被其它用户所修改。因而行级锁即可保证数据的一致性又能提高数据操作的迸发性。
18.如果数据库满了会出现什么情况,是否还能使用?
答:见16
19.关于内存对齐的问题以及sizof()的输出
答:编译器自动对齐的原因:为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。
20. int i=10, j=10, k=3; k*=i+j; k最后的值是?
答:60,此题考察优先级,实际写成: k*=(i+j);,赋值运算符优先级最低
21.对数据库的一张表进行操作,同时要对另一张表进行操作,如何实现?
答:将操作多个表的操作放入到事务中进行处理
22.TCP/IP 建立连接的过程?(3-way shake)
答:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+CK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+CK包,向服务器发送确认包CK(ack=k+1),此包发送完毕,客户端和服务器进入ESTBLISHED状态,完成三次握手。
23.ICMP是什么协议,处于哪一层?
答:Internet控制报文协议,处于网络层(IP层)
24.触发器怎么工作的?
答:触发器主要是通过事件进行触发而被执行的,当对某一表进行诸如UPDTE、 INSERT、 DELETE 这些操作时,数据库就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。
25.winsock建立连接的主要实现步骤?
答:服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。客户端:socker()建立套接字,连接(connect)服务器,连接上后使用send()和recv(),在套接字上写读数据,直至数据交换完毕,closesocket()关闭套接字。服务器端:accept()发现有客户端连接,建立一个新的套接字,自身重新开始等待连接。该新产生的套接字使用send()和recv()写读数据,直至数据交换完毕,closesocket()关闭套接字。
26.动态连接库的两种方式?
答:调用一个DLL中的函数有两种方法:
1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位。
2.运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了。
27.IP组播有那些好处?
答:Internet上产生的许多新的应用,特别是高带宽的多媒体应用,带来了带宽的急剧消耗和网络拥挤问题。组播是一种允许一个或多个发送者(组播源)发送单一的数据包到多个接收者(一次的,同时的)的网络技术。组播可以大大的节省网络带宽,因为无论有多少个目标地址,在整个网络的任何一条链路上只传送单一的数据包。所以说组播技术的核心就是针对如何节约网络资源的前提下保证服务质量。
第二卷
1.static有什么用途?(请至少说明两种)
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用
2.引用与指针有什么区别?
1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。
3.描述实时系统的基本特性
在特定时间内完成特定的任务,实时性与可靠性。
4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?
全局变量储存在静态数据库,局部变量在堆栈。
5.什么是平衡二叉树?
左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1。
6.堆栈溢出一般是由什么原因导致的?
没有回收垃圾资源。
7.什么函数不能声明为虚函数?
constructor函数不能声明为虚函数。
8.冒泡排序算法的时间复杂度是什么?
时间复杂度是O(n^2)。【更多免费素材,微信lbgzkf1】
9.写出float x 与“零值”比较的if语句。
if(x>0.000001x<-0.000001)
10.Internet采用哪种网络协议?该协议的主要层次结构?
Tcp/Ip协议,主要层次结构为: 应用层/传输层/网络层/数据链路层/物理层。
11.Internet物理地址和IP地址转换采用什么协议?
RP (ddress Resolution Protocol)(地址解析協議)
12.IP地址的编码分为哪俩部分?
IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。
13.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。
循环链表,用取余操作做
14.不能做switch()的参数类型是:
switch的参数不能为实型。
第三卷
1、局部变量能否和全局变量重名?
答:能,局部会屏蔽全局。要用全局变量,需要使用"::"
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
2、如何引用一个已经定义过的全局变量?
答:extern
可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
【更多免 费素材,微信lbgzkf1】
3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
答:可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。
4、语句for( ;1 ;)有什么问题?它是什么意思?
答:无限循环,和while(1)相同。
5、do……while和while……do有什么区别?
答:前一个循环一遍再判断,后一个判断以后再循环。
6、请写出下列代码的输出内容
#include "stdio.h"
main()
{
int a,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("b,c,d:%d,%d,%d",b,c,d);
return 0;【更多免费素 材,微信lbgzkf1】
} 【更多免费素材,微信lbgzkf1】
答:10,12,120
1、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
答:全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
2、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。
3、设有以下说明和定义:
typedef union {long i; int k[5]; char c;} DTE;
struct data { int cat; DTE cow; double dog;} too;
DTE max;
则语句 printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:___52____
答:DTE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20
data是一个struct, 每个变量分开占用空间. 依次为int4 + DTE20 + double8 = 32.
所以结果是 20 + 32 = 52.
当然...在某些16位编辑器下, int可能是2字节,那么结果是 int2 + DTE10 + double8 = 20
4、队列和栈有什么区别?
队列先进先出,栈后进先出
5、写出下列代码的输出内容
#include "stdio.h"
int inc(int a)
{
return(++a);
}
int multi(int*a,int*b,int*c)
{
return(*c=*a**b);
}
typedef int(FUNC1)(int in);
typedef int(FUNC2) (int*,int*,int*);
void show(FUNC2 fun,int arg1, int*arg2)
{
INCp=inc;
int temp =p(arg1);
fun(temp,arg1, arg2);
printf("%d\n",*arg2);
}
main()
{
int a;
show(multi,10,a);
return 0;
}
答:110
7、请找出下面代码中的所以错误
说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”
1、#i nclude"string.h"
2、main()
3、{
4、 char*src="hello,world";
5、 char* dest=NULL;
6、 int len=strlen(src);
7、 dest=(char*)malloc(len);
8、 char* d=dest;
9、 char* s=src[len];【 更多免费素材,微信lbgzkf1】
10、 while(len--!=0)
11、 d++=s--;
12、 printf("%s",dest);
13、 return 0;
14、}
答:
方法1:
int main(){
char* src = "hello,world";
int len = strlen(src);
char* dest = (char*)malloc(len+1);//要为\0分配一个空间
char* d = dest;
char* s = src[len-1];//指向最后一个字符
while( len-- != 0 )
*d++=*s--;
*d = 0;//尾部要加\0
printf("%s\n",dest);
free(dest);// 使用完,应当释放空间,以免造成内存汇泄露
return 0;
}【更多免费素材 ,微信lbgzkf1】
方法2:
#include "string.h"
#include "stdio.h"
main()
{
char str="hello,world";
int len=strlen(str);
char t;
for(int i=0; i{
t=str;
str=str[len-i-1]; str[len-i-1]=t;
}
printf("%s",str);
return 0;
}
第四卷
一、 单项选择题
1.Java是从( )语言改进重新设计。
.da B.C++ C.Pasacal D.BSIC
答案:B
2.下列语句哪一个正确( )
. Java程序经编译后会产生machine code
B. Java程序经编译后会产生byte code
C. Java程序经编译后会产生DLL
D. 以上都不正确
答案:B
【更多免费素材,微信lbgzkf1 】
3.下列说法正确的有( )
. class中的constructor不可省略
B. constructor必须与class同名,但方法不能与class同名
C. constructor在一个对象被new时执行
D. 一个class只能定义一个constructor
答案:C
4.提供Java存取数据库能力的包是( )
.java.sql B.java.awt C.java.lang D.java.swing
答案: 【更多免费素材,微信lbgzkf1】
5.下列运算符合法的是( )
. B.<> C.if D.:=
答案:
6.执行如下程序代码 【更多免费素材,微信lbgzkf1】
a=0;c=0;
do{
--c;
a=a-1;
}while(a>0);
后,C的值是( )
.0 B.1 C.-1 D.死循环
答案:C
7.下列哪一种叙述是正确的( )
. abstract修饰符可修饰字段、方法和类
B. 抽象方法的body部分必须用一对大括号{ }包住
C. 声明抽象方法,大括号可有可无
D. 声明抽象方法不可写出大括号
答案:D
8.下列语句正确的是( )
. 形式参数可被视为local variable
B. 形式参数可被字段修饰符修饰
C. 形式参数为方法被调用时,真正被传递的参数
D. 形式参数不可以是对象
答案:
9.下列哪种说法是正确的( )
. 实例方法可直接调用超类的实例方法
B. 实例方法可直接调用超类的类方法
C. 实例方法可直接调用其他类的实例方法
D. 实例方法可直接调用本类的类方法
答案:D
二、 多项选择题
1.Java程序的种类有( )
.类(Class) B.pplet C.pplication D.Servlet
答案:BCD
2.下列说法正确的有( )
. 环境变量可在编译source code时指定
B. 在编译程序时,所能指定的环境变量不包括class path
C. javac一次可同时编译数个Java源文件
D. javac.exe能指定编译结果要置于哪个目录(directory)
答案:BCD
3.下列标识符不合法的有( )
.new B.$Usdollars C.1234 D.car.taxi
答案:CD
4.下列说法错误的有( )
. 数组是一种对象
B. 数组属于一种原生类
C. int number=={31,23,33,43,35,63}
D. 数组的大小可以任意改变
答案:BCD
5.不能用来修饰interface的有( )
.private B.public C.protected D.static
答案:CD
6.下列正确的有( )
. call by value不会改变实际参数的数值
B. call by reference能改变实际参数的参考地址
C. call by reference不能改变实际参数的参考地址
D. call by reference能改变实际参数的内容
答案:CD
7.下列说法错误的有( )
. 在类方法中可用this来调用本类的类方法
B. 在类方法中调用本类的类方法时可直接调用
C. 在类方法中只能调用本类中的类方法
D. 在类方法中绝对不能调用实例方法
答案:CD
8.下列说法错误的有( )
. Java面向对象语言容许单独的过程与函数存在
B. Java面向对象语言容许单独的方法存在
C. Java语言中的方法属于类中的成员(member)
D. Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同
答案:BC
9.下列说法错误的有( ) 【更多免费素材 ,微信lbgzkf1】
. 能被java.exe成功运行的java class文件必须有main()方法
B. J2SDK就是Java PI
C. ppletviewer.exe可利用jar选项运行.jar文件
D. 能被ppletviewer成功运行的java class文件必须有main()方法
答案:BCD
三、 判断题
1.Java程序中的起始类名称必须与存放该类的文件名相同。( )
答案:正确
2.Unicode是用16位来表示一个字的。( )
答案:正确
3.原生类中的数据类型均可任意转换。( )
答案:错误
第五卷
1. 写出判断BCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)
int a = 4;
()a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
a = ?
答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;
改后答案依次为9,10,10,11
2.某32位系统下, C++程序,请计算sizeof 的值(5分).
char str = "http://www.xxxxx.com"
char *p = str ;
int n = 10;
请计算
sizeof (str ) = ?(1)
sizeof ( p ) = ?(2)
sizeof ( n ) = ?(3)
void Foo ( char str[100]){
请计算
sizeof( str ) = ?(4)
}
void *p = malloc( 100 );
请计算
sizeof ( p ) = ?(5)
答:(1)17 (2)4 (3) 4 (4)4 (5)4
3. 回答下面的问题. (4分)
(1).头文件中的 ifndef/define/endif 干什么用?预处理
答:防止头文件被重复引用
(2). #include <filename.h> 和 #include "filename.h" 有什么区别?
答:前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。
(3).在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?
答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变
量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调
用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。
(4). switch()中不允许的数据类型是?
答:实型
4. 回答下面的问题(6分)
(1).Void GetMemory(char **p, int num){
*p = (char *)malloc(num);
}
void Test(void){
char *str = NULL;
GetMemory(str, 100);
strcpy(str, "hello");
printf(str);
}
请问运行Test 函数会有什么样的结果?
答:输出“hello”
(2). void Test(void){
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL){
strcpy(str, “world”);
printf(str);
}
}
请问运行Test 函数会有什么样的结果?
答:输出“world”
(3). char *GetMemory(void){
char p = "hello world";
return p;
}
void Test(void){
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test 函数会有什么样的结果?
答:无效的指针,输出不确定
5. 编写strcat函数(6分)
已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);
其中strDest 是目的字符串,strSrc 是源字符串。
(1)不调用C++/C 的字符串库函数,请编写函数 strcat
答:
VC源码:
char * __cdecl strcat (char * dst, const char * src)
{
char * cp = dst;
while( *cp )
cp++; /* find end of dst */
while( *cp++ = *src++ ) ; /* Copy src to end of dst */
return( dst ); /* return dst */
}
(2)strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值?
答:方便赋值给其他变量
6.MFC中CString是类型安全类么?
答:不是,其它数据类型转换到CString可以使用CString的成员函数Format来转换
7.C++中为什么用模板类。
答:(1)可用来创建动态增长和减小的数据结构
(2)它是类型无关的,因此具有很高的可复用性。
(3)它在编译时而不是运行时检查数据类型,保证了类型安全
(4)它是平台无关的,可移植性
(5)可用于基本数据类型
8.CSingleLock是干什么的。
答:同步多个线程对一个数据类的同时访问
9.NEWTEXTMETRIC 是什么。
答:物理字体结构,用来设置字体的高宽大小
10.程序什么时候应该使用线程,什么时候单线程效率高。
答:1.耗时的操作使用线程,提高应用程序响应
2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。
3.多CPU系统中,使用线程提高CPU利用率
4.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独
立的运行部分,这样的程序会利于理解和修改。
其他情况都使用单线程。
11.Windows是内核级线程么。
答:见下一题
12.Linux有内核级线程么。
答:线程通常被定义为一个进程中代码的不同执行路线。从实现方式上划分,线程有两
种类型:“用户级线程”和“内核级线程”。 用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。这种线程甚至在象 DOS 这样的操作系统中也可实现 ,但线程的调度需要用户程序完成,这有些类似 Windows 3.x 的协作式多任务。另外一 种则需要内核的参与,由内核完成线程的调度。其依赖于操作系统核心,由内核的内部 需求进行创建和撤销,这两种模型各有其好处和缺点。用户线程不需要额外的内核开支 ,并且用户态线程的实现方式可以被定制或修改以适应特殊应用的要求,但是当一个线 程因 I/O 而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不 到运行的机会;而内核线程则没有各个限制,有利于发挥多处理器的并发优势,但却占 用了更多的系统开支。 Windows NT和OS/2支持内核线程。Linux 支持内核级的多线程
13.C++中什么数据分配在栈或堆中,New分配数据是在近堆还是远堆中?
答:栈: 存放局部变量,函数调用参数,函数返回值,函数返回地址。由系统管理堆: 程序运行时动态申请,new 和 malloc申请的内存就在堆上
14.使用线程是如何防止出现大的波峰。
答:意思是如何防止同时产生大量的线程,方法是使用线程池,线程池具有可以同时提高调度效率和限制资源使用的好处,线程池中的线程达到最大数时,其他线程就会排队 等候。
15函数模板与类模板有什么区别?
答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。
16一般数据库若出现日志满了,会出现什么情况,是否还能使用?
答:只能执行查询等读操作,不能执行更改,备份等写操作,原因是任何写操作都要记录日志。也就是说基本上处于不能使用的状态。
17 SQL Server是否支持行级锁,有什么好处? 【 更多免费素材,微信lbgzkf1】
答:支持,设立封锁机制主要是为了对并发操作进行控制,对干扰进行封锁,保证数据的一致性和准确性,行级封锁确保在用户取得被更新的行到该行进行更新这段时间内不被其它用户所修改。因而行级锁即可保证数据的一致性又能提高数据操作的迸发性。
18如果数据库满了会出现什么情况,是否还能使用?
答:见16
19 关于内存对齐的问题以及sizof()的输出
答:编译器自动对齐的原因:为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。
20 int i=10, j=10, k=3; k*=i+j; k最后的值是?
答:60,此题考察优先级,实际写成: k*=(i+j);,赋值运算符优先级最低
……
一些笔试题目和整理的答案 - XX科技公司(Tencent)
NO1
Below is usual way we find one element in an array
const int *find1(const int* array, int n, int x)
{
const int* p = array;
for(int i = 0; i < n; i++)
{
if(*p == x)
{
return p;
}
++p;
}
return 0; }
In this case we have to bear the knowledge of value type "int", the size of array, even the existence of an array. Would you re-write it using template to eliminate all these dependencies?
template <class T>
const T *find1(const T* array, int n, T x)
{
const T* p = array;
for(int i = 0; i < n; i++)
{
if(*p == x)
{
return p;
}
++p;
}
return 0; }
NO2
Give an example of implementing a Stack in the template way(only template class declaration without detail definition and realization)
template <class T>
class Stack
{
public:
Stack(int = 10) ;
~Stack() { delete stackPtr ; }
int push(const T);
int pop(T) ;
int isEmpty()const { return top == -1 ; }
int isFull() const { return top == size - 1 ; } 【更多免费素材,微信lbgzkf1 】
private:
int size ; // number of elements on Stack.
int top ;
T* stackPtr ;
} ;
NO3
Implement the simplest singleton pattern(initialize if necessary).
class Singleton {
public:
static Singleton* Instance();
protected:
Singleton();
private:
static Singleton* _instance;
}
【更多免费素材,微 信lbgzkf1】
// Implementation
Singleton* Singleton::_instance = 0;
Singleton* Singleton::Instance() {
if (_instance == 0) {
_instance = new Singleton;
}
return _instance;
}
NO4
1.Jeff and Diamond like playing game of coins, One day they designed a new set of rules:
1)Totally 10 coins
2)One can take away 1,2or 4 coins at one time by turns
3)Who takes the last loses.
Given these rules Whether the winning status is pre-determined or not
2.
1:从后面开始考虑,最后肯定要留1个才能保证自己赢
2:所以要设法让对方留下2,3,5个
3:也就是要自己取后留下1,4,6,7,8,9
4:如果自己取后留下6,对方取2个,与(3)矛盾,所以排除6
5:如果自己取后留下8,对方取4个,与(3)一样情况,所以也排除8
6:同样,9也不行,如果我抽后剩下9,对方抽2个,就反过来成对方抽剩成7个了,也与3)矛盾,所以也排除
7:所以很显然,我只能抽剩1,4,7
8:因为只能抽后剩1,4,7才能赢,我先抽得话不可能达到这几个数,很显然,只能让对
方先抽,也即是先抽的人输 。
第六卷
2011.04.23XX科技公司技术运营部分笔试题目
1、find -newer file1 ! file2 命令的意思是?
8、cat -n file1file2 命令的意思是?
9、vi编辑器中,删除一行的命令是?
10、chmod ug=rwx,o=x file命令功能相同的是:chmod 764 file、chmod 771 file、chmod 671 file、chmod 774 file
11、cp拷贝命令的-f参数含义为?
20、tar命令用于解压的参数是?
二、填空题
1、linux命令增加一条192.168.0.024的静态路由
5、linux下交换分区的格式
6、linux下查看当前网络连接的命令
8、linux下侦测主机到目的主机之前所经过的路由的命令
XX科技公司测试类实习笔试题及分析
18、在开发一个系统时,如果用户对系统的目标不很清楚,难以定义需求,这时最好使用( )
.原型法
B.瀑布模型
C.V-模型
D.螺旋模型
19、软件开发中的瀑布模型典型的刻画了软件存在周期的阶段划分,与其最相适应的软件开发方法是(B)。
.构件化方法
B.结构化方法
C.面向对象方法
D.快速原型法
20、软件设计的主要任务是设计软件的结构、过程和模块,其中软件结构设计的主要任务是要确定( C )。【更多免费素材 ,微信lbgzkf1】
.模块间的操作细节
B.模块间的相似性
C.模块间的组成关系
D.模块的具体功能
21、在面向数据流的设计方法中,一般把数据流图中的数据划分为(C)两种。
.数据流和事务流
B.变换流和数据流
C.变换流和事务流
D.控制流和事务流
22、造成软件危机的主要原因是(D):
①用户使用不当 ②硬件不可靠 ③对软件的错误认识 ④缺乏好的开发方法和手段 ⑤软件本身特点 ⑥开发效率低
.(①②③)
B.(②③④)
C.(③⑤⑥)
D.(④⑤⑥)
23、下列要素中,不属于DFD的是(D)。当使用DFD对一个工资系统进行建模时,()可以被确定为外部实体。
(1).加工
B.数据流
C.数据存储【更多免费素材,微信lbgzkf1】
D.联系
(2).接收工资单的银行
B.工资系统源代码程序
C.工资单
D.工资数据库的维护
24、软件开发模型用于指导软件开发。其中演化模型用于在快速开发一个(C)的基础上逐渐演化成最终的软件。螺旋模型综合了()的优点,并增加了(D)。
(1).模块
B.运行平台
C.原型
D.主程序
(2).瀑布模型和演化模型
B.瀑布模型和喷泉模型
C.演化模型和喷泉模型
D.原型和喷泉模型
(3).质量评价
B.进度控制
C.版本控制
D.风险分析
25、在选择开发方法时,有些情况不适合使用原型法,以下选项中不能使用快速原型法的情况是(D):
.系统的使用范围变化很大
B.系统的设计方案难以确定
C.用户的需求模糊不清
D.用户数据资源缺乏组织和管理
26、原型化方法是一类动态定义需求的方法,()不是原型化方法所具胡的特征。与结构化方法相比,原型化方法更需要(B)。衡量原型开发人员能力的重要标准是(D)。
(1).提供严格定义的文档
B.加快需求的确定
C.简化的项目管理
D.加强用户参与和决策
(2).熟练的开发人员
B.完整的生命周期
C.较长的开发时间
D.明确的需求定义
(3).丰富的编程技巧
B.灵活使用开发工具
C.很强的协调组织能力
D.快速获取需求
27、软件开中的瀑布模型典型地刻画了软件生存周期的阶段划分,与其最相适应的软件开发方法是(B)。
.构件化方法
B.结构化方法
C.面向对象方法
D.快速原型方法
28、采用瀑布模型进行系统开发的过程中,每个阶段都会产生不同的文档。以下关于产生这些文档的描述中,正确的是(D)。
.外部设计评审报告在概要设计阶段产生
B.集成测评计划在程序设计阶段产生
C.系统计划和需求说明在详细设计阶段产生
D.在进行编码的同时,独立的设计单元测试计划
29、软件开发的螺旋模型综合了瀑布模型和演化模型的优点,还增加了(C)。
.版本管理
B.可行性分析
C.风险分析
D.系统集成
30、概要设计是软件系统结构的总体设计,以下选项中不属于概要设计的是(D)。
.把软件划分成模块
B.确定模块之间的调用关系
C.确定各个模块的功能
D.设计每个模块的伪代码
31、可移植性指软件从一个运行环境下转移到另一环境下的难易程序。为提高软件的可移植性应注意(D)。
.使用方便性
B.简洁性
C.可靠性
D.设备不依赖性
32、美国卡内基-梅隆大学SEI提出的CMM模型将软件过程的成熟度分为5个等级,以下选项中,属于可管理级的特征是(D)。
.工作无序,项目进行过程中经常放弃当初的计划
B.建立了项目级的管理制度
C.建立了企业级的管理制度
D.软件过程中活动的生产率和质量是可度量的
33、软件能力成熟度模型CMM描述和分析了软件过程能力的发展与改进的程度,确立了一个软件过程成熟程度的分级标准。在初始级,软件过程定义几乎处于无章法可循的状态,软件产品的成功往往依赖于个人的努力和机遇。
在(),已建立了基本的项目管理过程,可对成本、进度和功能特性进行跟踪。在(B),用于软件管理与工程两方面的软件过均已文档化,标准化,并形成了整个软件组织的标准软件过程。在已管理级,对软件过程和产品质量有详细的度量标准。
在(C),通过对来自过程、新概念和新技术等方面的各种有用信息的定量分析,能够不断地、持续志对过程改进。
(1).可重复级
B.管理级
C.功能级
D.成本级
(2).标准级
B.已定义级
C.可重复级
D.优化级
(3).分析级
B.过程级
C.优化级
D.管理级
34、软件设计包括四个既独立又相互联系的活动,分别为(C)、(D)、数据设计和过程设计。
(1).用户手册设计
B.语言设计
C.体系结构设计
D.文档设计
(2).文档设计
B.程序设计
C.实用性设计
D.接口设计
35、软件的互操作性是指(C)。
.软件的可移植性
B.人机界面的可交互性
C.连接一个系统和另一个系统所需的工作量
D.多用户之间的可交互性
36、用来辅助软件开发、运行、维护、管理、支持等过程中的活动的软件称为软件开发工具,通常也称为(D)工具。
.CD
B.CI
C.CM
D.CSE
37、请说出7类信息系统.1.事务处理系统.2.管管理理信息系统.3.决策支持系统.4.主管信息系统.5.专家系统.6.通信和协作系统.7.办公自动化系统.
38、区分电子商务(e-commerce)和电子业务(e-business)电子商务是指通过使用因特网购买和销售商品及服务.电子业务是指使用因特网进行日常的商务活动.
39、什么是数据需求 数据需求是用户数据以实体,属性,关系和规则形式的表述.
40、什么是过程需求 过程需求是用于某个业务过程及其信息及其信息系统的处理需求的用户理解.
41、什么是系统开发过程 系统开发过程是一组活动,方法,最佳实践,交付成果和自动化工具,系统开发的关联人员用它们来开发和维护信息系统及软件.
42、系统开发的10个基本原理是什么 1.让系统用户参与. 2.使用一套问题解决步骤. 3.确立开发阶段和开发活动. 4.在开发过程中记录文档. 5.建立标准. 6.管理过程和项目. 7.将信息系统作为重要的投资看待. 8.不必害怕取消和返工. 9.分而治之. 10.设计系统时应考虑到增长和变化.
43、确定并简要描述大部分现代系统开发方法学公认的8个基本阶段 (P80)1.范围定义阶段.2.问题分析阶段.3.需求分析阶段.4.逻辑设计阶段.5.决策分析阶段.6.物理设计和集成阶段.7.构造和测试阶段.8.安装和发布阶段.
44、区分逻辑设计和物理设计 逻辑设计是将用户需求翻译成系统模型,该模型仅仅描述了业务需求,而没有描述这些需求的任何可能的技术设计或实现.物理设计是将业务用户需求转换成系统模型,描述用户的业务需求的技术实现.(常见的同义词包括:技术设计或实现模型.反义词是逻辑设计.)
45、什么是敏捷方法 敏捷方法集成各种系统分析和方法,根据要解决的问题和要开发的系统应用合适的方法.
46、列出3种模型驱动开发技术 1.过程建模.2.数据建模.3.对象建模.(P95)
47、列出系统开发的3类自动化工具。1.计算机辅助系统工程.2.应用开发环境.3.项目和过程生理器.
48、在关于用例(use case)的描述中,错误的是(D)。
.用例将系统的功能范围分解成许多小的系统功能陈述
B.一个用例代表了系统的一个单一的目标
C.用例是一个行为上相关的步骤序列
D.用例描述了系统与用户的交互
49、在用例建模的过程中,若几个用例执行了同样的功能步骤,这时可以把这些公共步骤提取成独立的用例,这种用例称为(B)。在UML的用例图上,将用例之间的这种关系标记为(C)。
(1).扩展用例
B.抽象用例
C.公共用例
D.参与用例
(2).association
B.extends
C.uses
D.inheritance
50、在一个采用()数据库体系结构的网络数据库应用系统中,计算机C上运行着DBMS软件和应用程序,并存有所有用户数据,其余各节点作为终端通过通信线路向计算机C发出数据库应用请求。
.集中式
B.主从式
C.客户机/服务器
D.分布式
51、在业务领域分析过程中,通过建立实体关系图,把与业务相关的数据模型化;通过建立(B)来表示业务活动的分解过程;两个业务过程之间的相互依赖关系应记录在过程依赖图中;通过建立(C)来详细说明整个业务过程的逻辑。
(1).数据流图(DFD)
B.过程层次图(PHD)
C.过程活动图(PD)
D.过程关系图(PRD)
(2).数据流图(DFD)
B.过程层次图(PHD)
C.过程活动图(PD)
D.甘特图(Ganntte)
52、在将E-R模型向关系模型转换的过程中,若将三个实体之间的多对多联系m:n:p转换为关系模式,则该关系模式的关键字为(C)。
.任意两个实体的关键字的组合
B.任意一个实体的关键字
C.各实体的关键字的组合
D.某实体的其它属性
53、在以下选项中,主要联系高层管理人员的信息系统是(C)
.MIS(管理信息系统)
B.DSS(决策支持系统)
C.EDPS(电子数据处理系统)
D.TPS(事务处理系统)
54、内聚性和耦合性是度量软件模块独立性的重要准则,软件设计时应力求(B)。
.高内聚,高耦合
B.高内聚,低耦合
C.低内聚,高耦合
D.低内聚,低耦合
55、在下面的用例图(use-case Diagram)中,X1、X2和X3表示(B),已知UC3是抽象用例,那么X1可通过(B)用例与系统进行交互。并且,用例(B)是UC4的可选部分,用例(D)是UC4的必须部分。
非XX科技公司题目:也许用得着。。。。。。。。
软件测试笔试题
笔试题汇总 2009-10-18 22:41:44 阅读107 评论0 字号:大中小 订阅
一、判断题
1.软件测试的目的是尽可能多的找出软件的缺陷。(Y)
2.Beta 测试是验收测试的一种。(Y)
3.验收测试是由最终用户来实施的。(N)
4.项目立项前测试人员不需要提交任何工件。(Y)
5.单元测试能发现约80%的软件缺陷。(Y)
6.代码评审是检查源代码是否达到模块设计的要求。(N)
7.自底向上集成需要测试员编写驱动程序。(Y)
8.负载测试是验证要检验的系统的能力最高能达到什么程度。(N)
9.测试人员要坚持原则,缺陷未修复完坚决不予通过。(N)
10.代码评审员一般由测试员担任。(N)
11.我们可以人为的使得软件不存在配置问题。(N)
12.集成测试计划在需求分析阶段末提交。(N)
二、选择
1.软件验收测试的合格通过准则是:(BCD)
. 软件需求分析说明书中定义的所有功能已全部实现,性能指标全部达到要求。
B. 所有测试项没有残余一级、二级和三级错误。
C. 立项审批表、需求分析文档、设计文档和编码实现一致。
D. 验收测试工件齐全。
2.软件测试计划评审会需要哪些人员参加?(BCD)
.项目经理
B.SQ 负责人
C.配置负责人
D.测试组
3.下列关于alpha 测试的描述中正确的是:(D)
.alpha 测试需要用户代表参加
B.alpha 测试不需要用户代表参加
C.alpha 测试是系统测试的一种
D.alpha 测试是验收测试的一种
4.测试设计员的职责有:(BC)
.制定测试计划
B.设计测试用例
C.设计测试过程、脚本
D.评估测试活动
5.软件实施活动的进入准则是:(BC)
.需求工件已经被基线化
B.详细设计工件已经被基线化
C.构架工件已经被基线化【更多免费素材,微信lbgzkf1】
D.项目阶段成果已经被基线化
三、填空
1.软件验收测试包括:正式验收测试,alpha测试,beta测试。
2.系统测试的策略有:功能测试,性能测试,可靠性测试,负载测试,易用性测试,强度测试,安全测试,配置测试,安装测试,卸载测试,文挡测试,故障恢复测试,界面测试,容量测试,兼容性测试,分布测试,可用性测试,(有的可以合在一起,分开写只要写出15就满分哦)
3.设计系统测试计划需要参考的项目文挡有:软件测试计划,软件需求工件和迭代计划。
4.对面向过程的系统采用的集成策略有:自顶向下,自底向上两种。
5.(这题出的有问题哦,详细的5步骤为~~)通过画因果图来写测试用例的步骤为:
(1)分析软件规格说明描述中,哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。
(2)分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系? 根据这些关系,画出因果图。
(3)由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件。
(4)把因果图转换成判定表。
(5)把判定表的每一列拿出来作为依据,设计测试用例。
四、简答(资料是搜集整理的,感谢前辈的解题)无
1.区别阶段评审的与同行评审
同行评审目的:发现小规模工作产品的错误,只要是找错误;
阶段评审目的:评审模块 阶段作品的正确性 可行性 及完整性
同行评审人数:3-7人 人员必须经过同行评审会议的培训,由SQ指导
阶段评审人数:5人左右 评审人必须是专家 具有系统评审资格
同行评审内容:内容小 一般文档 < 40页, 代码 < 500行
阶段评审内容: 内容多,主要看重点
同行评审时间:一小部分工作产品完成
【更多免费素材,微信dadawk 01】
阶段评审时间: 通常是设置在关键路径的时间点上!
2.什么是软件测试
为了发现程序中的错误而执行程序的过程
3简述集成测试的过程
系统集成测试主要包括以下过程:
1. 构建的确认过程。
2. 补丁的确认过程。【 更多免费素材,微信lbgzkf1】
3. 系统集成测试测试组提交过程。
4. 测试用例设计过程。
5. 测试代码编写过程。
6. Bug的报告过程。
7. 每周/每两周的构建过程。
8. 点对点的测试过程。
9. 组内培训过程。
4 怎么做好文档测试
仔细阅读,跟随每个步骤,检查每个图形,尝试每个示例。P142
检查文档的编写是否满足文档编写的目的
内容是否齐全,正确
内容是否完善
标记是否正确
5 白盒测试有几种方法
总体上分为静态方法和动态方法两大类。
静态:关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义
动态:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
6系统测试计划是否需要同行审批,为什么
需要,系统测试计划属于项目阶段性关键文档,因此需要评审。
7lpha测试与beta的区别
lpha测试 在系统开发接近完成时对应用系统的测试;测试后仍然会有少量的设计变更。这种测试一般由最终用户或其它人员完成,不能由程序或测试员完成。
Beta测试 当开发和测试根本完成时所做的测试,最终的错误和问题需要在最终发行前找到。这种测试一般由最终用户或其它人员完成,不能由程序员或测试员完成。
8比较负载测试,容量测试和强度测试的区别
负载测试:在一定的工作负荷下,系统的负荷及响应时间。
强度测试:在一定的负荷条件下,在较长时间跨度内的系统连续运行给系统性能所造成的影响。
容量测试:容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下没有出现任何软件故障或还能保持主要功能正常运行。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。容量测试的目的是使系统承受超额的数据容量来发现它是否能够正确处理。容量测试是面向数据的,并且它的目的是显示系统可以处理目标内确定的数据容量。
第七卷
1、XX科技公司笔试题:const的含义及实现机制
const的含义及实现机制,比如:const int i,是怎么做到i只可读的?
答:const用来说明所定义的变量是只读的。
这些在编译期间完成,编译器可能使用常数直接替换掉对此变量的引用。
2、XX科技公司笔试题:买200返100优惠券,实际上折扣是多少?
到商店里买200的商品返还100优惠券(可以在本商店代替现金)。请问实际上折扣是多少?
答:由于优惠券可以代替现金,所以可以使用200元优惠券买东西,然后还可以获得100元的优惠券。
假设开始时花了x元,那么可以买到 x + x/2 + x/4 + ...的东西。所以实际上折扣是50%.(当然,大部分时候很难一直兑换下去,所以50%是折扣的上限)
如果使用优惠券买东西不能获得新的优惠券,那么
总过花去了200元,可以买到200+100元的商品,所以实际折扣为 200/300 = 67%.
XX科技公司笔试题:tcp三次握手的过程,accept发生在三次握手哪个阶段?
3、accept发生在三次握手之后。
答:第一次握手:客户端发送syn包(syn=j)到服务器。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SK包(ask=k)。
第三次握手:客户端收到服务器的SYN+CK包,向服务器发送确认包CK(ack=k+1)。
三次握手完成后,客户端和服务器就建立了tcp连接。这时可以调用accept函数获得此连接。
4、XX科技公司笔试题:用UDP协议通讯时怎样得知目标机是否获得了数据包
用UDP协议通讯时怎样得知目标机是否获得了数据包?
答:可以在每个数据包中插入一个唯一的ID,比如timestamp或者递增的int。
发送方在发送数据时将此ID和发送时间记录在本地。
接收方在收到数据后将ID再发给发送方作为回应
发送方如果收到回应,则知道接收方已经收到相应的数据包;如果在指定时间内没有收到回应,则数据包可能丢失,需要重复上面的过程重新发送一次,直到确定对方收到。
5、XX科技公司笔试题:统计论坛在线人数分布
求一个论坛的在线人数,假设有一个论坛,其注册ID有两亿个,每个ID从登陆到退出会向一个日志文件中记下登陆时间和退出时间,要求写一个算法统计一天中论坛的用户在线分布,取样粒度为秒。
答:一天总共有 3600*24 = 86400秒。
定义一个长度为86400的整数数组int delta[86400],每个整数对应这一秒的人数变化值,可能为正也可能为负。开始时将数组元素都初始化为0。
然后依次读入每个用户的登录时间和退出时间,将与登录时间对应的整数值加1,将与退出时间对应的整数值减1。
这样处理一遍后数组中存储了每秒中的人数变化情况。
定义另外一个长度为86400的整数数组int online_num[86400],每个整数对应这一秒的论坛在线人数。【更多免费素材,微信lbgzkf1】
假设一天开始时论坛在线人数为0,则第1秒的人数online_num[0] = delta[0]。第n+1秒的人数online_num[n] = online_num[n-1] + delta[n]。
这样我们就获得了一天中任意时间的在线人数。
6、XX科技公司笔试题:从10G个数中找到中数
在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。【更多免费素材,微信 lbgzkf1】
答:不妨假设10G个整数是64bit的。
2G内存可以存放256M个64bit整数。
我们可以将64bit的整数空间平均分成256M个取值范围,用2G的内存对每个取值范围内出现整数个数进行统计。这样遍历一边10G整数后,我们便知道中数在那个范围内出现,以及这个范围内总共出现了多少个整数。
如果中数所在范围出现的整数比较少,我们就可以对这个范围内的整数进行排序,找到中数。如果这个范围内出现的整数比较多,我们还可以采用同样的方法将此范围再次分成多个更小的范围(256M=2^28,所以最多需要3次就可以将此范围缩小到1,也就找到了中数)。
7、XX科技公司笔试题:两个整数集合和B,求其交集
两个整数集合和B,求其交集。
答:(1) 读取整数集合中的整数,将读到的整数插入到map中,并将对应的值设为1。
(2)读取整数集合B中的整数,如果该整数在map中并且值为1,则将此数加入到交集当中,并将在map中的对应值改为2。
通过更改map中的值,避免了将同样的值输出两次。
8、XX科技公司笔试题:找出1到10w中没有出现的两个数字
有1到10w这10w个数,去除2个并打乱次序,如何找出那两个数?
答:申请10w个bit的空间,每个bit代表一个数字是否出现过。
开始时将这10w个bit都初始化为0,表示所有数字都没有出现过。
然后依次读入已经打乱循序的数字,并将对应的bit设为1。
当处理完所有数字后,根据为0的bit得出没有出现的数字。
首先计算1到10w的和,平方和。
然后计算给定数字的和,平方和。
两次的到的数字相减,可以得到这两个数字的和,平方和。
所以我们有
x + y = n
x^2 + y^2 = m
解方程可以得到x和y的值。
9、XX科技公司笔试题:需要多少只小白鼠才能在24小时内找到毒药
有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?
答:最容易想到的就是用1000只小白鼠,每只喝一瓶。但显然这不是最好答案。
既然每只小白鼠喝一瓶不是最好答案,那就应该每只小白鼠喝多瓶。那每只应该喝多少瓶呢?
首先让我们换种问法,如果有x只小白鼠,那么24小时内可以从多少瓶水中找出那瓶有毒的?
由于每只小白鼠都只有死或者活这两种结果,所以x只小白鼠最大可以表示2^x种结果。如果让每种结果都对应到某瓶水有毒,那么也就可以从2^x瓶水中找到有毒的那瓶水。那如何来实现这种对应关系呢?【更多免费素材,微信lbgzkf1】
第一只小白鼠喝第1到2^(x-1)瓶,第二只小白鼠喝第1到第2^(x-2)和第2^(x-1)+1到第2^(x-1) + 2^(x-2)瓶....以此类推。
回到此题,总过1000瓶水,所以需要最少10只小白鼠。
10、XX科技公司笔试题:根据上排的数填写下排的数,并满足要求。
根据上排给出十个数,在其下排填出对应的十个数, 要求下排每个数都是上排对应位置的数在下排出现的次数。上排的数:0,1,2,3,4,5,6,7,8,9。
判断数字是否出现在40亿个数中?
给40亿个不重复的unsigned int的整数,没排过序的,然后再给几个数,如何快速判断这几个数是否在那40亿个数当中?
答:unsigned int 的取值范围是0到2^32-1。我们可以申请连续的2^32/8=512M的内存,用每一个bit对应一个unsigned int数字。首先将512M内存都初始化为0,然后每处理一个数字就将其对应的bit设置为1。当需要查询时,直接找到对应bit,看其值是0还是1即可。
XX科技公司笔试题大放送
1 计算 a^b << 2 (运算符优先级问题)
2 根据先序中序求后序
3 a[3][4]哪个不能表示 a[1][1]: *(a[0][0]) *(*(a+1)+1) *(a[1]+1) *(a[0][0]+4) 4 for(int i..)
for(int j..)
printf(i,j);
printf(j)
会出现什么问题
5 for(i=0;i<10;++i,sum+=i);的运行结果
6 10个数顺序插入查找二叉树,元素62的比较次数
7 10个数放入模10hash链表,最大长度是多少
8 fun((exp1,exp2),(exp3,exp4,exp5))有几个实参
9 希尔 冒泡 快速 插入 哪个平均速度最快
10 二分查找是 顺序存储 链存储 按value有序中的哪些
11 顺序查找的平均时间
12 *p=NULL *p=new char[100] sizeof(p)各为多少
13 频繁的插入删除操作使用什么结构比较合适,链表还是数组
14 enum的声明方式
其他1个选择暂时想不起来了
大题: 1 把字符串转换为小写,不成功返回NULL,成功返回新串
char* toLower(char* sSrcStr)
{
char* sDest= NULL;
if( -1_)
{
int j;
sLen = strlen(sSrcStr);
sDest = new [_2_];
if(*sDest == NULL)
return NULL;
sDest[sLen] = '\0';
while(3_)
sDest[sLen] = toLowerChar(sSrcStr[sLen]);
}
return sDest;
}
2 把字符串转换为整数 例如:"-123" -> -123
main()
{
...
if( *string == '-' )
n = _1__;
else
n = num(string);
..
}
int num(char* string)
{【更多免费素材,微信 lbgzkf1】
for(;!(*string==0);string++)
{
int k;
k = _2_;
j = --sLen;
while(_3__)
k = k * 10;
num = num + k;
}
return num;
}
1.请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句。
int const shift = sizeof(int)*8-1;
unsigned mask = (0x1<<shift);
if ( (a-b)mask )
max_num = b;
else
max_num = a;
#define Max(a,b) ( a/b)?a:b
2.如何输出源文件的标题和目前执行行的行数
int line= __LINE__;
char *file = __FILE__;
cout<<"file name is "<<(file)<<",line is "<<line<<endl;
3.两个数相乘,小数点后位数没有限制,请写一个高精度算法
与大数相乘原理一样,只是调整小数点位置,即有效小数个数
算法提示:
输入 string a, string b;计算string c=a*b; 返回 c;
1, 纪录小数点在a,b中的位置l1,l2,则需要小数点后移动位置数为l=length(a)+length(b)-l1-l2-2;
2, 去掉a,b中的小数点,(a,b小数点后移,使a,b变为整数)
3, 计算c=a*b; (要么用java的BigInterger搞, 要么自己用C++写高精度数乘法,超过百万位,用FFT,我就不细说,这都预先写过就别做了)
4, 输出c,(注意在输出倒数第l个数时,输出一个小数点。若是输出的数少于l个,就补0)
4.写一个病毒
while (1)
{
int *p = new int[10000000];
}
上面这个不对,没有传染性,寄生性……
5.不使用额外空间,将 ,B两链表的元素交叉归并将树序列化转存在数组或 链表中
struct st{
int i;
short s;
char c;
};
sizeof(struct st);
8
char * p1;
void * p2;
int p3;
char p4[10];
sizeof(p1...p4) =?
4,4,4,10
5.让你在100000000个浮点数中找出最大的10000个,要求时间复杂度优。
最小堆
二分查找
快速排序
双向链表的删除结点
有、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟
,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内
这四个人都过桥?
【更多免费素材,微信lbgzkf1】
基础题有15道选择和2道读程序填空。选择题的确是很基础,主要考数据结构,还有一些体系结构、数据库的题目;读程序题跟我们平时考试的差不多,一道是两个升序链合并成一个升序链+递归,一道是四色着色方案【更多 免费素材,微信lbgzkf1】
15个选择题,60分
一个程序填空,40分
三道附加题60分
附加题考的是
不用第三个变量实现两个整形变量的交换
linux的子进程
操作系统资源抢占管理,两个进程要对文件
进行独占访问,采用共享变量,判断可行否
书写strcpy()
时间两个小时,选择题 15*4
然后是程序填空题 10 (2*5), 30 (10*3)
附加题用c++ 实现一个链地址hash。
程序填空题我就不说了,比较easy的说,值得一提的是选择题。
绝大部分考的是C++,我大致说下主要部分吧:
涉及程序执行压栈的:1道
涉及容器和迭代器的:4道
涉及虚拟函数以及dynamic_cast的 3道
涉及参数传递的 1道
简单的程序段落判断 2道
涉及类的静态成员赋值的 1道
1、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句
2、如何输出源文件的标题和目前执行行的行数
3、两个数相乘,小数点后位数没有限制,请写一个高精度算法
4、写一个病毒
5、有、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?
2005年XX科技公司招聘
选择题(60)
c/c++ os linux 方面的基础知识 c的Sizeof函数有好几个!
程序填空(40)
1.(20) 4空x5
不使用额外空间,将 ,B两链表的元素交叉归并
2.(20) 4空x5
MFC 将树序列化 转存在数组或 链表中!
1 计算 a^b << 2 (运算符优先级问题)
2 根据先序中序求后序
3 a[3][4]哪个不能表示 a[1][1]: *(a[0][0]) *(*(a+1)+1) *(a[1]+1) *(a[0][0]+4)
4 for(int i...)
for(int j...)
printf(i,j);
printf(j)
会出现什么问题
5 for(i=0;i<10;++i,sum+=i);的运行结果
6 10个数顺序插入查找二叉树,元素62的比较次数
7 10个数放入模10hash链表,最大长度是多少
8 fun((exp1,exp2),(exp3,exp4,exp5))有几个实参
9 希尔 冒泡 快速 插入 哪个平均速度最快
10 二分查找是 顺序存储 链存储 按value有序中的哪些
11 顺序查找的平均时间
12 *p=NULL *p=new char[100] sizeof(p)各为多少
13 频繁的插入删除操作使用什么结构比较合适,链表还是数组
14 enum的声明方式
其他1个选择暂时想不起来了
大题:
1 把字符串转换为小写,不成功返回NULL,成功返回新串
char* toLower(char* sSrcStr)
{
char* sDest= NULL;
if( __1___)
{
int j;
sLen = strlen(sSrcStr);
sDest = new [_______2_____];
if(*sDest == NULL)
return NULL;
sDest[sLen] = '\0';
while(_____3____)
sDest[sLen] = toLowerChar(sSrcStr[sLen]);
}
return sDest;
}
2 把字符串转换为整数 例如:"-123" -> -123
main()
{
.....
if( *string == '-' )
n = ____1______;
else
n = num(string);
.....
}
int num(char* string)
{
for(;!(*string==0);string++) 【更多免费素材,微信 lbgzkf1】
{
int k;
k = __2_____;
j = --sLen;
while( __3__)
k = k * 10;
num = num + k;
}
return num;
}
附加题:
1 linux下调试core的命令,察看堆栈状态命令
2 写出socks套接字 服务端 客户端 通讯程序
3 填空补全程序,按照我的理解是添入:win32调入dll的函数名 查找函数入口的函数名 找到函数的调用形式 把formView加到singledoc的声明 将singledoc加到app的声明
4 有关系 s(sno,sname) c(cno,cname) sc(sno,cno,grade)
1 问上课程 "db"的学生no
2 成绩最高的学生号
3 每科大于90分的人数
1、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句
2、如何输出源文件的标题和目前执行行的行数
3、两个数相乘,小数点后位数没有限制,请写一个高精度算法
4、写一个病毒
5、有、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?
2005年XX科技公司招聘【更多免费素材,微信lbgzkf1】
选择题(60)
c/c++ os linux 方面的基础知识 c的Sizeof函数有好几个!
程序填空(40)
1.(20) 4空x5
不使用额外空间,将 ,B两链表的元素交叉归并
2.(20) 4空x5
MFC 将树序列化 转存在数组或 链表中!
1.请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句
// 这样转向定义应该不算违规吧!^_^
#include "stdafx.h"
#include <string.h>
#include <iostream>
using namespace std;
#define Cmp(x,y) compare(x,y)
int compare(int a,int b)
{
a^=(1<<31); b^=(1<<31);
int i=31;
while((i^-1) !((a(1<<i))^(b(1<<i)))) i--;
return (i^-1)?(((a>>i)1)?1:-1):0;
}
int _tmain()
{
int c;
c = Cmp(5,4);
cout<<c<<endl;
return 0;
}
2.如何输出源文件的标题和目前执行行的行数(不晓得怎么搞,在等兄弟给我答案在!)
3.两个数相乘,小数点后位数没有限制,请写一个高精度算法
算法提示:
//想法来自北师大一个同学给我看的另一个题目以及他的java程序。
输入 string a, string b; 计算string c=a*b; 返回 c;
1, 纪录小数点在a,b中的位置l1,l2, 则需要小数点后移动位置数为l=length(a)+length(b)-l1-l2-2;
2, 去掉a,b中的小数点,(a,b小数点后移,使a,b变为整数)
3, 计算c=a*b; (要么用java的BigInterger搞, 要么自己用C++写高精度数乘法,超过百万位,用FFT,我就不细说,这都预先写过就别做了)
4, 输出c,(注意在输出倒数第l个数时,输出一个小数点。若是输出的数少于l个,就补0)
4.写一个病毒(没搞过,^_^)
5.让你在100000000个浮点数中找出最大的10000个,要求时间复杂度优。
//本算法使用快排,O(n*lg(n))
//最低可以找到线性算法,使用预先区域统计划分!类试于构造Quad Trees! 写起来代码会长些!
#include <stdio.h>
#include <stdlib.h>
#define Max 100000000
int a[Max+10];
int cmp(const void *a, const void *b)
{
int *x = (int *) a;
int *y = (int *) b;
return *x-*y;
}
int main()
{
int n=0;
while(scanf("%d",a[n])==1) n++;
qsort(a,n,4,cmp);
for(int i=0;i<3;i++) printf("%d",a);
return 1;【更多免费素材,微信lbgzkf1】
}
5、有、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?
Solution:
The First Time: (1)和B(2)过桥,(1)返回 Cost:1+2
The Second Time: C(5)和D(10)过桥,B(2)返回 Cost:10+2
The Third Time (1)和B(2)过桥 Cost:2
Total Time Cost: (1+2)+(10+2)+2=17 minutes
转载请注明出自应届生求职招聘论坛 http://bbs.yingjiesheng.com/,本贴地址:http://bbs.yingjiesheng.com/thread-14395-1-1.html
第一大部分:
15道选择题,都是C/C++ 和数据结构的最基础的,基本上不会做错那种。
第二大部分:
程序填空2题:
1.前序遍历的
2.数组静态链表的插入
每题4空共40分
第三大部分:(每题20分,共60分)
附加题
1.实现3D镜像转换矩阵(题目不太明白,明白的同学给解释一下吧)
2.数据库SQL
a)建立employe表,包括工号、姓名、性别、年龄、部门、工资。
b)查询每个部门的工资总数
c)查询工资高于本部门平均工资的员工姓名
3.到商店里买200的商品返还100优惠卷(可以在本商店代替现金),请问
实际上折扣是多少?请写出推理过程。
(阅读全部图文内容,您需要先登录!)

