美团一面
- 作者
 
- Name
 - 青玉白露
 - Github
 - @white0dew
 
- Modified on
 
- Reading time
 - 3 分钟
阅读:.. 评论:..  
面试内容
- 讲一下多态
 - TCP和UDP的区别为什么是四次挥手
 - linux操作命令
 - git操作命令
 - 现在预算有限,请求很少,如果不用epoll你会用什么线程和进程的区别
 - innodb用的什么索引,为什么不用红黑树当索引
 - 哪些协议用到了UDP哪些用到了
 - TCP
 - 为什么访问寄存器的速度比访问内存的速度更快
 - 用count(*)用哪个存储引擎
 
参考回答
「面试官」: 1. 讲一下多态。 『求职者』: 多态是面向对象编程的核心概念之一,主要包括:
- 静态多态:函数重载,编译时确定。
 - 动态多态:通过虚函数实现,运行时确定。
 - 实现方式:虚函数表和虚指针。
 - 作用:提高代码的灵活性和可扩展性。
 
「面试官」: 2. TCP和UDP的区别,为什么是四次挥手? 『求职者』: TCP和UDP的主要区别:
- TCP:面向连接,可靠传输,有流量控制。
 - UDP:无连接,不可靠传输,速度快。
 
四次挥手原因:
- 全双工通信,每个方向都需要单独关闭。
 - 接收方可能还有数据要发送,所以分两次。
 
「面试官」: 3. 列举一些常用的Linux操作命令。 『求职者』: 常用Linux命令:
- ls:列出文件和目录
 - cd:切换目录
 - pwd:显示当前路径
 - mkdir:创建目录
 - rm:删除文件或目录
 - cp:复制文件
 - mv:移动文件
 - grep:文本搜索
 - top:系统监控
 
「面试官」: 4. 列举一些常用的Git操作命令。 『求职者』: 常用Git命令:
- git init:初始化仓库
 - git clone:克隆仓库
 - git add:添加文件到暂存区
 - git commit:提交更改
 - git push:推送到远程仓库
 - git pull:拉取远程更新
 - git branch:分支操作
 - git merge:合并分支
 - git status:查看状态
 
「面试官」: 5. 如果不用epoll,你会用什么?线程和进程的区别是什么? 『求职者』: 替代epoll的选择:
- select或poll:适用于连接数较少的情况。
 
线程和进程的区别:
- 进程:独立的执行单位,有自己的地址空间。
 - 线程:轻量级进程,共享所属进程的地址空间。
 - 进程间通信复杂,线程间通信简单。
 - 进程切换开销大,线程切换开销小。
 
「面试官」: 6. InnoDB用的什么索引,为什么不用红黑树当索引? 『求职者』: InnoDB使用B+树作为索引:
- B+树非叶子节点只存储键值,叶子节点存储数据。
 - 相比红黑树,B+树更适合磁盘存储和范围查询。
 - B+树高度低,减少I/O次数。
 - 叶子节点相连,有利于区间访问。
 
「面试官」: 7. 哪些协议用到了UDP,哪些用到了TCP? 『求职者』: 使用UDP的协议:
- DNS(部分)
 - DHCP
 - SNMP
 - RTP(实时传输协议)
 
使用TCP的协议:
- HTTP/HTTPS
 - FTP
 - SMTP
 - SSH
 
「面试官」: 8. 为什么访问寄存器的速度比访问内存的速度更快? 『求职者』: 寄存器访问速度快于内存的原因:
- 位置:寄存器在CPU内部,内存在CPU外。
 - 容量:寄存器容量小,访问速度快。
 - 技术:寄存器使用更先进的存储技术。
 - 访问方式:寄存器直接访问,内存需要通过总线。
 
「面试官」: 9. 使用COUNT()时用哪个存储引擎更好? 『求职者』: 对于COUNT()操作:
- MyISAM更快:保存了表的行数。
 - InnoDB需要全表扫描。
 - 但InnoDB支持事务,适合写密集场景。
 - 选择取决于具体需求和查询模式。
 
「面试官」: 非常好,谢谢你的回答。 『求职者』: 谢谢您的提问。

