顺丰C++ 开发一面 面经
1. 说说TCP四次挥手的完整过程,每个阶段的状态是什么
答案:
- 客户端发送FIN,进入FIN_WAIT1状态
- 服务端收到FIN,回复ACK,进入CLOSE_WAIT状态;客户端收到ACK后进入FIN_WAIT2状态
- 服务端发送FIN,进入LAST_ACK状态
- 客户端收到FIN,回复ACK并进入TIME_WAIT状态,等待2MSL后关闭;服务端收到ACK后直接关闭
2. 主动关闭连接的一方会进入什么状态?这个状态会持续多久?为什么要这样设计
答案:
- 进入TIME_WAIT状态
- 持续2MSL(Maximum Segment Lifetime,通常是2-4分钟)
- 原因: 确保最后的ACK能到达对方,如果丢失对方会重发FIN让旧连接的数据包在网络中消失,避免影响新连接可以通过SO_REUSEADDR选项复用处于TIME_WAIT的端口
3. 你在Linux系统中最常用的命令有哪些?分别用在什么场景
答案:
- 进程管理:ps、top、htop、kill、pgrep
- 文件操作:ls、cd、cp、mv、rm、find、grep
- 网络调试:netstat、ss、tcpdump、curl、ping
- 系统监控:df、du、free、iostat、vmstat
- 日志查看:tail、less、cat、grep、awk
- 权限管理:chmod、chown、sudo
- 文本处理:vim、sed、awk、cut、sort
4. 如何查看系统中所有TCP连接的状态?ss命令相比netstat有什么优势
答案:
- netstat命令:netstat -antp-a:所有连接-n:数字显示IP和端口-t:TCP连接-p:显示进程信息
- ss命令(现代替代):ss -antp速度更快,因为直接从内核获取信息支持更多过滤选项输出格式更清晰示例:ss -antp state established 只看已建立的连接
5. Linux文件权限755和644分别表示什么?目录的x权限有什么特殊含义
答案:
- 644:rw-r--r--所有者:读写(6=4+2)组用户:只读(4)其他用户:只读(4)
- 755:rwxr-xr-x所有者:读写执行(7=4+2+1)组用户:读执行(5=4+1)其他用户:读执行(5=4+1)
- 目录的x权限:表示可以进入该目录(cd命令)没有x权限,即使有r权限也无法列出目录内容没有x权限,无法访问目录下的文件
6. 如何监控某个进程的网络流量和磁盘IO使用情况
答案:
- 网络流量:iftop -i eth0:实时网络流量nethogs:按进程显示网络带宽ss -p | grep <pid>:查看进程的连接
- 磁盘IO:iotop:按进程显示IO使用率pidstat -d -p <pid> 1:查看指定进程的IO/proc/<pid>/io:读取进程的IO统计信息
7. df命令的输出包含哪些关键字段?如何查看inode使用情况
答案:
- df -h输出字段:Filesystem:文件系统Size:总大小Used:已使用Avail:可用空间Use%:使用百分比Mounted on:挂载点
- 查看inode:df -iINodes:总inode数IUsed:已使用inodeIFree:空闲inodeIUse%:inode使用率注意:磁盘空间充足但inode耗尽也会导致无法创建文件
8. 说说你对运维开发岗位的理解,和纯开发岗有什么区别
答案:
- 运维开发:开发自动化运维工具和平台关注系统稳定性、可用性、性能需要深入理解Linux系统、网络、数据库技术栈:Shell、Python、Go、C++工作内容:监控系统、部署平台、日志分析、故障排查
- 与纯开发的区别:更关注系统层面而非业务逻辑需要7x24小时保障系统稳定要有全栈视野:从硬件到应用层强调自动化和工具化
9. 有哪些内核参数可以优化TCP连接性能和端口复用
答案:
- TIME_WAIT相关:net.ipv4.tcp_tw_reuse=1:允许复用TIME_WAIT的socketnet.ipv4.tcp_tw_recycle=1:快速回收TIME_WAIT(不推荐,NAT环境有问题)net.ipv4.tcp_fin_timeout=30:FIN_WAIT2超时时间
- 连接队列:net.core.somaxconn=1024:listen队列大小net.ipv4.tcp_max_syn_backlog=2048:SYN队列大小
- 端口范围:net.ipv4.ip_local_port_range=10000 65000:可用端口范围
- keepalive:net.ipv4.tcp_keepalive_time=600:keepalive探测间隔
10. 在Vim中如何批量替换文本?如何在不保存的情况下退出
答案:
- 批量替换::%s/old/new/g:全文替换:1,10s/old/new/g:替换1-10行:%s/old/new/gc:替换前确认
- 常用快捷键:i:进入插入模式Esc:退出插入模式yy:复制当前行p:粘贴:wq:保存并退出:q!:不保存退出dd:删除当前行/keyword:搜索
11. 你在什么场景下会使用正则表达式?举个实际例子
答案:
- 日志分析:提取IP地址、时间戳、错误码
- 数据验证:邮箱、手机号、身份证格式校验
- 文本替换:批量修改配置文件
- 数据提取:从HTML中提取链接、从日志中提取关键信息
12. 设计一个即时通讯系统的数据库表结构,支持单聊和群聊
答案:
用户表(users):
- user_id(主键)
- username
- password_hash
- created_at
- 索引:username(唯一索引)、email(唯一索引)
会话表(conversations):
- conversation_id(主键)
- type(ENUM:
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
C++八股文全集 文章被收录于专栏
本专栏系统梳理C++技术面试核心考点,涵盖语言基础、面向对象、内存管理、STL容器、模板编程及经典算法。从引用指针、虚函数表、智能指针等底层原理,到继承多态、运算符重载等OOP特性从const、static、inline等关键字辨析,到动态规划、KMP算法、并查集等手写实现。每个知识点以面试答题形式呈现,注重原理阐述而非冗长代码,帮助你快速构建完整知识体系,从容应对面试官提问,顺利拿下offer。
查看8道真题和解析