加载中

面经

文章分类

浏览该分类下的所有文章

48 篇文章 4

消息队列 & 搜索引擎

MQ的核心价值在于解耦、异步和削峰:通过消息队列将模块间调用转为订阅发布,提升扩展性并平滑突发流量。生产者‑消费者模型依赖共享缓冲区,可用 wait/notify、Lock Condition 或 BlockingQueue 实现。顺序消费需保证同一业务(如订单号)落在同一队列/分区,RabbitMQ 用多队列、Kafka 用同键分区、RocketMQ 用同 MessageQueue。为防止消息丢失,需开启持久化、ACK/confirm 机制并在生产者、Broker、消费者侧分别处理。重复消费通过幂等设计或唯一标识防止。异常时常配死信队列重新处理。推模式适合实时广播,拉模式适合按需获取。RabbitMQ 强实时性与可靠性,Kafka 侧重高吞吐和流式处理,两者在架构、确认机制、负载均衡等方面各有优势。

分布式(一)

CAP定理说明分布式系统只能同时满足一致性、可用性、分区容错三者中的两项。高并发系统需兼顾高性能、高可用和高扩展,分别用响应时间、可用率、线性扩容等指标衡量,并通过纵向/横向扩展、分层架构、缓存、限流、异步等技术实现。分布式存储常见架构有中心控制的HDFS、无中心计算的Ceph和一致性哈希的Swift。分布式事务可采用两阶段提交(2PC)或TCC模式,各有优缺点。

分布式(二)

本文阐述分布式系统实现最终一致性的技术路径。先介绍Open Group的DTS模型及JEE的XA事务,随后详细比较两阶段提交、三阶段提交和阿里提出的TCC,分析各自的阻塞、单点故障和脑裂风险,并说明TCC通过补偿机制降低人工干预。接着提出实现最终一致性的实用模式:查询接口、补偿/异步确保、定期校对、可靠消息以及缓存弱一致性。随后讨论分布式单点问题的解决思路,对无状态服务通过冗余代理、对有状态服务采用主备选举(ZooKeeper、Paxos/Raft)进行容错。最后简要对比HTTP与RPC在协议、性能、负载均衡和服务治理上的差异。

计算机网络(一)

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

计算机网络(二)

本文阐述TCP的四次挥手过程及其必要性,解释最后一次ACK的作用;分析TCP粘包、拆包产生原因及解决方案;比较TCP与UDP的特性、可靠性与对网络稳定性的要求,并提出实现可靠UDP的思路;给出TCP报文序号字段长度及缓冲区的作用。

计算机网络(三)

本文阐述TCP的RST异常终止及其常见场景,介绍在应用层实现可靠UDP的确认、重传机制及RUDP、RTP、UDT等实现;分析TCP报文乱序的处理方式;讲解IP地址A‑E类划分及分类对路由表规模的意义;比较IPv4与IPv6在地址长度、报文头、分片、IPSec等方面的差异;对比HTTP与HTTPS,说明HTTPS的SSL握手、混合加密原理以及常用对称、非对称和Hash算法。

计算机网络(四)

本文系统阐述了网络协议的关键概念与实现细节。首先分步解析HTTPS握手过程,说明服务器公私钥、客户端随机对称密钥以及两轮加密传输。随后归纳HTTP错误码,分别列出4xx客户端错误和5xx服务器错误的常见状态及含义,并概括状态码的分类(信息、成功、重定向、客户端错误、服务器错误)及典型示例。重点比较了301永久重定向与302临时重定向、以及302与304的区别,说明其对搜索引擎的影响。进一步描述完整的HTTP请求链路,包括DNS解析的层层查询与缓存机制。最后区分了服务器端请求转发与浏览器端重定向的行为差异,并简要介绍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 的基本概念和五大模型——阻塞、同步非阻塞、I/O 多路复用、信号驱动、异步 I/O,比较了各自的实现方式与适用场景。随后阐述了软链接与硬链接的区别、inode 作用及创建方法。接着说明缺页中断的触发条件、处理流程及与普通中断的差异。随后区分了硬中断和软中断的产生机制、可屏蔽性和响应过程。最后讲解了写时拷贝(Copy‑On‑Write)在 fork、vfork 等场景中的实现原理及其优势。