当前位置: 首页 > news >正文

Transactional注解的方法里 spring怎么知道我用的是哪个jdbctemplate实例

>  这是一个非常好的问题,它触及了 Spring 框架中声明式事务管理(`@Transactional`)和底层资源管理(`JdbcTemplate`)如何协同工作的核心。

简单直接的回答是:**Spring 并不知道,也不关心你的方法内部使用的是哪个 `JdbcTemplate` 实例。它只关心当前线程是否已经绑定了一个数据库连接(`Connection`),而这个连接属于它正在管理的事务。**

让我们深入分解一下这个过程:

### 1. 事务管理器和数据源(The Core)

Spring 事务管理的核心是 **`PlatformTransactionManager`** 接口,最常用的实现是 **`DataSourceTransactionManager`**。

*   **`DataSourceTransactionManager`** 需要一个 **`DataSource`**(数据源)来工作。数据源是获取真实数据库连接的工厂。
*   当你配置事务管理器时,会像这样注入数据源:
    ```java
    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
    ```

### 2. `@Transactional` 的工作原理(The Magic)

当你在一个方法上标注 `@Transactional` 时,Spring 会为该方法创建一个 AOP(面向切面编程)代理。

1.  **方法调用前(Before)**:代理会通过 `DataSourceTransactionManager` 从事务同步管理器中获取一个数据库连接(或者如果已有事务,则获取当前事务的连接)。
2.  **绑定连接**:`DataSourceTransactionManager` 会将这个连接(或称为“事务资源”)**绑定到当前线程(ThreadLocal)**。这是最关键的一步。
3.  **执行你的方法**:然后,你的业务方法被调用。
4.  **方法调用后(After)**:根据方法是成功完成还是抛出异常,代理会决定是提交事务还是回滚事务。最后,它会解绑并关闭连接。

### 3. `JdbcTemplate` 如何获取连接(The Link)

现在轮到你的 `JdbcTemplate` 实例了。

*   `JdbcTemplate` 在执行任何 SQL 语句(如 `jdbcTemplate.update(...)`)时,都需要一个 `Connection`。
*   `JdbcTemplate` 的默认行为是:**如果它自身没有配置特定的 `DataSource`,它会尝试从事务同步管理器中查找当前线程是否已经绑定了一个连接。**
*   具体流程是:
    1.  `JdbcTemplate` 调用 `DataSourceUtils.getConnection(DataSource dataSource)`(而不是直接调用 `dataSource.getConnection()`)。
    2.  `DataSourceUtils.getConnection()` 会首先检查当前线程是否已经通过 `DataSourceTransactionManager` 绑定了一个属于你传入的 `dataSource` 的连接。
    3.  **如果找到了**,它就返回这个已绑定的连接。这样,`JdbcTemplate` 使用的连接就和 `@Transactional` 方法启动事务时使用的连接是**同一个**。所有操作都在同一个数据库会话和事务上下文中进行。
    4.  **如果没找到**(例如,在没有 `@Transactional` 的方法中),它才会退回到常规行为:从 `DataSource` 获取一个新的连接,执行操作,然后立即关闭它(自动提交模式)。

### 关键结论与最佳实践

1.  **Spring 不关心 `JdbcTemplate` 实例,只关心连接**:事务管理器将连接绑定到线程,`JdbcTemplate` 从线程获取同一个连接。它们通过线程(ThreadLocal)和 `DataSource` 这个“钥匙”来间接协作。

2.  **`JdbcTemplate` 必须使用与事务管理器相同的数据源**:这是整个机制能正常工作的**前提**!如果你的 `JdbcTemplate` 使用 `DataSourceA`,而 `DataSourceTransactionManager` 配置的是 `DataSourceB`,那么 `JdbcTemplate` 将无法找到事务管理器绑定的连接(因为数据源不匹配),从而导致每次操作都使用一个新的、独立的事务连接,`@Transactional` 注解会完全失效。

    **正确配置示例:**
    ```java
    @Configuration
    public class AppConfig {

        // 定义一个主数据源
        @Bean
        public DataSource dataSource() {
            // 例如使用 HikariCP
            HikariDataSource dataSource = new HikariDataSource();
            dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
            dataSource.setUsername("user");
            dataSource.setPassword("password");
            return dataSource;
        }

        // 事务管理器使用上面的数据源
        @Bean
        public PlatformTransactionManager transactionManager(DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }

        // JdbcTemplate 也使用同一个数据源
        @Bean
        public JdbcTemplate jdbcTemplate(DataSource dataSource) {
            return new JdbcTemplate(dataSource);
        }
    }
    ```

3.  **多数据源情况**:如果你的应用有多个数据库,你需要为每个 `DataSource` 配置一个对应的 `PlatformTransactionManager` 和 `JdbcTemplate`。在使用 `@Transactional` 时,你需要用 `@Transactional("transactionManagerBeanName")` 来指定使用哪个事务管理器。你的业务代码也必须注入对应数据源的 `JdbcTemplate`(通过 `@Qualifier`)。

**总结流程图:**

```
@Transactional 方法被调用
        |
        v
Spring AOP 代理介入
        |
        v
DataSourceTransactionManager 获取/创建连接,并绑定到当前线程 (ThreadLocal)
        |
        v
--> 执行你的业务方法
    |     |
    |     v
    |    jdbcTemplate.execute(SQL)
    |            |
    |            v
    |    它调用 DataSourceUtils.getConnection(dataSource)
    |            |
    |            v
    |    成功找到线程绑定的连接(属于同一个dataSource)并返回
    |            |
    |            v
    |    JdbcTemplate 使用该连接执行SQL
    |
<-- 方法执行结束(成功或异常)
        |
        v
代理根据结果提交或回滚事务
        |
        v
解绑并关闭连接
```

所以,Spring 的聪明之处在于它通过 **线程绑定(ThreadLocal)** 和 **工具类(DataSourceUtils)** 建立了一个间接的协作通道,让上层的声明式事务和下层的数据库访问模板(如 `JdbcTemplate`)无需直接耦合,却能完美地一起工作。

 

>你前面说 “JdbcTemplate 的默认行为是:如果它自身没有配置特定的 DataSource,它会尝试从事务同步管理器中查找当前线程是否已经绑定了一个连接。”   大多数情况下,jdbcTemplate是配置了DataSource的不是吗? 只不过这个datasource跟事务管理器的datasource是同一个。

您说得完全正确!我之前的表述不够精确,感谢您的指正。让我来重新澄清这个非常重要的点。

**您是对的:在绝大多数标准配置下,`JdbcTemplate` 确实会显式地配置一个 `DataSource`,而且这个 `DataSource` 必须与事务管理器使用的是同一个。**

让我用更准确的方式来描述这个协作过程:

### 正确的协作流程(修订版)

1.  **统一的数据源(The Common Key)**:
    *   你配置一个 `DataSource` Bean(例如 `HikariDataSource`)。
    *   你将这个**同一个 `DataSource` Bean** 同时注入给两个地方:
        *   `PlatformTransactionManager`(例如 `DataSourceTransactionManager`)
        *   `JdbcTemplate`

    ```java
    @Bean
    public DataSource dataSource() {
        return new HikariDataSource(...); // 单一数据源实例
    }

    @Bean
    public TransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource); // 注入上面的数据源
    }

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource); // 注入同一个数据源实例
    }
    ```

2.  **`JdbcTemplate` 的工作方式**:
    *   `JdbcTemplate` 并非“没有配置 DataSource”。它**总是**持有一个 `DataSource` 的引用,这是它工作的基础。
    *   当 `JdbcTemplate` 需要执行SQL时(例如调用 `update()`, `query()` 方法),它内部的逻辑是:
        ```java
        // JdbcTemplate 内部的简化逻辑
        public int update(final String sql) throws DataAccessException {
            return execute(new PreparedStatementCreator() { ... }, new PreparedStatementCallback<Integer>() {
                @Override
                public Integer doInPreparedStatement(PreparedStatement ps) {
                    // 关键在这里:它通过 DataSourceUtils 获取连接
                    Connection con = DataSourceUtils.getConnection(obtainDataSource());
                    // ... 使用连接执行操作
                }
            });
        }
        ```
    *   关键在于 `DataSourceUtils.getConnection(obtainDataSource())` 这个方法。这里的 `obtainDataSource()` 返回的就是你配置给 `JdbcTemplate` 的那个 `DataSource`。

3.  **`DataSourceUtils.getConnection()` 的智能行为**:
    *   这个工具方法会以传入的 `DataSource` 作为“钥匙”,去当前线程的事务上下文中进行查找:
        *   **如果存在事务**:并且事务管理器(也使用同一个 `DataSource`)已经将一个连接绑定到了当前线程,则**直接返回这个已绑定的连接**。这就确保了事务内所有操作共用同一连接。
        *   **如果不存在事务**:则 fallback 到标准行为,调用 `dataSource.getConnection()` 获取一个新连接,并在操作完成后(默认情况下)将其关闭。

### 为什么“同一个 DataSource”如此重要?

因为 `DataSourceTransactionManager` 和 `DataSourceUtils` 都是通过 **`DataSource` 实例本身作为标识符** 来匹配和管理线程绑定连接的。

*   **匹配成功**:事务管理器用 `DataSourceA` 绑定了连接 `ConnX`。`JdbcTemplate` 也用 `DataSourceA` 去获取连接。`DataSourceUtils` 看到钥匙匹配,返回 `ConnX`。✅ 事务生效。
*   **匹配失败**:事务管理器用 `DataSourceA` 绑定了连接 `ConnX`。但 `JdbcTemplate` 用的是 `DataSourceB` 去获取连接。`DataSourceUtils` 看到钥匙不匹配,认为没有现存事务连接,于是从 `DataSourceB` 获取一个新连接 `ConnY`。❌ 事务失效(因为操作在不同的连接上执行)。

### 总结

您的纠正非常关键。更准确的总结是:

**Spring 事务 (`@Transactional`) 与 `JdbcTemplate` 的协作,依赖于它们被配置为使用同一个 `DataSource` 实例。事务管理器负责将连接绑定到线程,而 `JdbcTemplate` 则通过向 `DataSourceUtils` 提供这个相同的 `DataSource` 实例作为“钥匙”,来获取到那个已被绑定的连接,从而参与到现有的事务中。**

所以,您的问题的最终答案是:**Spring 通过让 `JdbcTemplate` 和事务管理器共享同一个 `DataSource` 实例来建立关联,从而知道它们属于同一个事务上下文。**

相关文章:

Transactional注解的方法里 spring怎么知道我用的是哪个jdbctemplate实例

> 这是一个非常好的问题,它触及了 Spring 框架中声明式事务管理(`@Transactional`)和底层资源管理(`JdbcTemplate`)如何协同工作的核心。 简单直接的回答是:**Spring 并不知道,也不关心你的方法内部使用的是哪个 `JdbcTemplate` 实例。它只关心当前线程是否已经绑定…...

根据参数查询

根据参数查询<!-- 根据参数查询--><select id="listByMap" resultMap="ResultMapManage" parameterType="map">select <include refid="Manage_field"/>from manage where 1=1<include refid="Manage_wh…...

关于非侵入式脑机接口面向C端一个应用想法

目前,脑机接口行业发展如火如荼,但应用仍高度集中在医疗领域,比如运动功能康复等。这类方向不仅技术相对成熟,也更易获得商业回报——毕竟无论是医院还是患者,都更愿意为“恢复健康”买单。然而,若希望脑机接口能像汽车、手机那样,真正融入普通人的日常生活,成为不可或…...

Blelloch并行扫描算法

本文介绍了一个可以用于并行化串行累计操作的Blelloch算法,可以通过用空间换时间+并行计算的方法,来降低特定计算的时间复杂度。这里我们给出了算法原理的大致介绍,以及基于Numpy的算法代码实现。技术背景 由于现代计算机技术的发展,算法的并行能力越来越强大。所以当我们考…...

国产化DevOps生态崛起:Gitee如何赋能企业数字化转型

国产化DevOps生态崛起:Gitee如何赋能企业数字化转型 在数字化转型浪潮中,中国企业的软件研发模式正经历深刻变革。随着信创战略的深入推进,构建自主可控的DevOps工具链已成为各行业技术负责人的核心任务。作为国内领先的代码托管平台,Gitee正通过其本土化优势与开放性生态,…...

【IEEE出版】2025年电气、控制与人工智能国际学术会议(ICOECAI 2025)

2025年电气、控制与人工智能国际学术会议(ICOECAI 2025) 2025 International Conference on Electrical, Control and Artificial Intelligence 在这里看会议官网详情 2025年10月24-26日 中国广州 截稿时间:见官网 接受/拒稿通知:投稿后5天内 收录检索:IEEE Xplore、EI …...

采购计划 vs 物料需求计划(MRP),采购新手最容易搞混的两份“清单”!

很多采购新手一上手就懵了:手里同时有两份计划一个叫“采购计划” 一个叫“MRP(物料需求计划)”你一看,都是要买东西啊,干嘛分两份?https://s.fanruan.com/m15ta 很多企业常常把这两份清单混为一谈,结果掉进坑里——采购超预算、缺料、库存积压……问题全来了。 今天,我…...

P10299 [CCC 2024 S5] Chocolate Bar Partition

题目传送门DP、状态设计优化。题意 将一个 \(2 \times N(N \le 2\times 10^5)\) 的矩阵分为尽可能多的联通块,使得每个联通块中的数的平均值都相等,求最多可以将矩阵分为多少个联通块。 题解 显然是 DP,并且复杂度要在 \(O(N \log N)\) 或者 \(O(N)\)。 平均值相等很难维护,…...

实用指南:企业实施数字化转型时常见的挑战

实用指南:企业实施数字化转型时常见的挑战pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !impo…...

当ARMxy+AI边缘计算落地水泵行业就碰撞出怎样的火花?

水泵,这个看似再普通不过的设备,正在城市供水、楼宇二次供水、农业灌溉、工业循环水等场景里默默运行。它们是“水的搬运工”,也是能耗大户、运维难点。然而,在 数字化浪潮下,水泵行业也开始面临三个迫切问题:能耗高:传统 PID 调节方式,难以精准匹配用水曲线;运维难:…...

QN8035 FM芯片驱动开发

一、驱动开发基础配置 1.1 硬件接口配置通信协议:标准I2C接口(设备地址:写0x20/读0x21) 关键引脚: SDA/SCL:I2C数据线(需接4.7kΩ上拉电阻) XTAL_IN/XTAL_OUT:外部晶振输入(支持16MHz/24MHz) RDS_IN:RDS数据输入(需连接解码芯片)1.2 寄存器配置要点 #define QN80…...

再见 Claude Code,我选择了 Codex!真香!!

大家好,我是R哥。 最近,我放弃 Claude Code 了,选择了 CodeX,真香! 为什么放弃 Claude Code? 第一,是因为 Claude 全面封禁了中国控股公司使用,让我很不爽。推荐阅读:真行!Claude 全面封禁中国。。 第二,我用不惯 Claude,我一直用的 ChatGPT,为了使用 Claude Code…...

2025中国DevOps工具生态全景:本土化突围与智能化跃迁

2025中国DevOps工具生态全景:本土化突围与智能化跃迁 在全球数字化转型浪潮席卷之下,DevOps工具市场正以年复合增长率24%的速度扩张。中国信通院最新数据显示,2023年国内DevOps平台市场规模达58亿元,其中本土解决方案占比首次突破40%。这场由自动化向智能化的产业升级中,工…...

字符串转 python 对象 eval

s = [ { label: "苹果", value: "origin_event_data", icon: "icon-a", color: "#409EFF", bgColor: "#ECF5FF", borderColor: "#D9ECFF", }, { label: "橘子…...

蛋白多序列比对美化

1、用snapgene进行多序列比对,导出alin文件 2、用python进行多序列比对美化点击查看代码 from Bio import AlignIO import os# ====== 用户参数 ====== alignment_file = "比对.fa" # 输入比对文件(fasta/clustal) alignment_format = "fasta" html_…...

Gitee推出Remote mcp-gitee:云端MCP服务开启智能协作新时代

Gitee推出Remote mcp-gitee:云端MCP服务开启智能协作新时代 中国领先的代码托管平台Gitee近日正式发布Remote mcp-gitee服务,这项基于云端的MCP Server解决方案将彻底改变开发团队的协作方式。作为三月发布的本地版MCP Server的云端升级版本,Remote mcp-gitee无需复杂部署即…...

Gitee DevOps平台:驱动中国企业数字化转型的核心引擎

​# Gitee DevOps平台:驱动中国企业数字化转型的核心引擎 在全球数字化浪潮席卷的今天,软件开发与运维的效率直接决定了企业的市场竞争力。作为国内领先的一站式DevOps平台,Gitee通过其本土化优势和技术创新能力,正在帮助数千家企业实现研发效能的显著提升,成为中国企业数…...

10 类多布局扫描图像数据集:支撑 OCR 精度提升与 VLM 微调,覆盖广告 / 简历 / 论文等场景的计算机视觉训练数据

一、引言与背景 在人工智能与计算机视觉技术深度融合的当下,光学字符识别(OCR)与视觉语言模型(VLM)已成为文档智能处理领域的核心支撑技术,广泛应用于金融票据识别、企业文档管理、学术数据挖掘等诸多场景。然而,现有模型在面对真实世界中多样的文档类型、复杂的排版布局…...

国产化Excel开发组件Spire.XLS教程:C# 轻松将 DataSet 导出到 Excel

在 C# 开发中,DataSet 常用于管理内存中的数据,通常来源于数据库查询或系统集成过程。本文将介绍如何使用 Spire.XLS for .NET 在 C# 中导出 DataSet 到 Excel,包括创建 Excel 文件、将多个 DataTable 分别写入不同工作表、应用格式化,以及处理大数据量导出等场景。在 C# 开…...

Mysql:Docker的Mysql容器加载Levenshtein 距离算法脚本,实现“相似度匹配”

前言MySQL自带的Like函数是“包含匹配”,即查询目标需要包含指定条件字符才会匹配到;而“相似度匹配”是匹配目标与条件字符是否相似,例如:“这是北京大学”与 “北大”就会有相似度,这样就会查出这类数据信息,只不过它的相似度分数值比较低而已。为了实现这个“相似度匹…...

树链剖分

树链剖分介绍 树链剖分是什么?主要用来处理什么问题 树链剖分(Heavy-Light Decomposition, HLD)。1. 树链剖分的定义 树链剖分是一种 把树分解成若干条链 的算法技巧。 在一棵树上,我们把每个节点的“重儿子”挑出来(通常是子树规模最大的儿子),把它和父亲连成 重边,其…...

【2025-09-17】慢慢得到

20:00人的一切都应该是美的,无论面孔,还是衣裳、心灵或思想。——契诃夫连续两天都没能送孩子上学,因为约了客户都是早上9点半开会,所以必须得提前出门。提前的时间刚好碰上何太的上班时间,然后就一起出门了。考虑到在客户现场停车不方使,于是就赠何太的车去到市区再打车…...

Excel处理控件Aspose.Cells教程:如何使用Python在Excel中创建下拉列表

Excel 中的下拉列表是数据验证最实用的功能之一。在本教程中,我们将向您展示如何借助Aspose.Cells使用 Python 在 Excel 中创建下拉列表。Excel 中的下拉列表是数据验证最实用的功能之一。它允许您将用户输入限制为预定义的选项,减少错误并保持数据输入的一致性。无论您将其称…...

STM32的电子钟功能实现

一、系统架构设计 1.1 硬件组成框图 graph TD A[STM32F103C8T6] --> B[OLED0.96] A --> C[按键矩阵] A --> D[蜂鸣器] B --> I2C总线 C --> EXTI中断 1.2 核心模块划分时间管理:SysTick定时器中断(1ms精度) 显示驱动:SSD1306 OLED中文显示 用户交互:4x4矩阵…...

kylin V11安装mysql8.0.41(glibc2.28)

环境:OS:kylin V11mysql:8.0.41 glibc2.28查看系统glibc版本[root@localhost soft]# ldd --versionldd (GNU libc) 2.38Copyright (C) 2023 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for…...

__cpuid

__cpuid 是一个内联汇编函数,用于在 C 和 C++ 代码中获取有关 CPU 信息的指令集扩展。 这条指令利用了 x86 和 x86_64 处理器的 CPUID 指令,通过查询处理器支持的功能、型号、 制造商等硬件信息,为开发者提供了对 CPU 的低层访问。 /* x86-64 uses %rbx as the base registe…...

Gitee崛起:国产代码托管平台如何重塑企业研发效能新格局

Gitee崛起:国产代码托管平台如何重塑企业研发效能新格局 在全球数字化转型浪潮下,代码托管平台已从单纯的版本控制工具进化为企业研发效能的核心枢纽。随着国内企业对数据主权、研发自主可控需求的提升,国产代码托管平台正迎来前所未有的发展机遇。在这一背景下,Gitee凭借其…...

字节SQL数据库开发手册

1.前言:SQL在字节跳动数据驱动中的核心地位。2.SQL基础与字节跳动最佳实践。2.1.字节跳动常用SQL语法与规范。2.2.性能优化:高效SQL编写技巧..2.3.窗口函数在复杂分析中的应用。3.SQL在字节跳动核心业务场景的应用..3.1.用户增长分析..3.1.1.案例:用户留存率与活跃度分析..3…...

完整教程:视频上传以及在线播放

完整教程:视频上传以及在线播放pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; fon…...

C++ STL 常用算法

C++ 标准模板库(STL)提供了丰富的算法库(定义在 <algorithm> 头文件中),这些算法多为通用函数模板,可配合容器和迭代器高效操作数据。 1、非修改序列算法 这些算法不会改变它们所操作的容器中的元素。 1.1 find 和 find_iffind(begin, end, value):查找第一个等于…...

Gitee:中国开发者生态的成长引擎与数字化转型的加速器

Gitee:中国开发者生态的成长引擎与数字化转型的加速器 在中国软件产业快速发展的今天,Gitee作为本土领先的代码托管与协作开发平台,正以独特的本土化优势和技术创新,成为推动中国开发者生态繁荣的关键力量。从初创团队到大型企业,Gitee提供的全流程开发解决方案正在重新定…...

【IEEE出版|五邑大学主办|连续四年EI检索】第五届电子信息工程与计算机技术国际学术会议(EIECT 2025)

随着科学技术的高速发展,计算机技术革新日新月异,其智能化、网络化使人们的生活更加便捷。而电子信息工程依托计算机技术,将数据等逻辑数字转化为可解读信息,渗入到社会的方方面面,使电子及信息产品不断创新,让电子信息工程具备更广阔的前景,两者的相互结合也必将成为未…...

tightvnc使用记录

用起来感觉还行,主要是支持XP系统,不知道为什么XP系统的好像有bug,远程桌面很不稳定,我遇到的情况是,业务XP系统放在ESXI上的,XP远程桌面经常不稳定,容易遇到一远程就远程画面一闪而过的情况,实测发现进ESXI把XP系统已登录的用户注销,再mstsc远程就没问题了。 由于XP远…...

高科战神全家软件怎么设置

高科战神全家软件的设置方法主要包括安装拨号助手App、蓝牙连接设备以及拨号操作设置,具体步骤可参考以下详细说明。‌1.高科战神全家软件设置步骤‌‌安装拨号助手App‌。通过安卓手机安装高科战神拨号助手App,建议联系(V信2081003456)获取下载链接。‌‌安装完成后,打开Ap…...

简单数论函数求和题目的一些技巧

\(\sigma (xy)\) 相关 结论:\(\sigma_0(xy) = \sum\limits_{i|x} \sum\limits_{j|y} [\gcd(i, j) = 1]\)\(\sigma_1(xy) = \sum\limits_{i|x} \sum\limits_{j|y} [\gcd(i, j) = 1] \frac {xj} i\)\(\sigma_k(xy) = \sum\limits_{i|x} \sum\limits_{j|y} [\gcd(i, j) = 1] (\fr…...

c# grpc

asp.net 程序安装nuget包: Grpc.AspNetCore, Grpc.AspNetCore.Server.Reflection 修改 program 设置:<ItemGroup> <Protobuf Include="**/*.proto" OutputDir="Protos" CompileOutputs="false" GrpcServices="Server" /&…...

win10任务栏频繁卡死、转圈

这一部分是笔者碎碎念,可以直接跳过看下面的解决办法,最近这一段时间,频繁遇到win10任务栏卡死,不断转圈,非常影响工作效率。 心想最近是不是安装了什么软件,是什么软件服务导致的吗,去msconfig禁用了非系统服务后还是这样,又尝试卸载了最近的一部分Windows系统更新,依…...

Typora Markdown 编辑快捷键大全(优化补充版)

Typora Markdown 编辑快捷键大全(优化补充版) 说明 本文档基于历史对话内容整理,补充了使用场景说明、操作细节及实用技巧,覆盖 Typora 中 Markdown 编辑的核心快捷键(Windows/Linux 与 Mac 版本对应),适用于日常文档编辑、笔记整理等场景,可直接保存为 Markdown 文件或…...

第二届数字经济与计算机科学国际学术会议(DECS 2025)

第二届数字经济与计算机科学国际学术会议(DECS 2025) 2025 2nd International Conference on Digital Economy and Computer Science 第二届数字经济与计算机科学国际学术会议(DECS 2025)将于2025年10月17日至10月19日在中国武汉召开。本次会议旨在汇聚来自全球的学者、研究…...

文件摆渡系统案例分享:医院如何构建高效内外网文件交换通道

文件摆渡系统对于医院来说,是尤为重要的一种传输工具,大部分医院都是用网闸做的内外网隔离,文件摆渡系统的核心目的是在保障医疗数据安全的前提下,实现内部业务系统与外部网络之间的高效、合规文件传输。本文中,我们就介绍一家三甲医院的内外网文件摆渡建设案例。建设背景…...

淘天一面

6.请介绍一下线程池的一些核心参数。 7.你说到拒绝策略,请举几个拒绝策略的例子。 8.我看你之前用过ES引擎,请问你怎么理解ES搜索引擎里面的倒排索引和正排索引? 9.一般什么情况下会用正排索引? 10.悲观锁和乐观锁在思想上有什么区别? 11.你之前在线上有没有遇到过内存泄漏…...

利用小波变换对跳频信号进行参数估计

跳频信号是一种扩频通信技术,其载波频率在多个频点之间按照伪随机序列跳变。小波变换因其良好的时频局部化特性,非常适合分析这类非平稳信号。 跳频信号模型 跳频信号可以表示为: \[s(t) = A \exp\left[j(2\pi f_n t + \phi_n)\right], \quad t \in [t_n, t_{n+1}] \]其中:…...

【Qt】Window环境下搭建Qt6、MSVC2022开发环境(无需提前安装Visual Studio) - 实践

【Qt】Window环境下搭建Qt6、MSVC2022开发环境(无需提前安装Visual Studio) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…...

编写测试用例技巧

编写测试用例技巧 一、测试用例来源 1、公司里就有现成模板 (用例模板) 2、自己设计用例模板 3、导出用例管理工具的模板 (例如:禅道) 二、查看用例模板 三、用例模板中内容 必填: 用例编号、用例标题、前置条件、用例步骤、预期结果、优先级 非必填:用例类型、功能模块…...

牛客刷题-Day1

动态规划1:线性dp、背包问题,区间 https://ac.nowcoder.com/acm/contest/24213?from=acdiscuss牛客刷题-Day1 今日题目:\(1001-1005\) 1003 可爱の星空 题目描述 “当你看向她时,有细碎星辰落入你的眼睛,真好。”——小可爱 在一个繁星闪烁的夜晚,卿念和清宇一起躺在郊外…...

TENGJUN防水TYPE-C 16PIN连接器技术解析:从结构设计到认证标准的全面解读 - 实践

TENGJUN防水TYPE-C 16PIN连接器技术解析:从结构设计到认证标准的全面解读 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &quo…...

第三届人工智能与自动化控制国际学术会议(AIAC 2025)

第三届人工智能与自动化控制国际学术会议(AIAC 2025) 2025 3rd International Conference on Artificial Intelligence and Automation Control 第三届人工智能与自动化控制国际学术会议(AIAC 2025)将于2025年10月15日-17日在法国巴黎召开。 随着技术的迅猛发展,人工智能与…...

图纸安全外发平台全解析

内容概要 图纸安全外发平台是一个专为解决企业图纸外发难题而设计的系统。简单来说,图纸安全外发平台是什么?它就是一个集数据加密、访问控制于一体的在线平台,旨在保障设计图纸在传输过程中的安全性。其中,像Ftrans B2B企业间⽂件安全交换系统这样的专业平台,更是以其高效…...

webshell流量 - voasem

菜刀、蚁剑、冰蝎、哥斯拉是常见的webshell管理工具。 在攻防演练中,了解其常见webshell管理工具的流量特征对防守方来说十分重要。常见的webshell也在不断发展以绕过安全设备waf的检测,其流量特征也在不断演变,我们应该与时俱进的进行了解分析。 简单的来说,菜刀和蚁剑采用…...

软件测试分类

(属于软件测试基础知识) (了解) 开发模型: 1.敏捷开发模型: 这是一种新的模型, 前面的几种都是属于传统型。它能适应快速需求变化,交付周期短,轻量级的开发模式。 2.增量开发模式: 项目被划分为一系列的增量,每一个增量都交付整个项目需求中的一部分功能。需求按优先…...