技术栈分析

后端技术栈

  • Spring Boot 2.x:提供快速开发框架,集成Spring MVC、Spring Security等组件。
  • Spring Security:负责用户认证与授权,支持JWT令牌管理。
  • MyBatis/MyBatis-Plus:数据库ORM框架,简化SQL操作。
  • Redis:缓存高频访问的简历数据或推荐结果。
  • Elasticsearch:实现简历内容的全文检索与高级搜索功能。
  • RabbitMQ:异步处理简历解析、推荐计算等耗时任务。

前端技术栈

  • Vue 3:前端框架,使用Composition API开发。
  • Element Plus:UI组件库,提供表单、表格等交互组件。
  • Axios:HTTP客户端,与后端API交互。
  • ECharts:可视化推荐结果统计数据。

其他工具

  • NLP工具(如HanLP):解析简历文本,提取关键词(如技能、工作经验)。
  • Docker:容器化部署应用与数据库。

核心功能模块

1. 用户管理

  • 注册/登录(支持手机号、邮箱验证)。
  • 角色分级(求职者、HR、管理员)。
  • 个人中心(信息编辑、密码修改)。

2. 简历管理

  • 求职者上传简历(PDF/Word/TXT),自动解析为结构化数据。
  • 简历关键词提取(如“Java”“5年经验”“硕士学历”)。
  • 手动补充字段(技能标签、项目经历)。

3. 智能推荐

  • 基于内容的推荐:匹配简历关键词与职位要求(TF-IDF算法)。
  • 协同过滤:根据相似用户的行为推荐职位(用户-职位矩阵)。
  • 混合推荐:结合内容与协同过滤结果,加权排序。

4. 职位管理

  • HR发布职位(标题、描述、技能要求、薪资范围)。
  • 职位分类(技术/产品/运营等)。
  • 职位搜索(按地点、薪资、技能筛选)。

5. 数据分析

  • 热门技能统计(如“Python需求占比30%”)。
  • 匹配成功率分析(推荐职位与用户投递比例)。

数据库设计

主要表结构

-- 用户表
CREATE TABLE `user` (
  `id` BIGINT PRIMARY KEY AUTO_INCREMENT,
  `username` VARCHAR(50) UNIQUE NOT NULL,
  `password` VARCHAR(100) NOT NULL,
  `role` ENUM('JOB_SEEKER', 'HR', 'ADMIN') NOT NULL
);

-- 简历表
CREATE TABLE `resume` (
  `id` BIGINT PRIMARY KEY AUTO_INCREMENT,
  `user_id` BIGINT NOT NULL,
  `content_text` TEXT COMMENT '解析后的文本',
  `skills` JSON COMMENT '技能标签数组',
  FOREIGN KEY (`user_id`) REFERENCES `user`(`id`)
);

-- 职位表
CREATE TABLE `job` (
  `id` BIGINT PRIMARY KEY AUTO_INCREMENT,
  `hr_id` BIGINT NOT NULL,
  `title` VARCHAR(100) NOT NULL,
  `required_skills` JSON COMMENT '要求的技能',
  FOREIGN KEY (`hr_id`) REFERENCES `user`(`id`)
);

-- 推荐记录表
CREATE TABLE `recommendation` (
  `id` BIGINT PRIMARY KEY AUTO_INCREMENT,
  `resume_id` BIGINT NOT NULL,
  `job_id` BIGINT NOT NULL,
  `score` FLOAT COMMENT '匹配分数',
  FOREIGN KEY (`resume_id`) REFERENCES `resume`(`id`),
  FOREIGN KEY (`job_id`) REFERENCES `job`(`id`)
);


系统测试方案

1. 单元测试

  • 使用JUnit测试简历解析模块的准确性(如技能提取)。
  • Mock数据库操作测试MyBatis的CRUD逻辑。

2. 集成测试

  • Spring Boot Test验证API接口(如POST /api/recommend)。
  • 测试Elasticsearch搜索性能(响应时间<500ms)。

3. 压力测试

  • JMeter模拟100并发用户上传简历,检查Redis缓存命中率。
  • 推荐算法在高负载下的计算延迟(目标<2秒)。

4. 安全测试

  • OWASP ZAP扫描XSS/SQL注入漏洞。
  • JWT令牌过期与篡改测试。

源码结构示例(关键片段)

后端推荐逻辑(Java)

@Service
public class RecommendationService {
    @Autowired
    private ElasticsearchRestTemplate esTemplate;

    public List<Job> recommendJobs(Long resumeId) {
        Resume resume = resumeRepository.findById(resumeId).orElseThrow();
        // 基于内容的搜索
        NativeSearchQuery query = new NativeSearchQueryBuilder()
            .withQuery(QueryBuilders.matchQuery("required_skills", resume.getSkills()))
            .build();
        return esTemplate.search(query, Job.class).getContent();
    }
}

前端请求推荐(Vue)

const fetchRecommendations = async () => {
  const response = await axios.get('/api/recommend', {
    params: { resumeId: currentResume.value.id }
  });
  recommendedJobs.value = response.data;
};


以上方案可扩展为毕业设计或商业项目,需根据实际需求调整推荐算法细节(如引入深度学习模型)。

更多推荐