- 博客(67)
- 收藏
- 关注
原创 HTTP解析/版本变化/TSL
本文摘要: 网络协议基础知识总结,涵盖ARP、IP、HTTP、TCP/UDP等核心协议。ARP实现IP到MAC地址解析;IPv4/IPv6标识主机位置;HTTP协议详解请求结构、方法差异和缓存优化;HTTP版本演进对比(1.0-3.0)及性能改进;TCP面向连接可靠传输的特性与标志位;UDP简单无连接传输。重点包括:HTTP状态码分类、GET/POST区别、强制/协商缓存机制、HTTP/2多路复用、HTTP/3的QUIC改进,以及TCP三次握手/四次挥手过程。
2026-01-13 22:49:22
691
1
原创 第五天:深度解密 Netty ByteBuf:高性能 IO 的基石
Netty内存管理对比: 内存类型:堆内存(GC管理,IO性能差)vs直接内存(需手动释放,IO性能优) 分配方式:池化(复用对象,降低GC压力)vs非池化(简单但性能差) 核心机制: 引用计数管理内存释放 零拷贝操作(slice/duplicate) 动态扩容规则(16倍数或2^n) 使用原则:最后使用者负责释放,避免内存泄漏
2026-01-11 23:08:15
693
原创 第四天:Netty 核心原理深度解析&EventLoop、Future/Promise 与 Pipeline
Netty高性能网络编程的核心机制解析:采用单线程事件驱动架构,通过EventLoop实现异步非阻塞处理。关键设计包括:1)EventLoopGroup采用Reactor模式分工,BossGroup处理连接,WorkerGroup处理IO;2)增强的Future/Promise体系支持非阻塞回调与主动结果设置;3)Pipeline责任链机制通过入站/出站处理器实现逻辑解耦。这些设计共同解决了高并发场景下的性能瓶颈,使Netty成为Java网络编程的首选框架。
2026-01-10 22:22:28
1036
原创 第三天:从传统 IO 到 NIO 零拷贝,再到 Netty 实战
这是开发者最常打交道的地方,决定了数据进来后怎么处理。codeJava@Override// 获取责任链(Pipeline)// 添加处理器// 比如:HTTP 编解码// 比如:自定义业务逻辑});:每个客户端连接都有一个专属的 Pipeline(流水线)。:这是一个特殊的处理器,用于初始化 Pipeline。作用:决定了数据如何进(解码)、如何处理(业务逻辑)、如何出(编码)。注意:这里使用的是 childHandler,意味着配置的是负责的客户端连接(SocketChannel)。
2026-01-08 21:50:28
442
原创 第二天:深入理解 Selector:单线程高效管理多个 Channel
Java NIO中Selector的核心用法,通过Selector实现单线程管理多个Channel的高效I/O多路复用。文章详细讲解了Selector的三个核心组件(Channel、Selector、SelectionKey)及其关系,并提供了完整的NIO服务器实现代码。重点解析了事件循环处理流程,强调必须手动移除已处理的SelectionKey以避免重复处理,说明了四种事件类型(ACCEPT、CONNECT、READ、WRITE)及其触发场景。通过Selector的Open-Register-S
2026-01-07 22:10:46
622
原创 第一天:从 ByteBuffer 内存模型到网络粘包处理实战
深入浅出 Java NIO 核心原理:从 Buffer 到 网络编程在 Java 网络编程领域,是高性能服务的基石。相比于传统的 BIO(Blocking I/O),NIO 提供了更高的并发能力和更灵活的资源管理。本文将带你深度拆解 NIO 的三大组件、ByteBuffer 的底层原理以及如何处理网络通信中的常见问题。
2026-01-06 20:55:56
837
原创 AI在酒店分销房型匹配与标准化中的工程化落地/DeepSeek/词袋模型/预过滤
从大模型匹配信息表中提取第一阶段已经完成的数据,分批次进行提取特征,包含床型,等级,景观。为了提高准确性,判断的逻辑完全在代码层面进行,大模型只做提取特征工作。大模型在语义理解上确实有优势,但直接把“是否匹配”的判断交给模型,结果往往不可控,也不适合高频、批量的线上业务。保证调用大模型匹配前,使用系统相似度进行预先匹配,过滤出高度相似房型。3. 大模型返回结果后,将匹配本地房型的相关信息(id、匹配分数、匹配原因等)统一更新至。进行合并,生成最终用于本次匹配的大模型输入 Prompt,图示如下。
2025-12-28 14:18:34
1046
原创 Transformer 模型详解:从输入到输出的全流程剖析
阶段模块关键操作结果输入层Embedding + 位置编码文本 → 向量含顺序信息的词向量Encoder多头自注意力 + 前馈网络捕捉输入全局关系输入语义特征DecoderMasked 注意力 + Encoder-Decoder 注意力结合输入与上下文生成输出序列输出层转为词概率分布输出结果Transformer 是一种“全局思考、并行计算”的神经网络,它用注意力机制取代循环,使模型能高效理解和生成语言。
2025-11-02 16:26:42
935
原创 ChatTTS + SenseVoice-Small 实战:五分钟搭建你自己的语音大模型助手,让 AI 开口说话!
本文介绍了通过Docker在本地部署Xinference服务的完整流程。首先确保已安装Docker Desktop和Dify环境,然后通过指定挂载目录、环境变量和端口映射等参数启动容器。启动成功后可通过浏览器访问服务,并详细说明了如何集成ChatTTS语音合成模型和SenseVoice-Small语音理解模型,构建完整的语音交互系统,最后在Dify平台中进行相关配置和应用创建。
2025-11-02 11:05:15
409
原创 Java/注解Annotation/反射/元数据
摘要:Java注解是一种元数据,可为类、方法或参数添加额外信息。通过@interface定义注解,并使用元注解@Target和@Retention分别指定使用范围和保留时期。示例中定义了一个方法级运行时注解@MyAnnotation,包含limitType和lockTime两个可配置参数。在Test类的printString方法上应用该注解,并设置了自定义参数值。注解为代码提供了声明式的配置能力,增强了程序的灵活性和可维护性。(149字)
2025-09-17 21:56:18
155
原创 WebSokcet中Session在分布式情况下的实现
不同节点的session如果要进行通信,那么我们必须引入中间件,通过中间件进行广播,比如使用rabbitmq的fanout交换机,但是容易导致广播风暴。分布式情况下性能影响很大。首先我们会将每个节点中存放的session标识记录到redis中,key是ip+port,value为标识,并且添加过期时间,每隔一段时间,服务就会刷新,记录用户状态。如果某一个节点向其他节点发送消息,我们先从redis或许节点位置信息,然后基于发送到rabbitmq的队列中,然后我们节点进行消费。
2025-09-02 13:33:48
100
原创 分布式事务/Spring事务Transactional&Seata/3PC&2PC&TCC&RocketMQ事务消息/速通
摘要:分布式事务确保跨节点操作的一致性,常见方案包括2PC(二阶段提交)和3PC(三阶段提交),但存在性能瓶颈和资源浪费问题。TCC模式通过资源预冻结降低锁粒度,而Saga模式依赖本地事务自动执行和补偿机制。消息事务利用消息队列实现最终一致性。Seata框架提供XA模式(强一致)和AT模式(弱一致)两种实现方式,分别通过全局锁和日志回滚来保证事务特性,适用于不同业务场景。
2025-08-28 20:38:00
409
原创 Java垃圾回收器:从SerialGC到G1的演进/速通
本文介绍了四种JVM垃圾回收器:SerialGC(单线程)、ParallelGC(多线程,追求高吞吐量)、CMSGC(并发,最短STW)和G1(并发,优先回收高效区域)。不同回收器适用于不同场景,如SerialGC用于早期JVM,ParallelGC是JDK8默认,G1支持响应时间敏感场景并允许控制最大停顿时间。各回收器的工作机制不同,如CMS采用多阶段标记清除,G1则分为标记和回收阶段。JDK9后G1成为默认回收器。
2025-08-27 17:11:30
214
原创 MySQL讲解/内部结构/索引下推/Explain/慢查询(必备)
MySQL分为Server层和存储引擎层,Server层处理连接、解析、优化等逻辑,存储引擎负责数据存储。执行计划通过EXPLAIN分析,重点关注id(执行顺序)、type(访问类型)等指标。索引下推技术能减少回表操作,提升查询效率。慢查询日志可监控性能问题,通过设置long_query_time阈值记录低效SQL。InnoDB存储引擎使用聚簇索引组织数据,并通过undo log实现事务回滚和MVCC机制。优化策略包括合理使用索引、避免全表扫描、优化连接查询等。
2025-08-09 22:19:21
933
原创 万字解析Linux命令/操作系统/面试复习
本文总结了常见操作系统和Linux常用命令。主要介绍了Windows、Linux、Mac等PC操作系统和Android、iOS等移动操作系统,重点讲解了Linux系统的基本命令操作,包括文件目录操作(ls、cd、mkdir等)、文件内容查看(cat、more等)、查找命令(which、find)、文本处理(grep、wc)、权限管理(chmod、chown)以及网络和进程管理相关命令。同时还涵盖了用户管理、软件安装、压缩解压等实用操作技巧,为Linux系统使用提供了全面的基础命令参考。
2025-07-19 15:54:13
610
原创 适合小白的Java详解/万字解析/必备
Java核心特性摘要:1. 跨平台性:通过JVM实现"一次编写,到处运行",不同系统使用对应JVM翻译字节码为机器码。2. 面向对象:严格遵循OOP原则,支持封装、继承和多态(包括重载和重写)。3. 内存管理:自动垃圾回收机制管理内存。4. 数据类型:8种基本类型和对应包装类,注意浮点数精度问题建议使用BigDecimal。5. 重要概念:JDK(开发工具包)、JRE(运行环境)、JVM(执行引擎)三者的包含关系。6. 特殊机制:反射(运行时获取类信息)、泛型(类型参数化,支持通配符)、
2025-07-17 16:28:45
650
原创 网络编程/Java面试/TCP&UDP区别
InetAddress 是 Java 中 java.net 包下的一个类,主要用于表示 IP 地址(IPv4 或 IPv6)和主机名之间的映射,提供与网络主机相关的操作。内外IP:也叫局域网ip,只能在特点局域内使用,可减少ip使用。Socket 是对网络通信的封装,表示网络中通信的一个端点(IP 地址 + 端口号)。网络上的设备,事先规定的连接规则,以及传输数据的规则被称为协议。Socket 是通信的门口,IO 是门口收发数据的管道。网络编程:开发程序,实现不同设备程序间数据交互。
2025-07-16 22:15:03
321
原创 2025Nginx最新版讲解/面试
正向代理,代理对象是我们的客户端,目标对象不知道我们用户。VPN就是典型的正向代理。反向代理,代理对象是服务端,用户不知道服务端具体信息。而这正是Nginx所做的。根据权重优先级将请求打到服务器,可以根据服务器性能等指标。将我们静态数据存放在nginx上,无需在往服务端请求。维护系统多服务器部署,将我们请求代理到各个服务器。
2025-07-11 20:37:00
386
原创 2025最新版Docker讲解/面试/命令/容器化技术
docker是一款由Go语言开发基于操作系统内核提供轻量虚拟化,在Docker安装的软件并不是真正安装在宿主机操作系统中,而是安装在容器的文件系统中(隔离环境),宿主机看不到这些安装,容器之间互不影响。在我们docker内部有一个docker0网络,相当于一个局域网,每个容器都有自己的ip,我们可以直接通过他们的ip访问,但由于一些开关机会导致容器发生ip变化,所以这不是最佳选择。docker run [-v 宿主机路径/容器路径] --name 自定义容器名 镜像名:版本/ID。进入容器单独文件系统。
2025-07-11 16:46:37
541
原创 LangChainForJava?/Spring集成/流式输出/会话记忆Redis/Rag
如果采用最原始的方法用Spring集成大模型,势必会引起大量繁杂众多的代码。我们可以利用Langchain4J提供的框架或者使用Spring Ai都可以集成。都能快速搭建我们的基于大模型的项目。
2025-07-06 14:56:40
363
原创 Java序列化反序列化是什么?/Serializable/Code讲解
如果我们在Java中有向序列化某个对象的行为,我们需要将该类实现Java.io.Serializable接口,该接口没有任何方法,就是简单一个标记,用作这个类可以被我们Java编译器序列化的标志。Java序列化是将我们的对象转换成网络传输字节流的过程,相反,反序列化就是将我们的字节流转换成对象的过程。简而言之,就是将我们结构化的数据转换成非结构,扁平化的字节流。默认序列化效率低(反射 + 元信息),生成的字节流冗余较多;Java 序列化生成的字节流格式是 Java 私有的,,无法用于跨语言通信。
2025-06-22 15:31:21
417
原创 RabbitMQ多角度可靠性分析/基于Java代码深度解析
生产者可靠性:上一篇我介绍了RabbitMQ的基本交换机以及队列,不了解可以再回顾一下。那么这就带来一个问题,我们在程序中添加一个中间件,把我们的消息依托给MQ,那么我们如何保证我们的消息在这个过程不会丢失。保证它的的可靠性,目前主流从三个角度保证:生产者可靠性,MQ可靠性,消费者可靠性。生产者可靠性:所谓生产者可靠性就是我们如何保证将我们的消息从生产者将消息发送到队列或者消息的可靠性1. 重试机制针对网络异常,连接中断,卡顿的自动重发。(萌芽阶段,与客户端的连接,还没有到交换机/d队列)
2025-06-19 20:41:34
1047
原创 炸裂!!!图解RabbitMQ/交换机/队列/Java代码深入理解
RabbitMQ简介及Spring集成应用 RabbitMQ是一个基于Erlang开发的高性能消息中间件,采用AMQP协议,具有高吞吐量特性。其工作流程包括:消息序列化、UDP连接建立、交换机路由、队列存储和消费者反序列化处理。Spring通过AMQP依赖简化了RabbitMQ集成,提供RabbitTemplate发送消息和@RabbitListener接收消息的功能。配置需注意交换机和队列的存在性,避免消息丢失。典型应用包括Work队列模型,支持多消费者处理消息。核心端口为5672(协议)和15672(管
2025-06-12 22:19:45
415
原创 Java代码实现生产者消费者问题
用 Java 实现的经典生产者-消费者问题的代码,使用的是 wait() 和 notify() 方法实现线程间通信。
2025-05-23 21:31:12
202
原创 代码讲解Java线程转换
Java线程的生命周期主要包括新建、就绪、运行、阻塞和死亡五个状态。新建状态发生在使用new Thread()创建线程对象后,但在调用start()方法之前。调用start()后,线程进入就绪状态,具备运行资格,但实际运行取决于操作系统调度。Java中的Thread.State.RUNNABLE状态统称了“就绪”和“运行”两种状态,不区分线程是否正在执行。当线程获得CPU时间片时,进入运行状态,执行run()方法。阻塞状态包括同步阻塞、等待和超时等待,这些状态均由运行状态进入,恢复运行需先进入就绪状态。线程
2025-05-23 17:29:43
560
原创 JUC/多线程 :提升性能与解决并发问题
现代的计算机CPU往往性能都比较高,那么如果我们的计算机是单线程的,那么处理单任务的速度肯定是很快的。3>实现Callable接口,重写call方法(具有返回值,线程运行结果-FutureTask->管理结果 ),创建Thread对象,开启线程。2>实现Runnable接口(implements->写run方法),重写run方法,创建Thread对象,开启线程。插入/插队线程,插入到当前线程之前/换句话说就是当前线程进入另一个线程的等待线程池,等待唤醒。设置线程优先级(0-10,数字越高,优先级越高。
2025-05-18 09:45:20
313
原创 CSRF(cross-site request forgery)跨域请求伪造
CSRF 当我们在成功登录一个网站后,会将后端返回的cookie数据进行存放,每一次访问该域名都会将cookie存放在请求头,也就相当于用户登录凭证,但这种同域自动携带cookie存在一种问题 那就是当恶意网站也进去请求时,同样可伪造成正在登录的用户。那能获取本地存储(localStorage)和会话存储(sessionStorage)的数据吗。会话存储仅在当前tab中有效,tab关闭我们的数据也就随之丢失了。本地存储长期存在我们的浏览器,及时浏览器关闭也不会丢失。该请求携带cookie的数据。
2025-04-29 11:35:58
295
原创 spring-事务管理
想要添加事务管理,直接在你想要添加的地方类头或方法头添加@Transactional。注意修饰符必须为public,我们要让异常抛出,为不是捕捉异常。
2024-11-29 08:29:28
289
1
原创 Maven进阶
直接依赖间接依赖路径冲突同一个配置文件 相同坐标 不用版本 最后配置版本生效路径优先 谁层级高 谁是生效依赖声明优先 层级相同,看谁先声明可选依赖optionnal --不想给隐藏当前工程所依赖的资源 隐藏后对应的资源将不具有传递性排除依赖exclusions --- 不想要排除依赖时隐藏当前资源对应的依赖关系。
2024-11-03 10:35:40
363
原创 Spring中@Import和@ComponentScan注解差异
Import无论导入的该类是不是一个bean,都会自动将该类配置成一个bean,并解析里面的bean[类中的带有bean注解的方法才会装入到spring容器]。[配置类Configure 会被Spring容器自动注册为一个bean]ComponentScan则只有在该类是一个bean时才会进入该类,并解析,将其中bean装入容器中。
2024-11-01 11:21:35
593
原创 Spring整合Mybatis过程
通过配置扫描路径,Spring 会自动为每个 Mapper 接口生成代理对象,并将其注册为 Bean,从而使得我们可以在其他组件中直接注入并使用。当我们直接调用spring整合mybatis后的dao层方法 可以直接调用这是因为spring会通过拦截器自动拦截并将你的方法调用转换为对应的 SQL 执行。代理模式的使用使得我们在调用DAO接口方法时,实际上是调用MyBatis生成的代理类方法,这个方法内部会利用XML或注解配置的SQL来查询数据库并返回结果。在 Spring 和 MyBatis 整合时,
2024-10-31 11:13:17
432
原创 SpringMVC配置
SpringMVC技术与Servlet技术功能相当 开发效率高(好多共性的东西都封装好了,是对Servlet的封装,核心的DispatcherServlet最终继承自HttpServlet)SpringMVC基于java实现MVC模型的轻量级web框架运行步骤 2.对tomcat注册springmvc配置 [方法1] 声明[AnnotationConfigWebApplicationContext]同时对所需请求bean进行扫描[@ComponentScan("com.zz
2024-10-29 15:52:23
341
原创 Spring注解开发
Spring核心功能就是IOC, 其就是将Bean初始化到容器中,其中Bean是如何加载到容器 有两种方法 -> Spring XML 和Spring 注解为了省略XML文件过多的固定配置 我们可以创建一个类 并在类头注解@
2024-10-28 18:08:07
302
原创 Mybatis
帮助程序猿与数据库的交互操作步骤 利用MAVEN导入Mybatis依赖 在resources下创建mybatis-config xml文件编写映射器Mapper1. 创建xml文件 我们可以把这个文件看作一个对象 里面有我们相应的操作2.在进行相应操作前 我们需要有一个类 其中的属性应该与我们的表中的字段名相同查 若数据库字段名与所定义的类属性名不对应 则需要建立一个映射·--- --- 利用对
2024-10-28 17:18:06
298
原创 Java反射技术
Method m1 = aClass.getMethod("方法名", 参数类型1.class, 参数类型2.class...);返回类型 result = (返回类型)m1.invoke(类名, 参数1, 参数2);//获取对象所有方法 不包含父类方法 返回数组。//获取所有公有方法 包含父类方法 返回数组。将我们的class文件读取到内存中 注意对于类的加载只进行一次。
2024-10-28 10:45:14
428
空空如也
我的隔离级别是可重复读,为什么两次select结果不一样
2025-07-24
java spring Autowired自动注入 为什么这个会报错
2024-11-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅