【MySQL】MySQL经典面试题深度解析
文章目录
- 一、MySQL与C++的深度结合
- 1.1 为什么C++项目需要MySQL?
- 1.2 典型应用场景
- 二、基础概念面试题精讲
- 2.1 存储引擎对比
- 2.2 索引原理
- 三、C++专项面试题解析
- 3.1 连接池实现
- 3.2 预处理语句
- 3.3 批量操作优化
- 四、高级应用面试题剖析
- 4.1 事务隔离级别
- 4.2 锁机制详解
- 4.3 查询优化技巧
- 五、经典面试题实战演练
- 5.1 题目:如何设计高并发订单系统?
- 5.2 题目:解释MySQL的MVCC机制
- 5.3 题目:如何排查慢查询?
- 六、企业级最佳实践
- 6.1 高可用架构
- 6.2 监控方案
- 6.3 备份策略
- 七、延伸学习路线
- 7.1 进阶学习方向
- 7.2 推荐学习资源
- 结语:掌握MySQL的C++实践精髓

一、MySQL与C++的深度结合
1.1 为什么C++项目需要MySQL?
- 性能优势:C++的高效与MySQL的稳定结合
// 连接池性能对比
Native: 10000 queries in 1.2s
ORM: 10000 queries in 4.8s
- 内存管理:C++的精细控制与MySQL的缓存机制互补
- 并发处理:C++多线程与MySQL连接池的完美配合
1.2 典型应用场景
- 高频交易系统
- 实时数据分析
- 大规模日志存储
- 游戏服务器后端
二、基础概念面试题精讲
2.1 存储引擎对比
特性 | InnoDB | MyISAM | Memory |
---|---|---|---|
事务支持 | 支持 | 不支持 | 不支持 |
锁粒度 | 行级锁 | 表级锁 | 表级锁 |
崩溃恢复 | 支持 | 不支持 | 数据丢失 |
适用场景 | 高并发写 | 只读/低并发 | 临时数据 |
2.2 索引原理
B+树结构:
-- 创建索引
CREATE INDEX idx_name ON users(name);-- 索引结构示例
+---------+
| Root |
| Page |
+----+----+|v
+---------+ +---------+
| Leaf |<-->| Leaf |
| Page | | Page |
+---------+ +---------+
索引选择策略:
-- 覆盖索引
EXPLAIN SELECT id FROM users WHERE age > 20;-- 索引合并
EXPLAIN SELECT * FROM users WHERE name = 'John' OR age = 30;
三、C++专项面试题解析
3.1 连接池实现
基础实现:
class ConnectionPool {std::queue<MYSQL*> pool;std::mutex mtx;std::condition_variable cv;public:ConnectionPool(size_t size) {for (size_t i = 0; i < size; ++i) {MYSQL* conn = mysql_init(nullptr);mysql_real_connect(conn, "localhost", "user", "password","dbname", 3306, nullptr, 0);pool.push(conn);}}MYSQL* getConnection() {std::unique_lock<std::mutex> lock(mtx);cv.wait(lock, [this]{ return !pool.empty(); });auto conn = pool.front();pool.pop();return conn;}void releaseConnection(MYSQL* conn) {std::lock_guard<std::mutex> lock(mtx);pool.push(conn);cv.notify_one();}
};
3.2 预处理语句
MYSQL_STMT* stmt = mysql_stmt_init(conn);
const char* query = "INSERT INTO users (name, age) VALUES (?, ?)";
mysql_stmt_prepare(stmt, query, strlen(query));MYSQL_BIND bind[2];
char name[32];
int age;// 绑定参数
memset(bind, 0, sizeof(bind));
bind[0].buffer_type = MYSQL_TYPE_STRING;
bind[0].buffer = name;
bind[0].buffer_length = sizeof(name);bind[1].buffer_type = MYSQL_TYPE_LONG;
bind[1].buffer = &age;mysql_stmt_bind_param(stmt, bind);// 执行
strcpy(name, "John");
age = 30;
mysql_stmt_execute(stmt);
3.3 批量操作优化
// 开启批量模式
mysql_autocommit(conn, 0);for (const auto& user : users) {// 绑定数据...mysql_stmt_execute(stmt);
}// 提交事务
mysql_commit(conn);
mysql_autocommit(conn, 1);
四、高级应用面试题剖析
4.1 事务隔离级别
级别 | 脏读 | 不可重复读 | 幻读 | 性能 |
---|---|---|---|---|
READ UNCOMMITTED | 可能 | 可能 | 可能 | 最高 |
READ COMMITTED | 不可能 | 可能 | 可能 | 高 |
REPEATABLE READ | 不可能 | 不可能 | 可能 | 中 |
SERIALIZABLE | 不可能 | 不可能 | 不可能 | 最低 |
4.2 锁机制详解
锁类型:
-- 共享锁
SELECT * FROM users WHERE id = 1 LOCK IN SHARE MODE;-- 排他锁
SELECT * FROM users WHERE id = 1 FOR UPDATE;
死锁检测:
SHOW ENGINE INNODB STATUS;
-- 查看LATEST DETECTED DEADLOCK部分
4.3 查询优化技巧
执行计划分析:
EXPLAIN SELECT * FROM users WHERE age > 20 ORDER BY name LIMIT 100;
索引优化:
-- 复合索引
CREATE INDEX idx_age_name ON users(age, name);-- 索引提示
SELECT * FROM users USE INDEX (idx_age_name) WHERE age > 20;
五、经典面试题实战演练
5.1 题目:如何设计高并发订单系统?
参考答案:
- 数据库分库分表
-- 按用户ID分表
CREATE TABLE orders_0001 LIKE orders;
CREATE TABLE orders_0002 LIKE orders;
- 使用消息队列削峰
- 缓存热点数据
- 异步处理非核心逻辑
5.2 题目:解释MySQL的MVCC机制
关键点:
- 每个事务有唯一ID
- 每行记录维护创建和删除版本号
- 读操作基于事务ID判断可见性
- 写操作创建新版本
5.3 题目:如何排查慢查询?
排查步骤:
- 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
- 分析执行计划
- 使用性能schema
SELECT * FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;
六、企业级最佳实践
6.1 高可用架构
主从复制配置:
-- 主库
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'password';-- 从库
CHANGE MASTER TOMASTER_HOST='master_host',MASTER_USER='repl',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=4;
START SLAVE;
6.2 监控方案
Prometheus配置:
scrape_configs:- job_name: 'mysql'static_configs:- targets: ['mysql_host:9104']
关键指标:
- QPS/TPS
- 连接数
- 缓存命中率
- 慢查询数
6.3 备份策略
物理备份:
# 使用Percona XtraBackup
xtrabackup --backup --target-dir=/backup/mysql
xtrabackup --prepare --target-dir=/backup/mysql
逻辑备份:
mysqldump -u root -p --single-transaction --routines --triggers --all-databases > backup.sql
七、延伸学习路线
7.1 进阶学习方向
- InnoDB存储引擎源码
- 分布式数据库中间件
- 数据库内核开发
- 云原生数据库架构
7.2 推荐学习资源
- 《高性能MySQL》
- MySQL官方文档
- Percona博客
- MariaDB源码
结语:掌握MySQL的C++实践精髓
通过本文的深度解析,您将掌握以下核心能力:
- 原理层面:深入理解MySQL的存储引擎、索引、事务等核心机制
- 编码实践:熟练使用C++进行高效的数据库操作
- 性能调优:具备诊断和优化数据库性能的能力
- 架构设计:设计高可用、高性能的数据库方案
推荐实践路线:
- 实现一个高性能的连接池
- 设计并优化一个复杂查询
- 搭建主从复制集群
- 研究MySQL源码的关键模块
相关文章:
【MySQL】MySQL经典面试题深度解析
文章目录 一、MySQL与C的深度结合1.1 为什么C项目需要MySQL?1.2 典型应用场景 二、基础概念面试题精讲2.1 存储引擎对比2.2 索引原理 三、C专项面试题解析3.1 连接池实现3.2 预处理语句3.3 批量操作优化 四、高级应用面试题剖析4.1 事务隔离级别4.2 锁机制详解4.3 查…...
小程序-基础加强
前言 这一节把基础加强讲完 1. 导入需要用到的小程序项目 2. 初步安装和使用vant组件库 这里还可以扫描二维码 其中步骤四没什么用 右键选择最后一个 在开始之前,我们的项目根目录得有package.json 没有的话,我们就初始化一个 但是我们没有npm这个…...
vscode+CMake+Debug实现 及权限不足等诸多问题汇总
环境说明 有空再补充 直接贴两个json tasks.json {"version": "2.0.0","tasks": [{"label": "cmake","type": "shell","command": "cmake","args": ["../"…...
零基础Vue入门6——Vue router
本节重点: 路由定义路由跳转 前面几节学习的都是单页面的功能(都在专栏里面https://blog.csdn.net/zhanggongzichu/category_12883540.html),涉及到项目研发都是有很多页面的,这里就需要用到路由(vue route…...
【疑海破局】一个注解引发的线上事故
【疑海破局】一个注解引发的线上事故 1、问题背景 在不久前一个阳光明媚的上午,我的思绪正在代码中游走、双手正在键盘上飞舞。突然,公司内部通讯工具上,我被拉进了一个临时工作群,只见群中产品、运营、运维、测试等关键人员全部严阵以待,我就知道大的可能要来了。果不其…...
C语言:函数栈帧的创建和销毁
目录 1.什么是函数栈帧2.理解函数栈帧能解决什么问题3.函数栈帧的创建和销毁的过程解析3.1 什么是栈3.2 认识相关寄存器和汇编指令3.3 解析函数栈帧的创建和销毁过程3.3.1 准备环境3.3.2 函数的调用堆栈3.3.3 转到反汇编3.3.4 函数栈帧的创建和销毁 1.什么是函数栈帧 在写C语言…...
IDEA启动项目慢问题处理
IDEA启动项目慢问题处理 一、问题现象二、问题排查排查点1:idea内存排查点2:应用内存排查点3:shorten command lineclasspath filejar manifest 排查点4:jstack排查 三、问题定位 一、问题现象 多模块工程,启动模块为…...
Denavit-Hartenberg DH MDH坐标系
Denavit-Hartenberg坐标系及其规则详解 6轴协作机器人的MDH模型详细图_6轴mdh-CSDN博客 N轴机械臂的MDH正向建模,及python算法_mdh建模-CSDN博客 运动学3-----正向运动学 | 鱼香ROS 机器人学:MDH建模 - 哆啦美 - 博客园 机械臂学习——标准DH法和改进MDH…...
Unity 快速入门 1 - 界面操作
本项目将快速介绍 Unity 6的基本操作和功能,下载附件的项目,解压到硬盘,例如 D:\Unity Projects\, 注意整个文件路径中只有英文、空格或数字,不要有中文或其他特殊符合。 1. 打开Unity Hub,点击右上角的 O…...
美国网络司令部军事网络指挥框架战略转型与挑战分析
文章目录 前言一、框架核心内容:从分散到集中,构建标准化作战体系二、指挥体系重构:权责明晰与集中化管控三、风险管理创新:从被动防御到主动备战四、对美军网络作战的影响总结 前言 2024年9月,美国网络司令部发布《国…...
9-收纳的知识
[ComponentOf(typeof(xxx))]组件描述,表示是哪个实体的组件 [EntitySystemOf(typeof(xxx))] 系统描述 [Event(SceneType.Demo)] 定义事件,在指定场景的指定事件发生后触发 [ChildOf(typeof(ComputersComponent))] 标明是谁的子实体 [ResponseType(na…...
Linux 压缩打包
Linux压缩打包 文章目录 Linux压缩打包压缩的意义和原理压缩的意义压缩的原理压缩与解压缩的好处压缩打包命令.zipzip 命令用法unzip 的用法.gzgzip 的用法gunzip 的用法.bz2bzip2 的用法bunzip2 的用法.xzxz 命令用法tar04-Linux压缩打包课后习题压缩的意义和原理 压缩的意义…...
排序算法--堆排序
堆排序是一种高效的排序算法,适合大规模数据排序,尤其适用于需要实时获取最大(或最小)值的场景。 // 交换两个元素的值 void swap(int* a, int* b) {int temp *a;*a *b;*b temp; }// 调整堆,使其满足堆的性质 void …...
51c视觉~CV~合集10
我自己的原文哦~ https://blog.51cto.com/whaosoft/13241694 一、CV创建自定义图像滤镜 热图滤镜 这组滤镜提供了各种不同的艺术和风格化光学图像捕捉方法。例如,热滤镜会将图像转换为“热图”,而卡通滤镜则提供生动的图像,这些图像看起来…...
【数据结构】(6) LinkedList 链表
一、什么是链表 1、链表与顺序表对比 不同点LinkedListArrayList物理存储上不连续连续随机访问效率O(N)O(1)插入、删除效率O(1)O(N) 3、链表的分类 链表根据结构分类,可分为单向/双向、无头结点/有头节点、非循环/循环链表,这三组每组各取…...
使用 Axios 获取用户数据并渲染——个人信息设置
目录 1. HTML 部分(前端页面结构) HTML 结构解析: 2. JavaScript 部分(信息渲染逻辑) JavaScript 解析: 3. 完整流程 4. 总结 5. 适用场景 本文将介绍如何通过 Axios 从服务器获取用户信息࿰…...
【hudi】基于hive2.1.1的编译hudi-1.0.0源码
hudi版本1.0.0 需要使用较低版本的hive,编译hudi只需要修改下类即可: org.apache.hudi.hadoop.hive.HoodieCombineHiveInputFormat 一、复制org.apache.hadoop.hive.common.StringInternUtils 找个hive2.3.9的源码包,创建包路径,…...
物联网领域的MQTT协议,优势和应用场景
MQTT(Message Queuing Telemetry Transport)作为轻量级发布/订阅协议,凭借其低带宽消耗、低功耗与高扩展性,已成为物联网通信的事实标准。其核心优势包括:基于TCP/IP的异步通信机制、支持QoS(服务质量&…...
MyBatis 调优指南:释放持久层性能潜力
MyBatis 作为一款优秀的持久层框架,以其灵活性和易用性深受开发者喜爱。然而,随着应用规模扩大和数据量增长,MyBatis 的性能问题也逐渐显现。本文将深入探讨 MyBatis 调优策略,帮助您释放持久层性能潜力。 一、 SQL 语句优化 避免…...
Unity扩展编辑器使用整理(一)
准备工作 在Unity工程中新建Editor文件夹存放编辑器脚本, Unity中其他的特殊文件夹可以参考官方文档链接,如下: Unity - 手册:保留文件夹名称参考 (unity3d.com) 一、菜单栏扩展 1.增加顶部菜单栏选项 使用MenuItemÿ…...
注册中心不知选哪个?Zookeeper、Eureka、Nacos、Consul和Etcd 5种全方位剖析对比
本文给大家讲解 5 种常用的注册中心,对比其流程和原理,无论是面试还是技术选型,都非常有帮助。 对于注册中心,在写这篇文章前,我其实只对 ETCD 有比较深入的了解,但是对于 Zookeeper 和其他的注册中心了解甚…...
Windows下怎么安装FFFmpeg呢?
在Windows下使用Open-webui报错,说Couldnt find ffmpeg or avconv,解决open-webui报错Couldn‘t find ffmpeg or avconv-CSDN博客于是尝试解决问题,那么Windows下怎么安装FFFmpeg呢? 尝试了两种方法。 第一种方法pip安装(失败&…...
CSS 基础:层叠、优先级与继承
CSS 基础:层叠、优先级与继承 一、层叠(Cascade)示例:层叠的顺序 二、优先级(Specificity)优先级规则示例:优先级的比较 三、继承(Inheritance)哪些属性会被继承…...
《翻转组件库之发布》
背景 继《翻转组件库之打包》_杨晓风-linda的博客-CSDN博客之后,组件库已经可以正常构建,那如何像elementUI等组件库那样,用npm安装,按照既定的用法使用即可呢?本篇便为你揭晓 资料相关 1、npm官方文档:…...
Spring Boot + Spring AI快速体验
Spring AI快速体验 1 什么是Spring AI 主要功能 2 快速开始 2.1 版本说明2.2 配置文件2.3 pom依赖 2.3.1 spring maven仓库2.3.2 核心依赖 2.4 定义ChatClient2.5 启动类2.6 测试 3 参考链接 1 什么是Spring AI Spring AI是Spring的一个子项目,是Spring专门面向于…...
windows linux常用基础命令
windows基础命令 cd …/ (访问D盘 直接D: 进入目录cd…\baidudu) color 2 改变颜色 dir 浏览当前目录中有什么内容 例如 dir windows可以浏览windows中有什么文件 cls 清屏 cd windows 可以跳转到c盘目录的下面 cd…/可以返回到上一级目录 ./当前目录 cd \ 直…...
ZooKeeper单节点详细部署流程
ZooKeeper单节点详细部署流程 文章目录 ZooKeeper单节点详细部署流程 一.下载稳定版本**ZooKeeper**二进制安装包二.安装并启动**ZooKeeper**1.安装**ZooKeeper**2.配置并启动**ZooKeeper** ZooKeeper 版本与 JDK 兼容性3.检查启动状态4.配置环境变量 三.可视化工具管理**Zooke…...
【AI日记】25.02.06
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛:Backpack Prediction Challenge 读书 书名:理解公司:产权、激励与治理作者:张维迎下图感想:哲学家、思想家比如卢梭…...
税费学习之:附加税费
好的!我将从 **税收本质、历史沿革、用途逻辑、企业影响** 四个维度综合分析,用项目管理中的实际场景说明为什么需要缴纳附加税费。 --- ### **一、附加税费的本质与构成** #### **1. 定义** 附加税费是 **以增值税、消费税为基数征收的附加税**&…...
数据库开发常识(10.6)——SQL性能判断标准及索引误区(1)
10.6. 数据库开发常识 作为一名专业数据库开发人员,不但需要掌握数据库开发相关的语法和功能实现,还要掌握专业数据库开发的常识。这样,才能在保量完成工作任务的同时,也保质的完成工作任务,避免了为应用的日后维护埋下性能和稳定性方面的隐患。可遗憾的是,现实中,很大…...
网络原理一>数据链路层协议->以太网协议
目录 以太网协议的结构:类型:ARP请求应答报文:CRC:MTU: 为什么需要mac地址:mac地址和IP地址的区别: 以太网协议的结构: 以太网是数据链路层和物理层的主要协议 源IP,目的IP就不多说…...
Android 约束布局ConstraintLayout整体链式打包居中显示
Android 用约束布局ConstraintLayout实现将多个控件视作一个整体居中显示,使用 app:layout_constraintHorizontal_chainStyle"packed"实现 chain 除了链条方向有横向和竖向区分外, chain链条上的模式有 3种 spread - 元素将被展开&#…...
云计算行业分析
云计算作为数字经济的核心基础设施,未来十年将持续重塑全球科技格局,并渗透到几乎所有行业的数字化转型中。 一、云计算的发展潜力 1. 技术融合驱动爆发式创新 AI与云计算的深度耦合 - **智能云服务**:云厂商将提供预训练模型、自动化ML工…...
深入浅出DeepSeek LLM 以长远主义拓展开源语言模型
深入浅出地讲解DeepSeek LLM 以长远主义拓展开源语言模型 🌟 1. 什么是 DeepSeek LLM? 大家想象一下,你在游戏里要打造一个超级英雄角色,选择最强的装备、技能点和升级策略。那么,DeepSeek LLM 就是 AI 界的“超级英雄…...
用Python获取股票数据并实现未来收盘价的预测
获取数据 先用下面这段代码获取上证指数的历史数据,得到的csv文件数据,为后面训练模型用的 import akshare as ak import pandas as pd# 获取上证指数历史数据 df ak.stock_zh_index_daily(symbol"sh000001")# 将数据保存到本地CSV文件 df.…...
[openwrt]openwrt slaac only模式下部分终端无法获取到IPv6 DNS
问题描述 OpenWrt 中,如果启用了 RA 单播(ra_unicast),但部分终端无法获取到 DNS 信息 问题分析 RA 单播的局限性 并非所有终端都完全支持通过单播接收 RA 消息。部分终端可能无法正确解析单播 RA 中的 RDNSS(Recursive DNS Server)选项,从而导致无法获取 DNS 信息。终…...
【redis】数据类型之list
Redis的List数据类型是一个双向链表,支持在链表的头部(left)和尾部(right)进行元素的插入(push)和弹出(pop)操作。这使得List既可以用作栈(stack)…...
电脑连接wifi但是浏览器打开不了网页,使用手机热点能正常使用
电脑连接wifi但是浏览器打开不了网页,使用手机热点能正常使用 打开控制面板 打开网络和Internet(查看网络状态和任务) 点击更改适配器设置 双击WLAN 点击属性并双击打开Internet 协议版本4(TCP/IPv4) 将自动…...
el-table中的某个字段最多显示两行,超出部分显示“...详情”,怎么办
文章目录 背景需求需求分析 解决方案在线体验灵感来源我的实现方案 总结 背景 需求 比如,有如下一个表格,请你实现它: 要求: 最多显示两行超出部分显示为:“…详情”点击详情,展开全部内容 说明&#x…...
Vue el-input密码输入框 按住显示密码,松开显示*;阻止浏览器密码回填,自写密码输入框;校验输入非汉字内容;文本框聚焦到内容末尾;
输入框功能集合 <template><div style"padding: 10px"><!-- 密码输入框 --><el-input:type"inputType"v-model"password"placeholder"请输入密码"auto-complete"new-password"id"pwd"style…...
尚硅谷课程【笔记】——大数据之Shell【一】
课程视频:【【尚硅谷】Shell脚本从入门到实战】 一、Shell概述 为什么要学习Shell? 1)需要看懂运维人员的Shell程序 2)偶尔编写一些简单的Shell程序来管理集群、提高开发效率 什么是Shell? 1)Shell是一…...
4年测试|20-30K|金山办公|大模型测开3轮面经
一面时间:面试时长一小时左右 二面时间:面试时长基本满一小时 HR面时间:面试流程上全部结束了,内容如下: 前言: 岗位:自己想投递base珠海,金山办公的HR捞了下。why choose Zhuha…...
【负载均衡式在线OJ】实现负载均衡
目录 管理服务器 增加负载 && 减少负载 重置负载 && 获得负载 负载均衡 添加配置信息 什么是负载均衡 如何实现? 管理服务器 增加负载 && 减少负载 客户端访问一次服务器,负载就加1。客户端结束访问服务器,…...
网络安全-防御 第一次作业(由于防火墙只成功启动了一次未补截图)
防火墙安全策略课堂实验报告 一、拓扑 本实验拓扑包含预启动设备、DMZ区域(含OA Server和Web Server)、防火墙(FW1)、Trust区域(含办公区PC和生产区PC)等。具体IP地址及连接关系如给定拓扑图所示…...
大数据挖掘--两个角度理解相似度计算理论
文章目录 0 相似度计算可以转换成什么问题1 集合相似度的应用1.1 集合相似度1.1文档相似度1.2 协同过滤用户-用户协同过滤物品-物品协同过滤 1.2 文档的shingling--将文档表示成集合1.2.1 k-shingling1.2.2 基于停用词的 shingling 1.3 最小哈希签名1.4 局部敏感哈希算法&#…...
【Mybatis Plus】JSqlParser解析sql语句
【Mybatis Plus】JSqlParser解析sql语句 【一】JSqlParser 是什么【二】JSqlParser 的安装步骤【三】使用场景【1】sql语句解析【2】SQL 语句转换【3】SQL 语句生成【4】SQL 语句验证 【四】在使用 JSqlParser 时,如何处理 SQL 注入攻击?【1】使用预编译…...
vue3 + ElementPlus 封装列表表格组件包含分页
在前端开发中,封装组件是必不可少的。今天就来封装一个通用的列表表格组件,包含分页功能,可以提高代码的复用性和可维护性。 1. 组件设计 Props: tableData:表格数据。columns:表格列配置。totalÿ…...
springboot3整合knife4j详细版,包会!(不带swagger2玩)
1. 引入依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.4.0</version> </dependency>2. 配置文件 简短必要版 # 配置springd…...
Vue2自定义指令实现优雅的前端埋点方案
背景介绍 在前端开发中,埋点是一个非常常见的需求。通常我们需要记录用户的操作行为,以便于后续的数据分析和问题排查。传统的埋点方式往往是在每个需要埋点的地方都写一段上报代码,这样不仅代码重复度高,而且维护起来也比较麻烦…...
1.攻防世界 题目名称-文件包含
进入题目页面如下 直接给出了源码进行代码审计 题目给出提示是文件包含的题 代码审计 <?php // 高亮显示当前 PHP 文件的源代码,方便查看和调试 highlight_file(__FILE__);// 包含名为 "check.php" 的文件,通常这个文件中可能包含一些用…...