51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计招聘信息平台的API接口,支持企业发布职位(POST /api/jobs)、求职者搜索职位(GET /api/jobs?keyword=...),说明接口参数、返回格式及错误处理。

大连海事就业产品设计难度:中等

答案

1) 【一句话结论】

设计招聘信息平台的API接口遵循RESTful规范,明确企业发布职位(POST /api/jobs)和求职者搜索职位(GET /api/jobs?keyword=...)的参数、返回格式及错误处理,并补充缓存策略(如Redis缓存)、分页实现(游标分页)、HTTP方法特性对比(安全性、幂等性)及高并发冲突检测(如布隆过滤器+JWT),确保接口性能、健壮性与安全性。

2) 【原理/概念讲解】

老师口吻:咱们先讲RESTful API的核心原则,HTTP方法决定了操作类型:

  • POST:用于“创建资源”(企业发布新职位),属于“写操作”,数据通过**请求体(JSON)**传递,会改变服务器状态(新增职位)。
  • GET:用于“读取资源”(求职者搜索职位),属于“读操作”,参数通过查询参数传递,无副作用(不会改变服务器状态)。

参数传递与验证:

  • 请求体(JSON):用于POST,包含职位标题、公司、地点等关键信息,需验证必填字段(如title、company非空)和数据类型(如salary为字符串,requirements为数组)。
  • 查询参数(如keyword):用于GET,用于过滤或分页,可选参数。

返回格式:统一用JSON,包含状态码(200、400、401、409、500)和错误/数据信息。状态码含义:

  • 200:成功;
  • 400:请求参数错误(如必填字段缺失);
  • 401:未授权(企业未登录);
  • 409:资源冲突(如重复发布职位);
  • 500:服务器错误。

关键优化点:

  • 缓存策略:GET搜索接口用Redis缓存,设置5分钟过期时间,缓存失效条件为职位更新时清除(如企业修改职位信息后,缓存自动失效)。
  • 分页逻辑:采用游标分页(避免offset分页的大数据量性能问题),步骤为记录当前游标(如最后一条职位的ID),查询下一个游标后的数据(如WHERE id > last_id ORDER BY id LIMIT 10)。
  • HTTP方法对比:POST vs GET,安全性(GET无副作用,POST有)、幂等性(GET是幂等的,多次GET结果一致;POST不是,多次POST会重复创建)、缓存(GET可缓存,POST不可缓存),选择依据是操作类型(创建 vs 读取)。

3) 【对比与适用场景】

接口HTTP方法参数传递方式安全性(是否改变服务器状态)幂等性(多次请求结果是否一致)缓存支持典型使用场景注意点
发布职位POST请求体(JSON,必填字段:title、company等)有(新增职位)否(多次POST会重复创建)不可缓存企业创建新职位需企业身份认证(JWT),参数完整
搜索职位GET查询参数(keyword、page、pageSize等)无(读取数据)是(多次GET结果一致)可缓存求职者查找职位参数可选,支持分页,无副作用
获取单条职位GET路径参数(如/api/jobs/{id})无(读取数据)是可缓存查看具体职位详情需职位ID,用于详情展示

4) 【示例】

发布职位(POST /api/jobs)

请求体(JSON):

{
  "title": "前端开发工程师",
  "company": "大连海事大学就业中心",
  "location": "大连",
  "description": "负责招聘平台前端开发,要求3年以上Vue/React经验",
  "requirements": ["熟悉Vue/React", "有项目经验"],
  "salary": "面议",
  "contact": "hr@dmu.edu.cn"
}

成功响应(JSON):

{
  "code": 200,
  "message": "职位发布成功",
  "data": {
    "id": "job_12345",
    "title": "前端开发工程师",
    "company": "大连海事大学就业中心",
    "location": "大连",
    "status": "active",
    "created_at": "2023-10-27T10:00:00Z"
  }
}

冲突响应(409 Conflict):

{
  "code": 409,
  "message": "职位已存在(标题:前端开发工程师,公司:大连海事大学就业中心,发布时间:2023-10-27)",
  "data": null
}

搜索职位(GET /api/jobs?keyword=前端&page=1&pageSize=10)

成功响应(JSON):

{
  "code": 200,
  "message": "搜索成功",
  "data": {
    "total": 15,
    "page": 1,
    "pageSize": 10,
    "jobs": [
      {
        "id": "job_12345",
        "title": "前端开发工程师",
        "company": "大连海事大学就业中心",
        "location": "大连",
        "salary": "面议",
        "created_at": "2023-10-27T10:00:00Z"
      },
      // 更多职位...
    ]
  }
}

5) 【面试口播版答案】

面试官您好,针对招聘信息平台的API设计,我考虑企业发布职位用POST /api/jobs,求职者搜索用GET /api/jobs?keyword=...。首先,POST接口的请求体是JSON,包含职位标题、公司、地点等,必填字段如title、company,验证必填和非空,成功返回新职位ID。GET接口通过keyword过滤,支持分页(page、pageSize),返回匹配列表。错误处理:参数缺失返回400(Bad Request),企业未登录返回401(Unauthorized),重复发布职位返回409(Conflict,通过标题+公司+时间检测)。缓存方面,GET搜索接口用Redis缓存5分钟,更新时清除;分页用游标分页避免大数据量性能问题。HTTP方法对比,POST是写操作,GET是读操作,符合RESTful规范,确保接口健壮。

6) 【追问清单】

  1. 问:如何具体实现GET搜索接口的缓存策略?

    • 回答要点:用Redis缓存,设置TTL为5分钟,缓存键为jobs:keyword:{keyword}:page:{page},更新职位时通过Redis事务清除对应缓存。
  2. 问:搜索接口的分页逻辑具体步骤是怎样的?

    • 回答要点:游标分页,记录当前游标(如最后一条职位的ID),查询下一个游标后的数据(如WHERE id > last_id ORDER BY id LIMIT 10),避免offset分页的跳表问题。
  3. 问:如何处理企业重复发布同一职位的高并发冲突?

    • 回答要点:结合布隆过滤器(快速检测重复)和数据库唯一索引(最终确认),同时JWT设置过期时间(如1小时),防止过期token重复发布。
  4. 问:参数验证中非必填字段(如salary)如何处理?

    • 回答要点:非必填字段允许为空,但需验证格式(如salary为字符串,允许“面议”等文本),前端和后端双重校验,避免数据异常。
  5. 问:接口的权限控制如何保障企业身份安全?

    • 回答要点:企业发布职位需在请求头添加Authorization: Bearer {token},后端验证JWT(签名算法HS256,过期时间1小时),同时记录操作日志,防止未授权访问。

7) 【常见坑/雷区】

  1. 忽略缓存策略:未考虑GET搜索接口的缓存,高并发下性能下降,导致服务器压力过大。
  2. 分页逻辑错误:直接用offset分页(如LIMIT 0,10),大数据量时跳表导致查询慢,或游标分页实现不当(如游标更新不及时)。
  3. HTTP方法选择不当:用GET发布职位(有副作用),违反RESTful规范,且无法缓存。
  4. 冲突检测效率低:仅用数据库唯一索引检测重复,高并发下性能不足,未结合布隆过滤器加速。
  5. 参数验证不严格:允许必填字段为空或数据类型错误(如salary为数字但输入字符串),导致业务逻辑错误。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1