DevOps 应用
网络
一般来说,通信需要哪些要素?
• 共同语言(让双方能互相理解) • 标识目标地址的方法 • 连接(让通信内容能到达接收方)
什么是 Ethernet?
Ethernet 就是当今最常用的局域网(LAN)类型。局域网(与广域网 WAN 相对)指的是在小范围内(如办公室、校园或家中)连接多台计算机的网络。
什么是 MAC 地址?它有什么用途?
MAC 地址是用于识别网络中单个设备的唯一标识号。 通过 Ethernet 发送的数据包总是来自某个 MAC 地址并发送到某个 MAC 地址。当网络适配器收到数据包时,会将该包的目标 MAC 地址与适配器自身的 MAC 地址进行比对。
MAC 地址 ff:ff:ff:ff:ff:ff 在什么情况下使用?
当设备向广播 MAC 地址(FF:FF:FF:FF:FF:FF)发送数据包时,该数据包会被传送给本地网络上的所有工作站。Ethernet 广播用于在数据链路层通过 ARP 将 IP 地址解析为 MAC 地址。
什么是 IP 地址?
IP 地址是分配给每个连接到使用互联网协议进行通信的计算机网络的设备的数字标签。IP 地址有两个主要功能:主机或网络接口标识和位置寻址。
解释子网掩码并举例说明
子网掩码是一个 32 位的数字,用于对 IP 地址进行掩码操作,将 IP 地址划分为网络地址和主机地址。子网掩码通过将网络位全部设为 “1”,主机位全部设为 “0” 来生成。在给定网络中,可用的主机地址中有两个总是保留用于特定目的,不能分配给任何主机:第一个地址作为网络地址(即网络 ID),最后一个地址用于网络广播。 示例
什么是私有 IP 地址?在哪些场景/系统设计中应该使用它?
私有 IP 地址分配给同一网络中的主机用于彼此通信。正如”私有”一词所示,拥有私有 IP 地址的设备无法被外部网络的设备访问。例如,如果我在宿舍想让室友加入我搭建的游戏服务器,我会让他们通过我服务器的私有 IP 地址加入,因为这个网络只在宿舍本地有效。
什么是公有 IP 地址?在哪些场景/系统设计中应该使用它?
公有 IP 地址是面向外网的地址。如果你想搭建一个游戏服务器让朋友加入,就需要给他们你的公有 IP 地址,这样他们的计算机才能识别并定位你的网络和服务器。当朋友和你处于同一网络时就不需要公有 IP,此时应该使用私有 IP。如果想让外部访问内部服务器,就需要设置端口转发来允许公网流量进出你的网络。
解释 OSI 模型。有哪些层级?每个层级负责什么?
• 应用层:用户端(HTTP 在这层) • 表示层:建立应用层实体间的上下文(加密在这层) • 会话层:建立、管理和终止连接 • 传输层:在源主机和目标主机之间传输变长数据序列(TCP 和 UDP 在这层) • 网络层:将数据报从一个网络传输到另一个网络(IP 在这层) • 数据链路层:为直接相连的节点提供链接(MAC 在这层) • 物理层:数据连接的电气和物理规范(比特流在这层) 更多 OSI 模型知识请访问 penguintutor.com
以下各项属于 OSI 模型的哪一层: • 错误纠正 • 数据包路由 • 电缆和电信号 • MAC 地址 • IP 地址 • 终止连接 • 三次握手
• 错误纠正 - 数据链路层 • 数据包路由 - 网络层 • 电缆和电信号 - 物理层 • MAC 地址 - 数据链路层 • IP 地址 - 网络层 • 终止连接 - 会话层 • 三次握手 - 传输层
你熟悉哪些数据传输模式?
单播(Unicast):一对一的通信方式,一个发送方对应一个接收方。 广播(Broadcast):向网络中所有人发送消息。使用地址 ff:ff:ff:ff:ff:ff 进行广播。两个常用广播协议是 ARP 和 DHCP。 组播(Multicast):向订阅组发送消息,可以是一对多或多对多。
什么是 CSMA/CD?现代 Ethernet 网络还在使用吗?
CSMA/CD 全称是载波侦听多路访问/冲突检测。主要目的是管理共享介质的访问,确保同一时间只有一个主机能传输数据。 CSMA/CD 算法步骤: 1. 发送数据前先检测是否有其他主机正在传输 2. 如果无人在传输,开始发送数据帧 3. 如果两个主机同时发送,就会发生冲突 4. 双方停止发送,并发送”冲突信号”通知所有设备 5. 随机等待一段时间后重试发送 6. 重复这个循环直到发送成功
描述以下网络设备及其区别: • 路由器 • 交换机 • 集线器
这三种设备都是用于连接局域网的,但工作方式不同: 1. 路由器:连接不同网段的设备,工作在网络层(OSI 第三层),使用 IP 地址进行路由 2. 交换机:连接同一局域网的设备,工作在数据链路层(第二层),通过 MAC 地址转发数据,能有效防止数据冲突 3. 集线器:工作在物理层(第一层),简单广播所有数据包到所有连接设备,容易导致数据冲突,现代网络多用交换机替代
什么是”冲突域”?
冲突域是指网络中可能发生数据冲突的区域。当两个设备同时发送数据时就会产生冲突,导致数据丢失或损坏。在冲突域中,所有设备共享带宽,任一设备都可能干扰其他设备的传输。
什么是”广播域”?
广播域是指网络中所有设备都能接收广播消息的区域。广播消息会发送给域内所有设备,无论目标是否是接收方。
三台电脑连接到一个交换机,有多少冲突域和广播域?
三个冲突域,一个广播域
路由器如何工作?
路由器是物理或虚拟设备,负责在不同网络之间传递信息。它会检查数据包的目标 IP 地址,计算最佳传输路径,然后进行转发。
什么是 NAT?
网络地址转换(NAT)是将一个或多个本地 IP 地址转换为公网 IP 地址的过程(反之亦然),用于为本地主机提供互联网访问。
什么是代理?如何工作?有什么用途?
代理服务器是用户与互联网之间的网关。当使用代理时,网络流量会先经过代理服务器。代理服务器能提供不同级别的功能、安全性和隐私保护,具体取决于使用场景和需求。比如企业常用代理来过滤内容或提高安全性。
什么是 TCP?如何工作?三次握手是什么?
TCP 三次握手是建立 TCP 连接的流程: 1. 客户端发送 SYN 包询问服务器是否可连接 2. 服务器返回 SYN-ACK 确认包 3. 客户端回传 ACK 包确认 完成握手后开始数据传输
SSL 握手如何工作?
SSL 握手建立安全连接的流程: 1. 客户端发送 Client Hello 包含协议版本和支持的加密算法 2. 服务器回复 Server Hello 包含协议版本和会话 ID 3. 服务器发送证书 4. 客户端发送公钥和加密参数 5. 双方交换加密信息完成握手 最终建立加密通道进行数据传输
你熟悉哪些 TCP/IP 协议?
解释”默认网关”
默认网关是网络设备访问外部网络的出口,通常指向路由器的 IP 地址。
什么是 ARP?如何工作?
ARP(地址解析协议)用于将 IP 地址解析为 MAC 地址。设备在发送数据前会先查询 ARP 缓存表,如果找不到对应条目就广播 ARP 请求来获取目标 MAC 地址。
什么是 TTL?它有什么作用?
• TTL(生存时间)是 IP 数据包中的字段,决定数据包能经过多少跳路由。每经过一个路由器 TTL 减 1,归零时丢弃包并发送 ICMP 超时消息 • 防止数据包无限循环和网络拥塞 • 帮助检测 IP 欺骗攻击
什么是 DHCP?如何工作?
动态主机配置协议,自动分配 IP 地址等网络参数。工作流程: • 客户端广播 DHCP DISCOVER • 服务器响应 DHCP OFFER 提供配置 • 客户端选择后发送 DHCP REQUEST • 服务器确认 DHCP ACK 更多信息请读 这里
同一网络能有两个 DHCP 服务器吗?如何运作?
可以但不推荐。若配置不当会导致 IP 冲突。需确保两个服务器分配不同的 IP 地址范围或服务于不同子网。大型网络中可能需要多个 DHCP 服务器分担负载。
什么是 SSL 隧道?如何工作?
SSL 隧道通过 SSL 加密在不安全网络上建立安全连接。工作流程: 1. 客户端与服务器建立 SSL 连接 2. 协商加密参数并验证证书 3. 通过加密通道传输数据 常用于 VPN 等安全通信场景
什么是套接字?如何查看系统中的套接字列表?
• 套接字是网络通信的端点 • 在 Linux 使用 netstat -an 命令查看所有开放套接字
什么是 IPv6?为什么有了 IPv4 还要用 IPv6?
• IPv6 使用 128 位地址(例如 2001:0db8:85a3::8a2e:0370:7334) 优势: 1. 地址空间更大 2. 内置 IPsec 加密 3. 改进多播和移动设备支持 4. 简化网络配置(无状态地址自动配置)
什么是 VLAN?
虚拟局域网,通过配置交换机端口将物理网络划分为多个逻辑网络,提高安全性和管理效率。
什么是 MTU?
MTU(最大传输单元)指单次能传输的最大数据量。
发送超过 MTU 的数据包会怎样?
IPv4 会分片传输,IPv6 直接报错。
判断题:Ping 使用 UDP 因为不需要可靠连接
错误。Ping 使用 ICMP 协议,用于网络诊断。
什么是 SDN?
软件定义网络,通过集中控制器管理网络,实现灵活配置。传统网络需逐个配置设备,SDN 分离控制面与数据面。
什么是 ICMP?有什么用途?
互联网控制报文协议,用于: 1. 错误报告(如目标不可达) 2. Ping 测试连通性 3. 路径 MTU 发现 4. Traceroute 路径追踪
NAT 如何工作?
NAT 将私有 IP 映射为公网 IP。例如家庭路由器将 192.168.1.100 转换为 1.1.1.1 公网 IP,外部设备只能看到公网 IP。
以下协议使用什么端口号?: • SSH • SMTP • HTTP • DNS • HTTPS • FTP • SFTP
• SSH - 22 • SMTP - 25 • HTTP - 80 • DNS - 53 • HTTPS - 443 • FTP - 21 • SFTP - 22
影响网络性能的因素有哪些?
1. 带宽限制 2. 延迟高低 3. 网络拥塞 4. 数据包丢失 5. 网络拓扑结构 6. 协议特性(如 TCP 开销) 7. 安全措施(如加密处理) 8. 物理距离
什么是 APIPA?
当 DHCP 服务器不可达时,设备自动分配的临时 IP 地址段。
APIPA 使用哪个 IP 段?
169.254.0.1 - 169.254.255.254
控制面与数据面
“控制面”指什么?
控制面负责决定如何路由和转发数据包,比如路由协议和策略。
“数据面”指什么?
数据面实际执行数据包的转发操作,根据控制面的决策进行传输。
什么是”管理平面”?
管理平面指的是监控和管理功能。
创建路由表属于哪个平面(数据平面、控制平面…)?
控制平面。
解释生成树协议(STP)。
什么是链路聚合?为什么要使用它?
什么是非对称路由?如何处理?
你熟悉哪些叠加(隧道)协议?
什么是 GRE?它是如何工作的?
什么是 VXLAN?它是如何工作的?
什么是 SNAT?
解释 OSPF。
OSPF(开放最短路径优先)是一种可以在各种路由器上实现的路由协议。现代大多数路由器都支持 OSPF,包括 Cisco、Juniper 和华为等厂商的设备。该协议设计用于基于 IP 的网络,同时支持 IPv4 和 IPv6。它采用分层网络设计,将路由器分组到不同区域,每个区域都有自己的拓扑图和路由表。这种设计减少了路由器之间需要交换的路由信息量,提高了网络的可扩展性。 OSPF 的四种路由器类型: • 内部路由器 • 区域边界路由器 • 自治系统边界路由器 • 骨干路由器 了解更多 OSPF 路由器类型:https://www.educba.com/ospf-router-types/
什么是延迟?
延迟指信息从源到达目的地所需的时间。
什么是带宽?
带宽是通信信道处理特定时间段内数据量的能力。更高的带宽意味着能处理更多流量,从而传输更多数据。
什么是吞吐量?
吞吐量指在特定时间段内通过传输信道实际传输的数据量测量。
执行搜索查询时,延迟和吞吐量哪个更重要?如何确保管理全球基础设施?
延迟更重要。为了获得良好的延迟,搜索查询应该转发到最近的数据中心。
上传视频时,延迟和吞吐量哪个更重要?如何确保?
吞吐量更重要。为了获得良好的吞吐量,上传流应该路由到利用率低的链路。
转发请求时除延迟和吞吐量外还需要考虑哪些因素?
• 保持缓存更新(这意味着请求可能不会转发到最近的数据中心)
解释 Spine & Leaf 架构
“Spine & Leaf” 是数据中心环境中常用的网络拓扑结构,用于连接多台交换机并高效管理网络流量。这种架构也被称为 spine-leaf 或 leaf-spine 拓扑,具有高带宽、低延迟和可扩展性特点,非常适合处理大数据流量和现代数据中心需求。 在 Spine & Leaf 网络中有两种主要交换机类型: • Spine 交换机:位于核心层的高性能交换机,通常与所有 leaf 交换机互连,构成网络骨干。 • Leaf 交换机:连接终端设备(如服务器、存储阵列等),每个 leaf 交换机都与所有 spine 交换机连接。这种全互联结构确保任意 leaf 交换机之间都能以最大吞吐量通信。 Spine & Leaf 架构因其能够满足现代云计算、虚拟化和大数据应用需求,已成为数据中心主流的可扩展、高性能网络基础设施。
什么是网络拥塞?可能由哪些原因引起?
网络拥塞发生在网络需要传输的数据量超过其处理能力时。
这会导致延迟增加和数据包丢失。可能原因包括高网络使用率、大文件传输、恶意软件、硬件问题或网络设计缺陷。
预防措施包括监控网络使用情况,并实施流量管控策略。
UDP 数据包格式是怎样的?与 TCP 数据包格式有何不同?
什么是指数退避算法?应用在哪些场景?
使用汉明码,数据字 100111010001101 的编码字是什么?
00110011110100011101
列举应用层的协议
• 超文本传输协议(HTTP) - 用于网页访问 • 简单邮件传输协议(SMTP) - 邮件传输 • 远程登录协议(TELNET) - 终端仿真 • 文件传输协议(FTP) - 文件传输 • 域名系统(DNS) - 域名解析 • 动态主机配置协议(DHCP) - IP 地址分配 • 简单网络管理协议(SNMP) - 网络设备监控
列举网络层的协议
• 互联网协议(IP) - 数据包路由 • 互联网控制报文协议(ICMP) - 提供网络诊断和错误报告
什么是 HSTS?
HTTP 严格传输安全(HSTS)是 Web 服务器的指令策略,通过响应头告知浏览器必须使用 HTTPS 加密连接。这会强制该域名下的所有资源加载都通过 HTTPS,即使脚本尝试使用 HTTP 也会被拒绝。 了解更多 这里
网络 - 杂项
什么是互联网?和万维网是同一个概念吗?
互联网指全球互联的计算机网络,负责海量数据传输。
万维网是基于互联网运行的应用程序,通过浏览器访问存放在数百万服务器上的网页资源。
什么是 ISP?
ISP(互联网服务提供商)指本地网络接入服务商。
操作系统
操作系统练习
名称 | 主题 | 目标与说明 | 解决方案 | 备注 |
---|---|---|---|---|
Fork 101 | 进程创建 | 链接 | 链接 | |
Fork 102 | 进程创建 | 链接 | 链接 |
操作系统 - 自测题
什么是操作系统?
引自《操作系统:三个简单部分》: “负责简化程序运行(甚至看似同时运行多个程序),允许程序共享内存,与设备交互等其他重要功能”。
操作系统 - 进程
你能解释什么是进程吗?
进程是正在运行的程序。程序由若干指令组成,由操作系统执行。
如果让你设计操作系统的进程 API,这个 API 应该包含哪些功能?
应支持以下功能: • 创建 - 允许新建进程 • 删除 - 允许终止进程 • 状态查询 - 查看进程状态(运行/停止/等待等) • 停止 - 暂停运行中的进程
进程是如何创建的?
• 操作系统读取程序代码和相关数据 • 将代码加载到进程的地址空间 • 为程序栈分配内存(初始化时包含 argc、argv 等参数) • 为堆分配内存(用于动态数据结构) • 初始化 I/O(如 UNIX 系统的标准输入/输出/错误描述符) • 从 main() 开始执行程序
判断:程序是一次性全部加载到内存的
错误。现代操作系统采用惰性加载,只加载运行必需的部分。
进程有哪些不同状态?
• 运行 - 正在执行指令 • 就绪 - 准备运行但被暂缓 • 阻塞 - 等待操作完成(如 I/O 请求)
进程进入阻塞状态的常见原因?
• I/O 操作(如磁盘读取) • 等待网络数据包
什么是进程间通信(IPC)?
操作系统提供的机制,允许进程共享和管理数据。
什么是时间共享?
通过多任务处理让单 CPU 系统看似同时服务多个用户,实际上是通过快速切换进程实现。
什么是空间共享?
与时间共享相对。资源被划分给不同实体独占使用,直到主动释放。例如存储空间的文件归属。
哪个组件决定当前运行的进程?
CPU 调度器。
操作系统 - 内存
什么是虚拟内存?有什么作用?
虚拟内存将物理内存与磁盘交换空间结合。当内存不足时,将部分数据移至分页文件。更多内存能提升程序运行速度。
什么是按需分页?
仅在进程访问时才将页面加载到物理内存的优化技术。减少启动开销,但首次访问时会产生延迟。
什么是写时复制?
资源管理技术,旨在减少不必要的复制操作。例如在 fork 系统调用中: 1. 共享资源初始设为只读 2. 当某进程要修改时,先复制资源副本再进行修改 3. 这确保各进程的独立内存空间
什么是内核?有哪些功能?
操作系统的核心部分,负责: • 内存分配 • 进程调度 • CPU 控制
判断:内核代码加载到受保护内存区域以防止应用篡改
正确。
什么是 POSIX?
类 Unix 操作系统与应用程序之间的接口标准。
解释信号量及其在操作系统中的作用。
用于控制共享资源访问的同步原语。作为计数器或信号机制管理多进程/线程的资源使用。
什么是缓存?什么是缓冲区?
缓存:加速数据读取的临时存储,使常用数据快速访问。 缓冲区:内存中的临时数据存储区,用于平衡数据处理速度差异。
虚拟化
什么是虚拟化?
虚拟化通过软件在计算机硬件上创建抽象层,使得单一计算机的处理器、内存、存储等硬件元素能够被划分为多个虚拟机(VM)。
什么是 hypervisor?
Red Hat 定义:”hypervisor 是创建和运行虚拟机(VM)的软件,有时称为虚拟机监视器(VMM),它将 hypervisor 操作系统和资源与虚拟机隔离,并支持虚拟机的创建和管理。” 阅读更多 此处
hypervisor 有哪些类型?
托管型 hypervisor 和裸机 hypervisor。
裸机 hypervisor 相比托管型 hypervisor 有何优缺点?
优点:裸机 hypervisor 拥有独立驱动并直接访问硬件,通常具有更好的性能、稳定性和扩展性。
缺点:驱动加载可能存在限制,而托管型 hypervisor 通常具有更好的硬件兼容性。
虚拟化有哪些类型?
• 操作系统级虚拟化 • 网络功能虚拟化 • 桌面虚拟化
容器化是否属于虚拟化?
是的,属于操作系统级虚拟化。容器共享内核,但拥有隔离的用户空间实例。
虚拟机如何改变应用程序部署方式?
虚拟机的引入使企业能在同一硬件上部署多个业务应用,每个应用运行在独立操作系统中,实现安全隔离。
虚拟机
容器时代还需要虚拟机吗?它们是否仍有价值?
是的,虚拟机仍然重要。虽然容器提供轻量级替代方案,但虚拟机在以下场景仍有优势: • 需要强隔离和安全性 • 运行不同操作系统 • 支持遗留应用 • 容器因共享内核存在限制的场景
Prometheus
什么是 Prometheus?主要特性有哪些?
Prometheus 是开源的系统监控告警工具包,核心功能包括: 1. 灵活数据模型:支持通过标签组织时间序列数据 2. 拉取式架构:主动从目标拉取指标数据 3. 时序数据库:专为高频写入优化的存储 4. 告警系统:可定制告警规则和通知渠道 5. 可视化工具:内置 PromDash 仪表盘
哪些场景不适合使用 Prometheus?
根据官方文档:”需要 100% 精确性的场景(如按请求计费)”。
描述 Prometheus 架构及核心组件
四大核心组件: 1. Prometheus Server:负责指标采集和存储 2. Client Libraries:应用程序指标暴露库 3. Exporters:第三方系统指标导出器 4. Alertmanager:告警处理中心
如何对比 Prometheus 和 InfluxDB 等方案?
Prometheus 优势:
• 高性能和扩展性 • 多维数据模型和强大查询语言
InfluxDB 优势:
• 简单易用的 API 和界面
Nagios 优势:
• 传统推模型,稳定性强
什么是告警(Alert)?
当特定指标达到阈值时触发的通知,可通过邮件/聊天工具等渠道发送,帮助团队主动发现问题。
什么是实例(Instance)和任务(Job)?
实例:单个监控目标(如服务器)
任务:执行相同功能的一组实例(如 Web 服务器集群)
Prometheus 支持哪些核心指标类型?
1. 计数器(Counter):单调递增的事件计数 2. 仪表盘(Gauge):可增减的瞬时值(如 CPU 使用率) 3. 直方图(Histogram):分桶统计的数据分布 4. 摘要(Summary):分位数统计的数据分布
什么是 Exporter?有何作用?
连接第三方系统与 Prometheus 的桥梁,将系统指标转换为 Prometheus 可识别的格式,通过 HTTP 端点暴露。
Prometheus 最佳实践有哪些?
1. 标签设计:清晰简洁,包含必要维度信息 2. 指标简化:每个指标专注单一系统特性 3. 告警节制:仅对关键问题设置告警,避免告警疲劳
如何查询指定时间段的总请求量?
示例查询最近 1 小时总请求量:
sum(rate(http_requests_total[1h]))
• rate 计算每秒请求速率
• sum 聚合所有实例的总量
Prometheus 高可用(HA)指什么?
通过多实例部署实现高可靠性,确保监控数据持续可用。常用技术包括负载均衡、数据复制和故障转移。
如何关联两个指标?
使用 join() 函数基于标签关联:
sum_series(
join(
on(service, instance) request_count_total,
on(service, instance) error_count_total,
)
)
如何查询标签值?
使用 label_values 函数:
label_values(http_requests_total, method)
返回 http_requests_total 指标中 method 标签的所有值
如何将 cpu_user_seconds 转换为 CPU 使用率百分比?
计算公式:
100 * sum(rate(process_cpu_user_seconds_total{job="my-job"}[5m])) by (instance) / (5m * 4)
• rate 计算 5 分钟平均速率
• 除以总时间(秒)和 CPU 核心数
Go
Go 编程语言有哪些特性?
• 强类型与静态类型 - 变量类型在编译时确定且不可更改 • 简洁性 • 快速编译 • 内置并发支持 • 垃圾回收机制 • 跨平台 • 编译为独立二进制文件 - 所有依赖项都会打包进单个二进制文件,便于运行时版本管理 Go 还拥有良好的社区支持。
var x int = 2
和 x := 2
有什么区别?
结果都是创建值为 2 的变量。
var x int = 2
显式声明变量类型为整数,而 x := 2
让 Go 自动推断类型。
判断正误?在 Go 中我们可以重新声明变量,并且一旦声明就必须使用它。
错误。不能重新声明变量,但已声明的变量必须使用。你用过哪些 Go 的库?
根据实际使用情况回答,例如: • fmt - 格式化 I/O
以下代码块有什么问题?如何修复?
func main() {
var x float32 = 13.5
var y int
y = x
}
类型不匹配错误。float32 不能直接赋值给 int 类型变量。修复方法:使用类型转换 y = int(x)
以下代码试图将整数 101 转换为字符串,但得到 “e”。为什么?如何修复?
go
package main
import "fmt"
func main() {
var x int = 101
var y string
y = string(x)
fmt.Println(y)
}
string() 会把数字当作 Unicode 码点转换(101 对应字母 e)。要得到 “101” 应使用 strconv.Itoa(x),并导入 strconv 包。
以下代码有什么问题?:
go
package main
func main() {
var x = 2
var y = 3
const someConst = x + y
}
常量必须用常量表达式初始化。x 和 y 是变量,它们的和也是变量。
错误信息:
const initializer x + y is not a constant
以下代码输出什么?:
go
package main
import "fmt"
const (
x = iota
y = iota
)
const z = iota
func main() {
fmt.Printf("%v\n", x)
fmt.Printf("%v\n", y)
fmt.Printf("%v\n", z)
}
输出:0 0 0 解释:每个 const 块中 iota 从 0 开始计数,新 const 块重置计数。因此 x=0, y=1(原答案可能有误),z=0(单独的新 const 块)
以下代码输出什么?:
go
package main
import "fmt"
const (
_ = iota + 3
x
)
func main() {
fmt.Printf("%v\n", x)
}
输出 4。第一个 iota 值为 0+3=3,第二个自动递增为 4。
以下代码输出什么?:
go
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
wg.Add(1)
go func() {
time.Sleep(time.Second * 2)
fmt.Println("1")
wg.Done()
}()
go func() {
fmt.Println("2")
}()
wg.Wait()
fmt.Println("3")
}
可能输出:2 1 3(但第二个 goroutine 未加入 WaitGroup,实际执行顺序可能有变化)
以下代码输出什么?:
go
package main
import (
"fmt"
)
func mod1(a []int) {
for i := range a {
a[i] = 5
}
fmt.Println("1:", a)
}
func mod2(a []int) {
a = append(a, 125)
for i := range a {
a[i] = 5
}
fmt.Println("2:", a)
}
func main() {
s1 := []int{1, 2, 3, 4}
mod1(s1)
fmt.Println("1:", s1)
s2 := []int{1, 2, 3, 4}
mod2(s2)
fmt.Println("2:", s2)
}
输出: 1: [5 5 5 5] 1: [5 5 5 5] 2: [5 5 5 5 5] 2: [1 2 3 4] 解释:mod1 修改原切片,mod2 的 append 创建了新切片
以下代码输出什么?:
go
package main
import (
"container/heap"
"fmt"
)
type IntHeap []int
func (h IntHeap) Len() int { return len(h) }
func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] }
func (h IntHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
func (h *IntHeap) Push(x interface{}) {
*h = append(*h, x.(int))
}
func (h *IntHeap) Pop() interface{} {
old := *h
n := len(old)
x := old[n-1]
*h = old[0 : n-1]
return x
}
func main() {
h := &IntHeap{4, 8, 3, 6}
heap.Init(h)
heap.Push(h, 7)
fmt.Println((*h)[0])
}
输出 3。初始化最小堆后,堆顶元素是最小值。
Mongo
MongoDB 的优势是什么?或者说为什么要选择 MongoDB 而不是其他 NoSQL 实现?
MongoDB 优势: • 无模式 • 易于水平扩展 • 无需复杂关联 • 单文档结构清晰
SQL 和 NoSQL 有什么区别?
主要区别:SQL 是结构化存储(表格形式),NoSQL 是非结构化存储(键值对、文档等形式)。
在什么场景下会选择 NoSQL/Mongo 而不是 SQL?
• 数据结构多变 • 数据一致性和完整性非首要考虑 • 需要快速扩展数据库
什么是文档?什么是集合?
• 文档是 MongoDB 中的基本数据单元,采用 BSON 格式存储 • 集合是相关文档的分组存储单元
什么是聚合器?
• MongoDB 的聚合框架用于对数据集进行计算并返回汇总结果
嵌入式文档和引用文档哪个更好?
• 取决于具体场景:嵌入式支持原子更新,引用文档更规范化
你在 MongoDB 中做过查询优化吗?如果没有,能想到哪些优化慢查询的方法?
• 索引优化 • 合理的模式设计 • 查询优化 • 数据库负载均衡
查询
解释这个查询:db.books.find({“name”: /abc/})
查找 name 字段包含 “abc” 的文档(正则匹配)
解释这个查询:db.books.find().sort({x:1})
按 x 字段升序排列结果
find()
和 find_one()
有什么区别?
• find() 返回所有匹配文档 • find_one() 返回单个匹配文档(或无结果时返回 null)
如何从 MongoDB 导出数据?
• 使用 mongoexport 工具 • 通过编程语言导出
SQL
SQL 练习
名称 | 主题 | 目标与说明 | 解决方案 | 备注 |
---|---|---|---|---|
函数 vs 比较 | 查询优化 | 练习 | 解答 |
SQL 自测
什么是 SQL?
SQL 是用于关系型数据库的标准查询语言(如 MySQL、MariaDB 等),用于数据的增删改查。
SQL 和 NoSQL 的主要区别?
SQL 使用结构化存储(表格),NoSQL 使用非结构化存储(如键值对、文档等)。
何时该用 SQL?何时用 NoSQL?
SQL - 需要数据强一致性(如金融系统),遵循 ACID 原则 NoSQL - 需要快速扩展,处理异构数据,适合 Web 应用
实践 SQL - 基础
使用以下 Customers 和 Orders 表:
Customers
Customer_ID | Customer_Name | Items_in_cart | Cash_spent_to_Date |
---|---|---|---|
100204 | 张三 | 0 | 20.00 |
100205 | 李四 | 3 | 40.00 |
100206 | 王五 | 1 | 100.20 |
ORDERS
Customer_ID | Order_ID | Item | Price | Date_sold |
---|---|---|---|---|
100206 | A123 | 橡皮鸭 | 2.20 | 2019-09-18 |
100206 | A123 | 泡泡浴 | 8.00 | 2019-09-18 |
100206 | Q987 | 80卷装厕纸 | 90.00 | 2019-09-20 |
100205 | Z001 | 金枪鱼猫粮 | 10.00 | 2019-08-05 |
100205 | Z001 | 鸡肉猫粮 | 10.00 | 2019-08-05 |
100205 | Z001 | 牛肉猫粮 | 10.00 | 2019-08-05 |
100205 | Z001 | 猫用墨西哥卷 | 10.00 | 2019-08-05 |
100204 | X202 | 咖啡 | 20.00 | 2019-04-29 |
如何查询表中所有字段?
SELECT * FROM Customers;
张三购物车有多少商品?
SELECT Items_in_cart FROM Customers WHERE Customer_Name = “张三”;
客户总消费金额是多少?
SELECT SUM(Cash_spent_to_Date) AS 总金额 FROM Customers;
有多少人购物车有商品?
SELECT COUNT(1) AS 有商品人数 FROM Customers WHERE Items_in_cart > 0;
如何关联客户表和订单表?
通过 Customer_ID 进行 JOIN 操作
如何显示客户的购买记录?
SELECT c.Customer_Name, o.Item FROM Customers c LEFT JOIN Orders o ON c.Customer_ID = o.Customer_ID;
如何使用 WITH 语句显示购买猫粮的客户及其总消费金额?
sql
with cat_food as (
Select Customer_ID, SUM(Price) as TOTAL_PRICE
From Orders
Where Item like "%Cat Food%"
Group by Customer_ID
)
Select Customer_name, TOTAL_PRICE
From Customers c
Inner JOIN cat_food f
ON c.Customer_ID = f.Customer_ID
where c.Customer_ID in (Select Customer_ID from cat_food);
尽管这是个简单查询,但 WITH 语句在处理需要先对表进行复杂计算再关联的场景时非常实用。它会在查询运行时创建临时伪表,而不是实际生成新表。
这里猫粮消费总和并非直接可得,因此先用 WITH 创建临时表计算每个客户的总消费金额,再进行常规关联。
应该选择以下哪个查询?
SELECT count(*) SELECT count(*)
FROM shawarma_purchases FROM shawarma_purchases
WHERE vs. WHERE
YEAR(purchased_at) == '2017' purchased_at >= '2017-01-01' AND
purchased_at <= '2017-31-12'
推荐使用:
SELECT count(*)
FROM shawarma_purchases
WHERE
purchased_at >= '2017-01-01' AND
purchased_at <= '2017-31-12'
原因:使用函数(如 YEAR())会导致全表扫描,而直接使用日期范围可以利用索引优化查询。
OpenStack
你熟悉 OpenStack 的哪些组件/项目?
我主要熟悉以下核心组件: • Nova:计算资源管理,负责虚拟机生命周期管理 • Neutron:网络服务,管理网络/子网/路由器创建 • Cinder:块存储服务,管理存储卷的挂载 • Keystone:身份认证服务,处理全平台的鉴权授权 在过往项目中配置过这些组件,支持多租户环境下的扩展性和安全性。
请说明以下服务的职责: • Nova • Neutron • Cinder • Glance • Keystone
• Nova - 虚拟机实例管理 • Neutron - 网络即服务(NaaS) • Cinder - 块存储管理 • Glance - 镜像管理(支持虚拟机/容器镜像的检索/注册) • Keystone - 全平台统一认证服务
匹配服务与功能: • 实例快照/复制 • 资源管理 GUI • 块存储 • 虚拟机管理
• Glance - 镜像服务(也用于实例快照) • Horizon - 图形化管理界面 • Cinder - 块存储服务 • Nova - 虚拟机实例管理
什么是租户/项目(tenant/project)?
逻辑隔离的资源集合,用于在 OpenStack 中组织用户和资源
判断正误: • OpenStack 可免费使用 • Glance 负责网络服务 • 租户/项目用于在用户间共享资源
• 正确(Apache 2.0 协议) • 错误(Neutron 负责网络) • 正确
详细描述如何启动带浮动 IP 的实例
1. 创建实例时指定浮动 IP 池 2. Neutron 从指定池分配 IP 3. 将浮动 IP 关联到实例端口 4. 配置安全组规则允许访问
客户反馈”能 ping 通实例但无法 SSH 连接”,可能原因?
潜在原因: • 安全组未放行 22 端口 • 实例防火墙配置限制 • SSH 服务未运行 • 错误的路由配置
OpenStack 支持哪些网络类型?
• 扁平网络(Flat) • VLAN 网络 • VXLAN/GRE 隧道网络 • SDN 集成(如 OVS, LinuxBridge)
如何调试 OpenStack 存储问题?(工具/日志)
• 查看 Cinder 日志:/var/log/cinder/ • 使用 cinder list/show 命令 • 检查存储后端状态(如 Ceph/ LVM) • 网络连通性测试(iSCSI 端口)
如何调试 OpenStack 计算问题?(工具/日志)
• 查看 Nova 日志:/var/log/nova/ • 使用 nova show 检查实例状态 • 验证 hypervisor 状态(通过 nova hypervisor-list) • 检查虚拟机控制台日志
OpenStack 部署 & TripleO
是否部署过 OpenStack?如何部署?
曾使用 TripleO 进行生产部署: 1. 准备 undercloud 节点 2. 编写节点定义 YAML 3. 通过 openstack overcloud deploy 部署 4. 验证各服务状态
了解 TripleO 吗?与 Devstack/Packstack 的区别?
TripleO 是 OpenStack 官方裸机部署工具,基于 OpenStack-on-OpenStack 理念,而 Devstack 适用于开发环境快速部署,Packstack 适合小规模 All-in-One 部署。
OpenStack 计算(Nova)
详细描述 Nova
• 用于虚拟机实例的创建/管理 • 支持多层级多租户(日志/审计/终端用户控制) • 高扩展性架构 • 支持 LDAP/本地系统认证 • 兼容多种 hypervisor(KVM, VMware 等)
Nova 架构包含哪些组件?
• nova-api:接收处理 API 请求 • nova-scheduler:调度决策(选择计算节点) • nova-compute:与 hypervisor 交互管理实例 • 组件间通过消息队列(如 RabbitMQ)和数据库通信
OpenStack 网络(Neutron)
详述 Neutron
• OpenStack 核心网络组件 • 提供网络即服务(NaaS) • 支持多种网络服务配置 • 与以下组件交互: ◦ Keystone:API 鉴权 ◦ Nova:虚拟机网卡接入网络 ◦ Horizon:网络拓扑可视化
解释以下组件: • neutron-dhcp-agent • neutron-l3-agent • neutron-metering-agent • neutron--agtent • neutron-server
• neutron-l3-agent:L3/NAT 转发(提供外网访问) • neutron-dhcp-agent:DHCP 服务分配 IP • neutron-metering-agent:流量计量 • neutron--agtent:管理各节点虚拟交换机 • neutron-server:提供 API 入口,协调插件
解释网络类型: • 管理网络 • 业务网络 • API 网络 • 外部网络
• 管理网络:内部组件通信(仅数据中心内可达) • 业务网络:实例间通信 • API 网络:服务 API 端点(公网可达) • 外部网络:公网接入(互联网可达)
删除以下实体的顺序是? • 网络 • 端口 • 路由器 • 子网
正确顺序: 1. 端口 2. 子网 3. 路由器 4. 网络 原因:存在依赖关系(如路由器关联端口时无法删除)
什么是供应商网络(provider network)?
直接映射到物理网络的虚拟网络,通常用于外部网络连接
L2/L3 层使用哪些组件和服务?
• L2:OVS/LinuxBridge, ML2 插件 • L3:neutron-l3-agent, 路由服务
ML2 插件是什么?架构如何?
模块化二层插件,支持多种网络类型(VLAN/VXLAN等),通过驱动机制实现扩展
L2 agent 的作用和工作原理?
负责管理节点上的虚拟交换机配置,实现网络隔离和流量转发
L3 agent 的功能?
处理跨子网路由,NAT 转换,浮动 IP 管理
Metadata agent 的作用?
为实例提供元数据服务(如 SSH 密钥注入)
Neutron 支持哪些网络实体?
网络(Network)、子网(Subnet)、端口(Port)、路由器(Router)、安全组(Security Group)等
如何调试 Neutron 网络问题?
• 查看 /var/log/neutron/ 日志 • 使用 neutron net-list/show 命令 • 检查 OVS 流表(ovs-ofctl) • 抓包分析(tcpdump)
OpenStack - Glance
详细解释 Glance
• Glance 是 OpenStack 的镜像服务 • 负责处理与实例磁盘和镜像相关的请求 • 支持创建快照实现快速实例备份 • 用户可通过 Glance 创建新镜像或上传已有镜像
描述 Glance 架构
• glance-api - 处理镜像 API 调用(检索/存储),包含两个 API:1. registry-api(内部请求) 2. user API(公开访问) • glance-registry - 处理镜像元数据请求(如大小/类型等),私有组件不对外暴露 • 元数据定义服务 - 自定义元数据的 API • 数据库 - 存储镜像元数据 • 镜像仓库 - 存储镜像实体,支持文件系统/Swift 对象存储/HTTP 等方式
OpenStack - Swift
详细解释 Swift
• Swift 是对象存储服务,具备高可用、分布式和强一致性设计 • 通过多服务器多磁盘写入实现数据分布式存储 • 支持通过添加服务器实现集群扩展,同时保持数据完整性和自动复制
能否默认存储 100GB 大小的对象?
默认不支持。Object Storage API 限制单个对象最大 5GB,但可调整配置。
解释 Swift 中的概念: • 容器(Container) • 账户(Account) • 对象(Object)
• 容器 - 定义对象的命名空间 • 账户 - 定义容器的命名空间 • 对象 - 实际数据内容(如图片/文档等)
判断正误:同一容器不能有同名对象,但不同容器可以
错误。不同容器中的对象可以同名。
OpenStack - Cinder
详细解释 Cinder
• OpenStack 块存储服务 • 为 Nova 等服务提供可消费的存储资源 • 最常用实现是 LVM 存储 • 用户无需感知底层存储位置和类型
描述 Cinder 组件
• cinder-api - 接收 API 请求 • cinder-volume - 管理连接的块设备 • cinder-scheduler - 负责存储卷调度
OpenStack - Keystone
解释 Keystone 中的概念: • 角色(Role) • 租户/项目(Tenant/Project) • 服务(Service) • 端点(Endpoint) • 令牌(Token)
• 角色 - 定义用户/项目的操作权限 • 租户/项目 - 资源组的逻辑隔离单元(如账户/组织) • 服务 - 访问资源的端点 • 端点 - 访问 OpenStack 服务的网络地址 • 令牌 - 带访问范围的资源访问凭证
服务的标识属性有哪些?
使用: • 名称 • ID 号 • 类型 • 描述
解释以下端点类型: • PublicURL • InternalURL • AdminURL
• PublicURL - 公网可访问 • InternalURL - 服务间内部通信 • AdminURL - 管理操作使用
什么是服务目录?
服务及其端点的列表集合
OpenStack 高级 - 服务
描述以下服务: • Swift • Sahara • Ironic • Trove • Aodh • Ceilometer
• Swift - 高可用、分布式、最终一致的对象/blob 存储 • Sahara - Hadoop 集群管理 • Ironic - 裸机供应服务 • Trove - 数据库即服务(DBaaS) • Aodh - 告警服务 • Ceilometer - 用量监控计量
匹配服务与功能: • 运行在 OpenStack 上的数据库即服务 • 裸机供应 • 用量跟踪监控 • 告警服务 • Hadoop 集群管理 • 高可用对象存储
• Trove • Ironic • Ceilometer • Aodh • Sahara • Swift
OpenStack 高级 - Keystone
详细描述 Keystone
• OpenStack 必备核心服务 • 提供身份认证/策略/令牌服务: ◦ 支持用户和服务双重认证 ◦ 基于令牌和用户的授权机制 • 基于 JSON 文件定义 RBAC 策略规则
描述 Keystone 架构
• 提供 service API 和 admin API • 四大后端: ◦ 令牌后端 - 临时令牌管理 ◦ 策略后端 - 规则管理与授权 ◦ 身份后端 - 用户/组(支持独立数据库/LDAP) ◦ 目录后端 - 端点管理 • 可插拔集成: ◦ LDAP/KVS/SQL/PAM/Memcached
描述 Keystone 认证流程
1. 用户通过用户名/密码/authURL 发起认证请求 2. Keystone 验证通过后颁发令牌 3. 令牌包含用户项目列表,后续操作免重复认证
OpenStack 高级 - 计算(Nova)
解释以下组件功能: • nova-api • nova-compute • nova-conductor • nova-cert • nova-consoleauth • nova-scheduler
• nova-api - API 请求管理 • nova-compute - 实例生命周期管理 • nova-conductor - 作为 nova-compute 与数据库的中介 • nova-cert - 管理 x509 证书 • nova-consoleauth - 控制台认证处理 • nova-scheduler - 实例调度决策
Nova 支持哪些代理类型?
• nova-novncproxy - VNC 连接代理 • nova-spicehtml5proxy - SPICE 协议代理 • nova-xvpvncproxy - VNC 连接代理
OpenStack 高级 - 网络(Neutron)
解释 BGP 动态路由
用于实现跨网络域的路由传播,支持 SDN 场景下的灵活路由配置
网络命名空间在 OpenStack 中的作用?
实现网络隔离,每个租户/路由器拥有独立命名空间
OpenStack 高级 - Horizon
详细描述 Horizon
• 基于 Django 的仪表盘项目 • 提供 OpenStack 资源可视化操作: ◦ 实例/镜像/网络等资源管理 • 支持高度定制化扩展
Horizon 架构特点
• API 向后兼容 • 三种仪表盘类型:用户/系统/设置 • 原生支持所有 OpenStack 核心服务 • 提供扩展模板和核心类
Puppet
什么是 Puppet?工作原理?
• Puppet 是配置管理工具,用于确保系统达到预期状态
描述 Puppet 架构
• 采用主从架构,客户端与主节点通信 • 客户端通过证书认证(CA 签名机制) • 主节点存储配置模块(Manifest/Module)
对比 Puppet 与其他配置工具(如 Ansible),为何选择 Puppet?
• Puppet 适合大规模复杂环境,Chef 相似但使用 Ruby,Ansible 无代理更轻量 • 选择依据:扩展性/学习曲线/社区支持
解释以下概念: • 模块(Module) • 清单(Manifest) • 节点(Node)
• 模块 - 包含清单/模板/文件的集合 • 清单 - 实际配置代码(.pp 文件) • 节点 - 指定节点配置的入口
解释 Facter 的作用
• 收集系统信息(OS/IP/内存等)的工具 • 提供事实数据(facts)用于 Puppet 决策 • 集成于 Puppet,manifest 中可调用
什么是 MCollective?
• Puppet 的中间件系统,提供编排/远程执行能力
有编写模块的经验吗?举例说明
例如编写过 Nginx 配置模块,实现自动化部署和配置管理
解释 Hiera 的作用
• 分层数据存储,实现数据与代码分离 • 支持不同环境差异化配置
Elastic
什么是 Elastic Stack?
Elastic Stack 包含以下组件: • Elasticsearch • Kibana • Logstash • Beats • Elastic Hadoop • APM Server Elasticsearch、Logstash 和 Kibana 也被称为 ELK 技术栈。
请解释什么是 Elasticsearch
来自官方 文档: “Elasticsearch 是一个分布式文档存储系统。不同于以行列形式存储结构化数据,Elasticsearch 将复杂数据结构序列化为 JSON 文档进行存储”
解释什么是 Beats
Beats 是轻量级的数据传输工具。这些数据传输器安装在数据所在的客户端。 常见的 Beats 包括:Filebeat、Metricbeat、Auditbeat 等。
什么是 Kibana?
来自官方文档: “Kibana 是一个开源的分析和可视化平台,专为与 Elasticsearch 协同工作设计。用户通过 Kibana 可以搜索、查看和交互存储在 Elasticsearch 索引中的数据,轻松进行高级数据分析并通过多种图表、表格和地图实现数据可视化”
描述使用 Elastic 技术栈时,从应用程序记录日志到仪表板展示的完整流程
具体流程可能因架构设计和日志处理需求而有所不同,一个典型的工作流是: 1. 应用程序记录的日志被 Filebeat 采集并发送至 Logstash 2. Logstash 根据预定义过滤器处理日志,处理完成后将结果发送至 Elasticsearch 3. Elasticsearch 存储接收到的文档并建立索引以便快速检索 4. 用户在 Kibana 中基于索引数据创建可视化图表 5. 用户将上一步创建的可视化图表组合成仪表板
Elasticsearch
什么是数据节点?
数据节点负责存储数据并执行数据处理操作(例如数据搜索)
什么是主节点?
主节点的主要职责包括: • 跟踪集群中所有节点的状态 • 确保副本正常工作且每个数据节点都可访问数据 • 避免热点节点(防止某个数据节点负载过高) 虽然集群可以有多个主节点,但实际只有一个会被选举为当前主节点
什么是预处理节点?
负责通过预处理管道处理数据的节点。当不需要使用 Logstash 时,这类节点可以直接接收 Beats 的数据并进行类似 Logstash 的处理
什么是专用协调节点?
来自官方文档: “专用协调节点通过承担协调职责来减轻数据节点和候选主节点的压力。它们加入集群后接收完整的集群状态,并利用这些状态信息将请求直接路由到正确位置”
Elasticsearch 如何存储数据?
• 数据存储在索引中 • 索引通过分片机制分布在集群中
什么是索引?
在 Elasticsearch 中,索引通常类比于 SQL/NoSQL 中的完整数据库。您可以选择为应用所有数据创建单一索引,或为不同服务创建多个索引。 官方文档提供了很好的解释: “索引可以视为经过优化的文档集合,每个文档都是包含数据的键值对集合”
解释分片机制
索引被分割为多个分片,文档通过哈希算法分配到特定分片。每个分片可以位于集群的不同节点,每个分片本身都是完整的独立索引。这种机制使 Elasticsearch 能够扩展到整个服务器集群。
什么是倒排索引?
来自官方文档: “倒排索引会列出每个文档中出现的所有唯一词汇,并记录每个词汇出现的文档位置”
什么是文档?
类比 SQL/NoSQL,Elasticsearch 中的文档相当于 SQL 表中的行或 NoSQL 集合中的文档。文档是以 JSON 格式存储的数据单元,具体内容取决于应用场景(例如书籍管理应用中的书籍信息,服装管理应用中的服装信息等)
当集群健康状态显示为红色时意味着什么?黄色状态可能由什么引起?
红色表示集群存在数据不可用,某些索引分片未分配。黄色表示存在未分配的分片,常见于单节点环境下索引配置了副本的情况。绿色表示所有分片均已分配,集群健康
判断正误:Elasticsearch 会索引所有字段,且每个索引字段具有相同数据结构以实现统一快速查询
错误。 来自官方文档: “每个索引字段都有专用的优化数据结构。例如文本字段存储在倒排索引中,数值和地理字段存储在 BKD 树中”
文档包含哪些保留字段?
• _index • _id • _type
解释映射(Mapping)
自定义映射有哪些优势?(或:何时需要使用自定义映射?)
• 优化字段的部分匹配性能 • 自定义已知字段格式(例如日期格式) • 执行语言特定的分析处理
解释副本机制
在网络/云环境中,故障难以避免。副本机制通过创建索引分片的副本(副本分片),确保在部分分片/节点离线时仍能维持服务可用性,这是 Elasticsearch 的重要容错机制
请解释词频(TF)和文档频率(DF)
词频指某个词在特定文档中的出现频率,文档频率指该词在所有文档中的出现频率。两者结合(TF/DF)用于确定词汇相关性权重
解释该命令作用:curl -X PUT “localhost:9200/customer/_doc/1?pretty” -H ‘Content-Type: application/json’ -d’{ “name”: “John Doe” }’
该命令执行以下操作:若 customer 索引不存在则创建,添加包含 name 字段(值为”John Doe”)的新文档。首次执行时文档 ID 为 1
上述命令执行两次会怎样?执行 100 次呢?
1. 若 name 值不同则更新为新值 2. 无论是否更新,版本号(version)都会递增
什么是批量 API?其使用场景是?
批量 API 用于索引多个文档。相比单条请求,批量处理能显著提升效率(减少网络往返次数),特别适合大规模数据索引
查询 DSL
解释 Elasticsearch 查询语法(布尔逻辑、字段查询、范围查询)
解释相关性评分
解释查询上下文与过滤上下文
来自官方文档: “在查询上下文中,查询子句需要回答’该文档与此查询的匹配程度如何?’。除了判断是否匹配,还会计算 _score 元字段的相关性评分” “在过滤上下文中,查询子句只需回答’该文档是否匹配此查询?’。结果仅为是/否,不计算评分。过滤上下文主要用于结构化数据筛选”
描述大规模生产环境与小规模环境的架构差异
可能的答案之一: 小规模 Elastic 架构通常直接使用完整技术栈(Beats、Logstash、Elasticsearch、Kibana)。大规模生产环境可能需要添加缓冲组件(如 Redis/RabbitMQ)和安全组件(如 Nginx)
Logstash
什么是 Logstash 插件?有哪些插件类型?
• 输入插件 - 从不同数据源采集数据 • 过滤插件 - 数据处理 • 输出插件 - 推送数据到不同目标平台
什么是 grok?
Logstash 的过滤插件,用于将原始日志格式转换为结构化格式
grok 的工作原理?
你熟悉哪些 grok 模式?
什么是 _grokparsefailure
?
如何测试或调试 grok 模式?
什么是 Logstash 编解码器?有哪些类型?
Kibana
Kibana 的”Discover”功能提供什么?
原始数据展示(按索引存储形式)。支持搜索和过滤
在 Kibana 的”Discover”中看到”561 hits”表示什么?
匹配搜索条件的文档总数。若无查询条件则为索引总文档数
“Visualize”功能的作用是?
创建数据可视化图表(饼图、折线图等)的功能模块
Kibana 支持哪些可视化类型?
哪种可视化类型适合展示统计异常值?
详细描述如何在 Kibana 创建仪表板
Filebeat
什么是 Filebeat?
Filebeat 用于监控虚拟机内的日志目录或作为容器日志收集的边车(sidecar),将日志转发至后续处理系统(通常是 Logstash)
使用 ELK 是否必须搭配 Filebeat?什么场景适合使用 Filebeat?
Filebeat 是 ELK 技术栈的典型组件(由 Elastic 开发)。虽然可以直接发送日志到 Logstash,但这通常需要修改应用代码。对于测试覆盖度低的遗留系统,使用 Filebeat 无需修改代码,是更好的选择
判断正误:单个 harvester 可采集多个文件(根据 filebeat.yml 的配置限制)
错误。一个 harvester 只处理一个文件
什么是 Filebeat 模块?
预配置的模块,针对特定日志来源(如 Traefik、Fargate、HAProxy)提供开箱即用的日志转发配置
Elastic 技术栈
如何保障 Elastic 技术栈的安全性?
可通过 Elastic 工具生成证书,并通过配置启用基于证书的安全认证机制
分布式系统
解释分布式计算(或分布式系统)
根据 Martin Kleppmann 的定义: “多个进程运行在多台机器上…仅通过不可靠网络进行消息传递(存在延迟波动),系统可能面临部分故障、不可靠时钟和进程暂停等问题” 另一种定义:”物理上分离但逻辑上互连的系统”
哪些因素可能导致系统故障?
• 网络问题 • CPU 故障 • 内存故障 • 磁盘故障
什么是”CAP 定理”?(又称布鲁尔定理)
根据 CAP 定理,分布式数据存储无法同时满足以下三项中的两项: • 可用性:每个请求都能获得响应(不要求最新数据) • 一致性:每个请求都能获得最新数据响应 • 分区容错性:即使部分数据丢失,系统仍能继续运行
以下设计存在什么问题?如何改进?
问题: 1. 主备切换需要时间(意味着明显停机时间) 2. 备用服务器资源浪费(主服务器运行时备用服务器闲置)
以下设计存在什么问题?如何改进?
问题: 负载均衡器故障会导致整个系统不可用 改进方案: • 增加备用负载均衡器 • 使用 DNS A 记录实现双负载均衡 • 引入消息队列
什么是”无共享”架构?
该架构中数据存储和检索都是通过单一非共享源完成的,通常与特定节点独占连接。不同于请求可路由到任意节点并从共享存储获取数据的架构
解释边车模式(Sidecar Pattern)
其他
名称 | 主题 | 目标与说明 | 解决方案 | 备注 |
---|---|---|---|---|
高可用 “Hello World” | 练习 | 解答 |
在浏览器地址栏输入 URL 后会发生什么?
1. 浏览器按以下顺序在 DNS 中搜索域名对应的 IP 地址: • 浏览器缓存 • 操作系统缓存 • 用户系统配置的 DNS 服务器(可能是 ISP DNS、公共 DNS 等) 2. 如果本地未找到 DNS 记录,则启动完整的 DNS 解析流程 3. 使用 TCP 协议与服务器建立连接 4. 浏览器向服务器发送 HTTP 请求 5. 服务器返回 HTTP 响应给浏览器 6. 浏览器渲染响应内容(如 HTML) 7. 浏览器根据需要继续发送后续请求获取嵌入资源(如链接、JavaScript、图片等),重复步骤 3-5 TODO: 补充更多细节!
API
什么是 API 网关?
API 网关如同系统间的守门员,负责控制不同组件间的通信和数据交换。 主要功能包括: • 将请求路由至对应后端服务 • 负载均衡 • 安全认证 • 限流 • 缓存 • 监控 通过 API 网关,企业可以简化 API 管理,确保安全治理一致性,提升后端服务性能和可扩展性。在微服务架构中尤为常见,便于众多小型独立服务被不同客户端访问
使用 API 网关有哪些优势?
优势: • 简化 API 管理:提供统一入口点,便于管理和监控多个 API • 增强安全性:实施认证、授权和加密等安全机制保护后端服务 • 提升扩展性:有效处理流量高峰,优化资源利用率 • 支持服务组合:整合多个后端服务为单一 API,精细化控制服务访问 • 促进外部系统集成:将内部服务安全暴露给合作伙伴或客户,支持新业务模式
什么是 API 中的 Payload(有效载荷)?
什么是自动化?与编排(Orchestration)有何关联与区别?
自动化指通过技术手段减少人工干预,聚焦于任务级别。编排则是自动化包含多个任务(常跨系统)的流程或工作流
分享你发现并修复过哪些有趣的 Bug?
什么是调试器?其工作原理是?
应用程序可能包含哪些服务?
• 授权服务 • 日志服务 • 认证服务 • 订单服务 • 前端服务 • 后端服务 …
什么是元数据(Metadata)?
描述数据的数据,即说明底层数据所包含的信息类型
若可选 JSON/YAML/XML,你会选择哪种格式?为什么?
这取决于具体使用场景 :)
什么是 KPI(关键绩效指标)?
什么是 OKR(目标与关键成果法)?
什么是领域特定语言(DSL)?
为特定领域创建的定制化语言,便于领域专家理解和解释
KPI 与 OKR 有何区别?
YAML
什么是 YAML?
数据序列化语言,广泛应用于 Kubernetes、Ansible 等技术
判断正误:任何有效的 JSON 文件都是有效的 YAML 文件
正确。因为 YAML 是 JSON 的超集
以下数据采用什么格式?
{
applications: [
{
name: "my_app",
language: "python",
version: 20.17
}
]
}
JSON
以下数据采用什么格式?
applications:
- app: "my_app"
language: "python"
version: 20.17
YAML
如何在 YAML 中编写多行字符串?适用哪些场景?
someMultiLineString: |
第一行内容
第二行内容
第三行内容
适用于编写 shell 脚本等需要多行命令的场景
someMultiLineString: |
与 someMultiLineString: >
有何区别?
使用
>
会将多行内容折叠为单行:
someMultiLineString: >
这实际上是
一个单行文本
别被表面格式迷惑
YAML 中的占位符是什么?
允许引用变量值而非直接写入,用法示例:
username: {{ my.user_name }}
如何在单个 YAML 文件中定义多个组件?
使用
---
分隔符,示例:
document_number: 1
---
document_number: 2
固件
Cassandra
运行 Cassandra 集群时,需要多久执行一次 nodetool repair 以保持集群一致性? • 在列族 GC-grace 周期内(通常每周一次) • 小于压缩分区最小字节限制 • 取决于压缩策略选择
HTTP
描述 HTTP 请求的生命周期
• 通过 DNS 解析器解析主机名 • 客户端发送 SYN 包 • 服务器返回 SYN+ACK 包 • 客户端发送 ACK 包 • 发送 HTTP 请求 • 接收 HTTP 响应
判断正误:HTTP 是有状态的
错误。HTTP 本身不维护请求间的状态
HTTP 请求的组成结构是?
包含: • 请求行 - 请求方法类型 • 头部 - 内容长度、编码等信息 • 正文(可选)
HTTP 有哪些请求方法?
• GET • POST • HEAD • PUT • DELETE • CONNECT • OPTIONS • TRACE
HTTP 响应状态码有哪些类别?
• 1xx - 信息性响应 • 2xx - 成功响应 • 3xx - 重定向 • 4xx - 客户端错误 • 5xx - 服务器错误
什么是 HTTPS?
HTTPS 是 HTTP 的安全版本,通过 SSL/TLS 加密确保数据传输的私密性和安全性 了解更多:https://www.cloudflare.com/learning/ssl/why-is-http-not-secure/
解释 HTTP Cookie 的作用
由于 HTTP 无状态,Cookie 用于在客户端与服务器间共享状态信息 TODO: 详细说明 Cookie 的机制
什么是 HTTP 管线化(Pipelining)?
收到 HTTP 服务器返回的 “504 Gateway Timeout” 错误意味着什么?
表示服务器未能在规定时间内从其他协作服务器获得响应
什么是代理服务器?
代理服务器充当客户端与目标服务器之间的中介,可提升隐私、安全性和性能。功能包括: • 隐藏客户端真实 IP • 内容过滤 • 数据缓存 • 负载均衡 • 流量日志分析
什么是反向代理?
反向代理位于客户端与服务器之间,处理来自客户端的请求方向与传统代理相反。主要用途: • 提升 Web 服务器性能 • 提供高可用性和容错 • 增强安全性(避免直接暴露后端服务器) • 用于大型网站管理请求分发,提升可扩展性和可靠性
项目发布时需选择许可证,你熟悉哪些类型?更倾向使用哪种?
解释 “X-Forwarded-For” 头部的作用
维基百科: “X-Forwarded-For (XFF) HTTP 头字段用于识别通过代理或负载均衡器连接到 Web 服务器的客户端原始 IP 地址”
负载均衡
什么是负载均衡器?
负载均衡器负责接收(或拒绝)客户端的网络请求,并依据特定规则(应用相关或网络层面)将请求分发至后端服务器(至少一台)
为何使用负载均衡器?
• 扩展性:通过增加后端服务器处理更多请求 • 冗余性:某台后端服务器故障时,自动将流量切换至其他正常服务器,确保服务不间断
你熟悉哪些负载均衡算法?
• 轮询(Round Robin) • 加权轮询(Weighted Round Robin) • 最小连接数(Least Connection) • 加权最小连接数(Weighted Least Connection) • 基于资源(Resource Based) • 固定权重(Fixed Weighting) • 加权响应时间(Weighted Response Time) • 源 IP 哈希(Source IP Hash) • URL 哈希(URL Hash)
轮询算法有哪些局限性?
• 无法感知服务器负载差异,可能导致高负载请求集中在某台服务器 • 每次请求创建新会话,不利于需要会话保持的场景
什么是应用负载均衡器(ALB)?
哪些场景适合使用 ALB?
负载均衡器可工作在哪些 OSI 层级?
第四层(传输层)和第七层(应用层)
能否不使用专用负载均衡实例实现负载均衡?
可以,通过 DNS 轮询实现基础负载均衡
什么是 DNS 负载均衡?其优缺点及适用场景是?
负载均衡器 - 会话粘性
什么是会话粘性(Sticky Sessions)?其优缺点是什么?
推荐阅读: • Red Hat 文章 缺点: • 可能导致实例负载不均衡(请求被路由到相同实例) 优点: • 确保新建请求不会丢失正在进行的会话
列举一个使用会话粘性的场景
需要确保用户不会丢失当前会话数据时使用,例如购物车或登录状态维护
会话粘性通过什么机制实现”粘性”?
Cookie。分为应用生成的 Cookie 和时效性 Cookie 两种类型
解释应用生成的 Cookie
• 由应用程序或负载均衡器生成 • 通常可包含自定义数据
解释时效性 Cookie
• 由负载均衡器生成 • 时效过期后会话粘性失效
负载均衡器 - 负载均衡算法
解释以下负载均衡技术: • Round Robin(轮询) • Weighted Round Robin(加权轮询) • Least Connection(最小连接数) • Weighted Least Connection(加权最小连接数) • Resource Based(基于资源) • Fixed Weighting(固定权重) • Weighted Response Time(加权响应时间) • Source IP Hash(源 IP 哈希) • URL Hash(URL 哈希)
连接排空(Connection Draining)的使用场景是?
确保负载均衡器在实例注销或异常时停止向其发送新请求,同时保持现有连接开放。允许负载均衡器完成正在进行的请求处理。 在 GCP 和 AWS 上,最大超时时间可设置为 1 至 3,600 秒
许可证
了解”知识共享协议(Creative Commons)”吗?请简要说明
知识共享协议是一套允许创作者在保留部分权利的前提下分享作品的版权许可体系。主要包含六种类型: • CC BY(署名):允许商业使用和改编,需注明原作者 • CC BY-SA(署名-相同方式共享):允许商业使用和改编,需署名且衍生作品使用相同协议 • CC BY-ND(署名-禁止演绎):允许商业使用但禁止改编,需署名 • CC BY-NC(署名-非商业性使用):允许非商业改编,需署名 • CC BY-NC-SA(署名-非商业性使用-相同方式共享):允许非商业改编,需署名且衍生作品使用相同协议 • CC BY-NC-ND(署名-非商业性使用-禁止演绎):仅允许下载分享,禁止商业使用和改编,需署名 更多信息:https://creativecommons.org/licenses/
解释 Copyleft 与宽松许可证的区别
Copyleft 要求衍生作品使用相同许可(如 GPL-3),而宽松许可证无此限制(如 BSD)
随机问题
搜索引擎如何工作?
自动补全功能如何实现?
什么是内存泄漏?
程序未能释放不再需要的内存,导致内存占用持续增长的现象。可能引发系统崩溃、性能下降等问题,常见于老旧系统维护不当或新组件兼容性问题
你最喜欢的协议是?
SSH HTTP DHCP DNS …
什么是缓存 API?
存储
存储有哪些类型?
• 文件存储 • 块存储 • 对象存储
解释对象存储
• 数据被划分为自包含的对象 • 对象可包含元数据
对象存储的优缺点是什么?
优点: • 按实际使用量计费 • 存储空间可弹性扩展 缺点: • 通常性能低于其他存储类型 • 无法局部修改(需重新创建整个对象)
对象存储的典型用例有哪些?
解释文件存储
• 以分层文件结构存储数据 • 典型设备:硬盘、闪存盘、云存储 • 文件通常组织在目录中
文件存储的优缺点是什么?
优点: • 用户对文件有完全控制权(增删改查) • 支持文件锁定等安全机制
文件存储的示例有哪些?
本地文件系统 Dropbox Google Drive
存储设备有哪些类型?
解释 IOPS(每秒输入输出操作次数)
解释存储吞吐量
什么是文件系统?
组织存储数据的系统,常见类型包括: Windows: • NTFS • exFAT Mac OS: • HFS+ • APFS
解释暗数据(Dark Data)
解释主引导记录(MBR)
面试中可以提出的问题
以下问题供候选人在面试中或面试后向面试官提问,请根据实际情况酌情使用。请注意,并非所有面试官都能(或愿意)回答这些问题,这或许能帮助您评估工作环境的适宜性。
您最喜欢在这里工作的哪一点?
公司如何促进员工个人成长?
当前面临的技术债务程度如何?
注意:所有公司都存在技术债务。建议以理解的态度询问,了解团队如何处理计划外工作及设定项目预期
为什么我不应该加入贵公司?(或”您不喜欢在这里工作的哪些方面?”)
您参与过最有趣的项目是什么?
可了解公司正在开展的项目类型,判断是否符合个人兴趣。同时反映管理者是否支持员工学习成长
如果能够改变日常工作的一点,您会改变什么?
帮助识别公司痛点,同时展示您解决类似问题的能力
假设我被录用,您期望我在 X 个月内达成哪些目标?
明确岗位预期,了解入职初期工作重点
测试
解释白盒测试
解释黑盒测试
什么是单元测试?
单元测试是一种通过系统性地分解系统并测试每个独立组件的软件测试技术。这些测试是自动化的,可以重复运行,帮助开发者在开发过程中快速发现边界场景和错误。 单元测试的主要目标是验证每个函数在给定输入时能正确输出结果。
测试 Web 应用时你会运行哪些类型的测试?
解释测试框架(Test Harness)
什么是 A/B 测试?
什么是网络模拟?如何进行?
你熟悉哪些性能测试类型?
解释以下测试类型: • 负载测试(Load Testing) • 压力测试(Stress Testing) • 容量测试(Capacity Testing) • 数据量测试(Volume Testing) • 耐久性测试(Endurance Testing)
正则表达式
给定一个文本文件,完成以下练习
提取
提取所有数字
• “\d+”
提取每行第一个单词
• “^\w+” 附加题:提取每行最后一个单词 • “\w+(?=\W*$)”(多数情况适用,取决于行格式)
提取所有 IP 地址
• “\b(?:\d{1,3}\ .){3}\d{1,3}\b”(匹配 IPv4 格式)
提取 yyyy-mm-dd 或 yyyy-dd-mm 格式的日期
提取电子邮件地址
• “\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\ .[A-Za-z]{2,}\b”
替换
将制表符替换为四个空格
将 ‘red’ 替换为 ‘green’
系统设计
解释什么是”单点故障”
系统中存在某个组件,如果该组件发生故障将导致整个系统瘫痪或严重中断运行。简而言之,即系统中没有备用方案来应对该故障的脆弱点。
什么是 CDN?
CDN(Content Delivery Network,内容分发网络)负责地理分布内容。其核心是边缘节点(缓存代理),通过缓存机制和地理分布使用户能快速获取内容。
解释多 CDN 架构
单 CDN 架构中所有内容源自单一 CDN。多 CDN 架构中,内容分布在多个不同 CDN 提供商/云平台上。
相比单 CDN,多 CDN 有哪些优势?
• 容灾性:避免单点故障 • 成本灵活:可选择性价比较高的 CDN • 性能优化:可选择更靠近用户的节点 • 扩展性:支持更大规模流量
解释”三层架构”(含优缺点)
将应用分为表现层、业务逻辑层和数据存储层的设计模式。 优点: • 可扩展性 • 安全性 • 可复用性 缺点: • 复杂性 • 性能开销 • 开发成本高
解释单体仓库(Mono-repo)与多仓库(Multi-repo)的优缺点
单体仓库: 优点: • 统一工具链 • 代码共享 缺点: • 复杂度高 • 克隆速度慢 多仓库: 优点: • 管理简单 • 支持并行开发 缺点: • 代码重复 • 集成挑战
单体架构有哪些缺点?
• 不适合频繁代码变更和快速部署 • 对现代云基础设施支持不足 • 团队协作扩展困难 • 单个组件故障导致全系统瘫痪
微服务架构相比单体架构有何优势?
• 单个服务故障不会影响整个系统 • 各服务可由独立团队使用不同技术栈开发
什么是服务网格(Service Mesh)?
管理微服务间通信的基础设施层,处理负载均衡、加密和监控等任务。
解释”松耦合”
系统组件间通过最小化内部实现认知进行通信,提升复杂系统的扩展性和可维护性。
什么是消息队列?使用场景?
分布式系统中实现异步通信的机制,常用于微服务架构。
可扩展性
解释可扩展性
根据需求轻松扩展系统规模和容量的能力。
解释弹性扩展
根据需求动态增减资源的能力。
解释灾难恢复
在中断事件后恢复关键业务系统和数据的过程,旨在最小化影响并快速恢复运营。
解释容错与高可用性
容错:系统自愈和恢复正常的能力 高可用:通过多平台访问资源的持续可用性
垂直扩展与水平扩展的区别?
垂直扩展:通过升级硬件(如增加 CPU/RAM)提升单机性能 水平扩展:通过增加服务器数量分摊负载(需配合负载均衡器)
缓存
什么是缓存?适用场景?
将高频访问数据存储于快速存储介质(如内存)以加速读取。
什么是分布式缓存?
跨多节点分布的缓存系统,支持大规模数据访问。
为什么不将所有数据写入缓存而不用数据库?
缓存用于加速读取,数据库专注持久化存储和管理,两者设计目标不同。
系统设计案例
如何设计视频流网站?
如何设计图片上传网站?
如何构建 URL 缩短服务?
更多系统设计练习请访问 system-design-notebook 仓库。
硬件
什么是 CPU?
中央处理器(CPU)执行由程序指令规定的基本算术运算、逻辑运算、控制操作和输入/输出(I/O)操作。这与外部组件(如主存储器和 I/O 电路)以及专用处理器(如图形处理器 GPU)形成对比。
什么是 RAM?
随机存取存储器(RAM)是计算设备中存储操作系统(OS)、正在使用的应用程序和数据的硬件,以便设备的处理器能快速访问。RAM 是计算机的主存储器,其读写速度远快于其他类型的存储设备(如硬盘驱动器 HDD、固态硬盘 SSD 或光驱)。
什么是 GPU?
图形处理器(GPU)是一种专用电子电路,旨在加速图像和视频处理以便在计算机屏幕上显示。
什么是嵌入式系统?
嵌入式系统是由计算机处理器、内存和输入/输出外设组成的计算机系统,在更大的机械或电子系统中具有专用功能。它通常作为完整设备的一部分嵌入,包含电气/电子硬件和机械组件。
能举个嵌入式系统的例子吗?
嵌入式系统的常见例子是微波炉的数字控制面板,由微控制器管理。当专注于特定目标时,树莓派(Raspberry Pi)也可作为嵌入式系统使用。
存储设备有哪些类型?
存储设备类型包括硬盘驱动器(HDD)、固态硬盘(SSD)、光驱(CD/DVD/蓝光),其他类型还有 U 盘、存储卡和网络附加存储(NAS)。
DevOps 团队在选择硬件时应考虑哪些因素?
选择适合的 DevOps 硬件对于确保流畅的 CI/CD 流水线、及时反馈循环和稳定服务可用性至关重要。以下是 DevOps 团队应考虑的关键因素: 1. 理解工作负载: ◦ CPU:根据任务需求选择多核或高主频 CPU ◦ RAM:确保足够内存支持大规模编码或高强度自动化 ◦ 存储:评估存储速度与容量,优选 SSD 提升操作速度 2. 扩展能力: ◦ 水平扩展:通过增加设备提升容量 ◦ 垂直扩展:支持单机升级(如内存、CPU) 3. 网络连接: ◦ 数据传输:确保高速网络连接支持代码获取与数据传输 ◦ 低延迟:分布式任务需优先考虑 ◦ 备用链路:部署备用网络路径避免停机 4. 持续可用性: ◦ 采用 RAID 配置、备用电源或冗余网络确保服务连续性 5. 系统兼容性: ◦ 确保硬件与软件、操作系统及目标平台兼容 6. 能效优化: ◦ 选择节能硬件降低大规模部署的长期成本 7. 安全防护: ◦ 采用 TPM 等硬件级安全功能 8. 远程管理: ◦ 使用 ILOM 等工具实现远程监控与维护 9. 成本控制: ◦ 综合评估购置成本与长期运维费用 10. 厂商支持: ◦ 选择提供可靠支持与持续驱动更新的供应商 11. 前瞻规划: ◦ 硬件需满足当前及未来需求 12. 运行环境: ◦ 配备散热系统应对高性能硬件发热 ◦ 评估机架空间与供电稳定性 13. 混合云协同: ◦ 确保本地硬件与云资源无缝集成 14. 硬件生命周期: ◦ 明确硬件服役周期与升级计划 15. 虚拟化支持: ◦ 优化硬件以适应虚拟机/容器工作负载 16. 模块化设计: ◦ 支持组件独立更换提升灵活性 17. 避免厂商锁定: ◦ 除非有明显优势,否则保持多供应商选择 18. 环保考量: ◦ 优先选择节能环保型硬件 简而言之,DevOps 团队应选择性能优异、扩展灵活、预算合理且兼容未来技术演进的硬件方案,同时重视长期维护与升级潜力。
硬件在灾难恢复计划中起什么作用?
硬件在灾难恢复(DR)解决方案中至关重要。虽然 DR 的宏观范畴包括标准流程、规范与人员协作,但硬件才是保障业务连续性的基石: 1. 数据存储与冗余: ◦ 磁带库、备份服务器等设备实现异地数据保护 ◦ RAID 等磁盘阵列通过冗余机制防止数据丢失 2. 备用系统: ◦ 备份服务器在主系统故障时接管服务 ◦ 负载均衡器自动分流故障节点流量 3. 恢复站点: ◦ 热备站点(即时接管)、冷备站点(基础环境)与温备站点(部分配置)分级部署 4. 电力保障: ◦ UPS 应对短时断电,发电机支持持续运行 5. 网络冗余: ◦ 多运营商链路保障网络连通 ◦ VPN 等设备确保远程安全接入 6. 物理基础设施: ◦ 标准机架管理与应急散热方案 ◦ 卫星电话、无线电等替代通信手段 7. 安全防护: ◦ 防火墙与门禁系统保护 DR 基础设施 8. 硬件标准化: ◦ 统一硬件配置简化紧急替换流程 9. 测试验证: ◦ 专用测试设备验证 DR 方案有效性 总结:硬件提供灾难恢复的物理基础,需确保其具备弹性、冗余性并定期验证,与软件方案及人员流程形成完整 DR 体系。
什么是 RAID?
RAID(独立磁盘冗余阵列)是通过将多个硬盘组合成单一逻辑单元来提升性能、扩大存储容量或提供数据冗余的技术。不同 RAID 级别(如 RAID 0、RAID 1、RAID 5)在性能、冗余和存储效率方面各有侧重。
什么是微控制器?
微控制器是嵌入式系统中用于执行特定任务的小型集成电路,通常包含 CPU、存储器和输入/输出外设。
什么是网络接口控制器(NIC)?
网络接口控制器(NIC)是使计算机能够连接网络并与其他设备通信的硬件组件。
什么是 DMA?
直接内存访问(DMA)允许特定硬件子系统直接访问主内存而无需 CPU 介入。该机制使外设能与内存直接交换数据,同时释放 CPU 处理其他任务。
什么是实时操作系统?
实时操作系统(RTOS)专为有时间关键性要求的计算任务设计,能确保在严格时限内完成数据处理。与分时操作系统不同,RTOS 采用事件驱动和抢占式调度,根据任务优先级动态调整执行顺序,所有操作必须在预定时间约束内完成。
列出中断类型
中断主要分为六类: • 外部中断 • 机器检查中断 • I/O 中断 • 程序中断 • 重启中断 • 监督程序调用(SVC)中断
大数据
请准确解释什么是大数据
根据 Doug Laney 的定义,大数据具备以下特征: • 数据量(Volume):海量数据规模 • 速度(Velocity):实时、批处理、流式数据 • 多样性(Variety):结构化、半结构化和非结构化数据混合 • 准确性/可变性(Veracity/Variability):存在不一致、不准确或波动的数据
什么是 DataOps?它与 DevOps 有何关联?
DataOps 旨在缩短数据分析端到端周期,从创意产生到最终生成有价值图表和模型的整个过程。DataOps 融合了敏捷开发、DevOps 和统计过程控制方法,并将其应用于数据分析领域。
解释不同数据格式的差异
• 结构化数据 - 具有明确格式和长度的数据(如数字、文字) • 半结构化数据 - 无固定格式但自描述的数据(如 XML、SWIFT) • 非结构化数据 - 无特定格式的数据(如图片、短信)
能解释数据湖和数据仓库的区别吗?
什么是”数据版本控制”?有哪些实现模式?
什么是 ETL?
Apache Hadoop
解释 Hadoop YARN
负责集群计算资源管理和用户应用程序调度
解释 Hadoop MapReduce
面向大规模数据处理的编程模型
解释 Hadoop 分布式文件系统(HDFS)
• 分布式文件系统,提供高聚合带宽 • 用户视角类似常规文件系统,实际数据分布在集群节点 • 典型文件大小为 TB 级,支持百万级文件存储 • 具备容错能力,支持自动故障恢复 • 适合长时间批量处理而非实时分析
你了解 HDFS 架构吗?
HDFS 架构文档 • 主从架构 • Namenode 主节点,Datanodes 从节点 • 文件分割为块存储 • 数据块存储在 Datanodes • Namenode 管理元数据
Ceph
解释 Ceph 是什么
Ceph 是开源分布式存储系统,提供卓越性能、可靠性和扩展性,常用于云计算环境和数据中心。
判断正误:Ceph 更重视数据一致性与正确性而非性能
正确
Ceph 支持哪些存储类型?
• 对象存储(RGW) • 块存储(RBD) • 文件存储(CephFS)
什么是 RADOS?
• 可靠自主分布式对象存储 • 提供底层数据对象存储服务 • 强一致性保证 • 简化上层(块/文件/对象)设计与实现
描述 RADOS 的软件组件
• Monitor(监控器) • 集群认证、数据分布策略的中心节点 • 协调所有集群组件 • 使用 Paxos 算法保护关键状态 • Manager(管理器) • 聚合实时指标(吞吐量、磁盘使用等) • 可扩展管理功能宿主 • 集群内 1 主多备 • OSD(对象存储守护进程) • 在 HDD/SSD 存储数据 • 处理客户端 IO 请求
描述 Ceph 数据读取流程
流程如下: 1. 客户端向 Ceph 集群发起数据读取请求: > 客户端类型可能包含 >> Ceph 块设备 >> Ceph 对象网关 >> * 第三方客户端 2. 客户端从 Monitor 获取最新集群映射 3. 使用 CRUSH 算法将对象映射到归置组(PG),确定对应 OSD 4. 客户端直接从目标 OSD 获取数据
描述 Ceph 数据写入流程
流程如下: 1. 客户端发起数据写入请求 2. 获取最新集群映射 3. 通过 CRUSH 算法确定 PG 和主 OSD 4. 数据写入主 OSD(纠删码存储时主 OSD 负责编码分片分发)
什么是”归置组”(Placement Groups)?
详细描述:对象 -> 存储池 -> 归置组 -> OSD 的关系
什么是 OMAP?
元数据服务器是什么?如何运作?
Packer
什么是 Packer?用途是什么?
Packer 是自动化创建机器镜像的工具。它专注于部署前的配置固化,能大幅提升实例启动速度。优势包括: 1. 部署速度 - 预先配置减少部署时配置时间 2. 不可变基础设施 - 统一配置降低环境差异风险
Packer 采用”配置优先”还是”部署优先”模式?
采用”配置->部署”模式,优势包括: 1. 部署速度优势 - 预先配置减少部署耗时 2. 更高的环境一致性 - 配置固化降低部署差异