计算机系统基础备考:进制转换与冯·诺依曼原理精讲 简介《第一章 计算机系统基础知识》演示文稿是软考初级程序员备考的核心资料围绕考试大纲拆解计算机硬件与软件、数据表示及运算、冯·诺依曼工作原理、指令系统、多媒体系统五大知识模块重点突出总结到位既适合零基础入门也适合考前快速回顾。资源为单个pptx演示文稿压缩包共1个文件大小约6.92MB目前已191人学习下载。课件详细讲解了计算机硬件五大部件与CPU、内存/外存/寄存器的作用系统软件与应用软件的分类个人移动设备、服务器、超级计算机等常见类型数据表示部分覆盖十进制、二进制、八进制、十六进制的基数位权与转换规则并给出除基取余法等计算方法工作原理结合冯·诺依曼架构说明程序存储与顺序执行指令系统与多媒体部分则帮助理解指令类型及图形图像编码思路。学完本章考生可快速掌握第一章核心考点为后续章节学习打下扎实基础。1. 软考初级程序员第一关这份计算机系统基础PPT到底能帮你补上什么软考初级程序员的上午卷里计算机系统基础知识是稳稳的得分区历年占比大约在15%到20%之间题型以单项选择和填空为主。这份PPT对应官方教材第一章从计算机硬件五大部件讲起一路覆盖到数制转换、冯·诺依曼工作原理、指令系统和多媒体系统简介脉络和大纲设置完全一致。说直白点这一章是整本教材里“背下来就能拿分”的部分恶心的地方在于进制转换题考手速和准确度硬件分类题考概念边界。我拆这份资料的时候最直观的感受是知识点排列紧凑重点表格可以直接当背诵清单用适合零基础起步的考生也适合考前两周快速过一轮的上班族。下面按备考顺序把各章节的用法和坑位拆开讲。2. 计算机系统组成硬件五大部件与软件分类的考试脉络2.1 硬件部分从五大部件到CPU的演进逻辑计算机硬件是摸得见看得着的物理实体软考在这一块最爱考的并不是每个部件多深的技术细节而是“五大部件是哪五个”“哪些被集成进了CPU”“存储体系的分工边界”这三层。基本的计算机硬件系统由运算器、控制器、存储器、输入设备和输出设备组成其中运算器和控制器随着微电子技术的发展被集成到了一起统称为中央处理单元也就是你天天听说的CPU。这里要特别留意一个点运算器负责数据的加工处理主要完成算术运算和逻辑运算控制器负责从主存取出指令并进行分析然后指挥各个部件协同工作。很多初学者把这两个角色的职责搞反选择题一出一准丢分。记住一句话就行运算器是干活的控制器是派活的。还有一层容易忽略的是寄存器它是CPU内部的记忆设备临时存放指令、数据和运算结果速度比主存快得多。软考真题曾经直接问“寄存器与主存相比哪个速度更快”答案是寄存器因为寄存器在CPU内部。存储器的考察重点是内部存储器和外部存储器的对比。内存速度快、容量小临时存放运行所需的程序、数据和中间结果外存容量大、速度慢用于长期保存信息。习惯上将CPU和主存储器的有机组合称为主机输入输出设备位于主机之外。这里有个概念判断题的经典陷阱题目说“主机由CPU和主存组成”有的考生会认为主机也应该包含硬盘实际上硬盘属于外部存储器不在主机范畴内。2.2 软件系统系统软件与应用软件的边界判定计算机软件是程序、数据和相关文档的集合这是软考给软件下的标准定义。软件系统分成系统软件和应用软件两大类两者的边界判定几乎每年都出题。系统软件用于管理、运行、维护计算机资源典型代表是操作系统、编译程序、数据库管理系统应用软件则是为特定问题领域开发的程序比如办公软件、图像处理软件、财务系统。考场上常见的出法是把几个软件混在一起让考生选出哪个属于系统软件或者哪个属于应用软件。最稳妥的判断标准不是“常用不常用”而是“它服务的是计算机本身还是用户的业务需求”。操作系统管理CPU、内存、设备属于系统软件一个考勤管理系统服务于企业HR业务属于应用软件。还有一类容易翻车的软件叫“中间件”比如消息队列、应用服务器它们躺在系统软件和应用软件之间初级考试一般不会往这个深度出题但考生心里要有个印象。软件这部分还有一句值得画线的话计算机系统中仅有硬件系统只具备计算的基础并不能真正运算。只有把解决问题的步骤编制成程序并输入内存运行才能完成运算。这句话是冯·诺依曼“存储程序”思想的通俗表达也是后面第四章的引子。2.3 计算机分类六种机型在选择题里的高频考法计算机分类这一小节内容不多但属于低频送分题白给的分不要丢。资料里把计算机分成六类个人移动设备、桌面计算机、服务器、集群/仓库级计算机、超级计算机和嵌入式计算机。个人移动设备指平板、手机桌面计算机就是个人PC两者的区分点是便携性和形态而不是性能。服务器的关键词有三个大规模、可靠、高可用强调可用性、可扩展性和很高的吞吐率。集群/仓库级计算机是把数万个服务器连接在一起形成的大规模集群这个概念的考点在“数万”这个数量级描述上。超级计算机性能比个人电脑强许多能耗巨大我国的超级计算机系列资料里写得很清楚——银河、天河、曙光、神威这四个名字要能匹配上“超级计算机”这个分类。嵌入式计算机是选择题最喜欢拿出来混淆考生的类别。它的特征是为特定应用场景设立对功能、可靠性、成本、体积、功耗有严格要求例如微波炉、洗衣机、数码产品、网络交换机、汽车电子。考试常见的干扰项是“嵌入式计算机就是个人电脑的小型化”这句话是不对的。嵌入式系统的特点是专用而非通用评估标准首先是满足特定场景约束而不是追求综合性能。3. 数据表示与运算数制互转的速算套路与常见失分点3.1 四种进位计数制的本质基数和位权先理解再做题所有进位计数制都绕不开两个概念基数和位权。基数是某进制中数码的种类数十进制用了0到9十个不同数码基数R10二进制只用了0和1基数R2八进制用了0到7基数R8十六进制用了0到9加上A到F共十六个数码基数R16。进位规则也很好对应十进制逢十进一二进制逢二进一八进制逢八进一十六进制逢十六进一。位权这个抽象概念建议按“位置价值”来理解。每个数位上的数码乘上该位置对应的固定数才是这一位真正代表的数值。位权的大小是R的某次幂i为数码所在位置的序号。注意序号的标定方式小数点向左第1位是第0位依次向左是第1位、第2位小数部分第一位是第-1位。这里容易让人栽跟头——很多人习惯按“第一位、第二位”来数于是把个位的位权算成了R^1而不是R^0后边所有计算直接偏一位。四种进制的特征用资料里的表格可以总结得很清楚十进制基数为10数码0到9逢十进一二进制基数为2数码0和1逢二进一八进制基数为8数码0到7逢八进一十六进制基数为16数码0到9加上A、B、C、D、E、F逢十六进一。这个表格建议抄一遍动手抄的过程比盯着看记忆效果好得多。我当时复习时把这张表贴在显示器边上每天扫一眼考试时连推导都不用直接条件反射填答案。3.2 非十进制转十进制位权相加法的具体操作非十进制数转换为十进制数的方法叫位权相加法。原理不复杂把一个R进制数按位权展开每一位的数码乘以对应位权然后求和。通用公式是F a_(n-1) × R^(n-1) a_(n-2) × R^(n-2) ... a_1 × R^1 a_0 × R^0 a_(-1) × R^(-1) ... a_(-m) × R^(-m)三个教材里的标准可以拿来验证(1011.1)_2 1×2^3 0×2^2 1×2^1 1×2^0 1×2^(-1) 8 0 2 1 0.5 (11.5)_10(71)_8 7×8^1 1×8^0 56 1 (57)_10(101A)_16 1×16^3 0×16^2 1×16^1 10×16^0 4096 0 16 10 (4122)_10做题时先把位权序列写出来再逐位乘加比心算硬算至少快一倍。训练时可以用下面这段 Python 验证自己的笔算结果# 把任意进制字符串按位权展开转成十进制 def any_base_to_dec(digits, base): digits: 数字字符串支持0-9和A-Fbase: 当前进制基数 hex_map {A: 10, B: 11, C: 12, D: 13, E: 14, F: 15} parts digits.split(.) # 按小数点拆成整数部分和小数部分 integer_part parts[0] fraction_part parts[1] if len(parts) 1 else total 0.0 # 整数部分从最右边(第0位)开始向左处理 for idx, char in enumerate(reversed(integer_part)): val hex_map.get(char.upper(), int(char)) total val * (base ** idx) # 小数部分从第一位(-1次方)开始向右处理 for idx, char in enumerate(fraction_part, start1): val hex_map.get(char.upper(), int(char)) total val * (base ** (-idx)) return total # 验证教材例题 print(any_base_to_dec(1011.1, 2)) # 输出 11.5 print(any_base_to_dec(71, 8)) # 输出 57.0 print(any_base_to_dec(101A, 16)) # 输出 4122.0代码本身不复杂核心逻辑就是两层循环分别处理整数部分和小数部分。整数部分从右往左遍历第0位权是base^0小数部分从左往右遍历第一位权是base^(-1)。参数base按题目进制传入填空时注意十六进制字符串里的字母要能正确映射到10到15。我自己的训练习惯是用这个脚本生成随机题目再手动笔算算完用脚本对答案每天十道题一周后手速明显上来了。3.3 十进制转非十进制整数除基取余、小数乘基取整十进制整数转非十进制用除基取余法。一直用目标进制基数去除十进制整数记录每次的余数直到商为0然后把余数从下往上排列。教材标准例子是把75转成二进制2除75余1再除37余1除18余0除9余1除4余0除2余0除1余1从下往上读得到(1001011)_2。除基取余的坑在排列方向上。余数是先出现低位后出现高位所以必须逆序读。有的初学者顺着一路写下来得到(1101001)_2差之毫厘谬以千里。验证方式是倒推把得到的二进制按位权展开如果展开结果不是75说明方向写反了。同样用75转八进制验证75除以8余39除以8余11除以8余1从下往上读得到(113)_8。这道题在考试里手算起来比二进制快很多因为除的次数少这也是为什么出题人喜欢让考生把十进制同时转成多种进制。十进制小数转非十进制用乘基取整法。用基数去乘小数部分取乘积的整数部分作为一位目标进制数字剩下的小数部分继续乘基数直到小数部分为零或达到精度要求。教材标准例子是把0.3125转二进制0.3125 × 2 0.625取整数0 0.625 × 2 1.25取整数1 0.25 × 2 0.5取整数0 0.5 × 2 1.0取整数1结果从上往下排列也就是第一次乘得的整数是最高位得到(0.0101)_2。注意这里的读法方向和除基取余正好相反小数乘法是正着读整数除法是倒着读。def dec_fraction_to_base(fraction, base, precision10): 十进制纯小数转任意进制precision控制最大转换位数 result [] f fraction for _ in range(precision): f * base digit int(f) # 取整数部分作为一位结果 result.append(str(digit)) f - digit # 只保留小数部分继续乘 if f 1e-9: # 小数部分归零就停止 break return 0. .join(result) # 验证教材例题0.3125 - 二进制 print(dec_fraction_to_base(0.3125, 2)) # 输出 0.0101这段脚本的循环里f * base 完成“乘基数”的操作int(f)取出整数位f - digit消去整数部分。precision参数保护好因为部分十进制小数转二进制是无限循环的没有精度限制会跑出极长的小数串。软考考到无限循环的概率不高教材和真题大多选能有限转换的数碰到循环反而要警惕是不是自己算错了。3.4 二、八、十六进制互转三位并一位四位拆一位二进制转换到八进制和十六进制有速算方法不需要走十进制中转。原理是2^382^416所以一位八进制数恰好对应三位二进制一位十六进制数恰好对应四位二进制。二进制转八进制的操作分两步整数部分从右向左每三位一组不足三位左边补0小数部分从左向右每三位一组不足三位右边补0。然后每一组三位二进制按8421码直接译成一位八进制数。教材标准例子(1100110111.001100)_2 整数三位分组是 001 100 110 111对应 1 4 6 7小数分组是 001 100对应 1 4结果是(1467.14)_8。二进制转十六进制同理改成四位一组。例如(100010110111.0011)_2整数四位分组是 1000 1011 0111对应 8 B 7小数分组是 0011对应 3结果为(8B7.3)_16。反向操作更机械八进制每一位拆成三位二进制数十六进制每一位拆成四位二进制数按序拼接即可。教材标准例子(2367.46)_8拆成 010 011 110 111.100 110整理后是(10011110111.10011)_2。9B7.5)_16拆成 1001 1011 0111.0101得到(100110110111.0101)_2。这个技巧刷题时价值极高。直接按“三位一段、四位一段”分组比先转十进制再转目标进制省一半运算量。我自己备考时把常用对应关系做成了快速记忆表二进制三位000到111对应八进制0到7四位0000到1111对应十六进制0到F。八进制和十六进制之间没有直接的三位/四位映射关系资料里也明确说了需要先转二进制碰到二转十六的混合题老老实实拆位拼接别试图找八进制到十六进制的捷径。4. 冯·诺依曼工作原理与指令系统从理论到指令执行流程4.1 存储程序原理为什么指令和数据要放在同一个存储器第一章里最容易被考生忽略又最值得深挖的是计算机的基本组成及工作原理。现代计算机的工作范式来自冯·诺依曼架构核心思想是把程序指令和数据存储在同一个存储器里通过指令计数器顺序访问和处理。听起来平平无奇但这个设计在当时是革命性的程序不再是“外部接好的线”而是可以被写入、被修改、被顺序执行的数据。冯·诺依曼体系对应到第一章的硬件五大部件正好一一映射存储器存放指令和数据运算器处理数据控制器负责取指令和译码输入设备接收外部信息输出设备反馈处理结果。考试常考的一句表述是“程序和数据以同等地位存放在存储器中可以按地址访问”这里要抓住两个关键词同等地位和按地址访问。存储程序的思想还解释了一个初学者容易困惑的问题为什么不把程序永久烧在硬件里因为同样的硬件装入不同的程序就能干不同的事这就是通用计算机和嵌入式专用设备的关键差异。嵌入式计算机之所以“专用”部分原因正是它的程序往往固化在只读存储器或Flash里不像通用计算机那样频繁更换软件。4.2 指令系统的组成操作码与地址码的分工指令系统是计算机硬件能理解和执行的命令集合设计决定了计算机的功能和性能。每条机器指令在格式上分成两个基本区域操作码和地址码。操作码告诉CPU“做什么”比如加、减、传送、跳转地址码告诉CPU“对谁做”给出操作数的位置或存放结果的位置。初级软考在这一节的深度通常停留在概念辨析上。地址码部分的考点是几种基本寻址方式立即寻址直接给出操作数本身、直接寻址给出操作数所在内存地址、间接寻址给出的是“存放地址的地址”。三者的区分技巧是看地址码字段里装的是什么——是数值本身还是地址还是地址的地址。指令系统按功能分类也要能认出来数据传送指令、算术运算指令、逻辑运算指令、控制转移指令、输入输出指令。考试喜欢给一条具体指令让考生归类比如“JMP”就是典型的控制转移指令“MOV”是数据传送指令。指令系统的设计取向还有两个对立方向CISC复杂指令系统和RISC精简指令系统初级考试只需要记住RISC的特点是指令格式规整、执行速度快CISC的指令功能强但格式复杂选择题里出现过直接对比的选项。4.3 指令执行周期取指、译码、执行的完整流程一条指令从进入CPU到执行完毕要经历完整的周期。典型的流程是取指、译码、执行然后处理下一条指令循环往复直到程序结束或遇到停机指令。取指阶段根据程序计数器PC提供的地址从主存中取出指令送到指令寄存器IR译码阶段控制器分析操作码确定这是一条什么指令并生成相应的控制信号执行阶段由运算器或相应部件完成实际操作。这里有一个高频考点程序计数器PC在指令执行过程中会自动递增指向下一条指令的地址。程序员视角觉得代码是“顺序执行的”硬件底层的真实推动力就是PC的自动加一。而当程序中出现转移指令时PC会被改写为要跳转的目标地址顺序执行就此中断——这正是控制转移指令存在的原因。理解执行周期对做进制转换之外的“工作原理型”选择题帮助很大。教材里考过类似“取出指令后首先要做什么”的题答案是分析指令的操作码而不是立即执行运算。还有考“哪一条指令会改变PC的正常递增顺序”的题答案当然是无条件转移或条件转移指令。我把这个流程在纸上画成过一个简单循环图在复习时帮了大忙取指(PC指向地址,读主存,送入IR,PC自增) ↓ 译码(控制器分析操作码,生成控制信号) ↓ 执行(运算器/其他部件完成操作) ↓ 判断是否停机,否则回到取指整个流程中程序计数器PC、指令寄存器IR、指令译码器三个部件的名字和职能要能对得上号。软考真题确实直接考过“哪个部件存放当前正在执行的指令”答案是指令寄存器IR不是PC。这类题的设置逻辑是如果考生没分清“下一条地址”和“当前指令”由谁持有就很容易在两者之间犹豫。4.4 多媒体系统简介知道考点边界在哪就够了第一章最后的多媒体系统简介内容量最少考试占比也最低通常是一道选A还是选B的难度。多媒体系统涉及计算机如何处理和表示不同类型的数据素材包括文本、图形、图像、音频和视频。这一节在PPT里给出的是导向性知识建议按“数据表示维度”去记忆图形和图像的区别在于矢量图和位图、音频和视频的关键参数概念、以及多媒体数据压缩存在的必要性。初级考试在这一节几乎不考计算题最多问“下面哪个是多媒体数据压缩标准”之类的选项题。资料里没有展开音频采样率、视频帧率的具体计算方式备考时不需要主动往深处挖按考纲边界来把常见分类记清楚即可。我个人的策略是把这一节压缩成十五分钟的记忆量把省下的时间全部投入到进制转换的刷题中去。5. 避坑排查复习这份PPT时最容易踩的五个坑5.1 二进制小数转换“算不完”现象练习十进制小数转二进制时运算卡在循环小数里出不来不确定是自己算错还是题目有问题。原因十进制小数转二进制时乘2取整的过程可能永远无法让小数部分归零比如0.85转二进制就会无限循环。解决软考真题很少使用会产生无限循环的小数教材例题用的0.3125是能精确转换成有限位二进制的数。遇到“算不完”的情况时先检查自己每一步的乘法和减法有没有进位错误再用第3.3节里的Python脚本算一遍验证。如果脚本输出一串很长的循环数字说明题目给了精度限制按题目要求四舍五入到指定小数位数即可。5.2 十六进制A到F的数值换算出错现象把十六进制数转十进制时算出A1或F16整体结果偏差很大。原因对十六进制数码的数值对应关系不熟练尤其是A、B、C、D、E、F六个字母平时练习少考场一紧张就按英语字母序推断数值。解决强制记牢六个固定映射A10、B11、C12、D13、E14、F15。文档里有一张很直观的十六进制数码对应表建议动手抄一遍。做转换题时先把映射写在草稿纸边上再开始计算不要边算边回忆。这一条没有技巧只有重复。5.3 位权序号从第几位开始数错了现象算(1011.1)_2到十进制得出13.5而不是11.5差出了整数部分。原因把整数最右边的位权当成2^1正确应该是2^0。初学时按“从左到右第一位、第二位”的习惯数位权在个位上栽了跟头。解决记住一条铁律整数部分最右边是第0位位权是基数^0。教材原句写得很清楚小数点向左第1位为第0位。计算前先在纸上标好每一位的序号和对应位权再做乘加。养成这个习惯后位权类题目基本不会丢分。5.4 二进制与八、十六进制互转时分组方向错误现象二进制转八进制时从左往右三位一组结果完全对不上标准答案。原因整数部分分组方向是从右向左小数部分是从左向右。有的考生弄混了整数部分也从左往右切首尾巴补位做错整道题报废。解决整数部分从右往左分组小数部分从左往右分组两边分组方向相反这件事本身是考点。# 正确分组方法演示 def group_binary_for_octal(binary_str): 二进制转八进制分组整数右往左、小数左往右 parts binary_str.split(.) int_part parts[0] frac_part parts[1] if len(parts) 1 else # 整数部分从右往左三位一组左边补0 int_grouped int_part[::-1] int_groups [int_grouped[i:i 3] for i in range(0, len(int_grouped), 3)] int_padded [g.ljust(3, 0) for g in int_groups] # 每组不足三位左边补0 int_result .join(str(int(g, 2)) for g in reversed(int_padded)) # 小数部分从左往右三位一组右边补0 frac_groups [frac_part[i:i 3] for i in range(0, len(frac_part), 3)] frac_padded [g.ljust(3, 0) for g in frac_groups] # 每组不足三位右边补0 frac_result .join(str(int(g, 2)) for g in frac_padded) return int_result . frac_result if frac_part else int_result print(group_binary_for_octal(1100110111.001100)) # 输出 1467.14代码里int_part[::-1]实现了整数部分倒序分组左边补0用的是ljust小数部分直接用顺序分组。两个方向的补位逻辑不同恰恰是手工做题最容易忽视的细节。5.5 只看不练知识点在脑子里留不住现象PPT翻了一遍觉得全看懂了关上资料做题时连二进制到八进制的分组方向都要想半天。原因计算机系统基础属于“眼会手不会”的重灾区。进制转换是程序性知识光看推导过程记不住肌肉记忆。PPT里知识点排得再清楚不落到笔头上等于白看。解决每天固定做十道进制转换题题型轮换非十进制转十进制、十进制转二进制、十进制转八进制、二进制转十六进制、十六进制转二进制各两道。做题时用手机计时每道题控制在30秒内。软考上午卷平均每题答题时间不到50秒练到30秒以内才算真正过关。6. 考前三天快速验证一页纸自查加二十道手算题6.1 知识点自查清单考前三天不要从头翻PPT了直接对着清单逐条自查。能脱口说出答案的过卡壳超过十秒的马上翻书补。我自己用的检查清单整理如下你可以直接抄走使用知识点必须能当场说出的结论五大部件运算器、控制器、存储器、输入设备、输出设备CPU组成运算器控制器集成在一起CPU是硬件核心主存与外存主存速度快容量小外存速度慢容量大软件定义程序、数据、相关文档的集合系统软件操作系统、编译程序、数据库管理系统数制基数十进制10、二进制2、八进制8、十六进制16位权规则整数最右位是第0位位权是R^0除基取余法十进制整数转非十进制余数从下往上排乘基取整法十进制小数转非十进制整数从上往下排二转十六整数右往左四位一组小数左往右四位一组PC与IRPC存下一条指令地址IR存当前正在执行的指令这一页纸是整个第一章的骨架每天早晚各过一遍每次不超过五分钟。6.2 手算速度自测标准速度自测用一套固定题目二十道题每题30秒限时算完对照答案。题目不需要太难重点是考点覆盖面要全。一份可以反复用到考前的自测题组应该是这样的两道二进制转十进制、两道十进制转二进制、一道十进转八进制、一道十进转十六进制、三道二进制转八进制、三道二进制转十六进制、三道八进制转二进制、三道十六进制转二进制外加两道带小数的混合转换。做题时准备好草稿纸规规矩矩写出位权序列再计算不需要每一题都用代码验证。# 考前自测批改脚本直接批量核对答案 def self_check(cases): cases: [(进制字符串, 原进制, 目标进制), ...] from collections import deque for expression, base, result in cases: # 用之前定义的 any_base_to_dec 做中转验证 decimal_val any_base_to_dec(expression, base) # 十进制整数转目标进制 n int(decimal_val) digits [] if n 0: digits [0] else: while n: digits.append(0123456789ABCDEF[n % result]) n // result converted .join(reversed(digits)) print(f{expression} base{base} - base{result}: {converted})参数cases是通用设计每组数据表示“哪个数、从第几进制、转到第几进制”。实际批改时只需要把算式和答案跑一遍自己错在哪一步一目了然。特别注意脚本处理不了小数的双向转换带小数的题目还是对照教材例题手动核验。6.3 最后一轮错题归因考前那几天最容易焦虑但从我备考的经验来看真正拉开分数差距的往往不是难题而是基础概念题的手误。每次做完自测把错题做一个三列归因错因类型是“概念记忆型”“计算粗心型”还是“步骤顺序型”。概念记忆型的错题回到清单重新背计算粗心型的错题放慢速度重算一遍步骤顺序型的错题用分组演示代码在脑子里过一遍流程。从那以后我每轮考前三天复习都会强制自己走一遍这套流程早晚各五分钟过知识点清单每天一套二十道手算题错题按三列归因分类处理。这套办法看上去朴素但对这类“记住就能得分、练熟就能提速”的章节来说确实是最有效的收尾方式。第一章复习扎实了后边的数据结构和算法部分才有稳定的心态去啃。希望这份拆解能帮你把计算机系统基础变成真正稳拿分的板块。本文还有配套的精品资源点击获取