
简介这份PDF练习题集面向计算机与网络方向的初学者及备考人群系统梳理计算机基础与网络基础两大知识板块帮助读者通过做题巩固概念、查漏补缺。内容覆盖计算机特点与分类、冯·诺依曼体系结构、四代计算机发展历程、CAI/CAM/CAD等应用缩写以及二进制、八进制、十进制、十六进制之间的数制转换、字节与KB/MB/GB存储单位换算、汉字编码与ASCII码、指令与程序语言等高频考点题型以选择题为主适合课堂练习、期末复习或考证自测。资源包共1个PDF文件约353KB轻量易存手机与电脑均可随时翻阅。目前已有53人学习下载可作为计算机一级、二级或网络基础课程的配套刷题材料帮助读者在有限时间内快速检验对基础概念的掌握程度。1. 一份练习题 PDF 背后计算机基础与网络基础到底该练什么很多人拿到「计算机基础知识和网络基础知识练习题.pdf」的第一反应是——刷题。但真正在一线带过新人、做过内训的工程师都清楚这类练习题的价值不在题目本身而在于它逼你把那些平时靠 IDE 补全、靠搜索引擎兜底的知识点重新在脑子里过一遍。计算机基础知识涵盖进制转换、存储层次、操作系统进程调度、数据结构与算法复杂度网络基础知识则覆盖 OSI 与 TCP/IP 分层、IP 编址与子网划分、TCP 三次握手与四次挥手、常见协议端口号。这两块内容看起来是「考证味」很重的八股实际上却是排查线上故障、读懂抓包结果、估算容量与延迟的地基。这份练习题适合三类人准备计算机等级考试或软考的学生、刚入行需要补底层知识的开发与运维、以及想系统梳理知识盲区的转行者。接下来我不讲空泛的学习方法而是把这份练习题里最常出现的题型拆成可复现的推导过程让你做完一遍就能自己出题。2. 计算机基础知识练习题从进制到进程调度的推导路径2.1 进制转换与补码为什么笔算比计算器更靠谱进制转换是计算机基础知识练习题里出现频率最高的题型没有之一。常见考法有三种十进制转二进制、二进制转十六进制、以及负数补码表示。很多人习惯用计算器或 Python 的bin()直接出结果但考试和面试要的是手算过程而且手算能帮你建立「位宽」的直觉——这在后面算子网掩码和 IP 地址时直接复用。先看十进制转二进制。整数部分用「除 2 取余、逆序排列」小数部分用「乘 2 取整、顺序排列」。以 173.8125 为例# 十进制整数部分转二进制除2取余逆序 def dec_to_bin_int(n): if n 0: return 0 bits [] while n 0: bits.append(str(n % 2)) # 取余数 n // 2 # 整除2 return .join(reversed(bits)) # 逆序拼接 # 十进制小数部分转二进制乘2取整顺序 def dec_to_bin_frac(x, precision8): bits [] for _ in range(precision): x * 2 bit int(x) # 取整数部分 bits.append(str(bit)) x - bit # 保留小数部分继续 if x 0: break return .join(bits) print(dec_to_bin_int(173)) # 10101101 print(dec_to_bin_frac(0.8125)) # 1101逻辑说明整数部分每次对 2 取余得到当前最低位商继续参与下一轮最后逆序小数部分每次乘 2整数位就是当前最高小数位小数位继续。参数precision控制小数最多保留几位因为很多十进制小数在二进制下是无限循环的比如 0.1。实际做题时如果题目没给精度一般保留到能凑整为止。补码是另一个高频考点。规则很简单正数补码等于原码负数补码等于原码除符号位外按位取反再加 1。以 8 位为例-45 的补码def twos_complement(n, bits8): if n 0: return format(n, f0{bits}b) # 负数2^bits n 的二进制 return format((1 bits) n, f0{bits}b) print(twos_complement(-45)) # 11010011这里用(1 bits) n是补码的数学定义比「取反加一」更不容易出错。参数bits决定位宽8 位、16 位、32 位结果完全不同做题时一定要看清题目给的位宽。我见过太多人因为漏看位宽把 -45 写成 6 位补码直接丢分。提示手算补码时先写出绝对值的二进制再从右往左找到第一个 1这个 1 及其右边不变左边全部取反比「取反加一」快且不易错。2.2 进程状态与调度算法把概念题变成可验证的推演计算机基础知识练习题里另一大类是操作系统部分尤其是进程三态转换和调度算法计算。进程三态指就绪、运行、阻塞转换关系是就绪→运行被调度、运行→就绪时间片用完、运行→阻塞等待 I/O、阻塞→就绪I/O 完成。注意没有「阻塞→运行」这条边这是选择题最爱设的陷阱。调度算法常考先来先服务FCFS、短作业优先SJF、时间片轮转RR。题目一般给一组进程的到达时间和运行时间让你算平均周转时间。与其死记公式不如写个小脚本把每种算法跑一遍做完一遍就再也不会忘def fcfs(procs): # procs: [(pid, arrive, burst), ...] procs sorted(procs, keylambda p: p[1]) # 按到达时间排序 time 0 total 0 for pid, arrive, burst in procs: time max(time, arrive) # 若CPU空闲则跳到到达时间 time burst turnaround time - arrive # 周转时间 完成 - 到达 total turnaround print(f{pid}: 完成{time}, 周转{turnaround}) print(f平均周转{total/len(procs):.2f}) fcfs([(P1, 0, 7), (P2, 2, 4), (P3, 4, 1)])逻辑说明time维护当前时刻如果进程到达时间晚于当前时刻CPU 空闲直接跳到到达时间。周转时间等于完成时间减到达时间。参数就是进程列表每个元素是进程号到达时间运行时间。把排序规则换成按运行时间排序就是 SJF加上时间片循环就是 RR。自己改几行代码跑一遍比看十遍书都管用。注意SJF 分抢占式和非抢占式题目没说「抢占」时默认非抢占这是最常见的失分点。3. 网络基础知识练习题子网划分与协议分析的动手做法3.1 子网划分从掩码到可用主机数的完整推导网络基础知识练习题里分值最高、最容易翻车的题型就是子网划分。典型问法给定一个网段如 192.168.10.0/24要划分成 6 个子网每个子网至少容纳 25 台主机求子网掩码和每个子网的地址范围。解题顺序固定先由主机数定主机位再由子网数定子网位。每个子网 25 台主机需要 2^n - 2 ≥ 25n5 时 30≥25 满足所以主机位 5 位。原来 /24 有 8 位主机位借走 3 位做子网位剩下 5 位主机位新掩码就是 /27即 255.255.255.224。3 位子网位能划分 2^38 个子网满足 6 个的要求。用代码把每个子网的范围算出来避免手算出错import ipaddress def subnet_split(network, new_prefix): net ipaddress.ip_network(network, strictFalse) subnets list(net.subnets(new_prefixnew_prefix)) for i, sub in enumerate(subnets): hosts list(sub.hosts()) # 排除网络号和广播号 print(f子网{i1}: {sub.network_address} 掩码{sub.netmask} f范围{hosts[0]}~{hosts[-1]} 广播{sub.broadcast_address} f可用{len(hosts)}) subnet_split(192.168.10.0/24, 27)逻辑说明ipaddress是 Python 标准库subnets(new_prefix27)自动按 /27 切分。hosts()返回可用主机地址自动排除网络地址和广播地址。参数new_prefix就是新的掩码长度改这个值就能验证不同划分方案。注意strictFalse允许传入非网络地址的 IP否则会报错。子网位新掩码子网数每子网主机位可用主机数1/25271262/2646623/2785304/2816414这张表建议直接背下来做题时先查表再验证速度能快一倍。注意可用主机数永远是 2^主机位 - 2减掉的 2 是网络地址和广播地址这是子网划分题最核心的公式。3.2 TCP 握手抓包验证把协议题变成看得见的数据网络基础知识练习题里关于 TCP 三次握手的题目很多人靠背「SYN、SYNACK、ACK」过关但一到实际排查就连不上。我的做法是本地抓一次包把练习题里的抽象描述对应到真实报文上。用 tcpdump 抓一次本地回环的 TCP 连接# 抓取 lo 接口上 8080 端口的 TCP 包-S 显示绝对序列号-nn 不解析域名和端口名 sudo tcpdump -i lo -S -nn tcp port 8080 -c 10然后在另一个终端发起连接# 用 nc 发起一次 TCP 连接触发三次握手 nc -v 127.0.0.1 8080抓到的前三个包就是握手过程。第一个包标志位是[S]序列号是客户端初始序列号 client_isn第二个包是[S.]序列号是服务端初始序列号 server_isn确认号是 client_isn1第三个包是[.]序列号 client_isn1确认号 server_isn1。参数-S很关键不加的话 tcpdump 显示的是相对序列号看不出确认号加一的关系。提示如果抓不到包先确认端口有没有服务在监听用ss -lntp查看。回环接口不需要 root 也能抓但物理网卡需要 sudo。把抓包结果和练习题里的握手图对照你会发现题目里说的「确认号 对方序列号 1」不是死记的规则而是 SYN 和 FIN 各消耗一个序列号的直接结果。理解了这一点四次挥手为什么是四次、TIME_WAIT 为什么等 2MSL都能自己推出来。4. 避坑与排查练习题里最容易做错的 5 个地方4.1 进制题漏看位宽导致补码全错现象题目给 -45 求补码你算出 11010011但题目要求 16 位正确答案是 1111111111010011。原因补码的符号位扩展规则是高位补 1不是补 0。解决做题先圈出位宽负数补码一律先按位宽写出全 1 前缀再填低位。4.2 子网划分把网络号和广播号算进可用主机现象/27 子网你写可用主机 32 台实际只有 30 台。原因忘了减去网络地址和广播地址。解决记住公式 2^主机位 - 2主机位为 0 或 1 时/31、/32是特例点对点链路才用。4.3 进程调度题把到达时间当成开始时间现象FCFS 计算时直接用到达时间加运行时间忽略了 CPU 可能空闲。原因没有维护当前时刻变量。解决每次计算前先time max(time, arrive)这一步能救回所有调度计算题。4.4 TCP 题把确认号理解成累计确认的字节数现象题目问第二次握手的确认号你填 client_isn正确答案是 client_isn1。原因SYN 标志消耗一个序列号。解决凡是带 SYN 或 FIN 的报文序列号都要额外加一这是 TCP 协议规定的。4.5 协议端口号张冠李戴现象把 HTTPS 写成 8080把 DNS 写成 53 但记成 UDP 和 TCP 混用。原因只背了数字没记传输层协议。解决整理一张端口表标注 TCP/UDPDNS 同时用 53 的 UDP 和 TCPDHCP 用 67/68 的 UDP这些细节选择题必考。5. 把练习题变成自己的题库一个可复用的自测脚本刷完一遍练习题真正的提升来自「自己出题考自己」。我一般会写一个随机出题脚本把进制转换、子网划分、端口号三类题混在一起每次运行随机生成做完立刻对答案。这样既不依赖那份 PDF又能反复练到形成肌肉记忆。import random import ipaddress def gen_bin_question(): n random.randint(1, 255) answer format(n, 08b) return f十进制 {n} 转 8 位二进制, answer def gen_subnet_question(): prefix random.choice([25, 26, 27, 28]) net ipaddress.ip_network(f192.168.{random.randint(0,255)}.0/{prefix}, strictFalse) hosts list(net.hosts()) q f{net} 的可用主机数是多少范围首地址 a f{len(hosts)} 台首地址 {hosts[0]} return q, a def gen_port_question(): ports {HTTP: 80/TCP, HTTPS: 443/TCP, DNS: 53/UDPTCP, SSH: 22/TCP, DHCP: 67/68 UDP, SMTP: 25/TCP} proto random.choice(list(ports.keys())) return f{proto} 的默认端口和传输层协议, ports[proto] def run_quiz(rounds5): gens [gen_bin_question, gen_subnet_question, gen_port_question] score 0 for i in range(rounds): q, a random.choice(gens)() print(f\n第{i1}题{q}) user input(你的答案).strip() if user.replace( , ).lower() a.replace( , ).lower(): print(正确) score 1 else: print(f错误正确答案{a}) print(f\n得分{score}/{rounds}) run_quiz()逻辑说明三个生成函数分别对应三类高频题random.choice随机抽一类保证每次练习覆盖面不同。gen_subnet_question用ipaddress动态算答案不会出现题库固定答案被背下来的情况。参数rounds控制题量建议每次 10 题做完看哪类错得多就针对性补。这个脚本我用了两年多最大的价值不是省了买题册的钱而是逼我把每个知识点的边界条件想清楚——比如 /31 子网到底有没有可用主机、DNS 什么时候用 TCP。出题的过程就是查漏的过程比被动刷题效率高得多。如果你也在准备这类考试或者带新人不妨先把这个脚本跑起来再回头翻那份练习题 PDF你会发现很多题一眼就能看出出题人想考什么。希望帮到你。本文还有配套的精品资源点击获取