- 博客(214)
- 资源 (1)
- 收藏
- 关注
原创 git stash用法
提交一致),以便切换分支或执行其他操作。其本质是将修改存储为一个“储藏栈”(Stack),遵循后进先出(LIFO)原则。是高效管理临时修改的利器,尤其适合多任务切换场景。每个 stash 记录包含分支名、提交哈希和描述。(未提交的变更),使工作区恢复到干净状态(与。若恢复时发生冲突,需手动解决(类似合并冲突)。适用于解决 stash 与当前分支的冲突。:默认不保存未跟踪文件和忽略文件。
2025-11-22 08:29:53
372
原创 主从合并是什么
主从合并的具体含义要结合上下文来看,大多数情况下指的是将从分支的内容合并到主分支,或者将主分支的内容合并到从分支,以保证代码或数据的一致性和完整性。
2025-11-17 13:41:54
311
原创 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
原创 如何判断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
原创 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
原创 JVM 的 C1/C2 编译器
JVM 的 C1/C2 编译器负责将热点代码编译为高效机器码,提升 Java 程序性能。编译阈值 CompileThreshold 控制方法被编译的时机,影响启动速度与运行效率。分层编译机制结合了 C1 快速启动和 C2 高性能的优势,是现代 JVM 的默认模式。通过合理调节相关参数,可以根据应用场景优化 JVM 性能。如需针对实际项目给出具体调优方案,或更深入了解 JVM 内部机制,欢迎继续提问!
2025-09-03 18:42:26
861
原创 为什么计算机储存单位的进率是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
2019-07-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅