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

EF Core 与 MySQL:日志和调试详解

本文将详细讲解EF Core与MySQL的日志和调试,分为三个部分:EF Core日志配置、MySQL日志查看以及使用调试工具分析查询性能。

1. 配置 EF Core 日志

基本日志配置

// 在DbContext配置中启用日志记录
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{var connectionString = "server=localhost;database=efcoredb;user=root;password=yourpassword";optionsBuilder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)).EnableSensitiveDataLogging() // 记录参数值(仅开发环境).EnableDetailedErrors() // 提供更详细的错误信息(仅开发环境).LogTo(Console.WriteLine, LogLevel.Information) // 输出到控制台
        .LogTo(message => Debug.WriteLine(message), // 输出到调试输出
            LogLevel.Debug);
}

使用 ILoggerFactory(ASP.NET Core 应用)

// 在Program.cs或Startup.cs中配置
public void ConfigureServices(IServiceCollection services)
{services.AddDbContext<ApplicationDbContext>(options =>{var connectionString = Configuration.GetConnectionString("DefaultConnection");options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)).EnableSensitiveDataLogging(Environment.IsDevelopment()).EnableDetailedErrors(Environment.IsDevelopment()).UseLoggerFactory(LoggerFactory.Create(builder =>{builder.AddConsole().AddDebug().AddFilter(DbLoggerCategory.Database.Command.Name, LogLevel.Information);}));});
}

自定义日志过滤器

// 只记录执行时间超过100ms的查询
optionsBuilder.LogTo(message =>{if (message.Contains("CommandExecuted") && message.Contains("Elapsed")){var elapsedMatch = Regex.Match(message, @"Elapsed:(\d+)ms");if (elapsedMatch.Success && int.Parse(elapsedMatch.Groups[1].Value) > 100){Console.WriteLine($"慢查询: {message}");}}},LogLevel.Information
);

结构化日志记录

// 使用Serilog等结构化日志框架
Log.Logger = new LoggerConfiguration().MinimumLevel.Information().WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}").WriteTo.File("logs/efcore-.txt", rollingInterval: RollingInterval.Day).CreateLogger();services.AddDbContext<ApplicationDbContext>(options =>
{options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)).LogTo(Log.Logger.Information, LogLevel.Information).LogTo(Log.Logger.Warning, LogLevel.Warning).LogTo(Log.Logger.Error, LogLevel.Error);
});

2. 查看 MySQL 日志

启用和配置 MySQL 日志

-- 查看当前日志配置
SHOW VARIABLES LIKE '%log%';-- 启用通用查询日志(记录所有查询)
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/var/log/mysql/general.log';-- 启用慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
SET GLOBAL long_query_time = 1; -- 超过1秒的查询视为慢查询-- 启用二进制日志(用于复制和恢复)
SET GLOBAL log_bin = 'ON';-- 启用错误日志(通常默认开启)
SHOW VARIABLES LIKE 'log_error';

在 MySQL 配置文件中设置日志

# /etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# 通用查询日志
general_log = 1
general_log_file = /var/log/mysql/general.log# 慢查询日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1# 错误日志
log_error = /var/log/mysql/error.log# 二进制日志
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M

分析 MySQL 日志

# 查看慢查询日志
sudo tail -f /var/log/mysql/slow.log# 使用mysqldumpslow分析慢查询日志
sudo mysqldumpslow /var/log/mysql/slow.log# 按执行时间排序查看最慢的查询
sudo mysqldumpslow -s t /var/log/mysql/slow.log# 查看通用查询日志
sudo tail -f /var/log/mysql/general.log# 使用pt-query-digest分析查询(需要安装Percona Toolkit)
sudo pt-query-digest /var/log/mysql/slow.log

在应用程序中记录 MySQL 性能指标

// 创建性能监控服务
public class MySqlPerformanceMonitor
{private readonly ApplicationDbContext _context;private readonly ILogger<MySqlPerformanceMonitor> _logger;public MySqlPerformanceMonitor(ApplicationDbContext context, ILogger<MySqlPerformanceMonitor> logger){_context = context;_logger = logger;}public async Task MonitorQueryPerformanceAsync(Func<Task> databaseOperation, string operationName){var stopwatch = Stopwatch.StartNew();try{await databaseOperation();stopwatch.Stop();if (stopwatch.ElapsedMilliseconds > 1000) // 超过1秒的记录为警告
            {_logger.LogWarning("慢查询检测: {Operation} 耗时 {ElapsedMs}ms", operationName, stopwatch.ElapsedMilliseconds);}else if (stopwatch.ElapsedMilliseconds > 500) // 超过0.5秒的记录为信息
            {_logger.LogInformation("查询性能: {Operation} 耗时 {ElapsedMs}ms", operationName, stopwatch.ElapsedMilliseconds);}}catch (Exception ex){stopwatch.Stop();_logger.LogError(ex, "查询执行失败: {Operation} 耗时 {ElapsedMs}ms", operationName, stopwatch.ElapsedMilliseconds);throw;}}
}

3. 使用调试工具分析查询性能

使用 EF Core 的诊断工具

// 启用诊断监听器
DiagnosticListener.AllListeners.Subscribe(new EfCoreDiagnosticListener());public class EfCoreDiagnosticListener : IObserver<DiagnosticListener>
{public void OnNext(DiagnosticListener value){if (value.Name == DbLoggerCategory.Name){value.Subscribe(new EfCoreObserver());}}public void OnCompleted() { }public void OnError(Exception error) { }
}public class EfCoreObserver : IObserver<KeyValuePair<string, object>>
{public void OnNext(KeyValuePair<string, object> value){if (value.Key == RelationalEventId.CommandExecuted.Name){var command = (IDbCommand)value.Value.GetType().GetProperty("Command").GetValue(value.Value);var duration = (TimeSpan)value.Value.GetType().GetProperty("Duration").GetValue(value.Value);if (duration.TotalMilliseconds > 100){Debug.WriteLine($"慢查询: {command.CommandText} 耗时: {duration.TotalMilliseconds}ms");}}}public void OnCompleted() { }public void OnError(Exception error) { }
}

使用 Application Insights 监控

// 在Startup.cs中配置Application Insights
public void ConfigureServices(IServiceCollection services)
{services.AddApplicationInsightsTelemetry(Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"]);services.AddDbContext<ApplicationDbContext>(options =>{options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)).EnableSensitiveDataLogging().AddApplicationInsightsDiagnostics(); // 如果支持的话
    });
}// 或者手动记录依赖跟踪
public async Task<List<Product>> GetProductsAsync()
{var operation = telemetryClient.StartOperation<DependencyTelemetry>("MySQL Query");operation.Telemetry.Type = "MySQL";operation.Telemetry.Data = "SELECT * FROM Products";try{var products = await _context.Products.ToListAsync();operation.Telemetry.Success = true;return products;}catch (Exception ex){operation.Telemetry.Success = false;telemetryClient.TrackException(ex);throw;}finally{telemetryClient.StopOperation(operation);}
}

使用 MiniProfiler

// 安装MiniProfiler.EntityFrameworkCore
// 在Startup.cs中配置
public void ConfigureServices(IServiceCollection services)
{services.AddMiniProfiler(options =>{options.RouteBasePath = "/profiler";options.ColorScheme = StackExchange.Profiling.ColorScheme.Auto;options.EnableMvcFilterProfiling = true;options.EnableMvcViewProfiling = true;options.TrackConnectionOpenClose = true;}).AddEntityFramework();
}public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{app.UseMiniProfiler();// ... 其他中间件
}// 在视图中添加MiniProfiler
@inject StackExchange.Profiling.MiniProfiler Profiler
@MiniProfiler.RenderIncludes(Profiler)

使用 JetBrains dotTrace 或 dotMemory

// 在代码中添加性能分析点
public async Task<List<Product>> GetExpensiveProductsAsync()
{// 使用JetBrains Profiler API(需要安装JetBrains.Profiler.Api包)
    JetBrains.Profiler.Api.MeasureProfiler.StartCollectingData();try{var products = await _context.Products.Where(p => p.Price > 100).Include(p => p.Category).ToListAsync();return products;}finally{JetBrains.Profiler.Api.MeasureProfiler.SaveData();}
}

使用 MySQL EXPLAIN 分析查询计划

// 在代码中执行EXPLAIN分析查询
public async Task<string> ExplainQueryAsync(IQueryable query)
{var sql = query.ToQueryString();var explainSql = $"EXPLAIN {sql}";using (var command = _context.Database.GetDbConnection().CreateCommand()){command.CommandText = explainSql;_context.Database.OpenConnection();using (var result = await command.ExecuteReaderAsync()){var explanation = new StringBuilder();while (await result.ReadAsync()){for (int i = 0; i < result.FieldCount; i++){explanation.AppendLine($"{result.GetName(i)}: {result.GetValue(i)}");}explanation.AppendLine("---");}return explanation.ToString();}}
}// 使用方式
var query = _context.Products.Where(p => p.Price > 100);
var explanation = await ExplainQueryAsync(query);
Console.WriteLine(explanation);

使用 Visual Studio 的调试工具

// 在Visual Studio中使用诊断工具
// 1. 打开"诊断工具"窗口(调试 -> 窗口 -> 显示诊断工具)
// 2. 开始调试并记录性能
// 3. 分析CPU使用率、内存分配和数据库查询// 使用条件断点调试特定查询
var products = _context.Products.Where(p => p.Price > 100) // 在这里设置条件断点:p.Price > 1000
    .ToList();// 使用即时窗口测试查询
// 在调试期间,可以在即时窗口中执行:
// _context.Products.Where(p => p.Price > 100).ToList()

创建自定义性能分析中间件

// ASP.NET Core中间件,用于记录所有数据库操作
public class QueryPerformanceMiddleware
{private readonly RequestDelegate _next;private readonly ILogger<QueryPerformanceMiddleware> _logger;public QueryPerformanceMiddleware(RequestDelegate next, ILogger<QueryPerformanceMiddleware> logger){_next = next;_logger = logger;}public async Task InvokeAsync(HttpContext context, ApplicationDbContext dbContext){var stopwatch = Stopwatch.StartNew();var originalQueryTrackingBehavior = dbContext.ChangeTracker.QueryTrackingBehavior;try{// 设置为NoTracking以提高性能,除非需要修改数据dbContext.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;await _next(context);}finally{stopwatch.Stop();dbContext.ChangeTracker.QueryTrackingBehavior = originalQueryTrackingBehavior;// 记录请求处理时间和数据库查询统计_logger.LogInformation("请求 {Method} {Path} 处理时间: {ElapsedMs}ms, 数据库查询次数: {QueryCount}",context.Request.Method, context.Request.Path, stopwatch.ElapsedMilliseconds,dbContext.GetQueryCount());}}
}// 扩展方法获取查询次数
public static class DbContextExtensions
{public static int GetQueryCount(this DbContext context){// 这种方法可能不准确,更好的方式是使用诊断监听器return 0; // 实际实现需要更复杂的方法
    }
}// 在Startup.cs中注册中间件
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{app.UseMiddleware<QueryPerformanceMiddleware>();// ... 其他中间件
}

总结

本教程详细介绍了EF Core与MySQL的日志记录和调试技术,包括:

  1. 配置EF Core日志:

    • 基本日志配置和敏感数据记录

    • 使用ILoggerFactory集成ASP.NET Core日志系统

    • 自定义日志过滤器和结构化日志记录

  2. 查看MySQL日志:

    • 启用和配置各种MySQL日志(通用查询、慢查询、错误日志)

    • 分析MySQL日志以识别性能问题

    • 在应用程序中集成MySQL性能监控

  3. 使用调试工具分析查询性能:

    • EF Core诊断工具和监听器

    • Application Insights集成

    • MiniProfiler实时性能分析

    • JetBrains专业分析工具

    • MySQL EXPLAIN查询计划分析

    • Visual Studio调试工具

    • 自定义性能分析中间件

通过这些工具和技术,我们可以:

  • 识别和解决性能瓶颈

  • 优化数据库查询

  • 监控应用程序的健康状况

  • 诊断和解决生产环境中的问题

建议在开发环境中启用详细日志记录和性能分析,而在生产环境中则使用更保守的配置,只记录警告和错误,并定期检查慢查询日志以识别需要优化的查询。

相关文章:

EF Core 与 MySQL:日志和调试详解

本文将详细讲解EF Core与MySQL的日志和调试,分为三个部分:EF Core日志配置、MySQL日志查看以及使用调试工具分析查询性能。 1. 配置 EF Core 日志 基本日志配置// 在DbContext配置中启用日志记录 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuil…...

使用镜像源解决github拉取代码问题 - GD

命令行输入以下语句: git config --global url."https://gitclone.com/github.com/".insteadOf "https://github.com/" 取消设置: git config --global --unset url."https://gitclone.com/github.com/".insteadOf 参考:[https://www.cnblogs…...

日记

redis的运行指令 redis-server.exe redis.windows.conf 开始大创的实施...

主机连接虚拟机和hbase的命令

telnet+ip+端口号 主机hbase...

类和面向对象

概述:语言特性有二,其一为既面向过程又面向对象,其二为用类和对象表示数据和操作数据的,c++将操作和数据汇聚成类和对象何为对象?即世间的一切事物。假如一个对象为feijib,则可以说这个为类feijib,难道类是对象的别名?按下不表。类具有一些属性和方法,即feijjib是硅胶…...

PHP转Go系列 | PHP8 这些新函数让你眼前一亮

说实话,PHP8 中的这三个新函数让字符串检查,变得非常直观,就像让代码说人话一样。这对我们程序员来说是一件大好事,提升可读性,减少 Bug 量,升级到 PHP8 之后,再也不用维护类似的屎山代码了。大家好,我是码农先森。 在 PHP8 之前做字符串相关的检查操作比较麻烦,可读性…...

代码随想录算法训练营第二天 |209.长度最小的子数组,59. 螺旋矩阵 II

209.长度最小的子数组 思路:快慢指针的思想,当快指针一直移动的时候,那么数列一定是递增的,且我们要求的是连续的数组,所以我们其实可以一次性用一个for就给全部遍历完成。当我们这个区间的值大于了target,我们就可以开始移动我们的慢指针了,直到我们的慢指针到达快指针…...

mac更新or安装homebrew失败

错误信息:fatal: unable to access https://github.com/Homebrew/brew/: LibreSSL SSL_read: error:02FFF03C:system library:func(4095):Operation timed out, errno 60可以用命令:/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew…...

Typescript中闭包的原理 - 教程

Typescript中闭包的原理 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font…...

CF2048H Kevin and Strange Operation

操作的自由度很大,打表可以发现限制操作的位置只增不减也是对的。 考虑怎么判断一个串 \(t\) 是否合法。 观察到对于一个位置 \(i\) 满足 \(s_i=0\),想要通过操作使 \(s_i\) 变为 \(1\),只需要 \(>i\) 的位置删掉了 \(\ge c_i\) 个数。其中 \(c_i\) 为 \(>i\) 的第一个…...

Hadoop本地库加载问题分析与解决方案

主要问题分析 ​​本地库加载警告​​: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 这表明Hadoop无法正确加载本地优化库,将回退到纯Java实现,性能可能受影响 ​​栈保护警告​​…...

GO基础总结

环境搭建 基本语法 参见:https://www.cnblogs.com/vonlinee/p/19005628 工具链...

Visual Studio 离线安装0x80131509

Visual Studio 2026在本月发布了,它最大的特点是集成了GitHub Copilot,内置AI编程,空了要尝尝鲜(使用过Visual Studio Code的Copilot,还是挺有用的)。目前,VS2022很少使用,像VS2012一样被跳过,主要使用VS2019,甚至有时需要VS2010编译。分享一个离线安装Visual Studio…...

Oracle备份恢复:backup as copy保留文件名不变化,只更改路径名

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。Oracle备份恢复:backup as copy保留文件名不变化,只更改路径名 有些时…...

读书笔记:数据库中的预连接神器:位图连接索引

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学习《Expert Oracle Database Architecture Techniques and…...

故障处理:CRS无法随操作系统自动启动故障案例分享

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。今天分享一个前几天网友遇到的集群环境中CRS无法随操作系统自动启动,但…...

02020401 EF Core基础01-EF Core简介和开发环境搭建、实体类、配置类、继承DbContex的类、Migration包的使用

02020401 EF Core基础01-EF Core简介和开发环境搭建、实体类、配置类、继承DbContex的类、Migration包的使用 1. EF Core简介(视频3-1)本课程需要你有数据库、SQL等基础知识。关系数据库:MySql、SQL Server、Oracle等。表(字段/列),表与表之间通过外键关联。对象数据库:…...

专用通路方式

-取址周期 1.从pc取址到mar (pc)->mar 此时c0有效 2.把刚才的值交给内存 (mar)->内存 c1 3.让内存读取mar中保存的值 1->r 4.让mdr获取内存刚刚读取的mar中保存的代码值 MEM(MAR)->MDR C2 5.再让IR(指令寄存器)获取MDR中的值 (MDR)->IR C3 6.(PC)+1=PC 7.最…...

typeof()

C# 中的 typeof() 是啥?一句话讲清楚:typeof() 就是“问编译器:这个类型长啥样?”它不是运行时去查对象,而是编译时就确定你写的那个“类名、接口名、结构名”到底是谁,然后返回一个叫 Type 的对象,这个对象里装满了这个类型的“身份证信息”。举个接地气的例子: 你写:…...

【未完成】2025.9 做题记录

CF1310C CF616F CF1065G CF1536F. Omkar and Akmar *2600 题意 Alice 和 Bob 在一个 \(n\) 个格子的环上玩游戏,环上的格子编号为 \(1\sim n\)。 每一轮中,玩家可选择一个空格子填入字母 A 或 B,同时要求不能存在两个相邻的格子内的字母相同。若没有合法操作,则游戏结束,当…...

2025.8 做题记录

P4064 [JXOI2017] 加法 蓝 题意 可怜有一个长度为 \(n\) 的正整数序列 \(A\),但是她觉得 \(A\) 中的数字太小了,这让她很不开心。 于是她选择了 \(m\) 个区间 \([l_i,r_i]\) 和两个正整数 \(a,k\)。她打算从这 \(m\) 个区间里选出恰好 \(k\) 个区间,并对每个区间执行一次区间…...

关于 “Thinking Machines Lab首次发长文” 的一些知识的学习和补充

1. 前言砚上三五笔,落墨鹧鸪啼原文链接: https://thinkingmachines.ai/ 相关分析链接:https://www.gongjiyun.com/blog/2025/9/fu1xw1spci9vnokjipecs9y9nzn/最近看到一篇名为《击败 LLM 推理中的非确定性:从“玄学”到可控》的文章,这里将一些知识盲区简单记录下。 如有不…...

CF1630F 题解 | 网络流

传送门 题意 给你一个长度为 \(n\) 的序列 \(a\),构建一个无向图:若 \(a_i | a_j\),则在 \(i\) 和 \(j\) 中连边。 求最少删除多少个点,才能使得剩下的图是二分图。 思路 首先,我们知道倍数关系是一个偏序关系,即 \(a_i | a_j, a_j | a_k \rightarrow a_i | a_k\)。 所以…...

攻防世界-secret-galaxy-300 - xxx

先查壳,无壳,32位程序先运行一下这个exe程序,发现闪一下就消失了,也没有什么提示字符串可查看。打算先去od里面运行看看 打开后没看到什么,查看字符串一时间也没看出什么,不过这个task函数倒是让控制台输出一堆奇怪的东西说实话看了之后有点懵,不过没关系,既然OD没什么…...

实用指南:LeetCode 面试经典 150_哈希表_单词规律(41_290_C++_简单)

实用指南:LeetCode 面试经典 150_哈希表_单词规律(41_290_C++_简单)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier …...

数据库

数据库操作DDL 创建 create database 数据库名查询 show databases ; show database like 数据库名;修改 alter database 数据库名 set 字段名 类型 约束;删除 drop database 数据库名;使用 use 数据库名;数据库表操作DDL 创建 create table 表名(字段 类型 索引);查看表…...

代码随想录算法训练营第二天 | leetcode 209

长度最小的子数组(没做出来) 题目要求:寻找一个数组中满足大于等于目标要求的最小子数组 解题思路:返回结果可能是不存在,所以需要定义一个合适的初始值,可以使用java的最大数Integer.MAX_VALUE,然后使用滑动窗口寻找满足条件的子数组,这时还需要对之前的数进行减去,避…...

mpv硬件解码

mpv --hwdec=yes --vo=vappi 3e559881c836c30321894b20ae102c4e.mp4...

2025.9.78——卷6-8选择

卷6选择 大O表示法 大O表示法由​​德国数学家保罗巴赫曼(Paul Bachman)提出,用于表示算法的最坏情况下时间复杂度 Θ表示法 Θ表示法通常归功于​​计算机科学家Donald Knuth​​等人,用于描述算法的平均时间复杂度 ST表 预处理时间复杂度O(NlogN),查询O(logN) AVL树 一种…...

关于pytorch的读书报告

PyTorch 读书报告 一、引言 PyTorch 是由 Facebook(现 Meta)人工智能研究实验室开发的一款开源机器学习框架,自 2016 年推出以来,凭借其动态计算图特性、简洁直观的 API 设计以及强大的生态系统,迅速成为学术界和工业界深度学习研究与应用的主流工具之一。本报告将围绕 Py…...

Emacs 折腾日记(三十)——打造C++ IDE 续

上一篇博客中,我完成了C++ IDE初步工作,包括代码的高亮、折叠、跳转以及补全等工作。但是作为IDE来说功能还有点不够,就我个人而言作为IDE来说它还需要具备一键编译运行和调试功能。这篇文章就来记录我是如何实现上述功能的 编译运行 我使用的演示项目比较简单,它的文件结构…...

数据结构 项目一

一:数据结构的基本概念 数据结构----研究数据的特性及数据之间存在的关系 算法+数据结构=程序。其中数据结构是指数据逻辑结构和物理结构,算法是对数据运算的描述。 用计算机解决一个具体问题时,首先从具体问题中抽象出一个适当的数学模型,然后设计一个能解此数学模型的算法…...

好烦

我不行了,一做初赛题就有一种莫名其妙的烦躁,根本就写不进去,一点都冷静不下来...

【STL库】哈希封装 unordered_map/unordered_set - 教程

【STL库】哈希封装 unordered_map/unordered_set - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", mon…...

用 Go 语言与 Tesseract OCR 识别英文数字验证码

一、安装与配置 安装 Tesseract OCR 你需要先安装 Tesseract OCR 引擎。具体步骤如下: Ubuntu: 更多内容访问ttocr.com或联系1436423940 sudo apt-get update sudo apt-get install tesseract-ocr macOS: brew install tesseract Windows: 可以从 Tesseract GitHub 下载并安装…...

FreeRTOS和LVGL组合使用教程

前言 关于这两者组合使用的教程,网上可以说是各种方法都有,移植的时候我也有遇到各种问题,在此处记录一下解决过程 问题 栈空间的分配问题 FreeRTOS和LVGL的栈分配都尽量多一点,不然后面的任务可能创建失败 lvgl心跳的问题 网上也有很多方法FreeRTOS钩子函数 单开一个定时器…...

Pip换源

清华大学源 比较全,但是没有torch pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple南京大学源 有torch但是很多包没有,建议用来安装torch pip3 install torch torchvision torchaudio --index-url https://mirrors.nju.edu.cn/pytorch…...

7zip压缩解压缩-测试CPU性能

前言全局说明在B站刷大佬视频的时候,看到UP在Debign linux 上用7z测试CPU性能,惊讶,7z还有这功能。 赶快打开手边的电脑,看看 Windows 上的 7z 有没有这功能,一用,果然有这个功能。 以前想知道CPU性能就只能装些 XX大师,现在有了这个小巧的工具,知道参考数值就很方便了…...

高数

1 求 \(\lim_{n\to\infty}\left(1-\frac 1n\right)^{n^2}\) 解: 首先证明 \(\lim_{n\to\infty}\left(1-\frac 1n\right)^{n}=e^{-1}\)。 \[\begin{align*} \lim_{n\to\infty}\left(1-\frac 1n\right)^{n} &=\lim_{n\to\infty}\left[\left(1-\frac 1n\right)^{(n-1)}\right…...

P5666 [CSP-S2019] 树的重心

分为 \(x \ne rt\) 和 \(x = rt\) 两种情况计算. 对于第一种情况,不难发现我们合法的裁减下来的连通块大小是在一个区间范围之内的,于是 DFS 时用一棵树状数组修改即可(因为这个大小可能是子树大小可能是子树外大小,这取决于你一条祖先链有哪些点),但子树内的 siz 可能会被记入…...

Java运行机制

Java 程序运行机制 编译型(compile) 解释型 程序运行机制 ![机制图](C:\Users\asus\Desktop\图集\屏幕截图 2025-09-18 204707.png)...

除自身以外数组的乘积-leetcode

题目描述 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度内完成此题。 示例 1: …...

【2022】SDRZ夏令营游记

为什么2022的游记会在2025年发? 因为感觉洛谷博客快扛不住了,决定开始搬运。今天是夏令营最后一天了,在机房里坐不住了,写篇游记来纪念一下。 day0: 这天是gryz65级三个校区的信竞同学第一次大会师。我成功与一区同学面基,线下见面和在网络上的印象完全不一样(《关于why…...

[论文笔记/评估方法] RELIABLE AND DIVERSE EVALUATION OF LLM MEDICAL KNOWLEDGE MASTERY

RELIABLE AND DIVERSE EVALUATION OF LLM MEDICAL KNOWLEDGE MASTERY该文章于2025年发表在ICLR(CCF A),早在2024年9月发布在arxiv。 文章地址:Reliable and Diverse Evaluation of LLM Medical Knowledge Mastery arXiv:[2409.14302] Reliable and diverse evaluation of …...

本地VMware Workstation Pro的rhel-server-7.9-x86_64服务器配置本地源

1. 安装好VMware Workstation Pro以及rhel-server-7.9-x86_64-dvd.iso后 2. 先对VMware Workstation 进行虚拟机关机 3. 对虚拟机的CD/DVD(SATA) 勾选设备状态为启动时连接,以及连接中勾选使用ISO镜像文件,为本地的rhel-server-7.9-x86_64-dvd.iso路径 4. 接下来就按如下操作…...

2025年十大AI网站构建工具:专家评测与推荐!

2025年,软件开发领域迎来一个关键转折点。随着 AI 技术的飞速发展,传统的网站或应用构建障碍正逐渐消失。市场上涌现出大量功能强大的工具,每一个都号称是您所需要的最佳 AI网站构建器 或 网站生成器。 然而,对于开发者、创业者乃至普通初学者而言,面对如此多的选择可能会…...

扫描线乱谈

扫描线乱谈前置知识 离散化,线段树 扫描线 首先假设你有n个矩形。如果直接暴力求解这些矩形的覆盖面积肯定不行,这时就要用扫描线算法。 假设有一根线,从下往上扫描:把每个小矩形分成很多不同的块,高是扫过的距离,那个位置没有被覆盖高就是0。显然答案就是高宽的和。 每次…...

详细介绍:量子计算学习(第十四周周报)

详细介绍:量子计算学习(第十四周周报)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !import…...

视频播放时切出页面视频暂停(亲测可用)

视频播放时切出页面视频暂停(亲测可用)谷歌浏览器方法:视频播放网页,右键—检查—Elements—Event Listeners—找到blur,点开小三角,remove掉所有子元素...

VulkanAPI细节梳理1

1. PSOPipeline State Object,管线状态对象)? PSO 是 Vulkan 的核心概念之一,它是一个包含了渲染所需几乎所有状态的、不可变的对象。你可以把它想象成一台高度可配置的工业机器(GPU)的完整配置方案。在传统 API(如 OpenGL)中,你可以在运行时动态地、单独地修改各种状…...