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

Posted lygttxs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何评测软件工程知识技能水平?相关的知识,希望对你有一定的参考价值。

在评价软件工程师的软件工程知识技能水平高低之前,我想结合自身实际和看到过的很多资料、接触的人等,去描述“码农”这个广义上大众对程序员的定义以及“软件工程师”俩者之间的区别。

码农:“农”,顾名思义,编写代码的农民。听起来,更多的像是一种体力活。这也是新时代下广大底层程序员的生存现状,大多通晓几门编程语言和常用商业框架,是一个没有感情的敲码机器。

软件工程师:较前面那个词,一下子就高大上起来了。对于一名软件工程师而言,扎实的编码能力只是其才能的冰山一角。能够精准定位用户的需求,站在产品实现的角度,对市场、技术、附加价值等多方面全面分析。依靠充足的经验和能力,设计出符合预期的产品,充分满足需求。

 

而以下几个角度,我认为可以作为参考去评价软件工程师的能力

1、兴趣导向

程序员是一个终身学习的职业,优秀的工程师,需要有强大的兴趣驱动力,有充足的勇气跳出自己的“舒适圈”,积极主动了解技术最前沿,研究各种新兴技术、工具和语言。

2、全栈能力扎实

软件工程师在项目未落地之前,思考问题的角度不应该是“我熟悉这个语言这个方法”,项目的开展应当从此开展。而是开始考虑“什么工具(编程语言等)最适合解决这个特定的项目和客户?”。

3、质疑精神

软件工程师并不该盲从,他们注重的不仅仅是“What & How”,至少会问问“Why”——搞清楚做新需求的意义与老板本质的需求。最后他们可能会提出另一种更简单,但不同的解决方案,既节省了自己的时间,又降低了公司的成本。

4、管理能力

软件工程师不拘泥于做一个编码工,他可以成长为一名资深架构师,有能力担任公司的CTO职位,有能力将纷繁复杂的商界与屏幕上一行行代码相连。

 

——————————————————————————————————————————————————————————————————————————————————

一、选择题(部分原创,部分来自牛客网)

1、图书管理系统中“超期罚款”用例和“还书”用例之间的关系是(        )

A.使用关系(use) B.包含关系(include) C.扩展关系(extend) D.泛化关系(generalization)

 

C:扩展关系,“超期罚款”是在“还书”的基础上产生。

2、有这样一个类:

class Eye{

    public:

    void Look(void);

};现在希望定义一个Head类,也想实现Look的功能,应该使用( )方法,实现代码重用。

A.继承 B.组合 C.模板 D.过滤 

 

B:Look是Eye本身所具有的功能,反过来Eye如果没有Look功能就不是一个完整的Eye。因此Look是Eye必不可少的一部分,就像车胎是汽车的一部分一样,代码复用最好的办法是用组合。

3、下列关于关联、聚合(Aggregation)以及组合(Composition)的区别描述正确的是?()

A. 关联是表示两个类的一般性联系

B. 组合体现的是整体与部分、拥有的关系,即has--a

C. 聚合体现的是contains--a

D. 以上均不对

 

A.聚合表示has-a的关系,是一种相对松散的关系,聚合类不需要对被聚合类负责,如下图所示,用空的菱形表示聚合关系;

而组合表示contains-a的关系,关联性强于聚合:组合类与被组合类有相同的生命周期,组合类要对被组合类负责,采用实心的菱形表示组合关系。

 

4、关于模块化设计的观点,不正确的是___。 

A追求模块内各项功能的高内聚性和不同模块之间的低耦合性

B若两个模块之间需要传递复杂参数,最好通过全局数据(如database)的方式实现之

C模块的接口要保持尽可能的小

D尽量避免通过传递控制参数来调用其他模块

 

B.公共耦合,是指全局变量、共享的通信区等。公共耦合无法控制各个模块对公共数据的存取,严重影响软件的可靠性。

 

5、在软件生命周期中,()阶段负责“概括地说,应该怎样实现目标系统”。

A. 需求分析

B. 问题定义

C. 可行性分析

D. 总体设计

 

D

 

6、面向对象的分析方法主要是建立三类模型,即()。

A. 系统模型、ER模型、应用模型

B. 对象模型、动态模型、应用模型

C. E-R模型、对象模型、功能模型

D. 对象模型、动态模型、功能模型

 

D

 

7、结构化分析模型的核心是(   ),它描述了所有的在目标系统中使用的和生成的数据对象。

A. 顺序图

B. 数据词典

C. 数据流图

D. 用例图

 

B.

①结构化分析使用的主要手段有数据流图、数据字典、结构化语言、E-R图、判定表以及判定树等,其中数据字典是结构方法的核心,E-R图接近人们的思维方式;

②用例图是描述系统功能的模型,是对功能行为的建模;

③顺序图表示各个对象或功能行为的执行顺序与时间。

 

8、如果有些功能的执行时间很长,以下()最会让顾客感觉到等待很长时间。
A. 使用进度条显示当前执行进度的百分比

B. 将鼠标指针变为漏斗形状

C. 在等待过程中引导用户去做一些其他功能,等原功能执行完成后再返回

D. 将该功能拆分为多步,每步执行结束后给用户展示中间结果

 

B

 

9、判断学生–课程的相互关系()

A. 整体-部分

B. 一般-特殊

C. 实例联接

D. 都不是

 

C

 

10、判断学生–大一新生的相互关系()

A. 整体-部分

B. 一般-特殊

C. 实例联接

D. 都不是

 

B

11、以下你认为属于软件缺陷的选项是()

A. 某软件首次打开比二次打开慢

B. 电脑空间不足导致手机助手无法继续导入照片,手机助手无提示,中断导入任务

C. 某app在手机使用时耗电严重,且机身伴有发热现象

D. 某网站使用IE打开,排版失效,文字显示错乱、图片变形

 

B

 

二、名词解释(均来自课上PPT)

(1)软件工程的设计原则:

模块化、接口、信息隐藏、增量开发、抽象、通用性

 

(2)统一过程:

用例驱动、架构为中心、增量且迭代的过程

 

(3)重构:

通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性

 

(4)观察者模式:

一个目标物件管理所有相依于它的观察者物件,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新,被用来实现事件处理系统,又被称为“发布——订阅”模式

 

(5)多态:

指同一个实体同时具有多种形式,有不同的解释,产生不同的执行结果,是面向对象程序设计的重要特征

 

(6)功能内聚:

模块内所有元素共同完成一个功能,缺一不可

 

(7)设计模式:

一套被反复使用,多数人知晓,经过分类、代码设计的经验总结

 

(8)实现视图:

描述代码组织结构的一种视图

 

(9)发布订阅的架构风格:

消息的发送者不将信息直接发给特定的授权者,而是将发布消息分类,无需了解哪些订阅者可能存在

 

(10)抽象:

从具体事物抽出、概括出它们共同的方面,本质属性与关系

 

三、简答题

(1)计算机科学和软件工程的不同侧重点

 

技术图片

 

 

 

(2)猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒,问:

① 设计可能用到什么设计模式?

② 画出其类图

 

① 观察者模式,分析:要有联动性,老鼠和主人的行为是被动的;考虑可扩展性,猫的叫声可能引起其他联动效应。

 

 

技术图片

四、编程题

(1)(leetcode-1 两数之和)给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标。(如果你的算法是O(n^2)级别,能否降低其时间复杂度)

示例:给定 nums = [2, 7, 11, 15], target = 9,

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

解答(javascript版本)

a.暴力法

使用两层循环,外层循环计算当前元素与target 之间的差值,内层循环寻找该差值,若找到该差值,则返回两个元素的下标。

技术图片

 

 

b.利用数组减少查询时间

在暴力法中,内层循环查找差值很浪费时间,那么如何减少查询时间呢?利用数组就可以减少查询时间。使用一层循环,每遍历到一个元素就计算该元素与target 之间的差值diff,然后到以diff为下标到数组temp中寻找,如果temp[diff]有值,则返回两个元素在数组nums的下标,如果没有找到,则将当前元素存入数组temp中。

技术图片

 

(2)输入:具有n个浮点数的向量x,

输出:输入向量的任何连续子向量中的最大和。假定输出的最大和为非负数。

示例:若输入向量包含下面的10个元素,则输出为 x[2...6]的总和,即187.

 

技术图片

双指针法

技术图片

以上是关于如何评测软件工程知识技能水平?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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