- 博客(11)
- 收藏
- 关注
原创 详解TCP-第二篇,有时候真的不想学了
time_wait是一个等待时间,它会持续2msl(一个msl是30秒,2个就是60秒),其实最主要的原因是防止发送端最后给服务端发送的ack确认标识在网络中丢失,lunix系统认为,发送方在发送数据和对方接收到数据并作出响应,一来一去最大不会超过30秒的时间,如果超出,则认为数据包在网络中丢失。
2024-07-03 20:47:43 752
原创 详解TCP--有时候学习真的想死
这次的这个图片更加详细地描述三次握手的整个过程。一开始,客户端和服务端都处于CLOSE状态。先是服务端主动监听某个端口,处于LISTEN状态客户端会随机初始化序号(client_isn),将此序号置于 TCP 首部的「序号」字段中,同时把SYN标志位置为1,表示SYN报文。接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于SYN-SENT状态。服务端收到客户端的SYN报文后,首先服务端也随机初始化自己的序号(server_isn。
2024-07-02 00:00:25 721
原创 一个网络数据包是如何被发送和接收-送快递原理
首先,要了解一条数据被打包的方式,我们要了解的是著名的tcp/ip模型,我相信很多同学们都清楚地学过。。他们每一层都有对应的对数据包的加工方式。那么当我们在网址栏中输入网址,到我们接收到服务器的回应,中间到底发生了什么?应用层只关心为用户提供功能,比如:http,smtp,ftp,dns等等,而不关心具体传输的事情。
2024-06-29 22:58:10 1255
原创 关于计算机网络的基础知识
1.客户端向服务端发送fin+ack向服务端发起关闭连接请求,但是此时的序列号和确认号因为多次请求无限增加,所以已经到了一个不可预估的数值,但是还是会打包发给服务端。2.服务端此时收到了客户端的请求,但是它会先发送一个ack和随机生成的序列号,还有确认号(对方序号+1)表示自己已经收到,但是不会立马关闭连接,因为它还要确认是否有多余的数据或者没有发送完毕的数据要发送给客户端。3.在确认资源发送完毕后,服务端会再次发送fin+ack,还有序号和确认号给客户端。
2024-06-28 23:43:20 627
原创 Unable to infer base url. This is common when using dynamic servlet registration or when the API is
但是项目启动之后,就一直报Unable to infer base url. This is common when using dynamic servlet registration or when the API is。并且可以看到,我并没有指明扫描哪个包,所以与swagger生成产生了冲突,这里,只需要指明包名就好了。在继承swagger的时候,首先,我是将swagger部署到了一个单独的配置模块。其实错误很简单,就是我使用了全局统一响应控制器。再次启动项目swagger可以正常访问了。
2023-10-27 16:50:59 354 4
原创 实现springCloud GateWay 结合Nacos的动态路由配置
随后,我们对字符串的数据进行解析,如果能解析到数据,就说明我们的nacos中有相关配置信息,我们需要在网关中设置信息其中的addRouteDefiniton方法,就是将拉取到的信息,设置在网关中。可以看到,此类中,都是对网关存储的配置信息进行增删改查,以便我们读取到nacos的信息之后,对网关中的“旧数据”进行操作;最后,我们配置监听器,如果此配置文件有改动,那么我们的网关配置信息跟着改动。
2023-10-19 17:38:51 1115
原创 ConstraintValidator自定义校验注解+MethodArgumentNotValidException异常全局捕获
重要参数:@Constraint(validatedBy = {EmailValidator.class }):表示检验逻辑使用EmailValidator这个类,下面会放这个类代码@Target({FIELD, PARAMETER}):表明此注解可以用在属性和参数上String message() :校验生效时,返回的错误信息Class<?>[] groups() :可以指定在哪个环境下注解生效(一般不填)注意:缺少这三个属性会报错。
2023-09-20 11:28:08 773 7
原创 项目实战-面向切面编程-注解动态设置分布式锁
Component@Aspect//创建锁对象//尝试获取锁//判断锁是否获取成功if (!isLock){try {//执行业务//释放锁//排序,防止使我们的切面比事务的优先级高,保证在事务提交之后,再释放锁,避免锁失效问题@Overridereturn 0;除此之外,创建锁对象使,我们采用工厂模式,保证我们在打上注解时,可以随意指定哪种模式的锁;例如redisson中的锁大概分为:1.可重入锁2.公平锁3.读写锁所以。
2023-09-14 23:57:04 211 2
原创 Redis数据类型strings详解
Incr这个命令是具有原子性的,例如,客户端 1 同时读取“10”,客户端 2 同时读取“10”,两者都递增到 11,并将新值设置为 11,这种情况永远不会发生。如果你的string类型的key,是一个数字,那么可以有一些有趣的操作,比如做自增操作,而。而xx则正好相反,如果key有设置值,则设置成功,如果key没有值则设置失败。不过我们可以通过nx(判断key是否有设置值,有值则设置失败,避免覆盖)值得注意的是,如果重复往同一个key设置值,那么之前那个key就会被覆盖。
2023-09-11 00:54:24 88 4
原创 解决Mybatis-Plus中IdType.AUTO局部配置不生效的问题
再在mysql数据库中执行:ALTER TABLE 库名.表名 AUTO_INCREMENT = 0;由于业务原因,我们在某一个实体类上需要做局部配置,将id生成方式改为自增长。但是数据库插入数据时,id的默认生成方式还是雪花算法,局部配置没有生效。重置之后的自增值就会从已有数据中主键值最大的那条数据开始计算+1。首先,nacos全局配置中是雪花算法生成id。先删除之前插入的那条。
2023-09-09 16:02:53 1840 5
原创 @Asyn异步开启线程池
创建要在线程池里面执行的方法,并加上@Asyn("线程池名称")注解表明这个方法是异步执行并且利用线程池执行。首先创建一个配置类,创建线程池,并将线程池作为一个bean注册到spring容器。在启动类上加上@EnableAsync注解,使spring支持异步线程的操作。
2023-09-08 10:56:14 284 7
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人