溢出、异常、线程池、阻塞,奇怪的服务重启问题定位

最近在业务中遇见一个很奇怪的服务重启问题,定位过程比较有曲折,本文来复盘下。这个问题涉及到 C++ 线程池、整数溢出、异常捕获、阻塞等多个方面,还是挺有意思的。

接下来我会按照问题排查的过程来组织本文内容,会先介绍问题背景,接着列出初步的排查思路,定位异常请求的方法。然后,通过代码分析,以及复现问题的一些简单用例,来揭开服务重启的神秘面纱。

阅读全文

谁主张谁举证,吵架时也用得到的法律知识

一个晴朗的周末,你去超市购物。突然保安把你拦下来,说你偷了东西。你需要要证明你没偷东西吗?如果要证明,你又怎么证明呢

又或者,你把自己的伞忘在了茶水间,过了会去找发现不见了。通过查监控,发现是另一个同事拿走了你的伞,于是想找这个同事拿回来。结果拿伞的同事让你证明这是你的伞,问你要购物记录和发票,你需要提供吗?

谁主张谁举证,举证责任倒置

阅读全文

结合实例理解流式输出的几种实现方法

如果有用过 ChatGPT 等大语言模型,可能就会发现在聊天对话中,AI 的输出文本是一批批“蹦出来”的,这就是所谓的流式输出。在浏览器上,是怎么实现这种效果呢?

本篇文章会介绍 4 种常见方法来实现流式输出效果,每种方法都会结合实际例子来演示。在业务中选择哪种方法,取决于具体的需求和场景。

  1. 客户端轮询:客户端定时(如每几秒)发送请求到后端服务,获取新的数据。
  2. 分块传输:HTTP/1.1 支持,服务器一次可以只发送部分响应内容,客户端接收到部分数据后就可以开始处理。
  3. Server-Sent Events:服务器向浏览器推送信息,浏览器创建一个到服务器的单向连接,服务器通过这个连接可以发送多个消息。
  4. Web Socket:建立一个持久的、全双工的连接,允许服务器和客户端之间进行实时、双向的通信。

阅读全文