-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathseed-knowledge.sql
More file actions
428 lines (410 loc) · 57.4 KB
/
Copy pathseed-knowledge.sql
File metadata and controls
428 lines (410 loc) · 57.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
-- Smart Guide knowledge diagnosis seed data.
-- Run this after restarting the backend once, or run directly because this script also creates the tables.
-- Command:
-- cmd /c "mysql -u root -p smart_guide < seed-knowledge.sql"
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
CREATE TABLE IF NOT EXISTS knowledge_point (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
parent_id BIGINT NULL,
description TEXT,
category VARCHAR(50)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS question (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
course_id BIGINT,
content TEXT NOT NULL,
type VARCHAR(20) DEFAULT 'single',
options JSON,
answer VARCHAR(255) NOT NULL,
explanation TEXT,
difficulty INT DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS question_knowledge_relation (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
question_id BIGINT NOT NULL,
knowledge_point_id BIGINT NOT NULL,
weight DOUBLE DEFAULT 1.0,
UNIQUE KEY uk_qk (question_id, knowledge_point_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS answer_record (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
question_id BIGINT NOT NULL,
user_answer VARCHAR(255),
is_correct TINYINT(1) NOT NULL,
answered_time DATETIME DEFAULT CURRENT_TIMESTAMP,
KEY idx_user_question (user_id, question_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO knowledge_point (id, name, parent_id, description, category) VALUES
(1, 'Java 面向对象', NULL, '理解类、对象、封装、继承和多态。', '程序设计'),
(2, 'Spring MVC 分层', NULL, '掌握 Controller、Service、Repository 的职责划分。', '程序设计'),
(3, 'Vue 组件通信', NULL, '理解 props、emit、路由和状态传递。', '前端开发'),
(4, '前端性能优化', NULL, '掌握资源加载、缓存和渲染性能优化。', '前端开发'),
(5, '数组与链表', NULL, '理解线性结构的存储方式和复杂度。', '算法'),
(6, '树与图遍历', NULL, '掌握 DFS、BFS 和常见遍历场景。', '算法'),
(7, 'SQL 查询', NULL, '掌握 SELECT、JOIN、GROUP BY 等查询能力。', '数据库'),
(8, '索引与事务', NULL, '理解索引、事务隔离和执行计划。', '数据库'),
(9, '网络协议', NULL, '理解 TCP/IP、HTTP、DNS 等基础协议。', '计算机基础'),
(10, '操作系统进程', NULL, '理解进程、线程、调度和内存管理。', '计算机基础'),
(11, '金融资产', NULL, '理解股票、债券、基金和风险收益关系。', '金融经济'),
(12, '宏观经济指标', NULL, '理解 GDP、通胀、就业和货币政策。', '金融经济'),
(13, '项目进度管理', NULL, '掌握计划拆解、里程碑和风险控制。', '企业管理'),
(14, '市场定位', NULL, '理解用户洞察、定位和营销组合。', '企业管理'),
(15, '界面版式', NULL, '掌握层级、对齐、留白和组件一致性。', '设计创意'),
(16, '影像叙事', NULL, '理解构图、镜头节奏和剪辑表达。', '设计创意'),
(17, '医学伦理', NULL, '理解诊疗流程中的伦理原则和沟通边界。', '医学健康'),
(18, '营养与急救', NULL, '掌握健康饮食、慢病预防和基础急救。', '医学健康'),
(19, '学习动机', NULL, '理解学习动机、反馈和自我效能。', '教育心理'),
(20, '教学评价', NULL, '掌握目标设计、评价量表和反馈策略。', '教育心理'),
(21, '合同规则', NULL, '理解合同成立、履行、违约和救济。', '法律实务'),
(22, '劳动权益', NULL, '理解劳动合同、工时、社保和仲裁。', '法律实务'),
(23, '商务表达', NULL, '掌握邮件、会议、展示和谈判表达。', '语言人文'),
(24, '传统文化脉络', NULL, '理解思想、文学、艺术和礼俗的主要脉络。', '语言人文'),
(25, '工业互联网', NULL, '理解设备联网、传感器和生产数据采集。', '智能制造'),
(26, '数字化工厂', NULL, '理解产线协同、数据看板和过程优化。', '智能制造'),
(27, '智慧农业', NULL, '理解农业传感、灌溉和生产管理。', '农业与环境'),
(28, '环境保护', NULL, '理解土壤、水资源和可持续发展。', '农业与环境')
ON DUPLICATE KEY UPDATE
name = VALUES(name),
description = VALUES(description),
category = VALUES(category);
INSERT INTO question (id, course_id, content, type, options, answer, explanation, difficulty) VALUES
(1001, 1, 'Java 中用于描述对象共同特征和行为的结构是什么?', 'single', JSON_ARRAY('A. 类', 'B. 线程', 'C. 数据库', 'D. 请求'), 'A', '类是对象的模板,用于描述属性和方法。', 1),
(1002, 6, '在 Spring Boot 项目中,通常负责业务逻辑的是哪一层?', 'single', JSON_ARRAY('A. Controller', 'B. Service', 'C. Repository', 'D. Entity'), 'B', 'Service 层负责组织业务规则和流程。', 2),
(1003, 2, 'Vue 父组件向子组件传递数据通常使用什么?', 'single', JSON_ARRAY('A. props', 'B. emit', 'C. SQL', 'D. index'), 'A', 'props 用于父组件向子组件传值。', 1),
(1004, 10, '减少首屏资源体积主要属于哪类优化?', 'single', JSON_ARRAY('A. 性能优化', 'B. 数据库优化', 'C. 法律合规', 'D. 宏观调控'), 'A', '资源加载优化可以降低首屏等待时间。', 2),
(1005, 11, '链表插入节点通常不需要移动大量连续元素,这是因为链表使用什么连接节点?', 'single', JSON_ARRAY('A. 指针或引用', 'B. 索引页', 'C. HTTP', 'D. 合同条款'), 'A', '链表通过指针或引用维护节点关系。', 2),
(1006, 12, '广度优先搜索通常依赖哪种数据结构?', 'single', JSON_ARRAY('A. 队列', 'B. 栈', 'C. 哈希盐', 'D. 视图'), 'A', 'BFS 按层访问,通常使用队列。', 3),
(1007, 13, 'SQL 中用于按字段聚合统计的关键字是?', 'single', JSON_ARRAY('A. GROUP BY', 'B. ORDER ONLY', 'C. RENDER', 'D. EMIT'), 'A', 'GROUP BY 用于分组聚合。', 1),
(1008, 13, '数据库事务的 ACID 中 I 指的是什么?', 'single', JSON_ARRAY('A. 隔离性', 'B. 继承性', 'C. 交互性', 'D. 工业性'), 'A', 'Isolation 表示事务之间应保持隔离。', 2),
(1009, 15, 'HTTP 位于 TCP/IP 模型中更接近哪一层?', 'single', JSON_ARRAY('A. 应用层', 'B. 物理层', 'C. 链路层', 'D. 农业层'), 'A', 'HTTP 是典型应用层协议。', 2),
(1010, 16, '操作系统中 CPU 分配执行时间的基本对象通常是?', 'single', JSON_ARRAY('A. 线程或进程', 'B. 债券', 'C. 色彩', 'D. 合同'), 'A', '调度围绕进程和线程展开。', 2),
(1011, 17, '股票和债券相比,股票通常代表什么?', 'single', JSON_ARRAY('A. 所有权', 'B. 固定债权', 'C. 劳动合同', 'D. 文件权限'), 'A', '股票代表对公司的所有权份额。', 1),
(1012, 19, 'CPI 常用于衡量什么?', 'single', JSON_ARRAY('A. 通货膨胀', 'B. 代码复杂度', 'C. 页面留白', 'D. 线程数量'), 'A', 'CPI 是消费者价格指数,可反映通胀水平。', 2),
(1013, 20, '项目管理中用于表示关键时间节点的是?', 'single', JSON_ARRAY('A. 里程碑', 'B. props', 'C. 索引', 'D. DNS'), 'A', '里程碑用于标记关键交付或检查节点。', 1),
(1014, 21, '市场定位首先要明确什么?', 'single', JSON_ARRAY('A. 目标用户', 'B. 数据表主键', 'C. 线程池大小', 'D. 土壤湿度'), 'A', '定位需要从目标用户和需求差异开始。', 2),
(1015, 23, 'UI 设计中帮助用户快速理解信息层级的是?', 'single', JSON_ARRAY('A. 版式层级', 'B. 事务隔离', 'C. GDP', 'D. 劳动仲裁'), 'A', '版式层级通过大小、间距和对齐组织信息。', 1),
(1016, 25, '短视频剪辑中影响观看节奏的重要因素是?', 'single', JSON_ARRAY('A. 镜头时长和转场', 'B. SQL JOIN', 'C. 债券久期', 'D. 进程调度'), 'A', '镜头节奏会直接影响叙事和注意力。', 2),
(1017, 26, '医学伦理中“知情同意”强调患者拥有什么权利?', 'single', JSON_ARRAY('A. 了解并选择', 'B. 修改代码', 'C. 操作数据库', 'D. 创建索引'), 'A', '知情同意要求患者理解风险和方案后做决定。', 2),
(1018, 28, '心肺复苏中首先要确认什么?', 'single', JSON_ARRAY('A. 环境安全和意识反应', 'B. 股票价格', 'C. 页面缓存', 'D. 合同编号'), 'A', '急救前应先保证现场安全并判断患者反应。', 2),
(1019, 29, '学习动机中,自我效能感指学习者对什么的判断?', 'single', JSON_ARRAY('A. 自己能否完成任务', 'B. 页面颜色是否统一', 'C. SQL 是否走索引', 'D. 债券是否到期'), 'A', '自我效能感是对自身完成任务能力的信念。', 2),
(1020, 30, '教学评价量表的主要作用是什么?', 'single', JSON_ARRAY('A. 明确评价标准', 'B. 编译 Java', 'C. 创建线程', 'D. 控制通胀'), 'A', '评价量表让反馈更清晰、可比较。', 2),
(1021, 31, '合同成立通常需要要约和什么?', 'single', JSON_ARRAY('A. 承诺', 'B. 索引', 'C. 组件', 'D. 队列'), 'A', '合同成立一般需要要约和承诺。', 2),
(1022, 32, '发生劳动争议时,常见正式处理渠道之一是?', 'single', JSON_ARRAY('A. 劳动仲裁', 'B. BFS', 'C. 组件通信', 'D. 构图'), 'A', '劳动仲裁是处理劳动争议的重要程序。', 2),
(1023, 33, '商务邮件中主题行应尽量做到什么?', 'single', JSON_ARRAY('A. 清晰具体', 'B. 尽量空白', 'C. 全部使用缩写', 'D. 不写目的'), 'A', '清晰主题能帮助对方快速判断邮件目的。', 1),
(1024, 34, '理解传统文化脉络通常需要关注思想、文学、艺术和什么?', 'single', JSON_ARRAY('A. 礼俗', 'B. 索引', 'C. 线程', 'D. 利率'), 'A', '礼俗是传统文化的重要组成部分。', 1),
(1025, 35, '工业互联网中采集设备状态常依赖什么?', 'single', JSON_ARRAY('A. 传感器', 'B. 民法典', 'C. 课程评价量表', 'D. 债券票息'), 'A', '传感器用于采集设备和环境数据。', 2),
(1026, 35, '数字化工厂看板主要帮助管理者做什么?', 'single', JSON_ARRAY('A. 监控生产过程', 'B. 写商务邮件', 'C. 完成心肺复苏', 'D. 设计劳动合同'), 'A', '数据看板用于观察产线状态和异常。', 2),
(1027, 36, '智慧农业中自动灌溉通常需要参考什么数据?', 'single', JSON_ARRAY('A. 土壤湿度', 'B. HTTP 状态码', 'C. 股票 K 线', 'D. 组件 props'), 'A', '土壤湿度是灌溉决策的重要数据。', 2),
(1028, 36, '农业可持续发展强调资源利用和什么之间的平衡?', 'single', JSON_ARRAY('A. 环境保护', 'B. 页面动效', 'C. 进程数量', 'D. 劳动仲裁'), 'A', '可持续发展关注生产和生态保护的平衡。', 2)
ON DUPLICATE KEY UPDATE
content = VALUES(content),
options = VALUES(options),
answer = VALUES(answer),
explanation = VALUES(explanation),
difficulty = VALUES(difficulty);
INSERT INTO question_knowledge_relation (id, question_id, knowledge_point_id, weight) VALUES
(1001, 1001, 1, 1.0), (1002, 1002, 2, 1.0), (1003, 1003, 3, 1.0), (1004, 1004, 4, 1.0),
(1005, 1005, 5, 1.0), (1006, 1006, 6, 1.0), (1007, 1007, 7, 1.0), (1008, 1008, 8, 1.0),
(1009, 1009, 9, 1.0), (1010, 1010, 10, 1.0), (1011, 1011, 11, 1.0), (1012, 1012, 12, 1.0),
(1013, 1013, 13, 1.0), (1014, 1014, 14, 1.0), (1015, 1015, 15, 1.0), (1016, 1016, 16, 1.0),
(1017, 1017, 17, 1.0), (1018, 1018, 18, 1.0), (1019, 1019, 19, 1.0), (1020, 1020, 20, 1.0),
(1021, 1021, 21, 1.0), (1022, 1022, 22, 1.0), (1023, 1023, 23, 1.0), (1024, 1024, 24, 1.0),
(1025, 1025, 25, 1.0), (1026, 1026, 26, 1.0), (1027, 1027, 27, 1.0), (1028, 1028, 28, 1.0),
(1029, 1002, 1, 0.4), (1030, 1008, 7, 0.5), (1031, 1014, 13, 0.5), (1032, 1018, 17, 0.5),
(1033, 1020, 19, 0.5), (1034, 1022, 21, 0.5), (1035, 1026, 25, 0.5), (1036, 1028, 27, 0.5)
ON DUPLICATE KEY UPDATE
weight = VALUES(weight);
INSERT INTO answer_record (id, user_id, question_id, user_answer, is_correct, answered_time) VALUES
(2991, 2, 1001, 'A', 1, DATE_SUB(NOW(), INTERVAL 8 DAY)), (2992, 2, 1002, 'B', 1, DATE_SUB(NOW(), INTERVAL 7 DAY)), (2993, 2, 1003, 'A', 1, DATE_SUB(NOW(), INTERVAL 6 DAY)), (2994, 2, 1006, 'B', 0, DATE_SUB(NOW(), INTERVAL 5 DAY)),
(2995, 2, 1007, 'A', 1, DATE_SUB(NOW(), INTERVAL 4 DAY)), (2996, 2, 1008, 'C', 0, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2997, 2, 1013, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2998, 2, 1015, 'D', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3001, 3, 1001, 'A', 1, DATE_SUB(NOW(), INTERVAL 7 DAY)), (3002, 3, 1002, 'B', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3003, 3, 1007, 'C', 0, DATE_SUB(NOW(), INTERVAL 2 DAY)), (3004, 3, 1023, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3005, 4, 1003, 'A', 1, DATE_SUB(NOW(), INTERVAL 7 DAY)), (3006, 4, 1004, 'B', 0, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3007, 4, 1014, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)), (3008, 4, 1016, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3009, 5, 1005, 'A', 1, DATE_SUB(NOW(), INTERVAL 6 DAY)), (3010, 5, 1006, 'B', 0, DATE_SUB(NOW(), INTERVAL 4 DAY)), (3011, 5, 1011, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)), (3012, 5, 1021, 'D', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3013, 6, 1001, 'A', 1, DATE_SUB(NOW(), INTERVAL 6 DAY)), (3014, 6, 1002, 'C', 0, DATE_SUB(NOW(), INTERVAL 4 DAY)), (3015, 6, 1013, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)), (3016, 6, 1025, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3017, 7, 1003, 'A', 1, DATE_SUB(NOW(), INTERVAL 6 DAY)), (3018, 7, 1004, 'A', 1, DATE_SUB(NOW(), INTERVAL 4 DAY)), (3019, 7, 1015, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)), (3020, 7, 1016, 'D', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3021, 8, 1005, 'B', 0, DATE_SUB(NOW(), INTERVAL 6 DAY)), (3022, 8, 1006, 'A', 1, DATE_SUB(NOW(), INTERVAL 4 DAY)), (3023, 8, 1017, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)), (3024, 8, 1018, 'C', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3025, 9, 1008, 'A', 1, DATE_SUB(NOW(), INTERVAL 6 DAY)), (3026, 9, 1012, 'B', 0, DATE_SUB(NOW(), INTERVAL 4 DAY)), (3027, 9, 1027, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)), (3028, 9, 1028, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3029, 10, 1019, 'A', 1, DATE_SUB(NOW(), INTERVAL 6 DAY)), (3030, 10, 1020, 'A', 1, DATE_SUB(NOW(), INTERVAL 4 DAY)), (3031, 10, 1024, 'B', 0, DATE_SUB(NOW(), INTERVAL 2 DAY)), (3032, 10, 1006, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3033, 11, 1013, 'A', 1, DATE_SUB(NOW(), INTERVAL 6 DAY)), (3034, 11, 1014, 'B', 0, DATE_SUB(NOW(), INTERVAL 4 DAY)), (3035, 11, 1022, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)), (3036, 11, 1004, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3037, 12, 1007, 'A', 1, DATE_SUB(NOW(), INTERVAL 6 DAY)), (3038, 12, 1008, 'A', 1, DATE_SUB(NOW(), INTERVAL 4 DAY)), (3039, 12, 1021, 'C', 0, DATE_SUB(NOW(), INTERVAL 2 DAY)), (3040, 12, 1025, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3041, 13, 1011, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3042, 13, 1012, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3043, 13, 1021, 'B', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3044, 14, 1011, 'B', 0, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3045, 14, 1012, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3046, 14, 1023, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3047, 15, 1011, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3048, 15, 1012, 'C', 0, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3049, 15, 1007, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3050, 16, 1011, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3051, 16, 1012, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3052, 16, 1013, 'D', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3053, 17, 1013, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3054, 17, 1014, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3055, 17, 1023, 'B', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3056, 18, 1013, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3057, 18, 1014, 'D', 0, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3058, 18, 1022, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3059, 19, 1013, 'B', 0, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3060, 19, 1014, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3061, 19, 1019, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3062, 20, 1013, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3063, 20, 1014, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3064, 20, 1015, 'C', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3065, 21, 1015, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3066, 21, 1016, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3067, 21, 1003, 'B', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3068, 22, 1015, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3069, 22, 1016, 'D', 0, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3070, 22, 1024, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3071, 23, 1015, 'C', 0, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3072, 23, 1016, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3073, 23, 1014, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3074, 24, 1015, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3075, 24, 1016, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3076, 24, 1023, 'C', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3077, 25, 1017, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3078, 25, 1018, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3079, 25, 1019, 'D', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3080, 26, 1017, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3081, 26, 1018, 'C', 0, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3082, 26, 1020, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3083, 27, 1017, 'B', 0, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3084, 27, 1018, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3085, 27, 1019, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3086, 28, 1017, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3087, 28, 1018, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3088, 28, 1020, 'B', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3089, 29, 1019, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3090, 29, 1020, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3091, 29, 1024, 'B', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3092, 30, 1019, 'B', 0, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3093, 30, 1020, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3094, 30, 1013, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3095, 31, 1021, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3096, 31, 1022, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3097, 31, 1011, 'B', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3098, 32, 1021, 'C', 0, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3099, 32, 1022, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3100, 32, 1023, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3101, 33, 1023, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3102, 33, 1024, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3103, 33, 1014, 'B', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3104, 34, 1023, 'B', 0, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3105, 34, 1024, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3106, 34, 1019, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3107, 35, 1025, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3108, 35, 1026, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3109, 35, 1009, 'B', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3110, 36, 1025, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3111, 36, 1026, 'C', 0, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3112, 36, 1013, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3113, 37, 1025, 'C', 0, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3114, 37, 1026, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3115, 37, 1028, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3116, 38, 1025, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3117, 38, 1026, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3118, 38, 1010, 'B', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3119, 39, 1027, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3120, 39, 1028, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3121, 39, 1018, 'B', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3122, 40, 1027, 'C', 0, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3123, 40, 1028, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3124, 40, 1012, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3125, 41, 1007, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3126, 41, 1015, 'B', 0, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3127, 41, 1019, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(3128, 42, 1013, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (3129, 42, 1017, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3130, 42, 1021, 'D', 0, DATE_SUB(NOW(), INTERVAL 1 DAY))
ON DUPLICATE KEY UPDATE
user_answer = VALUES(user_answer),
is_correct = VALUES(is_correct),
answered_time = VALUES(answered_time);
-- Additional question bank: bring all 36 courses close to 3 exercises each.
INSERT INTO question (id, course_id, content, type, options, answer, explanation, difficulty) VALUES
(2001, 1, 'Java 中 private 修饰的成员主要体现了面向对象的哪一特性?', 'single', JSON_ARRAY('A. 封装', 'B. 多线程', 'C. 网络通信', 'D. SQL 聚合'), 'A', 'private 限制外部直接访问,是封装的重要手段。', 2),
(2002, 1, '子类重写父类方法时,方法名和参数列表通常应该怎样?', 'single', JSON_ARRAY('A. 保持一致', 'B. 必须完全不同', 'C. 只能改参数', 'D. 只能改返回值'), 'A', '重写要求方法签名保持一致或兼容。', 3),
(2003, 2, 'Vue 中子组件向父组件传递事件通常使用什么?', 'single', JSON_ARRAY('A. emit', 'B. index', 'C. SELECT', 'D. Thread'), 'A', 'emit 用于子组件触发父组件监听的事件。', 2),
(2004, 2, 'Vue Router 主要负责什么?', 'single', JSON_ARRAY('A. 页面路由切换', 'B. 数据库事务', 'C. 合同审查', 'D. 图像压缩'), 'A', 'Vue Router 用于前端单页应用的路由管理。', 2),
(2005, 3, '数组按下标访问元素的平均时间复杂度通常是?', 'single', JSON_ARRAY('A. O(1)', 'B. O(n)', 'C. O(n²)', 'D. O(log n)'), 'A', '数组支持按下标直接定位。', 1),
(2006, 3, '二分查找要求数据通常满足什么条件?', 'single', JSON_ARRAY('A. 有序', 'B. 随机', 'C. 加密', 'D. 多线程'), 'A', '二分查找依赖有序序列缩小范围。', 2),
(2007, 3, '栈结构最典型的访问规则是?', 'single', JSON_ARRAY('A. 后进先出', 'B. 先进先出', 'C. 随机访问', 'D. 分组统计'), 'A', '栈遵循 LIFO。', 1),
(2008, 4, 'Python 中定义函数使用哪个关键字?', 'single', JSON_ARRAY('A. def', 'B. class', 'C. SELECT', 'D. emit'), 'A', 'def 用于定义函数。', 1),
(2009, 4, 'Python 列表 append 方法的作用是?', 'single', JSON_ARRAY('A. 追加元素', 'B. 删除文件', 'C. 开启事务', 'D. 创建路由'), 'A', 'append 会在列表末尾追加元素。', 1),
(2010, 4, '读取文本文件后应及时关闭资源,常用的上下文语法是?', 'single', JSON_ARRAY('A. with open(...)', 'B. GROUP BY', 'C. v-model', 'D. HTTP GET'), 'A', 'with open 可以自动管理文件资源。', 2),
(2011, 5, 'Java 泛型的主要作用是什么?', 'single', JSON_ARRAY('A. 提供类型约束', 'B. 提高网速', 'C. 生成图表', 'D. 处理合同'), 'A', '泛型可以在编译期提供类型检查。', 2),
(2012, 5, 'HashMap 根据什么快速定位键值对?', 'single', JSON_ARRAY('A. 哈希值', 'B. 页面路由', 'C. 票息率', 'D. 土壤湿度'), 'A', 'HashMap 依赖哈希定位桶位置。', 2),
(2013, 5, 'Java 异常处理中 finally 块通常用于什么?', 'single', JSON_ARRAY('A. 释放资源', 'B. 定义类', 'C. 写 CSS', 'D. 计算 GDP'), 'A', 'finally 常用于关闭资源或清理现场。', 2),
(2014, 6, 'Spring Boot 中 @RestController 常用于什么层?', 'single', JSON_ARRAY('A. 控制层', 'B. 数据库层', 'C. 设计层', 'D. 法律层'), 'A', '@RestController 用于暴露 Web API。', 1),
(2015, 6, 'Repository 层通常负责什么?', 'single', JSON_ARRAY('A. 数据访问', 'B. 页面配色', 'C. 急救判断', 'D. 市场定位'), 'A', 'Repository 封装数据库访问。', 2),
(2016, 7, '数据分析中 describe 通常用于查看什么?', 'single', JSON_ARRAY('A. 描述性统计', 'B. 路由表', 'C. 劳动合同', 'D. 线程状态'), 'A', 'describe 可快速查看均值、分位数等统计。', 1),
(2017, 7, '折线图更适合展示哪类数据?', 'single', JSON_ARRAY('A. 时间趋势', 'B. 合同条款', 'C. 文件权限', 'D. 类继承'), 'A', '折线图常用于连续时间变化。', 2),
(2018, 7, '清洗缺失值前通常应先做什么?', 'single', JSON_ARRAY('A. 判断缺失原因', 'B. 直接全部删除', 'C. 改路由', 'D. 写接口'), 'A', '不同缺失原因对应不同处理策略。', 3),
(2019, 8, 'React 中保存组件内部状态常用哪个 Hook?', 'single', JSON_ARRAY('A. useState', 'B. GROUP BY', 'C. Autowired', 'D. def'), 'A', 'useState 用于函数组件状态。', 1),
(2020, 8, 'React 中处理副作用常用哪个 Hook?', 'single', JSON_ARRAY('A. useEffect', 'B. useSQL', 'C. useLaw', 'D. useGDP'), 'A', 'useEffect 用于请求、订阅等副作用。', 2),
(2021, 8, '组件拆分的主要目的是什么?', 'single', JSON_ARRAY('A. 提高复用和维护性', 'B. 增加重复代码', 'C. 禁止状态变化', 'D. 删除样式'), 'A', '合理拆分组件能降低复杂度。', 2),
(2022, 9, 'TypeScript 中 interface 常用于描述什么?', 'single', JSON_ARRAY('A. 对象结构', 'B. 线程调度', 'C. 土壤湿度', 'D. 债券收益'), 'A', 'interface 可描述对象字段和方法。', 1),
(2023, 9, 'TypeScript 的联合类型通常用哪个符号连接?', 'single', JSON_ARRAY('A. |', 'B. & only', 'C. #', 'D. @'), 'A', '联合类型使用 | 表示多种可能类型。', 2),
(2024, 9, '给 API 返回值定义类型的好处是什么?', 'single', JSON_ARRAY('A. 减少字段误用', 'B. 增加网络延迟', 'C. 删除数据库', 'D. 改变法律效力'), 'A', '类型定义可以提前发现字段使用错误。', 2),
(2025, 10, '浏览器缓存命中后通常可以减少什么?', 'single', JSON_ARRAY('A. 网络请求成本', 'B. 法律风险', 'C. 医疗流程', 'D. 作物需水量'), 'A', '缓存可以减少重复资源下载。', 2),
(2026, 10, '图片懒加载主要优化什么?', 'single', JSON_ARRAY('A. 初始加载性能', 'B. SQL 隔离级别', 'C. 合同成立', 'D. 宏观政策'), 'A', '懒加载避免一次性加载非首屏图片。', 2),
(2027, 11, '队列结构最典型的访问规则是?', 'single', JSON_ARRAY('A. 先进先出', 'B. 后进先出', 'C. 随机删除', 'D. 加权平均'), 'A', '队列遵循 FIFO。', 1),
(2028, 11, '图的邻接表适合表示什么?', 'single', JSON_ARRAY('A. 稀疏图', 'B. 合同目录', 'C. 货币政策', 'D. 版式留白'), 'A', '邻接表在边较少时更节省空间。', 3),
(2029, 12, 'O(n log n) 常见于哪类算法?', 'single', JSON_ARRAY('A. 高效排序', 'B. 常数访问', 'C. 简单赋值', 'D. 固定查询'), 'A', '归并排序、快速排序平均复杂度常见为 O(n log n)。', 2),
(2030, 12, '空间换时间的核心思想是?', 'single', JSON_ARRAY('A. 用额外存储减少计算', 'B. 只减少内存', 'C. 放弃索引', 'D. 删除缓存'), 'A', '哈希表等结构常用空间换取查询速度。', 3),
(2031, 13, 'SQL JOIN 的作用是?', 'single', JSON_ARRAY('A. 关联多表数据', 'B. 创建组件', 'C. 定义函数', 'D. 处理急救'), 'A', 'JOIN 用于根据条件连接多张表。', 2),
(2032, 13, '执行计划可以帮助分析什么?', 'single', JSON_ARRAY('A. 查询性能', 'B. 文案语气', 'C. 镜头节奏', 'D. 学习动机'), 'A', '执行计划能展示索引、扫描方式等信息。', 3),
(2033, 14, 'Linux 中查看当前目录文件常用命令是?', 'single', JSON_ARRAY('A. ls', 'B. cd only', 'C. SELECT', 'D. npm'), 'A', 'ls 用于列出目录内容。', 1),
(2034, 14, 'chmod 命令主要用于修改什么?', 'single', JSON_ARRAY('A. 文件权限', 'B. 股票价格', 'C. UI 色彩', 'D. 学习目标'), 'A', 'chmod 用于修改文件或目录权限。', 2),
(2035, 14, '管道符 | 的主要作用是?', 'single', JSON_ARRAY('A. 连接命令输入输出', 'B. 创建法律合同', 'C. 生成路由', 'D. 建立班级'), 'A', '管道可把前一个命令输出传给后一个命令。', 2),
(2036, 15, 'DNS 的主要作用是?', 'single', JSON_ARRAY('A. 域名解析', 'B. UI 对齐', 'C. 合同审查', 'D. 财务预算'), 'A', 'DNS 将域名解析为 IP 地址。', 1),
(2037, 15, 'TCP 三次握手主要用于建立什么?', 'single', JSON_ARRAY('A. 可靠连接', 'B. 课程评价', 'C. 页面布局', 'D. 医学伦理'), 'A', '三次握手用于建立可靠传输连接。', 2),
(2038, 16, '进程和线程相比,线程通常共享什么?', 'single', JSON_ARRAY('A. 进程内存空间', 'B. 股票账户', 'C. 合同编号', 'D. 摄影器材'), 'A', '同一进程内线程共享进程资源。', 2),
(2039, 16, '虚拟内存的作用之一是?', 'single', JSON_ARRAY('A. 扩展可用地址空间', 'B. 增加营销渠道', 'C. 改善镜头构图', 'D. 判断劳动争议'), 'A', '虚拟内存让程序拥有连续且更大的地址空间视图。', 3),
(2040, 17, '基金分散投资主要降低什么?', 'single', JSON_ARRAY('A. 非系统性风险', 'B. 代码缩进', 'C. 医疗沟通', 'D. 作物需水'), 'A', '分散持仓可降低单一资产风险。', 2),
(2041, 17, '风险收益匹配原则强调什么?', 'single', JSON_ARRAY('A. 收益越高通常风险越高', 'B. 风险越高必然亏损', 'C. 低风险必然高收益', 'D. 收益与风险无关'), 'A', '金融资产选择需要考虑风险承受能力。', 2),
(2042, 18, '个人理财中应急资金通常用于什么?', 'single', JSON_ARRAY('A. 应对突发支出', 'B. 增加页面动画', 'C. 删除数据', 'D. 设计图标'), 'A', '应急资金用于覆盖意外医疗、失业等支出。', 1),
(2043, 18, '资产配置的核心目的之一是?', 'single', JSON_ARRAY('A. 平衡风险和收益', 'B. 只追求最高收益', 'C. 只买单一资产', 'D. 避免记账'), 'A', '合理配置能适配目标和风险承受能力。', 2),
(2044, 18, '保险规划首先应关注什么?', 'single', JSON_ARRAY('A. 风险保障需求', 'B. 页面配色', 'C. 算法复杂度', 'D. 路由路径'), 'A', '保险的核心是转移重大风险。', 2),
(2045, 19, '央行降息通常会影响什么?', 'single', JSON_ARRAY('A. 融资成本', 'B. CSS 选择器', 'C. 线程数量', 'D. 镜头焦距'), 'A', '降息通常降低融资成本并影响需求。', 2),
(2046, 19, '失业率上升通常反映什么压力?', 'single', JSON_ARRAY('A. 就业市场压力', 'B. 页面加载压力', 'C. 文件权限压力', 'D. 构图压力'), 'A', '失业率是衡量就业状况的重要指标。', 2),
(2047, 20, '项目风险登记册用于记录什么?', 'single', JSON_ARRAY('A. 风险及应对措施', 'B. 图片颜色', 'C. 合同格式', 'D. SQL 字段'), 'A', '风险登记册用于追踪风险状态和应对方案。', 2),
(2048, 20, '项目复盘的主要价值是?', 'single', JSON_ARRAY('A. 总结经验改进流程', 'B. 删除历史数据', 'C. 固定所有计划', 'D. 避免沟通'), 'A', '复盘帮助团队沉淀经验。', 2),
(2049, 21, '营销漏斗通常描述什么过程?', 'single', JSON_ARRAY('A. 用户从认知到转化', 'B. 数据库备份', 'C. 线程切换', 'D. 合同签署'), 'A', '营销漏斗用于观察用户转化阶段。', 2),
(2050, 21, '用户画像主要帮助团队理解什么?', 'single', JSON_ARRAY('A. 目标用户特征', 'B. 代码运行栈', 'C. 土壤结构', 'D. 法条编号'), 'A', '用户画像用于沉淀典型用户特征和需求。', 2),
(2051, 22, '绩效管理中 KPI 通常表示什么?', 'single', JSON_ARRAY('A. 关键绩效指标', 'B. 网络协议', 'C. 设计网格', 'D. 急救步骤'), 'A', 'KPI 是衡量目标达成的重要指标。', 1),
(2052, 22, '招聘面试前通常需要明确什么?', 'single', JSON_ARRAY('A. 岗位胜任要求', 'B. 页面缓存', 'C. 索引类型', 'D. BFS 队列'), 'A', '明确要求才能设计有效筛选标准。', 2),
(2053, 22, '培训评估常用于判断什么?', 'single', JSON_ARRAY('A. 培训效果', 'B. 股价波动', 'C. HTTP 状态', 'D. 土壤湿度'), 'A', '培训评估帮助判断投入是否有效。', 2),
(2054, 23, 'UI 中一致的按钮样式主要提升什么?', 'single', JSON_ARRAY('A. 可预测性', 'B. 宏观调控', 'C. 事务隔离', 'D. 劳动仲裁'), 'A', '一致性让用户更容易理解操作。', 2),
(2055, 23, '高对比度文字主要改善什么?', 'single', JSON_ARRAY('A. 可读性', 'B. 债券收益', 'C. 医学伦理', 'D. 文件权限'), 'A', '文字和背景对比度影响阅读体验。', 1),
(2056, 24, '摄影中三分法主要用于什么?', 'single', JSON_ARRAY('A. 构图', 'B. SQL 查询', 'C. 合同成立', 'D. 线程同步'), 'A', '三分法是一种常见构图方法。', 1),
(2057, 24, '逆光拍摄时常需要注意什么?', 'single', JSON_ARRAY('A. 曝光控制', 'B. 数据库隔离', 'C. 路由跳转', 'D. 劳动合同'), 'A', '逆光容易导致主体曝光不足。', 2),
(2058, 24, '后期调色主要影响照片的什么?', 'single', JSON_ARRAY('A. 氛围和色彩表达', 'B. 进程调度', 'C. 法律效力', 'D. GDP'), 'A', '调色会改变影像情绪和视觉风格。', 2),
(2059, 25, '短视频开头几秒通常要重点完成什么?', 'single', JSON_ARRAY('A. 吸引注意力', 'B. 建立事务', 'C. 配置索引', 'D. 写劳动合同'), 'A', '开头决定用户是否继续观看。', 2),
(2060, 25, '分镜脚本主要帮助创作者规划什么?', 'single', JSON_ARRAY('A. 镜头内容和顺序', 'B. 网络端口', 'C. 货币政策', 'D. 类继承'), 'A', '分镜能提前规划拍摄和剪辑。', 2),
(2061, 26, '病史采集首先强调什么?', 'single', JSON_ARRAY('A. 准确沟通', 'B. 页面动效', 'C. 股价预测', 'D. 代码压缩'), 'A', '病史采集依赖有效医患沟通。', 2),
(2062, 26, '临床诊疗中保护隐私属于哪类要求?', 'single', JSON_ARRAY('A. 医学伦理', 'B. 前端性能', 'C. 资产配置', 'D. 农业灌溉'), 'A', '患者隐私保护是医学伦理的重要内容。', 2),
(2063, 27, '均衡膳食强调摄入什么?', 'single', JSON_ARRAY('A. 多类营养素', 'B. 单一食品', 'C. 只喝饮料', 'D. 完全不摄入脂肪'), 'A', '均衡膳食需要多样化营养来源。', 1),
(2064, 27, '慢病管理中长期记录指标的价值是?', 'single', JSON_ARRAY('A. 观察趋势', 'B. 生成路由', 'C. 提高渲染', 'D. 调整构图'), 'A', '长期数据有助于发现健康变化。', 2),
(2065, 27, '体重管理不应只关注体重,还应关注什么?', 'single', JSON_ARRAY('A. 饮食、运动和习惯', 'B. 只看 BMI', 'C. 只看股价', 'D. 只看代码行数'), 'A', '健康管理需要综合生活方式。', 2),
(2066, 28, '创伤出血时直接压迫主要用于什么?', 'single', JSON_ARRAY('A. 止血', 'B. 降息', 'C. 页面布局', 'D. SQL 聚合'), 'A', '直接压迫是常见止血方法。', 1),
(2067, 28, '急救电话中应清楚说明什么?', 'single', JSON_ARRAY('A. 地点和伤情', 'B. 股票收益', 'C. 页面颜色', 'D. 合同条款'), 'A', '准确地点和伤情有助于救援。', 1),
(2068, 29, '及时反馈对学习者有什么帮助?', 'single', JSON_ARRAY('A. 调整学习策略', 'B. 增加网络延迟', 'C. 降低可读性', 'D. 删除记录'), 'A', '反馈能帮助学习者发现问题并修正。', 2),
(2069, 29, '内在动机通常来自什么?', 'single', JSON_ARRAY('A. 兴趣和价值感', 'B. 单纯外部奖励', 'C. 数据库索引', 'D. 合同违约'), 'A', '内在动机与兴趣、意义和自主感相关。', 2),
(2070, 30, '课程目标设计应尽量具有什么特征?', 'single', JSON_ARRAY('A. 可观察可评价', 'B. 模糊不可测', 'C. 只写口号', 'D. 与教学无关'), 'A', '清晰目标有助于教学和评价。', 2),
(2071, 30, '形成性评价通常发生在什么时候?', 'single', JSON_ARRAY('A. 学习过程中', 'B. 课程完全结束后', 'C. 系统关机时', 'D. 合同签署时'), 'A', '形成性评价用于过程反馈。', 2),
(2072, 31, '违约责任通常发生在什么情况下?', 'single', JSON_ARRAY('A. 不履行合同义务', 'B. 正常履行合同', 'C. 页面刷新', 'D. 创建组件'), 'A', '违约责任源于违反合同约定。', 2),
(2073, 31, '格式条款应特别注意什么?', 'single', JSON_ARRAY('A. 提示和说明义务', 'B. 图片尺寸', 'C. 线程池大小', 'D. 作物周期'), 'A', '格式条款需要合理提示重要内容。', 3),
(2074, 32, '试用期约定应符合什么要求?', 'single', JSON_ARRAY('A. 法律规定', 'B. 页面风格', 'C. 算法复杂度', 'D. 镜头焦距'), 'A', '试用期长度和约定受劳动法限制。', 2),
(2075, 32, '加班工资争议常涉及什么证据?', 'single', JSON_ARRAY('A. 工时记录', 'B. UI 图标', 'C. SQL 函数', 'D. 摄影光圈'), 'A', '工时记录是判断加班事实的重要证据。', 2),
(2076, 33, '商务会议发言前最好先明确什么?', 'single', JSON_ARRAY('A. 目的和听众', 'B. 数据库类型', 'C. 急救流程', 'D. 土壤酸碱度'), 'A', '表达应围绕目标和听众组织。', 2),
(2077, 33, '英文商务邮件结尾常包含什么?', 'single', JSON_ARRAY('A. 行动请求或感谢', 'B. SQL 计划', 'C. 医疗处方', 'D. 生产传感器'), 'A', '商务邮件结尾应明确下一步或表达感谢。', 1),
(2078, 34, '儒家思想常强调哪类关系和秩序?', 'single', JSON_ARRAY('A. 伦理关系', 'B. 数据索引', 'C. 页面缓存', 'D. 债券久期'), 'A', '儒家思想重视伦理和社会秩序。', 2),
(2079, 34, '传统节日研究可以帮助理解什么?', 'single', JSON_ARRAY('A. 礼俗与文化记忆', 'B. 线程调度', 'C. 接口返回码', 'D. 投资组合'), 'A', '节日承载礼俗、记忆和价值观。', 2),
(2080, 35, '工业设备联网后最直接产生什么?', 'single', JSON_ARRAY('A. 设备数据', 'B. 合同条款', 'C. 学习动机', 'D. UI 图标'), 'A', '联网设备能持续产生状态和过程数据。', 1),
(2081, 35, '预测性维护依赖什么判断设备风险?', 'single', JSON_ARRAY('A. 历史和实时数据', 'B. 单次主观判断', 'C. 页面颜色', 'D. 劳动合同'), 'A', '预测性维护需要数据分析设备状态。', 3),
(2082, 36, '节水灌溉的核心目标是?', 'single', JSON_ARRAY('A. 提高水资源利用效率', 'B. 增加页面体积', 'C. 提高债券风险', 'D. 删除评价'), 'A', '节水灌溉关注产量和水资源效率。', 2),
(2083, 36, '农业环境保护中减少化肥过量使用有助于保护什么?', 'single', JSON_ARRAY('A. 土壤和水体', 'B. 浏览器缓存', 'C. 合同编号', 'D. 线程队列'), 'A', '过量化肥可能造成土壤和水体污染。', 2)
ON DUPLICATE KEY UPDATE
content = VALUES(content),
options = VALUES(options),
answer = VALUES(answer),
explanation = VALUES(explanation),
difficulty = VALUES(difficulty);
-- Make answer positions realistic instead of always putting the correct option at A.
UPDATE question SET options = JSON_ARRAY('A. 线程', 'B. 类', 'C. 数据库', 'D. 请求'), answer = 'B' WHERE id = 1001;
UPDATE question SET options = JSON_ARRAY('A. 数据库优化', 'B. 法律合规', 'C. 性能优化', 'D. 宏观调控'), answer = 'C' WHERE id = 1004;
UPDATE question SET options = JSON_ARRAY('A. 索引页', 'B. HTTP', 'C. 合同条款', 'D. 指针或引用'), answer = 'D' WHERE id = 1005;
UPDATE question SET options = JSON_ARRAY('A. 继承性', 'B. 隔离性', 'C. 交互性', 'D. 工业性'), answer = 'B' WHERE id = 1008;
UPDATE question SET options = JSON_ARRAY('A. 物理层', 'B. 链路层', 'C. 应用层', 'D. 农业层'), answer = 'C' WHERE id = 1009;
UPDATE question SET options = JSON_ARRAY('A. 债券', 'B. 色彩', 'C. 合同', 'D. 线程或进程'), answer = 'D' WHERE id = 1010;
UPDATE question SET options = JSON_ARRAY('A. 固定债权', 'B. 所有权', 'C. 劳动合同', 'D. 文件权限'), answer = 'B' WHERE id = 1011;
UPDATE question SET options = JSON_ARRAY('A. 代码复杂度', 'B. 页面留白', 'C. 通货膨胀', 'D. 线程数量'), answer = 'C' WHERE id = 1012;
UPDATE question SET options = JSON_ARRAY('A. props', 'B. 索引', 'C. DNS', 'D. 里程碑'), answer = 'D' WHERE id = 1013;
UPDATE question SET options = JSON_ARRAY('A. 数据表主键', 'B. 目标用户', 'C. 线程池大小', 'D. 土壤湿度'), answer = 'B' WHERE id = 1014;
UPDATE question SET options = JSON_ARRAY('A. 事务隔离', 'B. GDP', 'C. 版式层级', 'D. 劳动仲裁'), answer = 'C' WHERE id = 1015;
UPDATE question SET options = JSON_ARRAY('A. SQL JOIN', 'B. 债券久期', 'C. 进程调度', 'D. 镜头时长和转场'), answer = 'D' WHERE id = 1016;
UPDATE question SET options = JSON_ARRAY('A. 修改代码', 'B. 了解并选择', 'C. 操作数据库', 'D. 创建索引'), answer = 'B' WHERE id = 1017;
UPDATE question SET options = JSON_ARRAY('A. 股票价格', 'B. 页面缓存', 'C. 环境安全和意识反应', 'D. 合同编号'), answer = 'C' WHERE id = 1018;
UPDATE question SET options = JSON_ARRAY('A. 页面颜色是否统一', 'B. SQL 是否走索引', 'C. 债券是否到期', 'D. 自己能否完成任务'), answer = 'D' WHERE id = 1019;
UPDATE question SET options = JSON_ARRAY('A. 编译 Java', 'B. 明确评价标准', 'C. 创建线程', 'D. 控制通胀'), answer = 'B' WHERE id = 1020;
UPDATE question SET options = JSON_ARRAY('A. 索引', 'B. 组件', 'C. 承诺', 'D. 队列'), answer = 'C' WHERE id = 1021;
UPDATE question SET options = JSON_ARRAY('A. BFS', 'B. 组件通信', 'C. 构图', 'D. 劳动仲裁'), answer = 'D' WHERE id = 1022;
UPDATE question SET options = JSON_ARRAY('A. 尽量空白', 'B. 清晰具体', 'C. 全部使用缩写', 'D. 不写目的'), answer = 'B' WHERE id = 1023;
UPDATE question SET options = JSON_ARRAY('A. 索引', 'B. 线程', 'C. 礼俗', 'D. 利率'), answer = 'C' WHERE id = 1024;
UPDATE question SET options = JSON_ARRAY('A. 民法典', 'B. 课程评价量表', 'C. 债券票息', 'D. 传感器'), answer = 'D' WHERE id = 1025;
UPDATE question SET options = JSON_ARRAY('A. 写商务邮件', 'B. 监控生产过程', 'C. 完成心肺复苏', 'D. 设计劳动合同'), answer = 'B' WHERE id = 1026;
UPDATE question SET options = JSON_ARRAY('A. HTTP 状态码', 'B. 股票 K 线', 'C. 土壤湿度', 'D. 组件 props'), answer = 'C' WHERE id = 1027;
UPDATE question SET options = JSON_ARRAY('A. 页面动效', 'B. 进程数量', 'C. 劳动仲裁', 'D. 环境保护'), answer = 'D' WHERE id = 1028;
UPDATE question SET options = JSON_ARRAY('A. 多线程', 'B. 封装', 'C. 网络通信', 'D. SQL 聚合'), answer = 'B' WHERE id = 2001;
UPDATE question SET options = JSON_ARRAY('A. 必须完全不同', 'B. 只能改参数', 'C. 保持一致', 'D. 只能改返回值'), answer = 'C' WHERE id = 2002;
UPDATE question SET options = JSON_ARRAY('A. index', 'B. SELECT', 'C. Thread', 'D. emit'), answer = 'D' WHERE id = 2003;
UPDATE question SET options = JSON_ARRAY('A. 数据库事务', 'B. 页面路由切换', 'C. 合同审查', 'D. 图像压缩'), answer = 'B' WHERE id = 2004;
UPDATE question SET options = JSON_ARRAY('A. O(n)', 'B. O(n²)', 'C. O(1)', 'D. O(log n)'), answer = 'C' WHERE id = 2005;
UPDATE question SET options = JSON_ARRAY('A. 随机', 'B. 加密', 'C. 多线程', 'D. 有序'), answer = 'D' WHERE id = 2006;
UPDATE question SET options = JSON_ARRAY('A. 先进先出', 'B. 后进先出', 'C. 随机访问', 'D. 分组统计'), answer = 'B' WHERE id = 2007;
UPDATE question SET options = JSON_ARRAY('A. class', 'B. SELECT', 'C. def', 'D. emit'), answer = 'C' WHERE id = 2008;
UPDATE question SET options = JSON_ARRAY('A. 删除文件', 'B. 开启事务', 'C. 创建路由', 'D. 追加元素'), answer = 'D' WHERE id = 2009;
UPDATE question SET options = JSON_ARRAY('A. GROUP BY', 'B. with open(...)', 'C. v-model', 'D. HTTP GET'), answer = 'B' WHERE id = 2010;
UPDATE question SET options = JSON_ARRAY('A. 提高网速', 'B. 生成图表', 'C. 提供类型约束', 'D. 处理合同'), answer = 'C' WHERE id = 2011;
UPDATE question SET options = JSON_ARRAY('A. 页面路由', 'B. 票息率', 'C. 土壤湿度', 'D. 哈希值'), answer = 'D' WHERE id = 2012;
UPDATE question SET options = JSON_ARRAY('A. 定义类', 'B. 释放资源', 'C. 写 CSS', 'D. 计算 GDP'), answer = 'B' WHERE id = 2013;
UPDATE question SET options = JSON_ARRAY('A. 数据库层', 'B. 设计层', 'C. 控制层', 'D. 法律层'), answer = 'C' WHERE id = 2014;
UPDATE question SET options = JSON_ARRAY('A. 页面配色', 'B. 急救判断', 'C. 市场定位', 'D. 数据访问'), answer = 'D' WHERE id = 2015;
UPDATE question SET options = JSON_ARRAY('A. 路由表', 'B. 描述性统计', 'C. 劳动合同', 'D. 线程状态'), answer = 'B' WHERE id = 2016;
UPDATE question SET options = JSON_ARRAY('A. 合同条款', 'B. 文件权限', 'C. 时间趋势', 'D. 类继承'), answer = 'C' WHERE id = 2017;
UPDATE question SET options = JSON_ARRAY('A. 直接全部删除', 'B. 改路由', 'C. 写接口', 'D. 判断缺失原因'), answer = 'D' WHERE id = 2018;
UPDATE question SET options = JSON_ARRAY('A. GROUP BY', 'B. useState', 'C. Autowired', 'D. def'), answer = 'B' WHERE id = 2019;
UPDATE question SET options = JSON_ARRAY('A. useSQL', 'B. useLaw', 'C. useEffect', 'D. useGDP'), answer = 'C' WHERE id = 2020;
UPDATE question SET options = JSON_ARRAY('A. 增加重复代码', 'B. 禁止状态变化', 'C. 删除样式', 'D. 提高复用和维护性'), answer = 'D' WHERE id = 2021;
UPDATE question SET options = JSON_ARRAY('A. 线程调度', 'B. 对象结构', 'C. 土壤湿度', 'D. 债券收益'), answer = 'B' WHERE id = 2022;
UPDATE question SET options = JSON_ARRAY('A. & only', 'B. #', 'C. |', 'D. @'), answer = 'C' WHERE id = 2023;
UPDATE question SET options = JSON_ARRAY('A. 增加网络延迟', 'B. 删除数据库', 'C. 改变法律效力', 'D. 减少字段误用'), answer = 'D' WHERE id = 2024;
UPDATE question SET options = JSON_ARRAY('A. 法律风险', 'B. 网络请求成本', 'C. 医疗流程', 'D. 作物需水量'), answer = 'B' WHERE id = 2025;
UPDATE question SET options = JSON_ARRAY('A. SQL 隔离级别', 'B. 合同成立', 'C. 初始加载性能', 'D. 宏观政策'), answer = 'C' WHERE id = 2026;
UPDATE question SET options = JSON_ARRAY('A. 后进先出', 'B. 随机删除', 'C. 加权平均', 'D. 先进先出'), answer = 'D' WHERE id = 2027;
UPDATE question SET options = JSON_ARRAY('A. 合同目录', 'B. 稀疏图', 'C. 货币政策', 'D. 版式留白'), answer = 'B' WHERE id = 2028;
UPDATE question SET options = JSON_ARRAY('A. 常数访问', 'B. 简单赋值', 'C. 高效排序', 'D. 固定查询'), answer = 'C' WHERE id = 2029;
UPDATE question SET options = JSON_ARRAY('A. 只减少内存', 'B. 放弃索引', 'C. 删除缓存', 'D. 用额外存储减少计算'), answer = 'D' WHERE id = 2030;
UPDATE question SET options = JSON_ARRAY('A. 创建组件', 'B. 关联多表数据', 'C. 定义函数', 'D. 处理急救'), answer = 'B' WHERE id = 2031;
UPDATE question SET options = JSON_ARRAY('A. 文案语气', 'B. 镜头节奏', 'C. 查询性能', 'D. 学习动机'), answer = 'C' WHERE id = 2032;
UPDATE question SET options = JSON_ARRAY('A. cd only', 'B. SELECT', 'C. npm', 'D. ls'), answer = 'D' WHERE id = 2033;
UPDATE question SET options = JSON_ARRAY('A. 股票价格', 'B. 文件权限', 'C. UI 色彩', 'D. 学习目标'), answer = 'B' WHERE id = 2034;
UPDATE question SET options = JSON_ARRAY('A. 创建法律合同', 'B. 生成路由', 'C. 连接命令输入输出', 'D. 建立班级'), answer = 'C' WHERE id = 2035;
UPDATE question SET options = JSON_ARRAY('A. UI 对齐', 'B. 合同审查', 'C. 财务预算', 'D. 域名解析'), answer = 'D' WHERE id = 2036;
UPDATE question SET options = JSON_ARRAY('A. 课程评价', 'B. 可靠连接', 'C. 页面布局', 'D. 医学伦理'), answer = 'B' WHERE id = 2037;
UPDATE question SET options = JSON_ARRAY('A. 股票账户', 'B. 合同编号', 'C. 进程内存空间', 'D. 摄影器材'), answer = 'C' WHERE id = 2038;
UPDATE question SET options = JSON_ARRAY('A. 增加营销渠道', 'B. 改善镜头构图', 'C. 判断劳动争议', 'D. 扩展可用地址空间'), answer = 'D' WHERE id = 2039;
UPDATE question SET options = JSON_ARRAY('A. 代码缩进', 'B. 非系统性风险', 'C. 医疗沟通', 'D. 作物需水'), answer = 'B' WHERE id = 2040;
UPDATE question SET options = JSON_ARRAY('A. 风险越高必然亏损', 'B. 低风险必然高收益', 'C. 收益越高通常风险越高', 'D. 收益与风险无关'), answer = 'C' WHERE id = 2041;
UPDATE question SET options = JSON_ARRAY('A. 增加页面动画', 'B. 删除数据', 'C. 设计图标', 'D. 应对突发支出'), answer = 'D' WHERE id = 2042;
UPDATE question SET options = JSON_ARRAY('A. 只追求最高收益', 'B. 平衡风险和收益', 'C. 只买单一资产', 'D. 避免记账'), answer = 'B' WHERE id = 2043;
UPDATE question SET options = JSON_ARRAY('A. 页面配色', 'B. 算法复杂度', 'C. 风险保障需求', 'D. 路由路径'), answer = 'C' WHERE id = 2044;
UPDATE question SET options = JSON_ARRAY('A. CSS 选择器', 'B. 线程数量', 'C. 镜头焦距', 'D. 融资成本'), answer = 'D' WHERE id = 2045;
UPDATE question SET options = JSON_ARRAY('A. 页面加载压力', 'B. 就业市场压力', 'C. 文件权限压力', 'D. 构图压力'), answer = 'B' WHERE id = 2046;
UPDATE question SET options = JSON_ARRAY('A. 图片颜色', 'B. 合同格式', 'C. 风险及应对措施', 'D. SQL 字段'), answer = 'C' WHERE id = 2047;
UPDATE question SET options = JSON_ARRAY('A. 删除历史数据', 'B. 固定所有计划', 'C. 避免沟通', 'D. 总结经验改进流程'), answer = 'D' WHERE id = 2048;
UPDATE question SET options = JSON_ARRAY('A. 数据库备份', 'B. 用户从认知到转化', 'C. 线程切换', 'D. 合同签署'), answer = 'B' WHERE id = 2049;
UPDATE question SET options = JSON_ARRAY('A. 代码运行栈', 'B. 土壤结构', 'C. 目标用户特征', 'D. 法条编号'), answer = 'C' WHERE id = 2050;
UPDATE question SET options = JSON_ARRAY('A. 网络协议', 'B. 设计网格', 'C. 急救步骤', 'D. 关键绩效指标'), answer = 'D' WHERE id = 2051;
UPDATE question SET options = JSON_ARRAY('A. 页面缓存', 'B. 岗位胜任要求', 'C. 索引类型', 'D. BFS 队列'), answer = 'B' WHERE id = 2052;
UPDATE question SET options = JSON_ARRAY('A. 股价波动', 'B. HTTP 状态', 'C. 培训效果', 'D. 土壤湿度'), answer = 'C' WHERE id = 2053;
UPDATE question SET options = JSON_ARRAY('A. 宏观调控', 'B. 事务隔离', 'C. 劳动仲裁', 'D. 可预测性'), answer = 'D' WHERE id = 2054;
UPDATE question SET options = JSON_ARRAY('A. 债券收益', 'B. 可读性', 'C. 医学伦理', 'D. 文件权限'), answer = 'B' WHERE id = 2055;
UPDATE question SET options = JSON_ARRAY('A. SQL 查询', 'B. 合同成立', 'C. 构图', 'D. 线程同步'), answer = 'C' WHERE id = 2056;
UPDATE question SET options = JSON_ARRAY('A. 数据库隔离', 'B. 路由跳转', 'C. 劳动合同', 'D. 曝光控制'), answer = 'D' WHERE id = 2057;
UPDATE question SET options = JSON_ARRAY('A. 进程调度', 'B. 氛围和色彩表达', 'C. 法律效力', 'D. GDP'), answer = 'B' WHERE id = 2058;
UPDATE question SET options = JSON_ARRAY('A. 建立事务', 'B. 配置索引', 'C. 吸引注意力', 'D. 写劳动合同'), answer = 'C' WHERE id = 2059;
UPDATE question SET options = JSON_ARRAY('A. 网络端口', 'B. 货币政策', 'C. 类继承', 'D. 镜头内容和顺序'), answer = 'D' WHERE id = 2060;
UPDATE question SET options = JSON_ARRAY('A. 页面动效', 'B. 准确沟通', 'C. 股价预测', 'D. 代码压缩'), answer = 'B' WHERE id = 2061;
UPDATE question SET options = JSON_ARRAY('A. 前端性能', 'B. 资产配置', 'C. 医学伦理', 'D. 农业灌溉'), answer = 'C' WHERE id = 2062;
UPDATE question SET options = JSON_ARRAY('A. 单一食品', 'B. 只喝饮料', 'C. 完全不摄入脂肪', 'D. 多类营养素'), answer = 'D' WHERE id = 2063;
UPDATE question SET options = JSON_ARRAY('A. 生成路由', 'B. 观察趋势', 'C. 提高渲染', 'D. 调整构图'), answer = 'B' WHERE id = 2064;
UPDATE question SET options = JSON_ARRAY('A. 只看 BMI', 'B. 只看股价', 'C. 饮食、运动和习惯', 'D. 只看代码行数'), answer = 'C' WHERE id = 2065;
UPDATE question SET options = JSON_ARRAY('A. 降息', 'B. 页面布局', 'C. SQL 聚合', 'D. 止血'), answer = 'D' WHERE id = 2066;
UPDATE question SET options = JSON_ARRAY('A. 股票收益', 'B. 地点和伤情', 'C. 页面颜色', 'D. 合同条款'), answer = 'B' WHERE id = 2067;
UPDATE question SET options = JSON_ARRAY('A. 增加网络延迟', 'B. 降低可读性', 'C. 调整学习策略', 'D. 删除记录'), answer = 'C' WHERE id = 2068;
UPDATE question SET options = JSON_ARRAY('A. 单纯外部奖励', 'B. 数据库索引', 'C. 合同违约', 'D. 兴趣和价值感'), answer = 'D' WHERE id = 2069;
UPDATE question SET options = JSON_ARRAY('A. 模糊不可测', 'B. 可观察可评价', 'C. 只写口号', 'D. 与教学无关'), answer = 'B' WHERE id = 2070;
UPDATE question SET options = JSON_ARRAY('A. 课程完全结束后', 'B. 系统关机时', 'C. 学习过程中', 'D. 合同签署时'), answer = 'C' WHERE id = 2071;
UPDATE question SET options = JSON_ARRAY('A. 正常履行合同', 'B. 页面刷新', 'C. 创建组件', 'D. 不履行合同义务'), answer = 'D' WHERE id = 2072;
UPDATE question SET options = JSON_ARRAY('A. 图片尺寸', 'B. 提示和说明义务', 'C. 线程池大小', 'D. 作物周期'), answer = 'B' WHERE id = 2073;
UPDATE question SET options = JSON_ARRAY('A. 页面风格', 'B. 算法复杂度', 'C. 法律规定', 'D. 镜头焦距'), answer = 'C' WHERE id = 2074;
UPDATE question SET options = JSON_ARRAY('A. UI 图标', 'B. SQL 函数', 'C. 摄影光圈', 'D. 工时记录'), answer = 'D' WHERE id = 2075;
UPDATE question SET options = JSON_ARRAY('A. 数据库类型', 'B. 目的和听众', 'C. 急救流程', 'D. 土壤酸碱度'), answer = 'B' WHERE id = 2076;
UPDATE question SET options = JSON_ARRAY('A. SQL 计划', 'B. 医疗处方', 'C. 行动请求或感谢', 'D. 生产传感器'), answer = 'C' WHERE id = 2077;
UPDATE question SET options = JSON_ARRAY('A. 数据索引', 'B. 页面缓存', 'C. 债券久期', 'D. 伦理关系'), answer = 'D' WHERE id = 2078;
UPDATE question SET options = JSON_ARRAY('A. 线程调度', 'B. 礼俗与文化记忆', 'C. 接口返回码', 'D. 投资组合'), answer = 'B' WHERE id = 2079;
UPDATE question SET options = JSON_ARRAY('A. 合同条款', 'B. 学习动机', 'C. 设备数据', 'D. UI 图标'), answer = 'C' WHERE id = 2080;
UPDATE question SET options = JSON_ARRAY('A. 单次主观判断', 'B. 页面颜色', 'C. 劳动合同', 'D. 历史和实时数据'), answer = 'D' WHERE id = 2081;
UPDATE question SET options = JSON_ARRAY('A. 增加页面体积', 'B. 提高水资源利用效率', 'C. 提高债券风险', 'D. 删除评价'), answer = 'B' WHERE id = 2082;
UPDATE question SET options = JSON_ARRAY('A. 浏览器缓存', 'B. 合同编号', 'C. 土壤和水体', 'D. 线程队列'), answer = 'C' WHERE id = 2083;
INSERT INTO question_knowledge_relation (question_id, knowledge_point_id, weight) VALUES
(2001, 1, 1.0), (2002, 1, 1.0), (2003, 3, 1.0), (2004, 3, 1.0), (2005, 5, 1.0), (2006, 5, 1.0), (2007, 5, 1.0),
(2008, 1, 1.0), (2009, 1, 1.0), (2010, 1, 1.0), (2011, 1, 1.0), (2012, 1, 1.0), (2013, 1, 1.0), (2014, 2, 1.0), (2015, 2, 1.0),
(2016, 7, 1.0), (2017, 7, 1.0), (2018, 7, 1.0), (2019, 3, 1.0), (2020, 3, 1.0), (2021, 3, 1.0), (2022, 3, 1.0), (2023, 3, 1.0), (2024, 3, 1.0),
(2025, 4, 1.0), (2026, 4, 1.0), (2027, 5, 1.0), (2028, 6, 1.0), (2029, 5, 1.0), (2030, 5, 1.0), (2031, 7, 1.0), (2032, 8, 1.0),
(2033, 10, 1.0), (2034, 10, 1.0), (2035, 10, 1.0), (2036, 9, 1.0), (2037, 9, 1.0), (2038, 10, 1.0), (2039, 10, 1.0),
(2040, 11, 1.0), (2041, 11, 1.0), (2042, 11, 1.0), (2043, 11, 1.0), (2044, 11, 1.0), (2045, 12, 1.0), (2046, 12, 1.0),
(2047, 13, 1.0), (2048, 13, 1.0), (2049, 14, 1.0), (2050, 14, 1.0), (2051, 13, 1.0), (2052, 13, 1.0), (2053, 13, 1.0),
(2054, 15, 1.0), (2055, 15, 1.0), (2056, 16, 1.0), (2057, 16, 1.0), (2058, 16, 1.0), (2059, 16, 1.0), (2060, 16, 1.0),
(2061, 17, 1.0), (2062, 17, 1.0), (2063, 18, 1.0), (2064, 18, 1.0), (2065, 18, 1.0), (2066, 18, 1.0), (2067, 18, 1.0),
(2068, 19, 1.0), (2069, 19, 1.0), (2070, 20, 1.0), (2071, 20, 1.0), (2072, 21, 1.0), (2073, 21, 1.0), (2074, 22, 1.0), (2075, 22, 1.0),
(2076, 23, 1.0), (2077, 23, 1.0), (2078, 24, 1.0), (2079, 24, 1.0), (2080, 25, 1.0), (2081, 26, 1.0), (2082, 27, 1.0), (2083, 28, 1.0)
ON DUPLICATE KEY UPDATE
weight = VALUES(weight);
-- Extra answer records for the expanded question bank.
INSERT INTO answer_record (id, user_id, question_id, user_answer, is_correct, answered_time) VALUES
(5001, 2, 2001, 'A', 1, DATE_SUB(NOW(), INTERVAL 5 DAY)), (5002, 2, 2002, 'B', 0, DATE_SUB(NOW(), INTERVAL 4 DAY)), (5003, 2, 2003, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (5004, 2, 2005, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)), (5005, 2, 2032, 'C', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(5006, 13, 2040, 'A', 1, DATE_SUB(NOW(), INTERVAL 4 DAY)), (5007, 13, 2043, 'B', 0, DATE_SUB(NOW(), INTERVAL 2 DAY)), (5008, 14, 2045, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(5009, 17, 2047, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (5010, 18, 2050, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)), (5011, 19, 2052, 'C', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(5012, 21, 2054, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (5013, 22, 2057, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)), (5014, 23, 2060, 'B', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(5015, 25, 2061, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (5016, 26, 2064, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)), (5017, 27, 2066, 'C', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(5018, 29, 2068, 'A', 1, DATE_SUB(NOW(), INTERVAL 3 DAY)), (5019, 30, 2071, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)), (5020, 31, 2072, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(5021, 32, 2075, 'D', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)), (5022, 33, 2076, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)), (5023, 34, 2079, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(5024, 35, 2080, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)), (5025, 36, 2081, 'B', 0, DATE_SUB(NOW(), INTERVAL 1 DAY)), (5026, 39, 2082, 'A', 1, DATE_SUB(NOW(), INTERVAL 2 DAY)), (5027, 40, 2083, 'A', 1, DATE_SUB(NOW(), INTERVAL 1 DAY))
ON DUPLICATE KEY UPDATE
user_answer = VALUES(user_answer),
is_correct = VALUES(is_correct),
answered_time = VALUES(answered_time);
-- Recalculate seeded answer correctness after answer positions are shuffled.
UPDATE answer_record ar
JOIN question q ON ar.question_id = q.id
SET ar.is_correct = IF(UPPER(TRIM(ar.user_answer)) = UPPER(TRIM(q.answer)), 1, 0)
WHERE ar.question_id BETWEEN 1001 AND 2083;
SET FOREIGN_KEY_CHECKS = 1;
SELECT 'knowledge_points' AS metric, COUNT(*) AS total FROM knowledge_point
UNION ALL
SELECT 'questions', COUNT(*) FROM question
UNION ALL
SELECT 'relations', COUNT(*) FROM question_knowledge_relation
UNION ALL
SELECT 'answer_records', COUNT(*) FROM answer_record;
SELECT category, COUNT(*) AS knowledge_count
FROM knowledge_point
GROUP BY category
ORDER BY category;