欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

软件工程师笔试题

程序员文章站 2022-05-14 21:50:52
...

软件笔试题
一、问答题
1、什么是子网掩码、什么是网关。
网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。
子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。 子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。

2、TCP/IP通信建立的过程怎样,TCP和UDP有什么区别。
TCP: 可靠传输协议,速度慢,一般用于文件,与控制指令的传输。
UDP: 不可靠传输协议,速度快,一般用于多媒体数据帧的传输 (视频,音频)

3、用什么函数开启新进程、线程(不限语言)
进程 fork()
线程 pthread_create(pthread_t *tidp,const pthread_attr_t attr,(void)(start_rtn)(void),void *arg);

4、找出一个整数数组中,第二小的数(不限语言)

int find_2_min(int *arr,int nums)
{
	int i=0;
	int min = 65535;
	int min_ = 65535;

	for(i=1;i<nums;i++)
	{
		if(arr[i]<min)
		{
			min_ = min;
			min = arr[i];
		}
		else if(arr[i]<min_ && arr[i] != min)
			min_ = arr[i];
	}

	printf("min:%d,min_:%d\n",min,min_);

	return min_;
}

5、const 有什么用途?(请至少说明两种)
只读
1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)
2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

6、程序的局部变量存在于( 栈 )中,全局变量存在于( 静态区 )中,动态申请数据存在于( 堆 )中。
7、 简述你所开发过自定义控件, 谈谈它的功能与基本实现.若没有,请简要描述下你所接触的第三方控件实现

8、写一函数int fun(char *p)推断一字符串是否为回文(对称),是返回1,不是返回0,出错返回-1.
int fun(char *p)
{
if(p==NULL)
return -1;
else
{
int length = 0;
int i = 0;
int judge = 1;
length = strlen§;
for(i=0;i <length/2; i++)
{
if(p[i]!=p[length-1-i])
judge = 0; break;
}
if(judge == 0)
return 0;
else
return 1;
}
}

9、产生死锁的原因主要是?
1)、系统资源不足 ; 2)、进程运行推进的顺序不合适 3)、资源分配不当等

补充死锁的四个必要条件:1 互斥条件:一个资源每次只能被一个进程使用
2 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放
3 不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺
4 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系

10、进程间通信有哪些?
无名管道、有名管道、消息队列、共享内存、信号量、信号

11、软件开发一般有哪几个阶段
问题的定义及规划、软件需求分析 、软件设计、 代码编写 、 软件测试

12、二级指针怎么声明(不限语言)
int k,*p,**pp;
k=8;p=&k;pp=&p

13、linux基础命令
(1)获取kernel版本信息的命令是什么?
umane -a / cat /proc/version / lsb_release -a

(2)新建文件夹命令是什么?
mdkir

(3)查找文件的命令是什么?
find

(4)拷贝的命令是什么?
cp
14、当你遇到一个开发难题的时候,你会通过哪些途径寻求解决方法,说明下原因。

二、不定项选择题
1、 面向对象的语言具有继承性、多态性和( A ) 。
A) 封装性 B) 拆箱性 C) 封闭性 D) 逻辑性

2、构造函数何时被调用?( A )
A)创建对象时 B)类定义时
C)使用对象的方法时 D) 使用对象的属性时

3、下列选项中,( C )是引用类型。
A)enum类型 B)struct类型
C)string类型 D)int类型

4、下列关于构造函数的描述正确的是( C )
A)构造函数可以声明返回类型。
B)构造函数不可以用private修饰
C)构造函数必须与类名相同
D)构造函数不能带参数

5、有两个线程,最初 n=0,一个线程执行 n++; n++; 另一个执行 n+=2; 问,最后可能的 n 值?( BCD )
A. 1
B. 2
C. 3
D. 4
P.S:都不是原子操作,所以都有可能被中断

6、进程进入等待状态有哪几种方式?( D)
A. CPU调度给优先级更高的线程
B. 阻塞的线程获得资源或者信号
C. 在时间片轮转的情况下,如果时间片到了
D. 获得spinlock未果
P.S ABC都是就绪态
7、递归函数最终会结束,那么这个函数一定?( B )
A. 使用了局部变量
B. 有一个分支不调用自身
C. 使用了全局变量或者使用了一个或多个参数
D. 没有循环调用

8、如果进栈序列为e1,e2,e3,e4,e5,则可能的出栈序列是( )
A、e3、e1、e4、e2、e5
A、e5、e2、e4、e3、e1
A、e3、e4、e1、e2、e5
D、以上都有可能
我觉得这道题应该是出错了,没有正确答案

三、思维题:
1、阐述下对目前新型技术的看法和理解,例如人工智能、大数据、5G,或者论坛等等(任何新型科技皆可,发散性思维阐述下)。

四、逻辑推理题:
1、如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?

先打满5公升的提桶,然后把空的3公升提桶倒满,再把3公升提桶清空装5公升提桶剩下2公升水,
再次把5公升提桶装满,然后往3公升提桶倒水把桶装满,此时5公升桶里即有4公升的水。

2、教授选出两个从2到9的数,把它们的和告诉学生甲,把它们的积告诉学生乙,让他们轮流猜这两个数
甲说:“我猜不出”
乙说:“我猜不出”
甲说:“我猜到了”
乙说:“我也猜到了”
问这两个数是多少

3,4 4,6

思路,先取出2~9之间积可能重复的两个数的组合,(2,6)(2,9) (3,4) (3,6) (3,8)
(4,6)
当甲说他猜到了,证明排除和相同的组合,剩下(2,6)(3,4)(3,6)(4,6)
当乙猜到了,排除乘积相同的,剩下(3,6)(4,6)
此时已无其他线索,得到最终答案。