Skip to content

Commit bb5e4cd

Browse files
committed
[docs update]新增网络面试题:SSE 与 WebSocket 有什么区别?+ 修正LinkedBlockingQueue的描述
1 parent d4e2ffb commit bb5e4cd

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

docs/cs-basics/network/other-network-questions.md

+18
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,24 @@ WebSocket 的工作过程可以分为以下几个步骤:
303303

304304
另外,建立 WebSocket 连接之后,通过心跳机制来保持 WebSocket 连接的稳定性和活跃性。
305305

306+
### SSE 与 WebSocket 有什么区别?
307+
308+
> 摘自[Web 实时消息推送详解](https://javaguide.cn/system-design/web-real-time-message-push.html)
309+
310+
SSE 与 WebSocket 作用相似,都可以建立服务端与浏览器之间的通信,实现服务端向客户端推送消息,但还是有些许不同:
311+
312+
- SSE 是基于 HTTP 协议的,它们不需要特殊的协议或服务器实现即可工作;WebSocket 需单独服务器来处理协议。
313+
- SSE 单向通信,只能由服务端向客户端单向通信;WebSocket 全双工通信,即通信的双方可以同时发送和接受信息。
314+
- SSE 实现简单开发成本低,无需引入其他组件;WebSocket 传输数据需做二次解析,开发门槛高一些。
315+
- SSE 默认支持断线重连;WebSocket 则需要自己实现。
316+
- SSE 只能传送文本消息,二进制数据需要经过编码后传送;WebSocket 默认支持传送二进制数据。
317+
318+
**SSE 与 WebSocket 该如何选择?**
319+
320+
SSE 好像一直不被大家所熟知,一部分原因是出现了 WebSocket,这个提供了更丰富的协议来执行双向、全双工通信。对于游戏、即时通信以及需要双向近乎实时更新的场景,拥有双向通道更具吸引力。
321+
322+
但是,在某些情况下,不需要从客户端发送数据。而你只需要一些服务器操作的更新。比如:站内信、未读消息数、状态更新、股票行情、监控数量等场景,SEE 不管是从实现的难易和成本上都更加有优势。此外,SSE 具有 WebSocket 在设计上缺乏的多种功能,例如:自动重新连接、事件 ID 和发送任意事件的能力。
323+
306324
## PING
307325

308326
### PING 命令的作用是什么?

docs/java/collection/java-collection-questions-01.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ public interface BlockingQueue<E> extends Queue<E> {
473473
Java 中常用的阻塞队列实现类有以下几种:
474474

475475
1. `ArrayBlockingQueue`:使用数组实现的有界阻塞队列。在创建时需要指定容量大小,并支持公平和非公平两种方式的锁访问机制。
476-
2. `LinkedBlockingQueue`:使用单向链表实现的可选有界阻塞队列。在创建时可以指定容量大小,如果不指定则默认为`Integer.MAX_VALUE`。和`ArrayBlockingQueue`类似, 它也支持公平和非公平的锁访问机制
476+
2. `LinkedBlockingQueue`:使用单向链表实现的可选有界阻塞队列。在创建时可以指定容量大小,如果不指定则默认为`Integer.MAX_VALUE`。和`ArrayBlockingQueue`不同的是, 它仅支持非公平的锁访问机制
477477
3. `PriorityBlockingQueue`:支持优先级排序的无界阻塞队列。元素必须实现`Comparable`接口或者在构造函数中传入`Comparator`对象,并且不能插入 null 元素。
478478
4. `SynchronousQueue`:同步队列,是一种不存储元素的阻塞队列。每个插入操作都必须等待对应的删除操作,反之删除操作也必须等待插入操作。因此,`SynchronousQueue`通常用于线程之间的直接传递数据。
479479
5. `DelayQueue`:延迟队列,其中的元素只有到了其指定的延迟时间,才能够从队列中出队。

0 commit comments

Comments
 (0)