选择题
1. 有12个platters(最后一个不存数据),每个platter有100个tractor,每个tractor有12个sector,每个sector有512bytes,请问能存多少数据?
A.14.9MB B.11.9MB C.12.9MB D.13.9MB
题解:
计算一个sector的字节数:
- 每个sector有512 bytes。
- 计算一个tractor的容量:
每个tractor有12个sector。
所以,一个tractor的容量 = 12 sectors × 512 bytes/sector = 6144 bytes。
- 计算一个platter的容量:
每个platter有100个tractor。
所以,一个platter的容量 = 100 tractors × 6144 bytes/tractor = 614400 bytes。
- 计算总容量:
有12个platter(但最后一个不存储数据,所以计算前11个platter)。
所以,总容量 = 11 platters × 614400 bytes/platter = 6764800 bytes。
- 因此,能够存储的数据总量为 6,764,800字节,或者约 6.76MB。
2. 有五个不同元素,排序这五个元素最少要比较多少次?
- 信息论下限:比较排序的最小次数,任何基于比较的排序算法,其最小比较次数由 信息论下限 决定:
- 排列可能性:5个元素共有 5!=120 种不同的排列方式。
- 决策树模型:每次比较产生两种结果(如 < 或 >),决策树的高度 ℎ 需满足 2^ℎ≥120。
- 计算下限: ℎ≥log2(120)≈6.906向上取整后,ℎ=7,即至少需要 7次比较。
- 实际算法验证:严谨的 Ford-Johnson算法为例(严格7次比较):
- 比较3和1 → 1<3。
- 比较4和5 → 4<5。
- 比较1和4 → 1<4→ 前4元素顺序为 [1,3,4,5][1,3,4,5]。
- 插入2到前4序列:
- 比较2和3 → 2<3。
- 比较2和1 → 2>1→ 插入到1和3之间。
- 调整剩余元素:
- 总计7次比较,覆盖所有可能情况。
扩展知识:常见排序算法(比较排序)
- 冒泡排序(Bubble Sort):重复遍历序列,比较相邻元素并交换,使较大元素逐渐“浮”到末尾。
- 时间复杂度: ◦ 最好->()(已排序时) ◦ 平均/最差->(2)
- 空间复杂度:(1)(原地排序)
- 特点:简单但效率低,通过交换相邻元素排序。
- 选择排序(Selection Sort):每次从未排序部分选择最小元素,与未排序部分的起始位置交换。
- 时间复杂度:最好/平均/最差:(2)
- 空间复杂度:(1)(原地排序)
- 特点:每次选择最小元素放到已排序序列末尾。
- 插入排序(Insertion Sort):将未排序元素逐个插入已排序部分的正确位置,类似整理扑克牌。
- 时间复杂度: ◦ 最好:()(已排序时) ◦ 平均/最差:(2)O(n2)
- 空间复杂度:(1)O(1)(原地排序)
- 特点:适用于小规模或基本有序数据。
- 快速排序(Quick Sort):选取基准元素(pivot),将序列分为小于和大于基准的两部分,递归排序。
- 时间复杂度: ◦ 最好/平均:(log) ◦ 最差:(2)(如已排序且未优化)
- 空间复杂度:(log)(递归栈,原地排序)
- 特点:实际应用广泛,通过分治和基准元素划分。
- 归并排序(Merge Sort):将序列递归拆分为子序列,排序后合并(合并时保持顺序)。
- 时间复杂度: ◦ 最好/平均/最差:(log)
- 空间复杂度:()(需额外存储空间)
- 特点:稳定排序,适合外部排序(如大文件)。
- 堆排序(Heap Sort):构建最大堆(或最小堆),逐个取出堆顶元素重构堆。
- 时间复杂度: ◦ 最好/平均/最差:(log)
- 空间复杂度:(1)(原地排序)
- 特点:利用堆结构选择最大/小元素。
- 希尔排序(Shell Sort):希尔排序(Shell Sort)是一种改进的插入排序算法,通过分组插入排序逐步减少元素移动次数,提升效率。
- 时间复杂度: ◦ 最好:(log) ◦ 平均:取决于间隔序列,通常为 (1.3) ◦ 最差:(2)
- 空间复杂度:(1)(原地排序)
- 特点:插入排序的改进,通过分组减少逆序对。
3.现在有三个任务:J1=2h J2=3h J3=4h,在单核处理器中以什么顺序执行效率最高?
- 最优顺序:J1(2小时)→ J2(3小时)→ J3(4小时)。
- 优化目标:最小化平均等待时间和平均周转时间。这样J1等待时间=0;J2等待时间=2,J3等待时间=3。
- 总完成时间(Makespan):所有顺序均为 2+3+4=9 小时(不可优化)。
4. 下面的哪一个层和协议是对应的?传输层-PGP;应用层-SSLTelnet;网络层-IPsec;数据链路层-PPTP。
网络层 ↔ IPsec,其余选项均存在错误
- PGP(应用层):直接服务于电子邮件加密,依赖用户应用程序(如Outlook),不处理传输层的数据分段或流量控制。
- SSLTelnet(传输层):SSLTelnet并不是一个独立的协议或技术,而是指在Telnet协议中加入SSL/TLS加密层的技术实现。通过在Telnet协议中集成SSL/TLS,可以实现数据的加密传输,增强远程登录的安全性。SSL/TLS在TCP之上为应用层(HTTP、SMTP等)提供加密,属于传输层安全协议。
- IPsec(网络层):直接在IP数据包中封装加密信息,实现网络层端到端的安全通信(如VPN)。
- PPTP(网络层/传输层):使用TCP端口1723建立控制通道,GRE协议(IP协议号47)封装数据,属于网络层以上,而非数据链路层。数据链路层协议如L2TP(需结合IPsec加密)、Ethernet、PPP。
扩展知识:TCP/IP四层模型(实际工程模型)
层级 |
对应OSI层 |
核心功能 |
典型协议/设备 |
网络接口层 |
物理层+数据链路层 |
物理介质传输和本地网络数据帧处理 |
Ethernet、Wi-Fi、MAC地址 |
网际层 |
网络层 |
IP地址寻址和路由 |
IP、ICMP、路由器(Router) |
传输层 |
传输层 |
端到端通信和可靠性控制 |
TCP、UDP |
应用层 |
会话层+表示层+应用层 |
整合高层功能,直接面向用户应用 |
HTTP、DNS、SMTP、SSH |
5. HTTPS协议可以保护下面哪一项?XSS;Browser hijacking;SQL injection;DDos。
HTTPS无法直接保护XSS、SQL注入、DDoS,但对部分Browser Hijacking(如中间人攻击)有防护作用。
- XSS:攻击者通过输入或参数提交恶意脚本(如JavaScript),当其他用户访问包含该脚本的页面时,脚本在受害者浏览器中执行,窃取数据或操控用户会话。
- 防御方法:输入过滤、输出编码、CSP(内容安全策略)。
- 示例:将用户输入的
转义为 <script>
。
- Browser Hijacking
- HTTPS防护场景:阻止公共Wi-Fi下的流量劫持(如运营商广告注入)。
- 无法防护场景:恶意浏览器扩展、本地木马修改Hosts文件。
- SQL注入
- 防御方法:参数化查询、ORM框架、输入验证。
- 示例:使用 PreparedStatement 替代字符串拼接SQL语句。
- DDoS:避免分布式攻击源(利用被控制的僵尸网络同时发起攻击,使流量来源难以追踪和封堵)+资源耗尽(通过海量请求淹没目标,导致服务器、网络设备或应用程序过载,正常用户无法访问)
- 防御方法:流量清洗、CDN分流、IP黑名单、速率限制。
- HTTPS的影响:加密握手(TLS)可能增加服务器计算负担,加剧DDoS效果。
- DoS(拒绝服务攻击):单点攻击(单一IP发起)。DDoS:多源协同攻击,规模更大、隐蔽性更强。
- 应用层漏洞(XSS、SQL注入)→ 代码审计、WAF(Web应用防火墙)。
- DDoS → 基础设施防护(云服务商的Anti-DDoS方案)。
- 浏览器劫持 → 用户安全意识教育、安装可信扩展。
6. 哈希函数H(k)=(2*k)mod6,负载因子为0.6构建(8,10,9,12,15,20)的哈希表,查找需要比较的平均次数为多少?
- 步骤一:原题设定存在矛盾:
- 哈希函数:H(k) = (2k) mod 6 → 哈希表大小应为 6 槽位。
- 负载因子:0.6 → 哈希表大小应为 元素数 / 0.6 = 6 / 0.6 = 10 槽位。
- 矛盾点:哈希函数 mod 6 与负载因子要求的 10 槽位冲突。
- 合理修正:假设题目中哈希函数应为 H(k) = (2k) mod 10,此时哈希表大小 10 槽位,负载因子 6/10 = 0.6,符合条件。
- 步骤二:按修正后的哈希函数计算 使用 H(k) = (2k) mod 10,哈希表大小 10,元素为 [8, 10, 9, 12, 15, 20]。
- 计算哈希值: 元素 哈希值 (2k) mod 10 槽位 8 16 → 6 6 10 20 → 0 0 9 18 → 8 8 12 24 → 4 4 15 30 → 0 0 20 40 → 0 0
- 构建哈希表(链地址法): ◦ 槽0:10 → 15 → 20(链表长度 3)。 ◦ 槽4:12(直接命中)。 ◦ 槽6:8(直接命中)。 ◦ 槽8:9(直接命中)。
- 查找比较次数:1+1+1+1+2+3 = 9
- 平均比较次数:9/6 = 1.5 → 1.51.5
- 步骤三:按原题矛盾条件计算 若强行使用 H(k) = (2k) mod 6,忽略负载因子矛盾:
- 哈希值计算: 元素 哈希值 (2k) mod 6 槽位 8 16 → 4 4 10 20 → 2 2 9 18 → 0 0 12 24 → 0 0 15 30 → 0 0 20 40 → 4 4
- 哈希表结构: 槽0:9 → 12 → 15(链表长度 3)。 槽2:10(直接命中)。 槽4:8 → 20(链表长度 2)。
- 查找比较次数: 1+1+1+2+3+2 = 10
- 平均比较次数:10/6 ≈ 1.67 → 1.671.67
- 结论:
- 若修正哈希函数为 mod 10,平均比较次数为 1.5。
- 若保留原题矛盾条件,平均比较次数为 1.67。
- 核心问题:题目需确保哈希函数模数与负载因子匹配,否则结果不可靠。
7. SQL中应该如何实现对’/'的模糊查询?是LIKE '%\/%‘还是’%/%‘还是’%//%‘还是’%/%'呢?
- 直接查询(无需转义) ‘%/%’ 是标准写法,因为 / 不是 SQL 的通配符(通配符是 % 和 _),直接使用即可。此写法适用于所有主流数据库(MySQL、PostgreSQL、SQL Server 等)。
SELECT * FROM table WHERE column LIKE '%/%';
- 转义场景(特殊情况) 如果需要强制转义 /(例如某些框架强制要求转义非通配符),可用 ESCAPE 子句 自定义转义符: – 使用反斜杠转义(需声明 ESCAPE ‘’)。但此写法 冗余,仅在某些特殊场景(如动态拼接 SQL 时需防止注入)使用。
SELECT * FROM table WHERE column LIKE '%\/%' ESCAPE '\';
- 错误写法分析
- ‘%\/%’:双反斜杠是编程语言(如 Java、Python)中字符串的转义写法,实际生成 ‘%/%’,但 SQL 中仍需配合 ESCAPE ‘’ 生效。
- ‘%//%’:匹配连续两个 /,不符合需求。
- ‘%/%’:未声明 ESCAPE ‘’ 时,反斜杠会被忽略,实际仍匹配 /,但依赖数据库默认配置,不推荐。
8. independent of module的cohesion和coupling分别是什么?
- 内聚(Cohesion):内聚衡量一个模块内部元素(