2026-01-22-八股积累

First Post:

Last Update:

Page View: loading...

计算机网络

  • 描述TCP和UDP的区别和各自的应用场景

    TCP(传输控制协议)是面向连接的、可靠的协议,提供数据传输的可靠性保障,适用于需要准确传输的应用,如网页浏览、文件下载、邮件收发等。UDP(用户数据报协议)是非连接的协议,传输速度快但不可靠,适用于实时性要求高的应用,如视频直播、语音通话、在线游戏等。

  • 如何快速判断一个ip地址是否属于国内?已知db中有几十万个国内ip地址段

    可以将IP地址转换为整数,将IP段存为区间范围,然后使用二分查找快速定位。也可以使用Trie树结构,或者利用数据库的区间索引进行查询。

  • 描述HTTPS协议的过程

    1. 客户端发送请求到服务器,携带支持的TLS版本和加密算法套件列表
    2. 服务器返回证书(包含公钥)、选择的加密算法等信息
    3. 客户端验证证书合法性,生成随机密钥,用公钥加密后发送给服务器
    4. 服务器用私钥解密,获得对称密钥
    5. 双方使用对称密钥进行加密通信
  • 实现一个开平方根的函数,结果精确到小数点后4位

    使用牛顿迭代法:x_{n+1} = (x_n + a/x_n)/2,其中a是要开方的数。当相邻两次结果差值小于0.00001时停止迭代。

  • TCP/IP是如何实现可靠传输的?有哪些具体的做法?

    1. 序列号和确认应答:确保数据按序到达
    2. 超时重传:未收到确认则重新发送
    3. 滑动窗口:控制流量和提高效率
    4. 拥塞控制:避免网络拥塞
  • tcp的三次握手和4次挥手的整个过程,中间状态

    三次握手:1. 客户端发送SYN 2. 服务端回复SYN+ACK 3. 客户端发送ACK
    四次挥手:1. 客户端发送FIN 2. 服务端回复ACK 3. 服务端发送FIN 4. 客户端回复ACK

  • TCP四次挥手为什么要有TIME_WAIT状态?

    1. 确保被动关闭方能收到最后的ACK确认
    2. 防止旧连接的重复数据包干扰新连接
  • 简述HTTPS 密钥的交换过程

    详见HTTPS协议过程,使用非对称加密交换对称加密的密钥

  • 简述TCP拥塞处理机制

    包括慢启动、拥塞避免、快重传、快恢复等算法,通过调整拥塞窗口大小来控制发送速率

  • 简述 select, poll, epoll 的区别

    select: 有最大文件描述符限制,效率随FD数量增加而下降
    poll: 无FD数量限制,但仍有性能瓶颈
    epoll: 事件驱动,效率高,适用于大量并发连接

  • 请描述从输入URL到页面加载完成的过程

    1. DNS解析获取IP地址 2. 建立TCP连接 3. 发送HTTP请求 4. 服务器处理并返回响应 5. 浏览器解析HTML/CSS/JS 6. 构建DOM树和渲染树 7. 绘制页面
  • 请描述TCP协议的特性及流量控制

    特性:面向连接、可靠传输、全双工通信、字节流传输
    流量控制:通过滑动窗口机制,接收方向发送方通告窗口大小来控制发送速率

  • ARP协议的工作原理及ARP欺骗

    工作原理:主机广播ARP请求询问IP对应的MAC地址,目标主机回应自己的MAC地址
    ARP欺骗:攻击者伪造IP-MAC映射关系,截获数据包

  • 弱网环境下抖音视频播放优化的方法

    1. 多码率自适应流媒体技术 2. 预加载策略 3. 缓存策略 4. QoS优先级控制
  • HTTP协议各状态码分类,GET和POST方法的区别

    状态码:1xx信息 2xx成功 3xx重定向 4xx客户端错误 5xx服务器错误
    GET和POST:语义不同、参数位置不同、缓存方式不同、幂等性不同

  • TCP与UDP的主要区别和应用场景

    见上面TCP/UDP区别问题的回答

  • Linux网络开发相关知识

    包括socket编程、网络I/O模型、网络协议栈、路由等知识

  • IFrame嵌入跨域问题

    主要涉及同源策略限制,可通过postMessage、CORS等方式解决

  • IP协议相关概念

    IP地址用于标识网络设备,子网掩码用于划分网络段,网关用于不同网络间的通信

  • Cookie、Session、Token的理解和区别

    Cookie存储在客户端,Session存储在服务端,Token是无状态的认证方式

  • HTTPS协议相关知识

    通过SSL/TLS协议对HTTP通信进行加密,确保数据安全

  • TCP/IP模型各层常见协议

    应用层:HTTP、FTP、SMTP等;传输层:TCP、UDP;网络层:IP、ICMP;数据链路层:以太网协议

  • QUIC协议的特点

    基于UDP,内置加密,减少握手延迟,改进拥塞控制

  • TCP状态相关问题

    包括ESTABLISHED、CLOSED、TIME_WAIT、FIN_WAIT等状态

  • TCP/IP四层网络模型

    应用层、传输层、网络层、网络接口层

  • URL请求流程

    见上面”从输入URL到页面加载完成的过程”

  • TCP拥塞控制算法

    包括慢启动、拥塞避免、快重传、快恢复等

  • MAC地址的作用

    物理地址,用于局域网内的设备识别和通信

  • NAT相关知识

    网络地址转换,解决IPv4地址不足问题

数据结构与算法

  • 省市县三级联动数据转换(array to tree)

    使用递归或循环遍历数组,通过parentId关联父子节点,构建树形结构

  • 一个有序数组随机位置被切成两段后对调,在对调之后的数组中查找一个元素

    使用改进的二分查找,先确定目标值可能在的有序段,再进行二分查找

  • 有序数组中寻找奇数次出现的数

    使用异或操作,相同的数异或后为0,最终结果为出现奇数次的数

  • 字符集和字符编码的理解

    字符集是字符集合,编码是字符在计算机中的表示方式

  • 不用加号的加法

    使用位运算:异或操作模拟无进位加法,与操作并左移一位模拟进位,重复直到无进位

  • 判断单向链表是否有环

    使用快慢指针,若有环则快指针会追上慢指针

  • URL反转

    使用双指针从两端向中间交换字符,或使用栈结构

  • 进程和线程的联系和区分

    进程是资源分配单位,线程是CPU调度单位;进程间独立,线程间共享进程资源

  • 进程通信的几种方式

    管道、消息队列、共享内存、信号量、Socket等

系统设计

  • 计数系统设计

    需要考虑高并发、数据一致性、实时性,可使用缓存+DB结合,异步处理等方案

  • 设计一个分布式任务调度系统

    需要任务管理、资源调度、负载均衡、故障恢复等功能,可使用Zookeeper等协调服务

  • 抽奖代码设计

    需要考虑公平性、防刷、并发控制、奖品库存管理等

  • 设计一个抓取系统

    需要考虑反爬策略、请求频率控制、数据存储、错误处理等

  • 用户标签系统

    需要标签定义、标签计算、标签存储、标签应用等功能

  • 健康宝功能抽象设计

    需要实现实名认证、核酸检测结果查询、弹窗提醒、行程追踪等功能

  • DDD和MVC的比较

    DDD关注业务领域模型,适合复杂业务;MVC关注数据-界面分离,适合简单业务

  • 设计任务分配器

    需要考虑负载均衡、故障转移、任务状态管理等

  • 微博热搜功能的技术方案

    需要考虑实时计算、热点发现、数据存储、排序算法等

  • 抖音合拍视频连带下架

    需要建立视频关联关系,实现批量操作机制

  • 流式Join系统设计

    需要考虑数据窗口、Join策略、容错机制等

  • 在线答题系统设计

    需要考虑题目推送、答题计时、结果判定、奖池分配等

  • RPC调度机制实现

    需要考虑服务发现、负载均衡、序列化、熔断等

  • 客户端配置系统设计

    需要实现远程配置下发、灰度发布、实时生效等功能

  • 西瓜视频播放卡顿监控报警系统

    需要考虑卡顿检测、数据收集、分析统计、报警机制等

  • 按时限流反抓取系统设计

    需要实现频率控制、时间窗口、黑白名单等功能

  • 领域驱动设计的理解

    通过领域模型指导系统设计,强调业务核心地位

  • 爬虫种子调度频度设计

    需要平衡更新频率和资源消耗,可使用增量更新策略

  • 渐进增强和优雅降级的区别

    渐进增强从基本功能开始逐步增强;优雅降级从高级功能开始逐步降级

  • 短链服务实现

    需要ID生成策略、存储映射关系、重定向功能等

  • 分布式cache系统设计方法

    需要考虑一致性哈希、数据分片、失效策略等

  • 12306系统售票系统设计

    需要考虑高并发、库存管理、事务一致性、分片策略等

  • 分布式定时任务管理系统

    需要任务调度、执行监控、故障转移等功能

  • 游戏战力排行榜设计

    需要考虑实时计算、数据存储、排名算法等

  • cache设计

    需要考虑LRU等淘汰策略、并发控制、缓存一致性等

  • 多人协同文档应用项目

    需要实现OT算法或CRDT,解决并发编辑冲突

  • 文件分发系统设计

    需要考虑P2P分发、一致性哈希、冗余备份等

  • 爬虫url去重

    可使用布隆过滤器实现高效去重

  • 微信朋友圈功能实现

    需要考虑好友关系、可见性控制、内容分发等

  • 请谈谈限流器的设计

    可使用令牌桶、漏桶算法,实现固定窗口或滑动窗口限流

  • 请设计短网址系统

    需要考虑ID生成策略、存储映射关系、访问统计等

Java相关

  • Java如何让线程池满后再放队列

    自定义拒绝策略,将任务放入队列或等待

  • 类各个元素初始化顺序

    静态变量/静态代码块 -> 实例变量/初始化块 -> 构造器

  • Java双亲委派机制

    类加载器逐级向上委托,由顶层类加载器优先加载

  • JVM垃圾回收算法

    标记清除、复制算法、标记整理、分代收集等

  • 如何决定使用 HashMap 还是 TreeMap?

    HashMap性能更好但无序,TreeMap有序但性能稍差

  • 编码:请使用你熟悉的语言,实现两个线程交替打印的效果

    使用synchronized、wait/notify或LockSupport实现

  • Java类名压缩

    根据规则缩短命名空间,保留类名完整

  • Java/数据库建模

    根据业务实体设计POJO和表结构

  • 单链表每隔k个元素做一次反转

    使用双指针法,分段处理链表

  • Java中数组是对象吗?如何证明?

    是对象,继承自Object类,有getClass等方法

  • 基于key的线程安全的单例

    使用ConcurrentHashMap缓存多个实例

  • HashSet代码阅读

    基于HashMap实现,元素作为key存储

  • TreeMap、HashMap、HashTable的实现区别

    HashMap基于数组+链表+红黑树,TreeMap基于红黑树,Hashtable线程安全

  • Java线程同步、锁相关

    synchronized、ReentrantLock、CAS等机制

  • Java单例模式的实现方式及线程安全性

    饿汉式、懒汉式、双重检查锁、静态内部类等

  • volatile关键字的作用

    保证可见性、禁止指令重排,但不保证原子性

  • Java多线程同步问题

    使用synchronized、Lock、信号量等同步机制

  • Java线程池工作模式

    核心线程、最大线程、阻塞队列、拒绝策略等

  • JAVA类型擦除

    泛型信息仅在编译期存在,运行时被擦除

  • Java内存结构、String类型存储位置、GC算法

    方法区、堆、栈、程序计数器等,String常量池位于方法区

  • 如何创建不可变类

    私有构造器、final字段、不提供修改方法、防御性拷贝等

  • InnoDB使用B+树的原因

    适合范围查询、磁盘I/O友好、减少树的高度等

前端相关

  • JS实现一个带并发限制的异步调度器

    使用队列管理任务,控制同时执行的任务数量

  • 什么是跨域?跨域请求资源有几种方式?

    跨域是浏览器同源策略限制,解决方法有CORS、JSONP、代理等

  • 渐进增强和优雅降级的区别

    见系统设计部分回答

数据库相关

  • 数据库索引创建FAQ

    频繁查询的列、唯一性高的列适合建索引,主键、外键通常需要索引

  • Redis提供的持久化方式

    RDB快照和AOF日志两种方式,可单独使用或结合使用

其他

  • 奇偶校验策略

    添加校验位检测数据传输错误

  • 交换机相关问题

    工作在数据链路层,根据MAC地址转发数据帧

  • Hadoop基础 - 包含关键字的行

    MapReduce实现,Mapper过滤行,Reducer输出结果

  • Hadoop基础,MapReduce开发

    分布式计算框架,Map处理数据,Reduce聚合结果

  • Hadoop生态圈的组件

    HDFS、MapReduce、Yarn、Hive、HBase、Spark等

  • SecondaryNameNode的目的

    定期合并fsimage和edits,防止edits过大,但不是NameNode的备份

  • Hadoop中NameNode和DataNode的作用

    NameNode管理元数据,DataNode存储实际数据块