自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(107)
  • 收藏
  • 关注

原创 DNS 基于什么协议实现?UDP 还是 TCP?

UDP负责快速查询,适合常规的小数据包传输。TCP负责可靠传输,适合大数据包和区域传输。因此,DNS 是UDP 和 TCP 协议的结合体,共同保证了域名解析的效率与可靠性。

2025-03-16 13:53:02 439

原创 如何判断链表是否有环?(Floyd 判圈算法/快慢指针)

快慢指针法(Floyd 判圈算法)🚀。会访问空指针,导致程序崩溃。如果链表有环,我们可以找到。在使用快慢指针时,一定要。判断链表是否有环时,

2025-03-12 13:16:15 415

原创 Hash 冲突(哈希碰撞)

发生在两个或多个不同的 Key。不使用链表,而是在 Hash 表中。步长是平方关系,避免数据过度聚集。继续寻找空槽位,直到找到空位。数据库索引(如 B+ 树)使用。,在 JDK 8 之后优化为。重新计算索引,直到找到空槽。:相同哈希值的 Key 以。计算两个哈希值,减少冲突。存储在同一个数组槽位上。链表,时间复杂度接近。

2025-03-12 13:12:51 813

原创 【无标题】

b代表10亿参数量,7b就是70亿参数量。这里的671B是HuggingFace经过4-bit标准量化的,所以大小是404GB。模型默认会下载到C:\Users\你的用户名\.ollama目录下的models文件夹中。CherryStudio的下载地址:https://cherry-ai.com/如果你想运行404GB的671B,建议你的内存+显存能达到500GB以上。下载完成后,自动进入模型,直接在命令行输入问题,即可得到回复。**注意:**使用时要确保ollama客户端已启动。我这里选择下载7B版本。

2025-03-12 12:57:24 240

原创 高效消息传递:RabbitMQ 的工作原理与使用技巧(4)

总结:如果消费者处理消息时,因为代码原因抛出异常是需要从新发布版本才能解决的,那么就不需要重试,重试也解决不了该问题的。消息中间件因为某种原因拒收该消息后,可以转移到死信队列中存放,死信队列也可以有交换机和路由key等。2.如果生产者投递消息到普通队列中,普通队列发现该消息一直没有被消费者消费。的情况下,在这时候会将该消息转移到死信(备胎)交换机中,死信(备胎)交换机。采用死信队列,创建一个普通队列没有对应的消费者消费消息,在30分钟过后。该情况下是不需要实现重试策略,就算重试多次,最终还是失败的。

2025-03-07 17:29:21 838

原创 高效消息传递:RabbitMQ 的工作原理与使用技巧(3)

消息不丢失可以分为三个方面进行保障:**生产者投递消息**、**消费者消费消息** 和 **MQ 服务器持久化**。

2025-03-07 17:28:32 902

原创 高效消息传递:RabbitMQ 的工作原理与使用技巧(2)

*消息中间件** 是一种基于消息队列模型的工具,用于在不同服务之间传输数据。它能够有效缓解高并发场景下的压力,通过异步通信实现系统解耦、削峰降负,并降低系统模块之间的耦合度。#### 消息中间件的作用:1. **支撑高并发**:通过消息队列缓解短期内的流量高峰。2. **异步解耦**:将耗时的任务异步化,避免主线程阻塞。3. **流量削峰**:当流量突然增加时,通过排队机制分批处理请求,避免系统崩溃。4. **降低耦合**:使各个模块或服务之间解耦,提高系统扩展性。

2025-03-07 17:28:02 849

原创 高效消息传递:RabbitMQ 的工作原理与使用技巧(1)

RabbitMQ 是一款功能强大、性能卓越的消息中间件,广泛应用于异步通信和高并发处理场景。通过使用 RabbitMQ,开发者可以构建更加灵活、可靠的分布式系统。本篇博客详细介绍了。

2025-03-07 17:26:35 712

原创 一文看懂 Docker:容器化技术的核心与应用

1.Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。2. Docker的主要目标是‘build ,ship and run any app,anywhere’,也就是说通过对应用程序组件的封装,分发,部署,运行等生命周期的管理。使用户的app(可以是一个web应用程序或者数据库应用等)

2025-03-07 17:24:15 786

原创 TCP与UDP协议的区别:哪种适合你的应用?

在数据传输过程中,TCP与UDP各自有不同的特点和优势。TCP注重。

2025-03-07 17:11:22 592

原创 “解密网络传输的核心:OSI与TCP/IP模型的层次与协议解析“

上面我们对计算机网络的五层体系结构有了初步的了解,下面附送一张七层体系结构图总结一下七层体系结构图。

2025-03-07 17:09:38 587

原创 单点登录(SSO)全面解析与实战

单点登录(Single Sign-On,简称 SSO)是一种身份认证方式,允许用户在多个应用系统之间只需登录一次,即可访问所有受信任的应用,而无需在每个应用中重复输入用户名和密码。方案适用场景适用于小型企业、同域系统间的 SSO。JWT 无状态认证适用于微服务架构,无需存储 Session。适用于企业级 SSO,支持多协议集成。SSO 作为现代身份认证的重要技术,能够提升系统安全性、用户体验,并降低维护成本。

2025-03-07 17:03:34 971

原创 SYN 洪泛攻击(SYN Flood Attack)解析

SYN 洪泛攻击是一种常见的 DoS 攻击方式,利用 TCP 三次握手的漏洞,消耗服务器资源,影响正常用户访问。为了防止此类攻击,我们可以采用 SYN Cookies、防火墙策略、增加队列容量等方法来缓解攻击影响。通过合理的配置和安全防护,能够有效降低 SYN 洪泛攻击的威胁,保障服务器的稳定运行。

2025-03-04 22:08:33 313

原创 TCP 链接异常检测与故障排查 —— 从异常包分析到优化措施

重传包:提示网络拥塞或链路质量问题,可能需要调整 TCP 参数或硬件升级。重复 ACK:反映丢包或乱序问题,需关注网络链路和数据包分片情况。RST 包:可能由应用异常、网络设备安全策略或恶意攻击引起,需综合检查日志和设备配置。FIN 包与 TIME_WAIT:短连接频繁导致资源占用问题,通过长连接、连接池及操作系统优化参数解决。

2025-03-03 14:39:13 533

原创 深入解析 TCP 的三次握手与四次挥手 —— 连接建立、断开与2MSL等待机制详解

报文在网络中可能存活的最长时间,一般取值为 2 分钟(各系统可能略有不同)。双向确认:确保客户端与服务器双方都知道对方已准备好通信,并同步初始序列号,为后续数据传输提供顺序保证。容错性:多次消息交互能够应对报文丢失、重传等异常情况,保障连接建立的可靠性。TCP 协议的三次握手与四次挥手设计,是确保数据传输可靠性与连接管理稳健性的关键机制。三次握手通过多次确认建立双向可靠通信,四次挥手则实现全双工连接的安全断开,而 2MSL 的等待确保了旧报文不会干扰新连接。

2025-03-03 14:37:15 471

原创 ZooKeeper 分布式锁详解 —— 从原理、设计到实战优化

ZooKeeper 分布式锁通过临时顺序节点和 Watcher 机制实现了对共享资源的互斥访问。它利用 ZooKeeper 的强一致性、自动删除临时节点和顺序节点特性,使得锁的创建、竞争和释放变得简单而高效。尽管实现过程中需要处理竞态、锁重入和性能瓶颈等问题,但通过合理的设计和工具(如 Curator),可以构建出健壮的分布式锁解决方案,为分布式系统提供可靠的协调机制。

2025-03-03 14:30:17 801

原创 访问网址流程

从用户输入浏览器解析 URL,检查本地缓存和 Hosts 文件。通过 DNS 解析获取域名对应的 IP 地址。建立 TCP 连接并完成 TLS 握手,确保安全传输。发送 HTTP 请求,服务器处理并返回响应。浏览器接收响应,解析 HTML、加载资源,并渲染最终页面。这些环节各自涉及网络协议、缓存策略、安全验证和页面渲染技术,构成了现代 Web 应用高效且安全的基础。理解整个过程不仅有助于调试和优化网络性能,还能帮助开发者设计更优的前端架构。

2025-03-03 11:25:30 684

原创 DNS解析全流程详解 —— 从客户端到权威服务器的完整路径

A记录:IPv4 地址映射。AAAA记录:IPv6 地址映射。CNAME记录:别名记录,将一个域名映射为另一个域名。MX记录:邮件交换记录,用于邮件服务器定位。NS记录:指定域名服务器。DNS 解析流程贯穿于互联网通信的每个环节,从本地缓存、操作系统和 hosts 文件,到递归查询本地 DNS 解析器,再到根、TLD 和权威服务器,构成了一条复杂而高效的数据查询链路。通过理解缓存机制、查询协议以及安全扩展,我们可以更好地优化网络访问速度、提高系统安全性,并为问题排查提供有效手段。

2025-03-03 11:23:46 734

原创 JVM 垃圾回收机制与核心算法全解析 —— 从原理到调优实战

本文从内存模型、对象存活判定、核心回收算法到主流垃圾收集器的深度解析,以及具体的调优实践,全面介绍了 JVM 垃圾回收机制的原理与实战技巧。掌握这些内容对于构建高可用、低延迟的 Java 应用至关重要。阅读《深入理解 Java 虚拟机》第 3-6 章,理解 JVM 内存结构与 GC 原理。查阅 Oracle 和各大厂商的 GC 调优白皮书。实践调优:通过 GC 日志分析工具(如 GCViewer、GCeasy)监控和优化实际项目中的内存使用。

2025-03-02 12:44:32 520

原创 JVM 内存揭秘:深入解析运行时数据区域与调优实践

程序计数器(Program Counter Register)虚拟机栈(VM Stack)本地方法栈(Native Method Stack)Java 堆(Heap)方法区(Method Area)(在 JDK 8 及之后版本中,方法区已被元空间(Metaspace)取代)运行时常量池(Runtime Constant Pool)(属于方法区的一部分)直接内存(Direct Memory)(非 JVM 内存,但常由 JVM 管理)下文将对每个区域进行详细介绍。

2025-03-02 12:29:44 848

原创 枚举之道:探秘 Java 枚举的艺术与实践

这种方法在功能上与公有域方法相近,但是它更加简洁,无偿提供了序列化机制,绝对防止多次实例化,即使是在面对复杂序列化或者反射攻击的时候。《Java与模式》中,作者这样写道,使用枚举来实现单实例控制会更加简洁,而且无偿地提供了序列化机制,并由JVM从根本上提供保障,绝对防止多次实例化,是更简洁、高效、安全的实现单例的方式。使用枚举,可以轻松完成此任务,添加新的实现意味着只定义具有某个实现的另一个实例。它提供了类型安全的替代方法,以替代传统的基于int的“位标志”,使我们能够编写更易读和易于维护的简洁代码。

2025-03-02 12:27:23 493

原创 深入解析 Java 反射机制 —— 理论、原理、示例与实践

反射的灵活性:反射允许在运行时动态获取类信息和调用方法,大大提高了程序的动态性和扩展性,是许多框架和插件机制的基础。性能与安全问题:反射操作相对于直接调用性能较低,且可能破坏封装性,因此应谨慎使用。通过缓存反射对象和在必要时使用动态代理,可以部分缓解性能问题。实际应用:反射在 JDBC、Spring IoC、AOP、插件系统等场景中得到了广泛应用,极大提高了系统的灵活性和解耦性。

2025-03-02 12:25:55 1045

原创 深入解析 Session、Cookie 与 Token —— 理论、实践与案例

特性CookieSession存储位置客户端(浏览器)服务器(通常结合 Cookie 存储 SessionID)客户端(LocalStorage、Cookie等)状态管理依赖浏览器自动携带,适合简单状态服务器维护,适合大量复杂数据无状态,自包含信息,服务器无需存储安全性容易受到 XSS/CSRF 攻击,需设置 HttpOnly数据存储在服务器,安全性较高安全性依赖签名和加密,一旦泄露风险较高扩展性适合单一域名分布式系统需要 Session 共享机制高,适合分布式和微服务架构。

2025-03-02 12:21:51 966

原创 线程池的用法是什么?

当一个新任务交给线程池,如果此时线程池中有空闲的线程,就会直接执行,如果没有空闲的线程且当前线程池的线程数量小于corePoolSize,就会创建新的线程来执行任务,否则就会将该任务加入到阻塞队列中,如果阻塞队列满了,就会创建一个新线程,从阻塞队列头部取出一个任务来执行,并将新任务加入到阻塞队列末尾。CallerRunsPolicy,使用线程池的调用者所在的线程去执行被拒绝的任务,除非线程池被停止或者线程池的任务队列已有空缺。当没有空闲的线程执行新任务时,该任务就会被放入工作队列中,等待执行。

2025-02-28 21:05:31 384

原创 链表转换红黑树临界值为8

设计选择原因树化阈值 = 8链表长度超过 8 的概率极低,红黑树在此场景下能显著提升性能。退化阈值 = 6提供缓冲区,避免频繁树化和退化操作。不选 6/7/9平衡内存占用、性能抖动和极端场景的兜底需求。这一设计体现了工程思维中的“帕累托最优”——在绝大多数场景下保持高效,同时对极端情况提供可控的优化。

2025-02-28 21:03:37 764

原创 hashmap的实现原理是什么?

如果多个键映射到同一个槽位,它们会以链表的形式存储在同一个槽位上,因为链表的查询时间是O(n),所以冲突很严重,一个索引上的链表非常长,效率就很低了。,查找时使用红黑树,时间复杂度O(log n),可以提高查询性能,但是在数量较少时,即数量小于6时,会将红黑树转换回链表。版本的时候做了优化,当一个链表的长度超过8的时候就转换数据结构,不再使用链表存储,而是使用。

2025-02-28 20:53:25 187

原创 mysql mvcc的具体实现原理是什么?(2)

对于「读提交」和「可重复读」隔离级别的事务来说,它们是通过 Read View 来实现的,它们的区别在于创建 Read View 的时机不同,大家可以把 Read View 理解成一个数据快照,就像相机拍照那样,定格某一时刻的风景。如果记录的 trx_id 值大于等于 Read View 中的 max_trx_id 值,表示这个版本的记录是在创建 Read View。如果记录的 trx_id 值小于 Read View 中的 min_trx_id 值,表示这个版本的记录是在创建 Read View。

2025-02-28 20:48:16 349

原创 mysql mvcc的具体实现原理是什么?(面经)

InnoDB 中的。

2025-02-28 20:46:33 483

原创 redis 的 zse t底层实现是什么?追问:为什么用跳表?追问:是不是一定用跳表?(面经)

在这种情况下,ZSet 的元素按分数从小到大排序,压缩列表中的每个节点包含元素值和对应的分数。:当 ZSet 中的元素数量较多,或者每个元素的字符串长度较长时,Redis 会选择使用跳跃表和字典的组合来实现 ZSet。这种设计使得 Redis 在处理不同规模和类型的数据时,能够根据实际情况选择最合适的底层数据结构,从而在性能和内存占用之间取得良好的平衡。:当有序集合的元素数量较多,或者每个元素的长度较大时,Redis 会使用跳跃表和字典的组合来实现 ZSet。

2025-02-28 20:43:14 368

原创 mysql为啥不用b树和红黑树?(面经)

MySQL 在选择索引结构时,通常使用的是而不是或。这是因为不同的树结构有不同的特点,B+ 树更适合数据库的需求,特别是在大规模数据查询、插入、删除等操作中。下面详细分析为什么 MySQL 选择而不是或。

2025-02-28 20:40:22 494

原创 springboot和springmvc的区别是什么?(面经)

Spring MVC定义:Spring MVC(Model-View-Controller)是 Spring 框架中的一个 Web 模块,主要用于构建基于 Servlet 的 Web 应用程序。它实现了 MVC 模式,通过控制器(Controller)来处理用户请求,视图(View)来呈现数据,模型(Model)来传递数据。目标:Spring MVC 提供了 Web 应用程序的结构化方法,使得开发者可以灵活地处理 HTTP 请求、响应和视图渲染等工作。定义。

2025-02-28 20:38:53 668

原创 Java内存泄漏与优化:深入分析垃圾回收与内存管理

内存泄漏是指程序中不再使用的对象占用了内存,但由于某些原因,垃圾回收器无法识别它们为“垃圾”并回收它们。这样,这些无用的对象就会一直占用内存,导致内存的浪费,最终可能引发OutOfMemoryError。Java的垃圾回收机制虽然大大简化了内存管理,但内存泄漏问题依然存在,特别是在复杂的应用程序中。理解内存泄漏的成因、有效地检测和诊断泄漏问题,以及采取合理的优化措施,是每个开发者必须掌握的技能。通过合理配置垃圾回收器、使用引用类型、清理资源等手段,我们可以有效避免内存泄漏,提升应用程序的性能和稳定性。

2025-02-28 20:37:08 616

原创 Java垃圾回收机制(GC)的原理与优化技巧

Java的垃圾回收机制大大简化了内存管理,但在高性能应用中,GC的影响不可忽视。通过理解GC的原理、选择合适的垃圾回收器、合理配置堆内存、优化对象生命周期等手段,我们可以提高应用的性能,减少GC带来的负面影响。掌握GC的优化技巧,是每个Java开发者提升性能的关键一步。

2025-02-28 20:36:03 781

原创 深度剖析Java内存模型:堆与栈的关系与区别

Java程序的内存分配遵循Java内存模型(JMM)。JMM定义了线程与内存之间的交互规则,保证多线程环境下的可见性、原子性和有序性。在运行时,Java虚拟机将内存划分为多个区域,主要包括堆(Heap)、栈(Stack)、方法区(Method Area)、本地方法栈(Native Method Stack)和程序计数器(PC Register)。其中,堆和栈是最常讨论的内存区域。理解它们的区别,有助于我们更好地理解Java的内存管理机制。

2025-02-28 20:32:35 431

原创 Java异常处理的误区与进阶技巧

在大型项目中,可能会涉及多个不同类型的业务异常。为了让异常处理更加清晰和可扩展,可以通过自定义异常的层次结构来组织异常类型。

2025-02-28 15:15:14 701

原创 自定义异常的设计与实践:如何提高代码的可维护性和可读性

在Java中,异常机制可以帮助我们有效地处理错误和异常情况,但Java内置的异常类(如。

2025-02-28 15:13:17 894

原创 “Java面试必看:从基础到进阶的全方位准备指南“(2)

**`String`**:`String`是不可变类,每次对字符串进行修改(如拼接、替换等)都会创建一个新的`String`对象。由于其不可变性,`String`对象在多线程环境下是线程安全的,但性能较差,因为每次修改都需要分配新的内存。- **`StringBuffer`**:`StringBuffer`是可变类,它能够对字符串进行修改而不重新创建对象。它是线程安全的,通过对每个方法的同步来保证线程安全,但同步机制会影响性能。

2025-02-26 11:49:52 571

原创 数据库镜像(Database Mirroring):高可用性与灾难恢复技术

数据库镜像是一种高可用性解决方案,主要通过将主数据库的数据实时复制到一个或多个镜像数据库,以保证主数据库发生故障时,镜像数据库能够快速接管业务请求,保障系统的持续运行。数据库镜像是 SQL Server 提供的一种高可用性与灾难恢复技术,通过实时复制主数据库的数据到镜像数据库,实现数据冗余与业务连续性,有效应对硬件故障、网络中断、自然灾害等突发事件,保障系统稳定运行。通过合理部署数据库镜像,企业可以实现系统的高可用性、数据冗余与灾难恢复,为业务连续性提供有力保障。

2025-02-26 11:49:22 915

原创 Java百万级别数据Excel表导入导出实战

可以通过工具类设置导出Excel的表头样式或数据样式。本文介绍了在Java中处理百万级别数据Excel表的两种常见方案:Apache POI结合SAX解析适合自定义需求强的场景。EasyExcel适合快速实现需求的场景。通过合理使用这些工具并结合性能优化策略,可以高效地完成大数据量的Excel文件处理。此外,结合具体业务需求,我们还可以进一步扩展功能,如支持多Sheet处理、自定义模板、动态样式等,为用户提供更灵活强大的解决方案。

2025-02-26 11:48:34 975

原创 Java IO 概述

IO指的是输入(Input)和输出(Output)操作。它是程序与外部数据交换的桥梁。输入:从外部数据源(如文件、网络、键盘等)读取数据到程序。输出:将数据从程序写入到外部目标(如文件、屏幕、网络等)。在Java中,IO的操作本质是对数据流(Stream)的处理。Java NIO(New IO)是Java 1.4引入的新IO框架,主要特点是基于缓冲区和通道的非阻塞IO。相较于传统IO,它性能更高,适合高并发场景。Java中的IO操作功能强大且灵活,通过合理选择流的类型和实现方式,可以满足各种数据处理需求。

2025-02-26 11:48:00 807

空空如也

空空如也

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

TA关注的人

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