Java - 日志体系_Apache Commons Logging(JCL)日志接口库_桥接Logback 及 源码分析
文章目录
- Pre
- Apache Commons
- Apache Commons Proper
- Logging (Apache Commons Logging )
- JCL 集成logback
- POM依赖
- 配置文件 `logback.xml`
- 使用
- 源码分析
- `jcl-over-slf4j` 的工作原理
- 1. `LogFactory` 的实现
- 2. `SLF4JLogFactory` 和 `Log` 的实例化过程
- 3. `SLF4JLog` 和 `SLF4JLocationAwareLog`
- 4. 日志输出的流程
- 小结

Pre
Java - 日志体系_Apache Commons Logging(JCL)日志接口库
Java - 日志体系_Apache Commons Logging(JCL)日志接口库_适配Log4j2 及 源码分析
Java - 日志体系_Apache Commons Logging(JCL)日志接口库_桥接Logback 及 源码分析
Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J实现原理分析
Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J集成JUL 及 原理分析
Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J集成Log4j1.x 及 原理分析
Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J集成Log4j2.x 及 原理分析
Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J集成logback 及 原理分析
Apache Commons
官网:Apache Commons

Apache Commons Proper
Commons Proper 致力于一个主要目标: 创建和维护可重用的 Java 组件。这 Commons Proper 是一个协作和共享的地方,其中 来自整个 Apache 社区的开发人员都可以 一起讨论由 Apache 项目共享的项目,以及 Apache 用户。
共享资源开发人员将努力确保他们的 组件对其他库的依赖性最小,因此 这些组件可以轻松部署。此外,共享资源 组件将尽可能保持其接口稳定,因此 Apache 用户(包括其他 Apache 项目)可以实现 这些组件。

| 组件 | 描述 | 最新 Maven 版本 | 发布版本 | 发布日期 |
|---|---|---|---|---|
| BCEL | 字节码工程库 - 分析、创建和操作 Java 类文件 | 6.10.0 | 6.10.0 | 2024-07-23 |
| BeanUtils | Java 反射和 introspection API 的易用封装 | 1.9.4 | 1.9.4 | 2019-08-13 |
| BSF | Bean 脚本框架 - 提供对脚本语言的接口,包括 JSR-223 | 3.1 | 3.1 | 2010-06-24 |
| CLI | 命令行参数解析器 | 1.9.0 | 1.9.0 | 2024-08-14 |
| Codec | 通用的编码/解码算法(例如音标、base64、URL) | 1.17.1 | 1.17.1 | 2024-07-15 |
| Collections | 扩展或增强 Java 集合框架 | 4.5.0-M3 | 4.5.0-M3 | 2024-12-18 |
| Compress | 定义用于处理 tar、zip 和 bzip2 文件的 API | 1.27.1 | 1.27.1 | 2024-08-20 |
| Configuration | 用于读取各种格式的配置/偏好文件 | 2.11.0 | 2.11.0 | 2024-06-10 |
| Crypto | 一个针对 AES-NI 优化的加密库,包装了 OpenSSL 或 JCE 算法实现 | 1.2.0 | 1.2.0 | 2023-01-23 |
| CSV | 处理逗号分隔值文件的组件 | 1.12.0 | 1.12.0 | 2024-09-25 |
| Daemon | 为 Unix 守护进程般的 Java 代码提供替代调用机制 | 1.3.4 | 1.3.4 | 2023-05-12 |
| DBCP | 数据库连接池服务 | 2.13.0 | 2.13.0 | 2024-12-02 |
| DbUtils | JDBC 辅助库 | 1.8.1 | 1.8.1 | 2023-09-14 |
| Digester | XML 到 Java 对象的映射工具 | 3.2 | 3.2 | 2011-12-13 |
| 用于从 Java 发送电子邮件的库 | 2.0.0-M1 | 2.0.0-M1 | 2024-06-27 | |
| Exec | 用于处理外部进程执行和环境管理的 API | 1.4.0 | 1.4.0 | 2024-01-05 |
| FileUpload | 为您的 servlets 和 Web 应用提供文件上传功能 | 1.5 | 1.5 | 2023-12-27 |
| FileUpload2 | 为您的 servlets 和 Web 应用提供文件上传功能(版本 2) | 2.0.0-M1 | 2.0.0-M1 | 2023-07-19 |
| Geometry | 空间和坐标处理 | 1.0 | 1.0 | 2021-08-21 |
| Imaging | 一个纯 Java 图像库(之前称为 Sanselan) | 1.0.0-alpha5 | 1.0.0-alpha5 | 2024-04-18 |
| IO | 一组 I/O 工具类 | 2.18.0 | 2.18.0 | 2024-11-19 |
| JCI | Java 编译器接口 | 1.1 | 1.1 | 2013-10-14 |
| JCS | Java 缓存系统 | 3.2.1 | 3.2.1 | 2024-05-27 |
| Jelly | 基于 XML 的脚本和处理引擎 | 1.0.1 | 1.0.1 | 2017-09-25 |
| Jexl | 扩展 JSTL 表达式语言的表达式语言 | 3.4.0 | 3.4.0 | 2024-06-05 |
| JXPath | 使用 XPath 语法操作 Java Beans 的工具集 | 1.3 | 1.3 | 2008-08-14 |
| Lang | 为 java.lang 类提供额外的功能 | 3.17.0 | 3.17.0 | 2024-08-29 |
| Logging | 包装了多种日志 API 实现 | 1.3.4 | 1.3.4 | 2024-08-19 |
| Math | 轻量级、自包含的数学和统计学组件 | 4.0-beta1 | 4.0-beta1 | 2022-12-20 |
| Net | 一组网络工具类和协议实现 | 3.11.1 | 3.11.1 | 2024-06-10 |
| Numbers | 数字类型(复数、四元数、分数)和工具(数组、组合数学等) | 1.2 | 1.2 | 2024-08-12 |
| Pool | 通用对象池组件 | 2.12.0 | 2.12.0 | 2023-09-30 |
| RDF | RDF 1.1 的通用实现,可由 JVM 上的系统实现 | 0.5.0 | 0.5.0 | 2017-12-23 |
| RNG | 随机数生成器的实现 | 1.6 | 1.6 | 2024-07-15 |
| SCXML | SCXML 规范的实现,旨在创建和维护 Java SCXML 引擎 | 0.9 | 0.9 | 2008-12-01 |
| Statistics | 统计学工具 | 1.1 | 1.1 | 2024-08-20 |
| Text | Apache Commons Text 是一个专注于字符串操作的算法库 | 1.13.0 | 1.13.0 | 2024-12-13 |
| Validator | 用于在 XML 文件中定义验证器和验证规则的框架 | 1.9.0 | 1.9.0 | 2024-05-28 |
| VFS | 虚拟文件系统组件,用于将文件、FTP、SMB、ZIP 等视为一个逻辑文件系统 | 2.9.0 | 2.9.0 | 2021-07-21 |
| Weaver | 提供一种简单的方式来增强(织入)已编译的字节码 | 2.0 | 2.0 | 2018-09-07 |
Logging (Apache Commons Logging )
https://commons.apache.org/proper/commons-logging/
| 组件 | 描述 | 最新 Maven 版本 | 发布版本 | 发布日期 |
|---|---|---|---|---|
| Logging | 包装了多种日志 API 实现 | 1.3.4 | 1.3.4 | 2024-08-19 |
JCL 集成logback

POM依赖
- jcl-over-slf4j (替代了 commons-logging)
- slf4j-api
- logback-core
- logback-classic
通过 jcl-over-slf4j 替换 commons-logging,从而让 commons-logging 使用 SLF4J 作为底层日志实现。
<dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>2.0.16</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>2.0.16</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.5.15</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.5.15</version></dependency>
jcl-over-slf4j:这个依赖项将commons-logging的日志请求转发到 SLF4J 框架。slf4j-api:SLF4J 的接口库,负责提供日志记录的 API。logback-core和logback-classic:这是 Logback 的核心和实现,负责具体的日志输出。
配置文件 logback.xml
logback.xml 文件用于定义日志输出的格式和方式。
<configuration><!-- 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} ||| %msg%n</pattern></encoder></appender><!-- 文件输出 --><appender name="FILE" class="ch.qos.logback.core.FileAppender"><file>application.log</file><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 可选:配置日志文件滚动 --><appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>application.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 按天滚动日志文件 --><fileNamePattern>application-%d{yyyy-MM-dd}.log</fileNamePattern><!-- 最多保留 30 天的日志文件 --><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 根日志记录器 --><root level="debug"><appender-ref ref="STDOUT" /><appender-ref ref="ROLLING_FILE" /></root><!-- 可选:配置特定包的日志级别 --><logger name="com.artisan" level="info" />
</configuration>
使用
在代码中,通过 commons-logging 的 API 来记录日志,并且通过 SLF4J 和 Logback 完成实际的日志输出。
package com.artisan;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;/*** commons-logging 与 logback 集成**/
public class JclBridgeLogbackExample {// commons logging 的 Log 和 LogFactoryprivate static final Log logger= LogFactory.getLog(JclBridgeLogbackExample.class);public static void main( String[] args ) {logger.trace("JclBridgeLogbackExample This is a trace message");logger.debug("JclBridgeLogbackExample This is a debug message");logger.info("JclBridgeLogbackExample This is an info message");logger.warn("JclBridgeLogbackExample This is a warning message");logger.error("JclBridgeLogbackExample This is an error message");logger.fatal("JclBridgeLogbackExample This is a fatal message");}
}

源码分析

jcl-over-slf4j 的工作原理
jcl-over-slf4j 的作用是将 commons-logging 的日志接口(例如 Log 和 LogFactory)转换为 SLF4J 的实现。具体地,它将 commons-logging 的日志请求转发给 SLF4J,而 SLF4J 则可以根据配置选择底层的日志框架(如 logback)。

-
步骤一:将
commons-logging转向SLF4Jjcl-over-slf4j提供了一个LogFactory类,该类实现了commons-logging的LogFactory接口,负责创建Log实例。- 该类内部,
LogFactory被静态化为SLF4JLogFactory,即它总是创建SLF4JLogFactory的实例,而不再使用commons-logging自带的实现。
-
步骤二:使用
SLF4J作为底层日志实现SLF4JLogFactory内部调用LoggerFactory.getLogger(name)来获取SLF4J的Logger实例。LoggerFactory是SLF4J提供的工厂类,负责返回一个底层日志记录器实例。- 一旦获取到
SLF4J的Logger实例,jcl-over-slf4j将其封装成commons-logging定义的Log接口的实现,即SLF4JLog或SLF4JLocationAwareLog。 SLF4JLog或SLF4JLocationAwareLog通过委托的方式将实际的日志调用转发给SLF4J的Logger,而Logger决定了最终使用哪个底层日志框架(如logback)。
1. LogFactory 的实现
在 jcl-over-slf4j 中,LogFactory 被静态化为 SLF4JLogFactory:
public abstract class LogFactory {static LogFactory logFactory = new SLF4JLogFactory();// 其他代码...
}
SLF4JLogFactory是LogFactory的实现,它负责创建Log实例。LogFactory.getLog()方法调用SLF4JLogFactory中的newInstance()方法来创建Log实例。
2. SLF4JLogFactory 和 Log 的实例化过程
SLF4JLogFactory 实现了 LogFactory 接口,并重写了 newInstance() 方法来创建 Log 对象:
public class SLF4JLogFactory extends LogFactory {public Log newInstance(String name) {Logger slf4jLogger = LoggerFactory.getLogger(name);Log newInstance;if (slf4jLogger instanceof LocationAwareLogger) {newInstance = new SLF4JLocationAwareLog((LocationAwareLogger) slf4jLogger);} else {newInstance = new SLF4JLog(slf4jLogger);}return newInstance;}
}
LoggerFactory.getLogger(name)创建了一个SLF4J的Logger实例(这背后通常是logback)。- 如果
Logger实现了LocationAwareLogger,则会使用SLF4JLocationAwareLog,它提供了更加详细的日志信息(如日志位置等)。 - 否则,使用普通的
SLF4JLog实现。
3. SLF4JLog 和 SLF4JLocationAwareLog
SLF4JLog 和 SLF4JLocationAwareLog 是 Log 接口的实现,它们负责将 commons-logging 的日志方法(如 debug(), info() 等)委托给 SLF4J 的 Logger。这两个类的源码大致如下:
public class SLF4JLog implements Log {private final Logger slf4jLogger;public SLF4JLog(Logger slf4jLogger) {this.slf4jLogger = slf4jLogger;}@Overridepublic void trace(Object message) {slf4jLogger.trace(String.valueOf(message));}@Overridepublic void debug(Object message) {slf4jLogger.debug(String.valueOf(message));}@Overridepublic void info(Object message) {slf4jLogger.info(String.valueOf(message));}// 其他日志级别方法...
}
SLF4JLocationAwareLog 类似,只不过它会获取日志的调用位置(如类名、行号等)以提供更详细的日志信息。
4. 日志输出的流程
-
通过
commons-loggingAPI 写日志:- 使用
commons-logging提供的Log接口进行日志编写(例如LogFactory.getLog()获取日志实例)。 - 调用
trace(),debug(),info()等方法。
- 使用
-
日志请求转发给
SLF4J:jcl-over-slf4j将这些日志请求转发到SLF4J的Logger实例。
-
最终日志输出:
SLF4J根据底层的配置选择具体的日志框架(如logback),并将日志输出到目标(控制台、文件等)。
小结
jcl-over-slf4j使commons-logging可以使用SLF4J作为底层日志实现,进而可以通过SLF4J配置选择logback作为实际的日志框架。LogFactory和Log被重定向到SLF4JLogFactory和SLF4JLog,这些类将日志请求转发给SLF4J,而SLF4J决定底层日志框架(如logback)的使用。- 这种方式允许我们继续使用
commons-loggingAPI 进行日志记录,而底层的日志实现却是logback,结合了两者的优势。

相关文章:
Java - 日志体系_Apache Commons Logging(JCL)日志接口库_桥接Logback 及 源码分析
文章目录 PreApache CommonsApache Commons ProperLogging (Apache Commons Logging ) JCL 集成logbackPOM依赖配置文件 logback.xml使用 源码分析jcl-over-slf4j 的工作原理1. LogFactory 的实现2. SLF4JLogFactory 和 Log 的实例化过程3. SLF4JLog 和 …...
高性能网络框架--fstack
【欢迎关注编码小哥,学习更多实用的编程方法和技巧】 Fstack 是一个高性能的网络框架,主要用于构建高性能的网络应用程序,特别是在处理大量并发连接时。它基于 Linux 的 epoll 机制,使用了多线程和事件驱动的编程模型。以下是对 …...
Unity Mesh生成Cube
1. 配置一个Cube的每个面的数据 一共是6个面,每个面包含的数据包括4个顶点的相对顶点坐标(Cube的中心为原点),法线方向,UV坐标,顶点渲染顺序,以及这个面用到的材质,因为这里是Top&am…...
2、pycharm常用快捷命令和配置【持续更新中】
1、常用快捷命令 Ctrl / 行注释/取消行注释 Ctrl Alt L 代码格式化 Ctrl Alt I 自动缩进 Tab / Shift Tab 缩进、不缩进当前行 Ctrl N 跳转到类 Ctrl 鼠标点击方法 可以跳转到方法所在的类 2、使用pip命令安装request库 命令:pip install requests 安装好了…...
Go语言方法和接收器类型详解
Go语言方法和接收器类型详解 1. 方法接收器类型 1.1 值接收器 值接收器方法不会改变接收器的状态,因为Go语言会在调用时复制接收器的值。因此,任何对接收器成员变量的修改都只会影响副本,而不会影响原始结构体实例。 type Person struct …...
Flutter:打包apk,详细图文介绍(一)
困扰了一天,终于能正常打包apk安装了,记录下打包的流程。建议参考我这篇文章时,同时看下官网的构建说明。 官网构建并发布 Android 应用详情 1、AS创建Flutter项目 2、cmd执行命令 生成一个sunluyi.jks的文件,可以自行把sunluyi替…...
Vue.js组件开发-实现动态切换菜单简单示例
在Vue.js中,实现动态切换菜单通过组件化开发和Vue的响应式数据绑定来实现。 示例: 展示如何创建一个可以动态切换菜单的Vue组件。 首先,需要定义一个Vue组件,该组件将包含菜单项和用于切换菜单的状态。 1. 创建Vue组件 <t…...
如何在 Ubuntu 22.04 上优化 Apache 以应对高流量网站教程
简介 在本教程中,我们将学习如何优化 Apache 以应对高流量网站。 当运行高流量网站时,确保你的 Apache Web 服务器得到优化对于有效处理负载至关重要。在本指南中,我们将介绍配置 Apache 以提高性能和可扩展性的基本技巧。 为高流量网站优…...
17爬虫:关于DrissionPage相关内容的学习01
概述 前面我们已经大致了解了selenium的用法,DerssionPage同selenium一样,也是一个基于Python的网页自动化工具。 DrissionPage既可以实现网页的自动化操作,也能够实现收发数据包,也可以把两者的功能合二为一。 DressionPage的…...
【HarmonyOS之旅】HarmonyOS概述(一)
目录 1 -> HarmonyOS简介 2 -> HarmonyOS发展历程 3 -> HarmonyOS技术特性 3.1 -> 硬件互助,资源共享 3.1.1 -> 分布式软总线 3.1.2 -> 分布式设备虚拟化 3.1.3 -> 分布式数据管理 3.1.4 -> 分布式任务调度 3.1.5 -> 分布式连接…...
chatwoot 开源客服系统搭建
1. 准备开源客服系统(我是用的Chatwoot ) 可以选择以下开源客服系统作为基础: Chatwoot: 开源,多语言,跟踪和分析,支持多渠道客户对接,自动化和工作流等。源码Zammad: 现代的开源工单系统。Fr…...
30分钟搭建 Typecho 个人博客教程
Typecho是一款PHP博客程序,相比于WordPress,Typecho显得更加的轻量级和简洁。现在越来越多的人倾向于用Typecho来搭建个人博客——众所周知,能跑WordPress的机器都不便宜。 Typecho是一款国人团结打造的开源博客系统,和WordPress…...
智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之7 附件(文档)
为AI聊天工具添加一个知识系统 Part1 人性化&去中心化 前情提要 这一次我们暂时抛开前面对“智能工厂的软件设计”的考虑--其软件智能 产品就是 应用程序。直接将这些思维方式和方法论 运用在其具体应用场景中。本文是其中的一个应用场景。 今天用了 一个新的AI助手工具…...
鸿蒙应用开发启航计划
以前有过简单的学习了解,但是现在工作内容的原因,要专门搞这个,因此需要更加熟练地掌握鸿蒙应用开发。 1.开发IDE -- DevEco Studio Windows环境 运行环境要求 为保证DevEco Studio正常运行,建议电脑配置满足如下要求ÿ…...
基本算法——回归
目录 创建工程 加载数据 分析属性 创建与评估回归模型 线性回归 回归树 评估 完整代码 结论 本节将通过分析能源效率数据集(Tsanas和Xifara,2012)学习基本的回归算法。我们将基 于建筑的结构特点(比如表面、墙体与屋顶面…...
深度学习——神经网络中前向传播、反向传播与梯度计算原理
一、前向传播 1.1 概念 神经网络的前向传播(Forward Propagation)就像是一个数据处理的流水线。从输入层开始,按照网络的层次结构,每一层的神经元接收上一层神经元的输出作为自己的输入,经过线性变换(加权…...
解决git push报错:not valid: is this a git repository?
今天想把代码更新到仓库里,执行git push origin master:main的时候报错:not valid: is this a git repository? 查了好多方法都没用。后来经过这篇文章的启发:https://zhuanlan.zhihu.com/p/301518109 可能是由于校园网的问题,…...
树形查询转成TreeNode[],添加新节点
在使用PrimeVue的TreeTable组件时,需要将带有层级的数据转换为TreeNode[]类型的数据结构。TreeNode是PrimeVue中定义的一个接口,用于表示树节点。通常,带有层级的数据是一个嵌套的对象或数组,其中每个对象可能包含子对象ÿ…...
【Rust自学】8.2. Vector + Enum的应用
8.2.0. 本章内容 第八章主要讲的是Rust中常见的集合。Rust中提供了很多集合类型的数据结构,这些集合可以包含很多值。但是第八章所讲的集合与数组和元组有所不同。 第八章中的集合是存储在堆内存上而非栈内存上的,这也意味着这些集合的数据大小无需在编…...
攻防世界web第十题Web_python_template_injection
这是题目,从题目上看是一个python模板注入类型的题目。 首先测试是否存在模板注入漏洞,构造http://61.147.171.105:57423/{{config}} 得到 说明存在模板注入漏洞,继续注入 构造http://61.147.171.105:57423/{{‘’.class.mro}}: 得到 再构造…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...
EEG-fNIRS联合成像在跨频率耦合研究中的创新应用
摘要 神经影像技术对医学科学产生了深远的影响,推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下,基于神经血管耦合现象的多模态神经影像方法,通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里,本研…...
零基础在实践中学习网络安全-皮卡丘靶场(第十一期-目录遍历模块)
经过前面几期的内容我们学习了很多网络安全的知识,而这期内容就涉及到了前面的第六期-RCE模块,第七期-File inclusion模块,第八期-Unsafe Filedownload模块。 什么是"遍历"呢:对学过一些开发语言的朋友来说应该知道&…...
2025-06-01-Hive 技术及应用介绍
Hive 技术及应用介绍 参考资料 Hive 技术原理Hive 架构及应用介绍Hive - 小海哥哥 de - 博客园https://cwiki.apache.org/confluence/display/Hive/Home(官方文档) Apache Hive 是基于 Hadoop 构建的数据仓库工具,它为海量结构化数据提供类 SQL 的查询能力…...
