自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小小博客

Web倒是可以给梦想者一个启示,你能够拥有梦想,而且梦想能够实现,网络是离你梦想最近的地方!

  • 博客(487)
  • 资源 (2)
  • 收藏
  • 关注

原创 Quartz任务调度框架

Quartz是OpenSymphony开源组织在Job scheduling领域的一个开源项目,该项目于 2009 年被 Terracotta收购,目前是 Terracotta 旗下的一个项目。它完全由java编写、可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建运行十个、百个、乃至几万个Jobs这样复杂的程序。官网:http://www.quartz-scheduler.org/

2025-11-18 15:44:50 489

原创 位图 & 咆哮位图

这就是为什么在现代大数据系统中,Roaring Bitmap 能够取代传统位图成为标准解决方案的原因。位图使用一个比特数组来表示集合。桶0x0003中有很多元素,如。要表示最大值为12的集合,需要。元素数量 ≤ 4096。(在桶0x0001中)元素数量 > 4096。位设为1,否则为0。固定 8192 字节。

2025-11-17 10:26:11 125

原创 图解Redis面试篇

Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景。Redis提供了多种数据类型来支持不同的业务场景,比如String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合)、Bitmaps(位图)、HyperLogLog(基数统计)、GEO(地理信息)、Stream(流),并且对数据类型的操作都是原子性的,因为执行命令由单线程负责的,不存在并发竞争的问题。除此之外,Redis还支持。

2025-11-06 23:17:25 572

原创 零拷贝技术

这涉及到多次的CPU和内存之间的数据拷贝操作,会消耗CPU的时间和内存带宽。零拷贝技术可以利用Linux下的MMap、sendFile等手段来实现,使得数据能够直接从磁盘映射到内核缓存区,然后通过DMA传输到网卡缓存,整个过程中CPU只负责管理和调度,而无需执行实际的数据复制指令。传统的IO需要四次拷贝和四次上下文(用户态和内核态)切换,而MMap只需要三次拷贝和四次上下文切换,从而能够提升程序整体的执行效率,并且节省了程序的内存空间。,避免了中间的拷贝过程,从而提高了数据传输的效率。

2025-11-06 11:57:01 235

原创 深入浅出 Java 虚拟机之进阶部分

我们上面说的这些工具的基础,就是 Java Agent 技术,可以利用它来构建一个附加的代理程序,用来协助检测性能,还可以替换一些现有功能,甚至 JDK 的一些类我们也能修改,有点像 JVM 级别的 AOP 功能。通常,Java 入口是一个 main 方法,这是毋庸置疑的,而 Java Agent 的入口方法叫做 premain,表明是在 main 运行之前的一些操作。Java Agent 就是这样的一个 jar 包,定义了一个标准的入口方法,它并不需要继承或者实现任何其他的类,属于无侵入的一种开发模式。

2025-11-03 23:34:22 397

原创 深入浅出 Java 虚拟机之实战部分

有很多工具能够帮助我们来分析这份内存快照。在前面已多次提到 VisualVm 这个工具,它同样可以加载和分析这份 dump 数据,虽然比较“寒碜”。专业的事情要有专业的工具来做,今天要介绍的是一款专业的开源分析工具,即 MAT。MAT 工具是基于 Eclipse 平台开发的,本身是一个 Java 程序,所以如果你的堆快照比较大的话,则需要一台内存比较大的分析机器,并给 MAT 本身加大初始内存,这个可以修改安装目录中的 MemoryAnalyzer.ini 文件。

2025-11-03 23:34:03 741

原创 深入浅出 Java 虚拟机之垃圾回收

其实,如果没有明显的内存泄漏问题和严重的性能问题,专门调优一些 JVM 参数是非常没有必要的,优化空间也比较小。

2025-11-03 23:33:45 936

原创 深入浅出 Java 虚拟机之基础原理

到这里本课时的内容就全部讲完了,今天我们分别从三个角度,了解了 JVM 在 Java 研发体系中的位置,并以一个简单的程序,看了下一个 Java 程序基本的执行过程。我们所说的 JVM,狭义上指的就 HotSpot。如非特殊说明,我们都以 HotSpot 为准。我们了解到,Java 之所以成为跨平台,就是由于 JVM 的存在。Java 的字节码,是沟通 Java 语言与 JVM 的桥梁,同时也是沟通 JVM 与操作系统的桥梁。

2025-11-03 22:12:10 627 1

原创 如何设计一个秒杀系统(下)

性能优化的过程首先要从发现短板开始,除了我今天介绍的一些优化措施外,你还可以在减少数据、数据分级(动静分离),以及减少中间环节、增加预处理等这些环节上做优化。首先是“发现短板”,比如考虑以下因素的一些限制:光速(光速:C = 30万千米/秒;

2025-11-03 22:08:11 541

原创 如何设计一个秒杀系统(上)

来让我们回顾下前面的内容,我首先介绍了构建大并发、高性能、高可用系统中几种通用的优化思路,并抽象总结为“4要1不要”原则,也就是:数据要尽量少、请求数要尽量少、路径要尽量短、依赖要尽量少,以及不要有单点。当然,这几点是你要努力的方向,具体操作时还是要密切结合实际的场景和具体条件来进行。然后,我给出了实际构建秒杀系统时,根据不同级别的流量,由简单到复杂打造的几种系统架构,希望能供你参考。

2025-11-03 22:07:47 860

原创 《如何设计一个秒杀系统》学习笔记

这玩意是一个经典而又基础的面试题,如果没准备没答好肯定得分不高,但是答好了应该也没辙,估计大家都会准备。2018年更新的专栏,还挺经典的。

2025-11-03 22:06:56 128

原创 《深入浅出 Java 虚拟机》学习笔记

JVM还是非常主要的滴,这门课如果后续有时间还得看看。

2025-11-02 18:51:43 181

原创 其他并发模型

通过上面的介绍,相信你应该已经对Actor有一个感官印象了,下面我们再来看看Actor规范化的定义是什么样的。处理能力,处理接收到的消息。存储能力,Actor可以存储自己的内部状态,并且内部状态在不同Actor之间是绝对隔离的。通信能力,Actor可以和其他Actor之间通信。创建更多的Actor;发消息给其他Actor;确定如何处理下一条消息。其中前两条还是很好理解的,就是最后一条,该如何去理解呢?

2025-10-30 01:52:23 816

原创 案例分析.

经典的限流算法有两个,一个是令牌桶算法(Token Bucket),另一个是漏桶算法(Leaky Bucket)。令牌桶算法是定时向令牌桶发送令牌,请求能够从令牌桶中拿到令牌,然后才能通过限流器;而漏桶算法里,请求就像水一样注入漏桶,漏桶会按照一定的速率自动将水漏掉,只有漏桶里还能注入水的时候,请求才能通过限流器。令牌桶算法和漏桶算法很像一个硬币的正反面,所以你可以参考令牌桶算法的实现来实现漏桶算法。

2025-10-30 01:46:08 566 1

原创 并发设计模式

利用Immutability模式解决并发问题,也许你觉得有点陌生,其实你天天都在享受它的战果。Java语言里面的String和Long、Integer、Double等基础类型的包装类都具备不可变性,这些对象的线程安全性都是靠不可变性来保证的。Immutability模式是最简单的解决并发问题的方法,建议当你试图解决一个并发问题时,可以首先尝试一下Immutability模式,看是否能够快速解决。具备不变性的对象,只有一种状态,这个状态由对象内部所有的不变属性共同决定。

2025-10-30 01:34:14 853

原创 并发工具类

如果你细心观察,会发现我们创建的锁的具体类名是ReentrantLock,这个翻译过来叫可重入锁,这个概念前面我们一直没有介绍过。所谓可重入锁,顾名思义,指的是线程可以重复获取同一把锁。例如下面代码中,当线程T1执行到 ① 处时,已经获取到了锁 rtl ,当在 ① 处调用 get()方法时,会在 ② 再次对锁 rtl 执行加锁操作。此时,如果锁 rtl 是可重入的,那么线程T1可以再次加锁成功;如果锁 rtl 是不可重入的,那么线程T1此时会被阻塞。

2025-10-30 01:18:12 594

原创 《手把手带你写一个 MiniSpring》学习笔记

看到这门课还是想看,看吧看吧,反正学习总没错。

2025-10-30 00:40:52 196

原创 实现JdbcTemplate

今天我们继续手写MiniSpring。从这节课开始我们进入MiniSpring一个全新的部分:JdbcTemplate。到现在为止,我们的MiniSpring已经成了一个相对完整的简易容器,具备了基本的IoC和MVC功能。现在我们就要在这个简易容器的基础之上,继续添加新的特性。首先就是 数据访问的特性,这是任何一个应用系统的基本功能,所以我们先实现它。这之后,我们的MiniSpring就基本落地了,你真的可以以它为框架进行编程了。我们还是先从标准的JDBC程序开始探讨。在Java体系中,数据访问的规范是JD

2025-10-30 00:40:24 572

原创 实现Spring AOP

从这节课开始,我们就要进入AOP环节了。在学习之前,我们先来了解一下是AOP怎么回事。AOP,就是面向切面编程(Aspect Orient Programming),这是一种思想,也是对OOP面向对象编程的一种补充。你可能会想:既然已经存在OOP面向对象编程了,为什么还需要AOP面向切面编程呢?这是因为在许多场景下,一个类的方法中,除了业务逻辑,通常还会包括其他比较重要但又不算主业务逻辑的例行性逻辑代码,比如常见的日志功能,它不影响我们的主业务逻辑,但又能在必要时定位问题,几乎每一个业务方法中都需要。又比如

2025-10-30 00:29:53 890

原创 实现Spring MVC

从这节课开始,我们开启一个新的部分:MVC。前面一章,我们实现了一个简单的IoC。麻雀虽小,五脏俱全,相比原生Spring框架而言,我们写的MiniSpring功能简单,但其核心功能已具备。我们会在这个基础上进一步扩展我们的框架。这一章我们来实现Spring MVC。MVC,全名对应Model(模型)、View(视图)、Controller(控制器)。它的基本流程是:前端发送请求到控制器,控制器寻找对应模型,找到模型后返回结果,渲染视图返回给前端生成页面。这是标准的前端请求数据的模型。实现了MVC之后,我们

2025-10-30 00:19:10 722

原创 实现Spring IoC

你好,我是郭屹,一名深耕软件开发行业30年的老兵。欢迎你跟我一起手写MiniSpring,一个mini版的Spring框架。在正式开始学习之前,我先介绍下我自己。说起来,我与Java和Spring打交道也有二十几年了。1998年我就加入了Sun Microsystems的Java团队,担任J2EE研发工程师,并在那里了解了Java专家Rodd Johnson、James Gosling等人的思想,见识了这些行业大牛的功力。我就像是一个跟随哥伦布船队的小船员,有幸亲眼见证了这段精彩的历史。而这些经验和知识也深

2025-10-29 23:55:27 576

原创 并发理论基础

当初我学习Java并发编程的时候,试图上来就看Java SDK的并发包,但是很快就放弃了。原因是我觉得东西太多,眼花缭乱的,虽然借助网络上的技术文章,感觉都看懂了,但是很快就又忘了。实际应用的时候大脑也一片空白,根本不知道从哪里下手,有时候好不容易解决了个问题,也不知道这个方案是不是合适的。我知道根本原因是,我的并发知识还没有成体系。我想,要让自己的知识成体系,一定要挖掘Java SDK并发包背后的设计理念。

2025-10-29 22:33:14 573

原创 模块二 高效实现

在前面的文章中,我曾使用了不少工具来辅助讲解,也收到了不少同学留言,说不了解这些工具,不知道都有什么用,应该怎么用。那么今天我便统一做一次具体的介绍。本篇代码较多,你可以点击文稿查看。今天我主要介绍了 Java 的内存模型。Java 内存模型通过定义了一系列的 happens-before 操作,让应用程序开发者能够轻易地表达不同线程的操作之间的内存可见性。在遵守 Java 内存模型的前提下,即时编译器以及底层体系架构能够调整内存访问操作,以达到性能优化的效果。

2025-10-27 01:46:30 372

原创 模块三:代码优化

在上一篇文章中,我介绍了逃逸分析,也介绍了基于逃逸分析的优化方式锁消除、栈上分配以及标量替换等内容。其中的标量替换,可以看成将对象本身拆散为一个个字段,并把原本对对象字段的访问,替换为对一个个局部变量的访问。举个例子,上面这段代码中的bar方法,经过逃逸分析以及标量替换后,其优化结果如下所示。(确切地说,是指所生成的 IR 图与下述代码所生成的 IR 图类似。之后不再重复解释。)由于 Sea-of-Nodes IR 的特性,局部变量不复存在,取而代之的是一个个值。在例子对应的 IR 图中,返回节点将直接

2025-10-27 01:46:12 915

原创 模块四:黑科技

Graal 是一个用 Java 写就的、并能够将 Java 字节码转换成二进制码的即时编译器。它通过 JVMCI 与 Java 虚拟机交互,响应由后者发出的编译请求、完成编译并部署编译结果。对 Java 程序而言,Graal 编译结果的性能略优于 OpenJDK 中的 C2;对 Scala 程序而言,它的性能优势可达到 10%(企业版甚至可以达到 20%!这背后离不开 Graal 所采用的激进优化方式。今天的实践环节,你可以尝试使用附带 Graal 编译器的 JDK。

2025-10-26 21:03:07 698

原创 模块一:Java虚拟机基本原理

前不久我参加了一个国外程序员的讲座,讲座的副标题很有趣,叫做:“我如何学会停止恐惧,并且爱上 Java 虚拟机”。这句话来自一部黑色幽默电影《奇爱博士》,电影描述了冷战时期剑拔弩张的氛围。程序员之间的语言之争又未尝不是如此。写系统语言的鄙视托管语言低下的执行效率;写托管语言的则取笑系统语言需要手动管理内存;写动态语言的不屑于静态语言那冗余的类型系统;写静态语言的则嘲讽动态语言里面各种光怪陆离的运行时错误。Java 作为应用最广的语言,自然吸引了不少的攻击,而身为 Java 程序员的你,或许在口水战中落了下风

2025-10-26 20:32:30 670

原创 《深入拆解Java虚拟机》学习笔记

Cpper转Javaer,感觉不看一下Java虚拟机专栏,说实话内心没谱。

2025-10-26 19:40:12 152

原创 面试鸭Java八股之后端场景面试题(下)

这个设计方案的核心是“一个队列保顺序,一个令牌桶控流速”。分布式:通过Redis实现中心化的协调,通过无状态Worker集群实现水平扩展。FIFO:通过单一消息队列(或Kafka单分区)和正确的重试逻辑(失败消息回退到队头)来严格保证。限流与用满:通过Redis实现的令牌桶算法,将第三方调用速率精确控制在100 TPS。只要队列不空,Worker会持续尝试,确保每秒100个额度被充分利用。这是一个在理论和实践中都非常可靠的设计,被广泛应用于需要严格限流和顺序处理的金融、交易等场景。

2025-10-24 01:35:17 1999

原创 Dubbo源码解读与实战-服务自省、元数据与配置中心

在本课时,我们重点介绍了 Dubbo 的服务自省架构的相关内容。首先,我们一起复习了 Dubbo 的传统架构以及传统架构中基础组建的核心功能和交互流程。然后分析了 Dubbo 传统架构在超大规模微服务落地实践中面临的各项挑战和压力。最后,我们重点讲解了 Dubbo 2.7.5 版本之后引入的服务自省方案,服务自省方案可以很好地应对 Dubbo 面临的诸多挑战,并缓解基于 Dubbo 实现的、超大规模的微服务系统压力。在此基础上,我们还特别介绍了 Dubbo 服务修订方案是如何避免元数据膨胀的具体原理。

2025-10-19 00:38:16 985

原创 Dubbo源码解读与实战-RPC功能核心实现

在前面的课程中,我们深入介绍了 Dubbo 架构中的 Dubbo Remoting 层的相关内容,了解了 Dubbo 底层的网络模型以及线程模型。从本课时开始,我们就开始介绍 Dubbo Remoting 上面的一层—— Protocol 层(如下图所示),Protocol 层是 Remoting 层的使用者,会通过 Exchangers 门面类创建 ExchangeClient 以及 ExchangeServer,还会创建相应的 ChannelHandler 实现以及 Codec2 实现并交给 Excha

2025-10-19 00:10:42 690

原创 Dubbo源码解读与实战-服务通信

在本课时,我们首先介绍了 Java 序列化的基础知识,帮助你快速了解序列化和反序列化的基本概念。然后,介绍了常见的序列化算法,例如,Arvo、Fastjson、Fst、Kryo、Hessian、Protobuf 等。最后,深入分析了 dubbo-serialization 模块对各个序列化算法的接入方式,其中重点说明了 Hessian2 序列化方式。本课时我们首先介绍了 dubbo-remoting 模块在 Dubbo 架构中的位置,以及 dubbo-remoting 模块的结构。

2025-10-19 00:09:59 537

原创 Dubbo源码解读与实战-注册中心

AbstractRegistry 实现了 Registry 接口,虽然 AbstractRegistry 本身在内存中实现了注册数据的读写功能,也没有什么抽象方法,但它依然被标记成了抽象类,从前面的Registry 继承关系图中可以看出,Registry 接口的所有实现类都继承了 AbstractRegistry。registryUrl(URL类型)。该 URL 包含了创建该 Registry 对象的全部配置信息,是 AbstractRegistryFactory 修改后的产物。

2025-10-19 00:09:29 749

原创 Dubbo源码解读与实战-集群

作为 dubbo-cluster 模块分析的第二课时,本课时我们就来介绍一下 dubbo-cluster 模块中涉及的另一个核心概念—— Router。Router 的主要功能就是根据用户配置的路由规则以及请求携带的信息,过滤出符合条件的 Invoker 集合,供后续负载均衡逻辑使用。在上一课时介绍 RegistryDirectory 实现的时候,我们就已经看到了 RouterChain 这个 Router 链的存在,但是没有深入分析,下面我们就来深入 Router 进行分析。首先我们来看 RouterCh

2025-10-19 00:08:12 635

原创 MySQL实战45讲之实战篇(中)

因为设计 max_connections 这个参数的目的是想保护 MySQL,如果我们把它改得太大,让更多的连接都可以进来,那么系统的负载可能会进一步加大,大量的资源耗费在权限验证等逻辑上,结果可能是适得其反,已经连接的线程拿不到 CPU 资源去执行业务的 SQL 请求。这时,如果实例 X 有从库,那么将 CREATE TABLE 和 insert 语句的 binlog 同步过去执行的话,执行事务之前就会先执行这两个 SET 命令, 这样被加入从库的 GTID 集合的,就是图中的这两个 GTID。

2025-10-18 12:52:49 709

原创 ShardingSphere 源码解析之分片引擎(下)

如上图所示,根据上一课时中的执行引擎整体结构图,可以看到的直接使用者是AbstractStatementExecutor 类//数据库类型//JDBC中用于指定结果处理方式的 resultSetType//JDBC中用于指定是否可对结果集进行修改的 resultSetConcurrency//JDBC中用于指定事务提交或回滚后结果集是否仍然可用的 resultSetConcurrency//分片 Connection//用于数据准备的模板类//SQL 执行模板类。

2025-10-18 11:55:39 925

原创 ShardingSphere 源码解析之分片引擎(上)

作为 ShardingSphere 分片引擎的第一个核心组件,解析引擎的目的在于生成 SQLStatement 目标对象。而整个解析引擎分成三大阶段,即生成 SQL 抽象语法树、提取 SQL 片段以及使用这些片段来填充 SQL 语句。本课时对解析引擎的整体结构以及这三个阶段中的第一个阶段进行了详细的讨论。这里给你留一道思考题:在 ShardingSphere 中,外观模式如何应用到 SQL 解析过程中?欢迎你在留言区与大家讨论,我将一一点评解答。

2025-10-18 11:42:31 809

原创 ShardingSphere 源码解析之治理与集成

今天,我们讨论 ShardingSphere 中的数据脱敏模块。通过在 “10 | 数据脱敏:如何确保敏感数据的安全访问?” 课时中的介绍,我们知道 ShardingSphere 提供了一套自动的数据加解密机制来实现透明化的数据脱敏。与普通的编程模式一样,对于数据脱敏而言,我们同样先获取一个 DataSource 作为整个流程的入口,当然这里获取的不是一个普通的 DataSource,而是一个专门针对数据脱敏的 EncryptDataSource。对于数据脱敏模块,我们的思路还是从上到下,从 Encrypt

2025-10-18 10:08:39 834

原创 ShardingSphere 源码解析之分布式事务

今天的内容我们围绕基于 XA 协议的分片事务管理器 XAShardingTransactionManager 展开了讨论,在理解 XAShardingTransactionManager 中 XADataSource、XAConnection 等核心对象时,重点还是需要站在 JDBC 规范的基础上,掌握与分布式事务集成和兼容的整个过程,本课时对这一过程进行了详细的介绍。当获取了 XADataSource 的实例对象之后,我们需要设置它的属性,这部分工作是由 DataSourceSwapper 类来完成的。

2025-10-18 09:31:16 262

原创 开篇词 & 课前必学

今天我带你了解了微服务架构,我们将单体应用和微服务架构做了个比较,分析了单体应用无法适应互联网快速迭代的痛点,以及微服务架构是如何利用灵巧敏捷的小规模服务,很好地适应了互联网行业的快速迭代和高可用保障的要求。总结来说,微服务架构是通过应用领域模型等理论,将庞大的单体应用拆分为更细粒度的小型服务,每个服务都可以独立部署、测试和发布,加之敏捷开发的推广,使得微服务很好地迎合了如今互联网行业快速试错、快速迭代的节奏,同时也保证了系统的可用性。今天我带你了解了Spring Cloud框架的定位和它的核心组件库。

2025-10-18 09:21:25 786

原创 ShardingSphere 源码解析之基础设施

本课时是 ShardingSphere 源码解析部分的第一个课时,我们讲解了剖析 ShardingSphere 代码结构的六大系统方法,引导你从可扩展性、分包设计原则、基础开发规范、核心执行流程、框架演进过程、通用外部组件等维度来正确阅读 ShardingSphere 源码。同时,我们针对 ShardingSphere 的基础架构本身以及业务功能来梳理了后续课程将要展开的各项核心技术体系。这里给你留一道思考题:在剖析 ShardingSphere 的各种方法中,你能针对每个方法列举一两个具体的示例吗?

2025-10-18 09:20:40 946

自动刷新生安全教育系列课程

打包成.exe文件方便大家使用,需要注意的是url为微信端自身登录的url(这个及其重要,不需要验证码),学号为自身学号。运行解压后的auto.exe。

2019-11-13

机器学习——鸢尾属分类数据

机器学习-实战-入门-iris数据分析

2021-03-03

空空如也

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

TA关注的人

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