恒生电子2015春季校招笔试题

题目皆为不定项选择题,都选对为4分,选不全为2分,选错一个0分。

1、 对于 int *pa[5]; 的描述,正确的是()

A. pa是一个指向数组的指针,所指向的数组是5个int型元素

B. pa是一个指向某个数组第5个元素的指针,该元素是int型变量

C. pa[5]表示某个数组的第5个元素的值

D. pa是一个具有5个元素的指针数组,每个元素是一个int型指针

--------------------------------------------------------------------------------------------------------------------------------------------------------------

关键词:指针数组与数组指针

  • 指针数组:是一个数组,数组中每个元素是一个指针
  • 数组指针:是一个指针,指向一个具有n个元素的数组

这两个概念很容易混淆。其实只要记住优先级就好了:() > [ ] > *

  • int *pa[5]:下标符号[ ] 和优先级大于*,所以这是一个数组,即指针数组。
  • int (*pa)[5]:括号() 的优先级大于下标符号,所以先看括号内的内容,即指针*,所以这是一个指针,即数组指针。

参考答案:D

--------------------------------------------------------------------------------------------------------------------------------------------------------------

2、 IPV4中,数据报传播方式包括以下的()

A. 广播     B. 单播    C. 任播    D. 组播

--------------------------------------------------------------------------------------------------------------------------------------------------------------

关键词:广播、单播、组播

IPV4不支持任播(anycast),IPV6支持。

  • 单播(unicast):点到点一对一通信。将数据包发送到某一主机
  • 广播(broadcast):将数据包发送到局域网内所有主机
  • 组播(multicast):又叫多播,传播范围介于单播和广播之间。将数据包发送到加入同一组的主机
参考答案:C

--------------------------------------------------------------------------------------------------------------------------------------------------------------

3、 下面关于友元函数的描述中,正确的说法是()

A. 友元函数是独立于当前类的外部函数

B. 一个友元函数不可以同时定义为两个类的友元函数

C. 友元函数必须在类的外部进行定义

D. 在类的外部定义友元函数时必须加上friend关键字

--------------------------------------------------------------------------------------------------------------------------------------------------------------

关键词:友元

友元的出现其实是对面向对象编程思想的一种挑战,因为它破坏OO编程中信息封装的特性,使得一个外部函数可以操纵一个类的私有成员。这样做的好处大概是提高了编程的灵活性并精简了代码。不必像Java那样到处充斥getter和setter方法了。

  • 友元函数并不是类的组成部分,但是它却可以在类内部直接定义,但其作用域并不仅限于类内部,而是和该类的作用域相同,即类外部(但不超出类的作用域的地方)也可见。
  • 友元函数需要访问类的非static成员时,在声明时需要以该类的对象作为参数。
  • 友元参数需要访问类的static成员时,在声明时不需要以该类的对象作为参数。
  • friend只能用在类内部,在类外定义友元函数内容的时候,不能加friend关键字,否则报错。
  • 友元不是类的组成部分,所以可以定义为多个类的友元(多次重载即可)。
友元样例代码:
#include <iostream>
using namespace std;
class A
{
public:
	static int count;
	friend void test(A a);
	friend void test();
	A(int a=1,int b=2):i(a),j(b){};
private:
	int i,j;

};
int A::count = 0;
void test(A a)
{
    cout<<a.i<<" "<<a.j<<endl;
}
void test(){
	cout<<A::count<<endl;
};
int main()
{
	A a;
	test(a);
	test();
}
// 打印结果
1 2
0

参考答案:A

--------------------------------------------------------------------------------------------------------------------------------------------------------------


4、 以下关于数据库中索引的描述正确的是()

A. 只要允许,任何时候都应该添加索引以加快查询速度

B. 无论记录多少,使用索引都能给查询带来性能提升

C. 每次update/ insert/ delete操作都会导致索引被重新更新

D. 索引可以避免全表扫描

--------------------------------------------------------------------------------------------------------------------------------------------------------------

关键词:索引

数据库的索引并非越多越好,索引的增加会提交查询速度,但是会减慢数据库的修改速度,因为每一次修改都有更新索引,此外还会浪费存储空间(用于维护索引信息)。

此外,我个人认为:记录不多的情况下,使用索引并不能带来性能提升。


参考答案:CD

--------------------------------------------------------------------------------------------------------------------------------------------------------------


5、 事务的原子性是指()

A. 事务一旦提交,对数据库的改变是永久的

B. 事务中包括的所有操作要么都做,要么都不做

C. 一个事务内部的操作及使用的数据对并发的其他事务时隔离的

D. 事务必须使数据库从一个一致性状态变到另一个一致性状态

--------------------------------------------------------------------------------------------------------------------------------------------------------------

关键词:ACID、事务特性

  • 原子性(Atomicity):事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要们都不做。
  • 一致性(Consistency):事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
  • 隔离性(Isolation):对并发执行而言,一个事务的执行不能被其他事务干扰。
  • 持续性(Durability):一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。
参考答案:B

--------------------------------------------------------------------------------------------------------------------------------------------------------------


6、 时间复杂度为O(nlog2n)的排序算法有()

A. 快速排序 B. 堆排序

C. 冒泡排序 D. 折半插入排序

--------------------------------------------------------------------------------------------------------------------------------------------------------------

关键词:排序算法

在常见排序算法中,时间复杂度为O(nlog2n) 【这里指的是n乘以log以2为底的n】的有:快速排序、归并排序、堆排序

折半插入排序虽然减少了比较顺序,性能较一般的插入排序得到了提升,但是其时间复杂度不变,仍然是O(n^2)。


参考答案:AB

--------------------------------------------------------------------------------------------------------------------------------------------------------------


7、 软件工程师一种()分阶段实现的软件工程开发的方法

A. 自底向上

B. 自顶向下

C. 逐步求精

D. 面向数据流

--------------------------------------------------------------------------------------------------------------------------------------------------------------

关键词:软件工程

参考答案:B

--------------------------------------------------------------------------------------------------------------------------------------------------------------


8、 Linux操作系统中有如下的文件结构:

$HOME/aaa

$HOME/aaa/bb/a.txt

$HOME/aaa/my.c

请问如果要删除aaa文件夹,要执行的操作是:()

A. rm -rf $HOME/aaa

B. rmdir -f $HOME/aaa

C. rmdir $HOME/aaa

D. rm $HOME/aaa

--------------------------------------------------------------------------------------------------------------------------------------------------------------

关键词:rm、rmdir

很多人可能会误选rmdir。rmdir虽然从字面上理解是删除文件夹,但是它是删除空文件夹。并且rmdir 没有-f这个选项

rm的两个选项:-r 表示递归,即删除文件夹及其子文件和子文件夹。-f 表示force即暴力,无视提示信息。由题干可知,该文件夹并非空文件夹。


参考答案:A

--------------------------------------------------------------------------------------------------------------------------------------------------------------


9、 执行如下程序代码后,sum的值是()

	char chr = 127;
	int sum = 200;
	chr += 1;
	sum += chr; 

A. 72 B. 99 C. 328 D. 327

--------------------------------------------------------------------------------------------------------------------------------------------------------------

关键词:溢出

char类型可以看作是一个1个字节(8个位)的低精度整型。以整数角度来看,它能表示的整数范围是:-128~127

当chr += 1之后,此时chr的值变成128,但是这时候发生了溢出。此时要得出其实际的值用 128-256 = -128

所以sum+=char是200-128=72


参考答案:A

--------------------------------------------------------------------------------------------------------------------------------------------------------------


10、 开发一个逻辑模型:公司有10个部门,每个部门有6-7名员工,但每个员工可能会为不止一个部门工作,下面所给的模型正确的是()

A. 部门和员工之间是一种确定的一对多的关系

B. 建立一个关联表,从该关联表到员工建立一个一对多的关系,然后再从该关联表到部门表建立一个一对多的关系

C. 建立一个关联表,从员工表到该关联表建立以一对多的关系,然后再从部门表到该关联表建立一个一对多的关系

D. 这种情况下不能建立正常的数据库模型

--------------------------------------------------------------------------------------------------------------------------------------------------------------

关键词:多对多关系建表、关联表

解决多对多关系的建表方案,就是建立关联表。本题中,可以建立一个员工表(不包括部门id字段)、部门表(不包括员工id字段)。而关联表至少包括两个字段:员工id和部门id。如果还要给关联表增加一个字段的话就是单独新增一个关联id用做主键。

这样部门增加了员工,或员工加入了新的部门,只需要更新关联表就可了。


参考答案:C

--------------------------------------------------------------------------------------------------------------------------------------------------------------


11、 下面可用于字符串复制的函数有()

A. strcpy B. sprint C. strcmp D. strstr E. memcpy

--------------------------------------------------------------------------------------------------------------------------------------------------------------

关键词:字符串、库函数

B无此函数(可能是sprintf打印错误),C是字符串比较函数,D是求子串的函数


参考答案:AD

--------------------------------------------------------------------------------------------------------------------------------------------------------------


12、 指出下列代码的缺陷()

float f[10];
// 假设这里有对f进行初始化的代码
...
// for循环需要遍历f中所有的元素
for (int i = 0; i < 10; )
{
	if (f[++i] == 0)
		break;
}

A. for (int i = 0; i < 10; ) 这一行写错了

B. f是float型数据直接做相等判断有风险

C. f[++i] 应该是 f[i++]

D. 没有缺陷

--------------------------------------------------------------------------------------------------------------------------------------------------------------

关键词:浮点型、自增

主要问题:

  • 因为要遍历所有元素,所以不能使用++i
  • 浮点型不能向整型那样直接比较是否相等。

可选方案:

#include <math.h>
...
if (fabs(f[i++]) < 1e-5)
...
// 或者
#define ACCU 1e-5
...
if (f[i++] > -ACCU && f[i++] < ACCU)
...
精度也可以是1e-6。

参考答案:BC

--------------------------------------------------------------------------------------------------------------------------------------------------------------


13、 以下对C语言的有关描述中,正确的有:()

A. 在C程序中,函数调用不能出现在表达式语句中

B. 在C语言中,一个函数一般由两个部分组成,它们是函数首部和函数体

C. 函数和实参和形参可以是相同的名字

D. 在main()中定义的变量都可以在其它被调函数中直接使用

E. 外部类型的变量只能定义一次,但可以在不同的地方声明

--------------------------------------------------------------------------------------------------------------------------------------------------------------

关键词:函数、变量

参考答案:BCE

--------------------------------------------------------------------------------------------------------------------------------------------------------------


14、 有以下函数,该函数的功能是()

int fun(char *s)
{
	char *t = s;
	while(*t++);
	return (t - s);
}


A. 比较两个字符的大小

B. 计算s所指字符串占用内存字节的个数

C. 计算s所指字符串的长度

D. 将s所指的字符串复制到字符串t中

--------------------------------------------------------------------------------------------------------------------------------------------------------------

关键词:指针与自增

就优先级而言,自增运算符++大于星号*。但是这个++是在变量名后面的,所以是在该复合表达式的值返回之后,再进行自增。

设p = *t++; 则其等价于p = *t; t++。所以while(*t++)的意思是判断当前字符是否为NULL,如果是就终止循环(是不是NULL,t 都会自增)

如果是p = (*t)++; 就不一样了。其等价于p = *t; (*p)++。在指针所指向的值返回之后,该值加1。

注意当字节是'\0'是停止。最后计算字符偏移的时候,算上了'\0'。


参考答案:C

--------------------------------------------------------------------------------------------------------------------------------------------------------------


15、 下述程序的执行结果为()

#include <stdio.h>
void abc(char *str)
{
	int a,b;
	for(a = b = 0;str[a] != '\0'; a++)
		if(str[a] != 'c')
			str[b++] = str[a];
	str[b] = '\0';
}
void main()
{
	char str[] = "abcdef";
	abc(str);
	printf("str[] = %s",str);
}

A. str[] = abdef

B. str[] = abcdef

C. str[] = a

D. str[] = ab

--------------------------------------------------------------------------------------------------------------------------------------------------------------

关键词:字符串、字符指针

参考答案:A

--------------------------------------------------------------------------------------------------------------------------------------------------------------


相关推荐
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页