首页 > 其他 > 详细

如何评测软件工程知识技能水平?

时间:2019-12-18 21:33:00      阅读:115      评论:0      收藏:0      [点我收藏+]

选择题5*2

1、UML是软件开发中的一个重要工具,它主要应用于哪种软件开发方法(    )。(商汤科技2018秋招嵌入式软件工程师笔试)

A.基于瀑布模型的结构化方法

B.基于需求动态定义的原型化方法

C.基于对象的面向对象的方法

D.基于数据的数据流开发方法

解析:C

UML是统一建模语言(UML是 Unified Modeling Language的缩写)是用来对软件密集系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。UML是非专利的第三代建模和规约语言。 UML是在开发阶段,说明,可视化,构建和书写一个面向对象软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。UML可以贯穿软件开发周期中的每一个阶段。被OMG采纳作为业界的标准。UML最适于数据建模,业务建模,对象建模,组件建模。UML作为一种模型语言,它使开发人员专注于建立产品的模型和结构,而不是选用什么程序语言和算法实现。当模型建立之后,模型可以被UML工具转化成指定的程序语言代码。IBM的Rational Rose和MS的Visio都是UML工具。

 

2、多态的作用( )(顺丰科技2019秋招嵌入式软件开发工程师客观题合集)

A.隐藏细节

B.提高可重用性

C.扩展代码模块

D.提高编译可靠性

解析:ABC

 

3、软件工程的出现主要是由于( )

A.程序设计方法学的影响     

B.其它工程科学的影响 

C.软件危机的出现   

D.计算机的发展

解析:C

软件规模越来越大,结构越来越复杂;软件开发管理困难而复杂;软件开发技术落后;生产方式落后,仍采用手工方式;开发工具落后,生产率提高缓慢。

 

4.

void main (void) {

    char a[] = “SF-TECH” ;

    a++;

    printf (“%s”, a);

}

程序的输出是什么?( )(顺丰科技2019秋招嵌入式软件开发工程师客观题合集)

A.Error

B.SF-TECH

C.F-TECH

D.都不是

解析:D

a不是指针变量,不能自増

 

 5.无条件转移指令功能是将指令中的地址码送入()

A.栈寄存器

B.PC

C.地址寄存器

D.ALU

解析:B

PC寄存器指向的永远是下一条要执行的指令

 

判断题(5*2)

6.程序员必须明确地用函数fopen打开标准输入流、标准输出流和标准错误流。(顺丰科技2019秋招嵌入式软件开发工程师客观题合集)

解析:×

fopen的原型是FILE *fopen(const char *filename, const char *mode)它返回一个FILE结构指针,其中包含了对所打开流进行操作的全部信息,包括文件描述符。当执行程序时,STDIN STDOUT STDERR会自动打来,无需调用fopen打开。

 

7.查找随机存取文件中的指定记录不必从头逐条查找。(顺丰科技2019秋招嵌入式软件开发工程师客观题合集)

解析:

随机存取文件是将记录散列在存取介质上的,可以自己定位想要读的文件内容的指针位置,不必从头查找。

 

8.有n个进程共享一个临界资源,使用信号量机制实现资源的访问互斥,信号量的最小取值是-n+1。(顺丰科技2019秋招嵌入式软件开发工程师客观题合集)

解析:

信号量的初始值为1,有n个进程,最极端的情况就是如果有一个进程正在访问临界资源,其他n-1个进程都在等待,此时信号量为 0- (n-1) = -n + 1

 

9.将类的一个对象赋值给该类的另一个对象时会调用拷贝构造函数。(顺丰科技2019秋招嵌入式软件开发工程师客观题合集)

解析:×

复制构造函数被调用的三种情况

定义一个对象时,以本类另一个对象作为初始值,发生复制构造;

如果函数的形参是类的对象,调用函数时,将使用实参对象初始化形参对象,发生复制构造;

如果函数的返回值是类的对象,函数执行完成返回主调函数时,将使用return语句中的对象初始化一个临时无名对象,传递给主调函数,此时发生复制构造。

 

10.软件工程是一种自底向上分阶段实现的软件工程开发的方法。

解析:×

结构化设计思想:自上向下逐步求精

 

简答题4*10

11.列出用户级线程比内核级线程至少两个优点。(2009中山大学软件工程期末考试试题)

解析:
1 ) 线程切换不需要内核模式特权,因为所有 线程管理数据结构都在单个进程的用户地址空间内。因此,该进程不会切换到内核模式来执行线程管理。这样可以节省两个模式切换的开销(用户到内核;内核到用户)。

( 2 ) 调度可以是针对特定应用的。一个应用程序可能会受益于简单的循环调度算法,而另一应用程序可能会受益于基于优先级的调度算法。可以针对应用程序量身定制调度算法,而不会打扰底层的OS调度程序。

(3 ) ULT可以在任何操作系统上运行。无需更改基础内核即可支持ULT。线程库是所有应用程序共享的一组应用程序级实用程序。

 

 12.软件测试应当遵循什么原则

解析:

软件测试应当遵循原则如下:

1)用例由输入数据和预期的输出数据两部分组成,因为这样便于对照检查,做到有的放矢。

2)用例不仅选用合理的输入数据,还要选择不合理的输入数据。因为当以特殊方式使用程序时,会突然发现程序中有许多错误,故 使用预期的不合理的输入数据进行程序测试,比用合理的输入数据 收获要大,从而能更多地发现错误,提高程序可靠性。

3)除了检查程序是否做了它应该做的事,还应该检查程序是否做了它不应该做的事,因为如果程序做了它不应该做的事,即使程序 能做它应该做的事,程序也是错误的。

4)应制定测试计划并严格执行,因为这样可以排除随意性。

 

 13.团队合作中,对一个任务的实现方式上,你与另一个同事有分歧,你将如何处理这种情况。(网易2020校招笔试- 嵌入式软件工程师)

解析:

对于领导委派的任务,我们要认真地完成,但是与我们合作的人和我们有矛盾是工作的障碍,所以为了完成任务必须先解决和同事的矛盾。和同事之间的矛盾我们要分情况区别对待。既有个人之间的私人矛盾,也有纯粹的工作矛盾,但是有时候这两种矛盾很难区分,无论如何我们都要先从自己身上找问题,找差距。一般个人的问题有为人和处事两个方面。为人上有主动和被动之别,被动一般会被别人理解为傲慢,不尊重人,所以沟通的时候要体现主动。为人还要尊重别人才能获得别人的尊重。处事有做事方式、方法和程序的问题。做事方式有民主型、专断型等,所以我们在反思的时候要从这几个方面入手,根据不同的原因采取不同的方法。在处理矛盾问题时既要有意识层面的认识,又要有具体的方法。这样才能体现个性,展现能力。

 

14.侏罗纪公园包括一个恐龙博物馆和一个狩猎骑乘公园。有m个乘客和n个单人车厢。乘客们在博物馆里逛了一会儿,然后排队乘坐游猎车。当一辆车可用时,它会载上它所能载的一名乘客,并在公园里随机行驶一段时间。如果n辆车都出来搭载乘客,那么想要搭载的乘客就会等待;如果一辆车已经准备好装载,但是没有等待的乘客,那么这辆车就会等待。使用信号灯、wait()和signal()同步m个乘客进程和n个轿厢进程。 

解析:

semaphores:

var car_available := n; var passenger_wait := 0;

 

process passenger(i := 1 to num_passengers)

wandering for a random time; signal(passenger_wait);

wait(car_available);

end passenger

 

process car(i := 1 to num_cars)

wait(passenger_wait);

take passenger wandering;

signal(car_available);

end car

 

编程题(20)

15.我们需要编写一个图像相关的应用程序,需要处理大量图形(shape)信息,图形有矩形(Rectangle),正方形(Square), 圆形(circle)等种类,程序需要能够计算这些图形的面积,并且在某个设备上面绘制出来。

1) 请使用面向对象的方法进行设计,编写可能需要的类。

2) square是否应该继承Rectangle,为什么?

商汤科技2018校招

解析:

1)

#include <iostream>

#define M_PI 3.14159265358979323846

using namespace std;

 

class shape

{

public:

    shape(double i=0):area(i) {}

    virtual double get_area()=0;

protected:

    double area;

};

 

class Rectangle :virtual public shape

{

public:

    Rectangle(double x=0, double y=0):length(x),wigth(y) {

    }

    double get_area() {

        area = length * wigth;

        return area;

    }

protected:

    double length;

    double wigth;

};

 

class Square: public Rectangle

{

public:

    Square(double x=0) {

        length = x; wigth = x;

    }

    double get_area() {

        area = length * wigth;

        return area;

    }

};

 

class circle :virtual public shape

{

public:

    circle(double x = 0):radius(x){}

    double get_area() {

        area = radius * radius*M_PI;

        return area;

    }

protected:

    double radius;

};

 

int main()

{

    circle A(2);

    Rectangle B(1,2);

    Square C(1);

    cout << A.get_area() << endl;

    cout << B.get_area() << endl;

    cout << C.get_area() << endl;

    system("pause");

     

    return 0;

}

2)设计的时候 考虑shape是虚基类,因为其不应该被实例化,但是其应该具有一些其他派生类共有的属性,比如面积,绘图方法等。这些方法都应该在继承类中实现。

派生类长方形或者圆形都应该虚继承Shape基类,考虑到有些派生类可能是多次继承shape基类。

正方形继续继承长方形,此时只需要改写长方形的一些方法,而不需要增加多余的成员。

构造函数,根据功能的不同可能需要完备考虑,目前如果只想获取面积,构造函数可以按照上面的方式,采用默认参数来达到目的。

 

 

软件结构设计题(20)

16.某机器集团公司下属的厂包括技术科、生产科等基层单位。现在想建立一个计算机辅助企业管理系统,其中:

生产科的任务是:

1)根据销售公司转来的内部合同(产品型号、规格、数量、交获日期)制定车间月生产计划。 

2)根据车间实际生产日报表、周报表调整月生产计划 

3)以月生产计划为以及,制定产品设计(结构、工艺)及产品组装月计划。(4)将产品的组装计划传达到各科,将组装月计划分解为周计划,下达给车间 技术科的任务是:

1)根据生产科转来的组装计划进行产品结构设计,产生产品装配图给生产科,产生外购需求计划给供应科,并产生产品自制物料清单。

2)根据组装计划进行产品工艺设计,根据产品自制物料清单产生工艺流程图给零件厂。 试写出以上系统中生产科和技术科处理的软件结构图。

解析:

技术分享图片

软件结构图是软件系统的模块层次结构,反映了整个系统的功能实现,即将来程序的控制层次体系,软件结构往往用树状或者网状的图形来表示,其主要内容有模块及模块之间的控制关系,根据题意,可绘制出生产科和技术科的软件结构图,生产科的图宽度和深度均为4,技术科的图宽度和深度均为3

如何评测软件工程知识技能水平?

原文:https://www.cnblogs.com/zhang512/p/12049769.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!