- 博客(112)
- 收藏
- 关注
原创 Redis
单节点Redis的并发能力有上限(上万),要进一步提高Redis的并发能力,就要搭建主从集群,实现读写分离。主节点会把数据同步给从节点,让每个从节点的数据和主节点一样。在从节点:查看节点状态成功后,进入主节点,输入可以看到两个slave,并且在主节点写入后,在从节点可以读取到。
2025-02-13 08:37:59
1308
原创 【搜索文章】:搜索(es)+ 搜索记录(mongodb)+ 搜索联想词
用户输入关键字时,可以检索出结果,并且可以查看历史搜索情况,还可以进行联想词展示。
2025-02-05 19:52:38
2726
3
原创 Sentinel服务保护 + Seata分布式事务
雪崩问题】微服务调用链路中某个服务,引起整个链路中所有微服务都不可用。原因解决方案】:请求限流、线程隔离、服务熔断服务保护技术。
2025-01-09 18:44:53
1318
原创 网关 + Nacos配置管理
GatewayFilter:路由过滤器,作用于任意指定的路由,默认不生效,要陪知道路由后生效。GlobalFilter(常用):全局过滤器,作用范围是所有路由;声明后自动生效。@Component@Override// 获取请求// 过滤器业务处理(登录校验逻辑...)if(...) {// 拦截// 放行// 控制过滤器执行顺序@Overridereturn 0;// 值越小,优先级越高。
2025-01-08 20:34:05
2648
原创 nacos注册中心 + OpenFeign远程调用
声明一个类型为Logger.Level的Bean,在其中定义日志级别:@Bean此时这个Bean并未生效如果想配置某个FeignClient的日志级别,可以在@FeignClient注解中声明如果想要全局配置,让所有的FeignClient都按照这个日志级别配置,需要在@EnableFeignClients注解中声明。
2025-01-08 11:37:49
1228
原创 【JUC】- 共享模型2
每个java对象都可以关联一个Monitor对象,如果使用synchronized给对象上锁(重量级锁)后,该对象头中的Mark Wrod就会指向Monitor的指针。Monitor:监视器 / 管程。
2025-11-05 16:22:35
242
原创 TransReid
可能会报错:这是因为:torch._six 是 PyTorch 内部使用的兼容性模块,在 PyTorch 1.9+ 版本中,这个模块被移除了。> 找到文件,注释。
2025-11-05 16:22:01
257
原创 【JUC】- 共享模型1
以下代码输出的结果不一定是0。一个程序运行多个线程是没有问题的,但是如果多个线程访问,进行读写操作时,可能会发生指令交错,就会出现问题。
2025-06-19 19:44:54
583
原创 【JUC】- Java线程
而主线程并不会等待t1线程返回结果,直接就打印r的值,所以打印出r的值为0。主线程打断正常运行的线程后,打断标记为true,此时正常运行的线程就可以获取打断标记。线程1比线程2的count值增加的快(因为线程2使用yield()让出执行权的次数多),并恢复另一个线程的状态(程序计数器:记住下一条JVM指令的执行地址,是线程私有的)主线程和t1线程都有自己的栈帧。:只要它的非守护线程结束了,即使守护线程的代码没有执行完,也会强制结束。线程2比线程1的count值增加的快(因为线程2的优先级比线程1大)
2025-06-16 20:15:01
751
原创 【JUC】- 进程和线程
执行,操作系统中有一个任务调度器的组件,将CPU的时间片(windows下时间片最小约15ms)分给不同的线程使用,由于CPU在线程之间(时间片很短)的切换非常块,人类就感觉是同时运行(如果是三核CPU,使用线程1执行计算1;线程3执行计算3,那么3个线程是并行的,花费时间只取决于最长的那个线程(11ms):读取磁盘文件时,假设读取操作花费了5s,如果没有线程调度机制,这5s调用者什么都做不了,代码都得暂停下来。并行:多核CPU下,每个核都可以调度线程,这时候线程就是并行的。单核CPU下,线程还是。
2025-06-16 16:11:44
941
原创 【JVM】- 内存模式
Java内存模型:JMM(Java Memory Model),定义了一套在环境下,读写共享数据(成员变量、数组)时,对数据的可见性,有序性和原子性的规则和保障。
2025-06-15 21:41:27
1294
原创 【JVM】- 类加载与字节码结构3
需要加载非classpath路径中的类文件框架设计:都是通过接口来实现,希望解耦tomcat容器:这些类有多种版本,不同版本的类希望能隔离。
2025-06-15 17:43:50
689
原创 【JVM】- 类加载与字节码结构2
java编译器把源码编译成字节码的过程,自动生成和转换的一些代码。编译成class后的代码自动拆装箱(jdk5加入)泛型集合取值编译器在获取真正字节码时,需要额外做一个类型转换的操作:可变参数编译后的代码:数组 - foreach循环会被编译为:List - foreach循环会被编译成:switch - 字符串会被编译成:switch - 枚举类编译后代码:枚举类转换后代码:try-with-resources简化资源关闭上边代码被编译为:
2025-06-13 19:29:10
507
原创 【JVM】- 类加载与字节码结构1
如果在try中return值了,就算在finally中修改了这个值,返回的结果也仍然不会改变,因为在return之前会先做一个暂存(固定返回值),然后执行finally中的代码,再把暂存的值恢复到栈顶, 返回的还是之前暂存的值。一次循环后,x的值还是0;finally中的代码会被复制三份,分别放入:try分支、catch能被匹配到的分支、catch不能被匹配到的分支,确保他一定被执行。,收集所有的{}代码块和成员变量赋值的代码,形成新的构造方法,但是原始构造方法内的代码总是在最后边。
2025-06-13 17:20:05
1254
原创 【JVM】- 内存结构
由于永久代的Full GC触发时机是:永久代的空间不足才会触发,就会导致StringTable的回收时机并不会很频繁,但是StringTable又是一个需要被频繁使用的,这样很容易就会导致永久代空间不足。】:某平台要存储用户大量的信息,需要存储大量的用户信息,但是用户的地址信息大部分都可能是重复的,如果不加以区分,直接把这么多重复的地址信息全部存入内存,那么会占用大量的堆内存。文件中的,当类被加载时,他的常量池信息就会被放入运行时常量池,并把里面的符号地址变为真实地址。,这样也能减少字符串对于内存的占用。
2025-06-09 14:04:58
836
原创 【RabbitMQ】- Channel和Delivery Tag机制
Channel在 RabbitMQ 的消费者代码中,Channel 和 tag 参数的存在是为了实现消息确认机制(Acknowledgment)和精细化的消息控制。Channel。
2025-06-03 21:07:02
1318
原创 【Netty】- 进阶
魔数:永安里第一时间断定是否是无效数据包(一般在头几个字节)版本号:可以支持协议的升级序列化算法:消息正文使用哪种反序列化方式(json、protobuf、hessian、jdk…)指令类型(登录、注册、单聊、群聊…)请求序号:为了双方通信时提供异步能力正文长度消息正文@Slf4j/*** 编码器,最好固定字符要是2的整数倍*/@Override// 1. 魔数:4字节的魔数// 2. 版本:1字节/*3. 序列化算法:1字节0 - jdk1 - json。
2025-05-26 16:29:19
675
原创 【Netty】- 入门2
netty中的Future是继承自jdk中的Future;netty中的Promise接口是继承自netty中的Future接口。
2025-05-21 21:14:36
698
原创 【Netty】- 入门1
Netty里很多方法都是异步的(有点类似于CPU的流水线),如果碰到需要异步处理时,可以考虑以上几种方式单线程没法提高效率,必须配合多线程、多核CPU才能发挥异步的优势异步并没有缩短响应时间,反而有所增加合理进行任务拆分也是异步的关键。
2025-05-21 11:10:58
773
原创 【Netty】- NIO基础2
但是如果selector没有处理该事件,selector会一直认为上一次的事件还没处理,就还会处理上一次的事件(表现:一直轮询处理上一次的事件)因此如果同一个客户端再发第二次数据,并不会收到第二次发送的数据,因为此时没有新的连接建立,代码已经被阻塞在ssc.accept()这里了。如果selector已经处理过事件,那么下次再来事件时,selector就会认为上一次的事件已经处理过,就会处理新的事件。selector会在发生事件后,向selectionKeys中加入key,但是不会删除。
2025-05-20 14:25:47
693
原创 【设计模式】- 行为型模式2
定义了一对多的依赖关系,让多个观察者对象同时监听某一个对象主题。这个主题对象在状态变化时,会通知所有的观察者对象,让他们能够自动更新自己。主要角色。
2025-05-18 10:17:19
977
1
原创 【设计模式】- 行为型模式1
定义了一个操作中的算法骨架,将算法的一些步骤推迟到子类,使得子类可以不改变该算法结构的情况下重定义该算法的某些步骤主要角色。
2025-05-16 19:58:10
1287
原创 【设计模式】- 创建者模式
clone() 方法创建了一个新的对象,而不是返回原对象的引用,因为java的Object.clone()方法是一个native方法,不会调用构造方法,而是直接分配内存并复制数据。】:对于getInstance()方法,其实大部分的操作都是读操作,读操作是线程安全的,如果直接给getInstance方法上加锁,其实会造成大量的线程等待。Director指挥者类在建造者模式中很重要,是由指挥者类来指导具体的建造者应该如何构建产品,控制调用的先后顺序,向调用者返回完整的产品类。车座有橡胶、真皮的材质。
2025-05-14 11:12:35
948
1
原创 【黑马点评】Redis解决集群的session共享问题
由于不同的tomcat服务器之间的session是不共享的,当请求如果在不同tomcat服务器之间切换就会导致数据丢失的问题。使用redis可以解决session数据共享的问题redis是tomcat以外的存储,存在redis中的数据,任何一台tomcat都能看得见,且redis是基于内存存储,又是k、v结构的存储方式。
2025-03-29 20:32:28
653
原创 【Netty】- NIO基础1
selector就是配合一个线程来管理多个channel,可以管理多个channel,获取这些channel上发生的事件,channel工作在非阻塞模式下,不会让线程吊死在一个channel上。Buffer类似内存缓冲区,暂存从Channel读取的数据,可以从。通过reset()将position重置到mark()做标记的位置。当写了a、b、c、d数据后,position指针也会往后移动。当切换为读模式,position指针回到最开始的状态。,也可以将Buffer的数据写入Channel。
2025-03-10 17:59:59
739
原创 【复习】Redis
QPS集中在特定的key带宽使用率集中在特定的KeyCPU使用时间占比集中在特定的Key将对应的热ky进行复制并迁移到其他的数据分片,来解决单个数据分片的热key压力如果热key的产生来自读请求,可以使用读写分离架构来降低每个数据分片的读请求,也可以不断增加从节点。
2025-02-24 22:45:34
1501
原创 【复习】操作系统
虚拟内存:操作系统给每个运行中的程序的一段地址空间,每个内存在运行时认为自己拥有的内存就是虚拟内存,虚拟内存将程序的地址空间划分成固定大小的页,并将这些页映射到物理内存中的不同位置。物理内存:计算机实际存在的内存。分页是把虚拟内存和物理内存空间切成一段段固定尺寸的大小,虚拟内存和物理内存是通过页表来进行映射的。页表存储在内存里。内存管理单元(MMU):将虚拟内存地址转化为物理内存地址当进程访问的虚拟地址在页表中不存在,就会产生缺页异常,操作系统会进行调页处理。
2025-02-23 16:00:41
885
原创 【复习】Java基础
JVM不同平台有不同的版本。我们编写的Java源码,编译后会生成.class文件(字节码文件)。虚拟机就是将字节码文件翻译成指定平台下的机器码运行的。只要在不同平台上安装对应的JVM,就可以运行字节码文件。编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,需要通过JVM翻译成机器码才能运行,不同平台下的机器码不同,但是字节码却是一样的。在运行过程中,任意一个类,都能够知道这个类的所有属性和方法,任意一个对象,都能调用它的任意一个方法和属性。允许在运行时获取类的完整结构信息。
2025-02-23 12:33:26
1006
原创 【复习】计算机网络
客户端向服务器发送FIN报文,如果发送的FIN报文丢失,客户端收不到服务器的ACK确认,就会触发超时重传机制,重传FIN报文,如果达到最大重传次数,客户端就会直接进入CLOSE状态,而服务器还是established状态。客户端想和服务器建立连接,向服务器发送SYN报文,如果客户端一直收不到服务器的响应,就会触发超时重传机制,重传SYN报文(重传的seq序列号是一样的)如果达到最大重传次数,客户端就不再发送SYN报文,随后断开TCP连接。同时如果客户端校验CA证书后,证书验证失败,也会中断连接。
2025-02-22 16:24:00
1467
原创 【复习】Spring
在程序运行的状态下,任何一个类,都可以获取这个类的所有属性和方法;任何一个对象,都可以调用它的任意属性和方法。反射允许在运行时获取类的信息并动态操作对象。反射允许程序在运行时获取类的完整结构信息通过反射API动态的创建对象实例在运行时动态地调用对象的方法允许运行时访问和修改对象的字段值依赖注入:开发者通过xml配置文件或注解的方式声明组件之间的依赖关系,程序启动时,spring容器会扫描这些配置或注解,利用反射来实例化Bean。
2025-02-21 20:03:07
1243
原创 【复习】Java集合
数组是固定长度;集合是动态长度的数据结构,需要动态增加或删除元素数组可以包含基本数据类型和对象;集合只能包含对象数组可以直接访问元素;集合需要通过迭代器访问元素。
2025-02-21 19:54:18
1158
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅