From 4cae7c74535ba6d2424663e4efdde2ca8e5774b8 Mon Sep 17 00:00:00 2001 From: cjybyjk Date: Fri, 5 Jan 2024 00:43:38 +0800 Subject: [PATCH] first commit --- about.html | 21 + css/ui.css | 51 + data-tools/convert.py | 145 ++ data/problems.json | 3463 +++++++++++++++++++++++++++++++++++++++++ img/alipay.jpg | Bin 0 -> 63564 bytes index.html | 114 ++ js/jquery.min.js | 2 + js/problem.js | 124 ++ js/utils.js | 71 + judge.html | 209 +++ problem_list.html | 51 + 11 files changed, 4251 insertions(+) create mode 100644 about.html create mode 100644 css/ui.css create mode 100644 data-tools/convert.py create mode 100644 data/problems.json create mode 100644 img/alipay.jpg create mode 100644 index.html create mode 100644 js/jquery.min.js create mode 100644 js/problem.js create mode 100644 js/utils.js create mode 100644 judge.html create mode 100644 problem_list.html diff --git a/about.html b/about.html new file mode 100644 index 0000000..5da80f4 --- /dev/null +++ b/about.html @@ -0,0 +1,21 @@ +
+

+

本项目不是小米官方项目。

+

答案为用户收集整理,不一定完全正确,欢迎通过 Pull Request 和 issues 提交你的答案。

+

实际答题中题目和选项可能会发生变化,请注意题目和选项的细节。

+

祝你们每个人都能天天签到 12 分,早日通过申请审批,解锁 BootLoader。

+

+ 开发: Shelling +
+ 数据整理:MlgmXyysd +

+

+ Buy me a coffee: +

+

+ GitHub stars + GitHub forks +
diff --git a/css/ui.css b/css/ui.css new file mode 100644 index 0000000..620f74e --- /dev/null +++ b/css/ui.css @@ -0,0 +1,51 @@ +body { + margin: 0; + font-family: Roboto, Noto Sans SC, PingFang SC, Lantinghei SC, Microsoft Yahei, Hiragino Sans GB, "Microsoft Sans Serif", WenQuanYi Micro Hei, sans-serif; + word-wrap: break-word; +} + +mdui-layout { + height: 100vh; +} + +mdui-layout-main { + position: relative; + height: 100%; + overflow: hidden; +} + +mdui-top-app-bar { + position: absolute; + top: 0px; + right: 0px; + left: 0px; +} + +mdui-navigation-drawer { + position: absolute; + top: 64px; + bottom: 0px; + left: 0px; +} + +#collapse { + margin: 12px 0; + overflow-y: auto; + max-height: calc(100% - 64px - 12px); +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 1.25em; + font-weight: 400; +} + +h1 { + font-size: 2.5em; + line-height: 1.2; +} + +h2 { + font-size: 1.875em; + line-height: 1.3; +} diff --git a/data-tools/convert.py b/data-tools/convert.py new file mode 100644 index 0000000..8f0a023 --- /dev/null +++ b/data-tools/convert.py @@ -0,0 +1,145 @@ +import json +import os +import time +import re + +def read_problems(): + # read problems.json + with open('problems.json', 'r', encoding='utf-8') as f: + problems = json.load(f) + return problems + +def read_today(): + # read all jsons in 'today' folder + today_problems = [] + + for filename in os.listdir('today'): + with open(os.path.join('today', filename), 'r', encoding='utf-8') as f: + today_problems.append(json.load(f)) + return today_problems + +def cleanup_string(string): + # remove tags by using regex + string = re.sub(r'<.*?span.*?>', '', string) + string = string.strip() + return string + +def levenshtein_distance(s1, s2): + # calculate levenshtein distance between two strings + # https://en.wikipedia.org/wiki/Levenshtein_distance + if len(s1) < len(s2): + return levenshtein_distance(s2, s1) + if len(s2) == 0: + return len(s1) + previous_row = range(len(s2) + 1) + for i, c1 in enumerate(s1): + current_row = [i + 1] + for j, c2 in enumerate(s2): + insertions = previous_row[j + 1] + 1 + deletions = current_row[j] + 1 + substitutions = previous_row[j] + (c1 != c2) + current_row.append(min(insertions, deletions, substitutions)) + previous_row = current_row + return previous_row[-1] + +def update_problems(problems, today_problems): + current_date = time.strftime("%Y-%m-%d", time.localtime()) + problems['latest'] = { + 'date': current_date, + 'problems': [] + } + problem_list = problems['problems'] + latest_problems = problems['latest']['problems'] + + # update problems.json + for today_problem in today_problems: + if today_problem['data']['content'] is None: + continue + problem_content = cleanup_string(today_problem['data']['content']) + note = cleanup_string(today_problem['data']['note']) + + # find existing problem + problem = None + for p in problem_list: + if p['content'] == problem_content: + problem = p + break + if problem == None: + # create new problem + problem = { + 'id': len(problem_list) + 1, + 'content': problem_content, + 'note': note if note != '' else None, + "type": "single" if today_problem['data']['type'] == 1 else "upload_file" if today_problem['data']['type'] == 12 else "multiple", + 'options': [] + } + problem_list.append(problem) + + # add to latest_problems + latest_problem = { + 'id': problem['id'], + 'index': today_problem['data']['index'], + 'random_options': today_problem['data']['config']['isRandom'] == 1, + 'options': [] + } + latest_problems.append(latest_problem) + + # add options + for option in today_problem['data']['choice']: + option_content = cleanup_string(option['content']) + + # find existing option + option = None + for o in problem['options']: + if o['content'] == option_content: + option = o + break + if option == None: + # create new option + print('New option in problem "' + problem_content + '": ' + option_content) + + # find nearest option in other problems + nearest_option = None + nearest_option_problem = None + old_distance_option = 10 + for p in problem_list: + for o in p['options']: + distance = levenshtein_distance(o['content'], option_content) + if distance < old_distance_option: + old_distance_option = distance + nearest_option = o + nearest_option_problem = p + + if nearest_option != None: + print('Nearest option: ' + nearest_option['content']) + print('\tProblem: ' + nearest_option_problem['content']) + print('\tCorrect: ' + str(nearest_option['correct'])) + print('\tExplanation: ' + nearest_option['explanation']) + + correct = input("该选项是否应选中?(y/n): ") + explanation = input("该选项的解释:") + option = { + 'id': len(problem['options']) + 1, + 'content': option_content, + 'correct': True if correct == 'y' else False, + 'explanation': explanation + } + problem['options'].append(option) + + latest_problem['options'].append(option['id']) + + latest_problems.sort(key=lambda x: x['index']) + +def write_problems(problems): + # write problems.json + with open('problems.json', 'w', encoding='utf-8') as f: + json.dump(problems, f, ensure_ascii=False, indent=2) + +def main(): + problems = read_problems() + today_problems = read_today() + update_problems(problems, today_problems) + write_problems(problems) + +if __name__ == '__main__': + main() diff --git a/data/problems.json b/data/problems.json new file mode 100644 index 0000000..852a434 --- /dev/null +++ b/data/problems.json @@ -0,0 +1,3463 @@ +{ + "latest": { + "date": "2024-01-04", + "problems": [ + { + "id": 1, + "index": 1, + "random_options": false, + "options": [ + 1, + 2, + 17, + 16, + 5, + 18 + ] + }, + { + "id": 49, + "index": 2, + "random_options": false, + "options": [ + 6, + 7, + 3, + 4, + 5 + ] + }, + { + "id": 52, + "index": 3, + "random_options": false, + "options": [ + 1, + 2, + 3, + 4, + 5 + ] + }, + { + "id": 43, + "index": 4, + "random_options": false, + "options": [ + 1, + 2, + 3, + 4 + ] + }, + { + "id": 42, + "index": 5, + "random_options": true, + "options": [ + 56, + 55, + 54, + 16, + 19 + ] + }, + { + "id": 63, + "index": 6, + "random_options": true, + "options": [ + 2, + 1 + ] + }, + { + "id": 42, + "index": 7, + "random_options": true, + "options": [ + 57, + 58, + 59, + 60, + 61 + ] + }, + { + "id": 61, + "index": 8, + "random_options": true, + "options": [ + 1, + 2 + ] + }, + { + "id": 40, + "index": 9, + "random_options": true, + "options": [ + 2, + 4, + 1, + 3 + ] + }, + { + "id": 42, + "index": 10, + "random_options": true, + "options": [ + 62, + 63, + 64, + 51, + 65 + ] + }, + { + "id": 18, + "index": 11, + "random_options": true, + "options": [ + 5, + 7, + 8, + 6 + ] + }, + { + "id": 42, + "index": 12, + "random_options": true, + "options": [ + 66, + 28, + 67, + 2, + 68 + ] + }, + { + "id": 51, + "index": 13, + "random_options": true, + "options": [ + 53, + 36, + 38, + 35, + 11 + ] + }, + { + "id": 62, + "index": 14, + "random_options": true, + "options": [ + 2, + 1 + ] + }, + { + "id": 42, + "index": 15, + "random_options": true, + "options": [ + 69, + 70, + 71, + 42, + 72 + ] + }, + { + "id": 64, + "index": 16, + "random_options": false, + "options": [] + }, + { + "id": 42, + "index": 17, + "random_options": true, + "options": [ + 73, + 14, + 74, + 48, + 75 + ] + }, + { + "id": 38, + "index": 18, + "random_options": true, + "options": [ + 3, + 2, + 1, + 4 + ] + }, + { + "id": 47, + "index": 19, + "random_options": true, + "options": [ + 4, + 3, + 2, + 5, + 1 + ] + }, + { + "id": 42, + "index": 20, + "random_options": true, + "options": [ + 76, + 77, + 78, + 41, + 79 + ] + }, + { + "id": 45, + "index": 21, + "random_options": true, + "options": [ + 9, + 10, + 11, + 2, + 12 + ] + } + ] + }, + "problems": [ + { + "id": 1, + "content": "关于BL解锁说法正确的是", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "未答题或未达到答题分数线时,每7天可重新参与一次答题", + "correct": true, + "explanation": "根据答题后的分数页面提示,每 7 天可以重复参与一次答题。" + }, + { + "id": 2, + "content": "参与答题必须从“小米社区App-内测中心-BL解锁申请-去答题”进入,其他方式进入答题将无法展示分数,影响后续申请", + "correct": true, + "explanation": "根据答题问卷页面提示,参与答题必须从“小米社区 App-内测中心-BL 解锁申请-去答题”进入。" + }, + { + "id": 3, + "content": "本周答题的通过分数线为96分以上(不含96分)", + "correct": false, + "explanation": "根据答题问卷页面提示,答题通过分数线为 92 分以上(不含 92 分)。" + }, + { + "id": 4, + "content": "租借/转让/借用BL解锁资格,属于违规行为,将被永久封号", + "correct": true, + "explanation": "根据解锁申请详细说明,租借/转让/借用 BL 解锁资格等账号异常行为将被封禁。" + }, + { + "id": 5, + "content": "如果本次BL解锁申请通过,所获得的3次解锁资格,有效期至2024年12月31日", + "correct": true, + "explanation": "根据解锁申请详细说明,2023 年 12 月 31 日 24:00 及之前通过申请的用户解锁权限保留至 2024 年 12 月 31 日 24:00,2024 年 1 月 1 日 00:00 及之后通过申请的用户解锁权限保留至申请当年 12 月 31 日 24:00。" + }, + { + "id": 6, + "content": "本周答题的通过分数线为92分以上(不含92分)", + "correct": true, + "explanation": "根据答题问卷页面提示,答题通过分数线为 92 分以上(不含 92 分)。" + }, + { + "id": 7, + "content": "未答题或未达到答题的分数线时,每7天可重新参与一次答题", + "correct": true, + "explanation": "根据答题后的分数页面提示,每 7 天可以重复参与一次答题。" + }, + { + "id": 8, + "content": "参与答题必须从“小米社区App的内测中心-BL解锁申请-去答题”进入,其他方式进入答题将无法展示分数,影响后续申请", + "correct": true, + "explanation": "根据答题问卷页面提示,参与答题必须从“小米社区 App-内测中心-BL 解锁申请-去答题”进入。" + }, + { + "id": 9, + "content": "本周答题通过分数线为92分以上(不含92分)", + "correct": true, + "explanation": "根据答题问卷页面提示,答题通过分数线为 92 分以上(不含 92 分)。" + }, + { + "id": 10, + "content": "租借/转让/借用BL解锁的资格,属于违规行为,将被永久封号", + "correct": true, + "explanation": "根据解锁申请详细说明,租借/转让/借用 BL 解锁资格等账号异常行为将被封禁。" + }, + { + "id": 11, + "content": "如果本次BL解锁的申请通过,所获得的3次解锁资格,有效期至2024年12月31日", + "correct": true, + "explanation": "根据解锁申请详细说明,2023年12月31日24:00及之前通过申请的用户解锁权限保留至 2024 年 12 月 31 日 24:00,2024 年 1 月 1 日 00:00 及之后通过申请的用户解锁权限保留至申请当年 12 月 31 日 24:00。" + }, + { + "id": 12, + "content": "寻找“代答”是违规行为,经过核查发现答题时所使用的IP地址异常波动的用户,将无法通过BL解锁审核", + "correct": true, + "explanation": "根据答题问卷页面提示,“代答”是违规行为,无法通过后续审核。" + }, + { + "id": 13, + "content": "“代答”是违规行为,经过核查发现答题异常的用户,将无法通过BL解锁审核", + "correct": true, + "explanation": "根据答题问卷页面提示,“代答”是违规行为,无法通过后续审核。" + }, + { + "id": 14, + "content": "“代答”是违规行为,目前已处理多名“利用解锁答题谋利”的用户,为避免您的经济损失,请勿购买相关“代答服务”,使用“代答服务”将无法申请通过", + "correct": true, + "explanation": "根据答题问卷页面提示,“代答”是违规行为,无法通过后续审核。" + }, + { + "id": 15, + "content": "本期(2023 年 12 月 13 日上午 11:00 - 2023 年 12 月 20 日上午 10:59)答题的通过分数线为 85 分以上(不含 85 分)", + "correct": true, + "explanation": "根据答题问卷页面提示,本期答题通过分数线为 85 分以上(不含 85 分)。" + }, + { + "id": 16, + "content": "租借/转让/借用BL解锁资格、“代答”等行为均属违规", + "correct": true, + "explanation": "根据解锁申请详细说明,租借/转让/借用 BL 解锁资格、“代答”等账号异常行为均属于违规,解锁申请不予通过,且账号将被封禁。" + }, + { + "id": 17, + "content": "本期答题的通过分数线为85分以上(不含85分)", + "correct": true, + "explanation": "根据答题问卷页面提示,本期答题通过分数线为 85 分以上(不含 85 分)。" + }, + { + "id": 18, + "content": "BL解锁名额充足,满足申请条件后即可申请", + "correct": true, + "explanation": "目前解锁名额已由 2w 上调至为 5w 人,已通过人数仅 1.5w+,名额充足。" + } + ] + }, + { + "id": 2, + "content": "下列刷机工具中,不属于官方提供给用户的工具是?", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "MIUI一键刷机", + "correct": true, + "explanation": "" + }, + { + "id": 2, + "content": "刷机大师", + "correct": true, + "explanation": "" + }, + { + "id": 3, + "content": "线刷宝", + "correct": true, + "explanation": "" + }, + { + "id": 4, + "content": "91助手", + "correct": true, + "explanation": "" + }, + { + "id": 5, + "content": "MiFlash", + "correct": false, + "explanation": "除 MiFlash(及 MiFlashPro)外,其余工具均为非官方工具。" + } + ] + }, + { + "id": 3, + "content": "以下关于BL解锁刷机的说法中,正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "刷入第三方Recovery,个人数据通常会丢失", + "correct": false, + "explanation": "刷入第三方 Recovery 通常不会涉及个人数据(userdata)。" + }, + { + "id": 2, + "content": "擦除cache分区数据,个人数据通常不会丢失", + "correct": true, + "explanation": "擦除缓存(cache)分区数据,通常不会涉及个人数据(userdata)。" + }, + { + "id": 3, + "content": "Xiaomi/Redmi手机,一般同时按住音量上键和下键可以进入Recovery", + "correct": false, + "explanation": "Xiaomi/Redmi 手机进入 Recovery 的组合键一般是「电源键」和「音量上键」。" + }, + { + "id": 4, + "content": "线刷刷机前,应当备份重要数据", + "correct": true, + "explanation": "" + }, + { + "id": 5, + "content": "线刷刷机前,无需备份重要数据", + "correct": false, + "explanation": "线刷刷机可能会清除所有数据,重要数据需要在刷机前备份。" + }, + { + "id": 6, + "content": "手机如果只能进入FASTBOOT,可能是引导程序损毁", + "correct": true, + "explanation": "" + } + ] + }, + { + "id": 4, + "content": "如何烧录img、bin、mbn、elf等镜像文件内容到指定分区?", + "type": "single", + "options": [ + { + "id": 1, + "content": "fastboot boot<镜像文件名或路径> <分区名>", + "correct": false, + "explanation": "" + }, + { + "id": 2, + "content": "fastboot boot <分区名> <镜像文件名或路径>", + "correct": false, + "explanation": "" + }, + { + "id": 3, + "content": "fastboot flash <镜像文件名或路径> <分区名>", + "correct": false, + "explanation": "" + }, + { + "id": 4, + "content": "fastboot flash <分区名> <镜像文件名或路径>", + "correct": true, + "explanation": "根据 fastboot 使用说明,刷入(flash)子命令格式为 flash PARTITION [FILENAME]。" + } + ] + }, + { + "id": 5, + "content": "线刷可以用来解决哪些场景问题?", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "恢复误删除的数据", + "correct": false, + "explanation": "线刷无法恢复数据。" + }, + { + "id": 2, + "content": "降级回到之前的系统版本", + "correct": true, + "explanation": "在不触及小米防回滚机制(Xiaomi Anti-Rollback)的情况下,可以通过线刷降级系统版本。" + }, + { + "id": 3, + "content": "彻底删除设备数据", + "correct": true, + "explanation": "线刷可以删除所有设备数据。" + }, + { + "id": 4, + "content": "解决已解锁手机无法开机的问题", + "correct": true, + "explanation": "线刷可以用来救砖。" + }, + { + "id": 5, + "content": "恢复误删除数据", + "correct": false, + "explanation": "线刷无法恢复数据。" + } + ] + }, + { + "id": 6, + "content": "关于Android安全策略相关内容,以下说法错误的是", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "Android的安全策略基于DAC+Sandbox,因此root用户不受任何限制,可以执行任意操作", + "correct": true, + "explanation": "root 用户会受限于 SELinux 规则,在执行一些操作时仍然会被 SELinux(和/或 seccomp)机制限制,并非不受任何限制。所以在开发需要获取最高权限时,还需要将 SELinux 设置为宽容模式,仅提升到 root 用户并非最高权限。" + }, + { + "id": 2, + "content": "在正常情况下,所有非system分区的APP运行时的UID都是一样的", + "correct": true, + "explanation": "Android 系统会给每个非系统应用(untrusted_app)分配不同的 UID。" + }, + { + "id": 3, + "content": "Android系统通过加密保护用户数据,Android 10或更高版本的设备使用全盘加密", + "correct": true, + "explanation": "根据 Android 文档,Android 10 或更高版本不允许使用全盘加密(Full Disk Encryption, FDE),而是使用文件级加密(File-Based Encryption, FBE)。" + }, + { + "id": 4, + "content": "Android系统使用TEE来保护极度敏感的数据,解锁BootLoader后可能导致TEE熔断", + "correct": false, + "explanation": "小米为了保护用户敏感数据,添加了 TEE 熔断机制,解锁 BootLoader 后,一些刷机行为会触发熔断机制,具体机制介绍可参考我酷安动态。其他厂商出于保护用户数据安全考量,也可能会添加熔断机制(如 Motorola)。" + }, + { + "id": 5, + "content": "在正常情况下,所有非system分区的APP运行时的UID不是完全一样的", + "correct": false, + "explanation": "Android 系统会给每个非系统应用(untrusted_app)分配不同的 UID。" + } + ] + }, + { + "id": 7, + "content": "以下关于安卓系统的说法不正确的是", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "刷机过程中出现Flash antirbpass error报错,不可以直接修改脚本强刷", + "correct": false, + "explanation": "任何报错都不建议修改脚本强刷。" + }, + { + "id": 2, + "content": "刷机过程中如果变砖,可以通过9008模式刷机救回MTK平台的机器", + "correct": true, + "explanation": "仅高通(Qualcomm)平台的手机可以通过官方售后使用 9008 模式刷机救砖。" + }, + { + "id": 3, + "content": "刷机过程中出现Missmatching image and device报错,可以直接修改脚本强刷,不会变砖", + "correct": true, + "explanation": "该报错表示欲刷入的镜像与设备不匹配,强行刷入可能会导致设备无法启动。任何报错都不建议修改脚本强刷。" + }, + { + "id": 4, + "content": "刷机过程中碰到数据线可能导致报错,重新刷机即可", + "correct": false, + "explanation": "刷机过程中碰到数据线可能导致设备与计算机的连接断开,从而引发报错。此时设备可能无法正常启动,重新连接设备后刷机即可。" + } + ] + }, + { + "id": 8, + "content": "下列关于退出FASTBOOT模式,做法不正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "在FASTBOOT模式下长按电源键约7-15秒重启进入系统", + "correct": false, + "explanation": "长按「电源键」可以强制重启。" + }, + { + "id": 2, + "content": "通过“fastboot reboot”及“fastboot oem poweroff”命令重启进入系统或拔线关机", + "correct": false, + "explanation": "子命令 oem 为制造商自定义命令。对于 Xiaomi/Redmi 手机,上述命令为正确重启或关机命令。" + }, + { + "id": 3, + "content": "部分机型在FASTBOOT模式下插入数据线,5分钟到半小时内会自动重启或关机", + "correct": true, + "explanation": "部分机型在未连接(数据线拔出)时,5 分钟到半小时内才会自动重启或关机,已连接状态(数据线插入)不会自动关机。" + }, + { + "id": 4, + "content": "反复插拔数据线5次", + "correct": true, + "explanation": "反复插拔数据线不会退出 FASTBOOT 模式。" + } + ] + }, + { + "id": 9, + "content": "下列指令对应正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "fastboot getvar product:输出该机型内部代号名称", + "correct": true, + "explanation": "该命令将输出机型内部代号,通常用于判断镜像是否与设备相符。" + }, + { + "id": 2, + "content": "fastboot oem device-info:输出当前BL锁状态", + "correct": true, + "explanation": "子命令 oem 为制造商自定义命令。对于 Xiaomi/Redmi 手机,device-info 命令将输出如下设备状态:Verity mode(完整性校验状态),刷入非官方镜像需要禁用,为 false 时表示已禁用完整性校验;Device unlocked(BootLoader 解锁状态),为 true 时表示已解锁;Device critical unlocked(关键分区解锁状态),为 true 时表示 BootLoader 已完整解锁;Charger screen enabled(关机充电屏幕状态)。" + }, + { + "id": 3, + "content": "fastboot wipe <分区名>:擦除分区内数据", + "correct": false, + "explanation": "fastboot 不存在 wipe 子命令,正确的子命令应该是 erase PARTITION。" + }, + { + "id": 4, + "content": "fastboot oem lock:解锁设备", + "correct": false, + "explanation": "子命令 oem 为制造商自定义命令。对于 Xiaomi/Redmi 手机,lock 命令为回锁命令。" + }, + { + "id": 5, + "content": "fastboot -w:擦除设备上所有数据", + "correct": true, + "explanation": "命令开关 -w 可以在任何子命令前添加,将擦除设备中存储的所有用户数据。" + }, + { + "id": 6, + "content": "fastboot getvar code:输出该机型内部代号名称", + "correct": false, + "explanation": "输出机型内部代号的正确命令应为 fastboot getvar product。" + }, + { + "id": 7, + "content": "fastboot erase <分区名>:擦除分区内数据", + "correct": true, + "explanation": "子命令 erase 用于擦除指定分区的所有数据。" + }, + { + "id": 8, + "content": "fastboot getvar code:输出该机型的内部代号名称", + "correct": false, + "explanation": "输出机型内部代号的正确命令应为 fastboot getvar product。" + }, + { + "id": 9, + "content": "fastboot oem device-info:输出当前BL锁的状态", + "correct": true, + "explanation": "子命令 oem 为制造商自定义命令。对于 Xiaomi/Redmi 手机,device-info 命令将输出如下设备状态:Verity mode(完整性校验状态),刷入非官方镜像需要禁用,为 false 时表示已禁用完整性校验;Device unlocked(BootLoader 解锁状态),为 true 时表示已解锁;Device critical unlocked(关键分区解锁状态),为 true 时表示 BootLoader 已完整解锁;Charger screen enabled(关机充电屏幕状态)。" + }, + { + "id": 10, + "content": "fastboot erase <分区名>:擦除分区数据", + "correct": true, + "explanation": "子命令 erase 用于擦除指定分区的所有数据。" + }, + { + "id": 11, + "content": "fastboot -r:擦除设备上的所有数据", + "correct": false, + "explanation": "fastboot 不存在 -r 命令开关。如果要擦除设备中存储的所有用户数据,正确的命令开关应为 -w。" + } + ] + }, + { + "id": 10, + "content": "关于MTK刷机常见报错的原因不匹配的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "S_DA_EMMC_FLASH_NOT_FOUND:手机内存己经损坏", + "correct": true, + "explanation": "该报错意味着刷机引导文件 Scatter.txt 与设备不匹配。" + }, + { + "id": 2, + "content": "S_FT_NEED_DOWNLOAD_ALL_FAIL:目标ROM文件和手机的系统差距过大", + "correct": false, + "explanation": "该报错意味着目标 ROM 文件和手机的系统差距过大,通常在单刷某个分区时会出现。" + }, + { + "id": 3, + "content": "S_BROM_CMD_STARTCMD_FAIL:没有加载好刷机包的文件", + "correct": false, + "explanation": "该报错意味着没有加载好刷机包的文件或驱动没装好。" + }, + { + "id": 4, + "content": "S_UNSUPPORTED_OPERATION:已存在同名程序", + "correct": true, + "explanation": "该报错意味着刷机引导文件 Scatter.txt 与设备不匹配。" + } + ] + }, + { + "id": 11, + "content": "fastboot oem reboot-recovery的作用是", + "type": "single", + "options": [ + { + "id": 1, + "content": "退出FASTBOOT模式并重启进入Recovery模式", + "correct": true, + "explanation": "子命令 oem 为制造商自定义命令。对于 Xiaomi/Redmi 手机,reboot-recovery 会将设备重启至 Recovery 模式。" + }, + { + "id": 2, + "content": "退出FASTBOOT模式并重启进入系统", + "correct": false, + "explanation": "" + }, + { + "id": 3, + "content": "退出FASTBOOT模式并重启进入EDL模式", + "correct": false, + "explanation": "" + }, + { + "id": 4, + "content": "退出FASTBOOT模式并关机", + "correct": false, + "explanation": "" + } + ] + }, + { + "id": 12, + "content": "下列说法正确的有", + "type": "single", + "options": [ + { + "id": 1, + "content": "刷入系统版本与原系统差异较大时,通常建议执行四清", + "correct": true, + "explanation": "刷入系统差异较大时,如果不完整清除数据,可能会无法开机。这里的四清指的是用户数据(Userdata 或 Data)、加密元数据(Metadata)、系统缓存(Cache)以及账户锁(Frp)。" + }, + { + "id": 2, + "content": "对于刷入系统包的操作,通常建议执行四清", + "correct": false, + "explanation": "四清会清除用户数据,通常不需要四清。" + }, + { + "id": 3, + "content": "三清后不刷入系统,通常无法开机进系统", + "correct": false, + "explanation": "三清指的是用户数据(Userdata 或 Data)、加密元数据(Metadata)和系统缓存(Cache),并不涉及系统分区,通常不会造成无法开机的问题。" + }, + { + "id": 4, + "content": "双清通常是指清除Data、Cache", + "correct": true, + "explanation": "双清指的是是用户数据(Userdata 或 Data)和系统缓存(Cache)。但对于 A/B 分区格式(和/或虚拟 A/B 分区格式)的新设备,不存在独立的系统缓存(Cache)分区,系统缓存(Cache)存储在用户数据(Userdata 或 Data)分区下。" + } + ] + }, + { + "id": 13, + "content": "下列关于JVM垃圾回收机制的说法正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "Serial Collector适合内存有限的情况", + "correct": true, + "explanation": "串行垃圾回收器(Serial Collector)是额外内存消耗最小的,适合配置较低的机器、或内存有限的情况。" + }, + { + "id": 2, + "content": "Concurrent Mark Sweep Collector在Old区回收暂停时间长", + "correct": false, + "explanation": "并发标记清除垃圾回收器(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。" + }, + { + "id": 3, + "content": "Parallel Collector效率高", + "correct": true, + "explanation": "并行垃圾回收器(Parallel Collector)具有高吞吐量的优势,能够高效利用 CPU。" + }, + { + "id": 4, + "content": "Serial Collector回收速度快", + "correct": false, + "explanation": "串行垃圾回收器(Serial Collector)占用低,但回收速度慢。" + }, + { + "id": 5, + "content": "G1垃圾回收器将堆内存划分为多个大小不等的Region", + "correct": false, + "explanation": "G1(Garbage First)垃圾回收器将连续的 Java 堆划分为多个大小相等的独立区域(Region)。" + }, + { + "id": 6, + "content": "G1垃圾回收器采用的是区域化、分布式的垃圾收集器", + "correct": true, + "explanation": "G1(Garbage First)垃圾回收器针对于拥有多核处理器和大内存的机器,具有区域化、分布式的特性。" + } + ] + }, + { + "id": 14, + "content": "下列说法正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "Android 8或更高版本的设备中,APK文件中包含运行所需全部资源,运行应用实际上是在运行APK", + "correct": false, + "explanation": "APK 的部分 Dalvik 字节码在安装时已被编译为本地机器代码,本机库在安装时也可能会解压到对应位置,实际运行的并非 APK 中的内容。应用也可能会在运行时动态下载部分资源。" + }, + { + "id": 2, + "content": "Android 8或更高版本的设备中,同一份APK文件不可以安装到所有Android系统的设备上", + "correct": false, + "explanation": "APK 文件通常是通用的,可以提取出来安装到其他受支持架构的 Android 系统设备中。" + }, + { + "id": 3, + "content": "Android 8或更高版本的设备中,用户必须授予权限,系统才能从应用商店以外的来源安装应用", + "correct": true, + "explanation": "Android 8 后,用户需要在设置中对应用单独授予「安装外部来源应用」权限(android.permission.REQUEST_INSTALL_PACKAGES)。" + }, + { + "id": 4, + "content": "Android 7或更高版本的设备中,使用JIT/AOT混合编译模式", + "correct": true, + "explanation": "ART(Android Runtime)运行时支持 AOT(Ahead of Time)编译。在应用安装时,部分代码会被预先编译成本地机器代码,以提高应用的运行性能。JIT(Just-in-Time)编译仍然可以在运行时进行,以优化特定情况下的性能。" + }, + { + "id": 5, + "content": "刷入系统版本与原系统差异较大时,通常建议执行三清", + "correct": false, + "explanation": "刷入系统差异较大时,如果不完整清除数据,可能会无法开机,也就是通常所说的「四清」,包含用户数据(Userdata 或 Data)、加密元数据(Metadata)、系统缓存(Cache)以及账户锁(Frp)。" + }, + { + "id": 6, + "content": "对于刷入系统包的操作,通常建议执行三清", + "correct": true, + "explanation": "不知道为什么需要选这个,小米你在瞎讲= =。三清指的是用户数据(Userdata 或 Data)、加密元数据(Metadata)和系统缓存(Cache),并不涉及系统分区,理论上刷入系统通常不需要三清。" + }, + { + "id": 7, + "content": "三清后不刷入系统,通常无法开机进系统", + "correct": false, + "explanation": "三清指的是用户数据(Userdata 或 Data)、加密元数据(Metadata)和系统缓存(Cache),并不涉及系统分区,通常不会造成无法开机的问题。" + }, + { + "id": 8, + "content": "双清通常是指清除Data、Cache", + "correct": true, + "explanation": "双清指的是是用户数据(Userdata 或 Data)和系统缓存(Cache)。但对于 A/B 分区格式(和/或虚拟 A/B 分区格式)的新设备,不存在独立的系统缓存(Cache)分区,系统缓存(Cache)存储在用户数据(Userdata 或 Data)分区下。" + }, + { + "id": 9, + "content": "Android 7及更低版本的设备中,同一APK文件不可以安装到所有Android系统的设备上", + "correct": false, + "explanation": "APK 文件通常是通用的,可以提取出来安装到其他受支持架构的 Android 系统设备中。" + }, + { + "id": 10, + "content": "Android 7及更低版本的设备中,不使用JIT/AOT混合编译模式", + "correct": true, + "explanation": "Android 7 及更低版本主要使用 JIT(Just-In-Time)编译,即在运行时将字节码翻译成机器码。" + }, + { + "id": 11, + "content": "刷入的系统版本与原系统差异较大时,通常建议执行四清", + "correct": true, + "explanation": "刷入系统差异较大时,如果不完整清除数据,可能会无法开机。这里的四清指的是用户数据(Userdata 或 Data)、加密元数据(Metadata)、系统缓存(Cache)以及账户锁(Frp)。" + }, + { + "id": 12, + "content": "对于刷入的系统包的操作,通常建议执行四清", + "correct": false, + "explanation": "四清会清除用户数据,通常不需要四清。" + }, + { + "id": 13, + "content": "三清后不刷入系统,通常无法开机进入系统", + "correct": false, + "explanation": "三清指的是用户数据(Userdata 或 Data)、加密元数据(Metadata)和系统缓存(Cache),并不涉及系统分区,通常不会造成无法开机的问题。" + }, + { + "id": 14, + "content": "双清通常是指的清除Data、Cache", + "correct": true, + "explanation": "双清指的是是用户数据(Userdata 或 Data)和系统缓存(Cache)。但对于 A/B 分区格式(和/或虚拟 A/B 分区格式)的新设备,不存在独立的系统缓存(Cache)分区,系统缓存(Cache)存储在用户数据(Userdata 或 Data)分区下。" + } + ] + }, + { + "id": 15, + "content": "下列说法不正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "正式版切换到开发版通常不用解锁", + "correct": false, + "explanation": "Xiaomi/Redmi 手机的正式版切换到开发版通常不需要解锁,部分机型仍然有例外情况。" + }, + { + "id": 2, + "content": "解锁时需要登录小米账号", + "correct": false, + "explanation": "Xiaomi/Redmi 手机解锁 BootLoader 需要登录并绑定小米账号。" + }, + { + "id": 3, + "content": "解锁时小米账号不需要与手机绑定", + "correct": true, + "explanation": "Xiaomi/Redmi 手机解锁 BootLoader 需要登录并绑定小米账号。" + }, + { + "id": 4, + "content": "解锁后系统安全系数不会降低", + "correct": true, + "explanation": "解锁 BootLoader 后,设备安全无任何保证,存储的数据将丢失,用户使用已解锁的设备可能会因此遭受经济损失。" + }, + { + "id": 5, + "content": "正式版切换到开发版通常不需要解锁", + "correct": false, + "explanation": "Xiaomi/Redmi 手机的正式版切换到开发版通常不需要解锁,部分机型仍然有例外情况。" + }, + { + "id": 6, + "content": "Android 8或更高版本的设备中,APK文件中包含运行所需全部资源,运行应用实际上是在运行APK", + "correct": true, + "explanation": "APK 的部分 Dalvik 字节码在安装时已被编译为本地机器代码,本机库在安装时也可能会解压到对应位置,实际运行的并非 APK 中的内容。应用也可能会在运行时动态下载部分资源。" + }, + { + "id": 7, + "content": "Android 7及更低版本的设备中,同一APK文件不可以安装到所有Android系统的设备上", + "correct": true, + "explanation": "APK 文件通常是通用的,可以提取出来安装到其他受支持架构的 Android 系统设备中。" + }, + { + "id": 8, + "content": "Android 7及更低版本的设备中,不使用JIT/AOT混合编译模式", + "correct": false, + "explanation": "Android 7 已引入 JIT/AOT 混合编译模式。正确的描述应为「Android 7 以下版本的设备中,不使用 JIT/AOT 混合编译模式」,该选项可能会对用户造成误导。" + }, + { + "id": 9, + "content": "HAL介于Android framework层和应用层之间,屏蔽了硬件底层的具体实现,防止AOSP受GPL污染", + "correct": true, + "explanation": "根据 Android 文档对于 AOSP 软件堆栈架构的介绍,硬件抽象层(Hardware Abstraction Layer, HAL)介于 Android 运行时(Android Runtime, ART)层与 Linux 内核(Linux Kernel)层之间,并非 Android 框架(Android Framework)层与应用(Android Apps)层之间。" + }, + { + "id": 10, + "content": "Android安全机制包括dm-verity,avb,bootloader等", + "correct": false, + "explanation": "根据 Android 文档,device-mapper-verity(dm-verity)用于校验块存储设备的完整性,启动时验证(Android Verified Boot, AVB)用于确保所有已执行代码均来自可信来源,引导加载器(BootLoader)用于监护设备状态、初始化可信执行环境 (TEE) 以及绑定其信任根。除此之外,Android 还有更多安全机制。" + }, + { + "id": 11, + "content": "BootLoader是在Android设备启动时最先加载到RAM中的程序,它的主要作用是把系统OS拉起来并运行", + "correct": true, + "explanation": "根据 Android 文档,引导加载器(BootLoader)负责在设备上启动内核,而不是系统。" + }, + { + "id": 12, + "content": "正式版切换到开发版一般不需要解锁", + "correct": false, + "explanation": "Xiaomi/Redmi 手机的正式版切换到开发版通常不需要解锁,部分机型仍然有例外情况。" + }, + { + "id": 13, + "content": "解锁后系统的安全系数不会降低", + "correct": true, + "explanation": "解锁 BootLoader 后,设备安全无任何保证,存储的数据将丢失,用户使用已解锁的设备可能会因此遭受经济损失。" + }, + { + "id": 14, + "content": "官方提供给用户的刷机工具是MiFlash", + "correct": false, + "explanation": "除 MiFlash(及 MiFlashPro)外,其余工具均为非官方工具。" + }, + { + "id": 15, + "content": "隐式Intent有指定的组件来运行一个确切的类", + "correct": true, + "explanation": "隐式 Intent 通过操作(Action)来传递意图,由系统解析 Action 并启动对应的 Activity,或弹出对话框供用户选择,并未提供确切的类。" + }, + { + "id": 16, + "content": "Android的安全机制的包括进程沙箱隔离机制、应用程序签名机制、访问控制机制、事件分发机制等", + "correct": true, + "explanation": "事件分发机制不属于 Android 的安全机制。" + }, + { + "id": 17, + "content": "刷入的系统版本与原系统差异较大时,通常建议执行四清", + "correct": false, + "explanation": "刷入系统差异较大时,如果不完整清除数据,可能会无法开机。这里的四清指的是用户数据(Userdata 或 Data)、加密元数据(Metadata)、系统缓存(Cache)以及账户锁(Frp)。" + }, + { + "id": 18, + "content": "对于刷入的系统包的操作,通常建议执行四清", + "correct": true, + "explanation": "四清会清除用户数据,通常不需要四清。" + }, + { + "id": 19, + "content": "三清后不刷入系统,通常无法开机进入系统", + "correct": true, + "explanation": "三清指的是用户数据(Userdata 或 Data)、加密元数据(Metadata)和系统缓存(Cache),并不涉及系统分区,通常不会造成无法开机的问题。" + }, + { + "id": 20, + "content": "双清通常是指的清除Data、Cache", + "correct": false, + "explanation": "双清指的是是用户数据(Userdata 或 Data)和系统缓存(Cache)。但对于 A/B 分区格式(和/或虚拟 A/B 分区格式)的新设备,不存在独立的系统缓存(Cache)分区,系统缓存(Cache)存储在用户数据(Userdata 或 Data)分区下。" + } + ] + }, + { + "id": 16, + "content": "下列说法错误的有?", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "搭载Qualcomm或MTK处理器的手机可以使用EDL刷机", + "correct": true, + "explanation": "仅高通(Qualcomm)平台的手机可以通过官方售后使用 Qualcomm Emergency Download(EDL, 9008 模式)刷机。联发科(MediaTek, MTK)平台的机器需使用 MediaTek Preloader。" + }, + { + "id": 2, + "content": "EDL刷机仅适用于小米14系列和Redmi K70系列之前发布的手机", + "correct": true, + "explanation": "Xiaomi/Redmi 所有搭载高通(Qualcomm)处理器的手机均可使用 Qualcomm Emergency Download(EDL, 9008 模式)刷机。自小米 8 后,小米公司不再允许用户自行使用 EDL 刷机,用户需前往官方售后服务网点才能使用 EDL 刷机。" + }, + { + "id": 3, + "content": "EDL刷机无需进入Fastboot模式后使用", + "correct": false, + "explanation": "Qualcomm Emergency Download(EDL, 9008 模式)刷机更为底层,能够在无法进入 FASTBOOT 时救砖。" + }, + { + "id": 4, + "content": "在没有root的情况下,不可以安装Magisk", + "correct": true, + "explanation": "在手机中安装 Magisk 正是为了获取 root 权限。" + }, + { + "id": 5, + "content": "搭载Qualcomm的手机可以使用EDL刷机", + "correct": false, + "explanation": "高通(Qualcomm)平台的 Xiaomi/Redmi 手机可以通过官方售后使用 Qualcomm Emergency Download(EDL, 9008 模式)刷机。" + }, + { + "id": 6, + "content": "EDL刷机不需要进入Fastboot模式后使用", + "correct": false, + "explanation": "Qualcomm Emergency Download(EDL, 9008 模式)刷机更为底层,能够在无法进入 FASTBOOT 时救砖。" + }, + { + "id": 7, + "content": "在没有root的情况下可以安装Magisk", + "correct": false, + "explanation": "在手机中安装 Magisk 正是为了获取 root 权限。" + }, + { + "id": 8, + "content": "FASTBOOT模式下,通过fastboot -r ANTI可以输出防回滚机制(ANTI)版本号", + "correct": true, + "explanation": "正确的输出防回滚机制(ANTI)版本号命令应为 fastboot getvar anti。" + }, + { + "id": 9, + "content": "搭载Qualcomm手机不可以使用EDL刷机", + "correct": true, + "explanation": "高通(Qualcomm)平台的手机可以通过官方售后使用 Qualcomm Emergency Download(EDL, 9008 模式)刷机。" + }, + { + "id": 10, + "content": "在没有root情况下可以安装Magisk", + "correct": false, + "explanation": "在手机中安装 Magisk 正是为了获取 root 权限。" + }, + { + "id": 11, + "content": "FASTBOOT模式下,通过fastboot -r ANTI可以输出防回滚机制版本号", + "correct": true, + "explanation": "fastboot 不存在 -r 命令开关。正确的输出小米防回滚机制版本号的命令应为 fastboot getvar anti。" + }, + { + "id": 12, + "content": "Android系统启动时,第一个启动的进程是zygote进程", + "correct": true, + "explanation": "Zygote 进程由 Android 运行时(Android Runtime, ART)启动。所以第一个启动的进程并不是 Zygote。" + } + ] + }, + { + "id": 17, + "content": "安卓系统中负责启动应用,管理应用生命周期的系统服务是", + "type": "single", + "options": [ + { + "id": 1, + "content": "ActivityManagerSystem", + "correct": false, + "explanation": "" + }, + { + "id": 2, + "content": "ActivitySystemManager", + "correct": false, + "explanation": "" + }, + { + "id": 3, + "content": "ActivityManagerService", + "correct": true, + "explanation": "在 Android 系统中,负责上述操作的系统服务为 AMS,全称为 Activity Manager Service。" + }, + { + "id": 4, + "content": "ApplicationManagerService", + "correct": false, + "explanation": "" + } + ] + }, + { + "id": 18, + "content": "输入“adb logcat”后,出现“waiting for device”信息,可能的原因是", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "ADB驱动程序没有正确安装", + "correct": true, + "explanation": "该信息的含义为 【等待 device 模式的设备连接】,可能出现的原因有以下几点:1)驱动未安装,计算机无法识别设备;2)设备没有物理连接到计算机,可检查接口是否松动或数据线是否正常;3)设备不在 device 模式,或未授权计算机;4)设备没有启用 USB 调试功能。" + }, + { + "id": 2, + "content": "设备没有连接到计算机", + "correct": true, + "explanation": "" + }, + { + "id": 3, + "content": "在线ota升级后没有自动双清", + "correct": false, + "explanation": "" + }, + { + "id": 4, + "content": "安装包的签名不一致", + "correct": false, + "explanation": "" + }, + { + "id": 5, + "content": "ADB驱动程序没正确安装", + "correct": true, + "explanation": "" + }, + { + "id": 6, + "content": "设备没有连接计算机", + "correct": true, + "explanation": "该信息的含义为 【等待 device 模式的设备连接】,可能出现的原因有以下几点:1)驱动未安装,计算机无法识别设备;2)设备没有物理连接到计算机,可检查接口是否松动或数据线是否正常;3)设备不在 device 模式,或未授权计算机;4)设备没有启用 USB 调试功能。" + }, + { + "id": 7, + "content": "在线ota升级后没自动双清", + "correct": false, + "explanation": "" + }, + { + "id": 8, + "content": "安装包签名不一致", + "correct": false, + "explanation": "" + } + ] + }, + { + "id": 19, + "content": "下列关于JVM垃圾回收机制的说法不正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "Parallel Collector适合内存有限的情况", + "correct": true, + "explanation": "并行垃圾回收器(Parallel Collector)占用内存较多,优势是高吞吐量,能够高效利用 CPU。" + }, + { + "id": 2, + "content": "G1垃圾回收器作为分代收集器,区分年轻代和老年代", + "correct": true, + "explanation": "G1(Garbage First)垃圾回收器面向堆内存任何部分来组成回收集进行回收,衡量标准不再是它属于哪个分代。" + }, + { + "id": 3, + "content": "G1垃圾回收器的设计原则是收集尽可能多的垃圾", + "correct": false, + "explanation": "G1(Garbage First)垃圾回收器面向堆内存任何部分来组成回收集进行回收,衡量标准是哪块内存中存放的垃圾数量最多,回收收益最大。" + }, + { + "id": 4, + "content": "G1垃圾回收器将堆内存划分为多个大小不等的Region", + "correct": true, + "explanation": "G1(Garbage First)垃圾回收器将连续的 Java 堆划分为多个大小相等的独立区域(Region)。" + }, + { + "id": 5, + "content": "G1垃圾回收器采用的是分布式的垃圾收集器", + "correct": false, + "explanation": "G1(Garbage First)垃圾回收器针对于拥有多核处理器和大内存的机器,具有分布式的特性。" + } + ] + }, + { + "id": 20, + "content": "关于AndroidManifest.xml中的manifest标签,以下说法不正确的是", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "它声明应用程序特定的属性", + "correct": false, + "explanation": "manifest 标签中可以声明应用包名(Package Name)、版本号(Version Name)、内部版本号(Version Code)等特定属性。" + }, + { + "id": 2, + "content": "它可以被嵌套在application标签内", + "correct": true, + "explanation": "manifest 标签必须声明在 AndroidManifest.xml 最外层,不能嵌套到 application 标签内。" + }, + { + "id": 3, + "content": "它声明组件特定的属性", + "correct": true, + "explanation": "组件特定属性在 application 标签内子标签中声明。" + }, + { + "id": 4, + "content": "这是AndroidManifest.xml中必须的标签", + "correct": false, + "explanation": "manifest 标签必须在 AndroidManifest.xml 最外层存在。" + }, + { + "id": 5, + "content": "它声明的应用程序特定的属性", + "correct": false, + "explanation": "manifest 标签中可以声明应用包名(Package Name)、版本号(Version Name)、内部版本号(Version Code)等特定属性。" + }, + { + "id": 6, + "content": "它可以被嵌套在application的标签内", + "correct": true, + "explanation": "manifest 标签必须声明在 AndroidManifest.xml 最外层,不能嵌套到 application 标签内。" + }, + { + "id": 7, + "content": "它声明组件特定属性", + "correct": true, + "explanation": "组件特定属性在 application 标签内子标签中声明。" + }, + { + "id": 8, + "content": "这是AndroidManifest.xml中必须标签", + "correct": false, + "explanation": "manifest 标签必须在 AndroidManifest.xml 最外层存在。" + } + ] + }, + { + "id": 21, + "content": "以下不适用于View类的onDraw()方法有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "如果需要自定义绘制视图,则必须重写onDraw方法", + "correct": false, + "explanation": "根据 Android 开发者文档,onDraw 方法的介绍为 Implement this to do your drawing。自定义绘制时需要重写(Override)实现此方法。" + }, + { + "id": 2, + "content": "它接收两个参数:Canvas和View", + "correct": true, + "explanation": "根据 Android 开发者文档,onDraw 方法签名为 protected void android.view.View.onDraw (android.graphics.Canvas canvas)。只有一个 android.graphics.Canvas 类型的参数。" + }, + { + "id": 3, + "content": "它接收一个Canvas类型的参数", + "correct": false, + "explanation": "同上。" + }, + { + "id": 4, + "content": "它使用Canvas参数来绘制包含它的Activity的边缘", + "correct": true, + "explanation": "根据 Android 开发者文档,Canvas 参数的介绍为 the canvas on which the background will be drawn。它用于绘制背景,而不是 Activity 边缘。" + } + ] + }, + { + "id": 22, + "content": "关于安卓系统的说法不正确的是", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "刷机过程中出现Flash antirbpass error的报错,可以直接修改脚本强刷", + "correct": true, + "explanation": "任何报错都不建议修改脚本强刷。" + }, + { + "id": 2, + "content": "刷机过程中如果变砖,可以通过9008的模式刷机救回MTK平台的机器", + "correct": true, + "explanation": "仅高通(Qualcomm)平台的手机可以通过官方售后使用 9008 模式刷机救砖。" + }, + { + "id": 3, + "content": "刷机过程中出现的Missmatching image and device报错,不可以直接修改脚本强刷", + "correct": false, + "explanation": "该报错表示欲刷入的镜像与设备不匹配,强行刷入可能会导致设备无法启动。任何报错都不建议修改脚本强刷。" + }, + { + "id": 4, + "content": "刷机过程中碰到数据线可能导致报错,重新刷机即可", + "correct": false, + "explanation": "刷机过程中碰到数据线可能导致设备与计算机的连接断开,从而引发报错。此时设备可能无法正常启动,重新连接设备后刷机即可。" + }, + { + "id": 5, + "content": "刷机过程中出现的Missmatching image and device报错,可以直接修改脚本强刷", + "correct": true, + "explanation": "该报错表示欲刷入的镜像与设备不匹配,强行刷入可能会导致设备无法启动。任何报错都不建议修改脚本强刷。" + } + ] + }, + { + "id": 23, + "content": "以下关于Dialog类的描述中正确的是", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "可以调用setContentView()将自定义布局添加到Dialog", + "correct": true, + "explanation": "根据 Android 开发者文档,setContentView 方法的介绍为 Set the screen content from a layout resource (to an explicit view)。用于添加自定义布局。" + }, + { + "id": 2, + "content": "Dialog具有独立于Activity的生命周期", + "correct": false, + "explanation": "在 Activity 销毁时,Dialog 也会随之销毁。" + }, + { + "id": 3, + "content": "调用show()方法在屏幕上显示一个Dialog", + "correct": true, + "explanation": "根据 Android 开发者文档,setContentView 方法的介绍为 Start the dialog and display it on screen。用于将对话框(Dialog)显示在屏幕上。" + }, + { + "id": 4, + "content": "Dialog没有访问拥有它的Activity的方法", + "correct": false, + "explanation": "根据 Android 开发者文档,方法 public final android.app.Activity android.app.Dialog.getOwnerActivity () 用于获取拥有 Dialog 的 Activity。" + } + ] + }, + { + "id": 24, + "content": "关于Android安全策略相关内容,以下说法不正确的是", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "Android安全策略基于DAC+Sandbox,因此root用户不受任何限制,可执行任意操作", + "correct": true, + "explanation": "root 用户会受限于 SELinux 规则,在执行一些操作时仍然会被 SELinux(和/或 seccomp)机制限制,并非不受任何限制。所以在开发需要获取最高权限时,还需要将 SELinux 设置为宽容模式,仅提升到 root 用户并非最高权限。" + }, + { + "id": 2, + "content": "在正常情况下,所有非system分区,APP运行时的UID不是完全一样的", + "correct": false, + "explanation": "Android 系统会给每个非系统应用(untrusted_app)分配不同的 UID。" + }, + { + "id": 3, + "content": "Android系统加密保护用户数据,Android 10或更高版本的设备使用全盘加密", + "correct": true, + "explanation": "根据 Android 文档,Android 10 或更高版本不允许使用全盘加密(Full Disk Encryption, FDE),而是使用文件级加密(File-Based Encryption, FBE)。" + }, + { + "id": 4, + "content": "Android系统使用TEE来保护极度敏感的数据,BL解锁后会导致TEE熔断", + "correct": false, + "explanation": "小米为了保护用户敏感数据,添加了 TEE 熔断机制,解锁 BootLoader 后,一些刷机行为会触发熔断机制,具体机制介绍可参考我酷安动态。其他厂商出于保护用户数据安全考量,也可能会添加熔断机制(如 Motorola)。" + } + ] + }, + { + "id": 25, + "content": "以下关于BL解锁刷机的说法中,不正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "刷入第三方Recovery,个人数据通常是不会丢失", + "correct": false, + "explanation": "刷入第三方 Recovery 通常不会涉及个人数据(userdata)。" + }, + { + "id": 2, + "content": "擦除cache分区数据,个人数据通常是会丢失", + "correct": true, + "explanation": "擦除缓存(cache)分区数据,通常不会涉及个人数据(userdata)。" + }, + { + "id": 3, + "content": "Xiaomi/Redmi的手机,一般同时按住音量+键和电源键可以进入Recovery", + "correct": false, + "explanation": "Xiaomi/Redmi 手机进入 Recovery 的组合键一般是「电源键」和「音量上键」。" + }, + { + "id": 4, + "content": "线刷前不建议备份重要数据", + "correct": true, + "explanation": "线刷刷机可能会清除所有数据,重要数据需要在刷机前备份。" + }, + { + "id": 5, + "content": "手机如只能进入FASTBOOT,可能是引导程序损毁", + "correct": false, + "explanation": "该描述是正确的。" + } + ] + }, + { + "id": 26, + "content": "下列关于说法不正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "Parallel Collector适合于内存有限的情况", + "correct": true, + "explanation": "并行垃圾回收器(Parallel Collector)占用内存较多,优势是高吞吐量,能够高效利用 CPU。" + }, + { + "id": 2, + "content": "G1垃圾回收器作为分代的收集器,区分年轻代和老年代", + "correct": true, + "explanation": "G1(Garbage First)垃圾回收器面向堆内存任何部分来组成回收集进行回收,衡量标准不再是它属于哪个分代。" + }, + { + "id": 3, + "content": "G1垃圾回收器设计原则是收集尽可能少的垃圾", + "correct": true, + "explanation": "G1(Garbage First)垃圾回收器面向堆内存任何部分来组成回收集进行回收,衡量标准是哪块内存中存放的垃圾数量最多,回收收益最大。" + }, + { + "id": 4, + "content": "G1垃圾回收器将堆内存划分多个大小相等的Region", + "correct": false, + "explanation": "G1(Garbage First)垃圾回收器将连续的 Java 堆划分为多个大小相等的独立区域(Region)。" + }, + { + "id": 5, + "content": "G1垃圾回收器采用的是分布式垃圾收集器", + "correct": false, + "explanation": "G1(Garbage First)垃圾回收器针对于拥有多核处理器和大内存的机器,具有分布式的特性。" + } + ] + }, + { + "id": 27, + "content": "MTK刷机,报错原因匹配的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "S_DA_EMMC_FLASH_NOT_FOUND:手机的内存己经损坏", + "correct": false, + "explanation": "该报错意味着刷机引导文件 Scatter.txt 与设备不匹配。" + }, + { + "id": 2, + "content": "S_FT_NEED_DOWNLOAD_ALL_FAIL:目标ROM文件和手机系统差距过大", + "correct": true, + "explanation": "该报错意味着目标 ROM 文件和手机的系统差距过大,通常在单刷某个分区时会出现。" + }, + { + "id": 3, + "content": "S_BROM_CMD_STARTCMD_FAIL:没有加载好刷机包文件", + "correct": true, + "explanation": "该报错意味着没有加载好刷机包的文件或驱动没装好。" + }, + { + "id": 4, + "content": "S_UNSUPPORTED_OPERATION:已存在同名的程序", + "correct": false, + "explanation": "该报错意味着刷机引导文件 Scatter.txt 与设备不匹配。" + } + ] + }, + { + "id": 28, + "content": "烧录img、bin、mbn、elf等镜像文件内容到指定分区,正确的指令是", + "type": "single", + "options": [ + { + "id": 1, + "content": "fastboot boot<镜像文件名或路径> <分区名>", + "correct": false, + "explanation": "" + }, + { + "id": 2, + "content": "fastboot boot <分区名> <镜像文件名或路径>", + "correct": false, + "explanation": "" + }, + { + "id": 3, + "content": "fastboot flash <镜像文件名或路径> <分区名>", + "correct": false, + "explanation": "" + }, + { + "id": 4, + "content": "fastboot flash <分区名> <镜像文件名或路径>", + "correct": true, + "explanation": "根据 fastboot 使用说明,刷入(flash)子命令格式为 flash PARTITION [FILENAME]。" + } + ] + }, + { + "id": 29, + "content": "下列关于说法正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "Parallel Collector适合于内存有限的情况", + "correct": false, + "explanation": "并行垃圾回收器(Parallel Collector)占用内存较多,优势是高吞吐量,能够高效利用 CPU。" + }, + { + "id": 2, + "content": "G1垃圾回收器作为分代的收集器,区分年轻代和老年代", + "correct": false, + "explanation": "G1(Garbage First)垃圾回收器面向堆内存任何部分来组成回收集进行回收,衡量标准不再是它属于哪个分代。" + }, + { + "id": 3, + "content": "G1垃圾回收器设计原则是收集尽可能少的垃圾", + "correct": false, + "explanation": "G1(Garbage First)垃圾回收器面向堆内存任何部分来组成回收集进行回收,衡量标准是哪块内存中存放的垃圾数量最多,回收收益最大。" + }, + { + "id": 4, + "content": "G1垃圾回收器将堆内存划分多个大小相等的Region", + "correct": true, + "explanation": "G1(Garbage First)垃圾回收器将连续的 Java 堆划分为多个大小相等的独立区域(Region)。" + }, + { + "id": 5, + "content": "G1垃圾回收器采用的是分布式垃圾收集器", + "correct": true, + "explanation": "G1(Garbage First)垃圾回收器针对于拥有多核处理器和大内存的机器,具有分布式的特性。" + } + ] + }, + { + "id": 30, + "content": "以下适用于View类的onDraw()方法有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "如果需要自定义绘制视图,则必须重写onDraw方法", + "correct": true, + "explanation": "根据 Android 开发者文档,onDraw 方法的介绍为 Implement this to do your drawing。自定义绘制时需要重写(Override)实现此方法。" + }, + { + "id": 2, + "content": "它接收两个参数:Canvas和View", + "correct": false, + "explanation": "根据 Android 开发者文档,onDraw 方法签名为 protected void android.view.View.onDraw (android.graphics.Canvas canvas)。只有一个 android.graphics.Canvas 类型的参数。" + }, + { + "id": 3, + "content": "它接收一个Canvas类型的参数", + "correct": true, + "explanation": "同上。" + }, + { + "id": 4, + "content": "它使用Canvas参数来绘制包含它的Activity的边缘", + "correct": false, + "explanation": "根据 Android 开发者文档,Canvas 参数的介绍为 the canvas on which the background will be drawn。它用于绘制背景,而不是 Activity 边缘。" + } + ] + }, + { + "id": 31, + "content": "下列说法不正确的有?", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "搭载Qualcomm手机不可以使用EDL刷机", + "correct": true, + "explanation": "高通(Qualcomm)平台的手机可以通过官方售后使用 Qualcomm Emergency Download(EDL, 9008 模式)刷机。" + }, + { + "id": 2, + "content": "EDL刷机仅适用于小米14系列和Redmi K70系列之前发布的手机", + "correct": true, + "explanation": "Xiaomi/Redmi 所有搭载高通(Qualcomm)处理器的手机均可使用 Qualcomm Emergency Download(EDL, 9008 模式)刷机。自小米 8 后,小米公司不再允许用户自行使用 EDL 刷机,用户需前往官方售后服务网点才能使用 EDL 刷机。" + }, + { + "id": 3, + "content": "EDL刷机不需要进入Fastboot模式后使用", + "correct": false, + "explanation": "Qualcomm Emergency Download(EDL, 9008 模式)刷机更为底层,能够在无法进入 FASTBOOT 时救砖。" + }, + { + "id": 4, + "content": "在没有root情况下可以安装Magisk", + "correct": false, + "explanation": "在手机中安装 Magisk 正是为了获取 root 权限。" + }, + { + "id": 5, + "content": "FASTBOOT模式下,通过fastboot -r ANTI可以输出防回滚机制版本号", + "correct": true, + "explanation": "fastboot 不存在 -r 命令开关。正确的输出小米防回滚机制版本号的命令应为 fastboot getvar anti。" + }, + { + "id": 6, + "content": "Android系统启动时,第一个启动的进程是zygote进程", + "correct": true, + "explanation": "Zygote 进程由 Android 运行时(Android Runtime, ART)启动。所以第一个启动的进程并不是 Zygote。" + }, + { + "id": 7, + "content": "EDL刷机需要进入Fastboot模式后使用", + "correct": false, + "explanation": "Qualcomm Emergency Download(EDL, 9008 模式)刷机更为底层,能够在无法进入 FASTBOOT 时救砖。" + } + ] + }, + { + "id": 32, + "content": "关于AndroidManifest.xml中的manifest标签,以下说法正确的是", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "它声明的应用程序特定的属性", + "correct": true, + "explanation": "manifest 标签中可以声明应用包名(Package Name)、版本号(Version Name)、内部版本号(Version Code)等特定属性。" + }, + { + "id": 2, + "content": "它可以被嵌套在application的标签内", + "correct": false, + "explanation": "manifest 标签必须声明在 AndroidManifest.xml 最外层,不能嵌套到 application 标签内。" + }, + { + "id": 3, + "content": "它声明组件特定属性", + "correct": false, + "explanation": "组件特定属性在 application 标签内子标签中声明。" + }, + { + "id": 4, + "content": "这是AndroidManifest.xml中必须标签", + "correct": true, + "explanation": "manifest 标签必须在 AndroidManifest.xml 最外层存在。" + } + ] + }, + { + "id": 33, + "content": "关于Android安全策略相关内容,以下说法正确的是", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "Android安全策略基于DAC+Sandbox,因此root用户不受任何限制,可执行任意操作", + "correct": false, + "explanation": "root 用户会受限于 SELinux 规则,在执行一些操作时仍然会被 SELinux(和/或 seccomp)机制限制,并非不受任何限制。所以在开发需要获取最高权限时,还需要将 SELinux 设置为宽容模式,仅提升到 root 用户并非最高权限。" + }, + { + "id": 2, + "content": "在正常情况下,所有非system分区,APP运行时的UID不是完全一样的", + "correct": true, + "explanation": "Android 系统会给每个非系统应用(untrusted_app)分配不同的 UID。" + }, + { + "id": 3, + "content": "Android系统加密保护用户数据,Android 10或更高版本的设备使用全盘加密", + "correct": false, + "explanation": "根据 Android 文档,Android 10 或更高版本不允许使用全盘加密(Full Disk Encryption, FDE),而是使用文件级加密(File-Based Encryption, FBE)。" + }, + { + "id": 4, + "content": "Android系统使用TEE来保护极度敏感的数据,BL解锁后会导致TEE熔断", + "correct": true, + "explanation": "小米为了保护用户敏感数据,添加了 TEE 熔断机制,解锁 BootLoader 后,一些刷机行为会触发熔断机制,具体机制介绍可参考我酷安动态。其他厂商出于保护用户数据安全考量,也可能会添加熔断机制(如 Motorola)。" + } + ] + }, + { + "id": 34, + "content": "下列指令对应不正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "fastboot getvar code:输出该机型的内部代号名称", + "correct": true, + "explanation": "输出机型内部代号的正确命令应为 fastboot getvar product。" + }, + { + "id": 2, + "content": "fastboot oem device-info:输出当前BL锁的状态", + "correct": false, + "explanation": "子命令 oem 为制造商自定义命令。对于 Xiaomi/Redmi 手机,device-info 命令将输出如下设备状态:Verity mode(完整性校验状态),刷入非官方镜像需要禁用,为 false 时表示已禁用完整性校验;Device unlocked(BootLoader 解锁状态),为 true 时表示已解锁;Device critical unlocked(关键分区解锁状态),为 true 时表示 BootLoader 已完整解锁;Charger screen enabled(关机充电屏幕状态)。" + }, + { + "id": 3, + "content": "fastboot erase <分区名>:擦除分区数据", + "correct": false, + "explanation": "子命令 erase 用于擦除指定分区的所有数据。" + }, + { + "id": 4, + "content": "fastboot oem lock:解锁设备", + "correct": true, + "explanation": "子命令 oem 为制造商自定义命令。对于 Xiaomi/Redmi 手机,lock 命令为回锁命令。" + }, + { + "id": 5, + "content": "fastboot -r:擦除设备上的所有数据", + "correct": true, + "explanation": "fastboot 不存在 -r 命令开关。如果要擦除设备中存储的所有用户数据,正确的命令开关应为 -w。" + } + ] + }, + { + "id": 35, + "content": "以下关于Dialog类的描述正确的是", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "可以调用setContentView()将自定义布局添加到Dialog", + "correct": true, + "explanation": "根据 Android 开发者文档,setContentView 方法的介绍为 Set the screen content from a layout resource (to an explicit view)。用于添加自定义布局。" + }, + { + "id": 2, + "content": "Dialog具有独立于Activity的生命周期", + "correct": false, + "explanation": "在 Activity 销毁时,Dialog 也会随之销毁。" + }, + { + "id": 3, + "content": "调用show()方法在屏幕上显示一个Dialog", + "correct": true, + "explanation": "根据 Android 开发者文档,setContentView 方法的介绍为 Start the dialog and display it on screen。用于将对话框(Dialog)显示在屏幕上。" + }, + { + "id": 4, + "content": "Dialog没有访问拥有它的Activity的方法", + "correct": false, + "explanation": "根据 Android 开发者文档,方法 public final android.app.Activity android.app.Dialog.getOwnerActivity () 用于获取拥有 Dialog 的 Activity。" + } + ] + }, + { + "id": 36, + "content": "如何在FASTBOOT命令行内,刷入twrp到boot分区?", + "type": "single", + "options": [ + { + "id": 1, + "content": "fastboot flash update boot.img", + "correct": false, + "explanation": "" + }, + { + "id": 2, + "content": "fastboot flash recovery boot.img", + "correct": false, + "explanation": "" + }, + { + "id": 3, + "content": "fastboot flash boot boot.img", + "correct": true, + "explanation": "根据 fastboot 使用说明,刷入(flash)子命令格式为 flash PARTITION [FILENAME],其中分区名为 boot,文件名任意。不过,真的有人会闲得蛋疼把 TWRP 刷到 boot 分区里?有 recovery 分区不刷去刷 boot,不想开机了?小米你搞毛线呢?一开始就误导用户的题现在又搬出来凑数?" + }, + { + "id": 4, + "content": "fastboot flash update recovery boot.img", + "correct": false, + "explanation": "" + } + ] + }, + { + "id": 37, + "content": "关于9008模式刷机说法不正确的有?", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "手机必须搭载高通处理器或联发科处理器才能使用9008模式刷机", + "correct": true, + "explanation": "仅高通(Qualcomm)平台的手机可以通过官方售后使用 9008 模式刷机救砖。" + }, + { + "id": 2, + "content": "9008模式下的刷机会比fastboot模式下的刷机更加彻底", + "correct": false, + "explanation": "Qualcomm Emergency Download(EDL 或 9008)模式刷机更为底层,能够写入一些在 fastboot 模式下无法写入的分区或数据。" + }, + { + "id": 3, + "content": "小米所有手机均可使用9008模式", + "correct": true, + "explanation": "Xiaomi/Redmi 仅搭载高通(Qualcomm)处理器的手机才可使用 Qualcomm Emergency Download(EDL 或 9008)模式刷机。自小米 8 后,小米公司不再允许用户自行使用 EDL 刷机,用户需前往官方售后服务网点才能使用 EDL 刷机。" + }, + { + "id": 4, + "content": "9008模式仅限手机可正常进入系统时才可使用", + "correct": true, + "explanation": "Qualcomm Emergency Download(EDL 或 9008)模式刷机更为底层,通常用于在无法进入系统时救砖。" + }, + { + "id": 5, + "content": "手机必须搭载高通处理器才能使用9008模式刷机", + "correct": false, + "explanation": "仅高通(Qualcomm)平台的手机可以通过官方售后使用 9008 模式刷机救砖。" + } + ] + }, + { + "id": 38, + "content": "FASTBOOT模式下如何输出防回滚机制(ANTI)版本号", + "type": "single", + "options": [ + { + "id": 1, + "content": "fastboot -w ANTI", + "correct": false, + "explanation": "命令开关 -w 用于清除用户数据。" + }, + { + "id": 2, + "content": "fastboot -r ANTI", + "correct": false, + "explanation": "fastboot 不存在 -r 命令开关。" + }, + { + "id": 3, + "content": "fastboot getvar anti", + "correct": true, + "explanation": "正确的输出小米防回滚机制(Xiaomi Anti-Rollback)版本号命令为 fastboot getvar anti。" + }, + { + "id": 4, + "content": "fastboot devices", + "correct": false, + "explanation": "子命令 devices 用于列出已连接的设备列表。" + } + ] + }, + { + "id": 39, + "content": "以下说法关于Android权限的说法,不正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "PROCESS_OUTGOING_CALLS权限允许应用程序访问通话记录", + "correct": true, + "explanation": "该权限不提供访问通话记录的授权。如需访问通话记录,请使用 READ_CALL_LOG 权限。" + }, + { + "id": 2, + "content": "PROCESS_OUTGOING_CALLS权限应用程序监控或中止拨出呼叫", + "correct": false, + "explanation": "该权限将允许应用在电话呼出期间查看正在拨打的号码,并提供将呼叫重定向到其他号码和中断呼叫的选项。" + }, + { + "id": 3, + "content": "PROCESS_OUTGOING_CALLS权限允许应用程序记录拨出电话", + "correct": false, + "explanation": "应用获取该权限后能够查看拨打的号码,应用获取到号码后可以将其记录。" + }, + { + "id": 4, + "content": "PROCESS_OUTGOING_CALLS权限允许应用程序转接来电", + "correct": true, + "explanation": "该权限无法影响呼入电话的行为,无法用于转接来电。" + } + ] + }, + { + "id": 40, + "content": "输入fastboot devices命令后,可能输出的结果是", + "type": "single", + "options": [ + { + "id": 1, + "content": "$ wget https://xxx.xxx/xxx/xxx/xxx.img", + "correct": false, + "explanation": "该内容为用户手动输入的指令。" + }, + { + "id": 2, + "content": "XMABC100-01 fastboot", + "correct": true, + "explanation": "fastboot 子命令 devices 的输出格式为空(即无设备连接)或「<序列号> fastboot」(如有多个设备同时连接,则每行会显示一个设备)。" + }, + { + "id": 3, + "content": "remount failed", + "correct": false, + "explanation": "该内容为挂载(mount)命令的报错。" + }, + { + "id": 4, + "content": "MBR: verify success!", + "correct": false, + "explanation": "该内容为引导加载程序的日志。" + } + ] + }, + { + "id": 41, + "content": "MTK刷机时,报错4004的意思是", + "type": "single", + "options": [ + { + "id": 1, + "content": "驱动问题", + "correct": true, + "explanation": "该报错代码表示驱动问题。" + }, + { + "id": 2, + "content": "内存损坏", + "correct": false, + "explanation": "" + }, + { + "id": 3, + "content": "刷机软件版本不匹配", + "correct": false, + "explanation": "" + }, + { + "id": 4, + "content": "ROM文件和手机系统差距太大", + "correct": false, + "explanation": "" + } + ] + }, + { + "id": 42, + "content": "以下说法正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "versionCode与用户侧显示的应用程序版本号相同", + "correct": false, + "explanation": "用户侧显示的应用程序版本号为 versionName,并非 versionCode。" + }, + { + "id": 2, + "content": "如果同一台手机已经安装一个高versionCode的客户端版本,则无法安装同包名的低versionCode客户端", + "correct": true, + "explanation": "旧版应用通常不兼容新版的数据,为了兼容性考量,用户无法降级覆盖安装软件。" + }, + { + "id": 3, + "content": "同一个应用程序,versionCode变动时,versionName可以保持不变", + "correct": true, + "explanation": "versionCode 与 versionName 互不影响。" + }, + { + "id": 4, + "content": "发布新版本的应用程序时,必须从之前的versionCode开始递增", + "correct": true, + "explanation": "系统和/或应用商店通过 versionCode 来判断应用是否有更新,通常情况下,应用在发布更新时,会选择从之前的 version 开始递增。" + }, + { + "id": 5, + "content": "刷机过程中出现Flash antirbpass error的报错,可以直接修改脚本强刷", + "correct": false, + "explanation": "任何报错都不建议修改脚本强刷。" + }, + { + "id": 6, + "content": "刷入的系统版本与原系统差异较大时,通常建议执行四清", + "correct": true, + "explanation": "刷入系统差异较大时,如果不完整清除数据,可能会无法开机。这里的四清指的是用户数据(Userdata 或 Data)、加密元数据(Metadata)、系统缓存(Cache)以及账户锁(Frp)。" + }, + { + "id": 7, + "content": "手机如只能进入FASTBOOT,可能是引导程序损毁", + "correct": true, + "explanation": "该描述是正确的。" + }, + { + "id": 8, + "content": "正式版切换到开发版一般不需要解锁", + "correct": true, + "explanation": "Xiaomi/Redmi 手机的正式版切换到开发版通常不需要解锁,部分机型仍然有例外情况。" + }, + { + "id": 9, + "content": "HAL介于Android framework层和应用层之间,屏蔽了硬件底层的具体实现,防止AOSP受GPL污染", + "correct": false, + "explanation": "根据 Android 文档对于 AOSP 软件堆栈架构的介绍,硬件抽象层(Hardware Abstraction Layer, HAL)介于 Android 运行时(Android Runtime, ART)层与 Linux 内核(Linux Kernel)层之间,并非 Android 框架(Android Framework)层与应用(Android Apps)层之间。" + }, + { + "id": 10, + "content": "隐式Intent没有指定组件", + "correct": true, + "explanation": "隐式 Intent 并不指定组件(Component)。" + }, + { + "id": 11, + "content": "隐式Intent有指定的组件来运行一个确切的类", + "correct": false, + "explanation": "隐式 Intent 通过操作(Action)来传递意图,由系统解析 Action 并启动对应的 Activity,或弹出对话框供用户选择,并未提供确切的类。" + }, + { + "id": 12, + "content": "隐式Intent必须包含足够的数据,允许Android系统选择最佳组件来运行", + "correct": true, + "explanation": "隐式 Intent 需要在传递意图时提供足够的数据(最少需要一个 Action),由系统解析并启动对应的 Activity,或弹出对话框供用户选择。" + }, + { + "id": 13, + "content": "隐式Intent必须使用Bundle携带额外的数据", + "correct": false, + "explanation": "额外数据(Extra)不是必须的,传递额外数据也可以不使用 Bundle。" + }, + { + "id": 14, + "content": "刷入第三方TWRP,通常选择刷入到system分区", + "correct": false, + "explanation": "TWRP 通常刷入到 Recovery 分区。" + }, + { + "id": 15, + "content": "刷入第三方Recovery,通常数据不会丢失", + "correct": true, + "explanation": "刷入第三方 Recovery 通常不会涉及数据(userdata)。" + }, + { + "id": 16, + "content": "在正常情况下,所有非system分区的APP运行时的UID都是一样的", + "correct": false, + "explanation": "Android 系统会给每个非系统应用(untrusted_app)分配不同的 UID。" + }, + { + "id": 17, + "content": "Xiaomi/Redmi手机,一般长按电源键和音量加键即可进入Recovery", + "correct": true, + "explanation": "Xiaomi/Redmi 手机进入 Recovery 的组合键一般是「电源键」和「音量加键」。" + }, + { + "id": 18, + "content": "线刷可以用来降级回到之前的系统版本、彻底删除设备数据、恢复误删除数据等", + "correct": false, + "explanation": "线刷无法恢复数据。" + }, + { + "id": 19, + "content": "在FASTBOOT模式下,用flash命令刷写固件", + "correct": true, + "explanation": "根据 fastboot 使用说明,刷入(flash)子命令格式为 flash PARTITION [FILENAME]。" + }, + { + "id": 20, + "content": "Android系统启动时,首先启动的是zygote进程", + "correct": false, + "explanation": "Zygote 进程由 Android 运行时(Android Runtime, ART)启动。所以第一个启动的进程并不是 Zygote。" + }, + { + "id": 21, + "content": "如果需要自定义绘制视图,则必须重写onDraw方法", + "correct": true, + "explanation": "根据 Android 开发者文档,onDraw 方法的介绍为 Implement this to do your drawing。自定义绘制时需要重写(Override)实现此方法。" + }, + { + "id": 22, + "content": "擦除cache分区数据,个人数据通常不会丢失", + "correct": true, + "explanation": "擦除缓存(cache)分区数据,通常不会涉及个人数据(userdata)。" + }, + { + "id": 23, + "content": "子网掩码的作用是识别子网", + "correct": true, + "explanation": "子网掩码用于将 IP 地址划分为网络地址和主机地址,从而实现对网络的划分。" + }, + { + "id": 24, + "content": "网桥可以有选择地转发数据帧", + "correct": true, + "explanation": "网桥是数据链路层设备,可以根据 MAC 地址选择性地转发数据帧,而不是像简单的中继器一样广播全部数据。" + }, + { + "id": 25, + "content": "网络配置后不能进入Internet服务,ping 127.0.0.1是通的,ping 网关不通,原因可能是网关没有正确配置", + "correct": true, + "explanation": "该问题的原因可能是网关没有正确配置,或者存在网络连接或路由问题。" + }, + { + "id": 26, + "content": "通信子网为资源子网提供信息传输服务", + "correct": true, + "explanation": "通信子网通常是指负责数据传输和通信的子网,而资源子网则可能包含具体的资源(如服务器、数据库等)。通信子网提供信息传输服务以连接不同的资源子网。" + }, + { + "id": 27, + "content": "如果需要自定义绘制视图,不必重写onDraw方法", + "correct": false, + "explanation": "根据 Android 开发者文档,onDraw 方法的介绍为 Implement this to do your drawing。自定义绘制时需要重写(Override)实现此方法。" + }, + { + "id": 28, + "content": "BootLoader是在Android设备启动时最先加载到RAM中的程序,它的主要作用是把系统OS拉起来并运行", + "correct": false, + "explanation": "根据 Android 文档,引导加载器(BootLoader)负责在设备上启动内核,而不是系统。" + }, + { + "id": 29, + "content": "同一个应用程序,versionCode变动时,versionName不可以保持不变", + "correct": false, + "explanation": "versionCode 与 versionName 互不影响。" + }, + { + "id": 30, + "content": "采用CRC进行差错校验,生成多项式为G(X)=X4+X+1,信息码字为10110,则计算出的CRC校验码是0010", + "correct": false, + "explanation": "根据给定的生成多项式(10011)和信息码字,计算得出的 CRC 校验码为 1111。" + }, + { + "id": 31, + "content": "总线位宽是指总线上同时能够传输的数据位数,通常是指数据总线的根数", + "correct": false, + "explanation": "总线位宽指的是单个数据总线的宽度,而不是数据总线的根数。" + }, + { + "id": 32, + "content": "在计算机网络参考模型中,第N层为第N+1层提供服务", + "correct": true, + "explanation": "计算机网络参考模型通常指的是 Open Systems Interconnection(OSI)模型,每一层(N)根据当层的协议实现接口,向其上一层(N+1)提供服务。" + }, + { + "id": 33, + "content": "网桥不可以有选择地转发数据帧", + "correct": false, + "explanation": "网桥是数据链路层设备,可以根据 MAC 地址选择性地转发数据帧,而不是像简单的中继器一样广播全部数据。" + }, + { + "id": 34, + "content": "在不做子网划分的情况下,154.27.0.0/16能支持65534台主机", + "correct": true, + "explanation": "CIDR 块中,/16 表示前 16 位为网络标识,剩余的 32 - 16 = 16 位用于主机标识。在不考虑子网划分的情况下,主机部分有 2^16 个可用地址,减去广播和网关地址,实际可用地址数为 2^16 - 2 = 65534,即能支持的最大主机数。" + }, + { + "id": 35, + "content": "CRC校验在接收端发现差错后采取的措施是反馈重发", + "correct": true, + "explanation": "CRC 校验无法纠错,如发现差错只能向发送端反馈,要求其重新发送。" + }, + { + "id": 36, + "content": "ACK-Flood攻击属于利用TCP协议发起的攻击", + "correct": true, + "explanation": "在 Transmission Control Protocol(TCP)协议中,Acknowledgment(ACK)是握手的一个环节。ACK-Flood 攻击通过向服务器发送大量 ACK 握手包,使服务器被迫处理这些不完整的请求,可能会因此消耗大量资源。" + }, + { + "id": 37, + "content": "删除一个视图的SQL命令是DELETE", + "correct": false, + "explanation": "SQL 数据库中用于删除视图(View)的命令通常为「DROP VIEW <视图名>」。" + }, + { + "id": 38, + "content": "刷机过程中,出现Flash antirbpass error的报错,不可以直接修改脚本强刷", + "correct": true, + "explanation": "该报错意味着欲刷入镜像与设备中已有的小米防回滚机制(Xiaomi Anti-Rollback)冲突,强行刷入可能会无法开机。任何报错都不建议修改脚本强刷。" + }, + { + "id": 39, + "content": "刷机过程中,执行fastboot erase system可擦除全部数据", + "correct": false, + "explanation": "子命令 erase 用于擦除指定分区的所有数据,system 为 Android 系统分区,擦除该分区并不影响用户数据。" + }, + { + "id": 40, + "content": "正式版切换到开发版一般不需要BL解锁", + "correct": true, + "explanation": "Xiaomi/Redmi 手机的正式版切换到开发版通常不需要解锁,部分机型仍然有例外情况。最新的设备已不再提供开发版。" + }, + { + "id": 41, + "content": "重定向是指将网络请求从一个网址转移到其他网址", + "correct": true, + "explanation": "对于网络请求,该描述是正确的。" + }, + { + "id": 42, + "content": "刷机过程中,刷入的系统版本与原系统差异较大时,通常建议执行四清", + "correct": true, + "explanation": "刷入系统差异较大时,如果不完整清除数据,可能会无法开机。这里的四清指的是用户数据(Userdata 或 Data)、加密元数据(Metadata)、系统缓存(Cache)以及账户锁(Frp)。" + }, + { + "id": 43, + "content": "对称加密最大的缺点在于其密钥管理困难", + "correct": true, + "explanation": "对称性加密使用相同的密钥进行加解密。因此,密钥管理很困难,通常可以分为以下几个方面:1)分发:当密钥在传输过程中被截获,密文就有可能被非法解密;2)更新:更新密钥时,双方都需要及时获得新密钥,否则密文无法解密;3)存储:若通信双方的任何一方未能安全存储密钥,就可能导致密钥泄露,密文被非法解密。如果是多方通信,则需要通信的每一方都有极高的安全存储要求;4)数量:为了防止密钥泄露发生,通常会为多方通信的每一位生成独立的密钥,而密钥增多又会加大密钥管理的难度。" + }, + { + "id": 44, + "content": "inet是UNIX系统最重要的网络服务进程", + "correct": false, + "explanation": "inetd(Internet Daemon)是重要的网络进程,但并不存在 inet 进程,它可能指的是接口或库。" + }, + { + "id": 45, + "content": "RBAC模型同时具有强制访问控制和自主访问控制属性", + "correct": true, + "explanation": "基于角色的访问控制(Role-Based Access Control,RBAC)模型的优点是灵活可扩展,在特定的配置下,可以实现强制访问控制(Mandatory Access Control,MAC)和自主访问控制(Discretionary Access Control,DAC)模型的特性。因此,可以说 RBAC 同时具有 MAC 和 DAC 的属性。" + }, + { + "id": 46, + "content": "刷机过程中,官方提供给用户的刷机工具是MiFlash", + "correct": true, + "explanation": "该描述是正确的。" + }, + { + "id": 47, + "content": "SHA算法要比MD5算法更快", + "correct": false, + "explanation": "通常情况下,SHA 算法比 MD5 算法慢,但 SHA 算法更为安全。" + }, + { + "id": 48, + "content": "线刷可以用来降级回到之前的系统版本、彻底删除设备数据等", + "correct": true, + "explanation": "该描述是正确的。" + }, + { + "id": 49, + "content": "哈希函数是一种双向密码机制", + "correct": false, + "explanation": "哈希(Hash)是一种单向密码,不具备可逆向性,通常只能通过碰撞的方式来得出哈希原文。" + }, + { + "id": 50, + "content": "BL锁可以防止用户在设备上安装非官方或未授权的操作系统", + "correct": true, + "explanation": "BootLoader 锁在设计上的用途即为此。" + }, + { + "id": 51, + "content": "RAM指的是手机的运行内存", + "correct": true, + "explanation": "RAM 全称为 Random-access memory,指的是运行内存。" + }, + { + "id": 52, + "content": "DNS欺骗技术可分为基于DNS服务器的欺骗和基于用户计算机的欺骗", + "correct": true, + "explanation": "该描述是正确的。举例来说,DNS 缓存污染属于 DNS 服务器欺骗,而 DNS 重定向属于用户计算机本地网络欺骗。" + }, + { + "id": 53, + "content": "原始设备制造商简称OEM,是英文Original Environment Manufacturer的缩写", + "correct": false, + "explanation": "OEM 是英文 Original Equipment Manufacturer 的缩写" + }, + { + "id": 54, + "content": "MD5算法要比SHA算法更快", + "correct": true, + "explanation": "通常情况下,MD5 算法比 SHA 算法快,但 SHA 算法更为安全。" + }, + { + "id": 55, + "content": "9008模式仅限手机可正常进入系统时才可使用", + "correct": false, + "explanation": "Qualcomm Emergency Download(EDL 或 9008)模式刷机更为底层,通常用于在无法进入系统时救砖。" + }, + { + "id": 56, + "content": "DNS欺骗是攻击者冒充域名服务器的一种欺骗行为", + "correct": true, + "explanation": "DNS 欺骗是指通过篡改域名服务器(DNS)的响应,以欺骗用户或系统,使其访问错误的网站或受到攻击。" + }, + { + "id": 57, + "content": "BS7799标准是英国标准协会制定的信息安全管理体系标准,它包括两个部分:《信息安全管理实施指南》和《信息安全管理体系规范和应用指南》。依据该标准可以组织建立、实施与保持信息安全管理体系、对组织内关键信息资产的安全态势进行动态监测", + "correct": false, + "explanation": "BS7799(ISO/IEC 27001)关注信息安全管理体系,未指定特定技术。动态监测需使用SIEM、IDS等,标准鼓励根据风险选择技术。组织可在框架内自定义实施,灵活选择适合的解决方案。" + }, + { + "id": 58, + "content": "蜜罐是一种在互联网上运行的计算机系统,是专门为吸引并诱骗那些试图非法闯入他人计算机系统的人而设计的", + "correct": true, + "explanation": "蜜罐是一种安全机制,用于诱导攻击者并监测他们的行为,以便学习攻击技巧和保护真实系统。" + }, + { + "id": 59, + "content": "《信息安全技术—SM3密码杂凑算法》中,SM3的杂凑值长度为16字节", + "correct": false, + "explanation": "SM3 的杂凑值长度为 512 位(64字节),而不是16字节。" + }, + { + "id": 60, + "content": "研究密码破译的科学称为密码分析学。密码分析学中,根据密码分析者可利用的数据资源,可将攻击密码的类型分为四种,选择密文攻击适合于攻击公开密钥密码体制,特别是攻击其数字签名", + "correct": true, + "explanation": "密码分析学中的选择密文攻击不适用于公开密钥密码体制,而是适用于对称密钥密码体制。" + }, + { + "id": 61, + "content": "基于MD4和MD5设计的S/Key口令是一种一次性口令生成方案,它可以对访问者的身份与设备进行综合验证,该方案可以对抗穷举攻击", + "correct": false, + "explanation": "S/Key口令是基于MD4和MD5的一次性口令生成方案,但它不太适用于对抗穷举攻击。" + }, + { + "id": 62, + "content": "Android提供了Handler和Looper来满足线程间的通信,其中Looper类用来管理特定线程内对象之间的消息交换", + "correct": true, + "explanation": "Android中,Handler和Looper确实用于线程间的通信,Looper用来管理消息队列,确保消息在特定线程内被处理。" + }, + { + "id": 63, + "content": "刷机过程中如果变砖,可以通过9008的模式刷机救回非MTK平台的机器", + "correct": true, + "explanation": "9008模式是一种刷机模式,可以用于修复变砖(软砖)的手机,但通常不限于MTK平台。" + }, + { + "id": 64, + "content": "inetd是UNIX系统最重要的网络服务进程", + "correct": true, + "explanation": "inetd(Internet Daemon)是UNIX系统中负责启动其他网络服务的守护进程。" + }, + { + "id": 65, + "content": "在白盒法技术测试用例的设计中,语句覆盖是必须要满足的覆盖标准", + "correct": true, + "explanation": "语句覆盖是白盒测试中的一种覆盖标准,确保测试用例覆盖代码中的每个语句。" + }, + { + "id": 66, + "content": "认证常用的参数有口令、标识符、生物特征等,但认证不允许第三方参与验证过程", + "correct": false, + "explanation": "认证可能涉及第三方参与验证过程,例如证书颁发机构(CA)的参与。" + }, + { + "id": 67, + "content": "交换机可以实现从多个端口上接收数据,并根据数据包头部的信息将其转发到正确的目标地址", + "correct": true, + "explanation": "交换机是网络设备,可以根据数据包的目标地址进行智能转发,提高网络性能。" + }, + { + "id": 68, + "content": "小米所有手机均可使用9008模式", + "correct": false, + "explanation": "不是所有小米手机都可以使用9008模式,具体适用性因型号而异。" + }, + { + "id": 69, + "content": "计算机系统中,CPU对主存的访问方式属于随机存取", + "correct": true, + "explanation": "CPU对主存的访问是随机存取,可以根据地址直接访问任意存储单元。" + }, + { + "id": 70, + "content": "若计算机中的地址总线的宽度为24位,则最多允许直接访问主存储器的8MB物理空间", + "correct": false, + "explanation": "24位地址总线最多可以访问2^24个地址,即16MB物理空间。" + }, + { + "id": 71, + "content": "ServerSocket这个类是实现了一个服务器端的Socket,利用这个类可以监听来自网络的请求", + "correct": true, + "explanation": "ServerSocket用于创建服务器端的Socket,用于监听和接受来自客户端的连接请求。" + }, + { + "id": 72, + "content": "根据《计算机软件保护条例》,著作权法保护的计算机软件是指程序及其相关文档", + "correct": true, + "explanation": "计算机软件保护条例确实包括对程序及其相关文档的著作权保护。" + }, + { + "id": 73, + "content": "UML不属于面向对象开发方法", + "correct": false, + "explanation": "UML是一种用于面向对象开发的建模语言,属于面向对象开发方法的一部分。" + }, + { + "id": 74, + "content": "衡量模块的独立性的两个标准是内聚和耦合", + "correct": true, + "explanation": "内聚和耦合是衡量模块独立性的两个重要标准,内聚度高、耦合度低表示模块设计较好。" + }, + { + "id": 75, + "content": "软件测试最基础性的测试是集成测试", + "correct": false, + "explanation": "软件测试的最基础性测试是单元测试,集成测试是测试单元之间的交互和集成情况。" + }, + { + "id": 76, + "content": "擦除cache分区数据,个人数据通常会丢失", + "correct": false, + "explanation": "擦除缓存(cache)分区数据通常不会导致个人数据(userdata)丢失,因为缓存只是临时存储。" + }, + { + "id": 77, + "content": "删除一个视图的SQL命令是DROP VIEW", + "correct": true, + "explanation": "DROP VIEW是删除数据库中视图的SQL命令。" + }, + { + "id": 78, + "content": "Xiaomi/Redmi手机,一般长按音量加键和电源键即可进入Recovery", + "correct": true, + "explanation": "长按音量加键和电源键是进入Recovery模式的常见操作。" + }, + { + "id": 79, + "content": "《中华人民共和国网络安全法》第五十八条明确规定,因维护国家安全和社会公共秩序,处置重大突发社会安全事件的需要,经国务院决定或者批准,可以在特定区域对网络通信采取限制等临时措施", + "correct": true, + "explanation": "《中华人民共和国网络安全法》确实规定了在特定情况下采取限制网络通信的措施。" + } + ] + }, + { + "id": 43, + "content": "如何退出FASTBOOT模式?", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "在FASTBOOT模式下长按音量键约7-15秒重启进入系统", + "correct": false, + "explanation": "长按「电源键」可以强制重启,并非「音量键」。" + }, + { + "id": 2, + "content": "通过“fastboot reboot”及“fastboot oem poweroff”命令重启进入系统或拔线关机", + "correct": true, + "explanation": "子命令 oem 为制造商自定义命令。对于 Xiaomi/Redmi 手机,上述命令为正确重启或关机命令。" + }, + { + "id": 3, + "content": "部分机型在FASTBOOT模式下不插入数据线,5分钟到半小时内会自动重启或关机", + "correct": true, + "explanation": "部分机型在未连接(数据线拔出)时,5 分钟到半小时内才会自动重启或关机,已连接状态(数据线插入)不会自动关机。" + }, + { + "id": 4, + "content": "反复插拔数据线5次", + "correct": false, + "explanation": "插拔数据线不会造成任何影响。" + } + ] + }, + { + "id": 44, + "content": "以下说法错误的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "Android 7及更低版本的设备中,不使用JIT/AOT混合编译模式", + "correct": false, + "explanation": "Android 7 已引入 JIT/AOT 混合编译模式。正确的描述应为「Android 7 以下版本的设备中,不使用 JIT/AOT 混合编译模式」,该选项可能会对用户造成误导。" + }, + { + "id": 2, + "content": "BootLoader是在Android设备启动时最先加载到RAM中的程序,它的主要作用是把系统OS拉起来并运行", + "correct": true, + "explanation": "根据 Android 文档,引导加载器(BootLoader)负责在设备上启动内核,而不是系统。" + }, + { + "id": 3, + "content": "AndroidManifest.xml中的manifest标签可以被嵌套在application的标签内", + "correct": true, + "explanation": "manifest 标签必须声明在 AndroidManifest.xml 最外层,不能嵌套到 application 标签内。" + }, + { + "id": 4, + "content": "Android的安全机制的包括进程沙箱隔离机制、应用程序签名机制、访问控制机制等", + "correct": false, + "explanation": "该描述是正确的。" + }, + { + "id": 5, + "content": "刷机过程中如果变砖,可以通过9008的模式刷机救回MTK平台的机器", + "correct": true, + "explanation": "仅高通(Qualcomm)平台的手机可以通过官方售后使用 Qualcomm Emergency Download(EDL, 9008 模式)刷机。联发科(MediaTek, MTK)平台的机器需使用 MediaTek Preloader。" + } + ] + }, + { + "id": 45, + "content": "以下FASTBOOT基本命令,对应不正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "fastboot getvar product:输出该机型内部代号名称", + "correct": false, + "explanation": "该命令将输出机型内部代号,通常用于判断镜像是否与设备相符。" + }, + { + "id": 2, + "content": "fastboot oem device-info:输出该设备的所有信息", + "correct": true, + "explanation": "子命令 oem 为制造商自定义命令。对于 Xiaomi/Redmi 手机,device-info 命令将仅能输出如下设备状态消息:Verity mode(完整性校验状态),刷入非官方镜像需要禁用,为 false 时表示已禁用完整性校验;Device unlocked(BootLoader 解锁状态),为 true 时表示已解锁;Device critical unlocked(关键分区解锁状态),为 true 时表示 BootLoader 已完整解锁;Charger screen enabled(关机充电屏幕状态)。" + }, + { + "id": 3, + "content": "fastboot erase <分区名>:清除手机中所有数据", + "correct": true, + "explanation": "子命令 erase 仅用于擦除指定分区的所有数据,而不是手机中的所有数据。" + }, + { + "id": 4, + "content": "fastboot oem lock:开启BL锁保护", + "correct": false, + "explanation": "子命令 oem 为制造商自定义命令。对于 Xiaomi/Redmi 手机,lock 命令为回锁(开启 BootLoader 锁保护)命令。" + }, + { + "id": 5, + "content": "fastboot -w:列出当前已进入FASTBOOT模式,且与PC连接正常的所有设备", + "correct": true, + "explanation": "命令开关 -w 可以在任何子命令前添加,将擦除设备中存储的所有用户数据。若想列出已连接的 FASTBOOT 模式设备,请使用 devices 子命令。" + }, + { + "id": 6, + "content": "fastboot erase userdata:清除手机中所有数据", + "correct": false, + "explanation": "子命令 erase 用于擦除指定分区的所有数据,userdata 分区为手机数据保存的分区。" + }, + { + "id": 7, + "content": "fastboot oem lks:查看当前BL锁状态(MTK)", + "correct": false, + "explanation": "子命令 oem 为制造商自定义命令。对于 MTK 平台的 Xiaomi/Redmi 手机,lks 命令通常用于查询解锁状态,输出为 lks=0 时表示已解锁。" + }, + { + "id": 8, + "content": "fastboot reboot:列出当前已进入FASTBOOT模式,且与PC连接正常的所有设备", + "correct": true, + "explanation": "子命令 reboot 用于重启设备。若想列出已连接的 FASTBOOT 模式设备,请使用 devices 子命令。" + }, + { + "id": 9, + "content": "fastboot reboot:重启手机", + "correct": false, + "explanation": "子命令 reboot 用于重启设备。" + }, + { + "id": 10, + "content": "fastboot oem poweroff:清除手机中所有数据后关机", + "correct": true, + "explanation": "子命令 oem 为制造商自定义命令。对于 Xiaomi/Redmi 手机,poweroff 命令只会关机,不会清除数据" + }, + { + "id": 11, + "content": "fastboot erase system:擦除系统分区", + "correct": false, + "explanation": "" + }, + { + "id": 12, + "content": "fastboot delete:擦除所有分区", + "correct": true, + "explanation": "" + } + ] + }, + { + "id": 46, + "content": "Android原生提供的ContentProvider有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "联系人", + "correct": true, + "explanation": "联系人的内容提供器(Content Provider)由 com.android.contacts 提供。" + }, + { + "id": 2, + "content": "通话记录", + "correct": true, + "explanation": "通话记录的内容提供器(Content Provider)由 com.android.dialer 提供。" + }, + { + "id": 3, + "content": "书签", + "correct": false, + "explanation": "书签由各浏览器(或其他类型的应用程序)自己控制和/或保存,系统并不提供。" + }, + { + "id": 4, + "content": "应用列表", + "correct": false, + "explanation": "应用列表不属于内容提供器(Content Provider)。" + } + ] + }, + { + "id": 47, + "content": "MTK刷机的报错,原因不匹配的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "S_DA_EMMC_FLASH_NOT_FOUND:手机的内存己经损坏", + "correct": true, + "explanation": "该报错意味着刷机引导文件 Scatter.txt 与设备不匹配。" + }, + { + "id": 2, + "content": "S_BROM_CMD_STARTCMD_FAIL:没有加载好刷机包文件", + "correct": false, + "explanation": "该报错意味着没有加载好刷机包的文件或驱动没装好。" + }, + { + "id": 3, + "content": "S_FT_NEED_DOWNLOAD_ALL_FAIL:目标ROM文件和手机系统差距过大", + "correct": false, + "explanation": "该报错意味着目标 ROM 文件和手机的系统差距过大,通常在单刷某个分区时会出现。" + }, + { + "id": 4, + "content": "S_UNSUPPORTED_OPERATION:已存在同名的程序", + "correct": true, + "explanation": "该报错意味着刷机引导文件 Scatter.txt 与设备不匹配。" + }, + { + "id": 5, + "content": "S_CHIP_TYPE_NOT_MATCH:文件类型不匹配", + "correct": true, + "explanation": "该报错意味着刷机包适配的芯片型号与设备不匹配。" + } + ] + }, + { + "id": 48, + "content": "Android系统加密保护用户数据,Android 10或更高版本的设备使用全盘加密", + "type": "single", + "options": [ + { + "id": 1, + "content": "正确", + "correct": false, + "explanation": "" + }, + { + "id": 2, + "content": "错误", + "correct": true, + "explanation": "根据 Android 文档,Android 10 或更高版本不允许使用全盘加密(Full Disk Encryption, FDE),而是使用文件级加密(File-Based Encryption, FBE)。" + } + ] + }, + { + "id": 49, + "content": "已满足BL解锁申请条件,但申请后被拒绝的原因,下列说法正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "在社交媒介恶意诋毁、谩骂、造谣等(包括但不限于各论坛、微博、微信、QQ群等)", + "correct": true, + "explanation": "您不得在社交媒介对小米恶意诋毁、谩骂、造谣等。" + }, + { + "id": 2, + "content": "出现被判定为作弊的行为(包括但不限于找人“代答”、使用脚本或工具达到申请条件等)", + "correct": true, + "explanation": "根据解锁申请详细说明,“代答”等账号异常行为属于违规,解锁申请不予通过,且账号将被封禁。" + }, + { + "id": 3, + "content": "不填写申请理由、或使用AI生成申请理由、或申请理由出现过辱骂威胁等内容", + "correct": true, + "explanation": "您必须在申请时认真填写真实的申请理由。" + }, + { + "id": 4, + "content": "其他违反小米账号使用协议的相关情形", + "correct": true, + "explanation": "您不得违反小米账号使用协议。" + }, + { + "id": 5, + "content": "确认无任何违规情形,被拒绝后可尝试再次申请", + "correct": true, + "explanation": "如您无上述违规情形,在申请被拒绝后,可在 7 天后重新答题并申请。" + }, + { + "id": 6, + "content": "在社交媒介恶意诋毁、谩骂、造谣等", + "correct": true, + "explanation": "您不得在社交媒介对小米恶意诋毁、谩骂、造谣等。" + }, + { + "id": 7, + "content": "出现被判定为作弊的行为", + "correct": true, + "explanation": "根据解锁申请详细说明,“代答”等账号异常行为属于违规,解锁申请不予通过,且账号将被封禁。" + } + ] + }, + { + "id": 50, + "content": "官方提供给用户的刷机工具是MiFlash", + "type": "single", + "options": [ + { + "id": 1, + "content": "正确", + "correct": true, + "explanation": "除 MiFlash(及 MiFlashPro)外,其余工具均为非官方工具。" + }, + { + "id": 2, + "content": "错误", + "correct": false, + "explanation": "" + } + ] + }, + { + "id": 51, + "content": "以下说法不正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "Android 7及更低版本的设备中,不使用JIT/AOT混合编译模式", + "correct": false, + "explanation": "Android 7 已引入 JIT/AOT 混合编译模式。正确的描述应为「Android 7 以下版本的设备中,不使用 JIT/AOT 混合编译模式」,该选项可能会对用户造成误导。" + }, + { + "id": 2, + "content": "BootLoader是在Android设备启动时最先加载到RAM中的程序,它的主要作用是把系统OS拉起来并运行", + "correct": true, + "explanation": "根据 Android 文档,引导加载器(BootLoader)负责在设备上启动内核,而不是系统。" + }, + { + "id": 3, + "content": "AndroidManifest.xml中的manifest标签可以被嵌套在application的标签内", + "correct": true, + "explanation": "manifest 标签必须声明在 AndroidManifest.xml 最外层,不能嵌套到 application 标签内。" + }, + { + "id": 4, + "content": "Android的安全机制的包括进程沙箱隔离机制、应用程序签名机制、访问控制机制等", + "correct": false, + "explanation": "该描述是正确的。" + }, + { + "id": 5, + "content": "刷机过程中如果变砖,可以通过9008的模式刷机救回MTK平台的机器", + "correct": true, + "explanation": "仅高通(Qualcomm)平台的手机可以通过官方售后使用 Qualcomm Emergency Download(EDL, 9008 模式)刷机。联发科(MediaTek, MTK)平台的机器需使用 MediaTek Preloader。" + }, + { + "id": 6, + "content": "刷机过程中出现Flash antirbpass error的报错,可以直接修改脚本强刷", + "correct": true, + "explanation": "该报错意味着欲刷入镜像与设备中已有的小米防回滚机制(Xiaomi Anti-Rollback)冲突,强行刷入可能会无法开机。任何报错都不建议修改脚本强刷。" + }, + { + "id": 7, + "content": "刷入的系统版本与原系统差异较大时,通常建议执行四清", + "correct": false, + "explanation": "刷入系统差异较大时,如果不完整清除数据,可能会无法开机。这里的四清指的是用户数据(Userdata 或 Data)、加密元数据(Metadata)、系统缓存(Cache)以及账户锁(Frp)。" + }, + { + "id": 8, + "content": "手机如只能进入FASTBOOT,可能是引导程序损毁", + "correct": false, + "explanation": "该描述是正确的。" + }, + { + "id": 9, + "content": "正式版切换到开发版一般不需要解锁", + "correct": false, + "explanation": "Xiaomi/Redmi 手机的正式版切换到开发版通常不需要解锁,部分机型仍然有例外情况。最新的设备已不再提供开发版。" + }, + { + "id": 10, + "content": "HAL介于Android framework层和应用层之间,屏蔽了硬件底层的具体实现,防止AOSP受GPL污染", + "correct": true, + "explanation": "根据 Android 文档对于 AOSP 软件堆栈架构的介绍,硬件抽象层(Hardware Abstraction Layer, HAL)介于 Android 运行时(Android Runtime, ART)层与 Linux 内核(Linux Kernel)层之间,并非 Android 框架(Android Framework)层与应用(Android Apps)层之间。" + }, + { + "id": 11, + "content": "刷入第三方TWRP,通常选择刷入到system分区", + "correct": true, + "explanation": "TWRP 通常刷入到 Recovery 分区。" + }, + { + "id": 12, + "content": "刷入第三方Recovery,通常数据不会丢失", + "correct": false, + "explanation": "刷入第三方 Recovery 通常不会涉及数据(userdata)。" + }, + { + "id": 13, + "content": "在正常情况下,所有非system分区的APP运行时的UID都是一样的", + "correct": true, + "explanation": "Android 系统会给每个非系统应用(untrusted_app)分配不同的 UID。" + }, + { + "id": 14, + "content": "Xiaomi/Redmi手机,一般长按电源键和音量减键即可进入Recovery", + "correct": true, + "explanation": "Xiaomi/Redmi 手机进入 Recovery 的组合键一般是「电源键」和「音量加键」。" + }, + { + "id": 15, + "content": "隐式Intent没有指定组件", + "correct": false, + "explanation": "隐式 Intent 并不指定组件(Component)。" + }, + { + "id": 16, + "content": "隐式Intent有指定的组件来运行一个确切的类", + "correct": true, + "explanation": "隐式 Intent 通过操作(Action)来传递意图,由系统解析 Action 并启动对应的 Activity,或弹出对话框供用户选择,并未提供确切的类。" + }, + { + "id": 17, + "content": "隐式Intent必须包含足够的数据,允许Android系统选择最佳组件来运行", + "correct": false, + "explanation": "隐式 Intent 需要在传递意图时提供足够的数据(最少需要一个 Action),由系统解析并启动对应的 Activity,或弹出对话框供用户选择。" + }, + { + "id": 18, + "content": "隐式Intent必须使用Bundle携带额外的数据", + "correct": true, + "explanation": "额外数据(Extra)不是必须的,传递额外数据也可以不使用 Bundle。" + }, + { + "id": 19, + "content": "versionCode与用户侧显示的应用程序版本号相同", + "correct": true, + "explanation": "用户侧显示的应用程序版本号为 versionName,并非 versionCode。" + }, + { + "id": 20, + "content": "刷机过程中如果变砖,不可以通过9008的模式刷机救回MTK平台的机器", + "correct": false, + "explanation": "仅高通(Qualcomm)平台的手机可以通过官方售后使用 Qualcomm Emergency Download(EDL, 9008 模式)刷机。联发科(MediaTek, MTK)平台的机器需使用 MediaTek Preloader。" + }, + { + "id": 21, + "content": "刷机过程中出现Flash antirbpass error的报错,不可以直接修改脚本强刷", + "correct": false, + "explanation": "该报错意味着欲刷入镜像与设备中已有的小米防回滚机制(Xiaomi Anti-Rollback)冲突,强行刷入可能会无法开机。任何报错都不建议修改脚本强刷。" + }, + { + "id": 22, + "content": "手机如只能进入FASTBOOT,不可能是引导程序损毁", + "correct": true, + "explanation": "引导程序损毁可能导致只能进入 FASTBOOT 模式或完全无法启动。" + }, + { + "id": 23, + "content": "假设信息位是8位,用海明码来发现并纠正1位出错的情况,则校验位的位数至少为8位", + "correct": true, + "explanation": "使用海明码来校验并纠错 8 位的信息,纠错位数至少为 4 位,而不是 8 位。计算海明码的校验位数可以使用以下不等式,m 为信息位,满足不等式的 r 最小值即为校验位数: 2^r >= m + r + 1" + }, + { + "id": 24, + "content": "Xiaomi/Redmi手机,一般长按电源键和音量加键即可进入Recovery", + "correct": false, + "explanation": "Xiaomi/Redmi 手机进入 Recovery 的组合键一般是「电源键」和「音量加键」。" + }, + { + "id": 25, + "content": "执行fastboot erase system可擦除全部数据", + "correct": true, + "explanation": "子命令 erase 用于擦除指定分区的所有数据,system 为 Android 系统分区,擦除该分区并不影响用户数据。" + }, + { + "id": 26, + "content": "DNS欺骗技术可分为基于DNS服务器的欺骗和基于用户计算机的欺骗", + "correct": false, + "explanation": "该描述是正确的。举例来说,DNS 缓存污染属于 DNS 服务器欺骗,而 DNS 重定向属于用户计算机本地网络欺骗。" + }, + { + "id": 27, + "content": "特征码查杀技术可以有效检测采用加壳技术的恶意程序", + "correct": true, + "explanation": "恶意软件加壳(或加密/加固)后,常规的特征会被外壳覆盖,使特征码查杀技术失效。" + }, + { + "id": 28, + "content": "小米所有手机均可使用9008模式", + "correct": true, + "explanation": "Xiaomi/Redmi 仅搭载高通(Qualcomm)处理器的手机才可使用 Qualcomm Emergency Download(EDL 或 9008)模式刷机。自小米 8 后,小米公司不再允许用户自行使用 EDL 刷机,用户需前往官方售后服务网点才能使用 EDL 刷机。" + }, + { + "id": 29, + "content": "如果同一台手机已经安装一个高versionCode的客户端版本,则无法安装同包名的低versionCode客户端", + "correct": false, + "explanation": "旧版应用通常不兼容新版的数据,为了兼容性考量,用户无法降级覆盖安装软件。" + }, + { + "id": 30, + "content": "RBAC模型同时具有强制访问控制和自主访问控制属性", + "correct": false, + "explanation": "基于角色的访问控制(Role-Based Access Control,RBAC)模型的优点是灵活可扩展,在特定的配置下,可以实现强制访问控制(Mandatory Access Control,MAC)和自主访问控制(Discretionary Access Control,DAC)模型的特性。因此,可以说 RBAC 同时具有 MAC 和 DAC 的属性。" + }, + { + "id": 31, + "content": "网桥不可以有选择地转发数据帧", + "correct": true, + "explanation": "网桥是数据链路层设备,可以根据 MAC 地址选择性地转发数据帧,而不是像简单的中继器一样广播全部数据。" + }, + { + "id": 32, + "content": "inet是UNIX系统最重要的网络服务进程", + "correct": true, + "explanation": "inetd(Internet Daemon)是重要的网络进程,但并不存在 inet 进程,它可能指的是接口或库。" + }, + { + "id": 33, + "content": "哈希函数是一种双向密码机制", + "correct": true, + "explanation": "哈希(Hash)是一种单向密码,不具备可逆向性,通常只能通过碰撞的方式来得出哈希原文。" + }, + { + "id": 34, + "content": "RAM指的是手机的运行内存", + "correct": false, + "explanation": "RAM 全称为 Random-access memory,指的是运行内存。" + }, + { + "id": 35, + "content": "刷机过程中,官方提供给用户的刷机工具是MiFlash", + "correct": false, + "explanation": "除 MiFlash(及 MiFlashPro)外,其余工具均为非官方工具。" + }, + { + "id": 36, + "content": "Android系统加密保护用户数据,Android 10或更高版本的设备使用全盘加密", + "correct": true, + "explanation": "根据 Android 文档,Android 10 或更高版本不允许使用全盘加密(Full Disk Encryption, FDE),而是使用文件级加密(File-Based Encryption, FBE)。" + }, + { + "id": 37, + "content": "9008模式下的刷机会比fastboot模式下的刷机更加彻底", + "correct": false, + "explanation": "Qualcomm Emergency Download(EDL 或 9008)模式刷机更为底层,能够写入一些在 fastboot 模式下无法写入的分区或数据。" + }, + { + "id": 38, + "content": "BL锁可以防止用户在设备上安装非官方或未授权的操作系统", + "correct": false, + "explanation": "BootLoader 锁在设计上的用途即为此。" + }, + { + "id": 39, + "content": "Redmi所有手机均可使用EDL模式", + "correct": true, + "explanation": "仅高通(Qualcomm)平台的手机可以通过官方售后使用 Qualcomm Emergency Download(EDL, 9008 模式)刷机。" + }, + { + "id": 40, + "content": "Android系统启动时,首先启动的是zygote进程", + "correct": true, + "explanation": "Zygote 进程由 Android 运行时(Android Runtime, ART)启动。所以第一个启动的进程并不是 Zygote。" + }, + { + "id": 41, + "content": "ROM指的是手机的运行内存", + "correct": true, + "explanation": "ROM 全称为 Read-only memory,指的是手机的系统固件。运行内存为 Random-access memory(RAM)。" + }, + { + "id": 42, + "content": "adb的全称是Android Debug Badge,起到调试桥的作用", + "correct": false, + "explanation": "该描述是正确的。" + }, + { + "id": 43, + "content": "Xiaomi/Redmi手机,一般长按音量加键和电源键即可进入Recovery", + "correct": false, + "explanation": "Xiaomi/Redmi 手机进入 Recovery 的组合键一般是「电源键」和「音量加键」。" + }, + { + "id": 44, + "content": "擦除cache分区数据,个人数据通常会丢失", + "correct": true, + "explanation": "擦除缓存(cache)分区数据,通常不会涉及个人数据(userdata)。" + }, + { + "id": 45, + "content": "重定向是指将网络请求从一个网址转移到其他网址", + "correct": false, + "explanation": "对于网络请求,该描述是正确的。" + }, + { + "id": 46, + "content": "Android 7及更低版本的设备中,使用JIT/AOT混合编译模式", + "correct": true, + "explanation": "Android 7 已引入 JIT/AOT 混合编译模式。正确的描述应为「Android 7 以下版本的设备中,不使用 JIT/AOT 混合编译模式」,该选项可能会对用户造成误导。" + }, + { + "id": 47, + "content": "删除一个视图的SQL命令是DROP VIEW", + "correct": false, + "explanation": "该描述是正确的,命令后面需要附上视图(View)名称。" + }, + { + "id": 48, + "content": "MD5算法要比SHA算法更快", + "correct": false, + "explanation": "通常情况下,MD5 算法比 SHA 算法快,但 SHA 算法更为安全。" + }, + { + "id": 49, + "content": "DNS欺骗是攻击者冒充域名服务器的一种欺骗行为", + "correct": false, + "explanation": "DNS 欺骗是指通过篡改域名服务器(DNS)的响应,以欺骗用户或系统,使其访问错误的网站或受到攻击。" + }, + { + "id": 50, + "content": "在FASTBOOT模式下,用flash命令刷写固件", + "correct": false, + "explanation": "根据 fastboot 使用说明,刷入(flash)子命令格式为 flash PARTITION [FILENAME]。" + }, + { + "id": 51, + "content": "9008模式仅限手机可正常进入系统时才可使用", + "correct": true, + "explanation": "Qualcomm Emergency Download(EDL 或 9008)模式刷机更为底层,通常用于在无法进入系统时救砖。" + }, + { + "id": 52, + "content": "网桥可以有选择地转发数据帧", + "correct": false, + "explanation": "网桥是数据链路层设备,可以根据 MAC 地址选择性地转发数据帧,而不是像简单的中继器一样广播全部数据。" + }, + { + "id": 53, + "content": "9008模式下的刷机不如fastboot模式下的刷机更加彻底", + "correct": true, + "explanation": "" + } + ] + }, + { + "id": 52, + "content": "BL解锁面向发烧友和开发者开放,因此在资格筛选时,会考察是否符合发烧友的特质。下面关于发烧友的特质,说法正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "发烧友指的是对某一领域极度热爱,并对此领域的产品进行深入研究", + "correct": true, + "explanation": "这你让我咋写解析......公告类型题,对上一题的正确选项做出了解释,直接全选。" + }, + { + "id": 2, + "content": "发烧友具备探究精神,因此在遇到不了解的问题时,会在合理范围内主动探寻答案,但不会寻求不正当“捷径”或采用违规方式", + "correct": true, + "explanation": "" + }, + { + "id": 3, + "content": "发烧友具备坚韧不拔的品质,因此在遇到失败或挫折时,会不断尝试和努力,但不会去造谣、诋毁", + "correct": true, + "explanation": "" + }, + { + "id": 4, + "content": "发烧友具备学习精神,因此在遇到新鲜事物或新知识时,会乐于学习和钻研,但不会肆意谩骂", + "correct": true, + "explanation": "" + }, + { + "id": 5, + "content": "发烧友具备分享精神,因此在有一些好的知识或经验时,会积极分享和交流,但不会去利用“资源”去“谋利”,更不会将获得的“资源”去“转租/转售”", + "correct": true, + "explanation": "" + } + ] + }, + { + "id": 53, + "content": "MTK刷机的报错,原因匹配的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "S_FT_NEED_DOWNLOAD_ALL_FAIL:目标ROM文件和手机系统差距过大", + "correct": true, + "explanation": "该报错意味着目标 ROM 文件和手机的系统差距过大,通常在单刷某个分区时会出现。" + }, + { + "id": 2, + "content": "S_BROM_CMD_STARTCMD_FAIL:没有加载好刷机包文件", + "correct": true, + "explanation": "该报错意味着没有加载好刷机包的文件或驱动没装好。" + }, + { + "id": 3, + "content": "S_UNSUPPORTED_OPERATION:已存在同名的程序", + "correct": false, + "explanation": "该报错意味着刷机引导文件 Scatter.txt 与设备不匹配。" + }, + { + "id": 4, + "content": "S_DA_EMMC_FLASH_NOT_FOUND:手机的内存己经损坏", + "correct": false, + "explanation": "该报错意味着刷机引导文件 Scatter.txt 与设备不匹配。" + }, + { + "id": 5, + "content": "S_CHIP_TYPE_NOT_MATCH:文件类型不匹配", + "correct": false, + "explanation": "该报错意味着刷机包适配的芯片型号与设备不匹配。" + } + ] + }, + { + "id": 54, + "content": "现计划展出10台小米/Redmi手机,具体如下:3台Redmi K70(已BL解锁)、3台小米13(未BL解锁)、1台小米14Pro(未BL解锁)、3台Redmi K60至尊版(未BL解锁),现将这10台手机排成一列进行展示,但已BL解锁的手机不能挨在一起,请问有多少种展出陈列方式(同一机型视为完全一样)", + "type": "single", + "options": [ + { + "id": 1, + "content": "2240", + "correct": false, + "explanation": "" + }, + { + "id": 2, + "content": "2352", + "correct": false, + "explanation": "" + }, + { + "id": 3, + "content": "7840", + "correct": true, + "explanation": "数学排列组合问题。根据题目列出公式计算: C(3, 7) * C(3, 4) * C(3, 8) = 7840" + }, + { + "id": 4, + "content": "8960", + "correct": false, + "explanation": "" + }, + { + "id": 5, + "content": "10080", + "correct": false, + "explanation": "" + } + ] + }, + { + "id": 55, + "content": "比特率是指将模拟声音信号转换成数字声音信号后单位时间内的二进制数据量,因此比特率越大的音质就越好", + "type": "single", + "options": [ + { + "id": 1, + "content": "正确", + "correct": true, + "explanation": "通常情况下,音频的比特率越高,音质就越好。实际情况可能会受限于压缩算法的影响,较低的比特率也可以提供高音质音频。" + }, + { + "id": 2, + "content": "错误", + "correct": false, + "explanation": "" + } + ] + }, + { + "id": 56, + "content": "以下FASTBOOT基本命令,对应正确的有", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "fastboot getvar product:输出该机型内部代号名称", + "correct": true, + "explanation": "该命令将输出机型内部代号,通常用于判断镜像是否与设备相符。" + }, + { + "id": 2, + "content": "fastboot oem device-info:输出该设备的所有信息", + "correct": false, + "explanation": "子命令 oem 为制造商自定义命令。对于 Xiaomi/Redmi 手机,device-info 命令将仅能输出如下设备状态消息:Verity mode(完整性校验状态),刷入非官方镜像需要禁用,为 false 时表示已禁用完整性校验;Device unlocked(BootLoader 解锁状态),为 true 时表示已解锁;Device critical unlocked(关键分区解锁状态),为 true 时表示 BootLoader 已完整解锁;Charger screen enabled(关机充电屏幕状态)。" + }, + { + "id": 3, + "content": "fastboot erase userdata:清除手机中所有数据", + "correct": true, + "explanation": "子命令 erase 用于擦除指定分区的所有数据,userdata 分区为手机数据保存的分区。" + }, + { + "id": 4, + "content": "fastboot reboot:输出FASTBOOT模式下连接的设备", + "correct": false, + "explanation": "子命令 reboot 用于重启设备。若想列出已连接的 FASTBOOT 模式设备,请使用 devices 子命令。" + }, + { + "id": 5, + "content": "fastboot oem lks:输出当前BL锁状态(MTK)", + "correct": true, + "explanation": "子命令 oem 为制造商自定义命令。对于 MTK 平台的 Xiaomi/Redmi 手机,lks 命令通常用于查询解锁状态,输出为 lks=0 时表示已解锁。" + }, + { + "id": 6, + "content": "fastboot getvar all:输出当前BL锁状态(非MTK)", + "correct": false, + "explanation": "子命令 getvar 用于从 BootLoader 中读取手机信息。all 表示输出全部信息,其中虽然包含 BootLoader 解锁状态,但该命令通常不用做是否已解锁判断。" + }, + { + "id": 7, + "content": "fastboot oem lock:获取root权限", + "correct": false, + "explanation": "子命令 oem 为制造商自定义命令。对于 Xiaomi/Redmi 手机,lock 命令将会重新上锁 BootLoader。" + }, + { + "id": 8, + "content": "fastboot flashing unlock:获取root权限", + "correct": false, + "explanation": "子命令 oem 为制造商自定义命令。对于 Xiaomi/Redmi 手机,unlock 命令单独执行不起作用,需要使用小米官方解锁工具才能解锁 BootLoader。" + }, + { + "id": 9, + "content": "fastboot oem poweroff:清除手机中所有数据后关机", + "correct": false, + "explanation": "子命令 oem 为制造商自定义命令。对于 Xiaomi/Redmi 手机,poweroff 命令只会关机,不会清除数据。" + }, + { + "id": 10, + "content": "fastboot reboot:重启手机", + "correct": true, + "explanation": "子命令 reboot 用于重启设备。" + } + ] + }, + { + "id": 57, + "content": "在CRC码计算中,与101101对应的多项式为", + "type": "single", + "options": [ + { + "id": 1, + "content": "x^6+x^4+x^3+1", + "correct": false, + "explanation": "" + }, + { + "id": 2, + "content": "x^5+x^3+x^2+x", + "correct": false, + "explanation": "" + }, + { + "id": 3, + "content": "x^6+x^5+x^4+x", + "correct": false, + "explanation": "" + }, + { + "id": 4, + "content": "x^5+x^3+x^2+1", + "correct": true, + "explanation": "CRC 码中,二进制格式的多项式生成系数从右往左的每一位都分别代表从 0 开始,指数从小到大的项,值为 1 时表示该项存在。在此系数中,一共有 6 位,从右往左分别表示 x^0 至 x^5,其中 x^1 和 x^4 对应位的值为 0。将 x^0 替换为等值 1 后将其相加,得出此多项式。" + } + ] + }, + { + "id": 58, + "content": "关于9008模式刷机说法正确的有?", + "type": "multiple", + "options": [ + { + "id": 1, + "content": "手机必须搭载高通处理器才能使用9008模式刷机", + "correct": true, + "explanation": "仅高通(Qualcomm)平台的手机可以通过官方售后使用 9008 模式刷机救砖。" + }, + { + "id": 2, + "content": "小米所有手机均可使用9008模式", + "correct": false, + "explanation": "Xiaomi/Redmi 仅搭载高通(Qualcomm)处理器的手机才可使用 Qualcomm Emergency Download(EDL 或 9008)模式刷机。自小米 8 后,小米公司不再允许用户自行使用 EDL 刷机,用户需前往官方售后服务网点才能使用 EDL 刷机。" + }, + { + "id": 3, + "content": "9008模式下的刷机会比fastboot模式下的刷机更加彻底", + "correct": true, + "explanation": "Qualcomm Emergency Download(EDL 或 9008)模式刷机更为底层,能够写入一些在 fastboot 模式下无法写入的分区或数据。" + }, + { + "id": 4, + "content": "9008模式仅限手机可正常进入系统时才可使用", + "correct": false, + "explanation": "Qualcomm Emergency Download(EDL 或 9008)模式刷机更为底层,通常用于在无法进入系统时救砖。" + } + ] + }, + { + "id": 59, + "content": "原始设备制造商简称OEM,是英文Original Equipment Manufacturer的缩写", + "type": "single", + "options": [ + { + "id": 1, + "content": "正确", + "correct": true, + "explanation": "该描述是正确的。" + }, + { + "id": 2, + "content": "错误", + "correct": false, + "explanation": "" + } + ] + }, + { + "id": 60, + "content": "adb的全称是Android Debug Bridge,起到调试桥的作用", + "type": "single", + "options": [ + { + "id": 1, + "content": "正确", + "correct": true, + "explanation": "该描述是正确的。" + }, + { + "id": 2, + "content": "错误", + "correct": false, + "explanation": "" + } + ] + }, + { + "id": 61, + "content": "BootLoader是在Android设备启动时最先加载到RAM中的程序,它的主要作用是把系统OS拉起来并运行", + "type": "single", + "options": [ + { + "id": 1, + "content": "错误", + "correct": true, + "explanation": "根据 Android 文档,引导加载器(BootLoader)负责在设备上启动内核,而不是系统。" + }, + { + "id": 2, + "content": "正确", + "correct": false, + "explanation": "" + } + ] + }, + { + "id": 62, + "content": "刷机过程中,执行fastboot erase system可擦除全部数据", + "type": "single", + "options": [ + { + "id": 1, + "content": "正确", + "correct": false, + "explanation": "" + }, + { + "id": 2, + "content": "错误", + "correct": true, + "explanation": "子命令 erase 用于擦除指定分区的所有数据,system 为 Android 系统分区,擦除该分区并不影响用户数据。" + } + ] + }, + { + "id": 63, + "content": "刷机过程中,出现Flash antirbpass error的报错,不可以直接修改脚本强刷", + "type": "single", + "options": [ + { + "id": 1, + "content": "正确", + "correct": true, + "explanation": "该报错意味着欲刷入镜像与设备中已有的小米防回滚机制(Xiaomi Anti-Rollback)冲突,强行刷入可能会无法开机。任何报错都不建议修改脚本强刷。" + }, + { + "id": 2, + "content": "错误", + "correct": false, + "explanation": "" + } + ] + }, + { + "id": 64, + "content": "请截图本页面,并上传截图。", + "note": "未正确上传该页面截图或伪造截图,将视为无效答卷,无法通过审核", + "type": "upload_file", + "options": [] + } + ] +} diff --git a/img/alipay.jpg b/img/alipay.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe0545728ca4a0582d8c7f3176e65e119e753150 GIT binary patch literal 63564 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

mkk4*Pnf*q@h%o;11HW{R1rAis#L9eEG?`I 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✆romc@p};QM;>x+RCR{LyqZUqm4N|0_ZO z^g>&zhDp$8F^w?NQJYMrn)d3HQ4(?*rATlTGkFQxGnoMLm6_Sn8y&~1INCB;ENhq0 z0?}Eixcz|W_z_5Q?Is;cP;{xk)E=z4!bIx!KcHI!V08jDGO(HmSdj1uSPb%?m|0*T z6k=v!WMw0#fGeW-+3UQzzFnsOt~LM@Bt8*l&~0-*98aa)NCl2eOJq|SRN6HT$CKJS zA41K5A`9pLRDk-3Z}FDBuiyI8`1!Xna0Y{?3X4|M#6B6+$D;8%cpdc%dYf}T$4)^0 z>BhPA#cjO3=AD)Ep-B1ouuUKtC%PCFyUU1*@uWwoC)bhYd{k+{L885StK}u5S_ndG zgky+W6BzCSNJFW2@FbpZVoWD&x$G}8I?t7=7NQ4Vl)1+rMQFa!9}zDGN8eMQbBaDJ zPW{q>FMNYw>b;DsJl@}OJ9D8g;fy!IOF6gHg@v@o7j{7I8)_Yu^Zu)FbdMt6ni57$ z;{wp(EPmlVBO>R%_kVAB&Z+t^#+kg@KygNdpdHPI@4S1CS-CL642I?keCZR>e+2oo ziA{Q@zuE56{>BV}7QklQ{cqF%gM+)!PgJqq<*{#xM}OXll6YV};>G>Q=k`6POvp-3 zx9aZUW~d4?Vu)iP7Fh&C34bKF?IwkPOMZhZHO+y#<{


>hTB81?E`ATuAZ#ESFp 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..d46dafa --- /dev/null +++ b/index.html @@ -0,0 +1,114 @@ + + + + + + + 小米 Bootloader 解锁测试 + + + + + + + + + + +
+ + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/js/jquery.min.js b/js/jquery.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="
",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0"); + this.htmlElement.val(this.id); + + let headerElement = $(""); + headerElement.attr("slot", "header"); + let typeText = Problem.getTypeString(this.type); + headerElement.text("【" + typeText + "】" + this.content); + this.htmlElement.append(headerElement); + + if (this.note != null) { + let noteElement = $(""); + noteElement.text(this.note); + headerElement.append(noteElement); + } + + let subitems = $("
"); + subitems.css("margin-left", "1.5rem"); + + for (let i = 0; i < this.options.length; i++) { + let option = this.options[i]; + subitems.append(option.htmlElement); + } + this.htmlElement.append(subitems); + } + + match(search) { + if (this.content.toLowerCase().indexOf(search) != -1) + return true; + for (let i = 0; i < this.options.length; i++) { + let option = this.options[i]; + if (option.match(search)) + return true; + } + return false; + } + + static getTypeString(type) { + if (type == "single") + return "单选题"; + if (type == "multiple") + return "多选题"; + if (type == "upload_file") + return "上传文件"; + return "未知题型"; + } + + static fromJson(json) { + let id = json.id; + let content = json.content; + let type = json.type; + let note = json.note; + let options = []; + for (let i = 0; i < json.options.length; i++) { + let option = json.options[i]; + options.push(new Option(option.id, option.content, option.correct, type, option.explanation)); + } + return new Problem(id, content, type, options, note); + } +} + +class Option { + htmlElement = null; + explanationElement = null; + userAnswer = null; + type = null; + checked = false; + + constructor(id, content, correct, type, explanation) { + this.id = id; + this.content = content; + this.correct = correct; + this.explanation = explanation; + this.type = type; + + this.htmlElement = $(""); + this.htmlElement.text(this.content); + this.explanationElement = $(''); + this.explanationElement.text(this.explanation); + this.explanationElement.hide(); + this.htmlElement.append(this.explanationElement); + + this.check(false); + } + + toggleExplanation(val) { + if (val != null) { + if (val) { + this.explanationElement.show(); + } else { + this.explanationElement.hide(); + } + return; + } + this.explanationElement.toggle(); + } + + check(val) { + this.checked = val; + if (val) { + this.htmlElement.attr("icon", problem_icon_list[this.type][0]); + } else { + this.htmlElement.attr("icon", problem_icon_list[this.type][1]); + } + } + + match(search) { + return this.content.toLowerCase().indexOf(search) != -1; + } +} diff --git a/js/utils.js b/js/utils.js new file mode 100644 index 0000000..f2ababb --- /dev/null +++ b/js/utils.js @@ -0,0 +1,71 @@ + +function http(method, url, data, headers, callback, failureCallback = null) { + let httpRequest = new XMLHttpRequest(); + + httpRequest.open(method, url, true); + httpRequest.onreadystatechange = function() { + if (httpRequest.readyState === httpRequest.DONE) { + data = JSON.parse(httpRequest.response); + if (httpRequest.status === 200) callback(data); + else failureCallback?.(httpRequest.status, data); + } + } + + let key, value; + + if (headers != null) { + for ([key, value] of headers) { + httpRequest.setRequestHeader(key, value); + } + } + + httpRequest.send(data); +} + +function httpPromise(method, url, data, headers) { + return new Promise((resolve, reject) => { + http(method, url, data, headers, (result) => { + resolve(result); + }, + (_code, data) => { + reject(data); + }) + }); +} + +function shuffle(array) { + let currentIndex = array.length, randomIndex; + + // While there remain elements to shuffle. + while (currentIndex > 0) { + + // Pick a remaining element. + randomIndex = Math.floor(Math.random() * currentIndex); + currentIndex--; + + // And swap it with the current element. + [array[currentIndex], array[randomIndex]] = [ + array[randomIndex], array[currentIndex]]; + } + + return array; +} + + +function timeToString(time) { + let minute = Math.floor(time / 60); + let second = time % 60; + return (minute < 10 ? "0" : "") + minute + ":" + (second < 10 ? "0" : "") + second; +} + +function showImageDialog(headline, description, src) { + mdui.dialog({ + headline, + description, + body: '', + actions: [{ + text: '关闭' + }], + closeOnOverlayClick: true + }); +} diff --git a/judge.html b/judge.html new file mode 100644 index 0000000..424c721 --- /dev/null +++ b/judge.html @@ -0,0 +1,209 @@ +
+

题目版本:

+ + +
+

请在开始前阅读以下注意事项:

+
    +
  • 本次测试共有 0 道题,你有 15 分钟的答题时间。
  • +
  • 每道题目只能答一次,答题后无法修改答案。
  • +
  • 题目选项的顺序是随机的,每次测试的顺序都不相同。
  • +
  • 答题结束后,点击“提交”按钮提交答案,并取得本次测试的成绩和解析。
  • +
  • 正确答案会以强调色显示
  • +
  • 小米 Bootloader 解锁测试题每天都会更新,本次模拟测试的题目与真实测试的题目可能有所不同。
  • +
  • 答题结束后,可以刷新页面以重新开始模拟测试
  • +
+
+ +
+ 开始 + + +
+ + +
diff --git a/problem_list.html b/problem_list.html new file mode 100644 index 0000000..11c4804 --- /dev/null +++ b/problem_list.html @@ -0,0 +1,51 @@ +
+ + + + +
\ No newline at end of file