自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(948)
  • 收藏
  • 关注

原创 Redis除了分布式锁之外的应用场景

Redis不仅限于分布式锁,其核心价值在于通过灵活的数据结构和高性能特性,覆盖缓存、实时通信、计数、排名、会话管理等多种场景。简单键值存储→ 缓存、计数器复杂结构→ 排行榜、社交关系扩展功能→ 发布订阅、地理位置。

2025-04-24 11:16:16 195

原创 除了Redis实现分布式锁的其他方案

依赖现有数据库系统,无需额外组件。:性能较低(尤其高并发场景),锁无自动超时机制易导致死锁,且不支持重入。

2025-04-24 11:01:49 101

原创 Redis的三高如何保证

Redis 支持主从结构,一个主节点(Master)可以有多个从节点(Slave)。当主节点故障时,从节点可以继续提供只读服务。Sentinel 用于监控 Redis 实例状态,一旦发现主节点故障,会自动完成主从切换(故障转移),选举新的主节点。Redis 是单线程处理请求,通过多路复用(IO multiplexing)处理大量连接,避免多线程上下文切换的开销。每个主节点负责一部分数据,同时每个主节点有一个从节点作为备份,主节点宕机会自动故障转移。数据会自动从主节点同步到从节点,保障数据冗余。

2025-04-22 21:23:13 235

原创 OpenFeign第一次调用为什么会很慢?

绝大部分的组件第一次访问的时候都会有点慢,抛开业务代码和前端网络通信过程中的缓存初始化,单独就OpenFeign来说,主要有以下几个方面:尽量避免在第一次调用的时候去初始化各种配置,具体来说有两个方法:参考资料:【Java面试最新】OpenFeign第一次调用为什么会很慢?

2025-04-22 10:49:33 109

原创 对Linux的理解

Linux 是一个 类 Unix 的自由和开放源代码的操作系统内核,由 Linus Torvalds 于 1991 年首次发布。现在,Linux 通常指的是以 Linux 内核为核心、结合 GNU 工具链和各种开源软件组成的操作系统(比如 Ubuntu、CentOS、Debian 等)。

2025-04-22 00:23:32 249

原创 C++中的智能指针

智能指针是C++中一种用来的对象封装器。它像普通指针一样使用,但在生命周期结束时能够,从而有效防止内存泄漏和野指针等问题。

2025-04-21 22:27:39 149

原创 B+树节点分裂

B+树节点分裂是B+树在插入数据时常见的一种操作。由于B+树是一种,每个节点可以有多个子节点。当某个节点插入新键值后超出了它的最大容量(即超过了阶数限制),就需要执行以维持树的平衡性。

2025-04-21 22:20:17 181

原创 内存泄漏的概念及其原因对策

内存泄漏是指程序在运行过程中,动态分配的内存空间未被及时释放,导致该内存空间无法被其他程序使用。通常,这种情况发生在程序请求内存后,忘记释放或错误地释放了内存,导致这些内存空间无法被回收,从而占用系统资源,最终可能导致系统或程序崩溃。程序的内存占用逐渐增加,可能会导致系统变慢或崩溃。在长期运行的系统(如服务器)中,内存泄漏可能会导致资源耗尽。

2025-04-21 21:55:47 181

原创 工作流引擎的选择

对于比较简单的流程,OsWorkFlow会是一个比较好的选择,对于复杂的流程就不推荐了,OsWorkFlow是一个轻量化的流程引擎,基于状态机机制,数据库表很少,Osworkflow提供的工作流构成元素有:步骤(step)、条件(conditions)、循环(loops)、分支(spilts)、合并joins)等,但不支持会签、跳转、退回、加签等这些操作,需要自己扩展开发,有一定难度。Camunda我们还能正常的测试,Flowable在并发100的情况下还可以,但是200的时候就直接没有了反应。

2025-04-19 00:23:24 677

原创 SQL查询慢如何解决以及如何优化索引

首先,需要识别哪些查询是慢查询。

2025-04-18 22:11:41 517

原创 Bean的生命周期和销毁过程

创建过程:实例化、依赖注入、初始化(包括@PostConstruct、InitializingBean接口、和init-method)。销毁过程:销毁(包括DisposableBean接口、destroy-method、和@PreDestroy)。

2025-04-18 21:51:03 232

原创 进程的状态

进程的状态(Process States)指的是一个进程在其生命周期中所处的不同运行阶段。

2025-04-08 20:40:16 107

原创 并发与并行的区别

定义:两个及两个以上的作业在同⼀时间段内执行。但不一定是同时进行的。它们可能是交替进行的。比喻:就像一个厨师在炒菜的同时,还在煲汤和煮饭,他轮流照顾每道菜。本质:切换执行,给人感觉多个任务同时进行。常见场景:单核 CPU 也能做到并发,通过操作系统的任务切换(线程调度)来实现。

2025-04-08 20:31:52 168

原创 什么是索引区分度

索引区分度 = 字段的唯一值个数 / 总记录数它表示某个字段的“唯一性”程度,也叫“选择性”。值越接近1,说明字段的取值越分散、唯一性越高,适合建索引。值越接近0,说明字段的值重复多、区分度差,索引效果差。

2025-04-08 19:36:42 120

原创 HashMap的工作原理及哈希冲突

哈希冲突是指不同的 key 经过 hash() 运算后,得到相同的数组索引(桶位置)。这时它们会被放在数组的同一个位置,就会形成链表或树结构。

2025-04-07 20:36:20 237

原创 如果在 finally 中 return 会发生什么?

在 Java 中,如果在 finally 块中使用了 return,它会 覆盖 任何在 try 或 catch 块中的 return 值。这是 Java 中一个非常重要的细节,容易引发逻辑错误。

2025-04-06 21:49:51 322

原创 系统日志文件查看方式及分类

系统日志文件一般存放在。

2025-04-06 21:00:54 322

原创 硬链接和软链接有什么区别

【参考资料】硬链接和软链接有什么区别。

2025-04-05 13:31:27 265

原创 为什么Cookie无法防止CSRF攻击而token可以

CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种利用用户当前已登录身份对网站进行非法操作的攻击方式。攻击者诱导受害者在登录状态下访问一个恶意链接,从而在用户毫不知情的情况下,以用户的身份向目标网站发起请求,执行如转账、修改资料、发帖等敏感操作。

2025-04-05 12:42:03 940

原创 软件设计模式的分类

目的:关注对象的创建方式,提供更灵活的实例化方法,避免直接使用 new 关键字,提高代码的可扩展性和可维护性。常见创建型模式:1)工厂方法模式(Factory Method):定义一个创建对象的接口,由子类决定实例化哪一个具体类。2)抽象工厂模式(Abstract Factory):提供一个创建一系列相关对象的接口,而不指定具体类。3)单例模式(Singleton):确保一个类只有一个实例,并提供全局访问点。4)建造者模式(Builder):用于创建复杂对象,将对象的构造过程与表示分离。5)原型模

2025-04-04 20:44:04 960

原创 四种限流算法

滑动时间窗口是将计数器算法中的实际周期切分成多个小的时间窗口,分别在每个小的时间窗口中记录访问次数,然后根据时间将窗口往前滑动并删除过期的小时间窗口。,如果有客户端来请求,先需要从令牌桶中拿一个令牌,拿到令牌,才有资格访问系统,这时令牌桶中少一个令牌。在这个容量范围内的请求可以排队等待系统的处理,超过这个容量的请求,才会被抛弃。漏桶算法的原理就像它的名字一样,我们维持一个漏斗,它有恒定的流出速度,不管水流流入的速度有多快,,类似于消息中间件,不管消息的生产者请求量有多大,消息的处理能力取决于消费者。

2025-03-24 22:41:59 306

原创 分布式系统的CAP理论

⼀致性(Consistency): 所有节点访问同⼀份最新的数据副本可⽤性(Availability): ⾮故障的节点在合理的时间内返回合理的响应(不是错误或者超时的响应)。分区容错性(Partition tolerance): 分布式系统出现⽹络分区的时候,仍然能够对外提供服务。什么是网络分区?分布式系统中,多个节点之前的⽹络本来是连通的,但是因为某些故障(⽐如部分节点⽹络出了问题)某些节点之间不连通了,整个⽹络就分成了⼏块区域,这就叫⽹络分区。

2025-03-22 22:33:31 846

原创 一个表每天有 1000 万条数据插入,如何设计数据库表

对于每一条数据,如果有很大字段(如文本或二进制数据),可以考虑将其存储在单独的表中,避免影响主表的查询和索引效率。:如果数据结构有明确的模式(如 MySQL、PostgreSQL),可以通过适当的分表和索引设计来提高性能。:对经常查询的字段(如时间戳、地域、状态等)建立索引,但要避免过多的索引,以免影响插入性能。:如果可以接受短时间的延迟,可以采用异步写入或者将数据先写入缓存,再定时批量插入到数据库中。:对于不再频繁访问的数据,可以定期归档到不同的存储介质或表中,保持主表的高效性能。

2025-03-22 21:17:41 458

原创 数据库表每天新增数据量大该如何设计表(从业务角度来分析)

主要考察数据库的设计能力。路由策略。路由策略的选择,完全根据业务场景而定的。主要看业务场景又有哪些要求。参考资料《大厂面试题》每天新增100W数据,表应该怎么设计。

2025-03-22 21:05:57 408

原创 B+树的使用场景和优点

B+ 树相比 B 树的主要改进在于其所有数据存储在叶子节点,并且内部节点只存储索引,提高磁盘访问性能,使得其在数据库和文件系统等存储密集型应用中得到广泛应用。

2025-03-22 20:31:40 393

原创 项目中的RabbitMQ作用基础架构及与RocketMQ和Kafka的对比

RabbitMQ 适用于 低延迟、可靠性高的任务调度,如用户通知、订单处理。RocketMQ 适用于 高吞吐、事务消息,如金融支付、订单系统。Kafka 适用于 大数据、日志分析,如日志收集、流式计算。

2025-03-22 20:17:53 300

原创 太多TIME_WAIT的原因

在 C/S 模型(客户端-服务器)中,通常是客户端发起请求,服务器处理后再主动关闭连接。如果服务器短时间内处理大量短连接(如 HTTP/HTTPS、RPC),那么服务器会进入大量的 TIME-WAIT 状态。:HTTP 短连接模式(Connection: close),每次请求都重新建立和关闭 TCP 连接,导致服务器不断进入 TIME-WAIT。

2025-03-22 16:15:04 182

原创 CLOSE-WAIT和TIME-WAIT的区别

如果你的系统里有大量 CLOSE-WAIT,说明应用层代码没有正确关闭 socket。如果有大量 TIME-WAIT,说明短连接过多,可能需要优化连接复用策略。

2025-03-22 15:54:18 463

原创 TCP为什么可靠

奇校验‌:如果数据中“1”的个数已经是奇数,则校验位为0;如果“1”的个数是偶数,则校验位为1,以确保“1”的总数为奇数。偶校验‌:如果数据中“1”的个数已经是偶数,则校验位为0;如果“1”的个数是奇数,则校验位为1,以确保“1”的总数为偶数。校验和需一致才能传输成功,它有奇校验、偶校验等等。在TCP进行传输时,会进行确认应答和数据编号。会像探路一样发送小数据,防止阻塞。超过指定时间未收到应答,则重传。根据接收端能力进行发送。

2025-03-22 15:38:31 330

原创 TCP头部

源端口(Source Port):发送端的端口号目的端口(Destination Port): 接收端的端口号序列号(Sequence Number):用于可靠数据传输,表示数据流中的字节偏移量。确认号(Acknowledge Number):仅在ACK标志位有效时,表示期望接收的下一个序列号。URG标志位:表示紧急数据,紧急指针字段有效ACK标志位:置为1的时候表示确认号字段有效。PSH标志位:立即交付数据到应用层。SYN标志位:用于建立连接。FIN标志位:终止连接。

2025-03-21 00:42:55 301

原创 端口号,IP,MAC地址

MAC 地址用于局域网通信,IP 地址用于跨网段通信,端口号用于标识同一设备上的不同应用。

2025-03-20 23:17:22 402

原创 地址栏输入网址到页面显示过程中各层使用的协议

ARP(地址解析协议):如果目标IP地址不在本地缓存,设备会使用 ARP(IPv4)或 ND(IPv6)查找目标MAC地址。ICMP (互联网控制报文协议):可能用于网络诊断(如Ping)或处理某些错误情况(如路径MTU【最大传输单元】发现)。TCP(传输控制协议):HTTP/HTTPS依赖TCP进行可靠传输,建立三次握手连接(客户端和服务器之间)。UDP(用户数据报协议):DNS查询通常使用UDP进行快速解析(部分情况下可能使用TCP).

2025-03-20 13:25:15 230

原创 JVM垃圾回收底层机制之内存分配和回收机制

GC 期间虚拟机又发现 allocation1 无法存入 Survivor 空间,所以只好通过 分配担保机制 把新生代的对象提前转移到老年代中去,老年代上的空间足够存放 allocation1,所以不会出现 Full GC。如果对象在 Eden 出生并经过第一次 Minor GC 后仍然能够存活,并且能被 Survivor 容纳的话,将被移动到 Survivor 空间(s0 或者 s1)中,并将对象年龄设为 1(Eden 区->Survivor 区后对象的初始年龄变为 1)。

2025-03-08 17:59:04 308

原创 常见同步工具类的对比

但它与共享锁的概念有所不同。如果 state 减 1 后小于 0,表示当前并发访问的线程数量已达到 permits 的限制,该线程会被放入 AQS 的等待队列并阻塞,CountDownLatch 是一次性的,计数器的值只能在构造方法中初始化一次,之后没有任何机制再次对其设置值,当 CountDownLatch 使用完毕后,它不能再次被使用。它要做的事情是:让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。

2025-03-08 12:40:26 667

原创 为什么进程切换的开销比线程的大

各个进程之间可能拥有独立的内存空间,切换进程需要进行内存页的切换和可能的页面交换,把虚拟地址转换为物理地址需要查页表,查页表是很慢的过程,转换检测缓冲区TLB可以提高页表查询速度就是一个缓存,页表切换后TLB就会失效,命中率就会变低,切换过程就会慢,线程则不需要切换地址空间所以开销比较小。相比于使用TLB(转换检测缓冲区)优化页表查询,直接查询页表需要访问主存,速度较慢,因此CPU设计了TLB作为缓存,存储最近的地址映射,提高地址转换效率。

2025-03-04 13:31:54 159

原创 数字签名原理

就是说用私钥去签署一份文件,然后全世界的人都可以用公钥去解密数字签名,如果解密成功就可以认定这份的确是我签署的。数字签名:用私钥去加密,用公钥去解密。

2025-03-04 10:17:01 280

原创 DSA和RSA对比

DSA: 仅可用于数字签名RSA: 既可用于签名,也可用于加密/解密。如果需要数据加密,RSA是更好的选择。

2025-03-03 20:18:12 260

原创 RSA公钥加密算法

RSA是一种非对称加密算法,也称为公钥加密算法。

2025-03-03 19:55:22 194

原创 中间人攻击

未授权的攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在与对方直接对话。如SMB会话劫持、DNS欺骗等攻击都是典型的中间人攻击。简而言之,所谓的中间人攻击就是通过拦截正常的网络通信数据并进行数据篡改和嗅探,而通信的双方却毫不知情。这种攻击模式是通过各种技术手段将控制住的一台计算机虚拟放置在网络连接中的两台通信计算机之间。中间人攻击成为对网银、网游、网上交易等最有威胁并且最具破坏性的一种攻击方式,我们使用的WIFI无线网络也可能是犯罪份子开启的虚假WIFI热点。

2025-03-03 16:58:23 300

原创 调用一个函数在堆中的过程

当 printValue() 结束后,它的 栈帧销毁,main() 继续执行。

2025-03-03 16:41:18 156

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除