顺丰C++ 开发一面 面经

1. 说说TCP四次挥手的完整过程,每个阶段的状态是什么

答案:

  1. 客户端发送FIN,进入FIN_WAIT1状态
  2. 服务端收到FIN,回复ACK,进入CLOSE_WAIT状态;客户端收到ACK后进入FIN_WAIT2状态
  3. 服务端发送FIN,进入LAST_ACK状态
  4. 客户端收到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
  • email
  • created_at
  • 索引:username(唯一索引)、email(唯一索引)

会话表(conversations)

  • conversation_id(主键)
  • type(ENUM:

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++八股文全集 文章被收录于专栏

本专栏系统梳理C++技术面试核心考点,涵盖语言基础、面向对象、内存管理、STL容器、模板编程及经典算法。从引用指针、虚函数表、智能指针等底层原理,到继承多态、运算符重载等OOP特性从const、static、inline等关键字辨析,到动态规划、KMP算法、并查集等手写实现。每个知识点以面试答题形式呈现,注重原理阐述而非冗长代码,帮助你快速构建完整知识体系,从容应对面试官提问,顺利拿下offer。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务