- 博客(89)
- 收藏
- 关注

原创 Redis
单节点Redis的并发能力有上限(上万),要进一步提高Redis的并发能力,就要搭建主从集群,实现读写分离。主节点会把数据同步给从节点,让每个从节点的数据和主节点一样。在从节点:查看节点状态成功后,进入主节点,输入可以看到两个slave,并且在主节点写入后,在从节点可以读取到。
2025-02-13 08:37:59
1220

原创 【搜索文章】:搜索(es)+ 搜索记录(mongodb)+ 搜索联想词
用户输入关键字时,可以检索出结果,并且可以查看历史搜索情况,还可以进行联想词展示。
2025-02-05 19:52:38
1880
3

原创 Sentinel服务保护 + Seata分布式事务
雪崩问题】微服务调用链路中某个服务,引起整个链路中所有微服务都不可用。原因解决方案】:请求限流、线程隔离、服务熔断服务保护技术。
2025-01-09 18:44:53
1125

原创 网关 + Nacos配置管理
GatewayFilter:路由过滤器,作用于任意指定的路由,默认不生效,要陪知道路由后生效。GlobalFilter(常用):全局过滤器,作用范围是所有路由;声明后自动生效。@Component@Override// 获取请求// 过滤器业务处理(登录校验逻辑...)if(...) {// 拦截// 放行// 控制过滤器执行顺序@Overridereturn 0;// 值越小,优先级越高。
2025-01-08 20:34:05
1503

原创 nacos注册中心 + OpenFeign远程调用
声明一个类型为Logger.Level的Bean,在其中定义日志级别:@Bean此时这个Bean并未生效如果想配置某个FeignClient的日志级别,可以在@FeignClient注解中声明如果想要全局配置,让所有的FeignClient都按照这个日志级别配置,需要在@EnableFeignClients注解中声明。
2025-01-08 11:37:49
1078
原创 【黑马点评】Redis解决集群的session共享问题
由于不同的tomcat服务器之间的session是不共享的,当请求如果在不同tomcat服务器之间切换就会导致数据丢失的问题。使用redis可以解决session数据共享的问题redis是tomcat以外的存储,存在redis中的数据,任何一台tomcat都能看得见,且redis是基于内存存储,又是k、v结构的存储方式。
2025-03-29 20:32:28
536
原创 【Netty】- NIO
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
635
原创 【复习】Redis
QPS集中在特定的key带宽使用率集中在特定的KeyCPU使用时间占比集中在特定的Key将对应的热ky进行复制并迁移到其他的数据分片,来解决单个数据分片的热key压力如果热key的产生来自读请求,可以使用读写分离架构来降低每个数据分片的读请求,也可以不断增加从节点。
2025-02-24 22:45:34
1414
原创 【复习】操作系统
虚拟内存:操作系统给每个运行中的程序的一段地址空间,每个内存在运行时认为自己拥有的内存就是虚拟内存,虚拟内存将程序的地址空间划分成固定大小的页,并将这些页映射到物理内存中的不同位置。物理内存:计算机实际存在的内存。分页是把虚拟内存和物理内存空间切成一段段固定尺寸的大小,虚拟内存和物理内存是通过页表来进行映射的。页表存储在内存里。内存管理单元(MMU):将虚拟内存地址转化为物理内存地址当进程访问的虚拟地址在页表中不存在,就会产生缺页异常,操作系统会进行调页处理。
2025-02-23 16:00:41
806
原创 【复习】Java基础
JVM不同平台有不同的版本。我们编写的Java源码,编译后会生成.class文件(字节码文件)。虚拟机就是将字节码文件翻译成指定平台下的机器码运行的。只要在不同平台上安装对应的JVM,就可以运行字节码文件。编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,需要通过JVM翻译成机器码才能运行,不同平台下的机器码不同,但是字节码却是一样的。在运行过程中,任意一个类,都能够知道这个类的所有属性和方法,任意一个对象,都能调用它的任意一个方法和属性。允许在运行时获取类的完整结构信息。
2025-02-23 12:33:26
971
原创 【复习】计算机网络
客户端向服务器发送FIN报文,如果发送的FIN报文丢失,客户端收不到服务器的ACK确认,就会触发超时重传机制,重传FIN报文,如果达到最大重传次数,客户端就会直接进入CLOSE状态,而服务器还是established状态。客户端想和服务器建立连接,向服务器发送SYN报文,如果客户端一直收不到服务器的响应,就会触发超时重传机制,重传SYN报文(重传的seq序列号是一样的)如果达到最大重传次数,客户端就不再发送SYN报文,随后断开TCP连接。同时如果客户端校验CA证书后,证书验证失败,也会中断连接。
2025-02-22 16:24:00
1396
原创 【复习】Spring
在程序运行的状态下,任何一个类,都可以获取这个类的所有属性和方法;任何一个对象,都可以调用它的任意属性和方法。反射允许在运行时获取类的信息并动态操作对象。反射允许程序在运行时获取类的完整结构信息通过反射API动态的创建对象实例在运行时动态地调用对象的方法允许运行时访问和修改对象的字段值依赖注入:开发者通过xml配置文件或注解的方式声明组件之间的依赖关系,程序启动时,spring容器会扫描这些配置或注解,利用反射来实例化Bean。
2025-02-21 20:03:07
1190
原创 【复习】Java集合
数组是固定长度;集合是动态长度的数据结构,需要动态增加或删除元素数组可以包含基本数据类型和对象;集合只能包含对象数组可以直接访问元素;集合需要通过迭代器访问元素。
2025-02-21 19:54:18
1115
原创 Java动态代理
代理模式的主要目的是在客户端和目标对象之间添加一个中间层,以便在访问目标对象时执行额外的操作。在方法执行前后记录日志信息,记录方法的执行时间、参数、返回值等。
2025-02-17 09:31:10
626
原创 114. 二叉树展开为链表
能不能先序遍历,先处理当前节点(把当前遍历到的节点插入到单链表中),但是这样存在一个问题,此时当前节点的右孩子还没有被遍历到,这样会出现孩子丢失的情况。但是如果是后序遍历的话,结点的顺序应该怎么处理呢?目前节点的顺序是和题目所求的节点顺序相反,因此可以考虑。这样就不会出现孩子丢失的问题,因为当去更新当前的右指针时,已经遍历过他的右节点了。这题要将一个二叉树转成单链表,且展开后的单链表应该和二叉树的先序遍历相同。:题目要求先序遍历(根左右)的结果,那能不能用。
2025-02-12 11:42:12
233
原创 108. 将有序数组转换为二叉搜索树
所以可以将数组最中间的数作为根节点,依次把根左边的数组和根右边的数组作为左右节点即可。注意,[l, r)是左闭右开的情况,所以在后边划分区间的时候,也要始终保持左闭右开。二叉搜索树的特征:左 < 根 < 右。
2025-02-12 11:08:09
232
原创 Java Virtual Machine(JVM)
应用A中有个com.xiaolin.Hello.class应用B中也有个com.xiaolin.Hello.class虽然都叫Hello.class,但是这两个类的方法、属性可能不一样如果AppClassLoader先加载了应用A中的Hello.class文件,那么应用B就不能被加载了,因为这两个类的名字一样所以就需要针对应用A、B设置单独的类加载器,也就是WebAppClassLoader,这样两个应用中的Hello.class都会被各自的类加载器加载到,不会产生冲突。
2025-02-11 16:19:35
1009
原创 102. 二叉树的层序遍历
这题的难点在于,题目要求是要返回一个二维数组,那怎么去记录每一层的节点呢?在每一次循环的时候,当前队列中的节点就是这一层的节点,因此可以用一个tempVec来存储当前队列中的数据,在每一轮的循环结束时,把tempVec插入结果数组中。
2025-02-11 11:39:31
287
原创 543. 二叉树的直径
这题要求树的最大直径,其实也就是求树中某一个节点的左右子树的深度之和最大。那么就可以把这个问题拆解成一个个相同子问题:求某一个节点的最大深度。
2025-02-11 10:59:33
263
原创 142. 环形链表 II
极端情况:fast进入环时,fast = slow + 1,此时fast以相对速度1远离slow,fast需要走(环长 - 1)步才能与slow相遇,所以慢指针移动的距离 < 环长。如图所示,如果有环,fast 和 slow必会相遇,此时fast走n圈,slow走一圈。为什么slow无法走两圈?
2025-02-10 13:29:41
356
原创 146. LRU 缓存
把最下边的数据淘汰掉,再把刚访问的数据放到上边(换页)本质:让不经常访问的数据往下排,经常访问的数据往上排。LRU:最近最少未使用,很少被请求的数据才会被淘汰掉。这样会导致:冷门数据在最下边,热门数据在最上边。hashMap的查询时间复杂度是O(1),可以用。访问的数据缓存中没有。
2025-02-10 12:44:17
499
原创 24. 两两交换链表中的节点
如图,题目要求前后节点交换,1、2往往容易想到,但是3容易忘记。在(a、b)交换后,此时和前一个节点(c)断开连接了,需要把节点c也接上。直接存储滑动窗口内的字符串,这样虽然方便,但是时间复杂度和k相关,如果k = n,此时会达到O(n^2)的复杂度。
2025-02-09 17:20:38
393
原创 160. 相交链表
这题可以将headA遍历完后遍历headB,把headB遍历完后遍历headA,这样就相当于走了同样的距离。不管什么情况,都会退出循环,且都只会遍历(a+b)次,不会有死循环的情况。
2025-02-08 19:29:58
219
原创 【热点文章-定时计算】分布式任务调度框架xxl-job
在分布式架构下,一个服务会部署多个实例来运行业务;如果在这种分布式系统环境下运行任务调度,称为分布式任务调度。分布式任务调度框架:xxl-job仓库源码:xxl-jobdocker安装xxl-job项目集成xxl-job导入xxl-job依赖添加配置任务代码任务详解任务绑定的执行器,任务触发调度时,会自动发现注册成功的执行器,实现任务自动发现功能。执行器也可以方便的进行任务分组,每个任务必须绑定一个执行器。任务调度失败时邮件通知的邮箱地址一般选用CRON表达式 FI
2025-02-07 14:49:20
964
原创 OpenFeign远程调用返回的是List<T>类型的数据
Feign 默认支持 JSON 序列化/反序列化,如果服务端返回的是 List的JSON格式数据,可以直接在 Feign 接口中定义返回类型为 List。
2025-02-07 14:11:12
674
原创 Kafka
偏移量(Offset) 是消费者消费消息的核心机制之一,它记录了消费者在分区(Partition)中的消费进度,没有这个kafka不知道消费到哪里,也是在同一个分区下消息的消费会有顺序的原因。每一个分区都是一个顺序的、不可变的消息队列, 并且可以持续的添加。自媒体微服务是生产者,文章微服务是消费者,自媒体微服务向kafka发送修改文章状态的任务,文章微服务从kafka里取出任务后消费。方案2:选择第一个活过来的副本,不一定是ISR中的,选为Leader,这样可以最快速度恢复可用性,但不一定数据完整。
2025-02-05 12:06:11
1265
原创 redis实现延迟任务
定时任务:有固定周期,有明确的触发时间延迟任务:没有固定的开始时间,由一个事件触发,在这个事件触发之后的一段时间内触发另一个事件,任务可以立即执行,也可以延迟执行。场景1:订单下单30分钟后,如果用户没有付钱,则系统自动取消订单;如果期间下单成功,任务取消。场景2:接口对接接口出现网络问题,1分钟后重试,如果失败,2分钟后重试,直到出现阈值终止。实现方式。
2025-02-03 20:43:56
961
原创 238. 除自身以外数组的乘积
所以使用前后缀分解,用两个数组分别求nums[i]所有左边数的乘积 和 nums[i]所有右边数的乘积,求结果的时候,res[i] = 当前数字的左边数乘积 * 当前数字的右边数乘积。先用res[i]来存放nums[i]所有左边数的乘积,再用一个常数right来存储nums[i]所有右边数的乘积,一边更新right的值,一边更新到res[i]中。方法1. 前后缀分解 + 两个数组存放前后缀的乘积。方法2. 前后缀分解 + O(1)的空间复杂度。这题的难点在于,不能用乘法。
2025-02-02 09:55:10
224
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人