自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(387)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 一次性下发100w个优惠卷/短信/二维码,技术架构如何设计?

分片+异步+MQ:避免单点压力,提升系统弹性。幂等:防止重复发放。批量+限流:防止下游接口被打爆。失败补偿:保证最终一致性。全链路监控:保障可观测、可追溯。一次性下发百万级券/短信/二维码,建议采用“分片+异步+消息队列+幂等+监控+补偿”架构,确保高可用、高性能、强一致性和可观测性。如需某一环节详细设计、代码实现、性能瓶颈分析,欢迎继续追问!

2025-06-21 18:21:37 714

原创 设计模式-六大基本原则

掌握这些原则,能显著提升代码质量,构建易于维护和扩展的软件系统!子类必须能够替换其父类,且不影响程序正确性。高层模块不应依赖低层模块,二者都应依赖抽象。一个类(或模块)应仅有一个引起变化的原因。:通过抽象和继承实现扩展,而非修改源码。一个对象应尽可能少地与其他对象发生交互。软件实体应对扩展开放,对修改关闭。客户端不应依赖它不需要的接口。:面向接口编程,解耦模块依赖。:减少耦合,避免“链式调用”。:继承关系应确保行为兼容性。:高内聚,避免“上帝类”。:避免臃肿接口,按需拆分。

2025-06-16 17:45:43 534

原创 【ChatGPT应用篇-1】助力Beauty代码的初体验

看雪 :https://zhuanlan.kanxue.com/article-23255.htm。掘金:https://juejin.cn/post/7233572338968231991/开发者头条:https://toutiao.io/posts/sm3x9qi。墨天轮:https://www.modb.pro/db/628560。

2023-06-12 17:42:09 311

原创 【ChatGPT工具篇-1】ChatGPT + MindShow 分分钟搞定PPT制作

AI 能生万物吗?

2023-06-12 07:18:03 1206

原创 【ChatGPT散文篇】ChatGPT-清华大学的讲座要点

刚听了清华大学关于ChatGPT的讲座,总结几个要点:1、AI有可能成为地球上最初的硅基生命。2、AI已迭代至博士研究生的智力水平。3、以后将不存在学科和专业的概念,也不存在文科理科的区分,将是学科大融合。因为一个文科生哪怕不懂代码,只要会向AI提问,就能编程。至于给孩子选专业,现在不要再选绘画、翻译和计算机专业。4、人类绘画的版权是彻底保不住了,人类创造的文字版权也许还能挣扎一下,已有科研团队在研究版权保护的最小单元,算是濒死前再拯救一下。5、主讲人用AI半个小时写了1万4千字科幻小说。6、平庸的脑力劳

2023-06-10 17:12:14 2036

原创 京东业务系统数据库分库分表架构设计

数据库分库分表架构设计、分布式事务、数据聚合检索

2023-06-08 13:41:50 1269

原创 hibernate-validator 源码导入 IDEA Compile error!

最近项目想使用 hibernate-validator,于是想看看其源代码。1、遇到的问题: 帮助文档:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#validator-gettingstarted-createmodel 从gitHub上找到了源码库,源码地址:https://

2017-12-04 12:52:45 1204

原创 Idea 自动生成变量set方法插件

开发了一款简单的自动生成变量set方法插件可以访问:https://github.com/wangyingjie/generate-set/tree/master/zip在该文件夹下面有一个:Auto-generate-set.wmv 安装使用说明该插件是依赖 idea2017.2.6版本开发,目前支持2017.3,低版已测试不支持!插件效果:https://github.com/wangying

2017-11-29 16:42:16 15222 2

原创 IDEA JRebel热部署插件免费使用方法

IDEA 2017.2.5版本,先在File->Settings->Plugins->Browse Repositories,然后搜索JRebel,安装JRebel for Intellij。Rebel有一个免费获得永久使用权的方法(不是破解),登录https://my.jrebel.com这个网站,然后用Twitter或者Facebook账号登录这个网站,就能获得免费的激活码;特别注意:登录Fac

2017-10-28 15:13:50 1255

原创 阿里Java开发规范IDEA开发插件

初次体验阿里Java开发规范IDEA开发插件,这个规范插件真的Java开发人员必备的工具,值得点赞!1、下载安装插件Settings >> Plugins >> Browse repositories…2、重启IDEATools >> Alibaba Coding Guidelines3、代码分析检查单Settings >> inspections >> All-Check 代码检查单4、代码检

2017-10-15 12:05:45 9348

原创 《阿里巴巴Java开发手册(终极版)》

今天《阿里巴巴Java开发手册(终极版)》出炉……1、新版本历程 10月份阿里会出炉针对开发规范开发的IDE插件,值得期待!2、新版本下载地址: https://pan.baidu.com/s/1c1UQM7Q

2017-09-25 09:55:22 35180

原创 Java8优化优先检索缓存的代码

1、模拟Redis的缓存客户端 提供优化首先从缓存获取、缓存取不到则从数据获取并更新缓存的方法。import java.util.HashMap;import java.util.Map;import java.util.Objects;import java.util.function.Supplier;/** * @author: wangyingjie1 * @versi

2017-09-21 11:15:17 533

原创 方便好用的 Idea mybatis 插件 MyBatisCodeHelper

给大家推荐一个 idea mybatis的插件:MyBatisCodeHelper 源码gitHub地址:https://github.com/gejun123456/MyBatisCodeHelper 优点: 1、mapper文件(即表对应的dao)与xml文件自由切换,方便代码评审; 2、自动代码生成功能提供开发效率

2017-03-30 11:49:15 26472

原创 Tomcat源码导入Idea2016.2.3

想研究一下Tomcat源码,并把它导到IDE中,以方便调试,参考了网上的一些资料,再结合自己的实际操作,现将已导入Ide并调试通过的Tomcat源码包放到了 gitHub上,有需要的朋友可以直接下载导入Ide直接进行调试运行,具体操作步骤如下:1、准备工作(1)、本地安装 jdk1.7 以上版本,配置好环境变量 (2)、官网下载安装 idea2016.2.3 (3)、安装 git

2016-12-06 21:25:01 3954

原创 本地代码提交至gitHub远程仓库的方法

本地代码提交至gitHub远程仓库的方法1、创建gitHub代码库本文以导入 Struts2 源代码为例,http://git.apache.org/struts.git 可下载源代码。(1)、首先你需要注册一个gitHub账号;登录该账号创建代码库空间,如下截图: (2)、创建好的gitHub代码库如下图所示: 2、下载Struts2 源代码由于想研究一下 Structs2 的源代码,所以下载

2016-11-28 14:08:10 2995

原创 Spring 注解事务处理流程源码分析

声明:本文是自己在学习Spring注解事务处理源代码时所留下的笔记; 难免有错误,敬请读者谅解!!!1、事务注解标签 <tx:annotation-driven />2、tx 命名空间解析器 事务tx命名空间解析器TxNamespaceHandler org.springframework.transaction.config.TxNamespaceHandler#init3、A

2016-11-17 18:26:59 4332

原创 一种在线系统数据迁移方法

高效数据迁移、分布式、多机并行

2016-10-09 09:31:30 5060

原创 如何打乱List 或 Array元素的顺序

如何打乱List 或 Array元素的顺序打乱List或者Array数据元素的顺序,其实就是让集合中的元素变得随机,举个例子,有如下一个Array数据: 其中存储了 1, 2, 3, 4, 5 一共五个元素,经过程序随机排序后得到另外一个随机乱序的数组。其Java实现代码如下: public class ArrayRandomUtils { public static void main(

2016-08-10 12:28:38 10547

原创 分布式任务(Worker)处理方案

以下分别给出了3种实现抢宝分布式Worker的方案,其中第3种方案,是种前两种方案的一个整合实现。1. 方案1:服务化Worker设计基于soa基础服务实现分布式worker,通用性强,扫描的worker只负责扫描待执行的任务做分发,具体的任务处理交给soa服务端任务处理线程池;目前的Worker配置策略保留,将现有的worker执行方式作为Soa服务化Worker执行流程的降级方法1.1.部署图

2016-07-18 08:22:18 5005

转载 京东一元抢宝业务分库分表实现策略

1、 京东一元抢宝 以下分享的链接为我在京东参与的主要的业务系统; 有幸参与了这个项目的始终,一个从无到有的过程; 原文是我的leader写的。 2、 上一张设计图 3、 原文访问地址 http://mp.weixin.qq.com/s?__biz=MzIwODA4NjMwNA==&mid=2652897827&idx=1&sn=0d72e65

2016-07-17 17:30:14 2068

原创 ElasticSearch2.2.3 安装文档

软件准备 下载jdk 1.7 以上版本的jdkhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载 ES 2.2.3版本https://www.elastic.co/thank-you?url=https://download.elastic.co/elasti

2016-07-09 20:23:28 1885

原创 [转载]数据库锁分布式锁实现接口幂等性

每种幂等性实现方案都有各自的优缺点,我们需要根据实际的业务场景选择更合适的方案来解决幂等性问题。

2025-07-02 16:22:33 481

原创 Spring、SpringBoot 本身为什么不提供 Bean 的异步初始化

Spring官方不直接支持Bean级异步实例化,是为了保证依赖可用性、生命周期一致性、异常可控性和容器的可预测性。异步实例化的核心思想:Bean本身快速注册,重型任务交给异步线程,业务代码可感知就绪状态。适用场景:大数据加载、远程预热、慢资源初始化等。业务权衡:异步初始化的需求极少数场景才有推荐通过懒加载或业务异步实现,如果必须异步,建议将耗时任务下沉到业务逻辑层,Bean初始化阶段尽量轻量。

2025-07-02 11:43:50 1032

原创 避免 Java NPE 异常的 10 大优化手段(附代码示例)

在方法入口处显式校验参数,快速失败(Fail-Fast),避免空值传递到下游逻辑。避免调用方因未判空导致 NPE,遵循 “返回空集合而不是 null” 原则。Apache Commons 或 Guava 提供安全的空值处理工具。通过代码规范、语言特性、工具约束,将 NPE 消灭在编码阶段。结合 IDE 或 Lombok 在编译期检查空值风险。通过工具在编译期或代码审查阶段发现潜在 NPE。强制调用方处理空值场景,减少遗漏检查的风险。)的自动拆箱可能引发 NPE。,避免条件分支判断。

2025-07-01 15:21:24 446

原创 【转】深入理解分布式系统的 7 种数据分片策略

数据分片是将全量数据按照某种规则分散存储在多个数据存储上的一种技术,用于平衡系统的存储压力和读写压力,并实现数据存储和系统性能的线性扩展能力。常见的数据中间件如MySQL、Redis、HBase、ElasticSearch、Kafka、Hive等,都会使用一种或多种数据分片方式。以下是七种常见的数据分片方式:Hash取余分片:根据数据的哈希值进行取余操作,将数据分配到不同的存储节点上。一致性Hash分片:根据数据的哈希值在哈希环上进行映射,将数据分配到与其哈希值最近的节点上,以实现负载均衡。

2025-06-30 11:18:04 825

原创 【缓存技术】深入分析如果使用好缓存及注意事项

核心高频数据用 Kryo,边缘数据用 JSON,并通过统一接口封装,实现灵活切换。:某社交平台用户服务缓存 1 千万用户数据,需降低内存占用并提升吞吐量。:明星离婚新闻导致热点文章缓存失效,DB被击穿。:攻击者频繁请求不存在的数据(如负库存ID)。:用户下单时需实时检查库存,库存服务独立部署。:瞬时 10 万订单创建,DB 写入压力大。:北京、法兰克福、北美区域库存数据实时同步。:随机过期时间 + 永不过期结合异步更新。适用场景:高吞吐写入,允许短暂数据丢失。:促销活动结束,大量优惠券缓存同时过期。

2025-06-26 21:08:56 1036

原创 AI如何让你编码天赋异禀-任督二脉打通术

Talk is cheap, show me the code.” 鼓励多写代码,少空谈;“Code is cheap, show me the talk.” 鼓励多思考、多交流、深度理解。两者结合,才是优秀技术人的全面素养!

2025-06-24 17:33:24 593

原创 转载-秒杀系统—1.架构设计和方案简介

为了保证不出现超卖,就要舍弃A,保证CP。因为在七层协议上进行负载均衡的性能远不如LVS,而仅仅在四层协议上进行负载均衡的LVS又不能进行一些高阶的转发,也就是没有办法根据HTTP请求的内容去进行一些高阶的功能和转发。接着,从内核空间切换到用户空间,将HTTP协议请求交给用户空间运行的一个负载均衡技术去处理,也就是根据请求里的一些内容来将请求转发给真实的后端服务器。请求报文的目标端口改写成选定服务器的相应端口(RS提供的服务端口),最后将修改后的报文发送给选出的服务器RS(Real Server)。

2025-06-24 16:55:27 1152

原创 【转】如何画好架构图:架构思维的三大底层逻辑

数据结构“(这里指广义的数据结构,不是大学教科书上的数据结构),是任何一个软件的基石,其重要性怎么强调都不过分,系统的性能、复用性、扩展性、维护性、数据一致性等,往往都和“数据结构“密切相关。泳道中的每1列,是一个跨团队的其他人的系统,还是自己系统内部的一个子系统,还是一个逻辑模块,还是一个用户?有了物理部署,才能和上面的系统架构图对应起来,让人明白,上面的每个方块,是一个集群,还是单机版的进程?备注:这里说的系统/子系统,在物理上对应了一个集群(一个微服务的集群,或者一个独立部署的系统)。

2025-06-21 18:09:37 628

原创 IDEA智能编码AI插件-codegeex

指导手册:https://zhipu-ai.feishu.cn/wiki/CcduwOpcFiXh4skCQxfc7Ahgnmc官网地址:https://codegeex.cn/

2025-06-17 09:44:14 109

原创 Stream 超级好,Map 也很酷,但一定要注意 toMap() 的坑

【代码】Stream 超级好,Map 也很酷,但一定要注意 toMap() 的坑。

2025-06-16 21:29:33 326

原创 设计模式-迪米特法则(Law of Demeter, LoD)

一个对象应尽可能少地与其他对象发生交互,只与直接的朋友(成员变量、方法参数、方法返回值中的对象)通信,避免依赖间接的类。,适用于任何需要降低依赖关系的场景,尤其在大型系统或模块化架构中价值显著。:最少知识原则(Least Knowledge Principle)的调用形式,这种“火车残骸式”代码会增加耦合性。迪米特法则通过限制对象间的交互范围,推动代码向。

2025-06-16 17:49:33 419

原创 设计模式-单一职责原则(Single Responsibility Principle, SRP)

通过合理应用 SRP,可以显著降低代码的复杂度,为后续扩展和维护奠定坚实基础。:通过职责分离,提高代码的内聚性,降低耦合度,增强可维护性和可扩展性。:一个类(或模块、方法)应仅有一个引起其变化的原因。

2025-06-16 17:42:16 350

原创 设计模式-开闭原则(Open/Closed Principle, OCP)

通过抽象化和多态性设计,使系统在不修改已有代码的前提下,通过扩展实现新功能,提升可维护性和稳定性。通过遵循 OCP,可以构建高内聚、低耦合的系统,显著提升软件的可维护性和生命周期。系统需支持多种支付方式(信用卡、支付宝),未来可能接入微信支付。系统需支持绘制多种形状(如圆形、矩形),未来可能新增三角形。:软件实体(类、模块、函数等)应对扩展开放,对修改关闭。开闭原则是设计模式的核心原则之一,强调。

2025-06-16 17:41:42 444

原创 设计模式-里氏替换原则(Liskov Substitution Principle, LSP)

通过接口定义行为契约、避免继承滥用、编写兼容性测试,可有效提升代码的健壮性和可维护性。:子类必须能够替换其父类,且替换后程序的正确性不受影响。:确保继承关系的合理性,避免子类破坏父类的行为契约。里氏替换原则是面向对象设计的基石之一,强调。

2025-06-16 17:41:12 283

原创 设计模式-接口隔离原则(Interface Segregation Principle, ISP)

通过拆分臃肿的接口为更小、更具体的接口,减少不必要的依赖,提高系统的灵活性和可维护性。在微服务、插件化系统和 API 设计中,ISP 是确保模块独立性和可复用性的关键原则。,推动系统向高内聚、低耦合的方向演进。:客户端不应被迫依赖它们不使用的接口方法。

2025-06-16 17:40:42 435

原创 设计模式-依赖倒置原则(Dependency Inversion Principle, DIP)

在微服务、插件化架构和持续交付场景中,DIP 是确保系统灵活性的关键设计原则。:通过解耦模块间的直接依赖,提升代码的灵活性、可维护性和可测试性。,推动系统向松耦合、高内聚的方向演进。

2025-06-16 17:40:01 353

原创 深入 Java 泛型:高级应用与实战技巧

通过以上高级技巧和实战案例,可以显著提升泛型在复杂场景下的应用能力,写出更安全、灵活的 Java 代码!Java 泛型在编译后会擦除类型信息(Type Erasure),但通过反射和。Spring 通过泛型实现类型敏感的 Bean 注入,例如。或 Apache Commons 的泛型工具。在方法级别定义泛型,减少类级别的复杂依赖。,可以在运行时获取泛型的具体类型。如 Google Guava 的。确保泛型代码在不同类型下行为一致。:通过不同方法名或额外参数区分。约束类型范围,避免滥用。

2025-06-13 15:27:25 339

原创 深入 Java 泛型:基础应用与实战技巧

泛型信息在编译后会被擦除,运行时无法获取具体类型(如。通过以上案例,可以清晰理解不同符号的用途和区别!是常见的占位符符号,它们本质上没有区别,只是。,用于提高代码可读性。),但遵循习惯能提高代码可读性。你可以使用其他字母(如。在 Java 泛型中,

2025-06-13 15:26:30 679

原创 JAVA 泛型中的通配符 T,E,K,V 傻傻分不清楚 ?

在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。比如上述代码中的 T ,我们可以换成 A-Z 之间的任何一个 字母都可以,并不会影响程序的正常运行,但是如果换成其他的字母代替 T ,在可读性上可能会弱一些。通常情况下,T,E,K,V,?我们在定义泛型类,泛型方法,泛型接口的时候经常会碰见很多不同的通配符,比如 T,E,K,V 等等,这些通配符又都是什么意思呢?

2025-06-13 10:26:50 724

MindManager 模板

MindManager 模板

2016-08-03

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

TA关注的人

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