2026-01-22-八股积累
Last Update:
Page View: loading...
计算机网络
描述TCP和UDP的区别和各自的应用场景
TCP(传输控制协议)是面向连接的、可靠的协议,提供数据传输的可靠性保障,适用于需要准确传输的应用,如网页浏览、文件下载、邮件收发等。UDP(用户数据报协议)是非连接的协议,传输速度快但不可靠,适用于实时性要求高的应用,如视频直播、语音通话、在线游戏等。
如何快速判断一个ip地址是否属于国内?已知db中有几十万个国内ip地址段
可以将IP地址转换为整数,将IP段存为区间范围,然后使用二分查找快速定位。也可以使用Trie树结构,或者利用数据库的区间索引进行查询。
描述HTTPS协议的过程
- 客户端发送请求到服务器,携带支持的TLS版本和加密算法套件列表
- 服务器返回证书(包含公钥)、选择的加密算法等信息
- 客户端验证证书合法性,生成随机密钥,用公钥加密后发送给服务器
- 服务器用私钥解密,获得对称密钥
- 双方使用对称密钥进行加密通信
实现一个开平方根的函数,结果精确到小数点后4位
使用牛顿迭代法:x_{n+1} = (x_n + a/x_n)/2,其中a是要开方的数。当相邻两次结果差值小于0.00001时停止迭代。
TCP/IP是如何实现可靠传输的?有哪些具体的做法?
- 序列号和确认应答:确保数据按序到达
- 超时重传:未收到确认则重新发送
- 滑动窗口:控制流量和提高效率
- 拥塞控制:避免网络拥塞
tcp的三次握手和4次挥手的整个过程,中间状态
三次握手:1. 客户端发送SYN 2. 服务端回复SYN+ACK 3. 客户端发送ACK
四次挥手:1. 客户端发送FIN 2. 服务端回复ACK 3. 服务端发送FIN 4. 客户端回复ACKTCP四次挥手为什么要有TIME_WAIT状态?
- 确保被动关闭方能收到最后的ACK确认
- 防止旧连接的重复数据包干扰新连接
简述HTTPS 密钥的交换过程
详见HTTPS协议过程,使用非对称加密交换对称加密的密钥
简述TCP拥塞处理机制
包括慢启动、拥塞避免、快重传、快恢复等算法,通过调整拥塞窗口大小来控制发送速率
简述 select, poll, epoll 的区别
select: 有最大文件描述符限制,效率随FD数量增加而下降
poll: 无FD数量限制,但仍有性能瓶颈
epoll: 事件驱动,效率高,适用于大量并发连接请描述从输入URL到页面加载完成的过程
- DNS解析获取IP地址 2. 建立TCP连接 3. 发送HTTP请求 4. 服务器处理并返回响应 5. 浏览器解析HTML/CSS/JS 6. 构建DOM树和渲染树 7. 绘制页面
请描述TCP协议的特性及流量控制
特性:面向连接、可靠传输、全双工通信、字节流传输
流量控制:通过滑动窗口机制,接收方向发送方通告窗口大小来控制发送速率ARP协议的工作原理及ARP欺骗
工作原理:主机广播ARP请求询问IP对应的MAC地址,目标主机回应自己的MAC地址
ARP欺骗:攻击者伪造IP-MAC映射关系,截获数据包弱网环境下抖音视频播放优化的方法
- 多码率自适应流媒体技术 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存储实际数据块