processes-threads-mutual-exclusion-and-synchronization.md

·interview-questions

进程、线程与协程

进程和线程的区别是什么?

并行和并发的区别是什么?

解释一下用户态和核心态?

进程调度算法你了解多少?

进程间有哪些通信方式?

什么是孤儿进程和僵尸进程,如何处理它们?

进程有几种状态,它们之间是如何转换的?

什么是作业调度和进程调度,它们之间有什么区别?

解释一下操作系统的信号机制,以及它的作用?

解释一下操作系统的中断机制,以及它的作用?

线程、协程和 goroutine 之间的区别

为什么 CPU 密集用多进程,IO 密集用多线程

进程间的通信方式有哪些?(同台设备和不同台设备)

  • 为什么协程会出现,它的应用场景是什么?

  • 那为什么会引入到协程呢?它是为了解决什么样的问题呢?

  • 那你在哪一些场景下会更倾向于使用协程?除了所谓的 context 切换,因为这个问题在进程线程里都有,那你拿到一个任务,在什么场景下你会更愿意用协程来解决这个任务?

  • 有了解过线程安全吗?能不能讲一下你在写代码时遇到过的一些问题,或者你先简单解释一下什么是线程安全

Q:如果续锁失败了怎么办

A:如果续锁失败,首先就是要立刻停止依赖该锁的后续逻辑,避免多个实例同时操作同一资源,捕获续锁失败的错误后返回给上层,让调用链立刻回滚或降级,然后要清理本地可能存在的一些准备好的上下文或预占用资源,比如关闭数据库事务、归还连接、删除临时文件等,业务操作要尽量设计成幂等,即使多次失败重试也不会出现重复或丢失,接着就是续锁失败要写入日志并触发告警,最后就是对业务逻辑数据做异步补偿,比如把未处理的玩家操作写入消息队列,后台再重试,然后借助有限次重试,在几次重试都失败后才彻底放弃,避免持续占用锁资源

  • 什么是互斥锁(mutex)?在什么情况下会用到它们?(联系 go 语言中的实际应用)

  • 互斥锁有几种模式?有几种状态?

  • 假设我发现我的一台服务器上面的 cpu 使用率很高,在告警,对于这个场景你要怎么去排查(面试官提示操作系统相关的问题回答时最好能给出相关的指令)

  • 我该用什么样的指令看当前服务器上正在运行的项目

  • 一个进程在操作系统中,它有哪几种状态表现

  • 那如果你发现某个进程它的内存使用很高,你会怎么去排查来解决这个问题

  • 那假设你现在的服务部署上去了,但在启动时报错,然后报错的提示说系统空间不足,那对于这个问题你会怎么去排查

  • 假设是磁盘空间不足的话,你会怎么去看然后怎么去解决

  • 你在实习过程中或者你自己有在 Linux 操作系统里面做一些实际的操作和开发吗

  • 其实我看你的简历是更偏向于开发一些,Linux 这块有了解吗?你在平时开发或者实习的时候有接触 Linux 系统吗?(面试官解释了一下 SRE 的工作面比较广)

  • 你在做一些系统排查时最常用到的指令是什么?

  • 对于 Linux 系统,进程间的通信方式是什么?

  • 有了解过线程安全吗?能不能讲一下你在写代码时遇到过的一些问题,或者你先简单解释一下什么是线程安全