关于软件实施工程师的面试题有哪些

题外话:如果你想向我咨询软件实施工程师相关问题,我会劝退。非万不得已不建议转岗,能做开发就继续做开发。
在公众号龙腾万里 sky 回复软件实施即可获取一份本人精心自制的 PDF 文档一份,不定期更新优化。
tips:图片资源可能被防盗链(寄)了,可以右键属性复制地址在地址栏查看哈。
关于软件实施工程师的面试题,我个人也总结了一些,仅供参考。需要对主流 DBMS 厂商发行的数据库软件,例如 Oracle、MySQL、SQLserver 以及国产数据库 DM(达梦)有所了解,并能够熟练部署运用。
如果具备一些服务器方面的知识,比如 Windows Server 和 Linux 服务器相关知识。熟悉 Linux 基本维护是加分项,这里所说熟悉指至少熟练运用 Linux 基本命令与常用命令,软件管理部署,基本权限,系统维护。
如果你想支持小站持续发展,可以在文章尾部进行赞赏哟。
絮絮叨叨
说实话,目前软件实施这个行业资料稀缺,也很缺人才,体系还不够成熟。在小公司,你可能会身兼数职,比如配合开发工程师进行测试,也有可能承担部分运维方面的工作。以至于某招聘网站出现了开发运维测试实施工程师这种岗位。
本人之前从事 Java web 后端开发,后来转向了软件实施行业,深知这个行业很缺人。发展方向,可以朝着项目管理方向提升自我,比如利用空余时间考一个软考高项信息系统项目管理师、** 项目管理专业人士认证 (PMP)**。
个人目前有几个项目的现场实施经验,也与许多人打过交道。关于面试这方面,出题也差不多。如果是医疗行业,也许使用微软的那一套比较多。更注重的是临时应变能力和 SQL 的运用能力,以及对项目实施布控的周期预估和控制。
如果你有实际项目经验,基本上不会遇到笔试题。一般情况先与 HR 交谈,然后可能会与项目经理或者工程部主管进行沟通。下面给出一个面试复盘进行参考:
第一部分《软件实施面试实际方案篇》
一、软件实施面试专业技能试题
01 理论思考题
1、作为一名软件实施工程师,你的职责是什么?该岗位需要具备什么样的能力?
解答:
- 推广公司的产品,现场为客户实施安装。
- 熟悉公司的产品,现场对客户进行培训。
2、你熟悉的远程方式有哪些?各种方法应该怎么配置?
解答:
- Windows:常见的 QQ 远程桌面,或者用 QQ 办公版 TIM。
- 或者采取有远程桌面功能的软件,或者其它 OA 办公系统。最终达到预期目标,采用远程协助达成客户需求。
win10 还有自带的远程桌面

开启远程桌面协助

快捷键 win + r 打开任务输入 mstsc 命令打开远程桌面。

关于远程桌面补充一些个人工作中使用过的。
有桌面也有服务器版,个人主要在 Windows 平台使用:
- 向日葵
- ToDesk
- TeamViewer
目前个人更趋向于 ToDesk,更轻更快,体验友好一些。
云端远程桌面,个人主要在 Linux 平台使用:
- UltraVNC
- VNC-Viewer(realVNC)
Linux 发行版操作系统使用 ssh 远程连接:
- Xshell(个人版免费使用);
- SecureCRT(收费);
- Putty(免费);
- tabby(开源的多终端集合);
- FinalShell:这款优势带有监控 cpu 和内存使用情况图形化界面。
方式方法有很多,只要能实现 ssh 连接的终端工具。
文件传输工具:WinSCP-5.11.2-Setup。

3、在你进行实施的过程中,公司制作的一款软件系统缺少某一项功能,而且公司也明确表示不会再为系统做任何的修改或添加任何的功能,而客户也坚决要求需要这一项功能!对于实施人员来说,应该怎么去合理妥善处理这个问题?
解答:
- 首先看用户要求合不合理,不合理就坚决退还需求,如果需求合理,可以申请二次开发,需要考虑公司的利益。
- 然后综合考虑客户的重量级,对客户强调合同成本,外加某一项功能需要耗费的人力物力是需要付出额外的成本的。
- 最后考虑第三方软件补助。
4、如销售签有一外地客户,要求实施人员在客户现场一周内完成所有项目实施,而标准实施一般为期一个月,针对以上情况实施人员应该如何应对?
解答:
- 标准实施为一个月,那就按签订的合同行事。
- 然后考虑这个项目一周完成,在当前的人力和时间成本下是否可行。
- 如果想加快进度可以与公司沟通,额外派人,与客户客户协商额外的劳动成本。
5、在项目实施过程中,使用者对产品提出了适合自己习惯的修改意见,但多个使用者相互矛盾,应该如何去处理?
解答:
采用求同存异法。
- 对于客户的意见,我们实施人员应该有自己的实施方案。
- 当使用者意见出现不一致时候,引导客户内部意见达到统一和用户经过沟通确认后,找到切实可行的方案,双方认可并达成共识。
6、系统启动后,不能连接数据库,可能是哪些方面的原因?
解答:
- 检查网络原因;
- 检查数据库服务是否启动;
- 数据库文件是否被破坏;
- 数据库端口号问题(防火墙是否放通)
7、如果有一个不太懂电脑的客户,你应该采取什么样的方法去教他用公司的软件产品?
解答:首先教客户熟悉基本的电脑操作,然后参考相关文档操作,实际根据软件的复杂程度去教会客户熟悉使用公司产品。遵循由易到难,简单的可以直接教会客户熟悉运用。复杂的一步一步是 jio 印。
也可以做其它的补足:
- 制作 ppt;
- 图文操作文档;
- 录制视频。
8、针对于已有 5 年以上的客户,其产生的历史数据可以怎么处理?
解答:
- 综合考虑客户的重量级;
- 重量级客户,提前计划,做好用户数据的备份。一切从公司的利益考虑。
9、一般数据库若出现日志满了,会出现什么情况,是否还能使用?
解答:
- 只能执行查询等读取操作。不能执行修改,备份等写操作,原因是任何写操作都要记录日志。
- 数据库本就是需要承载读写操作的,也就是说基本上处于不能使用的状态。
02 SQL 实际操作题
10、已知 A、B 两表 A.id=B.AID 请分别写出内外链接的 sql 语句,并说明区别?
解答:
- 内连接关键字
inner join on;内连接取 A 和 B 的交集公共部分。 - 外连接关键字:
left join on,right join on。外连接分左外连接和右外连接,左外连接以左表为主,右外连接以右表为主。 - 参考下图,以数学集合的思想来思考更加清晰明了。
注意:外连接是可以省略 outer 关键字的,例如:左外连接 left outer join 简写为 left join,右外连接同理,后面配合 on 关键字。
二、SQL 中的联合查询图解
1、内连接
内连接:
1 | inner join on |

2、左外连接
左外连接:省略掉了 outer,下同。
1 | left join on |

3、右外连接
右外连接:
1 | right join on |

关联查询有 6 种,常用的两种,内连接和外连接。个人实际工作中内连接使用更多,具体视工作情况而定。这里不做详细说明,网上教程很多,可以自行参考。
4、可参考资料
菜鸟教程直通车:https://www.runoob.com/mysql/mysql-join.html
面试了几家招软件实施的,基本上前几道笔试题是考量你的现场应变能力,后几道笔试题是考量你对 SQL 的运用,关联查询这方面的试题居多。软件实施一般是需要去固定的场所驻场的,需要有自己的一套方案,做到心中有数,在现场不至于慌慌张张。也需要结合现场的实际情况,灵活变通运用。这个行业是需要靠时间累积行业经验,不是一蹴而就。
————————–更新后的补充 ————————–
第二部分《面试进阶,实际工作篇》
之前一些实际 SQL 操作,我直接引用了别人一些教程链接,发现在打广告就删掉了。引用菜鸟教程依旧保留,毕竟这货干净简洁。
思来想去,还是自己重新补充一些,毕竟 Oracle 方面的教程都比较久远了。以后可能不会像这样将具体内容更新进来了,会以链接形式发自己的面经和时间工作经验总结。当然,此次更新的内容也将以单篇发布出来。
官方提供的 sakila 和 world 数据库,官网下载地址已经提供,可以下载进行参考学习。
sakila-db 数据库包含三个文件:
- sakila-schema.sql:数据库表结构
- sakila-data.sql:数据库示例模拟数据
- sakila.mwb:数据库物理模型,在 MySQL workbench 中可以打开查看。
world-db 数据库,表结构与 data 数据包含在一起:
Oracle11g 安装后自带有 scott 用户,可以用来练习。主要用到的是 EMP 和 DEPT 表,想起了当年用 Java 的 ssh 框架写的第一个 CURD 的 demo 示例就是 Oracle 的这两张表,因为这两表有关联关系。
- EMP:员工表;
- DEPT:部门表;
我的测试环境基于:
- 操作系统:Windows10;
- 数据库:MySQL8.0.28 和 Oracle11g;
- 使用查询工具:MySQL8.0 自带命令行以及 Oracle 自带的 SQLplus;
- 第三方工具 SQLyog 和 PLSQL Developer。
三、联合查询
图解联合查询
内连接:统计的内容是 table1 和 table2 的重合部分。
1 | inner join on |

左外连接:可以省略掉 outer,统计的内容是以 table1 为主的部分。
1 | left outer join on |

右外连接:同样可以省略掉 outer,统计的内容是以 table2 为主的部分。
1 | right outer join on |

1、联合查询
1.1、MySQL 中的联合查询示例
- inner join on:内连接
- right join on:右外连接
- left join on:左外连接
MySQL 中的内连接查询关键字:inner join on,只作为演示,就不执行 explain 执行计划去判断执行效率了。小小的建议,在测试这些个联合查询的时候,可以不用带太多的过滤条件看看三种联合查询的区别。
1 | SELECT c.`ID`,c.`CountryCode`,cl.`CountryCode`,cl.`Language` |

MySQL 中的左外连接查询查询关键字:LEFT OUTER JOIN
1 | SELECT c.`ID`,c.`Name`,c.`CountryCode`,cl.`IsOfficial`,cl.`CountryCode`,cl.`Language` |

MySQL 中的右外连接查询关键字:RIGHT OUTER JOIN
1 | SELECT c.`ID`,c.`Name`,c.`CountryCode`,cl.`IsOfficial`,cl.`CountryCode`,cl.`Language` |

1.2、Oracle 中的联合查询示例
主要以 SCOTT 用户作为示例,查看 SCOTT 用户下有哪些表,这种方式需要以 dba 管理员身份运行 SQL 语句查询:
ower 代表了用户名,所以直接查找 SCOTT 用户,TABLE_NAME:代表了表名。
1 | select t.OWNER,t.TABLE_NAME,t.TABLESPACE_NAME from dba_tables t where t.OWNER='SCOTT'; |

Oracle 中的联合查询,同样以员工表(emp)和部门表(dept)进行演示操作。
Oracle 中的内连接:inner join on
根据部门编号进行关联查询,进行分页查询,每页显示 5 条数据:
1 | select e.ename,e.empno,d.deptno,d.dname from scott.emp e |

左外连接:left outer join on
1 | select e.ename,e.empno,d.deptno,d.dname from scott.emp e |

右外连接:right outer join on
1 | select e.ename,e.empno,d.deptno,d.dname from scott.emp e |

全连接:full join on
1 | select e.ename,e.empno,d.deptno,d.dname from scott.emp e |

组合查询:union
1 | select e.ename,e.empno from scott.emp e where rownum<=5 union select e.ename,e.empno from scott.emp e |

组合查询:union all
1 | select e.ename,e.empno from scott.emp e where rownum<=5 union all select e.ename,e.empno from scott.emp e |

union 和 union all 是有区别的,我列举的例子进行了模糊匹配,没演示出来效果。使用 union all 后 DBMS 不会取消重复的行。
去掉后面的 like 条件,使用 union 统计的数据为 14 行,使用 union all 统计的数据为 19 行,其实不难理解,all 就是全部。
2、分页查询
2.1、MySQL 的分页查询使用 limit 关键字
tips:Windows 中 CMD 命令窗口使用 color a 即可调用出黑色背景绿色字体,color f0 则是快速调出白色背景黑色字体哟!
护眼色:R:181 G:230 B:181
示例:使用 world 数据库中 city 表进行演示分页查询,通过 desc 展示数据结构,尤其是配合开发进行联调的时候很常用:
1 | mysql> desc world.city; |

查询 world 数据库中的 city 表前 5 条数据:
1 | mysql> select * from city limit 0,5; |

2.2、Oracle 的分页查询使用 rownum 伪列
同样使用 desc 关键字查询 emp 表结构:
1 | SQL> desc scott.emp; |

分页查询示例:使用 rownum 关键字进行演示 Oracle 中的分页查询。
查询 scott 用户中 emp(员工表)的员工 empno:编号、ename:员工姓名以及伪列 rowid,只查询前 5 条数据:
1 | SQL> select t.rowid,t.empno,t.ename from scott.emp t where rownum <=5; |

Oracle 进行分页查询常用方式一,查询第 6~11 数据通过嵌套子查询,使用到关键字 rownum 和 where:
1 | -- 统计emp数据总条目数 |
Oracle 进行分页查询常用方式二,先进行 order by 排序,再分页查询,查询第 6~11 数据:
1 | -- 先进行排序 |
四、聚合函数(Aggregate)
下面所讲的函数大多数标准 SQL 数据库是支持的,但也要依据实际情况做测试验证,个人主要验证的是 MySQL 和 Oracle。
重点:count、sum 函数在我们如果要迁移数据的时候,避免不了需要手动去统计求和对比迁移前后数据的一致性。
1、常见的聚合函数
介绍几个聚合函数:
- count 函数用于统计条目数;
- sum 函数用于求和;
- substr 函数用于截取;
- avg 函数用于取平均值;
- max 函数用于取最大值;
- min 函数用于取最小值。
如下则演示同时使用多个函数,查询 Oracle 数据库 scott 用户的 emp 表:
查询出来的结果:count 统计员工总数,sum 求和所有员工的薪水总额,avg 统计所有员工平均薪水,substr 则是截取到小数点后两位数。
1 | -- count:统计条目数,sum:求和,substr:截取,avg:取平均值 |

返回平均值 avg,一般配合 substr 关键字去截取,通过计算保留小数点后两位。
统计某公司员工的平均薪资:
1 | -- avg:取平均值 |

返回统计行数 count
统计某公司员工总数:
1 | -- 统计函数count:统计emp表条目数量14 |

返回总数(求和)sum,sum 函数一般会配合 decode 函数使用。上面的黑色背景看久了眼睛累,特意换了一种护眼色。字体颜色就没有特意更换,字体稍微点大了一丢丢,看的更舒服。
统计某公司所有员工薪资总和:
1 | -- 求和函数sum的使用 |

tips:count 函数在工作中使用的很频繁,你不清楚某张表中有多少条记录,需要统计一下再处理。
返回最大值 max
查看员工中薪水最高的那一位:
1 | -- max函数的使用 |

返回最小值 min
查看员工中薪水最低的那一位:
1 | select min(t.sal) from scott.emp t; |

Oracle 中的 rownum 伪列
统计公司员工中的最后一条记录,通过 rownum 实现:
1 | select t.sal from scott.emp t where rownum <=1; |

MySQL 中的分页 limit 关键字
通过 limit 关键字实现,根据 sakila 数据库中的 actor(演员表)为例子返回最后三条记录,使用 actor_id 进行排序。
注意:limit 属于 MySQL 扩展 SQL92 后的语法,在其它数据库中不能通用。Oracle 的分页可以通过 rownum 来实现,上面也介绍了。
1 | SELECT t.`first_name`,t.`actor_id` FROM sakila.`actor` t ORDER BY t.`actor_id` DESC LIMIT 0,3; |

2、着重掌握的函数
- group by 函数用于分组;
- having 函数用于过滤,对分组后内容进行过滤。
group by 函数
配合聚合函数 sum 使用,查询 Oracle 中 scott 用户下的 emp 表。使用 group by 进行分组,然后统计公司各部门员工的薪资:
1 | SELECT t.deptno, SUM(t.sal) AS sals FROM scott.emp t GROUP BY t.deptno; |

having 函数
区别:having 和 where 的区别在于,having 是对聚合后的结果进行条件的过滤,而 where 是在聚合前就对记录进行过滤。如果逻辑允许,应尽可能用 where 先过滤记录,由于结果集的减小,对聚合的效率明显提升。最后再依据逻辑判断是否用 having 再次过滤。
配合聚合函数使用,Oracle 中 的 scott 用户下 emp 与 dept 表。
先对部门名称进行分组,然后使用 having 过滤出薪水总和大于 10000 的部门:
1 | SELECT d.dname, SUM(e.sal) AS sals FROM scott.emp e |

五、SQL 核心知识
凡事应以实际工作场景而定。个人的以一些理解仅仅是建议,最终的应用还需结合实际应用场景。软件实施对 SQL 的函数、触发器和存储过程没有太高的要求,但也需要会基本的运用。在某些特殊的场景下,使用这些 SQL 的核心知识将有助于提高我们的工作效率。
1、函数
函数关键字:FUNCTION
使用第三方客户端工具新建函数,会自动生成一些模板:
1 | DELIMITER $$ -- 声明关键字DELIMITER |
2、触发器
触发器关键字:TRIGGER
使用第三方客户端工具新建触发器,会自动生成一些模板:
1 | DELIMITER $$ |
3、存储过程
存储过程关键字:PROCEDURE
支持完整事务的存储引擎,在保证数据的完整一致性情况下,尽可能多的使用 commit 事务提交。利用函数和存储过程一个好的示例,在 MySQL 中快速生成千万级别的数据大表进行测试就可以应用到,同时还能联想到测试性能。这是勾起我们学习的动力,一个比较好的方法。
使用第三方客户端工具新建存储过程,会自动生成一些模板:
1 | DELIMITER $$ |
4、典型的示例 sakila 数据库
这是一个 MySQL 官方提供的拥有存储过程、触发器和函数示例的电影出租信息管理系统数据库。并且官方提供了 EER 模型,便于理解每张表之间的关联关系,可以使用 MySQL workbench 打开 sakila.mwb 进行参考学习。如果你能完整的看完这篇文档,你会发现在一开始我就提供了 sakila 数据库的官网下载地址。
sakila 数据库视图:actor_info,演员信息视图
使用 DESC 关键字进行查看视图结构,这个关键字很实用哟。视图和表结构很像,以 sakila 中 actor_info 视图进行展示:

sakila 数据库存储过程:film_in_stock,电影库存
官方的一个示例:创建一个存储过程,声明了三个常量字段,然后分别赋值给演示字段,最后将找到的记录复制存到了 p_film_count 中。这里我为何说是复制呢?是因为使用到了 SELECT … INTO 关键字。
函数、触发器和存储过程最主要的一块在 BEGIN {业务逻辑区…} END 这一块区域。
1 | DELIMITER $$ |
关于函数我就不列举 MySQL 官方提供的示例了。
给出一点小小的建议,感觉对你没啥作用可以忽略掉:首先快速熟悉语法使用,对官方的示例进行解读,然后运行验证。最后,书写一些简单的示例达到熟练运用目的。不要只停留在想要执行,而是立即执行并带着思考去看待问题。多问一个为什么,思考本质。
—————— 更新于 2022-3-14——————
六、SQL 查漏补缺
- SQL 模糊匹配(like)
- SQL 通配符
- SQL 高级过滤
- show 操作符(主要介绍 MySQL 中的用法)
更新文章:最近回顾以前工作,发现这些操作符也挺常用的。
END 莫问收获,但问耕耘
终身学习,源于某一次面试的总结,结果停不下来了。以上也是对 SQL 常用联合查询以及聚合函数的一个总结,希望能对你的工作与学习有所帮助。善于总结,其乐不穷。好记性不如烂笔头,多收集自己第一次尝试的成果,收获也颇丰。你会发现,自己的知识宝库越来越丰富。
静下心来,才发现原来不会的还有很多。
一分耕耘,一分收获。
多总结,你会发现,自己的知识宝库越来越丰富。
以上总结,仅供参考!
最后,希望这篇总结对你的学习和工作有些许帮助!
—END—