- 博客(859)
- 资源 (12)
- 收藏
- 关注
原创 ############---------写博客的意义---------############
简介 每个人对于博客的用户可能不一样,我这个博客呢主要记录一些我在工作中遇到的一些技术问题,或者是网上查找的一些资料整理。有原创文章,也有转载的,都是记录自己觉得有意义的东西。起因 2014年的一天,开始进行部分EveryNote资料迁移 2011年毕业工作我就在记录自己接触到的知识了,之前我都是将自己的资料和整理的信息记录到EveryNote上,但是...
2014-02-24 10:01:34
2331
1
原创 Java: HashMap 和 ConcurrentHashMap的区别
分段锁(Segmented Locking)是一种用于提高多线程程序性能的锁机制,通过将锁细分来减少竞争,从而在高并发环境中提高性能。分段锁在Java的中有广泛应用。安全性:ConcurrentHashMap 在多线程环境下是安全的,而HashMap 不是。使用场景:如果是单线程环境,使用HashMap 更优;如果是多线程环境,且需要高性能的线程安全Map,则应选择ConcurrentHashMap。。
2025-12-03 21:03:32
724
原创 RocketMQ、Kafka 和 RabbitMQ 等中间件对比
RocketMQ 的 NameServer 高可用单节点 NameServer 存在单点风险,生产环境需部署 3 + 节点,Producer/Consumer 配置多个 NameServer 地址(用分号分隔)Kafka 的分区数量陷阱分区数并非越多越好,每个分区都会占用内存和文件句柄,建议单个 Broker 的分区总数不超过 2000RabbitMQ 的内存控制默认配置下,内存使用达到 40% 会阻塞生产者,需通过vm_memory_high_watermark参数调整阈值RocketMQ 凭借。
2025-12-03 20:47:39
1198
原创 延迟双删介绍
具体来说,在某些场景下,我们需要先更新或删除数据库中的数据,然后再更新或删除缓存中的数据,以保证数据的一致性。但在某些情况下,由于网络延迟、服务器故障或其他原因,可能导致缓存中的数据更新或删除失败,从而导致数据库和缓存中的数据不一致。这种策略通常用于解决数据在缓存和数据库中不一致的问题。值得注意的是,不管哪种方案,都避免不了Redis存在脏数据的问题,只能减轻这个问题,要想彻底解决,得要用到同步锁和对应的业务逻辑层面解决。如果缓存和数据库负载很高,主从同步很慢,很有可能不能在延时的时间内实现同步。
2025-10-28 21:13:20
420
原创 防止重复提交订单
在电商平台中,用户提交订单是一个非常敏感的动作。库存扣减优惠券核销支付下单消息发送点两次“提交订单”按钮网络卡顿时刷新页面使用浏览器回退再次提交重复提交订单,造成资源浪费,甚至业务损失!请求唯一性接口幂等性服务端锁机制。
2025-10-28 21:06:45
725
原创 注册中心 eureka、nacos、consul、zookeeper、redis对比
服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态LB机制就不再适用了,需要引入额外的组件来管理微服务提供者的注册与发现,而这个组件就是服务注册中心。
2025-10-28 20:56:58
747
原创 分库分表详解,以及ShardingJDBC介绍
传统应用项目设计通常都是采用单一数据库作为存储方案,但是随着互联网的迅猛发展以及应用数据量的增长,数据库会随着数据量的增长而渐渐成为整个应用框架的性能瓶颈。首先是由于关系学数据库大多是采用B+Tree类型的索引,当数据量超过一定的阈值之后,会导致索引的深度增长,而索引的深度又直接影响了磁盘IO操作的次数,直接影响了数据库查询性能的优劣。
2025-10-28 20:46:43
739
转载 分库分表实践
原大众点评的订单单表早就已经突破两百G,由于查询维度较多,即使加了两个从库,优化索引,仍然存在很多查询不理想的情况。去年大量抢购活动的开展,使数据库达到瓶颈,应用只能通过限速、异步队列等对其进行保护;业务需求层出不穷,原有的订单模型很难满足业务需求,但是基于原订单表的DDL又非常吃力,无法达到业务要求。随着这些问题越来越突出,订单数据库的切分就愈发急迫了。这次切分,我们的目标是未来十年内不需要担心订单容量的问题。先对订单库进行垂直切分,将原有的订单库分为基础订单库、订单流程库等,本文就不展开讲了。
2025-10-28 20:28:33
34
转载 Springboot6种解决循环依赖方案
本文梳理了解决循环依赖的几种方法。大体分三类:配置解决,延后注入使用和解耦调用关系。如果出现了循环依赖,大体是设计有点问题,是软件开发中的坏味道,如果暂时无法从架构层面解决,那可以根据场景选择适合的方案。
2025-10-20 21:06:54
126
转载 主流的大数据技术栈
↓(业务转换,数据合并,数据清洗(统一枚举值,填充null值,清晰非法值等)保证数据质量)数据集市DM 【维度建模】(基于多张宽表形成某主题的报表数据) → BI/APP/API。存储层(HDFS / HBase / Iceberg / Hive)查询层(StarRocks / Doris / Presto)分析层(Superset / Tableau / 自研看板)采集层(Kafka / Flume / DataX)计算层(Flink / Spark / Trino)↓(格式/接口定制)
2025-10-20 20:57:49
384
转载 常见的索引原则
索引字段顺序 = 查询条件顺序,从过滤强到弱;性别 / 状态这种字段别建索引,浪费空间;别对索引字段做函数 / 运算,like 别用 % 开头;查什么就索引什么,省掉回表时间;索引不是越多越好,定期清理没用的;自增 ID 最省心,UUID 慎用作主键。其实索引原则就像 “交通规则”—— 不懂规则乱建索引,就像开车闯红灯,早晚出事故;懂规则并灵活运用,才能让数据库 “跑” 得又快又稳。最后送大家一个习惯:写复杂查询前先用explain看看执行计划,重点看typerefrange是好的,ALL。
2025-09-11 21:28:04
156
原创 双token
顾名思义,本机制下所使用的令牌分为长短两种:长令牌即过期时间较长的,专门用于token的续签,同时刷新两种token;短令牌即过期时间较短的access_token,进行常规业务请求时使用。登陆用户登录成功后,同时获得长短两种令牌,之后长令牌存在客户端暂不使用,仅使用短令牌用于常规业务请求。服务端在接收到每个携带短令牌的业务请求时,按照JWT的规则进行用户的身份验证,并从payload中获取用户身份信息,此即“三验证”中的第一种验证。
2025-09-10 21:28:24
678
原创 分布式存储:RustFS与MinIO全面对比
当全球开发者因MinIO社区版突然移除Web管理界面而措手不及,当AGPL许可证的“传染性”风险让企业用户如履薄冰,一个来自中国的开源力量正以颠覆性姿态破局——RustFS。这款基于Rust语言的高性能分布式存储系统,仅用一年时间便在GitHub狂揽1.5k星,成为炙手可热的MinIO替代方案。本文将深度解析其技术架构、性能表现与落地实践,揭示它如何重构存储范式。RustFS与MinIO代表了分布式对象存储的两种技术路线:前者以Rust语言为基石,聚焦高性能、轻量级和国产化;后者以成熟生态和企业级功能见长。
2025-09-10 20:48:20
1413
原创 Valkey vs Redis详解
Redis 作为最受欢迎的内存型 NoSQL 键值存储系统之一,一直都很受广大用户的推崇。然而,由于Redis 调整了许可政策,这一举措在开源社区引起了广泛争议。2024 年 3 月 20 日,Redis Labs 宣布从 Redis 7.4 开始,将源码使用协议修改为RSAv2和SSPLv1协议。该变化意味着 Redis 在 OSI(开放源代码促进会)定义下不再是严格的开源产品。包括亚马逊云科技在内的40多家公司持续投入在Valkey项目上。
2025-09-02 21:26:57
1492
原创 Spring Boot 与 Spring AI 深度实战(基于DeepSeek)
文章指出,随着业务复杂度提升,传统单体架构在扩展性和维护性上的不足日益凸显。作者通过实践案例,分享了如何从单体架构平滑迁移至微服务架构的经验,重点介绍了服务拆分、数据一致性保障和渐进式迁移策略等关键环节。迁移过程中需注意服务治理、监控体系建设和团队协作方式的调整,最终实现系统的高可用和快速迭代能力。该案例为企业级架构演进提供了可参考的实施路径。
2025-09-02 21:15:45
189
原创 Github Copilot 快捷键,以及快捷键修改
虽然github copilot足够智能,绝大部分时候都能补全想输入的内容(尤其注释或者文档,有奇效),但依然有很多时候是会选择IDEA自带的补全。,在IDEA的设置中修改keymap,删除原有的TAB快捷键,我是选择增加了```这个按键作为github copilot的补全键。但每次习惯性按下TAB键的时候,IDEA默认都会自动采用github copilot的补全代码。开始支持IDEA后,就开始使用,但这个插件和IDEA默认的自动补全快捷键都是用的TAB键。接受内联建议:使用 Tab 键。
2025-09-02 21:14:38
696
原创 MySQL 回表详解
在MySQL数据库中,回表(Look Up)指的是在进行索引查询时,首先通过索引定位到对应页,然后再根据行的物理地址找到所需的数据行。换句话说,回表是指根据索引查询到的主键值再去访问主键索引,从而获取完整的数据记录。在实际应用中,我们可以根据具体的场景来决定是否使用回表操作。需要返回更全面的数据:有些查询场景下,返回的字段可能不仅仅是索引所包含的列,此时回表可以提供更全面的数据信息。使用非聚簇索引:当表中没有定义主键或者查询条件没有使用主键时,非聚簇索引成为主要的索引选择,但回表操作则难以避免。
2025-09-02 21:11:54
712
转载 Netty 底层零拷贝
Netty 的零拷贝技术是通过优化数据传输过程中的数据复制操作,以降低系统的开销和提高性能。通过以上方式,Netty 实现了数据传输过程中的零拷贝,大大提高了系统的性能和吞吐量,特别是在高并发、大数据量的网络应用场景下,可以显著地降低系统的资源消耗和延迟。
2025-08-28 21:43:58
103
原创 Spring Boot对访问密钥加解密——HMAC-SHA256
HMAC-SHA256 是一种基于 哈希函数 的消息认证码(Message Authentication Code, MAC),它结合了哈希算法(如 SHA-256)和一个密钥,用于验证消息的完整性和真实性。HMAC 是 “Hash-based Message Authentication Code” 的缩写,它广泛应用于网络通信中,用于保证消息在传输过程中未被篡改,同时也可以校验消息是否来自可信方。
2025-08-28 21:39:13
1572
原创 主流配置中心对比
在单体应用中,配置管理可能不是什么大的事情,通常会以配置文件的方式。常见的方法比如将配置通过打包脚本打入应用包中,或者直接放到运行应用的服务器的特定目录下,或者存储到数据库中。配置变化频繁时,需要频繁的打包部署应用。不同环境的配置需要分开管理(比如测试环境与生产环境)。而在分布式微服务架构中,服务数量剧增,如果还是手动去实现配置信息的修改或数据的迁移等,效率是很低的,而且手动操作配置也极有可能出现错误的情况。
2025-08-27 21:51:28
1054
转载 Sprintboot 添加banner
在日常开发中,我们经常会看到各种各样的启动画面。例如以下几种①spring项目启动画面②启动画面③若依项目启动画面还有很多各式各样好看的启动画面,那么怎么定制这些启动画面呢?
2025-08-13 14:06:56
158
原创 restTemplate禁用url编码
在将queryUrl传入RestTemplate之前,将其封装为一个URL对象,避免了queryUrl被RestTemplate进行2次UrlDecode。param={"name":"张三","age":22}我们想要的结果并不想restTemplate调用的时候二次编码,而是使用我们的url。param={"name":"张三","age":22}在restTemplate调用方法的时候默认对url做了编码处理。这时使用restTemplate调用接口,会对url再次编码成。接口放接收到路径解码后。
2025-08-07 13:39:19
462
原创 SpringBoot设置跨域的几种方式
来源是URL的结构是这样的,在这个URL的组成部分中,Origin是指协议、主机和端口号的组合,例如:80、443。CORS 的出现是因为来源不同。也就是说,必须遵守 SOP。-> 这意味着该政策只允许相同的来源。过去,出于安全考虑,严格只允许来自同一来源的通信,但最近,从不同来源获取和使用资源变得非常普遍,因此创建了作为 SOP 例外的 CORS 策略。当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域首先编写一个过滤器,可以起名字为MyCorsFilter.java。
2025-08-06 15:12:20
844
原创 Spring Boot 3.5.x 使用 SpringDoc 2 / Swagger3
Springfox 是一套可以帮助 Java 开发者自动生成 API 文档的工具,它是基于 Swagger 2.x 基础上开发的。除了集成 Swagger 2.x,Springfox 还提供了一些额外功能,例如自定义 Swagger 文档、API 版本控制、请求验证等等。但是随着时间的推移,Swagger2.x 终究成为历史,所以我们可以看出 springfox-boot-starter 的坐标从 3.0.0 版本(2020 年 7 月 14 日)开始就一直没有更新;
2025-07-29 16:36:46
2212
1
原创 Springboot集成knife4j
针对以上两种情况,Knife4j基于Servlet体系提供了过滤Filter功能,如果开发者使用Spring Boot开发框架进行开发的话,只需在。配置文件中配置相关属性即可方便的解决上面的问题,不用删除Springfox-swagger的jar包或者删除相关代码等复杂的操作,提升开发体验.功能时,同很多开发者经常讨论的问题就是在生产环境时,屏蔽或者去除Swagger的文档很麻烦。注解来使用增强功能,自2.0.6版本后,只需要在配置文件中配置。在以前的版本中,开发者需要在配置类中手动使用。
2025-07-18 13:55:46
1728
转载 Navicat切换到DBeaver,如何同步连接信息
公司不让用Navicat了怎么办?可以选择DBeaver来替换,怎么才能将Navicat中的DB连接信息导入到DBeaver呢?此时导入的连接不能用,因为密码是经过Navicat加密的,在DBeaver中不能使用,需要重新更新密码。但是该密码为密文,怎么获取到它对应的明文呢?用文本编辑器打开文件connections.ncx,查看密码。最终会得到一个connections.ncx文件。在Navicat中导出DB连接信息。在DBeaver中导入连接。连接成功,正常使用即可。
2025-07-18 08:33:27
712
原创 ngx_slab_alloc() failed: no memory in upstream zone
最近使用upstream的 resolve和zone配置,遇到这个问题,网上查了查,这里记录一下。
2025-06-03 15:10:12
288
原创 【容易坑】mybatis中使用if标签比较两个字符串是否相等
继续往下面想,这个if语句的执行顺序,应该是在执行SQL查询之前,那可以推断的是,Mybatis在执行SQL时,首先是先将所有的标签转化组装为SQL,然后在执行SQL语句。activityType就是在这个if判断语句中,被赋值为2的,即使在Mybatis的初始绑定值为3,那这么说的话,activityType不为null时,它的值会一直为2。这是一个简单的条件判断,并决定排序字段的语句,但是中间却使用了等号作为判断条件,显然这儿是不成立的,大抵已经找到原因了。注意:使用如下方式是错的。
2025-05-21 17:50:42
1902
原创 MyBatis if choose 动态 SQL
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。
2025-03-27 17:00:48
1163
原创 nginx之gzip_static详解
Nginx支持静态和动态两种包体gzip压缩方式,分别对应模块ngx_http_gzip_static,ngx_http_gzip。我们知道gzip是CPU密集型的应用,实时动态压缩比较消耗CPU资源。另外,如果使用gzip,则sendfile零拷贝技术无法使用。为进一步提高Nginx的性能,我们可以使用静态gzip压缩,提前将需要压缩的文件压缩好,当客服请求到达时,直接发送压缩好的.gz文件,如此就减轻了服务器CPU的压力,提高了性能。
2025-03-21 14:41:42
659
转载 IT在35岁做到财务独立
十二年以后的2021年,他已经是亚马逊的高级工程师,年薪62.5万美元(含股票),年支出7.8万美元,净资产达到了240万美元(含股票)。最早的时候,他的履历没有特别的亮点,他就去一个名校,读了一年制硕士(欧美硕士一般都是一年)。有了积蓄以后,不要让钱在银行闲置,要学会投资。不过,IT 行业跟律师和金融业不一样,就算没有名校经历,只要自身水平过硬,也能求职成功,只是开始时的机会可能会少一些。不过,换公司是双刃剑,为了获得更高的薪酬,就需要在面试和工作中给别人留下深刻印象,后面的公司对你的要求也会越来越高。
2025-03-21 10:10:08
206
原创 Nexus
Nexus 的全称是 Nexus Repository Manager(Nexus 仓库管理器),是 Sonatype 公司的一个产品。Nexus 是一个强大的仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。Nexus 分为开源版和专业版,其中开源版足以满足大部分 Maven 用户的需求。
2025-03-10 14:25:36
810
原创 Ollama 简介
用户不仅可以使用 Ollama 提供的预训练模型,还可以在此基础上进行模型微调。根据自己的特定需求,开发者可以使用自己收集的数据对模型进行再训练,从而优化模型的性能和准确度。
2025-03-06 16:56:01
1542
中文分词算法介绍、分类详解
2010-04-25
linux 定时发送邮件 应用sendmail技术
2010-04-25
Cluence搜索引擎源码
2009-01-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅