Add IDE题库 50 questions + PROMPT/LLM/DEV_PATTERN 34 questions

This commit is contained in:
Developer
2026-06-03 21:12:11 +08:00
parent 6d9acd7252
commit 0b2c6563ba
+147
View File
@@ -0,0 +1,147 @@
const D = require('better-sqlite3'), p = require('path');
const db = new D(p.join(__dirname, '../data/metadata.db'));
const { randomUUID } = require('crypto');
const BANK = '984632e0-b35d-486d-9a19-27a14845db37';
const insert = db.prepare(`INSERT INTO question_bank_items (id, bank_id, question_text, questionType, options, correctAnswer, key_points, difficulty, dimension, status, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, 'STANDARD', ?, 'PUBLISHED', datetime('now'), datetime('now'))`);
function sa(q, dim, kp) {
return { questionText: q, questionType: 'SHORT_ANSWER', dimension: dim, options: null, correctAnswer: null, keyPoints: kp };
}
function mcTF(q, ans, dim) {
return { questionText: q, questionType: 'MULTIPLE_CHOICE', dimension: dim, options: ['TRUE', 'FALSE'], correctAnswer: ans, keyPoints: [] };
}
const questions = [
// ====== IDE题库 ======
// 一、GitHub Copilot — 智能代码补全
mcTF('看到 Copilot 给出的灰色补全建议后,按 Tab 键可以接受建议。', 'TRUE', 'IDE'),
mcTF('看到 Copilot 给出的补全建议后,按 Esc 键可以拒绝这个建议。', 'TRUE', 'IDE'),
mcTF('写函数开头后,Copilot 会自动逐行补全后续逻辑。', 'TRUE', 'IDE'),
sa('小张用Copilot智能补全生成了一段代码,看起来功能正常。在正式使用这段代码前,他应该先做什么?', 'IDE', ['审查代码逻辑', '确认没有语法错误或逻辑漏洞', 'AI生成的代码需要人工审核']),
// 二、GitHub Copilot — Chat 三种模式
sa('小张接手了一个老项目,打开OrderService.java发现有段逻辑看不太懂。他应该用Copilot Chat的哪种模式(Ask/Plan/Agent)?', 'IDE', ['Ask模式', 'Ask只回答问题不修改代码']),
sa('小李需要在三个文件中新增一个批量删除用户的功能,希望AI直接帮他完成。应该用Copilot Chat的哪种模式?', 'IDE', ['Agent模式', 'Agent可以自动跨文件修改代码']),
sa('小赵想在项目中新增一个功能,但不知道涉及哪些文件,想让AI先扫描整个项目给出方案。应该用哪种模式?', 'IDE', ['Plan模式', 'Plan只出方案不动代码']),
mcTF('Ask模式下Copilot只会回答问题,不会修改用户的代码。', 'TRUE', 'IDE'),
mcTF('Agent模式下Copilot可以跨多个文件修改代码。', 'TRUE', 'IDE'),
// 三、GitHub Copilot — CLI 使用
sa('小刘想用Copilot CLI重构一个Python脚本,过程中要多次对话逐步调优。应该用交互模式还是非交互模式?', 'IDE', ['交互模式', '交互模式支持多轮对话']),
sa('小钱想用Copilot CLI快速解释一下git diff的结果,不想进入交互式对话。应该用哪种方式?', 'IDE', ['非交互模式', 'copilot -p指令适合一次性任务']),
sa('小赵在Copilot CLI交互模式中,想清空当前对话上下文重新开始。应该用哪个命令?', 'IDE', ['/clear命令']),
// 四、Claude Code — 交互方式
mcTF('在Claude Code中输入@src/utils.js可以让AI读取该文件。', 'TRUE', 'IDE'),
mcTF('在Claude Code中输入/clear可以清空当前对话。', 'TRUE', 'IDE'),
mcTF('在Claude Code中输入!git status可以查看Git状态。', 'TRUE', 'IDE'),
mcTF('在Claude Code中所有操作都必须用特殊符号,自然语言输入不能完成任何功能。', 'FALSE', 'IDE'),
mcTF('在Claude Code中输入!npm run dev可以启动开发服务器。', 'TRUE', 'IDE'),
mcTF('在Claude Code中输入/help可以查看所有可用命令。', 'TRUE', 'IDE'),
// 五、Claude Code — 模型选择
sa('Claude Code的三个模型:Sonnet(日常编码)、Haiku(快速简单)、Opus(复杂难题)。修复复杂系统架构Bug该用哪个?', 'IDE', ['Opus', 'Opus处理最复杂的难题']),
sa('日常CRUD接口开发该用Claude Code的哪个模型?', 'IDE', ['Sonnet', 'Sonnet是日常编码首选']),
sa('快速查一下某个JavaScript数组方法的语法,该用Claude Code的哪个模型?', 'IDE', ['Haiku', 'Haiku响应快成本低']),
// 六、Claude Code — CLI 命令
sa('小赵的Claude Code会话意外关闭了,想接着刚才的对话继续。该用哪个命令?', 'IDE', ['claude --continue', '或claude -c恢复上次会话']),
sa('小钱想用Claude Code快速解释git diff结果,不想进入交互式对话。该用哪个命令?', 'IDE', ['claude -p指令', '-p参数用于一次性任务']),
mcTF('claude --resume可以从历史会话列表中选择恢复。', 'TRUE', 'IDE'),
// 七、OpenCode — 整体认知
mcTF('OpenCode可以直接读取项目文件、修改代码、执行命令。', 'TRUE', 'IDE'),
mcTF('传统AI像远程顾问给你建议但需要你动手;OpenCode可以直接帮你操作。', 'TRUE', 'IDE'),
sa('小周想用OpenCode读取包含客户个人信息的代码文件让AI优化。这种做法合适吗?为什么?', 'IDE', ['不合适', '客户信息是敏感数据不能输入公共AI', '应先脱敏处理']),
// 八、OpenCode — 安装与使用方式
sa('OpenCode有终端版/桌面应用/IDE扩展/Web版四种方式。新手不想用命令行的该选哪个?', 'IDE', ['桌面应用', '界面直观适合新手']),
sa('用VS Code写代码希望不离开编辑器用OpenCode该选哪种?', 'IDE', ['IDE扩展', '深度绑定编辑器']),
sa('需要在远程服务器上开发只能通过命令行操作该选哪种?', 'IDE', ['终端版', '轻量启动快适合有基础的用户']),
mcTF('在终端中输入opencode可以启动OpenCode。', 'TRUE', 'IDE'),
// 九、OpenCode — Plan/Build 模式
sa('小周接手新项目想先让OpenCode分析结构,还不想修改任何文件。该选Plan还是Build', 'IDE', ['Plan模式', 'Plan只能读取文件不会修改代码']),
sa('小周确认了修改方案想让OpenCode开始实际修改代码。该选Plan还是Build', 'IDE', ['Build模式', 'Build可以编辑文件和执行命令']),
mcTF('Plan模式下AI只能读取文件,不会修改任何代码。', 'TRUE', 'IDE'),
mcTF('Build模式下AI可以编辑文件和执行命令。', 'TRUE', 'IDE'),
sa('小周让OpenCode在Build模式下修改了多个文件。修改完成后他应该先做什么?', 'IDE', ['审查AI修改的代码', '确认逻辑正确后再使用', 'AI代码不能直接部署到生产']),
// 十、OpenCode — 常用命令
sa('小周用OpenCode修改代码后发现改错了想撤销。该用哪个命令?', 'IDE', ['/undo']),
sa('小周撤销后又觉得还是刚才改得好想恢复回来。该用哪个命令?', 'IDE', ['/redo']),
sa('小周想在新项目目录中创建AGENTS.md让OpenCode了解项目结构。该用哪个命令?', 'IDE', ['/init']),
sa('小周想看看OpenCode当前有哪些可用的斜杠命令和快捷键。该用哪个命令?', 'IDE', ['/help']),
sa('小周想切换OpenCode正在使用的AI模型。该用哪个命令?', 'IDE', ['/models']),
// 十一、OpenCode — 模型选择
mcTF('OpenCode内置多款免费模型,启动后可直接选择使用,无需配置API密钥。', 'TRUE', 'IDE'),
mcTF('使用第三方LLM提供商需要自行承担API费用。', 'TRUE', 'IDE'),
// 十二、Debug — 调试助手
sa('小吴代码报错了不知道问题在哪,想用Copilot Chat定位和解决Bug。该用哪个命令?', 'IDE', ['/debug', '专用于定位和解决Bug']),
sa('小吴知道问题在哪了,想让Copilot直接修复选中的代码。该用哪个命令?', 'IDE', ['/fix', '用于自动修复代码问题']),
mcTF('在Copilot Chat中输入/tests可以生成选中代码的单元测试。', 'TRUE', 'IDE'),
mcTF('在Copilot Chat中输入/explain可以让AI解释选中代码的逻辑。', 'TRUE', 'IDE'),
mcTF('/debug命令可以帮助定位和解决Bug。', 'TRUE', 'IDE'),
sa('小吴用/fix让Copilot自动修复了代码。修复完成后他应该先做什么?', 'IDE', ['审查修复后的代码', '确认修改正确逻辑无误后再使用']),
sa('小吴想把包含数据库连接串的配置文件贴到Copilot Chat中用/debug分析。这种做法合适吗?', 'IDE', ['不合适', '数据库连接串是敏感信息', '应该用脱敏数据替代']),
// ====== PROMPT补全 ======
// 基于提示词工程.md
sa('小王用AI写邮件时只写了"写一封邮件给客户",AI反复追问细节。他在Prompt中缺少哪些要素?', 'PROMPT', ['缺少角色、背景和执行要求', '好的Prompt应包含六要素']),
mcTF('Prompt越长越详细越好,不存在过长的问题。', 'FALSE', 'PROMPT'),
sa('小李在Prompt中用了"非常好""很专业"这类模糊描述,AI的输出总是不符合预期。问题出在哪?', 'PROMPT', ['模糊描述导致AI理解偏差', '应使用具体可量化的要求', '如字数限制/格式要求/示例参考']),
sa('小赵写了一篇很长的Prompt,但AI只关注了前半部分。这是什么原因?', 'PROMPT', ['上下文压缩', '长Prompt中尾部信息可能被忽略', '关键要求应放在Prompt开头']),
sa('小张在Prompt中写了"不要使用过期API",但AI还是用了。问题可能出在哪?', 'PROMPT', ['否定指令容易被AI忽略', '应正面表述要做什么', '改为"使用最新稳定版API"']),
mcTF('给AI设定角色身份可以帮助AI更准确地理解任务。', 'TRUE', 'PROMPT'),
sa('小刘想让AI输出表格数据,但AI每次格式都不一样。他应该在Prompt中加什么?', 'PROMPT', ['明确指定输出格式', '给出表格示例', '使用输出格式约束']),
sa('小陈和AI对话了10轮后发现AI开始偏离最初的任务。这是为什么?怎么避免?', 'PROMPT', ['长对话中AI会模糊最初目标', '定期重申核心任务', '必要时开新窗口重写Prompt']),
mcTF('发现AI偏离任务时,最好的做法是在当前对话中纠正它。', 'FALSE', 'PROMPT'),
sa('小周想让AI修改一段代码,但AI只能看到当前对话的内容。他应该怎么做才能让AI充分理解项目背景?', 'PROMPT', ['提供项目相关上下文', '描述代码所在模块的功能', '给出完整的需求说明']),
sa('小吴的Prompt总是很长,他发现AI回复质量随着Prompt长度增加而下降。最可能的原因是什么?', 'PROMPT', ['上下文窗口有限', '过长信息会被压缩或丢弃', '应精简Prompt保留关键信息']),
mcTF('在Prompt中使用分隔符(如===、---)可以帮助AI更好地理解结构。', 'TRUE', 'PROMPT'),
// ====== LLM补全 ======
// 基于大语言模型入门.md + AI安全使用指南.md
sa('小赵让AI分析公司年度财报,AI给出了详细的分析报告。有什么安全问题需要注意?', 'LLM', ['财报属于公司机密', '不应输入公共AI工具', '应使用脱敏后的模拟数据']),
mcTF('AI的工作原理是根据上文猜下文,不是查资料找答案。', 'TRUE', 'LLM'),
sa('小孙问AI一个关于最新API的问题,AI回答得很详细但用的API版本已经过时了。为什么?', 'LLM', ['AI的知识截止于训练日期', '不知道训练后发生的新事件', '应提供最新的API文档给AI']),
sa('小李让AI同一道题回答了三遍,每次答案都不一样。这是正常的吗?为什么?', 'LLM', ['正常', 'AI是概率模型每次生成有随机性', '设置低temperature可让输出更稳定']),
mcTF('AI的输出完全正确可靠,不需要人工验证。', 'FALSE', 'LLM'),
sa('小钱让AI生成了一份产品需求文档,AI写得很专业但引用了一些不存在的市场数据。这是什么问题?', 'LLM', ['AI产生了幻觉', 'AI会编造看似合理但不存在的內容', '应要求AI只基于提供的数据回答']),
sa('小周把客户数据库导出为CSV后上传给AI让它做数据分析。这个做法有什么风险?', 'LLM', ['客户数据不能输入公共AI', '可能造成数据泄露', '应使用脱敏数据']),
mcTF('AI的"幻觉"是指AI会编造看似合理但实际错误的内容。', 'TRUE', 'LLM'),
sa('小吴让AI翻译一份合同,AI翻译得很好但保留了原文中的客户签名信息。这有什么问题?', 'LLM', ['签名信息属于敏感数据', '不应输入公共AI工具', '应在输入前先脱敏']),
sa('小郑想让AI基于公司内部培训材料出一份试题。但培训材料中包含未公开的产品计划。能直接把材料给AI吗?', 'LLM', ['不能', '未公开的产品计划属于公司机密', '应使用虚拟场景代替']),
mcTF('AI训练数据的截止日期意味着AI不知道之后发生的事件。', 'TRUE', 'LLM'),
// ====== DEV_PATTERN补全 ======
// 基于开发范式与个人实践指南.md
sa('小王用AI快速写完了一个功能,比预期快了3天。他应该把这3天用在做什么?', 'DEV_PATTERN', ['做更充分的测试', '审查AI代码质量', '优化代码结构']),
mcTF('AI时代开发速度加快,质量保证流程也可以相应省略。', 'FALSE', 'DEV_PATTERN'),
sa('小李的同事说"既然有AI写代码了,测试就不用写了吧"。你怎么回应?', 'DEV_PATTERN', ['AI时代测试更重要', 'AI生成代码更需要测试验证', '测试是保证质量的最后防线']),
sa('小赵在瀑布式项目中用AI辅助开发,发现AI优化了原有设计。他能直接按AI的方案改吗?', 'DEV_PATTERN', ['不能直接改', '瀑布模式不鼓励中途变更方案', '应走正式变更流程']),
mcTF('AI辅助开发中,花时间明确需求比直接让AI写代码更高效。', 'TRUE', 'DEV_PATTERN'),
sa('小张用AI生成了核心功能的代码并合入了主分支。他的做法有什么问题?', 'DEV_PATTERN', ['AI代码应经审查后再合入', '直接合入可能引入质量问题', '应建立AI代码审查流程']),
sa('团队引入AI后,项目经理说交付周期可以缩短一半。你认同吗?', 'DEV_PATTERN', ['AI能提高效率但不能简单减半', '审查测试等流程不能省略', 'AI更适合辅助而不是替代']),
mcTF('使用AI辅助开发时,开发者对最终代码质量仍然负有全部责任。', 'TRUE', 'DEV_PATTERN'),
sa('小刘用AI生成了原型代码拿去给客户演示,客户很满意要求直接部署上线。小刘应该怎么做?', 'DEV_PATTERN', ['原型代码不能直接部署', '需要整理代码通过质量检查', '补充测试和文档后再上线']),
sa('小陈用AI探索一种新的技术方案,不确定能否成功。在瀑布模式下这么做有什么风险?', 'DEV_PATTERN', ['瀑布模式变更成本高', '探索性做法适合敏捷开发', '应在调研阶段验证而非开发阶段']),
mcTF('用AI写的代码,出了问题责任在AI工具公司。', 'FALSE', 'DEV_PATTERN'),
];
let ok = 0;
for (const q of questions) {
const id = randomUUID();
try {
insert.run(id, BANK, q.questionText, q.questionType, q.options ? JSON.stringify(q.options) : null, q.correctAnswer || null, JSON.stringify(q.keyPoints || []), q.dimension);
ok++;
} catch (e) { console.log('FAIL:', e.message.substring(0, 60)); }
}
const r = db.prepare("SELECT dimension, questionType, COUNT(*) c FROM question_bank_items WHERE bank_id=? GROUP BY dimension, questionType ORDER BY dimension, questionType").all(BANK);
const t = db.prepare("SELECT COUNT(*) c FROM question_bank_items WHERE bank_id=?").get(BANK);
console.log('Added:', ok, 'Total:', t.c);
r.forEach(i => console.log(' ' + i.dimension + ' ' + i.questionType + ': ' + i.c));
db.close();