本科的毕业论文
本科时候的毕业论文。这个程序的代码99%都是手工写的,历时3个月,边学习Jquery和AJAX多层及很多乱七八糟的东西。
|
|
本科毕业设计
(2009届)
| 题 目 | 校园就业招聘系统 |
| 学 院 | 计算机学院 |
| 专 业 | 计算机科学与技术(专升本) |
| 班 级 | 07055731 |
| 学 号 | 07058134 |
| 学生姓名 | 裘中杰 |
| 指导教师 | 郅跃茹 |
| 完成日期 | 2009年6月 |
目 录
1 引言
随着时代的进步和发展,无论在计算机还是通信领域,信息化的社会中信息获取和传递将起到越来越重要的地位。
学校拥有自己的信息媒介非常重要。在信息化时代网络横行的年代,建设符合学校背景,需求的招聘就业平台必将以指数倍的形式提高学生就业的效率和积极性。
现阶段学校的招聘就业信息网站已沦为鸡肋,其实质为新闻发布系统。因特网上如此多的招聘就业信息网站,使学生无从下手,海投简历,海量浏览无法保证学生就业的效率。同时,企业无法获得校园中求职学生的特长,技能等信息,在很大程度上失去了被“伯乐”发现的机会。
新的招聘就业网将主要采用互动形式的信息交互。分学生,教师,企业三个主要对象。其中学生和企业为主要用户,前者将能够浏览教师,就业指导员和企业发布的招聘就业信息。后者可以浏览学生的求职信息以及发布招聘信息。
学生与企业的互动采用流水形式的应聘、面试、试用、录用。学生对感兴趣的企业的职位发出应聘请求,企业查看该学生的自我简历与求职信之后决定是否给其面试机会;企业决定面试时间并接受应聘请求;学生收到面试通知参加企业的面试或者考试;企业在结束后给学生反馈考试(面试)信息以及是否录用;学生最终确定是否就职于该企业。
同时,系统地设计将遵循严密、有序、易于扩展的思路设计,使整个系统功能可以随需求变化而变化,将学生,教师,企业主动融入到信息传递、交流、分享的乐趣中。
2 设计规范
2.1 系统架构
系统采用多层架构,数据、代码、视图分离方式开发。
N层结构从逻辑上相互独立其特点:是某一层的变动通常不影响其它层,具有很高的可重用性。减少整个系统的维护成本,具有良好的开放性,进行严密的安全管理,可支持异种数据库,有很高的可用性。
代价是前期的开发周期较长,成本较高。
2.2 模块结构
多层架构设计同时,利用.Net简便的开发特性充分实现低耦合高内聚的模块结构。
2.3 计算处理
支持分布式云计算。
为保证在同时处理繁重任务时仍然稳定,系统支持分布式处理,信息处理和用户界面呈现可在不同地点,不同服务器上运行。信息处理服务能够在一台或者一台以上服务器平台上协同工作,效率为信息处理服务数量的倍数。
确保在因发生单点故障而卸载物理服务器时这些关键性消息处理仍能处于在线状态。
2.4 负载处理
支持服务器群集。
虚拟化的出现可以在硬件成本不变的情况下利用多核CPU运行多个操作系统,解决单一服务无法计时处理大量用户同时访问而性能下降乃至无响应的可能。
群集能够确保在因发生单点故障而卸载物理服务器时这些关键性应用程序仍能处于在线状态。实现这一功能丝毫不会增加用户使用上的复杂性。由于群集在终端用户、应用程序及网络面前呈现为一套单一系统,因此,他们可以像使用其它任意服务器那样来使用群集。
2.5 扩展性
提供内部公开API。
提供外部标准XML数据源。
2.6 接口
数据源及API接口遵循XML标准。
XML是基于W3C定制的开放标准,从而使得基于XML的应用具有广泛性。
2.7 数据标准
各层数据之间通信采用XML标准,同时遵循微软的Web Service 2.0标准,数据中包含各数据源类型的定义和说明,方便二次开发人员对系统进行开发
3 需求分析
3.1 所需设备
3.1.1硬件环境
硬件基于Intel Xeon。
多核多线程。
3.1.2操作系统
Windows Server 2008 Release 2 RC。
华为短信信息机。
3.1.3服务器软件
IIS 7.0 服务组件。
.Net Framework 4.0 可重组开发包。
Microsoft SQL Server 2008 数据库服务。
支持POP3及SMTP的邮件系统。
3.1.4开发工具
Windows Server 2008 R2 RC
Microsoft Visual Studio 2010 Beta 1
Microsoft SQL Server 2008 企业版
VisualSVN 版本控制
Internet Express Browser 8.0 Beta
3.2
| 教师 |
| 学院新闻系统 RSS订阅源管理 |
| 学院学生信息管理 |
| 学院新闻管理 |
| 学院招聘信息发布 |
| 学院学生密码管理 |
| 学院学生求职,浏览,搜索,应聘,各种操作统计 |
| 系统报表 (查看学生感兴趣的各类行业比例,预测将来趋势以及分析企业对该学院哪些学生感兴趣) |
| 管理员 |
| 所有数据管理 |
| 企业注册审核 |
| 新闻发布审核 |
| 职位发布审核 |
| 校园宣讲审核 |
| 校园日历修改 |
| 系统基本功能维护 |
| 职位搜索 |
| 发布求职 |
| 新闻浏览 |
| 企业 |
| 企业信息管理 |
| 企业用户帐户管理 |
| 企业需求职位管理 |
| 学生简历搜索 |
| 发布招聘信息 |
| 管理学生应聘 |
| 定向智能学生搜索 |
| 校园宣讲申请 |
| 企业信息变更发布 |
| 企业公众活动日历发布 |
| 学生 |
| 简历管理 |
| 个人信息 |
| 职位搜索 |
| 发布求职 |
| 新闻浏览 |
| 新闻订阅 |
| 应聘职位 |
| 帮助及推荐 |
| 个人日历ICAL,RSS源 |
| 事件提醒订阅 |
用户交互平台
交互平台基于BS架构(Server/Browse),用户和招聘就业系统
图 1 交互系统模块主要功能
每单位用户对应一用户组,不同用户组的功能和操作也不同。
3.2.1教师组
学院学生信息管理,学院学生密码管理,学院新闻系统RSS订阅源管理,学院新闻管理,学院招聘信息发布,学院学生求职,浏览,搜索,应聘,各种操作统计,系统报表(查看学生感兴趣的各类行业比例,预测将来趋势以及分析企业对该学院哪些学生感兴趣)。
3.2.2学生组
简历管理;个人信息;职位搜索;发布求职;应聘职位;新闻浏览;新闻订阅;帮助及推荐。
3.2.3企业组
企业信息管理,企业用户账号管理,企业需求职位管理,学生简历搜索,发布招聘信息,管理学生应聘,定向智能学生搜索,校园宣讲申请,企业,息变更发布,企业公众活动日历发布。
3.2.4管理员
所有数据管理,企业注册审核,新闻发布审核,职位发布审核,校园宣讲审核,校园日历修改,系统基本功能维护,职位搜索,发布求职,新闻浏览
3.3 消息发布方法
3.3.1调查
结合校园学生生活习惯及调查,最有效快捷的方法将信息主动传到指定学生的贴身设备中,优选为短信传送。
结合企业工作人员及校园教师生活习惯及观察,电子邮件为其首选方式。
系统将内置2中消息通知方式,在用户未登录任何招聘就业系统终端时,即时的提醒事件、消息内容将主动发送至用户的手持设备或者电子邮件中。
3.3.2短信
用户登录系统的交互平台或终端,给定界面允许用户输入手机号码,并向用户手机发送验证码。用户接收到验证码后,将其输入系统交互界面(终端)的手机验证码输入框,设置该用户为手机已绑定,并记录手机号码至数据库。
3.3.3邮件
企业用户在注册时,输入邮件地址,首次注册信息将发送至企业用户电子邮箱。
学生,教师用户登录招聘就业系统交互界面后,随时可以更改邮件地址。
3.4 用户体验
使用户拥有操作招聘就业系统更好的体验,交互界面内容主要采用Ajax方式无刷新操作。
学生是该系统最大的用户群体,针对其时尚,追求新鲜的特性,系统提供个人日历订阅,新闻筛选订阅,校园活动订阅。这些订阅源可以采用RSS,XML,邮件,短信,WAP Push各种方式推送到用户设置的目的地。
提供内部API和外部API供开发人员使用。内部API用于开发扩展功能和第三方插件,增加用户体验指数。外部API可让学生制作类似Vista侧边拦的桌面、手持应用,突破仅有BS架构访问的局限。
4 系统设计
4.1 核心部分
4.1.1
图 2 类接口关系 |
系统由教师,管理员,企业,学生,插件5个对象组成。这5个对象分别实现不同的接口功能。
图 3 交互应用程序接口 |
Namespace QzjCareer.Core 中共有11个接口,每个接口定义一组操作。
图 4 帐户用户接口
IAccount定义账户操作,处理基本的账户信息。
图 5 公司帐号操作接口
ICompanyVerify定义企业账号注册后管理员可对其执行的一系列操作。
图 6 自定义数据接口
IDetailcontroller定义所有对象拥有的参数数据库,该接口的实现通常用于第三方的数据操作中。
图 7 事件接口
IEvent定义系统内部产生的事件,该接口的实现用于消息队列和信息处理中。
图 8消息接口
IMessage定义各用户之间的消息传送功能及用户组之间的消息传送权限。
图 9职位接口
IJob定义企业和学生招聘应聘中的方法。
图 10简历接口
IResume定义学生简历的操作。该接口将在更高级的版本中被使用。
图 11注册接口
IRegisterController定义管理员对注册账号进行审核的方法。
图 12事件处理
IRaiseEvent定义事件处理类中的引发事件后的方法操作。
图 13求职处理
IForJob定义学生发布求职的方法。
图 14信息绑定接口
IInfroBindController定义所有用户均包含的公共系统属性操作方法。
4.1.2操作单位
图 15教师类
教师单位。实现IMessage、IAccount接口。继承于DetailController类。Sealed类。
图 16管理员类
管理员单位。实现IMessage,IAccount,ICompanyVerify接口。继承于DetailController类。Sealed类。
图 17企业类
企业招聘者单位。实现IAccount、IJob、IMessage接口。继承于DetailController类。Sealed类。
图 18学生类
学生单位。拥有各单位中最多的方法。实现IAccount、IMessage、IForJob、IJob、IResume接口。继承于DetailController类。Sealed类。
图 19插件类
插件单位。继承于DetailController。除了基本的数据操作外无其他功能,主要依赖插件(可扩展功能)的消息处理服务实现各种操作。Sealed类。
4.1.3独立控制
图 20自动对象类
用于域名创建对应单位实例的类。根据传入用户的ID动态创建相应单位类的实例。(由于反射应用对系统开销过高而被摒弃)
图 21自定义数据类
DetailController类。各单位的父类,数据类DataConnect的子类。实现系统各单位的Profile数据存放和数据层各表操作的继承。
实例化该对象时,除插件单位外的其他单位必须使用已存在的用户ID作为构造函数的第一个参数传入,否则将引发类无法创建异常,该异常将被QC(QzjCareer)代码捕获并抛出User does not exist(用户不存在)异常,内联该类无法创建异常。
图 22帐户定义类
AccountTypeDefine类。提供用户ID、登录ID、AccountType结构体之间转换的各种方法。
图 23 登录类
LoginController静态类。提供登录验证方法。
4.1.4数据描述
图 24 数据库表封装
数据层各表的封装。每一个类包含一个数据表的操作。使用Visual Studio 2010 的LinqToSql工具创建。所有表封装在CareerDBDataContext类下。
4.1.5结构体定义
QzjCareer.Core.Models
AccountType 描述各单位账号定义
BindStatus 描述手机绑定状态
DetailTimeType 描述用户私人信息临时数据存放时间
ForJobProcessType 描述学生求职状态
ProcessTypeIdType 描述学生和企业之间的应聘状态
ResumeDetailType 描述学生简历中各字段内容
QzjCareer.Core.Controller
SchedulesEventArgs 继承于EventArgs的Sealed类。
提供存放事件信息上下文数据的作用。
4.2 内部公开API
4.2.1功能接口
图 25内部公开API类
QzjCareer.Portal.CareerApi
系统功能实现的主要接口,依赖并调用核心模块的函数功能。
接口外部无需关心用户类型、操作过程、操作原理,仅传递基本参数和调用的方法即可。 开发手册请参见副页。
4.2.2状态接口
图 26状态接口
QzjCareer.Portal.Ping
群集、分布式应用程序的Alive状态记录功能。提供各应用程序工作状态的监测和命令管理。各点(端)应用程序能够在管理员设定的Ping时间内响应中心数据库返回的命令。
图 27服务状态信息
QzjCareer.Portal.WebServer & QzjCareer.Portal.WebServers
以上两个类分别用于存放个在线的点(端)应用程序及服务的状态信息,例如:IP,SID,AppPoolID,AppPath等。
遵循QC第三方插件规范的应用程序运行状态信息也将被存放并实时更新。
4.3 短信功能(仅32位)
图 28短信接口封装
QzjCareer.QZJSMS封装了华为信息机的短信接口,提供更人性化的短信操作函数作为对外接口。
由于华为信息机提供的接口为32位非托管带指针的非安全类库,造成QZJSMS无法被64位Runtime调用,因此在这里短信接口只能编译为32位类库。
4.4 邮件功能
图 29邮件接口封装
QzjCareer.QZJMail封装了.NET Framework中SMTP和POP3的邮件操作,并为QzjCareer对邮件发送的需求进行优化。
4.5 消息队列类库
QzjCareer.MessageQueue
图 30
任何应用程序都可以调用QzjCareer消息队列类库发送邮件或者短信。
4.6 消息队列服务
4.6.1结构
QzjCareer.ScheduleService
图 31消息队列服务
消息队列应用将作为Windows的服务运行。
4.6.2作用
它将处理整个QzjCareer系统中的邮件,短信,计划任务,以及事件消息。
消息队列服务包含QzjCareer.QZJSMS和QzjCareer.QZJMail,邮件和短信将通过它发送至目的地。通过Portal的内部API,开发者可以二次开发自定义的消息队列。
4.6.3云处理
当一个消息队列服务无法响应QC系统的大量消息处理时,可以在同一系统或者多个计算机节点上安装,无需单独配置,操作员可以复制在线的消息队列配置并安装在其他节点上,实现自动分布式消息处理。
4.6.4分布式控制
QC消息队列服务支持热启动和关闭,无需暂停QC核心服务,无需考虑多个消息队列的数据冲突或者丢失。但是至少保证一个消息队列服务实例的在线以便能够及时处理QC系统的消息。
4.6.5服务独立
QC消息队列处理服务主要处理事件中的短信和邮件发送,另外监视系统运行状态消息,记录警告和错误状态到数据库中,因此该服务的在线对整个系统至关重要。消息队列服务的运行和数据处理不依赖Portal,取而代之为直接连接数据库,同样使用了数据层,这样做的目的将保证Portal服务掉线或数据拥塞时不会影响到系统信息的处理。
5 关键技术
5.1 Sitemap 机制
图 32SiteMap用户导航 |
| Default.aspx |
| Login.aspx |
| Admin/ Default.aspx |
| ResetPassword.aspx |
| UpdatePassword.aspx |
| StudnetManager.aspx |
| Aboutus.aspx |
| Contact.aspx |
| NewsRss.asmx |
使用到Sitemap主要功能有 页面标题, 相关功能显示以及站点导航.
"相关功能"在页面的右上方, 使用Theme. master进行控制, 具体的读取算法为:
寻找当前节点的Sitemap Node, 并将其标题赋值给页面, 判断当前节点是否有1个以上的子节点, 如果有, 则将该节点深度为1的所有子节点作为数据源提供给"相关功能". 假如当前节点下没有1个以上的子节点, 则将父节点下深度为1的所有字节点作为数据源提供给"相关功能".
例如, 当访问Admin/Default.aspx时, 相关功能会显示 ResetPassword.aspx, UpdatePassword.aspx, StudnetManager.aspx 三个节点. 访问Aboutus.aspx时, 将显示 Login.aspx, Admin/Login.aspx, Contact.aspx, NewsRss.aspx 四个节点。
相关操作的提供有助于提高用户访问操作的体验。
5.2 QCMQ 消息队列
图 33QCMQ消息队列描述
QC系统中针对于第三方消息处理分离 消息队列以Windows服务方式运行,支持傻瓜式分布处理配置,无需配置服务器参数便能实现云处理。
分布式计算,云计算优点及搭建方法请参考附录。
• 取出数据放入队列
• QzjCareer.Core
• QC系统中任务的计划
• QC系统中的安全警报
• 队列中等待发送
• CQMQ服务群集
• 第三方消息处理程序
• 发送至对应终端处理
• 短信
• 邮件
• 其他
数据逻辑处理部分
图 34API的整体封装
为了提高系统的可扩展性和兼容性,同时为云处理技术而优化,系统采用分层设计方式。数据库采用多个MSSQL协通工作处理大量的数据信息。
图 35API二次封装 |
QCMQ (QzjCareer.MessageQuere)直接处理数据库中等待处理的短信,邮件等外部信息,同时监视日历数据,发出提醒事件。有效解决处理大规模数据时终端拥塞线程假死。
图 36核心运作结构 |
QzjCareer.Core作为整个系统功能与数据库连接的核心部分,操作用户数据库唯一的途径,内建数据错误处理确保数据完整。同时对部分程序员对其二次开发过程中可能错误度地调用方法造成潜在致命的数据逻辑错误前发出提醒。
图 37API扩展描述
图 38接口延伸描述
QzjCareer.Portal 作为整个系统的核心对内功能API,提供所有系统操作所需要的函数,集成用户帐户角色安全,通过XML数据与外部程序进行交互。让程序员对QzjCareer系统进行二次开发,扩展功能更轻松方便。
图 39第三方接口封装描述
QzjCareer.SMS 、 QzjCareer.Mail 给系统以及第三方开发人员提供了简单易懂的参数配置和友好的第三方接口。
简单配置便能使程序连接华为短信信息机接口和符合国际ISO标准的SMTP,POP3邮件服务器。
5.3 内部开放API接口
由于QC平台对内接口的开放性, 致使第三方扩展功能都能在其基础上完成操作.
QC Portal采用XML标准对数据进行序列与反序列化. XML可以同时用来描述字段,定义字段,和包含字段的值, 给第三方开发以及系统自身扩展提供了简便快捷的基础.
第三方插件(扩展)同样可以注册和获得自定义的QC系统事件。
6 数据规范
6.1 省级数据库格式支持
图 40浙江省大学生网上就业市场
图 41教师导入学生资料Access数据库
以上表格为浙江省大学生网上就业市场提供教师下载填写班级信息、学生信息、学院信息的数据库。
图 42安装配置工具
QC系统支持并兼容该数据格式,将数据全部导入QC系统相同的表名后执行QC数据库工具的用户体验数据初始化
更新表数据时,删除上述所有表,重新添加。包括表结构和表数据,同时在所有表中添加以下两行字段
[chineseSpell] [varchar](50) NULL,
[chineseFirst] [varchar](50) NULL
QC系统将用其存放优化用户体验的数据。
注意:[浙江省大学生网上就业市场]提供的Access数据库并没有设定主键,但是QC系统中必须设定主键!不能以存放重复数据的字段作为主键。
学生在QC系统录入的获奖信息,个人信息,个人爱好等个人简历信息可以导出为[浙江省大学生网上就业市场]的模板数据,免去手工录入信息的时间和精力。
6.2 Outlook日历订阅
图 43日历页面
校园日历和个人日历均提供ICal与XML格式的数据源,任何兼容以上两种数据源的程序(例如Outlook)能够实时更新电脑或手持设备的个人日历以及校园日历。
6.3 QC系统事件
QC Event 规范
Event 使用 Details 表存放与读取数据。
Event 的动态属性有 事件名称,方法,值。
Event 静态属性为 用户标示ID,用户类型。
Event 与 Detail 表对应关系
Event.EventName -> Detail.DetailType
Event.EventMethod -> Detail.DetailName
Event.EventValue -> Detail.DetailValue
事件名称: 当发生该事件引发。(e.g. Event_XXX)
事件方法: 引发后对事件进行的操作。(e.g. SMS)
事件值: 对该事件操作的数据。
事件值格式:目标地址|内容[|...]
|为每项值分隔符,在添加事件处理条目时必须对值中已存在的|进行转义或者删除。
在第三方开发过程中,务必检查事件值格式的各项值中是否存有与分隔符相同的值。
例如:
表格 1 参数内容
| 事件类型[引发时间源] | Event_ApplyJob |
| 事件方法[消息处理类型] | SMS |
| 事件值[事件发生时数据] | 13588860000|维护人员的应聘状态已经改变为:初次应聘成功,等待面试。|进入面试状态 |
当学生或者企业中用户的应聘状态改变时,将引发名称为Event_ApplyJob的事件,系统将对订阅该事件的对象产生相关数据放入[SYS_Schedules]表中。消息队列将对支持的方法进行处理,第三方插件从[SYS_Schedules]表中处理自身支持的信息并将反馈信息和处理结果保存。
具体信息请参阅附录的开发手册。
6.4 开发过程
图 44Windows操作系统
Windows 2008 R2 企业版操作系统。
图 45Visual Studio 开发环境
软件开发前期使用Visual Studio 2008 Team System。
后期开发及调试基于Visual Studio 2010 Team System,并转化为.Net 4.0应用程序。
图 46数据库版本
数据库使用SQL Server 2008。
之所以选择Visual Studio 2010来做开发,因为其强大的.Net Framework平台支持,高效的编程体验,同时拥有舒适的界面和完美的透明界面。.Net Framework 4.0种集成了许多人性化的新特性,鉴于其现在仍然是测试版本,新的控件和域名函数等新特性并没有使用在程序中。
图 47系统任务管理器
在开发就业招聘系统中,应用程序的调试启动速度一直是困扰本人开发效率的问题之一。调试状态需要装载各托管代码的签名及符号,在笔记本上开发的Debug模式比Release模式要多消耗近15倍的时间。为此更换了台式电脑,优化代码支持多核处理器。
版本控制对开发大型项目有效管理开发进度及任务的方法之一。通过自己架设的SVN,每次更新将更新的内容作为Comments传送到SVN服务器中。在未来浏览之前修改的代码会使过程思路非常清晰,不会因为文件、代码的繁多而晕头转向。
7 部分功能浏览
7.1 交互界面
图 48无验证码算法
采用无验证码的浏览器计算动态数据验证来判断登录异常。
图 49部分功能浏览
图 50部分功能浏览2
图 51部分功能浏览3
8 安装及使用
8.1 架构选择
QzjCareer系统可运行在多种网络拓扑方式以及多种系统架构,选择需依据用户同时访问量及硬件性能而定。
以下推荐三种配置方案供安装参考。
8.1.1单一服务器无虚拟化配置方案
图 52单一操作系统平台上安装配置
该方案适合访问量波动稳定,流量较小,硬件配置较好的单(双)核服务器.由单一的服务器上运行单一操作系统,同时在线QC核心服务,数据库服务,QCAPI服务,Email接口,SMS接口,QC消息队列服务,QC计划任务服务,QC扩展应用程序。
硬件配置最低要求:
CPU: Intel Xeon 2.0G
RAM: 4GB
Disk Space: 1TB
8.1.2单一服务器虚拟化配置方案
图 53虚拟化配置方案
上图为假定的宿主机配置。在宿主机上的虚拟控制化设备中建立5个客户机,如下图。
图 54虚拟化内部客户机连接示意图
每个客户机分配虚拟网络的独立IP地址,通过NAT技术连接到宿主机的物理网络上。同时宿主机需要指定NAT上的应用程序服务端口对应内部虚拟主机的服务端口。在这个配置中,需要在虚拟交换机NAT映射设置物理网络80端口对应QzjCareer.WEB主机的WEB服务端口才能够接受外部的传入连接。
在该配置下的宿主机必须严格配置安全策略,当入侵进入宿主机时,他将轻易获得虚拟环境下的任何设备信息数据。
8.1.3 多个物理服务器架构方案
图 55 使用多个服务器组建QzjCareer系统
上图用到了多个服务器。最右边两个为WEB服务,分别连接内网和外网。其中外网到WEB服务使用动态分流将不同TCP SYN请求发送至相对空闲的WEB服务器上实现负载均衡。
内网架设3个MSSQL服务器,采用微软视窗数据中心服务器系统,构建数据库服务器群集。同时3个支持虚拟化技术的服务器运行多个QzjCareer.Portal处理数据。运行消息处理服务的服务器同样使用支持虚拟化的服务器,运行多个实例。
网内还有存放用户文件的文件服务器、供维护人员使用的终端。
构建分布式网络得应注意:
1. 不能与其他局域网络混杂在一起。例如Portal,MessageQueue等服务对内始终采用信任模式运行,当内部网络出现问题时,入侵者将可能直接操作Portal而窃取数据库内资料。
2. 如果无法实施物理网络隔离,则采用虚拟隔离。在没有条件架设单独的局域网时,可以将QC系统的各个服务期组建成VLAN或者VPN方式的局域网。在VPN方式下的局域网,连接必须启用对称加密的IPSec确保虚拟不容易被入侵。
8.2 数据库搭建
图 56 T-SQL文件
1. 安装Microsoft SQL Server 2005或者以上版本,推荐使用Microsoft SQL Server 2008 以支持全部编录。
2. 进入SQL管理工具,New Database[1]并设定期望的数据库参数和文件存放位置。
3. 选择New Query[2]数据脚本,并导入数据库脚本文件,文件位置在InstallPacket\MSSQL Script目录下的CareerDataBase.Sql。
4. 导入完成后,生成对应的数据库连接语句准备其他应用程序配置时使用。
值得注意的是,数据库默认情况下使用Windows验证方式。如果维护人员希望使用TCP登录方式,请右键管理工具中的Object Explorer[3]选择属性。在Security[4]选项卡中更改SQL允许的验证方式为SQL Server and Windows。完成后检查能够从外部该机的外部网络访问,如遇失败则检查防火墙设置。
8.3 核心模块安装
在需要安装Portal对内API接口的内网服务器上执行SetupQzjCareerCore.msi。
图 57 Core安装
安装完成。依赖QzjCareer.Core库的组件便能够在该系统平台上运行。
9 系统接口安装
Portal内部接口依赖QzjCareer.Core库,未安装QzjCareer.Core库的系统平台上无法正确运行借口。
进入安装媒体[5]中的SetupQzjCareerPortal目录,依次执行以下步骤:
1. 打开QzjCareer.Portal.parameters.txt文件。
2. 设定QzjCareer.Portal_IisWebApplication的值为Portal在IIS中应用程序的名称。
3. 设定QzjCareer.Portal_CareerDB_ConnectionString为数据库连接字符串。如果数据库存在数据需备份,安装Portal时将会清空之前的数据。
4. 打开IIS管理工具,创建以修改QzjCareer.Portal_IisWebApplication后的值为名称的网站项目,并配置好基本信息,将.Net应用程序池的工作版本设置为4.0。
5. 执行QzjCareer.Portal.deploy.cmd [/T|/Y]。如需得到参数说明,直接执行QzjCareer.Portal.deploy.cmd。
提示:首先确保当前执行安装的用户的环境变量里添加有msdeploy的path变量,如果不存在,请查阅相关Windows使用技巧,加入path变量中msdeploy的路径。或者维护人员也可以在命令行模式下执行
set Path=%Path%;"C:\Program Files (x86)\IIS\Microsoft Web Deploy"[6]。
6. 如果没有出现错误提示,安装就完成了。
打开http://localhost/ping.asmx检查是否可以正常访问。注意,Portal能够正常显示并不说明已正常连接到数据库。
9.1 短信、邮件、消息接口的安装
在需要使用QC短信邮件及消息处理的服务器上执行SetupQzjCareerSmsEmail\SetupQzjCareerSmsEmail.msi。
图 58 邮件、短信、消息接口安装
安装成功的操作系统平台将可处理QC中的短信邮件。
9.2 消息队列处理服务安装
QC消息队列处理服务主要处理事件中的短信和邮件发送,另外监视系统运行状态消息,记录警告和错误状态到数据库中,因此该服务的在线对整个系统至关重要,安装的系统需要能够与数据库快速地通信。
消息队列处理服务可以被安装在任何内部网络直接与数据库通信的操作系统平台上,一个操作系统只建议安装一个实例。
安装步骤:
1. 进入安装介质中的SetupScheduleService目录执行Setup.Exe。
图 59 消息队列安装
2. 安装完成后将在桌面创建一个名为“Install QzjCareer Message Queue Service”的快捷方式。双击运行。
3. 出现提示“The Commit phase completed successfully.”即安装成功。
4. 点击“开始”菜单的“运行”,输入Services.msc,找到QzjCareerDeamon服务,点击开始。
图 60 消息队列服务选项卡
9.3 用户交互应用程序安装与配置
用户交互界面的安装与Portal相似,安装媒体的SetupQzjCareerWeb目录下,运行QzjCareer.CareerWeb.deploy.cmd开始安装过程。需要注意的是,安装后要完成配置文件修改、网络配置,包括但不限于:
1. 数据库连接字符串。
2. 用户文件上传根文件夹。
3. MachineKey SecretKey的设置,分布式状态下必须设置相同。
4. 公用网络至QC网络服务端口NAT映射。
9.4 群集诊断检测工具的使用
在各QC内网主机上进行Portal的通讯测试,包括连接测试,访问测试,数据测试,功能测试。
图 61 群集诊断工具
9.5 QC系统扩展插件配置
QC系统插件基于Portal内部接口,运行QC插件的系统平台上必须能够访问Portal接口。
配置方式参考样例程序“QC插件XiaoNei小工具”。
9.6 学生简历模板方案
突出系统个性化、人性化功能以及吸引学生主动参加招聘就业系统上与企业进行交互,系统中许多功能都是定制方便修改的。以最简单的学生简历模板作为介绍:
图 62 学生简历模板
交互应用程序目录~/Anony/StudentResumeSkins/下用于存放个性化的学生简历模板,维护员或者开发者能够在当前目录下建立以容易辨明模板类型的目录名称来存放模板文件。模板文件内容基于JTemplate[7]中定义规范。详细开发规范可以从QC开发手册中获得。
10 系统诊断及维护
10.1 交互界面应用程序心跳
每个交互界面应用程序启动时都将提交其系统基本状态信息给Portal,并在预先设定的时间间隔持续发送数据。维护人员可以访问Portal的Ping GetServices中方法来查看当前在线以及最后在线应用程序的时间。
例如本地运行的交互界面应用程序,访问该方法后将返回XML数据如下:
<?xml version="1.0" encoding="utf-8" ?>
- <ArrayOfWebServer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
- <WebServer>
<WebServerAddress>127.0.0.1</WebServerAddress>
<WebServerVersion>0.0001.7069</WebServerVersion>
<WebServerDomain>dd6576da-1-128874673611533984</WebServerDomain>
<LastUpdateAt>2009-05-22T20:03:23.6309375+08:00</LastUpdateAt>
<Id>127.0.0.1</Id>
<AddtionInformation>DEFID:WEB1|CLSID:0000-0000-0000-0000-FFFF-0001</AddtionInformation>
</WebServer>
</ArrayOfWebServer>
开发者可根据该接口开发状态监视及下线报警程序。
10.2 内部公开数据接口状态
任何对Portal接口访问的应用程序都应该在第一次启动或者访问时确认Portal能够正常访问,否则停止退出应用程序并间隔尝试。第一次访问时对Portal进行Ping下的HelloWorld方法访问,返回值和期望值相同时,启动后台线程持续进行AlivePing方法的访问。
同时,必须对后台线程使用守护进程或者异常处理,在任何导致线程退出的情况及时停止应用程序服务。
以上行为目的是为了保证在Portal接口不可用的情况下,不进行任何的业务操作,保证用户体验,同时确保Portal不会因下层应用程序单点的拒绝访问式攻击而瘫痪。
10.3 消息队列日志的查看
在消息队列处理服务的Windows系统平台上,维护人员能够在Windows系统管理工具的事件日志中查看服务状态以及服务所有进行的操作。日志分为四种,分别为:QzjCareer信息服务程序日志,短信日志,邮件日志,系统信息日志。
图 63 Windows系统日志
1. 信息服务日志包含服务启动,暂停,停止状态记录和服务内部异常、停止警告等。
图 64 信息服务日志
2. 短信日志包含短信发送状态消息、警告、错误。
图 65 短信服务日志
3. 邮件日志包含邮件发送状态消息、警告、错误。
图 66 邮件日志服务
4. 信息队列日志包含QzjCareer系统中各种事件的处理过程和结果信息。
图 67 系统事件日志服务
10.4 各节点参数独立配置方法
根据需求不同,维护人员可能希望两个交互应用程序运行在不同的环境中。例如,校园内部网络和校园外部网络,并且希望对其从不同网络位置访问的用户进行不同的限制。
使用独立参数配置可以解决类似问题。当交互应用程序[8]启动时,会试图读取其版本的初始化信息(该信息使用群集诊断工具配置,存放于数据库中)。读取的数据将用来覆盖应用程序web.config内基本配置信息。当然,除了数据库连接字符串之外,都可以被覆盖。
维护人员可以从群集诊断工具的使用中看到,QzjCareerVersion节配置信息。该节配置用来告诉数据库取何版本,何种类型应用程序的数据。当前样例中该交互应用程序QzjCareerVersion节点值为0.0001.7069,表示 主版本号0,附版本号0001,应用程序参数组编号7069。
理解参数获得方式,维护人员便可以设置不同的参数组,修改应用程序下的节点配置以对应维护人员期望的目的。
10.5 软件环境相关问题
在组建该系统的任何应用时,务必注意使用的.Net Framework版本。该系统基于.Net Framework 4.0 Beta 1 架构,也是当前编写该文档前4天微软对全球公开的第一个测试版本。微软于去年开始开发Visual Studio 10,CLR 4.0,.Net 4.0以及AJAX Framework 4.0。
因此,有可能在微软.Net运行库产生未知错误与问题。系统内代码已对所有涉及当前版本已知的.Net平台BUG进行优化,但维护人员仍务必做好数据、错误日志的备份,以便及时应对未知状况。
11 插件开发
11.1 概述
QzjCareer系统依照分层,零耦合,分布处理的思想进行编写。因此开发人员可以在原有架构上编写简单的代码来增加新的功能。
例如:添加Weblog Metabase的新闻源支持将方便用户使用Windows Live Writer发布,修改,删除新闻。添加日历同步源,使用户在Outlook创建的内容显示在交互应用程序中,增加其访问就业招聘系统的频率及依赖性。提供个人订阅职位类型中的更新RSS订阅,使Windows Vista及以上版本用户在使用电脑时能够同时在侧边栏中观察各种新职位。等等。
11.2 样例程序
为了让开发人员能够快速,方便地编写QC系统上插件和扩展,这里提供一个样例程序。基于QC系统Portal(内网公开API)和“校内网”[9]两种API同步信息的样例。
11.3 样例介绍
“校内网”是国内比较庞大的校友录网站,其功能及特点模仿国外Facebook交友网,共同拥有操作人性化,信息处理响应延迟低,功能全面,自定义性强等特点。在需求分析阶段的调查显示,无论在校学生、教师、已经参与工作的上班族注册该网站并不定时更新个人资料的群体占调查总人数的70%。按照预计发展,未来5年内如按照其现阶段的维护及功能更新,将会更大比例的学生、教师、企业工作人员使用其网站提供的功能。
“校内网”提倡使用实名制及真实个人信息,学校资料,工作资料。也提供类似Facebook网站的小工具功能,对外开放API接口,网站上的用户将能够使用小工具进行交互。
对QC系统而言,最关心其网站提供的个人信息,学校信息,以及工作单位信息的接口。QC可以使用其接口同步学校信息、个人爱好、个人照片、个人介绍,所有就读过的学校、工作单位、实习单位信息。
样例使用QC系统中Portal内部公开接口,除此之外,不使用其他QC系统资源。
11.4 样例使用
图 68 开发IDE及工程文件
插件使用3个工程,分别为“校内网”的XML数据结构定义,“校内网”API封装类,QC在“校内网”交互界面呈现组成。
11.5 说明
插件的安装非常简单,将安装媒体/Plugins/Xiaonei/下文件复制到IIS应用程序目录下,关联80端口。注册“校内网”,申请开发者应用。
图 69 校内网工具参数设置
Callback URL填写成QzjCareer.XiaoNeiWeb所在服务器对外的访问地址和端口。应用的服务器IP地址在开发阶段可以不指明,工具发布之后将只连接指定IP上的服务器。
图 70 校内网关于小工具页面
应用程序的“关于”页面将显示API Key和Secret Key以及APPID,将这些信息更新至QC的“校内”插件中web.config的对应信息。
图 71 QC插件扩展配置设置
图 72 Portal连接被拒绝提示
点击“校内网”该插件首页,出现如图所示错误表示Portal接口没有正确启动,或者无法连接。则需要检查Portal服务及网络连接。
图 73 QC插件未绑定登录界面
开启Portal服务器,初始页面如图。点击绑定帐号,
图 74 QC插件登录密码框
输入用户名和密码,选择帐号类型进行登录。
图 75 QC插件同步学校界面
上图下半部分为你在“校内网”填写的学校资料,点击“添加……”之后将同步到QC系统的个人资料中。
图 76 QC插件同步头像
可以上传头像。需配置物理文件服务器路径,建议使用IPSec或者SSL安全的连接。该功能需要配置服务器。
图 77 QC插件系统设置
图 78 QC插件系统设置AJAX完成
所有TAB组合在一个页面中并且使用AJAX无刷新,TAB切换的体验非常好。
图 79 QC插件同步实习、工具
同步实践、实习经历。上图的下半部分为“校内网”已经存在的个人资料,同步到QC系统中时,仅需填写“校内网”没有提供的资料,例如职位、经历描述。
图 80 “校内网”个人资料
图 81 “校内网”个人资料工作信息
“校内网”的个人信息设置,可以发现QC插件中从填写的个人资料中的信息得到。由于并不是所有资料都是经过“校内网”人工确认的,所以通过到QC系统中的资料只能作为未验证的学生自主输入的信息。
图 82 “校内网”插件已经帮定帐号
当你再次进入这个小工具的页面时,将会看到原来显示为“绑定帐号”的按钮已经是“直接进入”了。这是由于,插件使用QC.Portal提供的参数数据库,可以在QC数据库写入任何属于该用户的自定义信息,同时也可以获得属于该用户的自定义信息以及部分个人信息。
11.6 开发原则
总体而言,Portal提供了绝大部分对就业招聘系统操作方法。同时也提供额外的插件数据存放读取空间。这些空间对于开发者来说是没有限制的,但是应该合理利用这些资源,临时的数据必须标记系统可删除它的周期,单位可以是分钟,小时,天等等。不考虑资源的充分利用及回收,再多的分布式数据库也只能得到较低的性能发挥。
插件中的应用程序安全性是至关重要的一个环节,QC.Portal中的绝大部分操作要求参数传入当前用户的识别号[10]。虽然如此,开发者应该在交互应用程序上就判断用户的合法性,防止A用户欺骗交互应用程序而得到B用户的操作权限。 同时避免频繁使用Portal造成不必要的资源开销和非事务处理数据库数据的冲突发生。
11.7 异常处理
Portal内部公开接口中错误的发生将以异常形式抛出并返回,交互应用程序需要主动捕获异常并执行相应的清理资源操作。提交数据前对数据进行必要的格式、范围、类型检查,避频繁引发异常。
12 结束语
整个系统的设计由本人单独完成,大多涉及当前最新的技术应用。未来软件开发的形式将以高效、快捷、安全性、扩展性、兼容性为主导。当软件没有接口和扩展,其生存周期将和一次性用品一样,用之丢弃,在重视高效、资源合理分配重复利用的时代,这种旧时代的思想和产物必需丢弃。
该系统核心是信息处理系统,信息系统最主要是能够长久、稳定、持续地提供服务。因此,在软件的前期架构必将花费大量的时间和金钱保证产品的质量。
在没有任何经费购买或租用硬件设备的情况下,软件功能通过单机调试和类、接口的单元测试,没有条件进行压力测试和稳定性测试。原设计为Portal封装数据层提供包括WEB在内的所有服务,由于时间紧迫,WEB中部分代码采用直接连接数据层操作。
系统的设计过程,代码的编写过程,也是不断学习新事物的过程。软件的设计不可缺少的是创新,从多年的实践经验得到,想要有所创新就需要了解各种专业各种生活常识,各种人文情感。QC样例插件“校内网”小工具,并不是仅从程序员角度出发的需求分析,而是要站在学生用户角度考虑这些问题。
当程序设计经验积累到一定程度,能够提高的不是学习新的语言、语法,而是思维上的创新、理解、和快速反应能力。
13 致谢
感谢导师以及学生处老师在设计需求分析上给了很大的帮助。
感谢招商银行和建设银行在全球次级贷款金融危机时仍然提供贷款供本人购买计算机做开发。
感谢微软(中国)提供2天的Windows 7, IE8 ,Visual Studio 2010的免费培训及午餐。
14 参考文献
[1] ScottGu. jQuery and Microsoft. http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx
[2] ScottGu. jQuery Intellisense in VS 2008 http://weblogs.asp.net/scottgu/archive/2008/11/21/jquery-intellisense-in-vs-2008.aspx
[3] John Resig. How jQuery Works http://docs.jquery.com/Tutorials:How_jQuery_Works
[4] Stanley B. Lippman. C# Primer: A Practical Approach.
[5] Christian Nagel ,Bill Evjen ,Jay Glynn Professional C# 2008.
[6] Robert C.Martin敏捷软件开发人. 民邮电出版社. 2007.12
[7] Charles Petzold. Programming Microsoft Windows With C#.Microsoft Press. 2002
[8] Tanenbaum,A.S. 计算机网络(第4版). 清华大学出版社. 2004-8-1.
[9] 阎宏,《Java与模式》,电子工业出版社
[10] [美]James W. Cooper. 《C#设计模式》. 电子工业出版社.
[11] [美]Alan Shalloway James R. Trott. 《Design Patterns Explained》. 中国电力出版社.
[12] [美]Robert C. Martin. 《敏捷软件开发-原则、模式与实践》. 清华大学出版社
[13] [美]Don Box, Chris Sells. 《.NET本质论 第1卷:公共语言运行库》. 中国电力出版社.
15 附录
15.1 QzjCareer Portal API
图 83 QzjCareer API 文档
15.1.2 目录CareerApi内容方法
这里仅提供API目录,详细函数例子及说明请参阅HELP文档。如图。
Copyright (C) 1985-2009 HOHO``
All rights reserved
NameSpace:QzjCareer.Portal
Description : 提供给开发人员二次开发接口。
Created By Qzj At 3/23/2009
Created On WIN-PSFL4HEL378
API注释中的用户标示ID,必须使用数据库中的用户存储格式输入,比如学号为07058134的学生ID为STU_07058134,而企业用户名为qzj登录的企业ID为COM_qzj。
注释中注明用户类别的函数,只能以其用户标示ID可以操作,传入其他用户标示ID通常会引发接口异常。
消息类发送请用异常判断是否发送成功,不要使用返回值判断。消息通常使用QzjCareer消息队列处理来避免前端线程堵塞。
QzjCareer的核心架构中和API中已经集成权限和用户组判断,以某用户识别ID操作其他用户的数据,将导致异常和非预期效果!
NOTICE:当前API只对系统内部开放,不可直接提供给用户访问。
|
| Constructor | Description |
|
| Public method | Description |
| 添加条目 | ||
| 添加自定义数据条目 | ||
| Adds the experience. | ||
| 添加学生求职 | ||
| 用户接收系统使用条款及协议 | ||
| 取消手机和帐户的绑定 | ||
| 撤回等待状态的求职 | ||
| 取消进行中的招聘(企业) | ||
| 返回中文字符串的拼音 | ||
| 返回中文字符串所有拼音的第一个字符 | ||
| (Web Application Use) | ||
| 通过企业审核并创建帐号(管理员) | ||
| (Web Application Use) | ||
| Datas | ||
| 拒绝该学生的应聘(企业) | ||
| 删除企业帐号 | ||
| 删除学生的指定求职 | ||
| 删除用户的指定消息 | ||
| 删除学生指定的简历 | ||
| Dels the experience. | ||
| (Inherit from MarshalByValueComponent) | ||
| 应聘(学生) | ||
| 发布招聘(企业) | ||
| 编辑更新简历 | ||
| 录用该应聘的学生(企业) | ||
| (Inherit from Object) | ||
| 获得帐号信息(该版本未使用) | ||
| 返回指定用户的所有条目 | ||
| 返回指定应聘结构 | ||
| 返回指定用户的应聘列表 | ||
| 返回指定用户已经绑定的手机号码。没有绑定将返回string.Empty | ||
| 返回指定用户手机邦定状态 | ||
| Gets the cellphone number. | ||
| 返回指定用户所属的学院ID。无所属学院的将返回-1或0 | ||
| (Web Application Use) | ||
| 返回指定用户所属于的企业ID。无所属企业的将返回-1或0 | ||
| 返回条目内容 | ||
| 返回条目数量 | ||
| 返回条目数量 | ||
| 返回条目内容 | ||
| 返回指定用户指定类别的条目 | ||
| 返回条目的值 | ||
| 获得用户事件 | ||
| 获得用户的一种引发事件 | ||
| Gets the experiences. | ||
| (Inherit from Object) | ||
| 返回指定的招聘(企业) | ||
| 返回招聘(企业) | ||
| 从用户名获得登录名 | ||
| 返回指定用户的所有消息数量 | ||
| 返回指定用户的真实姓名 | ||
| (Inherit from MarshalByValueComponent) | ||
| 返回指定学生的求职列表 | ||
| 返回一个学生的简历列表 | ||
| (Inherit from Object) | ||
| 获得用户的帐户类别 | ||
| 获得用户类别的字符串 | ||
| 返回未通过审核的企业帐号 | ||
| 返回未通过审核的企业数量 | ||
| 返回指定用户未读的消息数量 | ||
| 从登录名获得用户名 | ||
| 获得加密后的用户密码 | ||
| 新增用户事件 | ||
| 学生修改或者更新求职 | ||
| 修改密码(需要提供当前密码) | ||
| 回退企业注册步骤 | ||
| 根据条目 | ||
| 根据条目类别和名称删除该条目 | ||
| 根据条目类别删除条目 | ||
| 根据条目内容删除条目 需要提供值,类型,名称,拥有者 | ||
| 删除用户事件 | ||
| 删除用户事件 | ||
| 回复应聘者(初次,比如决定是否给其面试机会)(企业) | ||
| 回复是否继续应聘(比如是否接受录用前的面试或者考试(学生) | ||
| 重置用户密码 (管理员)(教师) | ||
| 发送手机消息验证 | ||
| 发送信息 | ||
| 群发信息 | ||
| 设置手机号码 | ||
| 设置个人邮件地址 | ||
| 设定消息为已读 | ||
| (Inherit from MarshalByValueComponent) | ||
| (Web Application Use) | ||
| 更新条目信息 | ||
| 更新条目 | ||
| 更新条目 | ||
| 雇用单位成员更新其自身信息 | ||
| 验证密码是否正确 | ||
| 验证指定用户提供的短信验证码,成功将设置其手机与系统绑定 | ||
| 验证密码是否正确 | ||
| XMLDATAs. |
|
| Public property | Description |
| (Inherit from WebService) | ||
| (Inherit from MarshalByValueComponent) | ||
| (Inherit from WebService) | ||
| (Inherit from MarshalByValueComponent) | ||
| (Inherit from WebService) | ||
| (Inherit from WebService) | ||
| (Inherit from MarshalByValueComponent) | ||
| (Inherit from WebService) | ||
| (Inherit from WebService) |
| Ping class |
| Collapse All Expand All |
Copyright (C) 1985-2009 HOHO``
All rights reserved
NameSpace:QzjCareer.Portal
Description : 各群集服务器消息状态,不建议操作
NOTICE:当前API不集成登录检查,不可以让最终用户访问。
Created By Qzj At 4/11/2009
Created On WIN-PSFL4HEL378 constructor
|
| Constructor | Description |
Public method
|
| Public method | Description |
| Alives the ping. | ||
| Alives the ping. | ||
| (Inherit from MarshalByValueComponent) | ||
| (Inherit from Object) | ||
| (Inherit from Object) | ||
| Gets the servers. | ||
| (Inherit from MarshalByValueComponent) | ||
| (Inherit from Object) | ||
| Helloes the world. | ||
| (Inherit from MarshalByValueComponent) |
Public property
|
| Public property | Description |
| (Inherit from WebService) | ||
| (Inherit from MarshalByValueComponent) | ||
| (Inherit from WebService) | ||
| (Inherit from MarshalByValueComponent) | ||
| (Inherit from WebService) | ||
| (Inherit from WebService) | ||
| (Inherit from MarshalByValueComponent) | ||
| (Inherit from WebService) | ||
| (Inherit from WebService) |
15.1.3
HELP文档缩略图
图 84 help文档缩略图
[1] New Database:新建数据库。
[2] New Query:新建查询。
[3] Object Explorer:对象浏览器。
[4] Security:安全。
[5] 安装媒体为含有QzjCareer安装文件的光盘或者镜像文件。
[6] 系统中msdeploy的文件夹路径。
[7] JTemplate是基于JavaScript扩展库JQuery中的一个小插件。
[8] 即QzjCareer.WEB
[9] 校友录类型的网站。
[10] 用户在数据库中的唯一识别字符串。