Skip to content

面试速答(先看这里)

**一句话结论:**如果是同步,B在接到A的调用后,会立即执行要做的事。

60秒标准回答:

同步与异步描述的是被调用者的

如果是同步,B在接到A的调用后,会立即执行要做的事。A的本次调用可以得到结果

如果是异步,B在接到A的调用后,不保证会立即执行要做的事,但是保证会去做,B在做好了之后会通知A。A的本次调用得不到结果,但是B执行完之后会通知A

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**如果是异步,B在接到A的调用后,不保证会立即执行要做的事,但是保证会去做,B在做好了之后会通知A。
  • **要点2:**如果是非阻塞,A在发出调用后,不需要等待,可以去做自己的事情。
  • **要点3:**同步不一定阻塞,异步也不一定非阻塞。
  • **要点4:**1和2的区别是,调用方在得到返回之前所做的事情不一样。
  • **要点5:**1和3的区别是,被调用方对于烧水的处理不一样,一个是烧开了就完事儿了,一个是烧开了会主动通知。

**记忆锚点:**同步 → 异步 → 阻塞

加分表达:

  • 如果是同步,B在接到A的调用后,会立即执行要做的事。
  • 如果是异步,B在接到A的调用后,不保证会立即执行要做的事,但是保证会去做,B在做好了之后会通知A。
  • 如果是阻塞,A在发出调用后,要一直等待,等着B返回结果。

追问准备:

  • 围绕「同步」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「异步」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「阻塞」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

同步与异步描述的是被调用者的。

譬如A调用B。

如果是同步,B在接到A的调用后,会立即执行要做的事。A的本次调用可以得到结果。

如果是异步,B在接到A的调用后,不保证会立即执行要做的事,但是保证会去做,B在做好了之后会通知A。A的本次调用得不到结果,但是B执行完之后会通知A。

阻塞与非阻塞描述的是调用者的。

A调用B。

如果是阻塞,A在发出调用后,要一直等待,等着B返回结果。

如果是非阻塞,A在发出调用后,不需要等待,可以去做自己的事情。

同步不一定阻塞,异步也不一定非阻塞。没有必然关系。

举个简单的例子,老张烧水:

  1. 老张把水壶放到火上,一直在水壶旁等着水开。(同步阻塞)
  2. 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
  3. 老张把响水壶放到火上,一直在水壶旁等着水开。(异步阻塞)
  4. 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)

1和2的区别是,调用方在得到返回之前所做的事情不一样。一个是一直等着结果返回,一个是不需要等待。

1和3的区别是,被调用方对于烧水的处理不一样,一个是烧开了就完事儿了,一个是烧开了会主动通知。