- 博客(212)
- 资源 (4)
- 收藏
- 关注
原创 使用 LangChain4j 和通义千问构建 AI Agent
本文介绍了如何使用LangChain4j框架结合阿里云通义千问模型构建AI智能助手。通过配置核心依赖项(包括langchain4j基础框架和通义千问集成),实现了能识别代码文件类型并自动重命名文件后缀的功能。文章详细讲解了模型初始化、助手接口定义、自定义工具集实现等关键步骤,并提供了完整代码示例。该AI Agent具备文件列表、内容读取和重命名等工具方法,能有效识别编程语言并修正文件扩展名,展示了AI在实际开发场景中的应用价值。
2026-01-22 16:09:53
352
原创 Spring MVC 处理请求的流程
组件职责类比前端控制器,协调所有组件,是整个流程的总指挥。餐厅的前台经理请求映射,根据 URL 找到对应的处理器。餐厅的引座员处理器适配,用统一的接口调用各种不同类型的处理器。餐厅的服务员,连接经理和后厨Handler处理器(通常是我们写的餐厅的厨师视图解析器,将逻辑视图名解析为具体视图对象。餐厅的出菜员View视图,负责将模型数据渲染成最终的响应内容(HTML/JSON等)。最终呈现的菜肴拦截器,在请求处理的不同阶段进行横切处理。餐厅的质检员这个流程充分体现了 Spring MVC 的。
2025-09-06 21:35:03
1205
1
原创 Java 中的线程中断详解
本文详细介绍了Java中的线程中断机制。线程中断是一种协作机制,通过设置中断标志位通知线程停止任务,而非强制终止。文章讲解了触发中断的两种方法(interrupt()和Future.cancel(true)),以及处理中断的核心方法和典型方式。特别强调了中断与强制终止的区别,并列举了线程中断的五大应用场景(任务取消、阻塞响应、线程池关闭等)。最后指出常见问题:中断只是设置标志位,需线程主动检查;抛出InterruptedException会清除中断状态,需手动恢复。线程中断是实现优雅线程控制的重要机制。
2025-08-17 10:40:28
1166
2
原创 ThreadPoolExecutor 中 shutdown() 与 shutdownNow() 的区别详解
摘要:ThreadPoolExecutor的shutdown()和shutdownNow()方法在关闭线程池时有显著差异。shutdown()会优雅关闭线程池,执行已提交任务但拒绝新任务;而shutdownNow()会立即中断所有线程,清空任务队列并返回未执行任务列表。实际效果取决于任务是否响应中断,两者都不能重新激活已关闭的线程池。最佳实践建议结合awaitTermination()实现优雅关闭,对不可中断任务需自定义停止机制,并注意资源释放问题。
2025-08-06 14:31:53
671
原创 深入理解零拷贝技术
零拷贝通过内核层的数据通路优化,解决了传统IO中用户空间与内核空间频繁交互的性能瓶颈。在Java中,结合NIO、Netty等框架,能够显著提升高并发下的I/O密集型应用性能。实际开发中需权衡场景需求(如是否需要修改数据),选择合适的零拷贝实现方式。零拷贝(Zero-Copy)是一种优化数据传输性能的关键技术,它通过减少或消除数据在内存中的冗余拷贝操作,显著提升系统吞吐量并降低CPU开销。
2025-02-21 11:29:07
1150
原创 Java 基础:Iterable 和 iterator 的区别
Iterator 和 Iterable 都是接口,它们两个一起配合实现数据的迭代。IterableIterable是一个接口,用于判断一个对象是否可以被迭代。如果一个类实现了Iterable接口,那么它的对象就可以被用于for-each循环中进行遍历操作。Iterable接口定义了一个iterator()方法,该方法用于返回一个Iterator对象,从而实现对集合的遍历。IteratorIterator 用于遍历并选择序列中的对象。它提供了一种方法来访问集合元素而不需要暴露该集合的底层表示。
2025-01-05 15:46:50
452
原创 Spring cloud 中使用 OpenFeign:让 http 调用更优雅
Feign 是一个声明式的 Web service 客户端。它使编写 Web service 客户端更加容易。只需使用 Feign 创建一个Java 接口并对其进行注释就能发起远程 Http 调用。它支持可插拔的注解,包括 Feign 注解和 JAX-RS 注解。Feign 还支持可插拔式编码器和解码器来对请求体和响应体进行编解码。本文详细介绍了如何在项目中使用 Spring Cloud OpenFeign。
2024-07-07 16:21:55
4047
2
原创 Java Runtime 类详解
Java Runtime 类详解Java Runtime 类使用Java Runtime.exec 方法的使用Java Runtime.getRuntime().exec() 的使用Java Runtime.exec 详解
2022-11-18 10:59:34
7986
原创 Java 生成X.509 V3证书
Java 生成 X509 V3证书使用Java 语言生成 X.509 V3证书pem格式证书生成使用Java 语言生成 X.509 V3 pem格式证书
2022-10-24 17:07:45
6516
6
原创 IDEA中强大的Maven依赖管理工具
IDEA中强大的maven依赖管理工具“Denpendencies”点击一下IDEA底部工具栏的“Dependencies”按钮,出现下面的标签视图:注意:只有是maven项目才有这个按钮第1部分:maven项目的modules,点击不同的“module”,在视图第2部分会切换对应“module”的依赖。第2部分:对应maven项目“module”的依赖列表。列表分为4列,分别为依赖名称、依赖scope(test,compile等)、依赖版本号和升级操作。...
2022-08-09 18:28:24
6787
9
原创 Spring Boot+Spring Security+JWT实现系统认证与授权
Spring Boot+Spring Security+JWT实现系统认证与授权Spring Boot整合Spring Security实现JWT认证Spring Boot项目使用JWT认证JWT认证OAuth2 JWT认证
2022-08-03 22:37:22
3312
原创 使用CLion+WSL debug nginx源码
使用CLion 调试nginx源码。使用WSL Ubuntu和CLion调试nginx源码。nginx源码调试。使用cmake在CLion中调试nginx源码。
2022-07-17 09:46:50
1745
原创 启用Docker对ipv6的支持
要想在Docker容器或者Swarm服务中使用ipv6,首先需要在Docker守护进程中启用对ipv6的支持,具体做法如下:编辑docker守护进程的配置文件 (若不存在需要手动创建该文件)设置为true,启用对ipv6的支持,配置ipv6子网。重载配置文件现在你可以使用 创建一个支持ipv6的网络了。另外你也可以在启动容器时使用参数来使容器支持ipv6。审查默认网络可以看到已经配置成功!接下来就可以在容器中使用ipv6了!使用nginx做演示:启动一个容器,此处并没有指定网络所以默认使用名为的
2022-06-28 14:13:34
10737
1
原创 使用Wireshark抓取Http2协议报文
Http2是一个二进制协议,并且所有的主流浏览器仅支持http2 over TLS即,所以直接通过wireshark是看不到http2的数据包的,只能看到经过TLS加密后的数据。如下图:Wireshark支持在TLS协议中配置密钥日志文件,然而Chrome浏览器支持将 TLS 会话中使用的对称密钥保存在外部文件中,可供 Wireshark 加密使用。Chrome浏览器会自动读取环境变量,将TLS握手时使用的密钥保存到对应的文件中。记得重启浏览器点击,输入上一步环境变量对应的路径:点击OK,使用浏览
2022-06-20 17:23:22
4580
原创 使用Netty实现静态Web服务器
以学习为目的,基于Netty实现一个简单的静态web服务器。使用到的技术及开发环境:基于netty实现静态web服务器。能够提供基本的http服务,仅支持静态资源服务即可。支持静的态资源包括:HTML、JS、CSS、常见的图片(包括但不限于jpeg、png、svg、webp、gif等格式)、字体文件以及其他文件。以上资源在响应到客户端时必须给与正确的MimeType(http中称MediaType),例如:html文件响应时,必须指定响应头。其他资源文件:非web资源文件,例如压缩文件,返回响应头。
2022-06-09 21:56:26
1524
原创 在Ubuntu上一键安装docker-ce
说明该脚本能够一键安装docker-ce,过程中出现任何询问的(Y/n)均输入Y即可。该脚本需要联网下载docker相关组件,请先确保机器能够上网该脚本仅支持Ubuntu以下版本:Ubuntu Jammy 22.04 (LTS)Ubuntu Impish 21.10Ubuntu Focal 20.04 (LTS)Ubuntu Bionic 18.04 (LTS)脚本#!/bin/sh# Uninstall old versionsudo apt-get remove doc
2022-05-22 15:21:25
1481
原创 Spring Boot整合WebSocket实现客户端与服务器之间的双向通信
在之前浏览器还不支持WebSocket的时候,Web开发者大多使用轮询接口的方式来实现近实时的数据更新。这种单方向通信的方式,由于服务器是被动接受查询,只能实现近实时的消息更新,且轮询的频率很难准确确定,如果频率高势必会增加服务器的负担;如果频率低,服务器端的消息可能很有很长的延迟才能达到客户端。如今,web3.0时代的到来,几乎所有的浏览器和Web服务器均支持了WebSocket。WebSocket的产生正式为了解决客户端与Web服务器之间单向通信的问题。WebSocket实现了浏览器(客户端)与Web
2022-04-04 22:03:32
8270
9
原创 HTTP请求方法的安全性
首先,本文所说的HTTP方法的安全性是RFC 7231规范中定义的一种方法公共属性,它并不是说能够防止外部的攻击,而是一种语义。什么是HTTP方法的安全性?HTTP方法的安全性是HTTP方法的一种属性,并不代表“安全”的方法就不会遭受外部的攻击,这种“安全”针对的是服务器上的资源。一般的,请发方法对服务器上的资源是只读的,我们就认为这种方法就是安全的。哪些方法是安全的RFC7231规范中定义了HTTP协议支持的8个标准方法,分别为GET,HEAD,POST,OPTIONS,PUT,DELETE,C
2022-04-03 22:06:59
2194
原创 Elasticsearch索引生命周期
索引生命周期阶段定义Elasticsearch在ILM(Index Lifecycle Management)中定义了索引生命周期的5个阶段:Hot(热):索引处于活动状态,能够更新(增改删)和查询。Warm(暖):处于该阶段的索引不再支持更新,但是能够被查询。Cold(冷): 该阶段的索引不再支持更新,只能支持很少的查询,查询较慢!Frozen(冻结):该阶段的所有不再支持更新,也很少查询,查询很慢!Delete(删除):索引不再需要可以被安全删除。索引中生命周期策略管理索引何时处于哪
2022-03-28 14:53:22
4145
原创 生产环境下Elasticsearch重要的系统配置
在生产环境下,Elasticsearch最好单独运行在服务器中。为了能够使其使用系统所有可用的资源,你需要配置你的操作系统以允许运行Elasticsearch的用户使用比默认情况下更多的资源。在部署生成环境之前需要考虑以下设置:配置(修改)你的操作系统设置禁用swapping提高文件描述符个数确保有充足的虚拟内存确保有充足的线程可用JVM DNS缓存设置不要使用noexec挂载临时目录TCP重传超时那么开发环境和生产环境有何区别?开发模式VS生产模式默认情况下,Elasticse
2022-03-26 22:04:05
4424
原创 Elasticsearch生产环境下系统配置
ES生产环境下的操作系统配置的作用是为了解除系统资源使用上的限制。ulimit在Linux操作系统中,ulimit可以临时解除可以使用资源的限制。要配置ulimit需要切换到root用户。例如临时设置可以打开的文件句柄数:sudo su #切换到root用户ulimit -n 65535 #设置可打开的最大文件句柄数su elasticsearch #切回elasticsearch用户这只在当前会话有效!你可以使用命令ulimit -a查看是否设置成功!$ ulimit -a..
2022-03-26 22:03:15
2765
原创 浏览器form表单的行为及其http原理
1. html form语法DTD定义<!ATTLIST form %attrs; action %URI; #REQUIRED method (get|post) "get" name NMTOKEN #IMPLIED enctype %ContentType; "application/x-www-form-urlencoded" onsubmit %Script; #I
2022-03-25 14:31:55
875
原创 HTTP协议规范
HTTP协议规范1. HTTP, HTTP/22. 其他HTTP相关协议规范3. IETF网站1. HTTP, HTTP/2版本RFC/链接地址发布日期维护者HTTP 0.9The Original HTTP as defined in 1991 at W3.org1991W3.orgHTTP/1.0RFC 19451996.5Network Working GroupHTTP/1.1RFC 2068 (1997.1) - 废弃, 被RFC 2616替代
2022-03-23 11:31:08
4664
原创 Spring Boot项目同时使用http和https
有些时候项目需要同时监听在不同的端口上,比如同时监听http80和https 443端口,这时我们需要自定义web server。假设我们需要项目同时使用http和https两种协议提供服务,分别使用端口80和443。我们知道Spring Boot内置了tomcat,jetty,undertow和响应式的netty4中web server,默认使用tomcat,所以这里使用tomcat要演示如何让项目同时支持使用http和https协议。WebServerFactoryCustomizer接口很明显
2022-03-12 17:22:12
6185
1
原创 Spring Boot 使用Redis发布订阅模式处理消息
Spring Boot 使用Redis发布订阅模式1. Redis发布订阅模式2. Spring Boot中订阅消息2.1 Redis监听器容器配置2.2 创建通道监听器2.3 测试订阅功能3. 借助RedisTemplate发布消息4. 更多参考文档1. Redis发布订阅模式自Redis 2.0.0起支持消息的发布订阅模式,命令行语法:PUBLISH channel massage2. Spring Boot中订阅消息此处不再介绍Spring Boot与Redis的整合,可以参考 Sprin
2022-01-29 17:57:10
2788
原创 Elasticsearch中的Mapping
1.什么是Mapping?Mapping用于定义文档的结构以及文档所包含属性(fields)如何被存储和索引。被ES索引的文档本质就是一些域或者称为属性的集合,每一个域都可以有自己的数据类型。每一个mapping都包含了一个文档必要的属性列表,还可以包含元数据属性(metadata fields),例如_source,它用于自定义如何处理文档的关联元数据。一句话概括,Mapping用于定义要索引文档的结构及如何被索引。ES支持两种Mapping的创建方式:Dynamic Mapping:动态M
2021-08-21 18:55:30
822
原创 Spring Boot自定义参数校验器
在Spring Boot中自定义参数校验器当我们在项目中引入spring-boot-starter-validation的starter依赖后就直接可以在Controller的请求方法上使用诸如@NotNull、@Length等注解进行参数校验了。该starter底层是使用hibernate-validator提供的校验器做校验,虽然它提供了丰富的校验器,但是有些时候为了更方便的对参数进行校验,需要我们自己定义参数校验器。准备环境项目中必须有spring-boot-starter-validation
2021-08-08 14:48:48
3100
原创 Docker 容器启动报错的解决方法
docker: Error response from daemon: OCI runtime create failed: unable to retrieve OCI runtime error (open /run/containerd/io.containerd.runtime.v2.task/moby/40b48d6f9ea6c0bbcbaa9413adb1914b41e4750465125742203b5d2cb72d3c06/log.json: no such file or director
2021-08-04 10:07:01
14942
6
原创 基于Servlet的web应用如何防止XSS攻击
Servlet 使用jsp作为视图模板,jsp本身存在XSS漏洞,如果Web应用是基于Servlet技术并且使用jsp作为视图模板,也没有引入任何安全框架,那么你的应用就存在XSS漏洞。本文主要介绍了基于Servlet的web应用如何防止XSS攻击。1. XSS漏洞的类型反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。存储型XSS:<持久化> 代码是存储在服务
2021-07-31 12:55:06
1391
1
原创 Docker服务启动报错的解决方法
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: failed (Result: start-limit) since 四 2021-07-29 10:20:32 CST; 8s ago Docs: https://docs.docker.com Process: 2656 ExecStart=/usr/bin/dockerd -H fd://
2021-07-29 10:57:25
12933
原创 源码编译安装OpenJDK
源码编译安装OpenJDK1. 前置条件1.1 操作系统要求1.2 构建必要工具及库安装1.2.1 autoconf1.2.2 zip&unzip1.2.3 gcc&g++1.2.4 X111.2.5 FreeType1.2.6 CUPS1.2.7 ALSA1.2.8 libffi1.2.9 Boot JDK2. 构建OpenJDK2.1 执行configure2.2 make2.3 校验构建的JDK拉取源码,执行命令:get clone https://github.com/open
2021-07-18 22:00:05
1682
转载 什么是 JWT -- JSON WEB TOKEN
什么是JWTJson web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。起源说起JWT,我们应该来谈一谈基于token的认证和传统的session认证的区别。
2021-07-10 17:03:06
147
转载 HTTP 之chunked 编码
HTTP 之chunked 编码什么是分块传输?分块传输编码的使用场景分块传输编码的编码格式分块编码传输的译码过程什么是分块传输?分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,它允许HTTP由WEB服务器发送给客户端应用的数据可以分成多个部分。使用限制:分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供。通常情况下,HTTP应答消息中发送的数据是整个发送的,Content-Length消息头字段表示数据的长度。数据的
2021-07-05 13:36:29
1563
原创 Elasticsearch 内置分词器
Elasticsrarch 提供了8中内置分词器,它们可以无需任何配置即可使用。每一个分词器都由3部分组件组成:Character Filters、Tokenizer和Token Filters,这3个组件就像一个流水线一样对输入的文本进行分词处理。Character Filters: 对输入的文本进行第一次处理,例如去除文本中html标签符号Tokenizer:对上一步处理后的结果按照规则进行单词拆分。Token Filters:将切分后的单词进行二次加工,例如转小写、删除stop words、增
2021-07-03 19:58:37
1442
1
原创 计算机网络传输协议UDP和TCP
计算机网络传输协议UDP用户数据包协议UDP协议的特点UDP数据报格式UDP首部TCP传输控制协议TCP的特点TCP报文段的首部格式TCP实现可靠传输的原理TCP连接管理TCP连接的建立TCP为何要采用三报文握手?TCP连接的释放在计算机网络的传输层主要有两个传输协议:UDP和TCP。UDP用户数据包协议UDP(User Datagram Protocol)称为用户数据报协议相对于TCP协议要简单的多,它只在IP数据报之上添加少许的功能。UDP协议的特点面向数据报无连接,在传输之前无需建立连接
2021-06-14 16:20:56
1385
8
原创 JVM类加载机制
JVM类加载机制类的生命周期类的加载时机类的加载过程类加载器类的生命周期一个类被加载到内存到拆卸出内存为止,它的整个生命周期包括7个阶段:加载–>验证–>准备–>解析–>初始化–>使用–>拆卸。其中验证、准备和解析3个阶段称为连接(Linking)。类的加载时机什么时候触发类的加载?其实JVM规范并没有严格规定类加载的时机,而是由具体的虚拟机实现自由把我时机。但是虚拟机规范严格规定了有且只有5中情况必须立即对类进行“初始化”(加载、验证、准备自然在此之前)。遇
2021-06-11 16:06:36
1145
3
Maven 实战(高清完整带书签).pdf
2017-09-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅