软件开发工程师笔试试题-应届毕业生
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
天音通信软件开发工程师岗位笔试试题
1、面向对象的思想主要包括什么?
封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部。
继承:子类拥有父类的所有数据和操作。
多态:一个程序中同名的不同方法共存的情况。
2、进程和线程分别怎么理解?
进程是表示资源分配的基本单位,又是调度运行的基本单位;
线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。
进程和线程的关系
1、一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
2、资源分配给进程,同一进程的所有线程共享该进程的所有资源。
3、处理机分给线程,即真正在处理机上运行的是线程。
4、线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现
同步。
3、黑盒测试和白盒测试是软件测试的两种基本方法,请分别说明各自的优点和缺点?
黑盒测试:不关心软件的内部结构,只关心输入和输出,主要依据需求文档;
白盒测试:专注于设计和实现的内部结构的软件和程序,主要依据设计文档;
缺点:
白盒测试只考虑测试软件产品,他不保证完全满足规范要求;
黑盒测试只考虑测试需求规格说明,它并不保证所有部件进行测试来实现;
优点:
黑盒测试会发现缺失的缺陷,指出哪部分是未完成的规范;
白盒测试会发现代码的缺陷,实现部分是错误的。
4、选择测试用例有哪些原则?
1、代表性:能够代表并覆盖各种合理的和不合理、合法的和非法的、边界的和越界的、
以及极限的输入数据、操作和环境设置等。
2、可判性:即测试执行结果的正确性是可判定的,每一个测试用例都应有相应的期望
结果。
3、再现性:即对同样的测试用例,系统的执行结果应当是相同的。
5、请阅读以下程序:
public class ClassParent
{
public int Add(int a, int b)
{
return a + b;
}
public virtual int Substract(int a, int b)
{
return a - b;
}
public abstract int Multiply(int a, int b);
protected abstract int Divide(int a, int b);
}
public class ClassChild : ClassParent
{
public override int Substract(int a, int b)
{
return b - a;
}
public override int Add(int a, int b)
{
return a * 2 - b;
}
public override int Divide(int a, int b)
{
return a / b;
}
}
请问以上程序能否正常编译运行?如果不能,请说出程序中有哪几处错误,应如何改正?
6、请写出以下程序的运行结果:
public class A
{
public static int i = 0;
public A()
{
Console.WriteLine(@"A");
}
public virtual void fun()
{
i++;
}
}
public class B : A
{
public new int i = 0;
public B()
{
Console.WriteLine(@"B");
i++;
}
public override void fun()
{
i--;
base.fun();
}
}
public class Main
{
static void Main(string[] args)
{
A a = new A();
B b = new B();
b.fun();
Console.WriteLine(A.i);
Console.WriteLine(b.i);
}
}
7、请编写一个函数,它可以找出某一字符串中出现次数最多的英文字母(不区分大小写,
只考虑A-Z),并且可以返回这个字母以及它出现的个数。比如对于输入字符串“I am a student”,该函数应当返回字母“A”以及个数2。只可以使用.NET标准类库内的成员。
#include "stdio.h"
#include "string.h"
void fun(char *p,int *a)
{
int i;
while(*p)
{
for(i=0;i<26;i++)
if(*p=='a'+i||*p=='A'+i)
{
a[i]++;
}
p++;
}
for(i=0;i<26;i++)
printf("%d\n",a[i]);
}