问题

  1. C语言中的堆栈与进程、线程中的堆栈有什么区别?
  2. 线程的调度方式有哪些?
  3. 线程都会被哪些条件中断?
  4. 线程被中断之后恢复到的还是之前的线程么?
  5. 线程A占有CPU正在运行中,如何让线程B立即抢占?
  6. 线程A占有CPU不释放,如果让线程B运行?
  7. Modbus、RS232、CAN的区别?
  8. 充电桩项目和智能网关的之间的关系?
  9. TCP的可靠性怎么保证?
  10. TCP流控具体有哪些详细方式,不是流控的原理?
  11. TCP的报文数量多且小,怎么保证传输效率、实时性?
  12. TLS协议简介、运行与哪一层、密钥交换方式?
  13. MQTT的特点、应用场景、运行于那一层协议?
  14. MQTT的公钥管理方式(感觉面试官不太懂)
  15. MQTT协议的传输可靠性的保证?
  16. 代码质量怎么保证?
  17. CI/CD工具是否有用过?
  18. UT(单元测试)Python有没有接触过?单元测试的方式?
  19. 代码量?每千行代码的bug数?(感觉有点坑)

问题解答

C语言中的堆栈与进程、线程中的堆栈有什么区别?

  1. C语言的栈用于存储函数参数、局部变量等,函数执行完毕之后会自动释放。进程或线程的堆栈用于存储该进程或线程的局部变量、函数调用等。
  2. C语言的栈通常由编译器和操作系统决定。进程和线程的栈可以在创建时指定其大小,操作系统通常会为进程和线程提供某种形式的栈溢出保护。
  3. C语言的栈的生命周期与函数或代码块的执行周期相同。进程和线程的栈的生命周期与进程和线程的生命周期相同。
  4. 线程共享进程的虚拟地址空间(包括堆、全局变量等),每个线程具有自己的栈空间。
  5. C语言中的栈用于参数传递、局部变量存储等;进程和线程中的栈除了上述用途,还用于存储线程的状态信息(寄存器值、程序计数器等),用于实现线程之间的切换和调度。

线程的调度方式有哪些?

SCHED_OTHERSCHED_RRSCHED_FIFO

总结

大多数问题都是一知半解,只有MQTT、TLS相关的问题回答的比较完整,并且MQTT的特点也不太明确。

结果

面试通过。