自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 git stash用法

提交一致),以便切换分支或执行其他操作。其本质是将修改存储为一个“储藏栈”(Stack),遵循后进先出(LIFO)原则。是高效管理临时修改的利器,尤其适合多任务切换场景。每个 stash 记录包含分支名、提交哈希和描述。(未提交的变更),使工作区恢复到干净状态(与。若恢复时发生冲突,需手动解决(类似合并冲突)。适用于解决 stash 与当前分支的冲突。:默认不保存未跟踪文件和忽略文件。

2025-11-22 08:29:53 372

原创 主从合并是什么

主从合并的具体含义要结合上下文来看,大多数情况下指的是将从分支的内容合并到主分支,或者将主分支的内容合并到从分支,以保证代码或数据的一致性和完整性。

2025-11-17 13:41:54 311

原创 git revert 2

指定你要保留的父分支。适用于已推送远程仓库、团队协作场景。不会破坏历史,安全可靠。

2025-11-06 10:32:45 335

原创 git revert

git revert是 Git 用来撤销某个已提交(commit)的变更的命令。它不会删除历史记录,而是创建一个新的提交,将指定提交的内容“反向应用”(也就是还原),让代码库回到之前的状态。与git reset不同,revert是安全的,不会丢失历史。git revert是撤销已提交变更的推荐方式,尤其在团队协作、已推送远程的情况下。它不会影响历史,只是新增一个“撤销”提交,让你安全地回滚功能或修复错误。

2025-11-06 10:29:01 361

原创 git cherry-pick

是 Git 中的一个命令,用于将某个特定的提交(commit)从一个分支复制到另一个分支。它不会合并整个分支,而是“挑选”某次提交的内容,应用到当前分支。这就像“挑樱桃”一样,只选你想要的那颗提交。是 Git 中非常实用的命令,让你可以灵活地迁移某些特定的改动到其它分支,适用于补丁、bug 修复等场景,但应谨慎使用。

2025-11-06 10:27:30 402

原创 linux软连接、硬连接

软连接是 Linux 文件系统中强大的工具,可以灵活组织文件结构、简化运维和开发流程。合理使用软连接有助于系统管理、项目部署、数据共享等多方面的工作,但也需注意权限、安全性和链接失效等问题。

2025-10-28 11:06:42 963

原创 召回的蛇形合并

/ 简单的Item类String id;// 来源标记蛇形合并是一种简单高效的多路召回融合策略,适用于推荐系统的候选集组装环节。上述Java实现可直接用于工业场景,也易于扩展。

2025-10-27 11:34:26 289

原创 log4j配置文件详解

/name:包名或类名(推荐包名,支持所有子包)。level:该 logger 的日志级别。additivity:为 false 时,日志只发给本 logger 指定的 appender,不再向上(root)传递,避免重复打印。

2025-10-23 14:51:52 734

原创 drawio画java的uml的类图时,class和interface的区别是什么

类图中的类直接画三栏矩形,类名正常显示。类图中的接口类名上方加,或类名斜体。方法只写方法签名,无实现。用虚线箭头表示实现关系。Person --实现(虚线带空心三角箭头)--> Printable总结在 draw.io 画 UML 类图时,class和interface的主要区别体现在标注、内容、以及实现/继承关系的连接线上。接口需要用标注,并用虚线箭头表示实现关系;类则用普通矩形,实线箭头表示继承关系。

2025-10-14 16:28:46 337

原创 Java代理模式

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

2025-09-23 10:30:48 306

原创 观察者模式

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

2025-09-19 12:47:25 230

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

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

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

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

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

2025-09-16 14:07:10 434

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

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

2025-09-16 14:00:21 260

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

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

2025-09-16 13:55:45 335

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

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

2025-09-16 13:52:23 434

原创 java类冲突

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

2025-09-12 19:59:19 878

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

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

2025-09-11 10:48:17 327

原创 java ClassLoader

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

2025-09-11 10:43:18 733

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

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

2025-09-11 10:39:18 938

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

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

2025-09-11 10:19:46 343

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

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

2025-09-10 17:14:13 333

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

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

2025-09-10 10:19:09 316

原创 读懂mvn dependency:tree

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

2025-09-09 20:41:16 610

原创 java的“error”和“exception”

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

2025-09-09 17:18:50 191

原创 Google Guice requestStaticInjection

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

2025-09-08 11:40:31 159

原创 Google Guice MapBinder 多重绑定

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

2025-09-08 11:33:20 339

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

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

2025-09-08 11:06:13 269

原创 Google Guice介绍

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

2025-09-08 11:02:33 994

原创 isAssignableFrom() vs instanceof

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

2025-09-06 19:31:29 407

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

n$i$i。

2025-09-05 10:44:40 438

原创 JVM 的 C1/C2 编译器

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

2025-09-03 18:42:26 861

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

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

2025-08-26 15:41:09 306

原创 offload什么意思

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

2025-08-25 11:37:08 356

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

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

2025-08-25 11:19:58 863

原创 网络抓包常用命令

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

2025-08-22 11:02:26 469

原创 网络抓包介绍

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

2025-08-22 10:29:56 401

原创 Maven 的 module 管理

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

2025-08-11 11:37:30 1018

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

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

2025-08-06 18:49:07 400

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

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

2025-08-05 17:06:08 377

Introduction+to+Algorithms.pdf

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

2019-07-29

空空如也

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

TA关注的人

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