关键词:JavaWeb开发;SpringBoot;结构化面试;一体化系统
0 引言
结构化面试是根据招聘岗位需求,通过特定的测评内容、测评标准、测评程序,由特定的面试小组与应聘人员进行面对面交流的一种人才测评过程。通过结构化面试,考官能全面评价应聘人员的综合能力,包括社会现象分析能力、组织协调能力、综合分析能力等。与传统面试形式相比,结构化面试的内容、评分标准及程序均按统一的规定进行[1]。自2006年起,我国在事业单位招聘考试中确立了“凡进必考”的招聘原则[2]。结构化面试长期以来作为公务员招录考试、事业单位公开招聘考试中测评应试者综合能力和素质的一种常用面试方法,在优化人才选拔、彰显考试公平方面具有重要意义。目前,大部分的结构化面试仍以纸质化方式记录面试评分数据,并采用人工方式实现计时、计分、核分等环节,不仅组织困难、效率低下,而且需要支出大量的人力成本和资金成本。通过计算机技术对整个结构化面试流程进行信息化管理,一方面可以高效组织面试流程,节约时间成本,实现对面试的程序化、规范化管理;另一方面可以对面试数据进行格式化存储和可视化分析,为优化结构化面试策略提供数据支撑。
1 系统需求分析
需求分析旨在明确系统开发目标和范围,主要分为系统功能需求和非功能需求(包括性能需求、安全需求等)。实现结构化面试的无纸化管理须遵循现有结构化面试流程:面试开始前,须根据报考岗位对考生进行分组,并在组内抽签确定考生面试次序;同时根据考场情况对所有考官进行抽签,确定每个考场的主考官人选,依据抽签结果确定每个考官的考场号、座位号;最后将考生抽签结果数据、考官抽签结果数据汇总到各考场进行面试[3]。系统功能需求分为考生管理、考官管理、核分管理、数据管理,各部分功能需求如图1所示。
2 系统体系结构
该结构化面试一体化系统采用经典的基于Java⁃ Web开发技术的三层体系架构,即表现层、业务逻辑层、数据持久层。表现层面向用户,用于发起网络请求以及响应数据处理结果,其中考生管理服务、考官管理服务、数据管理服务采用Thymeleaf模板引擎来解析HTML网页数据;电子评分系统使用Android应用程序实现考官的评分结果与后端核分业务逻辑的数据交互[4]。业务逻辑层用于面向前端提供数据服务,接收前端发送的数据处理请求,根据既定的业务规则处理数据后返回给前端。业务逻辑层基于SpringBoot,采用SpringMVC+Spring+MyBatis(SSM) 技术架构,完成视图解析、业务逻辑处理、数据持久化等功能。数据库采用关系型数据库MySQL与非关系型数据库Redis 结合的方式,Redis 用于数据缓存,MySQL用于对业务数据进行持久化存储。整体系统体系结构如图2所示。
3 系统设计
系统服务在运行过程中会产生大量的考试信息数据,主要包含考生信息、考官信息、考生成绩信息等,需要进行持久化存储。MySQL作为传统的关系型数据库,其使用便捷和稳定的事务处理机制在数据存储和管理方面有着重要作用。而对于系统中频繁访问的数据,如考场编号、考生分数等,使用MySQL直接存储会造成系统访问压力,降低运行速度,因此增加Redis 数据库对热点数据进行中间缓存可以减缓对MySQL的访问压力,提升系统效率。
3.1 关系型数据库设计
考生管理系统服务与考官管理系统服务最终的目的是获取考生的抽签结果数据以及考官的抽签结果数据。由于两个服务在部署的物理位置上存在隔离,故拥有独立的数据库,分别命名为examee_draw_ lots和examiner_draw_lots。数据库表分别存储考生的基本信息、签到信息、抽签结果,以及考官的基本信息、签到信息、抽签结果。考生的抽签结果表包含身份证号、抽签号、分组号等字段;考官的抽签结果包含考官身份证号、姓名、身份(主考官或普通考官)、考场号、座位号。
电子评分系统服务与数据管理服务均包含对考生面试得分的数据处理模块,并要实现实时的数据同步,因此涉及的关系型数据包含相同的字段,用于记录每位考官对每位考生的赋分分值,数据库表中包含的字段如表1所示。
3.2 非关系型数据库设计
在电子评分系统服务中,服务端的主要功能是控制整个面试流程的自动进行,获取每个考官对某个考生的评分结果,并根据一定的核分规则计算考生的最终成绩。实现该功能需要实时记录当前考场的面试进度、赋分进度和核分进度。为提升系统性能,采用Redis数据库对考场情况、赋分情况等热点数据进行缓存,并配置持久化策略[5]。例如,存储考生的分数数据时采用Hash数据结构,键的命名规则采用组合方式,如“Score-A1-3”代表“A1”考场“3”号考生的分数。每个考生在面试时会有多位考官进行赋分,因此在记录考生分数的Hash结构中,值的Filed存储考官的编号,Value存储实际的分值。Redis中具体的数据结构设计如表2所示。
4 系统实现
系统功能的实现紧密依托当前的结构化面试组织流程,该一体化系统的实现可以进一步精简相关角色,如计时员、记分员等。精简后的角色包含考务办公室工作人员、候考室工作人员、考官室工作人员、考场内工作人员、考官五类角色。其中,考务办公室工作人员负责配置本次考试的相关信息,如考生的身份信息、考官的身份信息以及考场信息(包括考场数量、各考场面试人数)等;候考室工作人员负责对1个或多个考场的考生进行签到及抽签,获取每位考生的面试次序;考官室工作人员负责对所有考官进行批量抽签,确定每位考官所在的考场以及座位号;考场内工作人员负责下载本考场的面试考生抽签结果数据以及考官抽签结果数据,控制本考场的面试流程;考官负责对每位考生进行面试测评并给出面试分数。整体的流程图及各角色职能如图3所示。
4.1 数据管理服务
数据管理服务对外发布考生信息、考官信息、考场信息、评分要素等数据的下载接口。该模块包含数据下载验证程序,相应的系统角色在考前会分别收到各自角色的数据下载授权码。在进行数据上传与下载时,需要输入对应的授权码,服务端校验通过后方能进行数据上传与下载操作。数据被下载之后,服务端会记录下载次数,禁止重复下载及多次下载以确保数据的一致性。
数据管理模块与其他系统服务间的数据通信使用基于Spring 的REST 访问工具RestTemplate 来实现。RestTemplate简化了HttpClient发起网络请求的接口,使发送HTTP请求更加便捷。例如,下载考生抽签数据时,只需要配置目标服务器URL,添加访问参数并发起请求,即可获取考生抽签数据。具体代码如图4所示。
4.2 考官管理服务与考生管理服务
考生管理系统服务与考官管理系统服务的核心功能是实现抽签。在实际操作过程中,无论是考官还是考生,均须先进行签到才可以抽签。在考官管理服务中,主考官不允许缺考,且存在主考官和普通考官两种不同身份;在考生管理服务中,允许考生缺考。
考官管理服务抽签模块中,考官在签到时需要确定考官身份,且主考官数量必须与考场数量相等,操作界面如图5所示。抽签时,由考官管理员进行一次性集体抽签,确定考官所在的考场及座位号,最后将抽签结果上传至考点服务器。
在考生管理服务抽签模块中,实行逐个抽签的操作模式,考生在签到时完成抽签活动。由于考生抽签过程持续时间较长,为避免断电等意外情况造成的数据丢失,考生抽签过程在MySQL数据库中用临时表记录并进行事务管理与持久化存储。系统根据考生预先的分组数量及各组的考试人数分别创建一条数据记录,最后形成数据抽签池。考生签到时,随机从考生所在组内挑选一个序号分配给该考生;待抽签完毕后,抽签池内剩余序号即为该组的缺考序号,最后将抽签结果与缺考人员序号上传至考点服务器。
4.3 电子评分系统服务
电子评分系统服务的功能是从考点服务器下载各考场的考生信息、考官信息,依据考试评分标准按次序完成对考生的赋分、核分操作,主要包含以下几个模块。
4.3.1 设置当前的面试考生
该系统可以实现面试流程的自动控制。主考官开启面试流程后,系统跳过当前的缺考考生,呈现给考官们当前待面试考生的面试序号;考官赋分、系统核算分数完毕后,继续流转到下一个考生,如此循环,直到面试结束。其中,设置当前待面试考生是电子评分系统服务的关键功能。主考官开启面试流程前,应用程序通过获取本考场的总人数,创建包含所有人序号的数据列表。考生服务抽签完毕后,会将缺考考生信息上传至考点服务器,电子评分系统服务获取相应考场的缺考信息,并将本考场的缺考人员序号创建一个Set集合,最后将所有人序号列表与该Set集合求补集得出待面试人员集合,以列表(rightPush方式)形式存入Redis中。考官开启面试时,通过获取Redis对应列表的最左侧元素作为待面试考生,代码实现如下:
4.3.2 展现面试进度与赋分进度
在考官赋分界面及考场内管理员界面,均包含本考场的面试进度及当前考生的赋分进度。在面试进度功能模块中,根据考生的面试状态,主要分“未面试考生”“正在面试考生”“面试结束考生”“缺考考生”。
在Redis数据库中,以List形式存储待面试考生的面试抽签号序列,其中List的第一个元素为正在面试的考生,其余考生为未面试考生。同时,以Set形式存储面试结束考生的抽签号及缺考考生的抽签号。从Re⁃ dis数据库中获取上述四种不同面试状态的考生号序列,以HashMSiNZzPTzhOQzBtobANpDAF6gvOtk1QZ730pUlpNZKLM=ap形式返回给前端,前端通过数据解析后,为考官及考场管理员展现面试进度。
在当前考生赋分进度界面中,考官的赋分状态分为“已赋分”“未赋分”。在Redis 数据库中,每位考官对当前考生赋分后,会以Hash形式存储考生的面试序号和分数。通过遍历Redis 数据库中考官对当前考生的赋分情况,可以获取考官的赋分状态,最后返回至前端,界面如图6 所示。
进行面试测评时,考生须在规定的考试时间内完成答题,系统须添加倒计时功能来提示考官及考生当前的时间进度。系统采用客户端与服务器双向校验的方式实现倒计时功能,既能缓解多个客户端并发访问带来的服务器压力,又能实现精准计时。其设计思路流程图如图7所示。
4.3.3 考官赋分功能实现
考官赋分界面面向考官,实现对考生综合评价的打分功能。面试开始前,由考场管理员下载评分要素,考官根据各评分要素分别进行评分。系统会对考官的赋分情况进行数据校验,当单个要素分值超过最高分值时,会提示错误并清空打分数据。考官点击暂存按钮后,输入框变为只读属性,并自动计算4个要素的分值之和,如图8所示。考官点击提交分数按钮后,系统将各评分要素的分值及分数总和提交至后台,后端数据校验无误后存入数据库。当所有考官都提交成绩后,系统计算考生最终的面试成绩。
4.3.4 计算考生面试成绩
计算考生的面试成绩是系统的核心功能。考虑到不同的结构化面试在计算考生最终成绩时存在不同的计算策略,该部分设计定义了一个计算策略的顶层接口,采用策略设计模式,不同的计算策略分别实现该接口,最后根据不同的应用场景自由切换计算策略。结构化面试普遍的计算方法为:7名考官分别打分,去掉一个最高分和一个最低分,其余5名考官求平均得分。在实现该方法时,首先将7名考官的得分存入一个double数组,然后由小到大进行排序,最后将数组下标为1至5的元素求平均值,保留3位小数后格式化输出。
5 系统部署
该一体化系统涉及的各个应用服务均部署在Linux服务器上,采用CentOS 7操作系统和JDK 17运行环境,数据库使用MySQL 5.7版本和Redis 5.0版本。出于可靠性、可用性、安全性的系统需求,各个物理隔离的区域内分别配置了一台应用服务器向该区域提供应用服务。在实际业务场景中,通常多个考场同时进行面试,且各个考场面试进度不一致,因此每个考场分别配置一台计算机或服务器向该考场提供评分服务与计算,单个考场若产生数据异常也不会影响其他考场的面试进度。各服务通过HTTP方式与数据管理服务器进行数据同步,整体部署图如图9所示。
6 结论
本文根据结构化面试的具体流程,基于Spring⁃ Boot最新开发技术,采用经典的SSM三层架构开发模式,设计开发了结构化面试一体化系统。该系统从考生签到、随机抽签到最终汇总评分,实现了标准化与自动化管理,提升了面试过程的公正性与客观性。系统通过测试,并在包头市人事考试结构化面试中得到具体应用,取得良好运行效果。未来,系统将结合人工智能技术,通过训练深度学习模型,识别考生答题的关键信息和逻辑结构,实现智能评分,为考官赋分提供参考。