- 博客(73)
- 问答 (5)
- 收藏
- 关注
原创 让大模型的响应时间从5秒降至0.1秒?解决性能瓶颈的秘密就在这里
《分布式系统性能优化:方法与实践》是一本面向AI时代的实战指南,针对大语言模型应用中的延迟与成本问题,提出系统化性能优化方案。书中重点介绍了语义缓存技术(可实现0.1秒内响应)等创新方法,通过20+工业案例覆盖架构设计、网络传输、缓存策略等6大核心领域,特别包含RAG系统、Agent系统等前沿场景优化。作者团队凝聚30年经验,构建了"多快好省"的四维指标体系,帮助开发者从救火式调优转向体系化建设。该书已获多位一线架构师推荐,在当当、京东有售。
2025-12-25 15:10:13
591
1
原创 0基础玩转腾讯元宝!这本全场景指南,让AI成为你的效率神器
《腾讯元宝从入门到精通》是一本AI实战指南,由资深专家谢磊编写,帮助普通人轻松掌握腾讯元宝的运用。书中涵盖工作、学习、生活的100多个高频场景,提供1000+提示词模板和实操案例,零基础也能快速上手。通过本书,读者可3分钟生成PPT、优化论文写作、规划生活事务等,显著提升效率。本书不仅教授工具使用,更培养AI思维,是AI时代提升个人价值的实用手册。现已在京东平台发售。
2025-11-05 09:30:33
4402
3
原创 Tomcat
本文介绍了服务器的基本概念,包括硬件服务器(提供硬件支持)和软件服务器(用于项目部署)。重点讲解了Tomcat服务器的目录结构、基本使用方法和常见启动问题解决方案。详细说明了war包发布流程和虚拟目录的两种配置方式(修改server.xml或独立配置文件),以及如何配置虚拟主机。内容涵盖Tomcat的启动/停止操作、端口冲突处理、异常排查等实用技术要点。
2025-10-24 10:09:33
438
3
原创 豆瓣9.3,100%好评!这本经典技术书,凭什么能“封神”20余年
《编码》第2版重磅上市:AI时代程序员必备的底层逻辑指南 在技术快速迭代的今天,《编码》这本经典著作仍占据计算机图书热销榜,豆瓣评分高达9.3。本书从手电筒通信讲起,通过摩斯电码、逻辑门等生动案例,完整揭示计算机从硬件到软件的运行原理。第2版新增二维码等现代技术案例,并优化CPU工作原理的讲解。 该书独特价值在于: 为初学者构建计算机系统认知框架 帮助开发者深入理解AI等技术的底层逻辑 提供软硬件结合的"第一性原理"思维
2025-10-24 10:06:08
1717
原创 JavaWEB响应对象详解
文章摘要: 本文介绍了JavaWeb中的响应对象(HttpServletResponse)及其使用方法。主要内容包括:1)响应对象概述,区分协议无关和协议相关的响应接口;2)常用响应方法及状态码含义;3)通过示例演示字节流和字符流输出中文时的乱码问题及解决方案;4)验证码生成示例。重点讲解了设置响应编码的四种方法,推荐使用setContentType()统一字符集,解决中文乱码问题。响应对象由Tomcat提供实现,开发时直接使用即可。
2025-10-17 09:31:53
983
3
原创 JavaWEB请求对象详解
本文介绍了JavaEE中请求对象(ServletRequest和HttpServletRequest)的基本概念、常用方法及使用示例。主要内容包括:请求对象概述及其在B/S架构中的作用;常用方法如获取服务器/客户端路径信息、请求头信息;以及获取请求参数的三种方式(getParameter、getParameterValues、getParameterNames)。文中提供了多个代码示例,如获取路径信息、请求头信息以及处理表单参数等,并展示了如何将请求参数封装到实体类中。这些方法在实际Web开发中常用于处理H
2025-10-17 09:29:55
819
1
原创 HTTP 响应码
HTTP状态码是服务器响应客户端请求时返回的三位数字代码,用于快速传达请求处理结果。状态码分为五类:1xx(信息性)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误),帮助客户端判断请求状态并决定下一步操作。常见状态码如200(成功)、404(资源不存在)、500(服务器错误)等,不仅标准化了通信流程,还辅助开发调试和系统监控。状态码是网络交互中高效、通用的"状态报告"机制。
2025-10-16 09:52:28
893
原创 HTTP 协议
HTTP协议是超文本传输协议,由W3C管理维护,采用客户端-服务器问答机制。主要包含请求报文和响应报文两种形式,当前主流版本为HTTP1.1,相比1.0版本增加了消息头并优化了连接机制(1.0每次请求需新建/关闭连接,1.1支持持久连接)。协议结构分为请求部分(请求行、消息头、正文)和响应部分(响应行、消息头、正文),浏览器遇到特定标签(如<script>)时会自动发送请求。
2025-10-16 09:45:34
1423
13
原创 JVM - 内存泄露与内存溢出
本文介绍了内存溢出(OOM)和内存泄漏的概念及成因。内存溢出通常由于堆内存不足或创建大量无法回收的大对象导致,JVM会尝试GC但并非总能解决。内存泄漏指对象不再使用却无法被回收的情况,包括静态集合、单例模式、未关闭连接等8种常见场景。两者都会最终导致程序崩溃,但内存泄漏更具隐蔽性。文章还提供了相关异常信息和解决方案,如调整堆大小、及时释放资源等。
2025-10-14 10:30:09
1037
2
原创 从算筹到卫星导航:这本书藏着人类文明的进化密码
《改变世界的数学》是一本颠覆传统认知的数学科普读物。作者李祥兆博士以5000年数学史为脉络,将高深理论转化为通俗故事,揭示数学如何从远古记数工具发展为推动人类文明进步的核心力量。书中不仅对比东西方数学发展路径,更通过航海应用、CT扫描、DNA研究等现代案例,展现数学在科技中的关键作用。特色章节"数学与航海"详细解析数学如何助力大航海时代,而丰富的趣味故事让抽象理论变得生动易懂。本书适合大学生构建知识体系、教师家长创新教学方式,以及普通读者理解科技背后的数学逻辑。兼具专业性与可读性,是打破
2025-10-14 10:11:14
1180
原创 JVM-垃圾回收
文章摘要: 本文系统介绍了Java垃圾回收机制,重点分析了堆内存的回收管理。首先定义了垃圾对象的概念,解释了不及时回收可能导致内存溢出的问题。然后详细对比了两种垃圾判断算法:引用计数法(存在循环引用缺陷)和可达性分析法(通过GC Roots识别存活对象)。接着阐述了三种垃圾清除算法:标记-清除(产生内存碎片)、复制算法(适合新生代但需双倍空间)和标记-压缩算法(适合老年代整理内存)。文章强调了解垃圾回收原理对排查内存问题的重要性,并指出不同场景需采用不同回收策略,其中复制算法因高效性常用于新生代回收,而标记
2025-09-25 14:43:23
1157
1
原创 JVM-执行引擎
文章摘要 执行引擎是JVM的核心组件,负责将字节码转换为本地机器指令。其工作流程包括:通过PC寄存器获取指令地址,执行后更新下一条指令,并可能访问堆区对象数据。代码从编译到执行分为预处理、编译、汇编、链接四个阶段,最终由操作系统加载到内存,CPU按取指-译码-执行-访存-写回流程运行。不同语言处理方式各异,如解释型语言逐行翻译,JIT动态编译热点代码。这一机制实现了代码的跨平台执行与高效运行。(150字)
2025-09-23 09:00:39
921
3
原创 四、RabbitMQ Work Queues
摘要: 工作队列(任务队列)通过将资源密集型任务封装为消息并发送到队列,实现异步处理。多个工作线程可并行消费队列中的任务。RabbitMQ提供消息应答机制确保消息不丢失,包括自动应答(高风险)和手动应答(推荐)。手动应答支持批量确认(Multiple参数)和消息重新入队功能。文中提供了Java代码示例,展示如何创建生产者、消费者以及实现手动应答机制,确保任务处理的可靠性。关键点包括轮询分发、消息应答模式选择及异常情况下的消息重入队列机制。
2025-09-22 14:49:37
729
原创 大语言模型的微调策略
摘要: 大语言模型(LLM)在特定领域任务中表现有限,需通过微调优化性能。微调策略分为全面微调(调整所有参数,资源消耗大)和参数高效微调(PEFT),后者包括前缀调优、提示调优、LoRA等方法,显著降低计算成本。基于ChatGPT的微调支持API、命令行和UI操作,需准备JSONL格式数据并配置超参数。微调后模型可适配特定任务,部分性能甚至超越GPT-4,适用于个性化需求场景。
2025-09-18 14:10:10
694
1
原创 二、初识 RabbitMQ
RabbitMQ是一个开源的消息代理和队列服务器,核心功能包括接收、存储和转发消息。其核心概念包括生产者(发送消息)、交换机(路由消息)、队列(存储消息)和消费者(接收消息)。RabbitMQ通过Broker管理消息,支持虚拟主机(vhost)实现多租户隔离,使用Connection和Channel优化TCP连接效率,Exchange根据规则分发消息到Queue。安装步骤包括依赖包安装、服务启动及管理插件配置,并提供用户权限管理命令。常用操作涵盖服务启停、用户添加及权限设置等。
2025-09-18 13:58:15
1048
原创 Deepseek+Cherry Studio搭建本地知识库
本文介绍了如何注册华为硅基流动平台并使用其AI模型构建本地知识库。注册后可获14元余额和2000万token配额,创建API密钥后可在Cherry Studio中连接硅基流动模型。详细说明了添加嵌入式模型、创建知识库并上传文档的步骤,以及如何在聊天界面调用知识库问答。作者对比了本地模型与云平台模型的性能差异,推荐使用硅基流动平台+本地知识库的方案。文末附有京东购买链接。
2025-09-17 10:12:18
1313
1
原创 一、消息队列概述
消息队列(MQ)是一种跨进程通信机制,采用FIFO队列存储消息,实现上下游逻辑解耦。主要作用包括流量消峰、应用解耦和异步处理。常见MQ产品有:ActiveMQ(维护较少)、Kafka(高吞吐,适合大数据)、RocketMQ(金融级可靠)和RabbitMQ(高并发易用)。选择依据:大数据场景选Kafka,金融交易选RocketMQ,中小规模选RabbitMQ。
2025-09-17 09:54:48
1087
原创 JVM-对象内存布局
本文摘要介绍了Java对象的实例化过程,包括对象创建的两种方式(new和反射)和六个步骤:类加载检查、内存分配、并发处理、空间初始化、对象头设置和执行init方法。同时分析了对象的内存布局(对象头、实例数据和对齐填充)以及访问定位的两种方式(句柄和直接指针),指出HotSpot采用直接指针访问以提高性能。文章结合字节码指令和内存管理机制,深入解析了Java对象从创建到访问的全过程。
2025-09-16 15:07:16
1107
2
原创 JVM-运行时内存
本文主要介绍了JVM运行时内存结构中的程序计数器和虚拟机栈。程序计数器是线程私有的小型内存区域,用于存储当前线程执行的字节码指令地址,是唯一不会发生内存溢出的区域。虚拟机栈同样为线程私有,采用栈帧结构存储方法调用的数据,包括局部变量表、操作数栈、动态链接、方法返回地址等。局部变量表存储方法参数和局部变量,操作数栈用于执行引擎计算,动态链接将符号引用转为直接引用,方法返回地址记录调用位置。栈大小可通过-Xss参数设置,栈溢出会抛出StackOverFlowError。垃圾回收不涉及虚拟机栈和程序计数器,仅作用
2025-09-16 09:39:12
872
1
原创 JVM-运行时内存-堆
本文主要介绍了JVM堆内存的结构与配置参数。堆内存是JVM管理的核心区域,包含新生代(Eden、Survivor区)和老年代。对象分配遵循特定规则:从Eden区开始,经过多次GC后存活的对象会晋升到老年代。可通过-Xms、-Xmx等参数调整堆大小,-XX:NewRatio设置新生代与老年代比例,-XX:SurvivorRatio调整Eden与Survivor区比例。文章还详细说明了GC触发机制和对象分配过程,包括Minor GC、Major GC和Full GC的区别,以及OOM异常的产生条件。
2025-09-15 14:36:12
817
原创 JVM-运行时内存-虚拟机栈与本地方法栈
本文主要介绍了Java虚拟机栈的结构与工作原理。首先通过对比运行时内存和内存结构图,阐述了"栈管运行,堆管存储"的原则。然后详细解析了栈帧的组成,包括局部变量表(存储方法参数和局部变量)、操作数栈(基于栈的执行引擎工作区)、动态链接(将符号引用转为直接引用)、方法返回地址等核心组件。最后讨论了栈溢出的典型场景(StackOverflowError)、栈大小设置的影响(-Xss参数)、以及栈与垃圾回收的关系(不涉及GC)。文章特别强调,方法内的局部变量若在内部产生和消亡则是线程安全的。整体
2025-09-15 12:40:12
914
1
原创 JVM-运行时内存-程序计数器
程序计数器是JVM中线程私有的小型存储区域,用于记录当前线程执行的字节码指令地址,确保线程切换后能正确恢复执行位置。它通过自动增加指令地址实现顺序执行,通过修改地址实现程序跳转。作为唯一不会出现内存溢出的区域,程序计数器对多线程环境至关重要,每个线程独立拥有自己的计数器以避免执行干扰。这一机制保障了CPU在频繁线程切换时仍能准确维护各线程的执行状态。
2025-09-15 10:22:41
604
原创 CopyOnWrite
Redis和Java的CopyOnWriteArrayList都采用了COW(Copy-on-Write)机制,但实现方式和目的不同。Redis主要利用操作系统的fork()和COW实现RDB持久化和主从复制,通过内存页级的延迟复制保证数据一致性;而Java的CopyOnWriteArrayList在语言层面实现数组复制,确保并发安全。两者都体现了COW的核心思想:以写操作性能为代价换取读操作的高效和安全。Redis巧妙地借助系统级COW机制,使其持久化和复制功能既高效又优雅。
2025-09-14 16:00:00
676
1
原创 JVM-双亲委派机制
双亲委派机制是Java类加载的核心机制,它通过层级委托的方式确保类加载的安全性和唯一性。该机制要求类加载器优先将加载任务委托给父加载器,只有在父加载器无法完成时才自行加载。这种设计避免了类的重复加载,保护了核心API不被篡改,但也存在顶层加载器无法访问底层加载器类的弊端。实践中,双亲委派机制经历了三次主要突破:JDK1.2前的兼容性调整、SPI服务的线程上下文类加载器方案,以及OSGi等模块化热部署需求导致的网状加载结构。这些突破表明,双亲委派虽是推荐模型,但并非强制约束,开发者可根据实际需求灵活调整类加载
2025-09-14 09:30:00
1029
原创 JVM-ClassLoader 源码剖析 与 自定义类加载器
本文深入剖析了ClassLoader的源码结构及其工作机制。首先分析了ClassLoader作为抽象类的基本功能与现有类加载器(如URLClassLoader、ExtClassLoader、AppClassLoader)的继承关系。重点解读了ClassLoader的核心方法如loadClass(实现双亲委派机制)、findClass、defineClass等的工作原理。 文章还对比了Class.forName()与ClassLoader.loadClass()在类初始化时序上的关键差异。最后探讨了自定义类加
2025-09-13 13:30:00
682
原创 JVM-类的加载器分类与测试
本文介绍了Java虚拟机中的类加载器体系结构。主要内容包括:1)类加载器的分类,分为引导类加载器和自定义类加载器;2)类加载器之间的父子关系,下层加载器包含上层加载器的引用;3)三类主要类加载器的特点:引导类加载器(C++实现)、扩展类加载器(加载扩展目录)和系统类加载器(默认程序加载器);4)自定义类加载器的作用,如实现插件机制和模块隔离;5)获取类加载器的方法。类加载器层次结构是Java动态扩展能力的基础,通过继承ClassLoader类可自定义加载逻辑。
2025-09-13 09:30:00
482
原创 JUC 并发编程-StampedLock
读写锁ReentrantReadWriteLock』并不是真正意义上的读写分离,它只允许读读共存,而读写和写写依然是互斥的,大多实际场景是“读/读”线程间并不存在互斥关系,只有"读/写"线程或"写/写"线程间的操作需要互斥的。因此引入 ReentrantReadWriteLock。一个 ReentrantReadWriteLock 同时只能存在一个写锁但是可以存在多个读锁,但不能同时存在写锁和读锁, 也即一个资源可以被多个读操作访问或一个写操作访问,但两者不能同时进行。
2025-09-12 14:15:00
1613
原创 JVM-类的加载器
文章摘要:本文介绍了Java类加载器(ClassLoader)的核心作用、加载方式及必要性。类加载器负责将class文件读入JVM并转换为Class对象,分为显式加载(代码调用)和隐式加载(JVM自动加载)。了解加载机制有助于定位ClassNotFoundException等异常,支持动态加载和加解密操作,并实现自定义加载规则。类唯一性由加载器及其命名空间决定,不同加载器加载的相同类被视为不同类。类加载机制具有双亲委派、可见性(子可访问父)和单一性(父类不重复加载)三大特征,但某些场景会突破双亲委派模型(如
2025-09-12 08:54:51
826
1
原创 JVM-类的加载过程
本文系统介绍了Java类加载机制的核心流程,包括加载、链接、初始化三个阶段。在加载阶段,JVM通过二进制流获取类信息并创建类模板对象;链接阶段包含验证、准备和解析步骤,确保类结构的正确性;初始化阶段执行<clinit>()方法完成静态变量赋值。特别说明了数组类和final变量的特殊处理,以及多线程环境下初始化的线程安全性。最后指出类的使用需经历完整加载过程,并简要提及卸载机制。全文通过图示和代码示例,清晰地阐述了类加载的关键技术细节。
2025-09-11 17:10:45
905
原创 ThreadLocal
本文介绍了ThreadLocal的概念、作用及其实现原理。ThreadLocal提供线程局部变量,每个线程都有独立初始化的变量副本,解决了线程安全问题。文章分析了ThreadLocal、Thread和ThreadLocalMap三者的关系,指出ThreadLocalMap是ThreadLocal的静态内部类,以ThreadLocal实例为key存储数据。重点讨论了ThreadLocal的内存泄漏问题,由于Entry使用弱引用作为key,当ThreadLocal对象被回收后,key会变为null但value仍
2025-09-11 09:42:23
856
原创 Java CAS
CAS(比较并交换)是一种并发技术,通过硬件保证原子性操作。它包含三个参数:内存位置、预期值和更新值。当内存值与预期值匹配时,更新值才会被写入,否则操作失败。Java中的Unsafe类提供了CAS底层实现,基于CPU指令cmpxchg完成原子操作。相比synchronized,CAS非阻塞且效率更高,适用于多线程场景。AtomicInteger等原子类通过CAS+volatile保证线程安全,如getAndIncrement()方法避免i++的线程不安全问题。自旋锁借鉴CAS思想,线程通过循环尝试获取锁而非
2025-09-11 09:06:08
876
原创 Java volatile 关键字
摘要: volatile关键字通过内存屏障指令保证了变量的可见性和有序性,但不保证原子性。其内存语义包括:写操作直接刷新到主内存,读操作直接从主内存读取。JVM通过插入四种内存屏障(StoreStore、StoreLoad、LoadLoad、LoadStore)禁止指令重排序,确保多线程环境下的操作顺序。volatile适用于状态标志、低开销读写等场景,但复合操作(如i++)需配合synchronized或原子类实现原子性。
2025-09-10 15:51:15
908
1
原创 Java内存模型 JMM 看这一篇就够了
本文摘要: Java内存模型(JMM)是抽象规范,定义了多线程环境下变量访问规则,围绕原子性、可见性和有序性展开。计算机存储体系从磁盘到CPU缓存存在速度差异,JMM屏蔽硬件差异保证跨平台一致性。线程操作变量需通过工作内存(主内存副本)进行,不能直接读写主内存。JMM通过happens-before原则解决并发操作顺序问题,包含8条具体规则如次序规则、锁定规则等。这些规则避免显式使用volatile/synchronized,简化了并发编程,确保线程安全性和执行结果正确性。
2025-09-10 10:03:01
1030
1
原创 LookSupport与线程中断
如何优雅地停止运行中的线程 Java线程中断机制是一种协作式停止线程的方式,通过设置中断标志位而非强制终止。主要方法包括: 中断机制:通过调用线程的interrupt()方法设置中断标志位,需要线程自身检查标志位并处理中断逻辑。Thread.stop等方法已被废弃。 实现方式: 使用volatile变量作为中断标志 使用AtomicBoolean作为中断标志 通过Thread类的isInterrupted()方法检查中断状态 注意事项: 调用interrupt()不会立即停止线程,只是设置标志位 阻塞状态下
2025-09-10 09:45:30
622
原创 “史上最烂”操作系统Windows Vista,为何失败?
摘要: Windows Vista因过度追求功能扩张导致系统臃肿(代码超7000万行),兼容性负担使其在新硬件上性能不佳,恰逢低价低配电脑流行,用户体验差于XP。尽管技术前瞻,但时机与硬件趋势错位使其失败。后续Windows 7通过优化工程效率获得成功。推荐新版操作系统教材,涵盖现代技术更新,实例升级至Windows 11等最新系统。 (字数:149字)
2025-09-09 11:03:25
2585
2
原创 Java中的阻塞队列
BlockingQueue是Java并发包中解决多线程数据安全传输的队列工具,支持阻塞操作。当队列空时获取操作会被阻塞,队列满时添加操作会被阻塞。它提供了多种方法:非阻塞的offer()/poll()、可设置超时的offer()/poll()、阻塞的put()/take()等,简化了生产者-消费者模型的实现。通过共享队列,BlockingQueue自动处理线程阻塞与唤醒,开发者无需手动控制线程同步,有效提升了多线程程序的开发效率。
2025-09-09 08:59:26
783
1
原创 Java中线程安全的集合
本文演示了Java集合的线程安全问题及解决方案。示例代码展示了多线程操作ArrayList时会出现ConcurrentModificationException异常,原因在于ArrayList的add方法非线程安全。提出了三种线程安全解决方案: 使用Vector类,其add方法通过synchronized实现同步; 使用Collections.synchronizedList方法包装ArrayList; 重点推荐CopyOnWriteArrayList,采用写时复制机制实现读写分离。 其中CopyOnWri
2025-09-08 09:49:04
988
原创 JUC 并发编程-基础
本文主要介绍了Java多线程中锁的使用以及Callable和Future接口。 在锁的部分,通过示例代码演示了synchronized关键字在不同场景下的表现,得出以下结论: 非静态同步方法使用同一把锁(当前对象) 静态同步方法使用类对象作为锁 普通方法与同步锁无关 不同实例对象的非静态同步方法使用不同锁 在Callable和Future接口部分,说明了: Callable接口允许线程返回结果,而Runnable不能 Future接口用于获取异步任务的结果 FutureTask结合了Runnable和Fut
2025-09-08 09:05:01
877
1
原创 线程间通信
线程间通信主要有共享内存和消息传递两种模型。本文通过Java实现线程间交替加减操作,展示了两种实现方案:1)使用synchronized配合wait/notifyAll实现同步;2)使用Lock配合Condition的await/signal实现更灵活的线程控制。此外,还介绍了定制化通信案例,通过多个Condition实现按顺序循环打印不同次数的字符。两种方案都有效解决了线程同步问题,Lock方案提供了更细粒度的线程控制能力。
2025-09-07 23:23:37
544
原创 Java 中的锁
摘要 本文系统介绍了Java中的锁机制,涵盖乐观锁与悲观锁的区别(CAS算法实现乐观锁)、公平锁与非公平锁的底层原理(基于AQS实现)及适用场景、可重入锁的实现机制(synchronized通过计数器实现,ReentrantLock基于AQS状态管理)。重点分析了ReentrantLock的可重入性实现,包括锁获取/释放流程和线程所有权检查。此外还提及读写锁和自旋锁的概念。文章通过源码解析和流程图,深入阐释了各类锁的设计思想与实现细节,为开发者合理选择锁策略提供了理论依据。
2025-09-07 19:47:09
796
JavaSE 五万字总结.pdf
2023-05-15
MyBatisPlus如何多表联查?
2022-02-16
Elasticsearch 7.8版本能和JDK8完美匹配吗?
2022-01-03
如何通过JavaWEB获取远程客户端的MAC地址?
2022-01-04
MySql 里面的 int 型如果我不设置长度那它默认的长度是多少?
2021-12-21
MySql 中的tinyint字段对应的java的什么类型?
2021-12-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅