被疯狂拷打底层实现原理, 可惜不会啊。【面试问题】2. 先做一下自我介绍。3. 你对 eBPF 底层实现的理解有多深?6. eBPF 程序如何加载到内核?请详细说明加载路径。7. 内核校验器会拒绝哪些情况?你遇到过被挡住的情况吗?8. 如果 eBPF 程序因为指令数过多被校验器拒绝,你如何解决?9. 你是否查看过自己 C 代码生成的 eBPF 指令数?10. 如何确认字节码长度超限导致的加载失败?11. 除了指令数,还有哪些校验失败的例子?12. 你是否阅读过内核 samples/bpf 的 demo?14. ring buffer 丢数据时如何定位?15. perf buffer 与 ring buffer 的区别有了解吗?16. 你使用的内核版本是多少?17. 如何用哈希 map 在内核态与用户态共享数据?18. 内核线程与普通进程在内核地址空间上有何区别?19. 请描述一次 read 系统调用从用户态到 VFS、再到具体文件系统的完整路径。20. eBPF 定时器(interval)如何触发 map 清零?底层实现了解吗?21. 为什么选择 eBPF 而非其他非侵入式监控方案?22. 低版本内核不支持某些 eBPF 特性时如何处理?23. 在 eBPF 实践中,你遇到过最棘手的问题是什么?如何解决的?24. kprobe 拿不到参数类型信息时,你是如何解决的?25. kretprobe 能否直接拿到入参?如果拿不到你怎么办?26. 网络方面有没有深入抓包或协议栈定位经验?27. Linux 进程地址空间如何布局?各段作用?28. 不同进程的地址空间是否共享?线程之间共享哪些段?29. 内核地址空间在不同进程间是否一致?为什么?30. 进程调度时机有哪些?时间片由谁触发?31. 两个 nice 值相同的进程绑在同一 CPU 上,调度表现如何?32. 内核模块执行时关中断会怎样?33. 系统调用返回时是否一定会回到原进程?34. Docker 容器原理是什么?35. cgroup 如何限制 CPU 资源?36. cgroup 如何限制网络资源?