自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(205)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java代理模式

代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介作用。

2025-09-23 10:30:48 256

原创 观察者模式

观察者模式(Observer Pattern)定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。

2025-09-19 12:47:25 179

原创 工厂模式VS抽象工厂模式

专注于"怎么创建":关注单一产品的不同创建方式垂直扩展:在同一产品线上增加不同的实现简单直接:一个问题,一个解决方案。

2025-09-17 20:26:30 382 1

原创 设计模式-桥接模式04

桥接模式就是把事物的两个方面(两个变化的维度)分开管理,让它们可以分别自由变化,然后通过一个“桥”把它们连接起来。桥接模式就是把“事物的两个变化点”分开,分别设计,然后通过桥(组合)连接起来,方便自由扩展和组合,避免重复和类爆炸。

2025-09-16 14:07:10 413

原创 设计模式-桥接模式03

抽象部分:指的是系统中“高层逻辑”或“业务需求”层面,比如“消息”是什么、“图形”是什么。它定义了系统的行为和接口,关注的是“做什么”。实现部分:指的是抽象部分的具体实现方式,比如“消息怎么发”、“图形怎么画”。它关注的是“怎么做”。传统面向对象编程中,通常使用继承将抽象和实现结合在一起。abstract class Shape { // 抽象部分// 实现部分void draw() { /* 画圆的具体实现 */ }这种方式,抽象和实现是紧密耦合的。“将抽象部分与实现部分分离”

2025-09-16 14:00:21 236

原创 设计模式-桥接模式01

桥接模式是一种结构型设计模式,它的核心目的是将抽象部分与实现部分分离,使它们都可以独立变化。通过引入桥接模式,可以避免多维度继承带来的类爆炸问题。通俗理解:桥接模式就是把“两个变化的维度”分开管理,通过“桥”进行连接。桥接模式适用于多维度变化的场景,是一种典型的“组合优于继承”的设计思想。它让抽象和实现可以独立扩展,是大型系统架构中常用的模式之一。

2025-09-16 13:55:45 313

原创 设计模式-桥接模式02

抽象部分:指的是系统中“高层逻辑”或“业务需求”层面,比如“消息”是什么、“图形”是什么。它定义了系统的行为和接口,关注的是“做什么”。实现部分:指的是抽象部分的具体实现方式,比如“消息怎么发”、“图形怎么画”。它关注的是“怎么做”。传统面向对象编程中,通常使用继承将抽象和实现结合在一起。abstract class Shape { // 抽象部分// 实现部分void draw() { /* 画圆的具体实现 */ }这种方式,抽象和实现是紧密耦合的。“将抽象部分与实现部分分离”

2025-09-16 13:52:23 412

原创 java类冲突

运行时找不到方法(NoSuchMethodError)类型转换异常(ClassCastException)行为异常(实际运行的不是你预期的代码)这些问题在大型项目中极其难以排查,建议在依赖管理和包命名上严格规范,使用工具及时发现和解决冲突。

2025-09-12 19:59:19 846

原创 类加载的双亲委派机制

中文通常翻译成“双亲委派机制”或“父类委托机制”,但“双亲委派”更常见。这种“层层请求、逐级委派”的方式,就是“双亲委派”。(直译为“父亲委托模型”)来的。这就是“双亲委派”名称的由来。这个名字其实是从英文。

2025-09-11 10:48:17 235

原创 java ClassLoader

ClassLoader(类加载器)是 Java 虚拟机(JVM)用来加载.class文件(字节码)的对象。它负责把类的字节码文件读进内存,并转换成 JVM 可以识别的 Class 对象。简单来说,你写的 Java 代码会被编译成.class文件,运行时由 ClassLoader 加载进 JVM,才能被执行。是 JVM 加载类和资源的工具,决定了类的来源和隔离性。双亲委派机制保证了安全和一致性,防止类被重复加载或被恶意篡改。

2025-09-11 10:43:18 713

原创 在 debug 过程中你可以通过 ClassLoader 获得哪些信息

在 debug 时,通过 ClassLoader,你深入能获得:类型与层级结构(AppClassLoader、ExtClassLoader、自定义等)可加载的物理路径列表(classpath、jar 包等)资源查找能力(资源文件的实际路径和 URL)自定义 ClassLoader 的内部状态类加载流程和委托机制但不能直接获得“已加载类列表”,这需要借助 JVM 诊断工具。

2025-09-11 10:39:18 922

原创 打印出类的 class 文件在 classpath(类路径)中的资源 URL

打印出 YourClass 类的 class 文件在类路径中的 URL,方便开发者定位 class 文件的位置。

2025-09-11 10:19:46 323

原创 Optional报空指针异常的情况

orElse参数表达式在求值时发生空指针。

2025-09-10 17:14:13 306

原创 如何判断java类之间的关系

看类之间是否有属性引用(关联、聚合、组合)。属性引用是否由该类完全管理生命周期(组合 vs 聚合)。是否只是方法参数或临时变量(依赖)。是否用extends继承父类(继承)。是否用implements实现接口(实现接口)。实线带菱形(聚合/组合)、虚线带箭头(依赖)、实线带空心三角(继承)、虚线带空心三角(实现接口)。

2025-09-10 10:19:09 271

原创 读懂mvn dependency:tree

是 Maven 的一个常用命令,用于显示项目的依赖树。通过这个命令输出的结果,你可以清晰地看到你的项目依赖了哪些库,以及这些库的传递依赖关系。下面详细讲解如何读懂这个输出结果。假设你运行:输出示例:2. 各部分含义每一行的格式通常为:groupId:组织名称artifactId:模块名称packaging:打包方式(如 jar、war)version:版本号scope:依赖范围(如 compile、test)3. 层级关系第一行是你的项目本身。后面的每一行按缩进和符号 或 或

2025-09-09 20:41:16 464

原创 java的“error”和“exception”

或如果你有具体的代码场景或需求,可以进一步补充,我会帮你详细分析!

2025-09-09 17:18:50 163

原创 Google Guice requestStaticInjection

让 Guice 在启动时自动为里的静态字段或方法执行依赖注入。用于特殊场合,不建议作为常规依赖注入方式。推荐优先使用实例注入,只有在必须使用静态成员的情况下才使用此功能。

2025-09-08 11:40:31 146

原创 Google Guice MapBinder 多重绑定

在实际开发中,可能有多个数据源插件(比如 DBProxy、ItemService),它们都实现了同一个接口(如RpcClient不同场景下,你可能需要根据名称动态获取对应的数据源实现。Guice 的MapBinder就能帮你把这些实现类注册到一个 Map 中,以后可以通过 key(比如数据源名称)来获取对应的实现对象。把多个实现类注册到一个 Map,key 是自定义的字符串,value 是实现类。以后只需注入这个 Map,就能方便地按需获取不同的数据源实现。扩展性强,后续增加新的数据源只需再。

2025-09-08 11:33:20 321

原创 Google Guice @Inject、@Inject、@Singleton等注解的用法

作用用于区分同一个接口的不同实现,避免注入时混淆。用法@Named(Guice 内置)@Inject自定义注解@Inject@PayPal使用场景同接口多个实现类时,需明确指定注入哪一个。依赖注入优先用构造器 + @Inject,保证不可变性和易测试。单例用 @Singleton 或 bind(…).in(Singleton.class),保证全局唯一。多实现用 @Named 或自定义注解,保证注入明确。Guice 的所有这些注解都是编译时类型安全,便于大型项目维护和扩展。

2025-09-08 11:06:13 247

原创 Google Guice介绍

Guice 通过 Java 注解(如 )和模块(Module)来描述对象的依赖关系。它在应用启动时,自动分析依赖,并为你创建和注入所需的对象实例。@Inject 注解Module(模块)Injector(注入器)Provider(提供者)@Singleton(单例)三、常用用法详解1. 构造器注入2. 字段注入3. 方法注入4. 绑定接口到实现在模块中配置:5. 绑定到特定实例6. 使用 Provider7. 作用域管理单例:

2025-09-08 11:02:33 954

原创 isAssignableFrom() vs instanceof

两者各有适用场景,理解它们的差异有助于在正确的场合选择正确的工具!

2025-09-06 19:31:29 389

原创 通过gitlog,查看只修改.conf的commit占总提交的占比

n$i$i。

2025-09-05 10:44:40 431

原创 JVM 的 C1/C2 编译器

JVM 的 C1/C2 编译器负责将热点代码编译为高效机器码,提升 Java 程序性能。编译阈值 CompileThreshold 控制方法被编译的时机,影响启动速度与运行效率。分层编译机制结合了 C1 快速启动和 C2 高性能的优势,是现代 JVM 的默认模式。通过合理调节相关参数,可以根据应用场景优化 JVM 性能。如需针对实际项目给出具体调优方案,或更深入了解 JVM 内部机制,欢迎继续提问!

2025-09-03 18:42:26 796

原创 列式数据库和行式数据库

现代数据架构中,很多企业会同时使用两种类型:行式数据库处理业务事务,列式数据库进行数据分析。

2025-08-26 15:41:09 284

原创 offload什么意思

在计算机领域,(卸载/分流)是指将某些计算任务从主处理器转移到其他专门的处理单元或设备上执行的技术。

2025-08-25 11:37:08 219

原创 为什么计算机储存单位的进率是1024而不是1000

硬盘厂商通常使用十进制标准(1000),而操作系统多使用二进制标准(1024),这就是为什么你买的1TB硬盘在电脑上显示容量会"缩水"的原因。计算机内部使用二进制(0和1)来处理所有信息。早期的计算机系统就采用了这种约定,后来成为了行业标准。

2025-08-25 11:19:58 499

原创 网络抓包常用命令

sudo tcpdump -i 网卡 -w 文件名.pcap # 抓包sudo tcpdump -r 文件名.pcap -A | less # 看包其他的都可以查备忘录或者现学现用!重点是理解原理而不是背命令抓包 = 把网络数据复制到文件看包 = 从文件读取数据显示其他参数都是为了让显示更好看或过滤内容。

2025-08-22 11:02:26 353

原创 网络抓包介绍

抓包= 复制网络数据包到文件包文件= 当前目录下的.pcap文件查看包= 用tcpdump -r 文件名读取看内容= 加上-A参数看文本数据最实用的命令然后用空格键翻页,q退出,/关键词搜索。这样你就能看到网络上到底传输了什么数据!

2025-08-22 10:29:56 392

原创 Maven 的 module 管理

Maven 的模块化管理极大提升了项目的组织性、可维护性和扩展性。通过合理划分模块、统一依赖和插件管理、规范构建流程,可以让大型项目开发变得高效且可控。掌握多模块项目的管理,是企业级 Java 项目开发的基础能力之一。如需具体示例或某一部分更详细的说明,欢迎继续提问!

2025-08-11 11:37:30 887

原创 `<dependencyManagement>`内部的`<dependencies>`和外部的`<dependencies>`的区别:

这种方式既保证了版本的统一管理,又允许在具体使用时进行个性化配置。

2025-08-06 18:49:07 386

原创 Git 中**未暂存**和**未跟踪**的区别:

特征未跟踪 (Untracked)未暂存 (Unstaged)Git是否知道文件❌ 不知道✅ 知道文件是否存在历史版本❌ 没有✅ 有是否可以用恢复❌ 不能✅ 能是否会在git diff中显示❌ 不会✅ 会清理命令git clean或风险程度删除就彻底没了可以恢复到最后commit状态记忆技巧未跟踪= Git 不认识这个文件未暂存= Git 认识文件,但修改还没准备好提交。

2025-08-05 17:06:08 361

原创 DNS缓存

DNS缓存就是本地保存的“域名与IP地址”映射记录,用来加速访问和减少网络请求。遇到网络异常、网站打不开、hosts文件修改无效等情况,可以尝试刷新DNS缓存。

2025-05-29 14:17:04 1046

原创 Grafana 过滤器介绍(literal_or、iliteral_or、not_literal_or、not_literal_or)

通过上述解释,您可以根据具体需求选择合适的过滤器选项,以准确控制变量在查询中的替换方式和匹配逻辑。,这些选项决定了当变量包含多个值时,在查询中如何插入和处理这些值。将多个值连接起来,查询包含任意一个指定值的数据,匹配时不区分大小写。将多个值连接起来,查询包含任意一个指定值的数据。条件连接起来,排除指定的值,匹配时不区分大小写。条件连接起来,排除指定的值。:当变量包含多个值时,使用。:当变量包含多个值时,使用。:当变量包含多个值时,使用。:当变量包含多个值时,使用。:查询商品表中排除类别为。

2025-01-11 08:19:49 1565

原创 Java NIO、AIO分析

Java提供的NIO和AIO两种非阻塞IO模型各有优劣,适用于不同的应用场景。NIO以其高并发和低资源消耗的特点,适合中高并发的网络应用;AIO则通过完全异步的方式,进一步提升了系统的吞吐量和性能,适用于极高并发和复杂异步需求的系统。开发者应根据具体的业务需求、系统规模和团队能力,选择最合适的IO模型,以实现最佳的性能和可维护性。

2025-01-06 15:45:01 1166

原创 java IO 与 BIO、NIO、AIO

标准IO(基于流):传统的IO操作,基于字节流和字符流,通过ReaderWriter等类进行数据的读写。:阻塞式IO,每个请求对应一个线程,适用于连接数较少的场景。:非阻塞IO,通过通道(Channel)和缓冲区(Buffer)实现,适用于高并发场景。:异步IO,通过回调机制实现,允许操作系统通知应用程序IO操作的完成。Java提供了多种IO模型,以满足不同应用场景的需求。

2025-01-06 14:18:35 874

原创 java instanceof

instanceof运算符用于判断一个对象是否是某个特定类的实例,或者是否实现了某个接口。其返回值是一个布尔值(true或falseinstanceof是 Java 中一个强大的类型检查工具,能够在运行时确定对象的类型或接口实现。然而,过度依赖instanceof可能表明设计上的不足,应该优先考虑使用多态和良好的面向对象设计原则。随着 Java 版本的迭代,模式匹配为instanceof带来了更简洁和安全的用法,使得类型检查和转换更加便捷。

2025-01-01 08:42:28 2361

原创 Comparator 示例

这段代码实现了基于分级结构的字符串排序,适用于需要按照层级进行比较的场景。通过拆分字符串并逐级比较,可以确保排序结果符合预期。上述优化建议旨在提高代码的简洁性和可读性,开发者可以根据具体需求选择合适的实现方式。

2025-01-01 08:41:41 420

原创 java isAssignableFrom 使用示例

Parent 类name:类型为Stringdata:类型为Objectvalue:类型为NumberChild 类(继承自Parent继承了Parent的所有字段。重写了value字段,类型变为Integer(更具体的子类型)。新增了extra字段,类型为DoubleUnrelated 类:类型为String通过修改判断逻辑,从比较Field类本身改为比较字段的类型,我们可以更准确地控制字段的替换和添加行为。if (!选择哪种逻辑取决于你的具体需求保留更具体的类型。

2024-12-31 17:47:42 1134

原创 java isAssignableFrom

cls)功能:判断当前Class对象所表示的类或接口是否与指定的Class参数cls所表示的类或接口相同,或是否是它的超类或超接口。返回值返回true:如果当前Class对象表示的类或接口与参数cls表示的类或接口相同,或是参数类的超类或超接口。返回false:否则。是一个强大的工具,用于动态判断类之间的兼容性和继承关系。在你提供的代码中,它用于确保fieldMap中存储的Field对象是类型最兼容的版本,从而在后续的反射操作中避免潜在的类型冲突和错误。通过深入理解。

2024-12-31 17:46:31 2057

原创 Socket、HTTP 和 gRPC

Socket是网络通信的基础,提供底层的数据传输能力。HTTP构建在 Socket 之上,定义了应用层的通信协议,适用于请求-响应模式的应用。gRPC基于 HTTP/2 和 Socket,提供高性能的远程过程调用框架,适用于微服务和分布式系统。理解它们之间的关系有助于在不同的应用场景中选择合适的技术栈,并合理设计系统的通信结构。

2024-12-30 14:20:49 1205

Introduction+to+Algorithms.pdf

《Introduction to Algorithms》译作《算法导论》,最为经典的算法入门书之一。得到吴军老师推荐。

2019-07-29

空空如也

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

TA关注的人

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