自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(583)
  • 资源 (4)
  • 收藏
  • 关注

原创 踩坑实录:同版本、同大小chromedriver,一个能过反爬一个被拦?真相藏在二进制里

最近在做 Web 自动化测试时,遇到了一个令人匪夷所思的场景。手头有两个 文件:按常理推断,这就是两个完全相同的文件。然而当我在 Selenium 中分别调用它们去访问同一个带有反爬机制的网站时,结果却大相径庭:这不禁让我怀疑:这两个文件真的只是“看起来”一样吗?既然表面信息无法解释差异,那就必须祭出 Windows 自带的文件对比工具 (File Compare),让它用最原始的二进制方式告诉我答案。在命令行中敲下:屏幕上很快滚动出一长串差异报告。我截取了其中最关键的一小段:看到这里,真相已经呼之欲

2026-04-22 21:20:32 108

原创 Python文件操作深度解析:open()模式全解与seek()方法精讲

open()函数和seek()方法。理解文件打开模式的关键在于把握三个维度——操作类型(读/写/追加/创建)、内容处理(清空/保留)、指针位置(开头/末尾)。而掌握seek()则需要理解文件指针的概念、whence参数的三种基准位置,以及文本模式与二进制模式下的行为差异。文件操作看似简单,实则蕴含着许多容易被忽视的细节。正确理解和使用这些API,不仅能避免隐蔽的bug,还能编写出更高效、更健壮的代码。建议在实践中多尝试不同的模式组合,通过tell()观察指针变化,逐步建立起对文件I/O的直观认知。

2026-04-21 11:51:48 313

原创 Python `with` 语句深入讲解

return self.file # 返回给 as 变量# 如果发生异常,可以记录或处理;这里返回 False 让异常继续传播# 使用场景资源清理操作文件读写文件描述符关闭文件线程锁锁对象释放锁数据库连接连接对象关闭连接/回滚事务临时文件/目录临时资源删除临时对象重定向 stdout/stderr标准流恢复原始流计时器性能计数器输出耗时with语句是 Python 优雅处理资源的基石,核心是上下文管理器协议。通过实现__enter____exit__或使用。

2026-04-20 22:15:11 337

原创 Python 生成器与生成器表达式详解

特性生成器函数生成器表达式语法适用场景复杂逻辑、状态保持、多步计算简单映射/过滤、单行表达式可读性函数形式更清晰(多步时)简洁(类似列表推导式)支持yield from是否支持send/throw是否(生成器表达式产生的对象无这些方法)生成器和生成器表达式是 Python 惰性编程的核心工具,掌握它们可以写出更高效、更优雅的代码。从处理 TB 级日志到实现流式 API,生成器都是不可或缺的利器。

2026-04-18 20:09:00 184

原创 Python鸭子多态

在 Python 中,“鸭子多态”通常指的是通过实现的。它不是一种独立的技术,而是 Python 动态类型特性带来的编程风格。

2026-04-16 20:28:06 46

原创 彻底搞懂「迭代器 Iterator」与「游标 Cursor」—— 同源异路的遍历设计

对比维度迭代器 Iterator游标 Cursor本质位置指针位置指针设计模式迭代器模式游标模式(同一模式)遍历方式惰性、逐个、流式惰性、逐个、流式存储位置内存数据库服务器重量轻量重量级资源无额外资源占连接、内存、锁关闭自动失效必须手动关闭功能单向遍历为主可滚动、可修改、可定位适用场景语言集合遍历数据库大结果集逐行处理。

2026-04-16 16:37:47 395

原创 深入理解 Python for 循环:不止一种形式,却只有一种语法格式

角度说明语法形式设计理念基于迭代器协议,统一且安全能力范围通过rangeenumeratezip、字典视图、解包等实现所有迭代需求与传统语言对比不直接提供for(i;cond;step),但能用range()完全模拟,且更不易出错Python 的for循环之所以强大,不是因为它提供了更多关键字,而是因为它建立在一个优雅的抽象——“迭代”之上。当你习惯了这种风格,你会发现自己写出的循环代码更短、更清晰、更少出现索引越界的 bug。就是你的答案,而才是 Python 的灵魂。

2026-04-16 14:03:33 344

原创 Windows下非管理员权限使用pip安装Python包:安装目录详解与实践指南

如果你不希望包安装在C盘(例如C盘空间紧张或想要迁移到D盘),可以通过设置环境变量来更改用户安装的根目录。在Windows下无需管理员权限也能愉快地使用pip安装Python包,这得益于pip内置的用户安装机制。默认目录位于,你可以通过pip show或轻松查找,也可以利用环境变量自定义位置。然而,对于正式的项目开发,请务必使用虚拟环境——这是Python社区公认的最佳实践,能帮你避免绝大多数依赖混乱的麻烦。希望这篇文章能帮助你更好地管理Python包。如果你有任何疑问或经验分享,欢迎在评论区留言!

2026-04-16 10:42:13 360

原创 Python 全局环境与虚拟环境深入讲解

全局环境指操作系统上安装的默认 Python 解释器及其配套工具和库。/usr/ (系统级)├── bin/python3 ← 解释器可执行文件├── lib/python3.x/ ← Python 主目录│ ├── os.py, sys.py... ← 标准库(与解释器绑定)│ └── site-packages/ ← 通过 pip 安装的第三方包(全局)└── ...标准库:随解释器一起提供,如ossysjson等。全局第三方包:通过安装到目录,所有用户和项目都能访问。配置文件:如。

2026-04-15 23:16:30 370

原创 深入 Python 模块与包:从自定义到标准库,再到第三方库的完全指南

创建一个自定义模块极其简单。新建文件print("mymodule 被加载了!")return f"# mymodule.py print("mymodule 被加载了!name }!# mymodule.py print("mymodule 被加载了!name }!# mymodule.py print("mymodule 被加载了!name }!# mymodule.py print("mymodule 被加载了!name }!# main.py# 输出:# mymodule 被加载了!注意。

2026-04-15 23:15:09 387

原创 从Windows到Linux:Shell脚本“无法执行:找不到需要的文件”问题深度解析与根治方案

Windows与Linux的Shell脚本兼容性问题,本质是换行符(CRLF/LF)、编码(BOM/UTF-8)两大底层差异导致的解析异常。排查:通过cat -v和file命令快速定位换行符、BOM头等异常;修复:根据单文件/批量场景,选择sed或dos2unix工具完成格式转换;预防:统一编辑器换行符为LF、编码为UTF-8无BOM,从源头杜绝问题。掌握这些技巧后,跨平台脚本开发将不再是“坑区”,大幅提升开发与运维效率。

2026-04-15 09:17:04 347

原创 Python 异常机制深度剖析

继承Exception或其子类,可以添加额外属性和方法。"""账户余额不足时抛出的异常"""super().__init__(f"余额不足: 需要class InsufficientFundsError(Exception) : """账户余额不足时抛出的异常""" def __init__(self , balance , required) : self . balance = balance。

2026-04-13 20:40:28 374

原创 彻底搞懂 Python 中的 __str__ 和 __repr__:从原理到最佳实践

对比维度__str____repr__面向对象普通用户开发者/调试者核心目标友好、可读、简洁精确、无歧义、可复现对象触发方式repr、REPL、容器内打印缺失时的兜底自动调用__repr__无兜底,使用默认内存地址格式理想输出格式自然语言描述类名(参数=值)可重建格式__str__给用户看,友好简洁;__repr__给开发者看,精确无歧义调用print/str走__str__,缺失则兜底__repr__调用repr/REPL/容器打印固定走__repr__最简规范:只实现。

2026-04-12 16:44:56 318

原创 Python 装饰器完全指南

特性说明无参数装饰器直接接收函数,返回包装函数。带参数装饰器外层接收参数,返回一个装饰器函数(三层嵌套)。类装饰器实现__call__的类可作装饰器,便于维护状态;也可装饰类本身。自动装饰@deco语法糖,定义时绑定。手动装饰,更灵活,可条件性装饰。多装饰器顺序应用自底向上,调用自顶向下。保留元数据始终使用。掌握装饰器需要理解闭包和可调用对象的概念。熟练之后,你可以写出优雅、可复用的横切关注点(日志、缓存、权限、重试等),大幅提升代码的模块化水平。

2026-04-12 15:51:08 345

原创 Python 闭包详解

闭包(Closure)是指在一个外部函数中定义的一个内部函数,该内部函数引用了外部函数的局部变量,并且外部函数将这个内部函数作为返回值返回。此时,这个内部函数连同它所引用的外部变量环境一起,就构成了一个闭包。简单理解:闭包 = 内部函数 + 外部函数中变量的引用环境。return x + y # 引用了外部函数的变量 xreturn inner # 返回内部函数closure = outer(10) # closure 就是一个闭包print(closure(5)) # 输出 15。

2026-04-11 22:28:20 374

原创 Python变量的四种作用域

作用域位置如何修改外部变量生命周期局部 (L)函数内部无需声明,直接赋值即创建局部变量函数调用期间外层 (E)嵌套函数的外层函数使用nonlocal声明外层函数调用期间全局 (G)模块顶层(任何函数/类外部)使用global声明模块被加载到解释器结束内建 (B)builtins模块不可直接修改(覆盖会导致错误)Python 解释器运行期间始终存在理解 LEGB 规则有助于写出清晰、无歧义的代码,并避免意外的变量遮蔽(shadowing)。

2026-04-11 22:11:53 392

原创 Python推导式(Comprehensions)

类型语法输出类型特点列表推导式list有序、可重复、立即生成集合推导式set无序、去重、立即生成字典推导式dict键值对、键唯一、立即生成生成器表达式generator惰性求值、内存友好、只能迭代一次。

2026-04-11 13:24:11 357

原创 Logstash 单次运行模式下的数据丢失陷阱:Output 缓冲区丢弃的根因与根治方案

问题根本原因推荐方案单次运行后数据随机丢失Output 插件内部缓冲区因进程退出而被丢弃启用schedule常驻服务(方案一)必须保持单次运行模式同上启用持久队列并设置(方案二)通过以上任一方案,均可彻底消除 Logstash 单次运行时的“幽灵”丢失问题,确保数据同步的完整性与可靠性。

2026-04-10 22:18:11 417

原创 Python 中的 Map 和 Reduce 详解

函数作用输入 → 输出特点map批量转换多个元素 → 同数量元素一对一处理reduce聚合汇总多个元素 → 单个值多对一汇总map用于对序列中每个元素执行相同操作,返回新序列reduce用于把序列所有元素合并成一个结果,需从functools导入两者搭配lambda使用最简洁,是 Python 数据处理的高效写法大数据中的MapReduce思想,就来源于这两个基础函数。

2026-04-09 21:37:53 237

原创 Python 有没有接口?

结论:Python 没有像 Java/C# 那样专门的 关键字,但完全可以实现「接口」的功能。我用最直白、面试必对的话讲清楚:Python 没有专门的 interface 语法,但 Python 用 抽象类(ABC + @abstractmethod)替代接口。Java 接口:Python 等价接口:特点完全一样:只定义方法规范,不实现子类必须全部实现,否则不能实例化用于统一接口、多态3. Python 实现「多接口」(Java 最核心功能)Java 可以 Python 直接多继承

2026-03-30 22:11:33 66

原创 # Python 抽象类(Abstract Class)

导入必需的模块和装饰器# 继承 ABC 成为抽象类# 抽象方法:只有声明,没有实现pass# 普通方法:可以直接实现,子类可直接使用print("我是一个图形")抽象类 = 继承ABC+ 包含方法抽象类不能实例化(至少有一个抽象方法的抽象类),仅作为模板使用子类必须实现所有抽象方法,否则无法使用强制规范、统一接口、提高代码可维护性。

2026-03-30 22:08:13 169

原创 Python 类型注解(Type Hints)

标注类型为 Personp: Person = Person("小明")类型注解是提示而非强制,不影响代码运行变量、函数参数、返回值、容器Optional(可选/多类型)、Callable(函数)配合mypy做静态检查,大幅提升代码质量。

2026-03-30 21:43:51 232

原创 Python 魔法方法

魔法方法 =__方法名__格式,自动触发,不用手动调用;让自定义类拥有 Python 内置类型的用法(打印、运算、索引等);__init____str____len____add__即可。

2026-03-30 21:12:28 46

原创 Python getter/setter 正确用法详解

getter/setter 的本质:不是为了“隐藏属性”,而是为了“控制属性的读写逻辑”,避免无效数据,提升代码健壮性。装饰器用法@property对应getter,@属性名.setter对应setter,@属性名.deleter对应deleter,三者名称必须一致。属性访问约定:单下划线 _attr 是受保护属性,外部可访问但不推荐直接操作;双下划线 __attr 是私有属性,外部无法直接访问(名称改写)。外部调用方式。

2026-03-30 20:34:29 359

原创 Python容器总结

2026-03-25 21:21:37 21

原创 Playwright抓包实战:从入门到精通,深挖事件机制核心逻辑

Playwright抓包的核心是事件监听机制,需在navigate前注册,且保证主线程不被深度阻塞;避免用等阻塞式IO操作,优先使用实现“等待不阻塞”;Playwright抓包适合“浏览器操作+网络监听”一体化场景,相比Charles/mitmproxy更轻量化,无需代理配置。理解Playwright的事件机制后,不仅能解决抓包问题,还能举一反三,应对页面事件监听、自动化操作回调等场景的同类问题。

2026-02-05 21:02:13 758

原创 SQL Server删除重复数据

本文针对SQL Server中news表的重复数据删除需求,提供了“CTE+窗口函数”的单条SQL高效实现方案,核心优势的在于:简洁性:无需临时表,单条SQL完成需求,易编写、易维护;高效性:基于窗口函数的分组排序,性能优于传统的子查询删除方案;灵活性:可通过调整分组字段、排序规则,适配多样化的业务场景。最后再次强调:删除数据前务必做好预览和备份,生产环境需谨慎操作。若你在实际落地过程中遇到其他复杂场景(如多字段去重、关联表去重),可基于本文核心逻辑进行扩展。

2026-01-28 10:06:43 871

原创 Selenium页面超时陷阱:为何第二次获取的是上一页面源码?

Selenium超时后获取上一页面源码,本质是「浏览器状态未更新+页面验证缺失」导致的问题。核心认知与实践要点如下:不要依赖的默认等待,必须搭配异常处理与显式等待,验证页面跳转结果。是轻量且彻底的上下文清空手段,适合对隔离性要求高的场景。复现与排查此类问题时,优先从“超时异常”和“页面跳转状态”入手,这是最常见、最易定位的原因。复现与排查此类问题时,优先从“超时异常”和“页面跳转状态”入手——可通过设置极短超时(如10毫秒)快速复现,再针对性优化超时配置与验证逻辑,这是最常见、最易定位的原因。

2026-01-15 11:26:44 683

原创 并发批量写入:想给数据库“提速”,反而把业务搞崩了?

很多时候,我们追求“并发批量”的“快”,反而因故障导致业务停摆,最终“慢得离谱”。对核心表(订单、库存、用户):坚决杜绝并发批量写入,用“串行+分批”保证稳定;对非核心表(日志、统计):可用并发,但需控制总量(如最多3个任务),并错峰执行;记住:数据库的“稳定”永远比“速度”重要——一次数据错乱或宕机,带来的损失远比“节省的几分钟”大得多。与其等业务崩了再救火,不如从一开始就避开这些陷阱——毕竟,能平稳运行的系统,才是最高效的系统。

2025-10-03 11:01:20 634

原创 从Nginx到Keepalived:反向代理高可用的技术闭环——Nginx、Keepalived、VIP与VRRP的深度联动解析

Nginx解决“反向代理与负载均衡”,但留下“单点故障”痛点;Keepalived解决“Nginx高可用”,但为避免自身成为新单点,采用“主备部署+VRRP心跳”的架构,实现“守护者自身也需被守护”;VIP解决“客户端地址统一”,成为高可用架构的“固定入口”;VRRP协议解决“VIP动态漂移”,为Keepalived的主备切换和VIP管理提供标准化底层动力。

2025-10-01 23:19:06 939

原创 分布式存储分片核心:从哈希取模到Redis哈希槽,从哈希类到非哈希类

若需“均匀分片、动态扩缩容”,优先选哈希类算法(一致性哈希、哈希槽);若需“高效范围查询、业务隔离”,优先选非哈希类算法(范围类、列表类);工程落地时,无需重复造轮子——分布式缓存用客户端内置一致性哈希,分库分表用Sharding-JDBC,Redis集群直接用哈希槽,重点是理解算法本质,避免因选型偏差导致数据倾斜、迁移灾难等问题。最终,好的分片方案不仅能解决当前存储瓶颈,更能为后续业务增长预留扩展空间——这正是算法选型的核心价值。

2025-10-01 10:50:05 1064

原创 Linux 进程名查看与pkill命令的使用

本文基于 Linux 系统环境,详细介绍进程名的查看方法、不同命令间的进程名显示差异原因,以及基于进程名的进程终止操作,解决实际使用中“进程名显示不一致”“杀进程失败”等常见问题。

2025-09-23 11:13:33 972

原创 Mysql optimize 与 analyze

和是 MySQL 中两个常被混淆的命令。虽然它们都以“优化”命名,但。下面从多个维度进行深入对比。

2025-09-17 11:22:46 1100

原创 MySQL与SQL Server复合索引的【最左前缀原则】差异

MySQL和SQL Server作为主流的关系型数据库管理系统(RDBMS),在复合索引的使用策略上存在显著差异,尤其是对“最左前缀原则”的处理方式。在设计索引时,需结合数据库特性、查询模式和数据分布,避免机械套用规则,而是通过实际测试和执行计划验证优化效果。这一原则要求查询条件必须包含复合索引的最左列,才能有效利用索引进行快速查找。即使查询条件未包含复合索引的最左列,SQL Server仍可能高效利用该索引。因此,索引的查询路径只能从最左列开始,逐步向右过滤。实现复合索引,其核心规则是。

2025-09-17 09:33:15 610

原创 Selenium 页面加载超时pageLoadTimeout与 iframe加载关系解析

是 Selenium WebDriver 提供的一个超时设置,用于控制页面完全加载的最大等待时间。这里的"页面完全加载"指的是浏览器中主页面(顶层文档)的load事件被触发。# 设置页面加载超时为30秒。

2025-09-04 18:06:19 609

原创 Selenium 超时完全指南:pageLoadTimeout、implicitlyWait 和 scriptTimeout 的深度解析

像给整个网页的下载和渲染设置一个截止时间:像告诉一个有点耐心的助手去找东西,它会反复找一段时间:像给执行长时间任务的工人设置一个时间限制下面我们详细分析每种超时的特性和使用场景。用于控制整个页面加载完成的等待时间。它等待浏览器onload事件完成,即页面基础 HTML 文档(DOM)及其所有依赖资源(CSS、JavaScript、图片等)都已加载完毕。作用于查找元素(和)的过程。当试图查找一个或多个在当前 DOM 中尚未出现的元素时,WebDriver 会轮询 DOM 一段时间,等待元素出现。

2025-09-04 15:52:26 1095

原创 从端口耗尽危机到性能提升:一次数据库连接问题的深度剖析与解决

环境一致性检查动态端口范围防火墙设置TCP/IP参数配置监控与预警体系建立端口使用率监控(>80%预警)监控数据库连接池状态设置应用性能监控(APM)连接管理规范化强制使用连接池管理数据库连接确保连接在使用后正确关闭(使用try-with-resources)定期进行连接泄漏检测// 使用try-with-resources确保连接关闭// 处理结果集分层解决方案短期:调整系统配置缓解问题中期:优化应用代码,使用连接池长期:架构优化,引入缓存、读写分离等。

2025-09-03 20:34:31 694

原创 logstash-output-jdbc插件离线安装

如果安装过程中遇到依赖问题,可能需要单独下载并安装缺失的依赖插件,重复上述步骤即可。文件通过U盘、移动硬盘等方式传输到离线环境的Logstash服务器。

2025-08-12 16:52:25 444

原创 释放容器线程——Servlet3.0异步处理真正的价值锚点

在微服务与云原生时代,线程即资源。这条 HTTP 请求有没有在 1 毫秒内把宝贵的容器线程还回去。释放容器线程,才是异步接口唯一的、不可替代的价值锚点。

2025-07-18 16:41:38 927

原创 非阻塞与多路复用的关系与区别

非阻塞I/O是打破传统阻塞模型的基础,它赋予单个I/O操作“不阻塞进程”的能力;而多路复用则是协调多个非阻塞I/O的“调度器”,通过内核的高效管理实现“一对多”的事件驱动。非阻塞是多路复用的必要条件:没有非阻塞I/O,多路复用无法实现多流并发处理;多路复用是规模化非阻塞的最优解:当非阻塞I/O的数量超过一定阈值,唯有借助内核级的多路复用机制,才能避免用户态轮询的性能灾难。从select到epoll。

2025-05-28 17:27:17 970

Ajax编程宝典--Internet之光

web革命,使用Ajax聊天,实现自动完成功能.

2011-05-09

Jax-ws RI包含的Jar包

Jax-ws RI包含的Jar包

2017-07-20

使用Jax-ws RI将webservice发布到Web容器(Tomcat)

使用Jax-ws RI将webservice发布到Web容器(Tomcat)

2017-07-20

固定管理系统

该系统是四人做的一个固定管理系统, 用extjs做的前端,mysql数据库,tomcat为服务器。 先在mysql中创建fam_database数据库, 然后运行creatDatabase.jsp就可以在数据库中创建表。 固定资产管理系统用来支持企业固定资产管理, 功能包括资产管理、资产采购、报表管理、系统用户管理。 该系统功能完善,可使企业的固定管理系统从纯手工中解脱出来, 实现企业固定管理系统自动化、规范化、合理化、科学化,其实用性强, 用户界面友好,有助于加快企业的信息传递和智能建设,并为企业整体实现信息化管理体系作好铺垫。

2011-10-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除