wangyiming-rahim
  1. 什么是软件? 软件工程的使命和任务是什么?

    软件是利用计算机拓展人类理解事物, 执行任务和解决问题的智力系统. 软件工程的使命和任务是探索研发面向解决实际问题的智力系统的理论方法.

  2. 简答一个好的理论要具备的三个要素.

    Description, 能够清楚的描述一件事物.

    Prediction, 该理论能够预测事物的行为或发展.

    Control, 按照理论的描述和预测能够做到精准调控.

  3. 软件的三大定律是什么?

    软件第一定律:

    • 软件必须具备拓展人类解决问题的能力, 并且具有衡量软件外部可观察行为能力的评价指标.

    • 软件系统能力由外部可观察及可测试验证来界定, 并且软件内部实现必须支持软件系统能力的升级变化要求.

    • 软件系统能力的价值与某些业务问题密切相关.

    软件第二定律:

    • 任何实现用户价值的功能一定通过与系统交互完成, 而每个具体交互有一个明确目的和操作.

    软件第三定律:

    • 所有的软件技术进步都要经受不断设计出更合理的软件内部架构及其支撑软件持续升级的检验.

  4. 简述RUP与UML的含义, 并指明两个的不同点.

    RUP是统一软件过程. RUP是一种用例驱动的, 以架构为中心的, 采用迭代增量方式开发的软件工程过程. UML是统一建模语言, 用图形方式描述一个系统的静态结构和动态行为的一种可视化的面向对象建模语言. RUP利用UML进行可视化建模, RUP更倾向于为面向对象的软件系统开发提供了一种方法论的指导.

  5. 简述BDD与TDD的开发理念, 并说明二者的区别.

    TDD是从内到外的研发方式, 从代码层面入手, 要求先有单元测试, 然后针对测试实现函数内部功能, 通过所有测试. BDD是从外到内的研发方式, 从需求和领域场景入手, 先分析软件面对的领域真实场景, 提出软件应该满足的feature, 将每个feature分解为可能的应用场景, 再对每一个应用场景进行软件内部的设计. 两者主要的区别在于开发步骤, TDD借助单元测试来保证现有代码和新加入的代码尽可能满足设计. BDD从软件的领域表现入手, 设计内层逻辑.

  6. 软件生命周期划分为哪几个阶段?

    软件生命周期分为三个时期八个阶段:

    软件定义: 问题定义, 可行性研究.

    软件开发: 需求分析, 概要设计, 详细设计, 编码, 测试.

    软件运行: 软件维护.

  7. 软件的基础设施包括哪些?

    • 产品代码托管

    • 运维配置托管

    • 自动构建

    • 自动回归测试

    • 自动打包

    • 自动部署

  8. 如何理解软件设计原则中的高内聚低耦合原则?

    高内聚是指在设计某个模块时, 模块内部功能的相关性要高. 低耦合是指不同模块之间的相互联系的紧密程度, 模块之间的联系程度越紧密则耦合性就越高.

  9. 简单概括软件工程的三大根本问题, 九项重要任务和两种研发模式.

    三大根本问题:

    • 构思创造发明有价值的软件系统和找到检验其质量的理论和方法.

    • 探寻应对领域问题和软件需求变化的可动态升级软件模块的理论.

    • 探寻测算软件实现和部署运营的效益模型的理论.

    九项重要任务:

    • 软件需求和应用场景

    • 业务建模和数据模型

    • 软件架构和应用框架

    • 设计模式和代码重构

    • 接口设计和前端编程

    • 软件验证与自动测试

    • 安全问题和防御设计

    • 性能评价和设计优化

    • 集成部署和系统运营

    两种研发方式:

    • 基于人类学习的软件设计

    • 基于机器学习的软件设计

  10. 什么是用户故事?如何判断一个用户故事的好坏.

    用户故事用来定义功能需求, 用来帮助定义用户用例, 用来定义交替使用的用例. 可以从确定性, 可评估, 可实现, 相关性, 时间限制五个方面来判断.

  11. 如何建立业务模型的用例视图

找到业务边界, 找到业务主角, 获取业务用例.

  1. 简述UML实际建模过程.

    1. 分析阶段: 捕捉系统的功能需求, 分析提取所开发系统的类, 描述它们的合作关系.

    2. 设计阶段: 将分析阶段的模型转化为可行的技术方案.

    3. 实现阶段: 编码, 对现有的模型进行改正.

    4. 配置阶段: 通过软硬件配置情况建立配置模型.

    5. 测试阶段: 通过前几个阶段的模型来指导和协助测试工作.

  2. 什么是敏捷开发?什么是Scrum方法?

敏捷开发是以用户的需求为核心, 采用迭代的方式进行开发. 把一个大项目分为若干小项目, 分别完成. 在此过程中软件一直保持可用状态. Scrum方法是迭代式增量软件开法发, 是敏捷开发的一种具体过程.

  1. 什么是基于计划-文档开发方法?

计划-文档开发的核心思想是按工序将问题化简, 便于分工协作. 它将软件生命周期划分为自上而下的固定顺序, 所以也叫做瀑布软件开发流程.

  1. 什么是持续集成开发?

持续集成是一天多次将代码分支合并到主干. 在合并之前, 必须通过自动化测试. 这样的好处是能够让产品快速迭代, 同时还能保持高质量.

  1. 什么是MVC?

MVC是Model, view, controller的缩写, 一种软件设计典范. 用三者分离的形式去组织代码. 控制器接受用户的请求, 决定哪个模型对其进行处理, 然后模型根据用户请求进行处理, 并返回处理, 最后控制器调用相应的视图呈现给用户.

  1. 什么是螺旋软件开发模型? 它有什么特点?

螺旋模型是一种演化软件开发的过程模型, 它兼顾了快速原型迭代的特征以及瀑布模型的系统化和严格监控. 最大的特点在于引入了风险分析, 使软件在无法排除重大风险的时候会停止, 减小损失.

  1. 什么是结构分析方法? 该方法使用什么描述工具?

    面向数据流进行数据分析的方法. 采用自顶向下逐层分析的分析策略. 使用数据流图, 数据字典作为描述工具.

  2. 结构化程序设计的主要内容是什么? 它有什么优缺点?

    结构化程序设计的思路就是自顶向下, 逐步求精. 程序结构按照功能划分为若干个模块, 各个模块之间的关系尽可能简单, 功能上相对独立. 其优点是将一个大规模的, 复杂的程序系统分解成若干子任务, 便于开发和维护. 缺点是当结构改变时, 所有相关的程序可能都要修改.

  3. 列出五种设计模式.

    工厂模式, 抽象工厂模式, 单例模式, 原型模式, 组合模式.

  4. 什么是TDD红色绿色重构?

    TDD的红色绿色重构从一个写周期开始, 因为它测试的主题代码还不存在, 所以会失败(红色). 完成必要的功能后使其通过测试(绿色).

  5. 什么是DRY无重复代码?

    任何一部分的知识在系统内必须有一个单一的, 明确的, 权威的描述. 这也称为无重复原则. 该原则产生的原因是解决在开发过程中, 复制粘贴相似的代码后, 导致在修复或添加功能时, 未对所有副本进行修改.

  6. 软件开发中的重构是什么? 为什么需要重构? 有哪些基本原则?

    在不影响外部表现的前提下, 对内部实现调整和修改. 重构的目的是为了使代码更清晰, 提高性能, 改进系统设计, 方便更新. 重构的基本原则是以一致性为目标, 避免深度嵌套, 采取单独关注SRP原则, 避免重复, 高内聚低耦合.

  7. 什么是代码味道?什么是SOFA原则?

    代码味道是源代码的结构特征. 和真实气味一样, 代码味道能够将我们的注意力吸引到可能有味道的地方. SOFA代表了四种味道: Short, 保持简短; one, 只做一件事; few, 少量参数; Abstraction, 维持一个固定级别的抽象.

  8. 什么是类间SOLID原则?

    单一责任原则: 一个类仅有一个修改的原因.

    开闭原则: 类应该对拓展开放, 对修改关闭.

    里氏替换原则: 子类应该能够替换它的基类.

    接口隔离原则: 接口应该有尽可能少的行为.

    依赖注入原则: 高层模块不应该依赖底层模块.

  9. 什么是文档对象模型和jQuery?

    文档对象模型是一个包含了层次结构元素的与语言无关的标准表示. jQuery库是一个轻量级Javascript库.

  10. JavaScript函数的特点.

    通过字面量创建, 赋值给变量或属性, 作为参数传递, 作为结果返回, 拥有属性和方法.

  11. HTML的特点和作用.

    HTML是用来描述网页的一种超文本标记语言, 使用标签来描述网页.

  12. Ruby语言面向对象的特点.

    Ruby中的一切都是以对象的形式出现. 所有的内容都是一个对象, 类本身也是一个对象, 是Class类的实例. 类用于指定对象的形式, 它结合了数据表示法和方法. 类中的数据和方法称为类的成员.

  13. 简述Ruby中的public, private, protected.

    public方法可以被任何对象调用. 只有类方法可以访问private内容. protected只能被类及其子类的对象调用.

  14. Ruby属于什么类型的语言?它有怎样的特性?有哪些优点?

    Ruby是一种面向对象的语言, 脚本语言. 特性是完全面向对象, 变量没有类型, 任何东西都有值. Ruby语言通俗易懂, 可移植性高, 可动态载入.

  15. Css规则的构成.

    由选择器 声明构成, 声明又包含属性和值.

  16. Ruby中数组的特点.

    通过[ ]索引访问, 可以直接赋值操作, 通过+, -号进行合并和删除元素, 通过 << 向原数据追加元素, 通过*重复数组元素, 通过&, |做交集和并集操作.

  17. Ruby中Hash的特点.

    Hash是键值对的方式存在, 形式如key -> value. 哈希类似数组, 但是是没有顺序的.

  18. Ruby迭代器each和collect的特点.

    迭代器是用来做重复的事情, 迭代器是集合支持的方法. each迭代器返回数组或哈希的所有元素, collect迭代器返回集合的所有元素.

  19. 解释迭代器背后的通用yield.

    迭代器是一个遍历某个数据结构的方法, 并且用yield每次传一个元素给迭代器的接受者.

  20. 列出五种测试方法.

    验收测试, 集成测试, 单元测试, 压力测试, 黑盒/白盒测试.

  21. 什么是A/B测试?目的是什么?测试步骤是什么?

    A/B测试是一种用数据进行产品决策的方法, 它用于比较程序的两个版本, 确定哪一个更好. A/B测试是一个试验机制, 通过统计分析确定哪个版本最好. 测试目的是消除UI设计的纷争, 对比实验找出问题, 降低新产品发布风险. 测试步骤是现状分析, 假设建立, 设定目标, 界面设计, 技术实现.

  22. 什么是TDD?

    TDD是测试驱动开发, 是敏捷开发中的一种. TDD是先编写单元测试用例代码, 由测试代码确定需要编写什么产品.

  23. 什么是FIRST测试原则?

    快速:能够快速的运行测试用例. 独立: 任何测试都应该是独立的. 可重复: 测试行为不依赖于外界因素. 自校验: 每一个测试不需要人为确定对错. 及时: 测试应该在代码被测试的时候创建或更新.

  24. Git的工作流程.

    • Clone Git资源目录.

    • 添加修改文件.

    • 如果其他人修改了, 可以进行更新.

    • 提交前查看修改.

    • 提交修改后, 如果有错误, 可以撤回并修改.

  25. 简述软件工程的两种研发方式.

    基于人类学习的软件设计: 人类发现问题, 提出解决方案, 然后设计代码, 交由计算机解决.

    让计算机学习程序, 给出样本数据, 计算机训练处解决方案, 然后集成到计算中解决问题.

  26.  

分类:

技术点:

相关文章:

  • 2021-12-10
  • 2021-12-20
  • 2021-12-15
  • 2021-08-12
  • 2021-12-15
  • 2021-05-04
猜你喜欢
  • 2021-12-04
  • 2021-09-21
  • 2021-06-20
  • 2021-06-01
  • 2021-12-14
相关资源
相似解决方案