软件工程试题

真的好难,

1、数据库三范式是什么,用1个例子的演化举例三范式。(5分)

第一范式:每个字段不可再分;
第二范式:非主属性没有对主属性的部分依赖
第三范式:没有传递依赖,非主属性不依赖于其他非主属性

2、举出20个java关键词,再按自己常用顺序写出10个关键词。(5分)

Public private default protected int char Boolean long short float double byte void null continue do while for if else return final finally throw throws try catch static class extends interface implements import super this new synchronized volatile

3、举出20个jsp关键词,再按自己常用顺序写出10个关键词。(5分)

Break switch case continue default do while if else for finally function typeof in new try catch this throw var void let with

4、面向对象是什么?三大特性是什么?五大基本原则是什么?举个实际例子(5分)

面向对象就是把一个东西抽象出来独立封装,把现实中的事物都抽象为对象,每个对象是唯一的,且都有它的属性和行为
三大特性:封装就是隐藏对象的属性和实现细节,仅对外公开接口,抽象得到的数据和行为相结合,形成一个有机的整体,增强安全性和简化编程。
继承就是子类继承父类的特征和行为。多态(继承、重写、父类引用指向子类对象this super)就是同一行为具有不同的表现形式,即不同的对象进行同一行为有不同的表现形式(动物叫)
五大原则:1、单一职责原则(SRP)2、开放封闭原则(OCP)3、里氏替换原则(LSP)4、依赖倒置原则(DIP)5、接口隔离原则(ISP)

5、JAVA在命名风格、代码格式、OOP规约、控制语句、注释各写出5条编码规范。(10分)

命名风格:

  1. 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
  2. 【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
  3. 【强制】类名使用 UpperCamelCase 风格,必须遵从驼峰形式
  4. 【强制】方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。
  5. 【强制】常量命名全部大写,单词间用下划线隔开,
    代码格式:
  6. 【强制】大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;如果
    是非空代码块则:
    1) 左大括号前不换行。
    2) 左大括号后换行。
    3) 右大括号前换行。
    4) 右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。
  7. 【强制】 左小括号和字符之间不出现空格;同样,右小括号和字符之间也不出现空格。
  8. 【强制】if/for/while/switch/do 等保留字与括号之间都必须加空格。
  9. 【强制】任何二目、三目运算符的左右两边都需要加一个空格。
  10. 【强制】采用 4 个空格缩进,禁止使用 tab 字符。
    OOP规约:
  11. 【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成
    本,直接用类名来访问即可。
  12. 【强制】所有的覆写方法,必须加@Override 注解。
  13. 【强制】相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object。
  14. 【强制】外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生
    影响。接口过时必须加@Deprecated 注解,并清晰地说明采用的新接口或者新服务是什么。
  15. 【强制】不能使用过时的类或方法。
  16. 【强制】Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用equal
    控制语句:
  17. 【强制】在一个 switch 块内,每个 case 要么通过 break/return 等来终止,要么注释说明程序将继续执行到哪一个 case 为止;在一个 switch 块内,都必须包含一个 default 语句并且放在最后,即使它什么代码也没有。
  18. 【强制】在 if/else/for/while/do 语句中必须使用大括号。即使只有一行代码,避免采用单行的编码方式:if (condition) statements;
  19. 【推荐】表达异常的分支时,少用 if-else 方式,这种方式可以改写成:
    if (condition) {

    return obj;
    }
    // 接着写 else 的业务逻辑代码;
    说明:如果非得使用 if()…else if()…else…方式表达逻辑,【强制】避免后续代码维护困难,请勿超过 3 层。
  20. 【推荐】循环体中的语句要考量性能,以下操作尽量移至循环体外处理,如定义对象、变量、获取数据库连接,进行不必要的 try-catch 操作(这个 try-catch 是否可以移至循环体外)。
  21. 【推荐】接口入参保护,这种场景常见的是用于做批量操作的接口
    注释:
  22. 【强制】类、类属性、类方法的注释必须使用 Javadoc 规范,使用/*内容/格式,不得使用
    // xxx 方式。
    说明:在 IDE 编辑窗口中,Javadoc 方式会提示相关注释,生成 Javadoc 可以正确输出相应注释;在 IDE 中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。
  23. 【强制】所有的抽象方法(包括接口中的方法)必须要用 Javadoc 注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。
    说明:对子类的实现要求,或者调用注意事项,请一并说明。
  24. 【强制】所有的类都必须添加创建者和创建日期。
  25. 【强制】方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释使用/* */注释,注意与代码对齐。
  26. 【强制】所有的枚举类型字段必须要有注释,说明每个数据项的用途。

6、写出5种以上的函数重构的原则?随意一个原则个例子(5分)

单一职责原则 — SRP
开放封闭原则 — OCP
依赖倒置原则 — DIP
接口隔离原则 – ISP
Liskov里氏替换原则 — LSP子类型(subtype)必需能够替换掉它们的基类型
迪米特法则(最小知识原则) – LOD一个对象应当对其他对象有尽量少的了解。(动物)

7、view,control,service,map,entity配合流程图和分别用一句话写出职责?(10分)

View:视图层,展示给用户
Control:控制层,控制接口调用和前后端数据传递
Service:业务层,实现具体业务
Map:数据库层,与数据库打交道,调用sql语句
Entity:对象实体层,封装现实世界中的实体对象,
在这里插入图片描述

8、Linux系统,写出查看特定程序的步骤及其命令。(5分)

1、查找命令程序
例如,查找 touch 命令
[root@node1 /]# whereis touch
2、查找应用程序
例如,查找 nginx 服务
[root@node1 /]# whereis nginx

9、文件管理和数据库管理有什么相同点?文件管理和内存管理有什么不同点?(5分)

(1) 均为数据组织的管理技术;
(2) 均由数据管理软件管理数据,程序与数据之间用存取方法进行转换;
(3) 数据库系统是在文件系统的基础上发展而来的。
内存管理:Cache系统(速度问题)cache块 虚拟存储系统(容量问题)TLB快表和page页表
文件管理:在磁盘(外存)索引存储,TCB文件控制块,实现逻辑地址到物理地址的转换;分配、回收、调整存储区;

10、Ajax中post和get有什么差异?(5分)

get和post其实没有本质区别,以上区别只是我们平时编程中的习惯

GET和POST是什么?HTTP协议中的两种发送请求的方法。
HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。
HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。

GET产生一个TCP数据包;POST产生两个TCP数据包。

GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。

11、写出Intellij的调试service的步骤?举个例子(10分)

在代码左边打断点–>debug方式运行项目–>前端页面操作–>代码走到断点处断点调试–>下一行、看实时参数值、数据传递值–>看控制台错误原因或关键信息–>请求放行、重复操作直至达到预期效果

12、写出posman调试接口的步骤?举个例子(5分)

新建Request请求,选择请求方式,填写请求url,填写请求参数和token授权,点击send按钮发送请求,查看请求结果

13、chrome的elements、sources、console分别用来调试什么?举个例子(5分)

Element标签页 : 用于查看和编辑当前页面中的 HTML 和 CSS 元素。调试html和css
点左上角的小指针,就能选择页面元素,进行定位调试
Source 标签页:用于查看和调试当前页面所加载的脚本的源文件。调试js代码
Console 标签页:用于显示脚本中所输出的调试信息,或运行测试脚本等,调试日志、报错,调试js表达式

14、PDCA是什么?如何用于自我提升? (5分)
Plan do check action(调整方案) 循环检查是否会成长,有无体系成长思路
一是自己单独就能做到的PDCA,二是囊括他人在内的PDCA。
首先是要调整自己的思维,然后掌握尽可能多的经验值的技能。

15、清单是什么? (5分)

清单式管理是指针对某项职能范围内的管理活动,优化流程,建立台账,对工作内容进行细化、量化,形成清晰明确的清单,严格按照清单执行、考核、督查的管理制度。通俗讲,就是把要做的事情或不准做的事情一一罗列出来,系统筹划,列示目标、任务节点、时间节点、责任人员,并监督考核,检查做事思路是否完整

16、泳道图是什么? 用例图是什么?(5分)

泳道图就是UML软件开发中活动图的一种,通过横纵线来表达部门职能和岗位,将企业公司中的人事关系进行划分,让数据更加具有层次感。由于泳道图是将活动组织用线框分为不同区域,形状酷似泳道,所以被称作泳道图。泳道图可以直观的描述各类活动的关系,方便理解业务逻辑

用例图:一个图,由参与者(系统用户)、用例(系统功能)、以及他们之间的关系构成的,用于描述系统功能的动态试图

17、如何评估任务时间?(5分)
1 提高需求认知 - 任务拆分
2 提高技术认知 - 做 Spike
3 提高时间认知 - 计算有效时间
4 提高风险认知 - 合理预留 Buffer 预留 Buffer !也可称为“容错时间”。
5 回头看
回头看,不断校正,逐步趋于精确。
不断练习,积累经验, 预估时间会越来越接近实际用时。

18、模块设计的步骤?(5分)

  1. 检查本模块相关流程图
  2. 确认本模块相关页面
  3. 设计本模块相关属性
  4. 设计本模块相关功能
  5. 确认本模块相关的模块

19、模块开发的步骤?(5分)
1.生成基础代码
2.编写测试接口
3.编写功能
4.编写相关模块功能
5.编写接口
6.集成测试
20、编写接口的步骤?(5分)
1.编写control的action
2.编写service的函数
3.编写mapper的函数
4.列出输入输出值矩阵,进行测试。
5.检查性能(10万数据级别,小于0.3秒)
6.检查安全性(只允许输入输出矩阵中数据)
7.检查边界(输入输出矩阵完整)
8.检查原子性(确定多次请求同一个接口,相互没有干扰;请求多个相关接口,相互之间无干扰)
9.检查多线程(在原子性基础上,多次请求性能下降不大(低于20%))
10.联调

21、编写管理功能的UI的步骤?(5分)
1.根据原生风格编写UI(弹窗/列表,展示/编辑属性)
2.UI数据与接口联通
3.列出输入输出值矩阵,进行测试。
–1).处理输错提醒
–2).处理返回值错误提示
–3).检查接口性能(10万数据,小于0.3秒)
4.处理空值时展示(列表)

22、代码生成示例类型?(10分)
单表
主附表
树表
富文本
图片管理
自定义树组件
自定义Grid
多对多
左树右表
23、编写前端功能的步骤?(5分)
1.将美术稿根据业务模块切块,生成页面模块清单
2.编写页面模块和主页面矩形布局
3.编写页面模块
1).编写HTML元素
2).编写css
3).联调接口
4).处理业务流程
4.检查代码编码规范
5.列出输入输出值矩阵,进行测试
1).处理输错提醒
2).处理返回值错误提示
3).检查接口性能(10万数据,小于0.3秒)
6.处理空值时展示(列表)
24、集成自测的步骤?(5分)
1 通用配置,更新junit4,
2 项目配置
3 生成测试用例模板
4 填写测试用例,确定用户接口及其用户使用场景。(一组用例)
根据一个用户使用场景填写用例目的。(一条用例)
根据用例目的,思考用户步骤
将用户操作步骤转换成成具体的接口。(一条步骤)
设计各步骤接口请求参数和预期结果,通过swagger进行模拟请求并获取结果
将模拟请求后的结果填写至用例步骤中去。
设计下一个用户使用场景
设计下一个接口。
5 进行测试
25、SVN解决代码冲突的步骤?(5分)
1.找到冲突的位置
2.确认冲突位置自己代码的目的是什么。
3.确认冲突位置别人代码的目的是什么,是谁写的。
4.判断解决方案
1).互不干扰:则两边代码都复用
2).自己代码是对的:则覆盖服务器代码
3).对方代码是对的:则使用服务器代码
5.重复第1步,直至没有冲突。
6.测试修改冲突的地方是否有bug。
7.跑自动化测试。
26、Control的职责(5分)(越简单越好)

  1. 权限验证(权限安全)
  2. vo转换成dao (数据安全)
  3. 业务转发/重定向
  4. 请求service
  5. dao转换成vo (数据隐私)
    6.决定用什么view (用户体验)
    27、Service的职责?(5分)(一次定义,到处使用)
  6. 数据校验(鲁棒性)
  7. 数据缓存(用内存换性能)
  8. 具体业务
  9. 决定用什么数据库(读写分离)
  10. 整体业务性能处理(空间、时间复杂度)
  11. 跟其它业务的关系(内聚性和耦合性)
  12. 原子性、并发与死锁(锁、死锁、回滚)
  13. 修改日志 (信息安全)
    28、编码规范的愿景是?(5分)
    本手册的愿景是码出高效,码出质量。现代软件架构都需要协同开发完成,高效
    协作即降低协同成本,提升沟通效率,所谓无规矩不成方圆,无规范不能协作。众所
    周知,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全。试想如
    果没有限速,没有红绿灯,谁还敢上路行驶。对软件来说,适当的规范和标准绝不是
    消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的统一方式
    一起做事,提升协作效率。代码的字里行间流淌的是软件生命中的血液,质量的提升
    是尽可能少踩坑,杜绝踩重复的坑,切实提升质量意识。
    29、java后端开发流程
    1、拉取代码到本地
    2、更新最新代码
    3、构建项目
    4、代码生成器使用
    5、将生成的代码导入项目中
    6、完善代码
    7、启动项目并测试
    8、提交代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值