processes-threads-mutual-exclusion-and-synchronization.md
·interview-questions
进程、线程与协程
进程和线程的区别是什么?
并行和并发的区别是什么?
解释一下用户态和核心态?
进程调度算法你了解多少?
进程间有哪些通信方式?
什么是孤儿进程和僵尸进程,如何处理它们?
进程有几种状态,它们之间是如何转换的?
什么是作业调度和进程调度,它们之间有什么区别?
解释一下操作系统的信号机制,以及它的作用?
解释一下操作系统的中断机制,以及它的作用?
线程、协程和 goroutine 之间的区别
为什么 CPU 密集用多进程,IO 密集用多线程
进程间的通信方式有哪些?(同台设备和不同台设备)
-
为什么协程会出现,它的应用场景是什么?
-
那为什么会引入到协程呢?它是为了解决什么样的问题呢?
-
那你在哪一些场景下会更倾向于使用协程?除了所谓的 context 切换,因为这个问题在进程线程里都有,那你拿到一个任务,在什么场景下你会更愿意用协程来解决这个任务?
-
有了解过线程安全吗?能不能讲一下你在写代码时遇到过的一些问题,或者你先简单解释一下什么是线程安全
锁
Q:如果续锁失败了怎么办
A:如果续锁失败,首先就是要立刻停止依赖该锁的后续逻辑,避免多个实例同时操作同一资源,捕获续锁失败的错误后返回给上层,让调用链立刻回滚或降级,然后要清理本地可能存在的一些准备好的上下文或预占用资源,比如关闭数据库事务、归还连接、删除临时文件等,业务操作要尽量设计成幂等,即使多次失败重试也不会出现重复或丢失,接着就是续锁失败要写入日志并触发告警,最后就是对业务逻辑数据做异步补偿,比如把未处理的玩家操作写入消息队列,后台再重试,然后借助有限次重试,在几次重试都失败后才彻底放弃,避免持续占用锁资源
-
什么是互斥锁(mutex)?在什么情况下会用到它们?(联系 go 语言中的实际应用)
-
互斥锁有几种模式?有几种状态?
-
一个进程在操作系统中,它有哪几种状态表现
-
那如果你发现某个进程它的内存使用很高,你会怎么去排查来解决这个问题
-
对于 Linux 系统,进程间的通信方式是什么?
-
有了解过线程安全吗?能不能讲一下你在写代码时遇到过的一些问题,或者你先简单解释一下什么是线程安全