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寄存器指向的永远是下一条要执行的指令
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.软件工程是一种自底向上分阶段实现的软件工程开发的方法。
解析:×
结构化设计思想:自上向下逐步求精
解析:
( 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
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基类。
正方形继续继承长方形,此时只需要改写长方形的一些方法,而不需要增加多余的成员。
构造函数,根据功能的不同可能需要完备考虑,目前如果只想获取面积,构造函数可以按照上面的方式,采用默认参数来达到目的。
16.某机器集团公司下属的厂包括技术科、生产科等基层单位。现在想建立一个计算机辅助企业管理系统,其中:
生产科的任务是:
(1)根据销售公司转来的内部合同(产品型号、规格、数量、交获日期)制定车间月生产计划。
(2)根据车间实际生产日报表、周报表调整月生产计划
(3)以月生产计划为以及,制定产品设计(结构、工艺)及产品组装月计划。(4)将产品的组装计划传达到各科,将组装月计划分解为周计划,下达给车间 技术科的任务是:
(1)根据生产科转来的组装计划进行产品结构设计,产生产品装配图给生产科,产生外购需求计划给供应科,并产生产品自制物料清单。
(2)根据组装计划进行产品工艺设计,根据产品自制物料清单产生工艺流程图给零件厂。 试写出以上系统中生产科和技术科处理的软件结构图。
解析:
软件结构图是软件系统的模块层次结构,反映了整个系统的功能实现,即将来程序的控制层次体系,软件结构往往用树状或者网状的图形来表示,其主要内容有模块及模块之间的控制关系,根据题意,可绘制出生产科和技术科的软件结构图,生产科的图宽度和深度均为4,技术科的图宽度和深度均为3。
原文:https://www.cnblogs.com/zhang512/p/12049769.html