with的用法
Python SQLite 操作详解
本文档详细解释了使用 Python 操作 SQLite 数据库时涉及的关键概念和代码实践,包括 with
语句、事务处理、批量插入以及相关的优化建议。
一、with
语句的作用(自动关门的保险库)
with sqlite3.connect('city_1301.db') as conn:# 代码块# 在这里执行数据库操作,例如创建 cursor、执行 SQL 等pass
-
作用:
with
语句就像一个“自动关门的保险库”。-
开门:当程序执行进入
with
代码块时,它会自动执行sqlite3.connect('city_1301.db')
,建立数据库连接,并将连接对象赋值给conn
变量(类似打开保险库的门并拿到钥匙)。 -
关门:无论
with
代码块内部的代码是正常执行完毕,还是中途发生了错误(异常),当程序流程离开with
代码块时,它都会自动确保数据库连接conn
被关闭(conn.close()
会被隐式调用)。
-
-
为什么用它:核心目的是资源管理自动化,防止程序员忘记手动调用
conn.close()
来关闭数据库连接。忘记关闭连接可能会导致:-
资源泄露:连接一直占用系统资源。
-
数据丢失或损坏:如果程序异常退出而连接未正常关闭,可能导致缓冲区的数据未完全写入磁盘。
-
达到连接数上限:如果频繁创建连接而不关闭,可能耗尽数据库允许的最大连接数。
-
二、代码逐行解析(省会垃圾数据批量入库)
# 假设 conn 是已经通过 with 语句建立的数据库连接
# data 是包含大量待插入数据的列表,例如 [(val1_row1, val2_row1, ...), (val1_row2, ...), ...]cursor = conn.cursor() # 1. 获取游标:拿一个“笔”准备写数据到数据库这个“本子”上。
cursor.execute("BEGIN IMMEDIATE") # 2. 开启立即事务:大喊:“现在我要开始连续写一堆数据了,在我喊停之前,其他人(其他连接)最好别写,可以读,但别干扰我!”try: # (结合优化建议中的异常处理)for i in range(0, len(data), 1000): # 3. 分批处理循环:数据太多(比如60万条),一次处理不完,每次处理1000条。batch = data[i:i+1000] # 4. 获取批次数据:从总数据 data 中取出当前这一小批(1000条)数据,装进一个临时的“小箱子” batch。# 5. 批量插入:使用 executemany 将 batch 这个“小箱子”里的所有数据一次性“传送”到数据库表中。# "INSERT INTO bins VALUES (?, ?, ?)" 是 SQL 模板,? 是占位符,具体的值会从 batch 里的元组中按顺序填充。cursor.executemany("INSERT INTO bins (column1, column2, column3) VALUES (?, ?, ?)", batch)# 6. 阶段性提交:每成功插入1000条数据后,就执行一次 conn.commit()。# 这就像是把刚刚装满的那个“小箱子”里的货,正式确认推进仓库存档。conn.commit()except Exception as e: # (结合优化建议中的异常处理)conn.rollback() # 如果上面 try 块中任何一步出错,就执行回滚print(f"数据库操作出错,事务已回滚: {e}")# 注意:实际代码中,如果最后一批不足1000条,循环结束后也需要确保提交或有合适的处理。
# 更好的做法是将 commit 放在循环结束后,配合异常处理,实现原子性。见优化部分。
-
关键点解析:
-
BEGIN IMMEDIATE
:-
作用:开启一个立即事务 (IMMEDIATE Transaction)。一旦执行成功,数据库会被锁定为写锁定 (RESERVED lock) 状态。这意味着当前连接可以读写数据库,其他连接只能读,不能写,直到当前连接执行
COMMIT
或ROLLBACK
。 -
类比:在进入仓库准备大规模整理货物前,在仓库大门挂上“内部整理中,暂停入库,可查询库存”的牌子,防止别人在你整理一半时又扔东西进来搞乱。
-
-
分批次插入(例如 1000 条/次):
-
原因:如果
data
列表非常大(如几十万、几百万条),一次性构建巨大的 SQL 语句或将所有数据加载到内存中传递给executemany
可能导致程序内存溢出或数据库处理超时、卡顿。分批可以显著降低单次操作的内存消耗和数据库负载。 -
类比:搬家时,用小推车分多次搬运包裹,而不是试图用一辆超载的大卡车一次性把所有东西硬塞进去,那样容易把车压垮或者堵在路上。
-
-
executemany
:-
作用:这是 SQLite(以及其他许多数据库接口)提供的批量执行同一条 SQL 语句的优化方法。它接收一个 SQL 模板和一个包含多组参数的序列(如列表的列表或列表的元组
batch
)。相比于在 Python 循环中反复调用execute
执行单条INSERT
语句,executemany
的效率通常高得多(可能快 10 倍甚至更多),因为它减少了 Python 与数据库驱动之间的通信开销。 -
示例中的
?
:这是参数化查询的占位符。使用占位符是防止 SQL 注入攻击 的标准做法。数据库驱动会安全地将batch
中的值替换到?
的位置,而不是简单地将值拼接到 SQL 字符串中。
-
-
循环内提交 (
conn.commit()
):-
优势:如果在插入大量数据的过程中程序意外崩溃(比如处理到第 3500 条时崩溃),那么前 3000 条(前 3 批)因为已经被
commit
,所以它们的数据会永久保存在数据库中,不会丢失。只丢失了当前正在处理但尚未提交的那一批(第 3001-4000 条)。这提供了部分持久性。 -
风险/缺点:
-
非原子性:整个“插入 60 万条数据”的操作不再是一个原子操作。它被分成了多个小的原子提交。如果业务要求这 60 万条数据必须要么全部成功插入,要么一条都不插入,那么这种方式就不合适。
-
性能开销:每次
commit
都是一次相对昂贵的操作,因为它需要确保数据写入磁盘并释放锁。频繁提交会比在所有批次都插入完成后进行一次总提交要慢。 -
最后批次丢失风险:如果总数据量不是批次大小的整数倍(例如 60500 条,批次 1000),最后一批 500 条在循环结束后如果没有显式调用
conn.commit()
,则会丢失。
-
-
-
三、代码优化建议(针对省会热点数据)
-
异常处理与事务原子性(防翻车,保完整):
将整个循环和最后的提交操作包裹在 try...except...finally 或 try...except 块中,并在 except 中执行 conn.rollback()。将 commit 移到循环外部,确保整个批量插入操作的原子性。
cursor = conn.cursor() try:cursor.execute("BEGIN IMMEDIATE") # 或者默认的 BEGIN DEFERRED 也可以for i in range(0, len(data), 1000):batch = data[i:i+1000]cursor.executemany("INSERT INTO bins (column1, column2, column3) VALUES (?, ?, ?)", batch)conn.commit() # 所有批次成功插入后,在循环外进行一次总提交print("所有数据批量插入成功并已提交。") except Exception as e:conn.rollback() # 如果循环中任何地方出错,回滚整个事务print(f"批量插入过程中发生错误,事务已回滚: {e}") finally:# 可以在这里关闭 cursor,但如果使用 with conn:,连接会自动关闭# if cursor:# cursor.close()pass
-
作用:如果插入过程中任何一批数据失败(例如数据格式错误、违反约束等),整个事务会被回滚,数据库状态恢复到
BEGIN
之前的状态,一条新数据都不会插入。这保证了操作的原子性。
-
-
坚持参数化查询(防黑客):
始终使用占位符 ?(或其他数据库驱动支持的占位符如 %s)配合 execute 或 executemany 的第二个参数来传递数据,绝对不要手动拼接 SQL 字符串。
# 正确写法 (已在上面示例中使用) cursor.executemany("INSERT INTO bins VALUES (?, ?, ?)", batch)# 错误且危险的写法 (容易被 SQL 注入) # for row in batch: # sql = f"INSERT INTO bins VALUES ('{row[0]}', '{row[1]}', '{row[2]}')" # 非常危险! # cursor.execute(sql)
-
避免 SQL 注入:防止用户输入或外部数据中包含恶意的 SQL 代码片段(例如
'; DROP TABLE bins; --
),如果直接拼接到 SQL 语句中,可能导致数据库被篡改或删除。
-
-
启用 WAL (Write-Ahead Logging) 模式(提高并发读写性能):
对于需要较高并发读写性能的数据库(尤其是写操作频繁时),可以考虑将日志模式从默认的 DELETE 或 TRUNCATE 改为 WAL。
# 在连接数据库后,执行 PRAGMA 命令 conn.execute("PRAGMA journal_mode = WAL;")
-
作用:WAL 模式下,写操作不再直接修改原始数据库文件,而是将更改追加到单独的 WAL 文件中。读操作可以直接读取数据库文件,不受写操作的长时间阻塞。这显著提高了读和写操作的并发性,“读不阻塞写,写不阻塞读”。但 WAL 模式会产生额外的
.wal
和.shm
文件,且在某些特定场景下(如网络文件系统)可能不适用或有性能问题。
-
四、总结
-
with
语句:提供自动、安全的数据库连接管理,确保连接无论如何都会被关闭,防止资源泄露。 -
事务 (
BEGIN
,COMMIT
,ROLLBACK
):保证数据操作的原子性(要么全部成功,要么全部失败回滚),维护数据一致性。BEGIN IMMEDIATE
提供更强的写锁定。 -
分批次处理与提交策略:
-
分批插入:针对大数据量,通过减小单次操作的数据量来降低内存和数据库负载。
-
提交时机:
-
循环内提交:牺牲原子性换取部分持久性,适用于允许部分成功的场景,但性能稍差且有最后批次丢失风险。
-
循环外提交(推荐):保证整个批量操作的原子性,性能通常更好,配合
try...except...rollback
最为健壮。
-
-
-
批量插入 (
executemany
):大幅提升多条相同结构数据插入的效率,是性能优化的关键手段。 -
参数化查询 (
?
):防止 SQL 注入攻击的金标准,必须坚持使用。 -
WAL 模式:通过改变日志机制,提高数据库的并发读写性能,适用于高并发场景。
实际部署建议:对于像省会城市这样可能访问频繁、数据量大的数据库文件(如 city_1301.db
),建议:
-
将其存放在性能较好的存储介质上,如 SSD (固态硬盘)。
-
使用监控工具(如 Prometheus + Grafana,或特定于 Python/SQLite 的监控库)来观察数据库的性能指标(如查询耗时、锁等待时间、磁盘 I/O 等),以便及时发现瓶颈并进行优化。
相关文章:
with的用法
Python SQLite 操作详解 本文档详细解释了使用 Python 操作 SQLite 数据库时涉及的关键概念和代码实践,包括 with 语句、事务处理、批量插入以及相关的优化建议。 一、with 语句的作用(自动关门的保险库) with sqlite3.connect(city_1301.d…...
Go反射-通过反射调用结构体的方法(带入参)
使用反射前,我们需要提前做好映射配置 papckage_struct_relationship.go package reflectcommonimport (api "template/api" )// 包名到包对象的映射 var structMap map[string]func() interface{}{"template/api": func() interface{} { re…...
C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 19)
🎁个人主页:工藤新一 🔍系列专栏:C面向对象(类和对象篇) 🌟心中的天空之城,终会照亮我前方的路 🎉欢迎大家点赞👍评论📝收藏⭐文章 文章目录 二…...
使用 Selenium 爬取动态网页数据 —— 实战与坑点详解
本文记录了笔者在爬取网页数据过程中遇到的各种技术挑战,包括页面动态渲染、JavaScript 注入等问题,并最终给出一个可运行的完整方案。 文章目录 网页获取不到数据🚀 尝试用 Selenium 渲染页面 网页获取不到数据 某网页数据依赖大量 JavaSc…...
强化学习--2.数学
强化学习--数学 1、概率统计知识1.1 随机变量与观测值1.2 概率密度函数(PDF)1.3 期望1.4 随机抽样 2、数据期望E3、正态分布4、条件概率1. **与多个条件相关**(依赖所有前置条件)2. **仅与上一个条件相关**(马尔可夫性…...
rails 8 CSS不起效问题解决
很久没用rails了,最近打算重新复习一下。在配置好环境后,创建了项目,通过脚手架创建了数据库表,和相关的文件。但我发现却没有生成相应的CSS文件,可能是rails8 取消了吧。于是自己手动创建了相应的css文件。但是刷新页…...
双指针算法详解(含力扣和蓝桥杯例题)
目录 一、双指针算法核心概念 二、常用的双指针类型: 2.1 对撞指针 例题1:盛最多水的容器 例题2:神奇的数组 2.2 快慢指针: 例题1:移动零 例题2:美丽的区间(蓝桥OJ1372) 3.总…...
C 语言字符输入:掌握 getchar 和 scanf 的用法与陷阱
各类资料学习下载合集 https://pan.quark.cn/s/8c91ccb5a474 C 语言字符输入:掌握 getchar 和 scanf 的用法与陷阱 你好!在 C 语言编程中,与用户进行交互最基本的方式就是通过标准输入和标准输出。我们之前探讨了如何使用 printf 和 putchar 进行…...
算法笔记。质数筛算法
题目: 给定一个正整数 n,请你求出 1∼n 中质数的个数。 输入格式 共一行,包含整数 n。 输出格式 共一行,包含一个整数,表示 1∼n 中质数的个数。 数据范围 1≤n≤106 输入样例: 8输出样例…...
C语言中memmove和memcpy
1、memmove()函数 void *memmove(void *str1, const void *str2, size_t n); 将str2所指向的存储区的前n个字节复制到str1所指向的存储区。 memmove()允许“str1和str2所指向的存储区重叠”。通过检查地址关系,自动选择复制方向(从前往后或从后往前&a…...
GESP2024年6月认证C++八级( 第三部分编程题(2)空间跳跃)
参考程序: #include <cstdio> #include <vector> #include <queue> #include <utility> #include <cstring> using namespace std;// 定义一个结构体,用于 Dijkstra 优先队列中的节点 struct Node {int v, w; // v 表示图…...
使用DeepSeek定制Python小游戏——以“俄罗斯方块”为例
前言 本来想再发几个小游戏后在整理一下流程的,但是今天试了一下这个俄罗斯方块的游戏结果发现本来修改的好好的的,结果后面越改越乱,前面的版本也没保存,根据AI修改他是在几个版本改来改去,想着要求还是不能这么高。…...
Linux中安装mysql8,转载及注意事项
一、先前往官网下载mysql8 下载地址: https://dev.mysql.com/downloads/选择Linux 二、删除Linux中的mysql(如果有的话),上传安装包 1、先查看mysql是否存在,命令如下: rpm -qa|grep -i mysql如果使用这…...
网站即时备份,网站即时备份的方法有哪些
网站数据的安全性与业务连续性直接关系到企业的核心竞争力。无论是因硬件故障、人为误操作、网络攻击还是自然灾害,数据丢失或服务中断都可能带来难以估量的损失。因此,网站即时备份成为保障业务稳定性的关键技术手段。 一、核心即时备份技术方案 云服…...
LVM扩容小计
文章目录 [toc]当前磁盘使用问题分析关键问题定位推荐解决方案方案一:扩展根分区(LVM 动态扩容)方案二:清理磁盘空间(紧急临时处理) 当前磁盘使用问题分析 根据你的磁盘信息,根文件系统 (/) 已…...
【2025软考高级架构师】——案例分析总结(13)
摘要 本文对2025年软考高级架构师的考纲及案例分析进行了总结。内容涵盖系统规划、架构设计、系统建模、安全架构、可靠性分析、大数据架构等多方面知识点,还涉及软件质量特性、系统流程图与数据流图、嵌入式系统架构、分布式系统设计等考查内容,详细列…...
Redis ⑨-Jedis | Spring Redis
Jedis 通过 Jedis 可以连接 Redis 服务器。 通过 Maven 引入 Jedis 依赖。 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><versi…...
aidermacs开源程序使用 Aider 在 Emacs 中进行 AI 配对编程
一、软件介绍 文末提供程序和源码下载 Aidermacs 通过集成 Aider(最强大的开源 AI 配对编程工具之一)为 Emacs 带来了 AI 驱动的开发。如果您缺少 Cursor,但更喜欢生活在 Emacs 中,Aidermacs 提供了类似的 AI 功能,同…...
HarmonyOS NEXT——DevEco Studio的使用(还没写完)
一、IDE环境的搭建 Windows环境 运行环境要求 为保证DevEco Studio正常运行,建议电脑配置满足如下要求: 操作系统:Windows10 64位、Windows11 64位 内存:16GB及以上 硬盘:100GB及以上 分辨率:1280*8…...
使用PageHelper实现分页查询(详细)
一:需求分析与设计 1.1 产品原型 (1)分页展示,每页展示10条数据,根据员工姓名进行搜索 (2)业务规则 1.2 接口设计 (1)操作:查询,请求方式…...
神经网络基础-从零开始搭建一个神经网络
一、什么是神经网络 人工神经网络(Articial Neural Network,简写为ANN)也称为神经网络(NN),是一种模仿生物神经网络和功能的计算模型,人脑可以看做是一个生物神经网络,由众多的神经元连接而成,…...
数据库原理与应用实验二 题目七
利用sql建立教材数据库,并定义以下基本表: 学生(学号,年龄,性别,系名) 教材(编号,书名,出版社编号,价格) 订购(学号,书号,数量) 出版社(编号,名称,地址) 1定义主码、外码、和价格、数量的取值范围。 2 在三个表中输入若干记录,注意如果输入违反完整…...
如何在 CentOS 7 命令行连接 Wi-Fi?如何在 Linux 命令行连接 Wi-Fi?
如何在 CentOS 7 命令行连接 Wi-Fi?如何在 Linux 命令行连接 Wi-Fi? 摘要 本教程覆盖如何在多种 Linux 发行版下通过命令行连接 Wi-Fi,包括: CentOS 7、Ubuntu、Debian、Arch Linux、Fedora、Alpine Linux、Kali Linux、OpenSU…...
【学习笔记】 强化学习:实用方法论
作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程,深度学习领域研究生必读教材),开始深度学习领域学习,深入全面的理解深度学习的理论知识。 之前的文章参考下面的链接…...
ElasticSearch深入解析(十):字段膨胀(Mapping 爆炸)问题的解决思路
文章目录 一、核心原理:动态映射的双刃剑1. 动态映射的工作机制2. 映射爆炸的触发条件3. 底层性能损耗 二、典型场景与案例分析1. 日志系统:动态标签引发的灾难2. 物联网数据:设备属性的无序扩展 三、系统性解决方案1. 架构层优化2. 配置层控…...
react18基础速成
1、项目搭建 npx create-react-app my-react-app(项目名) cd 项目名进入项目目录 终端输入 npm start 启动项目 浏览器查看 项目搭建成功 2、JSX JavaScript语法和HTML语法写在一起就是JSX语法 jsx只能返回一个根元素,即最外层的div&a…...
18、状态库:中央魔法仓库——React 19 Zustand集成
一、量子熔炉的诞生 "Zustand是记忆水晶的量子纠缠体,让状态流无需魔杖驱动即可自洽!"霍格沃茨炼金术研究院的工程师挥动魔杖,Zustand 的原子化状态流在空中交织成星轨矩阵。 ——基于《魔法国会》第2025号协议,Zustan…...
PyCharm中全局搜索无效
发现是因为与搜狗快捷键冲突了,把框选的那个勾选去掉或设置为其他键就好了...
【Hive入门】Hive与Spark SQL深度集成:执行引擎性能全面对比与调优分析
目录 引言 1 Hive执行引擎架构演进 1.1 Hive执行引擎发展历程 1.2 执行引擎架构对比 1.2.1 MapReduce引擎架构 1.2.2 Tez引擎架构 1.2.3 Spark引擎架构 2 执行引擎切换与配置指南 2.1 引擎切换配置方法 2.1.1 全局配置 2.1.2 会话级配置 2.2 资源管理配置 2.2.1 T…...
【算法基础】快速排序算法 - JAVA
一、算法基础 1.1 什么是快速排序 快速排序(Quick Sort)是一种高效的分治排序算法,由英国计算机科学家Tony Hoare于1960年提出。它的核心思想是: 选择一个基准元素(pivot)将数组分成两部分:小…...
Ubuntu 24.04 通过 update-alternatives 切换GCC版本
在 Ubuntu 中编译项目, 会遇到项目依赖于某个特定版本 GCC 的情况, 例如 Ubuntu 24.04 的默认 GCC 版本是 13, 但是有一些项目需要 GCC11才能正常编译, 在 Ubuntu 24.04 默认的环境下编译会报错. 这时候可以通过 update-alternatives 切换GCC版本. all 展示全部 用--all参数会…...
Linux中的时间同步
一、时间同步服务扩展总结 1. 时间同步的重要性 多主机协作需求:在分布式系统、集群、微服务架构中,时间一致性是日志排序、事务顺序、数据一致性的基础。 安全协议依赖:TLS/SSL证书、Kerberos认证等依赖时间有效性,时间偏差可能…...
数据赋能(209)——质量管理——时效性原则
概述 数据时效性原则在数据收集、处理、分析和应用的过程中确保数据在特定时间范围内保持其有效性和相关性,为决策提供准确、及时的依据。在快速变化的市场环境中,数据时效性对于企业的竞争力和决策效率具有决定性的影响。 原则定义 数据时效性原则&a…...
AnimateCC教学:照片旋转飞舞并爆炸....
1.核心代码: <!DOCTYPE html> <html><head><meta charset="UTF-8" /><title>旋转照片演示</title><script src="https://code.createjs.com/1.0.0/createjs.min.js"></script><script src="http…...
腾讯混元-DiT 文生图
1 混元-DiT所需的模型大小一共是41G https://huggingface.co/Tencent-Hunyuan/HunyuanDiT https://colab.research.google.com/ HunyuanDiT_jupyter.ipynb %cd /content !GIT_LFS_SKIP_SMUDGE1 git clone -b dev https://github.com/camenduru/HunyuanDiT %cd /content/Hun…...
优化高搜索量还是低竞争关键词?SEO策略解析
在2025年的SEO环境中,关键词研究仍然是优化网站排名的基石。然而,一个常见的问题困扰着SEO从业者:在使用谷歌关键词规划师(Google Keyword Planner)进行关键词研究时,是否应该优先选择月搜索量较高的关键词…...
对比表格:数字签名方案、密钥交换协议、密码学协议、后量子密码学——密码学基础
文章目录 一、数字签名方案1.1 ECDSA:基于椭圆曲线的数字签名算法1.2 EdDSA:Edwards曲线数字签名算法1.3 RSA-PSS:带有概率签名方案的RSA1.4 数字签名方案对比 二、密钥交换协议2.1 Diffie-Hellman密钥交换2.2 ECDH:椭圆曲线Diffi…...
在MySQL中建索引时需要注意哪些事项?
在 MySQL 中建立索引是优化查询性能的重要手段,但不当的索引设计可能导致资源浪费、性能下降甚至拖慢写入速度。 所以我们我们首先要判断对于一个字段或者一些字段要不要建立索引。 适合建立索引的字段通常是: 主键字段:MySQL 会自动为主键…...
dstack 是 Kubernetes 和 Slurm 的开源替代方案,旨在简化 ML 团队跨顶级云、本地集群和加速器的 GPU 分配和 AI 工作负载编排
一、软件介绍 文末提供程序和源码下载 dstack 是 Kubernetes 和 Slurm 的开源替代方案,旨在简化顶级云和本地集群中 ML 团队的 GPU 分配和 AI 工作负载编排。 二、Accelerators 加速器 dstack 支持 NVIDIA 开箱即用的 、 AMD 、 Google TPU 和 Intel Gaudi 加速器…...
Linux 的 epoll 与 Windows 的 IOCP 详解
如果你在搞网络编程或者高性能服务器,一定要搞懂这两个模型——它们都是用来解决“多路复用”问题的工具,让你同时处理大量的网络连接变得高效又可控。 一、什么是“多路复用”? 简单说,就是你手里有很多任务(比如很多客户端的请求),但系统的核心(线程或者进程)资源…...
C# 方法(控制流和方法调用)
本章内容: 方法的结构 方法体内部的代码执行 局部变量 局部常量 控制流 方法调用 返回值 返回语句和void方法 局部函数 参数 值参数 引用参数 引用类型作为值参数和引用参数 输出参数 参数数组 参数类型总结 方法重载 命名参数 可选参数 栈帧 递归 控制流 方法包含了组成程序的…...
Webug4.0靶场通关笔记11- 第15关任意文件下载与第16关MySQL配置文件下载
目录 一、文件下载 二、第15关 任意文件下载 1.打开靶场 2.源码分析 3.渗透实战 三、第16关 MySQL配置文件下载 1.打开靶场 2.源码分析 3.渗透实战 (1)Windows系统 (2)Linux系统 四、渗透防御 一、文件下载 本文通过…...
More Effective C++学习笔记
条款1 指针与引用的区别 条款2 尽量使用C风格的类型转换 条款3 不要对数组使用多态 条款4 避免无用的缺省构造函数 条款5 谨慎定义类型转换函数 条款6 自增(increment)、自减(decrement)操作符前缀形式与后缀形式的区别 条款7 不要重载“&&”,“||”, 或“,” 条款8 理…...
如何设计抗Crosstalk能力强的PCB镀穿孔
一个高速PCB通道通常包含芯片SerDes IP、走线、穿层Via、连接器和Cable。 其中内层走线对于Crosstalk影响甚微(请参考什么? Stripline的FEXT为0! Why? ),而Via与连接器由于其参考路径较差的关系,…...
多线程系列三:这就是线程的状态?
1.认识线程的状态 NEW:Thread对象已经创建好了,但还没有调用start方法在系统中创建线程 RUNNABLE:就绪状态,表示这个线程正在CPU上执行,或准备就绪,随时可以去CPU上执行 BLOCKED:表示由于锁竞争…...
生成对抗网络(GAN, Generative Adversarial Network)
定义:一种通过对抗训练让两个神经网络(生成器与判别器)相互博弈的深度学习模型,用于生成逼真的数据(如图像、音频、文本等)。 一、核心思想:对抗博弈 GAN的核心是让两个神…...
用可视化学习逆置法
1.逆置法思路 目标:将这个彩色数组向右旋转3步 🔴1 → 🟠2 → 🟡3 → 🟢4 → 🔵5 → 🟣6 → ⚪7我们希望得到 🔵5 → 🟣6 → ⚪7 → 🔴1 → 🟠…...
家用服务器 Ubuntu 服务器配置与 Cloudflare Tunnel 部署指南
Ubuntu 服务器配置与 Cloudflare Tunnel 部署指南 本文档总结了我们讨论的所有内容,包括 Ubuntu 服务器配置、硬盘扩容、静态 IP 设置以及 Cloudflare Tunnel 的部署步骤。 目录 硬盘分区与扩容设置静态 IPCloudflare Tunnel 部署SSH 通过 Cloudflare Tunnel常见…...
【C++篇】类和对象(上)
目录 类的定义格式: 内敛函数: 类与struct的区别: 类的访问权限: 类域: 类的实例化: 对象大小: 计算对象的大小时,也存在内存对齐(与结构体一样)&…...
ES6/ES11知识点 续一
模板字符串 在 ECMAScript(ES)中,模板字符串(Template Literals)是一种非常强大的字符串表示方式,它为我们提供了比传统字符串更灵活的功能,尤其是在处理动态内容时。模板字符串通过反引号&…...