自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java的多态是如何实现的

Java 多态通过 方法重写、动态绑定和方法表实现,其本质是运行时根据对象实际类型动态调用方法。继承和接口是多态的两种主要实现方式,前者效率更高,后者更灵活。合理运用多态可提升代码扩展性和可维护性。

2025-05-06 10:55:44 394

原创 为什么Lua脚本可以保证原子性

在Java编程中,有两个场景中提到了原子性。一个是数据库事务的ACID四大特性中的原子性,它是指"数据库操作要么都成功执行,要么都回滚!另外一个则是并发编程中的三大特性之一的原子性,它是指"线程的操作,不可被拆分,不可被中断!该面试题中的原子性则主要是指并发编程中的原子性!Lua脚本是一种使用C语言编写的轻量小巧的脚本语言,它设计的目的就是为了嵌入到应用程序中,并为应用程序提供灵活的扩展和定制能力。从 Redis 2.6.0 版本开始,支持通过内置的Lua脚本解释器,使用EVAL命令对Lua脚本进行操作。

2025-05-04 22:58:53 404

原创 部分非检查型异常和检查型异常

非检查型异常:继承自RuntimeException或Error,如NullPointerException、ArrayIndexOutOfBoundsException等,通常由代码逻辑错误导致。检查型异常:继承自Exception但不属于RuntimeException的子类,如IOException及其子类(FileNotFoundException、CharacterCodingException)、ClassNotFoundException等,编译器强制要求处理。

2025-05-04 21:36:13 251

原创 Java中的Object类

java.lang.Object类是Java语言中的根类,即所有类的父类。如果一个类没有特别指定父类,那么默认则继承自Object类。根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。其中2个方法特别常用:public String toString():返回该对象的字符串表示。public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。

2025-05-02 16:39:13 953

原创 Java中的工具类

Java中的工具类(Utility Classes)是开发中用于简化常见任务、提高效率的代码模块,涵盖了字符串处理、集合操作、文件IO、日志管理等多个领域。

2025-05-02 12:26:38 385

原创 索引的优化和升级

写操作成本:每新增一个索引,INSERT/UPDATE/DELETE 操作需额外维护索引树,写入密集型场景建议单表索引控制在 5 个以内。:前缀索引优化:对长文本字段(如地址),通过 COUNT(DISTINCT LEFT(column, N)) 测试最佳前缀长度。:对长文本字段(如VARCHAR(255)),需平衡前缀长度与选择性,例如通过COUNT(DISTINCT LEFT(column, N))测试最佳长度。:若查询常按(name, age)组合筛选,应创建联合索引而非单字段索引,避免回表。

2025-05-01 16:51:48 1008

原创 LongAdder

特性AtomicLongLongAdder并发更新性能一条变量,竞争激烈多个段,竞争分散内存使用只占用一个变量多个 Cell,占用更多内存实时性实时获取准确值获取值需 sum() 聚合适用场景并发不高或读多写少并发高、写操作频繁。

2025-05-01 16:15:51 227

原创 前端Token的存放位置

存储方式安全性持久性推荐用途❌ XSS易获取✅ 高临时项目或非敏感数据❌ XSS易获取⚠️ 一般短期访问、单窗口操作✅ 最安全✅ 高推荐用于生产环境登录系统内存变量✅ 安全❌ 低对安全性要求极高的 SPA对于普通前后端分离项目(如 React/Vue + REST API), 最常见的是放在 LocalStorage 或 SessionStorage 中// 登录成功后保存// 后续请求时带上${

2025-05-01 15:54:19 411

原创 一种典型的服务前后端流问题

数据不一致或接口不匹配。

2025-05-01 13:46:17 246

原创 Java中的内存优化

弱引用(WeakReference):用于缓存场景(如 WeakHashMap),GC时自动回收无强引用的对象,避免内存泄漏。使用 WeakReference 或第三方缓存库(如Guava Cache)结合LRU策略,控制缓存生命周期。,其核心思想是通过共享对象来减少内存消耗并提升性能,尤其适用于需要处理大量相似对象的场景。软引用(SoftReference):内存不足时释放,适用于敏感缓存(如图片缓存)。(可变、不可共享),将重复的部分共享,从而避免创建大量冗余对象。(不可变、可共享)和。

2025-04-28 17:33:06 580

原创 跨域资源共享(CORS)

跨源资源共享(Cross-Origin Resource Sharing)的英文单词首字母缩写。它是一种基于HTTP头的机制,该机制通过允许服务器标示除了它自己以外的其他源,使得浏览器允许这些域加载自己的资源。CORS就是一种使得服务器能够在浏览器的配合下,控制来自不同域的网页对自己资源的访问的一个机制。

2025-04-26 23:31:19 359

原创 桶排序(Bucket)的时间复杂度

当输入数据均匀分布时,每个桶中的元素数量大致相同,均为n/k,并且每个桶内的排序操作(通常是插入排序或快速排序)的平均时间复杂度为 O(n)。此时桶内元素数量m = n,若使用插入排序等O(m²)算法,桶内排序时间为O(n²),总时间复杂度为O(n + n²) = O(n²)。因此,如果每个桶的排序操作都是 O(n),并且我们有 k 个桶,则总的时间复杂度为 O(n + n/k * k),简化后得到 O(n)。桶排序的平均时间复杂度为 ‌O(n+k)‌,其中:n‌ 是待排序元素的数量,k‌ 是桶的数量。

2025-04-26 16:45:43 270

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

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

2025-04-24 11:16:16 230

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

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

2025-04-24 11:01:49 214

原创 Redis的三高如何保证

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

2025-04-22 21:23:13 248

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

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

2025-04-22 10:49:33 148

原创 对Linux的理解

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

2025-04-22 00:23:32 271

原创 C++中的智能指针

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

2025-04-21 22:27:39 156

原创 B+树节点分裂

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

2025-04-21 22:20:17 217

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

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

2025-04-21 21:55:47 199

原创 工作流引擎的选择

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

2025-04-19 00:23:24 697

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

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

2025-04-18 22:11:41 598

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

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

2025-04-18 21:51:03 238

原创 进程的状态

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

2025-04-08 20:40:16 117

原创 并发与并行的区别

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

2025-04-08 20:31:52 172

原创 什么是索引区分度

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

2025-04-08 19:36:42 143

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

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

2025-04-07 20:36:20 255

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

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

2025-04-06 21:49:51 351

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

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

2025-04-06 21:00:54 489

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

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

2025-04-05 13:31:27 275

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

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

2025-04-05 12:42:03 972

原创 软件设计模式的分类

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

2025-04-04 20:44:04 970

原创 四种限流算法

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

2025-03-24 22:41:59 317

原创 分布式系统的CAP理论

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

2025-03-22 22:33:31 855

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

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

2025-03-22 21:17:41 484

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

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

2025-03-22 21:05:57 426

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

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

2025-03-22 20:31:40 402

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

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

2025-03-22 20:17:53 305

原创 太多TIME_WAIT的原因

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

2025-03-22 16:15:04 249

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

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

2025-03-22 15:54:18 497

空空如也

空空如也

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

TA关注的人

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