自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Google Guice MapBinder 多重绑定

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

2025-09-08 11:33:20 366

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

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

2025-09-08 11:06:13 305

原创 Google Guice介绍

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

2025-09-08 11:02:33 1037

原创 isAssignableFrom() vs instanceof

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

2025-09-06 19:31:29 433

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

n$i$i。

2025-09-05 10:44:40 457

原创 JVM 的 C1/C2 编译器

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

2025-09-03 18:42:26 920

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

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

2025-08-26 15:41:09 333

原创 offload什么意思

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

2025-08-25 11:37:08 491

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

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

2025-08-25 11:19:58 1073

原创 网络抓包常用命令

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

2025-08-22 11:02:26 540

原创 网络抓包介绍

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

2025-08-22 10:29:56 421

原创 Maven 的 module 管理

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

2025-08-11 11:37:30 1137

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

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

2025-08-06 18:49:07 423

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

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

2025-08-05 17:06:08 397

原创 DNS缓存

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

2025-05-29 14:17:04 1223

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

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

2025-01-11 08:19:49 1859

原创 Java NIO、AIO分析

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

2025-01-06 15:45:01 1248

原创 java IO 与 BIO、NIO、AIO

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

2025-01-06 14:18:35 966

原创 java instanceof

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

2025-01-01 08:42:28 2588

原创 Comparator 示例

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

2025-01-01 08:41:41 462

原创 java isAssignableFrom 使用示例

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

2024-12-31 17:47:42 1192

原创 java isAssignableFrom

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

2024-12-31 17:46:31 2207

原创 Socket、HTTP 和 gRPC

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

2024-12-30 14:20:49 1436

原创 Java Socket

Java 的 Socket 编程为开发网络应用提供了强大的基础设施。通过理解基本概念、掌握核心类和实现客户端与服务器的通信,可以构建各种基于网络的应用程序。在实际开发中,还需考虑性能优化、安全性以及使用更高级的网络框架,以满足复杂的应用需求。

2024-12-30 10:12:49 1160

原创 以太网(Ethernet)和无线局域网(Wireless Local Area Network, WLAN)

以太网是一种广泛使用的局域网(LAN)技术,用于在局域网内部连接多台计算机和设备,实现数据包的交换与通信。它由Xerox公司在1970年代初期开发,并由IEEE制定为标准(IEEE 802.3)。无线局域网是一种通过无线通信技术在有限区域内连接多台设备的网络。最常见的WLAN标准是IEEE 802.11系列,通常被称为Wi-Fi。以太网和无线局域网各有其独特的优势和适用场景。以太网凭借其高带宽、低延迟和高可靠性,适合对网络性能要求较高的固定环境,如企业内部网络和数据中心。

2024-12-28 21:09:03 2789

原创 以太网(Ethernet)与互联网(Internet)

以太网是一种局域网(LAN)技术,主要用于在有限的地理范围内(如家庭、办公室或校园)连接多台设备,实现数据的有线传输与通信。它定义了数据帧的格式、传输速率、物理介质等技术规范。以太网主要负责局域网内部的有线数据传输,为设备间提供高效、稳定的通信基础。互联网则提供全球范围内的网络互联,使得不同局域网之间能够实现信息的无缝传递与资源共享。两者的结合不仅满足了本地高效通信的需求,也实现了全球信息互联的目标,是现代信息社会不可或缺的基础设施。

2024-12-28 21:08:14 2095

原创 TCP的三次握手与四次挥手

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在计算机网络中,TCP协议负责在两台计算机之间建立可靠的通信连接。深入理解TCP协议的三次握手和四次挥手,对于网络编程、协议分析和网络性能优化都有重要的意义。它体现了TCP协议在可靠性、连接管理和资源利用方面的设计思想。在实际应用中,正确处理连接的建立和终止,可以有效提升网络应用的稳定性和效率。三次握手涉及客户端(Client)和服务器(Server)之间的三次交互。

2024-12-28 20:39:50 910

原创 CDN如何抵御DDoS攻击

DDoS攻击是对网络服务可用性的一大威胁,而CDN通过其分布式架构、强大的带宽储备、智能的调度策略以及先进的安全防护技术,能够有效地抵御各种类型的DDoS攻击,保障网站和应用的稳定运行。攻击者通过控制大量分布在全球各地的受感染设备(称为“僵尸网络”),同时向目标服务器发送大量的请求或数据包,导致目标服务器的资源(如带宽、CPU、内存等)被耗尽,无法正常响应合法用户的请求,从而使服务中断或性能严重下降。:当某个节点受到攻击或者出现故障时,CDN的调度系统会自动将流量切换到其他健康的节点,保障服务的连续性。

2024-12-28 20:33:25 1119

原创 CDN(Content Delivery Network,内容分发网络)

CDN(Content Delivery Network,内容分发网络)是一种通过在网络中部署分布式的服务器集群,将网站内容分发到最接近用户的服务器节点,以提高用户访问速度和稳定性的重要网络基础设施。CDN作为互联网的关键基础设施,极大地改善了用户的访问体验,提高了网络资源的利用效率。随着技术的不断发展,CDN正从简单的内容分发向综合性的边缘服务平台演进,融合了计算、存储和网络能力,为各行各业的数字化转型提供了有力支撑。:用户的请求被路由到最近的CDN节点,节点服务器直接响应用户请求,提供所需的缓存内容。

2024-12-28 20:30:01 1238

原创 统计某个文件中某个字符串出现的次数

假设要统计文件中字符串error使用grep和wc使用awk根据具体需求和环境选择合适的方法即可高效地统计字符串出现的次数。

2024-12-23 20:13:17 1764

原创 Google 的 Protocol Buffers

Protocol Buffers 是由 Google 开发的一种语言中立、平台中立、可扩展的序列化机制。其设计目标是提供比 XML 和 JSON 更高效的性能和更小的序列化数据体积。Protobuf 通过定义.proto文件来描述数据结构,然后生成相应语言的代码以实现数据的序列化和反序列化。在 Protobuf 中,数据结构通过.proto文件进行描述。:定义了一个字符串类型的字段name,标签号为 1。:定义了一个 32 位整数类型的字段id,标签号为 2。:定义了一个字符串类型的字段。

2024-12-23 17:24:58 848

原创 排序-冒泡排序

有时数组的后部分可能已经有序,但前面还未完全排序。可以记录每轮遍历中最后一次交换的位置,这样在下一轮遍历时只需遍历到该位置即可,无需遍历整个数组。实现方法引入一个变量,记录最后一次交换的位置。在下一轮遍历时,只需遍历到之前的位置。示例代码int newn;newn = n;i++) {// 交换 arr[i] 和 arr[i + 1]冒泡排序是一种简单直观的排序算法,通过重复比较和交换相邻元素,将较大的元素逐步“冒泡”到数组的末端。

2024-12-23 10:19:42 1248

原创 TCP 与 UDP

头部信息较多,包括源端口、目的端口、序列号、确认号、窗口大小、校验和、紧急指针等,通常头部长度为20字节或更多。适用于需要高可靠性、数据完整性和顺序的应用,如网页浏览、文件传输、电子邮件等。其丰富的控制机制确保数据的准确传输,但也带来了额外的开销和较高的延迟。:许多应用层协议(如HTTP、FTP、SMTP等)依赖于TCP提供的可靠传输和数据流控制,以确保数据的完整性和一致性。在选择使用TCP还是UDP时,应根据具体应用的需求权衡可靠性、实时性和资源消耗等因素,以选择最合适的传输协议。

2024-12-21 18:20:12 1289

原创 快速排序算法

*快速排序(Quick Sort)**是一种基于分治法的高效排序算法,由C. A. R. Hoare于1960年提出。它的平均时间复杂度为O(n log n),在实际应用中,由于其优秀的性能和较高的效率,被认为是排序算法中的佼佼者。希望以上内容能够帮助您深入理解快速排序算法及其在力扣题目中的应用。如有疑问,欢迎继续提问!在LeetCode上,有多道题目涉及到快速排序或其应用。依此类推,最终序列有序。

2024-12-20 20:00:48 1862

原创 Comparator接口分析

是Java提供的一个函数式接口,用于定义自定义的比较规则。它主要用于对对象进行排序,特别是在元素的自然顺序不满足需求时。方法的工作原理,我们可以灵活地控制排序顺序,满足各种复杂的排序需求。,并返回一个整数,表示它们的相对顺序。方法,它按照字典顺序比较两个字符串。将两个字符串以不同顺序拼接。:按照从小到大的顺序排列。:按照从大到小的顺序排列。这与之前的比较器逻辑相同。

2024-12-20 10:23:23 558

原创 Comparator和Comparable

都是Java中用于对象排序的接口,它们各有优劣,适用于不同的场景。理解它们的区别和使用方法,对于编写清晰、高效的排序代码至关重要。在实际开发中,应根据具体需求选择合适的接口,实现所需的排序逻辑。都是用于排序的接口。它们提供了自定义对象排序的机制,但实现方式和使用场景有所不同。的区别与联系有所帮助。希望以上内容对您理解。

2024-12-20 10:21:44 776

原创 java上下文切换

它需要CPU停止当前进程的执行,保存状态,然后加载另一个进程的状态。恢复另一个任务的状态:操作系统接下来会选择另一个进程(或线程)执行,并加载该进程之前保存的执行上下文到CPU中,包括之前保存的程序计数器、寄存器值等。保存当前任务的状态:当操作系统决定将CPU从当前执行的进程(或线程)转移到另一个进程时,它首先需要保存当前进程的状态,包括程序计数器、寄存器值、内存状态等。继续执行新任务:一旦新的执行上下文被加载,操作系统就会开始执行新的进程(或线程),直到再次发生上下文切换或该进程完成其任务。

2024-08-05 18:26:46 596

原创 arthas的tt命令

tt命令是 Arthas 的“时间隧道”功能,它可以记录指定方法的调用情况,并允许你对这些调用进行回放、查询和分析。这个功能非常强大,因为它能够帮助你理解过去发生的方法调用情况,这对于复现和定位历史问题非常有用。

2024-08-05 18:02:01 1866

原创 arthas的这些命令:watch、trace、monitor、stack、tt,有什么区别

watch:适用于实时监控方法的运行状态。trace:适用于分析方法调用链和性能问题。monitor:适用于周期性的方法调用统计。stack:适用于查看特定方法的调用堆栈。tt:适用于记录和分析方法的历史调用信息。在实际使用过程中,这些命令可以根据具体的诊断需求和场景相互配合,以达到最佳的诊断效果。

2024-08-05 17:20:24 1503

原创 arthas的trace命令

Arthas 是阿里巴巴开源的 Java 诊断工具,它主要用来对 Java 应用的运行时信息进行监控和跟踪。trace命令是 Arthas 中非常强大的一个功能,它可以追踪方法的内部调用路径,并输出方法的调用树,同时展示每个方法的调用耗时,非常适用于定位复杂的性能问题。

2024-08-05 17:15:45 4928

Introduction+to+Algorithms.pdf

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

2019-07-29

空空如也

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

TA关注的人

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