TCP TIME_WAIT 状态
当需要断开一个 TCP 连接时,需要四次挥手,每一次需要发送一报文,同时 TCP 连接会进行状态的变化。在挥手时的最后一个 ACK 发出后,TCP 连接会进入 TIME_WAIT 状态。
TIME_WAIT 状态通常需要等待 2MSL 的时间再变成 CLOSED 状态。而因为这个状态,经常会产生一些奇怪的问题。本文整理了 TIME_WAIT 状态的作用和如何应对大量 TIME_WAIT 的建议。
当需要断开一个 TCP 连接时,需要四次挥手,每一次需要发送一报文,同时 TCP 连接会进行状态的变化。在挥手时的最后一个 ACK 发出后,TCP 连接会进入 TIME_WAIT 状态。
TIME_WAIT 状态通常需要等待 2MSL 的时间再变成 CLOSED 状态。而因为这个状态,经常会产生一些奇怪的问题。本文整理了 TIME_WAIT 状态的作用和如何应对大量 TIME_WAIT 的建议。
TCP 的三次握手和四次挥手,可以说是老生常谈的经典问题。字面上,三次握手是指发送了三个报文段,四次挥手是指发送了四个报文段。但知其然,更要知其所以然。
本文整理了从相关文章的笔记,以备查用。
公司研发部门提供了一个组件包,该包在启动的时候会根据配置文件创建 MQ 消费线程,消费指定消息。集成到项目中后项目完全无法启动,报取不到配置的错误。经排查,
配置文件的配置是正确的,但在启动类中就是读不到相关配置。
通常我们设计 REST 接口时会要求在 API 上增加版本号,以方便在接口升级时保证一定的兼容性。我们假定设计的接口入下:
1 | GET /api/v1/user/{userId} |
在 Spring MVC 中可以这样这样实现:
1 |
|
在 GetMapping
注解中手动指定了接口版本,但每个接口都指定或指定在类上也是非常不方便的,我们希望有一个注解来简化的约束这个配置的过程
自己 new 出来的对象如何让 Spring 帮我们注入其中依赖的对象?可以使用以下方法:
1 | Bean bean = new Bean(); |
@Mapping
是 MapStruct
的核心注解,用于定义不同名字的属性之间的映射。
JavaDoc:
Configures the mapping of one bean attribute.
配置一个 bean 属性的映射
@BeanMapping
用于控制整个映射方法。你可以通过设置 @BeanMapping
的 NullValueCheckStrategy
使整个方法都生效。
JavaDoc:
Configures the mapping between two bean types
配置两个 bean 类型的映射
Bean 属性映射中如何满足以下场景:
MapStruct
是一个 Bean 映射工具,通过配置的注解,可以生成 Java 代码进行 Bean 映射。
由于是通过两个 Bean 的信息生成 Java 代码,并通过调用属性的 Getter/Setter 方法来实现的功能,性能上比其它通过反射实现的 Bean 映射工具要高很多,相当于自己手写代码复制对象。
本文主要介绍 MapStruct
的几种对象映射场景,方便使用时选用。
Kafka 中将 Topic 分为 partition,消费者从 partition 中消费消息。消息是怎么确定发住哪个 partition 呢?其实默认有两种分区选择策略: