面经

浏览该分类下的所有文章

消息队列 & 搜索引擎

消息队列用于解耦、异步、削峰;生产者‑消费者通过共享队列实现,可用wait/notify、Lock或BlockingQueue。顺序消费通过同键落在同一分区或队列保证。防止丢失依赖持久化、ACK/confirm、复制和手动提交offset;防重复通过唯一ID或幂等。失败时采用死信队列重试。推模式适实时广播,拉模式适按需获取。RabbitMQ强调可靠性实时性,Kafka强调高吞吐。

分布式(一)

CAP 原则指出分布式系统只能同时满足一致性、可用性、分区容错三者中的两项。高并发指大流量场景,需要在架构、编码、产品层面进行整体设计,目标是实现高性能、高可用和高扩展,并通过响应时间、TP99、可用率(3~4 个 9)和线性扩容等指标衡量。常用的实践包括纵向/横向扩展、分层架构、缓存、限流、异步化、容错切换、降级、监控等。分布式存储可采用中心化(HDFS)或无中心(Ceph、Swift)架构,实现数据分片与一致性哈希。分布式事务常用 2PC 与 TCC 两阶段方案,分别在一致性、单点故障和并发性能上各有优劣。

分布式(二)

本文围绕分布式系统的最终一致性展开,首先介绍了Open Group 的 DTS 模型及 JEE 中的 TX、XA 协议,并详细说明了两阶段提交、三阶段提交以及阿里提出的 TCC 方案的流程、优缺点。随后提出在高并发场景下实现最终一致性的实用模式:查询、补偿、异步确保、定期校对、可靠消息以及缓存一致性,并给出相应的实现要点。接着讨论了分布式单点故障,分别阐述了无状态服务的冗余方案和有状态服务的主备、选举(ZooKeeper、Paxos、Raft)机制。最后简要对比了 HTTP 与 RPC 在协议、性能、负载均衡和服务治理等方面的区别,指出 RPC 更适合内部高效调用。

计算机网络(一)

本文系统介绍了网络分层模型与关键协议。先阐述OSI七层及其功能,再对比简化的五层TCP/IP模型。说明客户端通过URL确定协议,指出TCP属传输层、HTTP/FTP属应用层。详细解析TCP报文结构、流量与拥塞控制,概述HTTP特性与常用方法、FTP工作方式及状态管理。介绍传输层的复用/分用、端口及流量、拥塞控制,列举常见应用层协议。最后说明TCP/IP四层结构的开放、硬件无关优势,并解释ARP的工作原理和缓存机制。

计算机网络(二)

TCP四次挥手过程及原因:客户端FIN→服务器ACK→服务器FIN→客户端ACK,分别关闭双向数据通道,最后ACK确保对方已收到。TCP粘包/拆包源于流式无边界传输,可通过包头+长度或分隔符在应用层解决;Nagle算法可导致粘包,关闭TCP_NODELAY可缓解。TCP与UDP对比:TCP面向连接、可靠、具拥塞控制,适用于对可靠性要求高的场景;UDP无连接、快速、无保证,适合实时传输。UDP实现可靠性需在应用层加入超时重传和序号确认。TCP报文序号字段占4字节,缓冲区用于存储待发送和接收的数据,实现流控和重传。

计算机网络(三)

本文系统阐述了网络协议中的关键概念,包括TCP异常终止的RST报文及其触发场景;在应用层实现可靠UDP的机制与已有协议(RUDP、RTP、UDT);TCP报文乱序的处理方式;IP地址的A/B/C/D/E类划分及分类的路由意义;IPv4与IPv6在地址长度、报文结构、功能等方面的差异;HTTP与HTTPS的区别及HTTPS的工作原理、混合加密模式和支持的加密算法。

计算机网络(四)

本文系统阐述了网络协议的关键机制:HTTPS 通过服务器公私钥的非对称加密与客户端随机对称密钥的协商完成双向加密传输;HTTP 错误码分为客户端 4xx 与服务器端 5xx,列举常见状态码并解释含义;重点比较了 301 与 302(永久 vs 临时重定向)以及 302 与 304(重定向 vs 未修改)的区别;描述了一次完整的 HTTP 请求流程,包括浏览器发起 DNS 解析、递归查询根服务器、顶级域及权威服务器直至获取 IP 并建立连接;进一步区分了服务器端请求转发与客户端重定向的实现方式、请求次数、地址栏变化及数据共享特性;最后概述 DNS 解析的层级查询与缓存机制。

操作系统(一)

文章列举了Linux常用运维命令及用法,包括ps/grep查看进程和日志、grep的参数与正则表达式用法、hostname 与 hostnamectl 修改主机名、@reboot 或 rc.local 实现开机自启、free 与 top 查看内存、free 的常用选项,以及 tar、gzip、bzip2、compress、zip 等压缩/解压命令的基本语法和常用参数。

操作系统(二)

进程切换需保存完整上下文并刷新TLB,涉及地址空间切换,开销大于仅切换硬件上下文和内核栈的线程切换。进程间通信方式包括匿名管道、命名管道、信号、消息队列、共享内存、信号量和Socket,其中管道实现半双工、命名管道支持无亲缘进程、信号用于异步通知、消息队列在内核保存并支持随机读取、共享内存提供高速数据共享并需配合信号量同步。信号量是一种计数型同步机制,通过P(减)V(加)操作控制资源访问,防止并发进程竞争公共资源。

操作系统(三)

悲观锁在每次访问共享数据前都加锁,假设最坏情况会被修改;乐观锁不加锁,更新时通过版本号或CAS检查冲突。CAS(Compare‑And‑Swap)提供原子比较替换,常用于高并发计数。IO 多路复用让单线程监控多个描述符,select、poll 均为 O(n) 轮询,select 限制 1024 个 fd、poll 无上限但仍拷贝数组;epoll 采用红黑树和就绪队列,支持水平(LT)和边缘(ET)触发,查询为 O(1),对大规模连接效率最高。域名解析依次查浏览器缓存、系统缓存、本地域名服务器、根服务器、gTLD 服务器、权威 Name Server,最终返回 IP 并缓存。Linux 配置 IP 可用 ifconfig、setup 或编辑网卡配置文件,使用 dig 解析域名。IP 地址由网络号和主机号组成,子网掩码划分网络与主机,网关指向外部路由。

操作系统(四)

Linux 内存管理包括硬件层次(寄存器、CPU 缓存、主存、外存)和软件机制。通过虚拟内存把连续的虚拟地址映射到离散的物理页,使用多级页表、TLB 与大页降低转换开销。内核将页划分为 ZONE_DMA、ZONE_NORMAL、ZONE_HIGHMEM 等区域,并在 NUMA 系统中按节点独立管理。Page cache 缓解磁盘 I/O,匿名内存、回收、compact 与 OOM killer 负责内存碎片与不足的处理。段页机制实现地址空间隔离,分页提供细粒度映射;mmap 直接把文件映射到进程虚拟地址,省去 page cache 的二次拷贝。整体目标是提高访问效率、实现进程隔离并在内存紧张时保证系统稳定。

操作系统(五)

文章介绍了Linux的I/O模型,包括阻塞、同步非阻塞、IO多路复用、信号驱动和异步IO,并比较其优缺点;阐述了软链接与硬链接的概念、区别及使用场景;说明缺页中断的触发条件、处理流程以及与普通中断的差异;区分软中断与硬中断的产生方式、可屏蔽性和响应机制;最后解释了Copy‑On‑Write技术在fork等场景中的实现原理、优势和限制。