如何评测软件工程知识技能水平?
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.
双指针法
以上是关于如何评测软件工程知识技能水平?的主要内容,如果未能解决你的问题,请参考以下文章