1. SQL语句的执行过程
解析:数据库解析器会将语句解析成解析树。
预处理:检查语法、权限、表的存在性
优化:优化器生成执行计划,选择最有效的查询策略
执行:按照执行计划查询后返回结果
2. MySQL的长连接与短连接
短连接:每次数据库操作后,连接立刻关闭。
可节约占用服务器资源的时间
长连接:允许连接一次数据库,进行多次操作。
适合高并发,可节约 连接与断开 的开销
3. ping命令在哪一层,用的什么协议?
ping命令在网络层,用的是ICMP协议。
4. UDP如何保证可靠传输?
1. 重传:应用层检测丢包并重传
2. 确认应答:接收端发送确认消息,表明成功接收
3. 顺序控制:检测序列号
4. 流量控制:控制发送速度,防止接收端过载
5. linux查看端口占用情况用什么命令?
netstat -tuln:显示所有监听的端口和使用的协议
ss -tuln:功能与netstat一样,但可能更快
netstat -anp | grep <端口号>:显示指定端口详细信息
6. C++从一堆数中查找最大的10个数,应该怎么找?
维护一个大小为10的最小堆,遍历一遍所有数:
如果堆未满,则将其插入堆中。
如果堆已满 且 当前数字大于堆顶元素,则将其插入,并重新排列堆。
7. 把用户数据复制到磁盘需要经历哪些缓冲区
用户缓冲区:数据最初在应用程序的内存中
内核区缓冲区:
页缓存:数据从用户区复制到内核区,为了提高磁盘I/O性能
I/O缓冲区:再页缓存中进一步处理数据,准备写入磁盘
磁盘控制器缓存:数据从内核区缓存到控制器的缓存中,进一步提高写入效率
磁盘:最终被写到物理介质上
8. 如果cpu利用率过高,你会怎么排查问题?
1. 使用gprof分析性能瓶颈
gprof my_program gmon.out > analysis.txt
2. 检查线程和并发,看是否存在竞争和死锁问题
3. 用top监控系统资源,看是否有其他进程占用CPU
4. 检查I/O操作,确保没有导致CPU过度等待
9. mmap主要用来做什么?
1. 文件映射:将文件内容映射进虚拟地址,可以向操作内存一样操作文件,提高访问率
2. 共享内存:实现线程间通信
3. 处理大数据集:通过内存映射避免大文件的显式读写,提高效率
10. 操作系统:windows和linux用的什么任务调度算法?
-
Windows:使用基于优先级的抢占式调度算法。具体来说,Windows 10 和 Windows Server 采用了类似于“多级反馈队列”的算法,其中每个线程都有一个优先级,系统会根据线程的优先级和当前的 CPU 使用情况来决定调度。
-
Linux:主要使用“完全公平调度器”(CFS)。CFS 是一种基于红黑树的数据结构实现的调度算法,旨在确保所有进程公平地共享 CPU 时间。它会动态调整进程的调度优先级,以实现高效和公平的任务调度