面经 wxg_0312
面经
- 进程和线程的区别?(进程是资源分配的基本单位,线程是
CPU调度的基本单位) - 进程和线程的开销有没有差异?(进程切换时要切换更完整的上下文,线程切换通常更轻量)
- 协程了解过嘛?(协程是用户态线程,是程序员自己进行切换)
- 在应用程序中读文件涉及进程的切换嘛?(读文件一定会发生 用户态到内核态的切换;是否发生进程/线程切换,要看会不会 阻塞)
- 为什么要切换进程?(
CPU是并发处理操作系统的任务的,当前进程阻塞,就需要让出CPU去做其他事情) - 为什么不在当前进程内直接读而是切换到其他进程?(为了提高
CPU利用率) - 什么
IO会阻塞当前线程?(同步阻塞IO) - 访问磁盘的时是直接访问到硬件还是用过一些系统的转换?(
DMA请求过程) - 虚拟内存的概念?(虚拟内存 就是操作系统给每个进程看到的一套 “虚拟的、连续的内存空间” )
- 如果把换页交给应用进程可以嘛?
- 理论上应用进程可以参与内存管理策略,但不能把换页完全交给应用进程。
- 因为 换页 需要了解整个系统的内存使用情况,还涉及 页表修改、物理页分配 和 缺页异常处理,这些都属于 内核权限。
- 内存管理 交给操作系统的目的是?
- 用全局视角 统一分配内存、隔离进程、提高内存利用率,并通过 虚拟内存机制 给应用提供安全且易用的内存抽象。
IO涉及到用户态和内核态的转换嘛?(一般涉及两次切换)- 不停
read几千个字节,循环read是不是涉及很多次用户态和内核态的转换?(是的,每次read都会涉及 用户态到内核态、再返回用户态的切换) buffer是有上限的,如果文件到达了很多mb,那还会有很多次用户态和内核态的切换吗?- 会触发多次切换,但不代表每次都访问了磁盘,因为数据可能已经在
PageCache了
- 会触发多次切换,但不代表每次都访问了磁盘,因为数据可能已经在
- 除了
IO多路复用,是否了解其他解决 读效率问题 的方法?IO多路复用主要解决的是 “一个线程高效管理多个fd”,不直接等于 “单次读取更快”;- 减少系统调用次数(增大单次
read的大小/用户态缓冲fread/批量读readv) - 利用预读机制
readahead(提前读取后续的块) - 减少拷贝的次数(
mmap/sendfile) - 利用异步
I/O(io_uring)
- 在浏览器输入一个
url会经历那些网络的概念?(DNS/Https/Http/Tcp/IP/MAC) Tcp和Udp的区别?(概念)- 面向连接中的
连接是什么概念?(通信双方在内核里建立起了一种 可持续通信的状态关系) 连接占用的是什么资源?(主要占用的是 内核资源)- 每个连接在内核里都要维护
socket和TCP状态信息; - 还会占用 发送缓冲区、接收缓冲区、文件描述符,以及 半连接队列 和 全连接队列 中的表项;
- 每个连接在内核里都要维护
连接占用的内存具体指什么?(如上)http 2.0和http 3.0的区别?(解决tcp层的队头阻塞,更快的连接,网络无缝切换)http 3.0的方案变化与现存的物理链路变化有关吗?为什么舍弃掉tcp?(不直接相关,同上)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 GYu的妙妙屋!
