- 博客(336)
- 收藏
- 关注
原创 Python---处理多行输入格式
本文介绍了两种Python读取多行输入数据的方法:1)使用input()逐行读取,适用于行数明确的情况;2)通过sys.stdin.read()批量读取,适合大规模数据输入。核心步骤包括:解析首行获取行列数,处理后续数据行,并将结果存储在二维列表中。文中提供了代码示例、注意事项(如数据类型转换、输入验证)和性能优化建议(strip()处理、批量读取加速),适用于编程机考等需要高效处理格式化输入的场景。两种方法均可正确处理整数/浮点数矩阵,其中第二种方法在大数据量时更具效率优势。
2025-11-02 15:04:32
559
原创 散列表存储碰撞:问题领域、产生原因与解决方法全解析
摘要: 散列表通过散列函数实现高效键值存储,但存储碰撞(不同键映射到同一地址)是其核心问题。碰撞源于键空间无限与地址空间有限的矛盾,以及散列函数的局限性。解决方法分为两类: 拉链法:碰撞键存入链表/红黑树(如Java HashMap),内存开销略高但操作简单; 开放地址法:线性/二次探测或双重散列寻找空闲地址(如Redis临时方案),内存紧凑但需控制装载因子。 其他方法包括再散列、公共溢出区、一致性哈希(分布式优化)和布谷鸟哈希(强制迁移)。选择方案需权衡内存、性能与场景需求(如高频更新用拉链法,内存受限用
2025-10-12 16:26:01
1411
原创 DFS与BFS深度解析:概念、实现、复杂度及应用场景
DFS(深度优先搜索)和BFS(广度优先搜索)是两种基础的图遍历算法,主要区别在于遍历顺序:DFS沿着路径深入探索再回溯,而BFS逐层扩散遍历。DFS可通过递归或栈实现,BFS则依赖队列。两者的时间复杂度均为O(V+E)(邻接表)或O(V²)(邻接矩阵),空间复杂度均为O(V)。DFS适合稀疏图路径查找、拓扑排序等问题,BFS更适用于最短路径、连通性分析等场景。稠密图推荐使用邻接矩阵存储,稀疏图则优先选择邻接表。
2025-10-12 16:19:59
260
原创 HTTP请求报文和应答报文各自包含的字段信息
HTTP请求报文由客户端向服务器发送,包含请求行、请求报头、空行和请求正文四部分。请求行定义操作类型、目标资源和协议版本,请求报头传递上下文信息,空行分隔报头和正文,正文用于提交数据。常见请求方法包括GET、POST等,报头字段如Host、User-Agent等提供附加信息。 HTTP应答报文由服务器返回,包含状态行、应答报头、空行和应答正文。状态行包含协议版本、状态码和描述,应答报头提供响应信息,空行分隔报头和正文,正文携带响应数据。状态码如200表示成功,404表示资源未找到,报头字段如Content-
2025-10-12 16:09:15
1182
原创 python---路灯点亮
关键逻辑:连通关系具有传递性,需遍历所有与路灯 1 相关联的“连锁路灯”,避免遗漏(如示例 2 中,若只检查初始连接,会漏掉路灯 4)。——即所有与路灯 1 直接或间接连通的路灯总数。漏洞:不能处理路灯的连锁反应。
2025-10-12 10:27:08
475
原创 Python---deque在二叉树中的使用
Python中的deque(双端队列)是一种高效的数据结构,特别适合BFS算法实现。本文介绍了deque的基本语法,并展示了如何用它解决4个二叉树问题:层序遍历(102)、最大深度(104)、最小深度(111)和对称判断(101)。每个问题都提供了BFS(基于deque)和递归两种解法,其中BFS解法通过队列实现层次遍历,时间复杂度为O(n)。deque的左右端操作特性使其在树遍历中比列表更高效,尤其适合处理大规模数据。
2025-10-10 20:04:20
423
原创 Python 中,判断元素是否存在于列表(list)和判断键是否存在于字典(dict)
操作数据结构时间复杂度(平均)时间复杂度(最坏)判断元素是否存在列表O(n)O(n)判断键是否存在字典O(1)O(n)(极少出现)因此,当需要频繁判断“元素是否存在”时,优先使用字典(或集合set,也是哈希表实现)而非列表,能显著提升程序效率。
2025-09-21 16:53:56
450
原创 召回率(Recall)和准确率(Precision)
真正例(TP):95 人(95 名患者被正确诊断)假正例(FP):50 人(50 名健康人被误判为患病)假负例(FN):5 人(5 名患者被漏诊)准确率 = 95 / (95 + 50) = 65.5%(模型预测为 “患病” 的人里,只有 65.5% 是真的患病(剩下 34.5% 是健康人被误诊)召回率 = 95 / (95 + 5) = 95%(所有实际患病的人里,95% 被模型筛查出来了,有 5% 漏诊)准确率关注 “预测为正例的可靠性”(少误诊);
2025-07-30 11:51:31
508
原创 UserWarning: Workbook contains no default style, apply openpyxl‘s default warn
这个警告信息表明在使用 openpyxl 操作 Excel 文件时,工作簿中缺少默认样式,openpyxl 正在应用自身的默认样式。
2025-07-25 16:13:16
630
原创 TCP和UDP的区别
TCP和UDP各有优缺点,TCP可靠但速度慢,UDP速度快但不可靠。在实际应用中,需要根据具体的需求选择合适的协议。如果对数据可靠性要求高,就选择TCP;如果对速度要求高,就选择UDP。
2025-04-10 16:28:23
116
原创 SQL注入(SQL Injection)
SQL注入是一种常见的网络安全攻击手段,攻击者通过在输入字段中插入恶意的SQL代码,试图干扰或篡改数据库的查询逻辑,从而获取、篡改或删除数据库中的数据。攻击者通过插入特定的SQL语句,观察应用程序的响应(通常是页面内容的变化),从而判断SQL语句是否被正确执行。如果页面显示“未找到用户”,说明SQL语句被正确执行,攻击者可以通过这种方式逐字猜测数据库中的数据。攻击者通过插入特定的SQL语句,使数据库执行耗时操作,从而判断SQL语句是否被正确执行。对用户输入进行严格的验证,确保输入符合预期的格式。
2025-04-09 18:31:01
467
原创 软件工程基础之设计模式
提供创建一系列相关或相互依赖对象的接口,无需指定具体类。应用场景:系统需要一组相互关联的对象,且希望统一创建。跨平台开发,如创建不同风格的 GUI 组件。特点:统一管理产品族,保证兼容性。新增产品类型时需要修改抽象类。代码举例:// 抽象工厂接口// 具体工厂实现@Override@Override@Override@Override// 抽象产品接口// 具体产品实现@Override。
2025-04-09 17:25:48
180
原创 SQL操作之:连接(JOIN)
常见的连接类型包括内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)、全连接(FULL JOIN)和交叉连接(CROSS JOIN其中,左连接、右连接、全连接属于是外连接(OUTER JOIN。
2025-04-03 16:43:46
246
原创 Linux命令在搭建测试环境中的使用
在搭建测试环境时,经常需要创建、复制、移动或删除文件和目录。在搭建测试环境时,通常需要安装各种软件和服务。在测试环境中,需要启动、停止或重启各种服务。在搭建测试环境时,需要合理分配和管理资源,如。测试环境通常需要特定的网络配置,例如设置。命令提供了强大的文件系统管理功能。命令可以帮助监控和管理这些资源。命令可以帮助快速完成这些任务。命令提供了强大的服务管理功能。命令可以轻松完成这些任务。地址、子网掩码、网关等。
2025-04-03 15:28:34
97
原创 常见的进程间通信方式
管道适用于简单场景,消息队列适用于结构化数据传输,共享内存适用于高性能需求,套接字适用于跨网络通信,信号量用于同步控制,信号用于事件通知。
2025-04-03 10:03:08
761
原创 如何定位和解决 SQL 语句执行慢的问题
覆盖索引是指一个索引包含了查询中所需的所有列,使得数据库在执行查询时,只需要访问索引,而无需回表访问原始数据行。换句话说,索引本身“覆盖”了查询所需的所有信息。组合索引是基于多个列创建的索引。例如,假设有一个表orders(客户ID)order_date(订单日期)amount(订单金额)这个索引会按照order_date和amount的顺序存储数据。
2025-04-02 16:10:16
960
原创 python的内存管理机制
的引用计数仍然为 1,因为它们互相引用。即使我们删除了外部变量。,它们的引用计数也不会变为 0,因此引用计数机制无法回收它们。
2025-04-02 15:41:19
1326
原创 为什么数据库中使用索引可以提高查询效率呢
在联合索引中,索引的列是按照定义的顺序存储的。当查询条件中使用联合索引时,必须从索引的最左边的列开始匹配,否则索引可能无法被有效利用。这个索引的列顺序是name→age。查询条件中必须包含最左边的列如果查询条件中包含name,索引可以被有效利用。如果查询条件中不包含name,即使包含age,索引也无法被有效利用。查询条件可以包含索引的前缀列如果查询条件中包含name和age,索引可以被完全利用。如果查询条件中只包含name,索引也可以被部分利用。假设表studentsidnameage。
2025-04-01 16:57:13
1143
原创 springboot复习
是基于的一个开源Java基础框架,主要是为了简化应用程序的开发。比如,它设计了很多注解用来简化开发流程,像注解,只需要加在主类上,就能自动启动应用程序。比如它可以很简单地和数据库实现连接,通过启动器,配合@Entity等注解,就能快速完成数据库的配置和操作。Spring Boot:实现与数据库的连接比如它是分层的,将前后端的联系体现得非常容易理解,通过@Service等注解清晰划分各层职责,Controller层接收前端请求并调用Service层,Service层处理业务逻辑后调用。
2025-03-31 16:14:32
755
原创 使用 Python 的线程池和信号量实现并发
Python 的线程池和信号量:适合需要手动控制并发任务的场景,例如模拟并发用户访问等。通过线程池可以方便地管理并发任务,信号量可以进一步控制并发数量。
2025-03-31 11:48:31
431
原创 客户端、服务器端、cookie、session、token、sessionID
登录时服务器生成Session ID和Token。Session ID存储在 Cookie 中,由浏览器自动管理。Token存储在客户端的本地存储中。后续请求时浏览器自动携带包含Session ID的 Cookie。客户端在请求头中添加Token。服务器验证Token和Session ID,确认用户身份和会话状态。Session ID由服务器端生成,通常由 Servlet 容器自动管理。可以通过或其他方式自定义生成。Token。
2025-03-28 16:55:37
1273
原创 Python中常用的测试框架-pytest和unittest
是Python标准库的一部分,设计灵感来源于Java的JUnit框架。强调测试用例的组织结构,测试类和测试方法需要遵循一定的命名规范(如测试方法名以test开头)。不需要继承特定的类,测试函数可以是普通的Python函数,只需要以test_开头即可。提供了更灵活的测试组织方式,支持模块化测试和更自然的测试代码编写方式。运行测试时,直接在命令行中运行pytest即可,pytest会自动发现并运行以test_开头的函数。所以,如果需要更灵活的测试编写方式、强大的插件支持和更详细的测试报告,pytest更适合。
2025-03-25 11:42:49
474
原创 练习用Jupyter使用selenium【疑问未解决版】
【在 Jupyter Notebook 中,当你安装或更新了某些 Python 包后,系统会提示你重启内核,这样新的包或更新后的包才能被正确加载并使用。web自动化测试(使用selenium时),最重要也是最难的就是定位元素,定位到元素之后,就可以进行“获取元素的数据”、“输入数据”、“点击”等操作了。需要注意的是,如果已经send_keys某些内容了,此后如果再想在这个界面是输入新的内容,记得需要clear一下。我:fine~~,你提示就提示吧,我能拿你怎么办呢!
2025-03-20 17:04:55
546
原创 有个警告(最后没解决)
这个警告表明当前的Python 环境中同时加载了 Intel OpenMP (libiomp) 和 LLVM OpenMP (libomp),这可能导致随机崩溃或死锁,尤其是在 Linux 系统上。这种冲突通常发生在使用了不同编译器编译的库时(例如,NumPy 使用了 Intel MKL,而其他库使用了 GCC 或 Clang 编译)。
2025-03-14 16:16:22
726
1
原创 机器学习或深度学习中---保存和加载模型的方法
根据使用的框架(如 scikit-learn、TensorFlow、PyTorch),选择合适的方法保存模型的权重或结构,并在需要时加载模型进行推理或进一步训练。在机器学习或深度学习中,训练好的模型可以通过多种方式保存和加载,以便在后续使用中进行推理(预测)或进一步训练。以下是常见的保存和加载模型的方法,以 Python 中的常见库(如 scikit-learn、TensorFlow、PyTorch)为例。:保存整个模型可能限制模型的可移植性(例如,需要相同的环境和依赖),因此推荐保存和加载权重。
2025-03-11 17:43:07
891
原创 在BERT中,如何确定一个标记的重要性
你可以通过定义自己的损失函数来给特殊标记添加更高的权重。例如,如果你想要强调[CLS]标记的重要性,可以设计一个损失函数,它在计算损失时给予[CLS]标记的输出更高的权重。这可以通过修改损失函数中的权重参数来实现,使得某些标记的预测误差对总损失的贡献更大。
2024-11-15 16:15:27
914
原创 Bert模型的input_ids和attention_mask
例如,在文本分类任务中,模型通常会使用[CLS]标记的输出作为整个序列的表示,而。指导模型应该关注哪些部分的输入,两者共同确保了BERT模型能够有效且准确地处理输入数据。:BERT模型中的自注意力机制需要知道哪些标记是实际的输入,哪些是填充的。,模型将不得不处理所有的标记,包括填充的标记,这会增加不必要的计算负担。提供了这种区分,确保模型不会将注意力分配给无关的填充标记。确保了这个表示只包含了实际输入数据的信息。确保了超过最大长度的序列被截断,确保了输入被填充到最大长度,提供了模型处理的文本内容,而。
2024-11-15 16:11:30
1306
原创 Bert模型怎么用
BERT模型的输出(通常是最后一层的隐藏状态或[CLS]标记的表示)可以作为其他模型的输入,用于下游任务。作为BERT模型的输入。通过这些步骤,可以使用BERT模型对文本数据进行预处理,并将输出作为其他模型的输入,以完成各种下游任务。:使用BERT的分词器(tokenizer)对文本内容进行预处理,将文本转换为模型可以理解的。同时,需要将标签转换为适合模型输入的格式,比如分类任务中的标签索引或one-hot编码。:需要准备包含文本内容和对应标签的数据集。:在训练过程中,BERT模型会根据输入的。
2024-11-15 16:09:08
778
原创 一个复杂的 CSS 选择器
这个选择器非常具体,它精确地指向了一个深层嵌套的 DOM 元素。这种选择器通常用于确保样式或脚本只应用于特定的元素,但它们也可能使代码难以维护,因为它们对 DOM 结构的依赖性很高。如果 DOM 结构发生变化,这样的选择器可能就会失效。这段代码是一个复杂的 CSS 选择器,用于定位网页中的一个特定元素。这个选择器非常长,因为它通过层级结构精确地指向了一个深层嵌套的 DOM 元素。
2024-11-15 11:48:14
587
原创 前端::after 伪元素的使用
伪元素是一个非常强大的工具,可以用来增强网页的视觉和交互效果,而不需要添加额外的 HTML 元素。这个内容可以是文本、图片,或者其他通过 CSS 定义的样式。元素的末尾添加 " - 这是追加的文本"。属性,你可以在元素后面添加文本。如果在 CSS 中设置。
2024-11-15 11:43:50
905
原创 CPU缓存的层次结构和它们如何影响性能
CPU缓存是计算机处理器内部的快速存储区域,用于减少处理器访问主内存(RAM)所需的时间。现代处理器通常包含多个级别的缓存,即L1、L2和L3缓存,它们构成了一个层次结构,每个级别的缓存都有其特定的特性和作用。
2024-11-11 19:34:50
1695
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅