
1) 【一句话结论】设计招聘信息查询API需实现参数过滤(地区、专业等)、分页、排序逻辑,并集成认证与限流机制保障安全与性能。
2) 【原理/概念讲解】
面试官,我们来拆解核心概念:
page(当前页)和pageSize(每页数量)控制返回规模,避免一次性加载过多数据(比如总100条,每页10条,分10页)。sort(字段,如publishTime)和order(方向,asc升序/desc降序)对结果排序,像按成绩从高到低排座位。3) 【对比与适用场景】
| 对比项 | Offset-Limit(偏移量+限制) | Cursor-Based(基于游标) | 适用场景 |
|---|---|---|---|
| 定义 | 通过skip = (page-1)*pageSize跳过前N条,返回N条 | 维护游标(如上一页的最后一条ID),下一页从游标后开始 | 小数据量(如职位<10万条) |
4) 【示例】
GET /api/v1/jobs?region=北京&major=计算机&publishTime=2023-01-01&sort=publishTime&order=desc&page=1&pageSize=10{
"total": 100, // 总职位数
"page": 1, // 当前页
"pageSize": 10, // 每页数量
"data": [
{"id": 1, "title": "Java开发工程师", "region": "北京", "publishTime": "2023-01-05", ...}
]
}
app.get('/api/v1/jobs', (req, res) => {
const { region, major, publishTime, sort, order, page, pageSize } = req.query;
// 过滤逻辑
const filters = {};
if (region) filters.region = region;
if (major) filters.major = major;
if (publishTime) filters.publishTime = { ... };
// 分页逻辑
const skip = (page - 1) * pageSize;
// 排序逻辑
const sortField = sort || 'publishTime';
const sortOrder = order === 'desc' ? -1 : 1;
// 数据库查询(假设用MongoDB)
const jobs = db.collection('jobs')
.find(filters)
.sort({ [sortField]: sortOrder })
.skip(skip)
.limit(pageSize)
.toArray();
// 返回结果
res.json({
total: db.collection('jobs').countDocuments(filters),
page,
pageSize,
data: jobs
});
});
5) 【面试口播版答案】
面试官您好,我来设计招聘信息查询的API接口。核心是支持参数过滤(地区、专业、发布时间)、分页、排序,同时保障安全。首先,参数过滤通过查询条件实现,比如地区=北京、专业=计算机,筛选符合条件的职位;分页用page和pageSize参数,比如page=1, pageSize=10,返回第1页10条数据,避免一次性加载过多;排序通过sort字段(如publishTime)和order(asc/desc)控制,比如按发布时间降序排列。安全方面,接口需要认证(如Token验证),确保只有授权用户访问;限流用令牌桶算法,防止恶意请求超载。整体结构是GET /api/v1/jobs,参数包括region、major、publishTime、sort、order、page、pageSize,返回包含总数量、分页信息和职位列表的JSON。
6) 【追问清单】
7) 【常见坑/雷区】