1分钟用DeepSeek编写一个PDF转Word软件
一、引言
如今,在线工具的普及让PDF转Word成为了一个常见需求,常见的pdf转word工具有收费的wps,免费的有pdfgear,见下文:
PDFgear:一款免费的PDF编辑、格式转化软件-CSDN博客
还有网上在线的免费pdf转word工具smallpdf, ilovepdf, 24pdf等。然而,大部分免费的在线转换工具都存在一些严重的隐私风险——文件往往需要上传至云端进行处理,这样操作极容易泄露敏感信息。
而且,许多在线平台都要求付费才能使用更高效的服务,如wps, 迅捷pdf等,这导致很多用户在无法快捷使用转换文件的服务。
为了避免上述问题,我决定利用Python开发一款本地化的PDF批量转换为Word的软件,不仅保证文件的隐私安全,还能提供完全免费、快捷、个性化的转换服务。
更重要的是,这个项目也有助于我巩固Python编程知识,深入运用DeepSeek模型提升编程能力。
二、软件的主要功能
这款PDF转word的主要功能包括:
1. 100%离线文档转换。有效地避免信息的泄露,同时也加快了文档的处理速度。
2. 支持批量PDF转Word:软件会自动扫描选择文件夹及其子文件夹(如果勾选了相关选项),并将其中的PDF文件转换为Word文档,可以节省用法大量的时间。
3. 文件夹选择与管理:用户可以选择输入和输出文件夹,支持自定义中英文路径。
4. 进度条显示:在转换过程中,软件会实时更新进度条,显示当前文件的转换进度以及整体的转换进度。
5. 自动打开目标文件夹:转换完成后,用户可以选择是否自动打开目标文件夹,查看转换结果,以便进一步操作。
三、设计过程
在设计这款应用时,我采用了Python的tkinter图形化界面和pdf2docx库来实现文件转换功能。具体如下图:
PDF转Word界面
用户界面:界面设计以简洁易用为主。通过tkinter的标签、文本框、按钮等控件,我实现了文件夹选择、设置选项、进度条显示等功能。
PDF转Word功能:因为有现成的pdf2docx的库,我采用了这个轮来进行PDF到Word格式的转换,再加上Python的批量处理功能,要以轻松满足我的文件转换需求。
多线程与进度更新:为避免界面卡顿,我使用了threading库来将文件转换操作放入独立线程,并利用queue进行线程间通信,实时更新进度条显示。
我们在设计时,借助了DeepSeek R1的深度思考模型。先上传软件图片,然后给出指令:
软件开发提示词
为了减少错误,我们在提示词加入了让deepseek进行自我运行代码,进行调试的功能,减少用户本地测试中产生的bug。
在其回复中,我们看到它针对我的提问题也进行了回答,尤其是在指定的Python环境下进行了测试。
DeepSeek自主调试功能
经过测试,代码运行无误,但是缺少进度条功能,可能是没有识别出来,或者漏掉了,于是通过追加提问:
这里我故意打错了一个汉字,但是DeepSeek还能正确地进行理解,同时很好地解决了进度条缺失的问题。就这样,我们通过两步,不到1分钟就可以把这个一个pdf转word工具制作出来。
在开发过程中,我为DeepSeek提供了完整的开发环境,DeepSeek通过对项目需求的分析,建议我添加更多的异常处理机制,特别是在文件路径不正确或者文件损坏的情况下的处理。最终,这些改进使得程序的稳定性和用户体验都得到了显著提升。
经过多次的调试和优化,软件终于成型,并可以稳定运行。用户只需选择文件夹并点击转换按钮,程序就会自动处理所有PDF文件,最终输出为Word格式。每一步的转换进度都会实时更新,确保用户能够清晰地了解当前状态。
四、代码展示
废话不多说,直接上软件的全部代码,同时提供了一些中文注释,供大家学习使用
import os
import tkinter as tk
from tkinter import ttk,filedialog, messagebox
from pdf2docx import Converter
import threading
import queueclass PDFToWordConverter:def __init__(self, master):self.master = mastermaster.title("PDF批量转Word")master.geometry("610x295")# 输入文件夹self.lbl_input = tk.Label(master, text="输入文件夹:")self.ent_input = tk.Entry(master, width=30)self.btn_input = tk.Button(master, text="选择", command=self.select_input)# 输出文件夹self.lbl_output = tk.Label(master, text="输出文件夹:")self.ent_output = tk.Entry(master, width=30)self.btn_output = tk.Button(master, text="选择", command=self.select_output)# 复选框self.var_subdir = tk.BooleanVar()self.var_open = tk.BooleanVar(value=True)self.chk_subdir = tk.Checkbutton(master, text="包含子文件夹", variable=self.var_subdir)self.chk_open = tk.Checkbutton(master, text="转换完成后打开目标文件夹", variable=self.var_open)# 转换按钮self.btn_convert = tk.Button(master, text="开始转换", command=self.start_conversion)# 布局self.lbl_input.grid(row=0, column=0, padx=10, pady=10, sticky=tk.W)self.ent_input.grid(row=0, column=1, padx=5, pady=10, sticky=tk.EW)self.btn_input.grid(row=0, column=2, padx=10, pady=10)self.lbl_output.grid(row=1, column=0, padx=10, pady=10, sticky=tk.W)self.ent_output.grid(row=1, column=1, padx=5, pady=10, sticky=tk.EW)self.btn_output.grid(row=1, column=2, padx=10, pady=10)self.chk_subdir.grid(row=2, column=1, padx=5, pady=5, sticky=tk.W)self.chk_open.grid(row=3, column=1, padx=5, pady=5, sticky=tk.W)self.btn_convert.grid(row=4, column=1, pady=10)# 新增进度组件self.progress_label = tk.Label(master, text="准备就绪")self.progress_bar = ttk.Progressbar(master, orient=tk.HORIZONTAL, mode='determinate')# 调整布局(新增两行)self.progress_label.grid(row=5, column=0, columnspan=3, padx=10, pady=5, sticky=tk.W)self.progress_bar.grid(row=6, column=0, columnspan=3, padx=10, pady=10, sticky=tk.EW)# 消息队列用于线程通信self.queue = queue.Queue()master.after(100, self.process_queue)# 配置列权重master.columnconfigure(1, weight=1)def select_input(self):path = filedialog.askdirectory()if path:self.ent_input.delete(0, tk.END)self.ent_input.insert(0, path)def select_output(self):path = filedialog.askdirectory()if path:self.ent_output.delete(0, tk.END)self.ent_output.insert(0, path)def start_conversion(self):# 重置进度条self.progress_bar['value'] = 0self.progress_label.config(text="正在扫描PDF文件...")input_dir = self.ent_input.get()output_dir = self.ent_output.get()if not input_dir or not output_dir:messagebox.showerror("错误", "请先选择输入和输出文件夹!")return# 禁用转换按钮self.btn_convert.config(state=tk.DISABLED)threading.Thread(target=self.convert_files, args=(input_dir, output_dir), daemon=True).start()def get_pdf_list(self, input_dir):pdf_list = []for root, dirs, files in os.walk(input_dir):if not self.var_subdir.get() and root != input_dir:continuefor file in files:if file.lower().endswith('.pdf'):pdf_list.append(os.path.join(root, file))return pdf_listdef convert_files(self, input_dir, output_dir):self.pdf_files = self.get_pdf_list(input_dir)try:total_files = len(self.pdf_files)for index, pdf_path in enumerate(self.pdf_files):# 更新当前文件进度self.queue.put(("file_progress", (index+1, total_files, pdf_path)))# 构建输出路径relative_path = os.path.relpath(os.path.dirname(pdf_path), input_dir) if self.var_subdir.get() else ""output_path = os.path.join(output_dir, relative_path)os.makedirs(output_path, exist_ok=True)# 转换文件docx_path = os.path.join(output_path, f"{os.path.splitext(os.path.basename(pdf_path))[0]}.docx")cv = Converter(pdf_path)cv.convert(docx_path, progress_callback=self.update_page_progress)cv.close()self.queue.put(("complete", None))except Exception as e:self.queue.put(("error", str(e)))def update_page_progress(self, current, total):# 页面级别进度(每文件0-100%)progress = (current / total) * 100 if total != 0 else 0self.queue.put(("page_progress", progress))def process_queue(self):try:while True:msg_type, data = self.queue.get_nowait()if msg_type == "file_progress":current, total, path = datafile_progress = (current / total) * 100self.progress_bar['value'] = file_progressself.progress_label.config(text=f"正在转换 {current}/{total}:{os.path.basename(path)}")elif msg_type == "page_progress":# 综合进度 = 文件进度 + 页面进度/总文件数current_file_progress = self.progress_bar['value']page_progress = data / len(self.pdf_files)self.progress_bar['value'] = current_file_progress + page_progresselif msg_type == "complete":messagebox.showinfo("完成", "转换完成!")if self.var_open.get():os.startfile(self.ent_output.get())self.btn_convert.config(state=tk.NORMAL)self.progress_label.config(text="转换完成")elif msg_type == "error":messagebox.showerror("错误", f"转换出错:{data}")self.btn_convert.config(state=tk.NORMAL)self.progress_label.config(text="转换出错")except queue.Empty:passfinally:self.master.after(100, self.process_queue)
if __name__ == "__main__":root = tk.Tk()app = PDFToWordConverter(root)root.mainloop()
五、注意事项与启示
文件路径问题:在处理文件时,一定要注意文件路径的正确性,尤其是在跨平台使用时,路径分隔符的差异可能会导致问题。
多线程同步:为了避免界面卡顿或响应不及时,使用线程来执行耗时任务是非常必要的。但在多线程操作中,确保线程间数据同步和UI更新是一个技术挑战。
与AI工具合作:DeepSeek的辅助对我来说至关重要。在未来的开发过程中,AI工具不仅能提升我的编程效率,还能为项目带来新的创意和解决方案。
通过这个项目,我利用DeepSeek R1模型,上传软件图片,给出提示词,让它很快地开发出来一个可以平稳运行的软件,通过与AI模型的持续会话,进一步修改和完善了软件,直至可以使用。
有了DeepSeek这样的模型,未来我们只需要想法,就可以让大模型帮我们找到解决办法,完成代码撰写任务,甚至还可以进行远程调试,最终为用户提供更加精确的代码,大大缩短了项目开发的时间,让我们体会到了大语言模型的强大。
相关文章:
1分钟用DeepSeek编写一个PDF转Word软件
一、引言 如今,在线工具的普及让PDF转Word成为了一个常见需求,常见的pdf转word工具有收费的wps,免费的有pdfgear,见下文: PDFgear:一款免费的PDF编辑、格式转化软件-CSDN博客 还有网上在线的免费pdf转word工具smallp…...
百度觉醒,李彦宏渴望光荣
文 | 大力财经 作者 | 魏力 2025年刚刚开年,被一家名为DeepSeek的初创公司强势改写。在量化交易出身的创始人梁文锋的带领下,这支团队以不到ChatGPT 6%的训练成本,成功推出了性能可与OpenAI媲美的开源大模型。 此成果一经问世,…...
MySQL知识
1.Navicat客户端连接 打开navicat,点击连接,点击MySQL 输入连接名与密码,如果连接的mysql是windows下的mysql主机号就填写localhost 填写好后点击测试连接 点击确定,mysql连接navicat成功 2.MySQL数据定义语言(DDL) DDL用于数据库…...
从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(三) 实现注册 登录接口
1.划分文件夹 在src目录下创建controllers middleware models routes controllers 放具体的方法 signup login middleware 里面是中间件 请求的验证 models 放对象实体 routes 处理访问路径像/signup /login 等等 2. 接口开发 系统的主要 有用户认证 和 消息 2种类型…...
Pytorch实现之浑浊水下图像增强
简介 简介:这也是一篇非常适合GAN小白们上手的架构文章!提出了一种基于GAN的水下图像增强网络。这种网络与其他架构类似,生成器是卷积+激活函数+归一化+残差结构的组成,鉴别器是卷积+激活函数+归一化以及全连接层。损失函数是常用的均方误差、感知损失和对抗损失三部分。 …...
代码异常(js中forEach)NO.3
1. 环境 Vue3,Element Plsu 2. 示例代码 dataList.value.forEach((x) > {if (x.id ids.value[0]) {x { id: ids.value[0], ...form.value }}})3. 情景描述 循环不能正确改变dataList.value里面的值 4. 原因 在 JavaScript 中,forEach 的回调函…...
Vue 报错error:0308010C:digital envelope routines::unsupported 解决方案
Vue 报错error:0308010C:digital envelope routines::unsupported 解决方案 拿了一个比较老的项目部署在本地,然后先安装依赖npm install,最后npm run serve,在run serve的时候报错:报错error:0308010C:digital envelope routines::unsupportedÿ…...
stm32108键C-B全调性_动态可视化乐谱钢琴
108键全调性钢琴 一 基本介绍1 项目简介2 实现方式3 项目构成 二 实现过程0 前置基本外设驱动1 声音控制2 乐谱录入&基础乐理3 点阵屏谱点动态刷新4 项目交互控制5 录入新曲子过程 三 展示,与链接视频地址1 主要功能函数一览2 下载链接3 视频效果 一 基本介绍 …...
OpenIPC开源FPV之Adaptive-Link安装
OpenIPC开源FPV之Adaptive-Link安装 1. 源由2. 介绍2.1 天空端安装2.2 地面端安装 3. 问题汇总3.1 安装脚本问题3.2 网络安装问题3.3 非SSC30KQ/SSC338Q硬件3.4 代码疑问 4. 总结5. 后续 1. 源由 鉴于飞行过程,发现一些马赛克现象,且60FPS桌面30FPS的录…...
2016年下半年试题二:论软件设计模式及其应用
论文库链接:系统架构设计师论文 论文题目 软件设计模式(Software DesignPatter)是一套被反复使用的、多数人知晓的、经过分类编目的代码设计经验的总结。使用设计模式是为了重用代码以提高编码效率增加代码的可理解性、保证代码的可靠性。软件设计模式是软件开发中的…...
UE(虚幻)学习(五)初学创建NPC移动和遇到的问题
最近在学习UE中遇到一些问题,把这些问题记录一下,因为实在废了很大功夫。 在学习了UE5的例子中的第三人称移动Demo,想实现几个NPC在场景内移动。 本来想自己写一个类,遇到一堆问题花费了好几天时间,所以我把问题写下来…...
《Keras 2 :使用 RetinaNet 进行对象检测》:此文为AI自动翻译
《Keras 2 :使用 RetinaNet 进行对象检测》 作者:Srihari Humbarwadi 创建日期:2020/05/17 最后修改日期:2023/07/10 描述:实施 RetinaNet:用于密集对象检测的焦点损失。 (i) 此示例使用 Keras 2 在 Colab 中查看 • 介绍 目标检测是计算机中非常重要的问题 视觉。在…...
mfy学习笔记
创建表并导入数据 CREATE TABLE sales (id INT,salesperson STRING,region STRING,sales_amount INT,sale_date DATE );INSERT INTO sales (id, salesperson, region, sales_amount, sale_date) VALUES (1, Alice, North, 1000, 2023-01-01), (2, Bob, South, 1500, 2023-01-0…...
mysql 学习19 MYSQL管理以及使用工具
系统数据库 常用工具 mysql [rootCentOS7 home]# mysql -h192.168.245.131 -P3306 -uroot -pmimaroot -e "select * from tb_sanguo_user;" centositcast [rootCentOS7 home]# mysql -h192.168.245.131 -P3306 -uroot -pmimaroot centositcast -e "select * fr…...
Linux | RHEL / CentOS 中 YUM history / downgrade 命令回滚操作
注:英文引文,机翻未校。 在 RHEL/CentOS 系统上使用 YUM history 命令回滚升级操作 作者: 2daygeek 译者: LCTT DarkSun 为服务器打补丁是 Linux 系统管理员的一项重要任务,为的是让系统更加稳定,性能更加…...
JavaScript基础(函数及面向对象)
函数 定义函数 Java定义方法: public 返回值类型 方法名(){ return 返回值 } 定义函数方法一 eg:定义一个绝对值函数 function abs(x) {if (x>0){return x;}else {return -x;}} 调用函数: 注意:一旦执行到return代表函数…...
Open WebUI中的Pipelines是什么
Open WebUI中的Pipelines是什么 Open WebUI中的Pipelines(管道或流水线)是一种允许开发者定制使用大模型流程的机制,能为OpenAI兼容的UI客户端带来模块化、定制化的工作流。以下是一些Pipelines实例及使用方法: 函数调用管道(Function Calling Pipeline) 实例:假设要让…...
伪404兼容huawei生效显示404
根据上述思考,以下是详细的中文分步说明: --- **步骤 1:获取目标设备的User-Agent信息** 首先,我们需要收集目标设备的User-Agent字符串,包括: 1. **iPhone设备的User-Agent**: Mozi…...
Linux 病毒扫描工具 ClamAV 使用
Linux 病毒扫描工具 ClamAV 使用 功能安装包管理器安装手动安装RPM/DEB包配置用户与目录更新病毒库 基本使用命令扫描文件/目录常用参数 高级配置实时监控(clamd服务)定时自动扫描 常见问题解决病毒库更新失败权限错误扫描速度慢 功能 官网:h…...
Mobaxterm服务器常用命令(持续更新)
切换文件夹 cd path # for example, cd /gpu03/deeplearning/进入不同GPU ssh mgmt ssh gpu01 ssh gpu03寻找文件位置 find /path -name file_name #for example, find / -name lib #在根目录下搜寻名为lib文件 #for example, find /home/deeplearning -name "lib"…...
[特殊字符]《封印adb的黑暗通道:让系统文件成为魔法禁书区的终极指南》[特殊字符]
第一章:当adb变成泄密特洛伊木马 "曾经,adb是程序员的阿拉丁神灯,如今却成了产品经理的噩梦!" —— 某秃头CTO的血泪控诉 某日,产品经理惊恐发现:自家黑科技APP竟被竞争对手用adb pull轻松窃取…...
LangChain教程 - RAG - 支持的100种向量数据库
系列文章索引 LangChain教程 - 系列文章 随着人工智能和机器学习应用的快速发展,尤其是在自然语言处理(NLP)、图像识别、推荐系统等领域,对高效的向量存储和检索需求日益增长。向量存储用于保存来自深度学习模型或其他机器学习算…...
如何使用tushare pro获取股票数据——附爬虫代码以及tushare积分获取方式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据 总结 一、Tushare 介绍 Tushare 是一个提供中国股市数据的API接口服务,它允许用户…...
ESP32S3:解决RWDT无法触发中断问题,二次开发者怎么才能使用内部RTC看门狗中断RWDT呢?
目录 基于ESP32S3:解决RWDT无法触发中断问题引言解决方案1. 查看报错日志2. 分析报错及一步一步找到解决方法3.小结我的源码基于ESP32S3:解决RWDT无法触发中断问题 引言 在嵌入式系统中,RWDT(看门狗定时器)是确保系统稳定性的重要组件。然而,在某些情况下,RWDT可能无法…...
如何在视频中提取关键帧?
在视频处理中,提取关键帧是一项常见的任务。下面将介绍如何基于FFmpeg和Python,结合OpenCV库来实现从视频中提取关键帧的功能。 实现思路 使用FFmpeg获取视频的关键帧时间戳:FFmpeg是一个强大的视频处理工具,可以通过命令行获取…...
基于 Python 的电影市场预测分析系统设计与实现(源码 + 文档)
大家好,今天要和大家聊的是一款基于 Python 的“电影市场预测分析”系统的设计与实现。项目源码以及部署相关事宜请联系我,文末附上联系方式。 项目简介 基于 Python 的“电影市场预测分析”系统主要面向以下用户角色:电影制片方、电影发行…...
2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题6)-网络部分解析-附详细代码
目录 附录1:拓扑图 附录2:地址规划表 1.SW1 2.SW2 3.SW3 4.SW4 5.VSU 6.SW7 7.R1 8.R2 9.R3 10.AC1 11.AC2 12.EG1 13.EG2 附录1:拓扑图 附录2:地址规划表...
道路三维数字化技术产品方案介绍(软硬件一体,适用于各等级公路)
目录 1、方案介绍2、设备系统简介3、设备系统技术指标4、数据处理软件简介5、数据管理平台简介6、成果展示 1、方案介绍 交通运输部印发《关于推进公路数字化转型加快智慧公路建设发展的意见》,推动公路建设、养护、运营等全流程数字化转型。提出了2027年和2035年的…...
速通HTML
目录 HTML基础 1.快捷键 2.标签 HTML进阶 1.列表 a.无序列表 b.有序列表 c.定义列表 2.表格 a.内容 b.合并单元格 3.表单 a.input标签 b.单选框 c.上传文件 4.下拉菜单 5.文本域标签 6.label标签 7.按钮标签 8.无语义的布局标签div与span 9.字符实体 HTML…...
从 Spring Boot 2 升级到 Spring Boot 3 的终极指南
一、升级前的核心准备 1. JDK 版本升级 Spring Boot 3 强制要求 Java 17 及以上版本。若当前项目使用 Java 8 或 11,需按以下步骤操作: 安装 JDK 17:从 Oracle 或 OpenJDK 官网下载,配置环境变量(如 JAVA_HOME&…...
Java 大视界 —— Java 大数据在智慧能源微电网能量管理中的关键技术(100)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
springboot实现多文件上传
springboot实现多文件上传 代码 package com.sh.system.controller;import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PostMap…...
vue自定义指令千分位
问题 开发的时候经常会遇到需要在输入框中输入数字转为千分位,点击填写时又转为数字的情况 解决 因此直接在vue中注入自定义指令,通过使用自定义指令达到效果;限制input输入框只能输入数字和一位小鼠带你 自定义指令-千分位 // 自定义指令-千…...
深入理解Redis:数据类型、事务机制及其应用场景
在当今快速发展的技术领域中,Redis作为一种高性能的内存数据库,已经被广泛应用于各种场景,从简单的缓存实现到复杂的数据处理任务。其灵活性和高效性主要来源于对多种数据结构的支持以及强大的功能特性,如事务处理、持久化选项、高…...
JVM生产环境问题定位与解决实战(三):揭秘Java飞行记录器(JFR)的强大功能
提到飞行记录器,或许你的脑海中并未立刻浮现出清晰的画面,但一说起“黑匣子”,想必大多数人都能恍然大悟,知晓其重要性及用途。在航空领域,黑匣子作为不可或缺的设备,默默记录着飞行过程中的每一项关键数据…...
MongoDB私人学习笔记
俗话说“好记性不如烂笔头”,编程的海洋如此的浩大,养成做笔记的习惯是成功的一步! 此笔记主要是ZooKeeper3.4.9版本的笔记,并且笔记都是博主自己一字一字编写和记录,有错误的地方欢迎大家指正。 一、基础知识…...
Ant Design按钮样式深度适配:实现<Button>与<a>标签颜色完美同步
Ant Design按钮样式深度适配:实现与标签颜色完美同步 问题现象诊断 组件结构原型 <Button type"link" disabled{disabled}><a href"...">下载</a> </Button>样式冲突表现 状态按钮颜色链接颜色视觉问题启用态Ant蓝…...
linux下软件安装、查找、卸载
目录 常见安装方式有三种: 1.源码安装。 2.rpm安装方式。 3.yum/apt工具级别安装。 对于前两种安装方式,因为软件可能有依赖关系(安装的软件依赖于某些库,而这些库又依赖于某些库,这些都需要手动安装)…...
鸿蒙开发深入浅出01(基本环境搭建、页面模板与TabBar)
鸿蒙开发深入浅出01(基本环境搭建、页面模板与TabBar) 1、效果展示2、下载 DevEco Studio3、创建项目4、新建页面模板5、更改应用信息6、新建以下页面7、Index.ets8、真机运行9、图片资源文件 1、效果展示 2、下载 DevEco Studio 访问官网根据自己的版本…...
【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片
【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片 根据您的需求,目前需要了解以下几个关键点及分步解决方案: --- 一、现状分析 1. Ollama 的限制: - 目前Ollama主要面向文本大模型,原生不支持直接上传/处理图片 …...
微信小程序源码逆向 MacOS
前言 日常工作中经常会遇到对小程序的渗透测试,微信小程序的源码是保存在用户客户端本地,在渗透的过程中我们需要提取小程序的源码进行问题分析,本篇介绍如何在苹果电脑 MacOS 系统上提取微信小程序的源码。 0x01 微信小程序提取 在苹果电…...
2025年2月科技热点深度解析:AI竞赛、量子突破与开源革命
引言 2025年的科技领域持续呈现爆发式增长,AI大模型竞争白热化、量子计算商业化加速、开源工具生态繁荣成为本月最受关注的议题。本文结合最新行业动态,从技术突破、商业布局到开发者生态,全面解析当前科技热点,为读者提供深度洞…...
Wireshark简单教程
1.打开Wireshark,点击最上面栏目里面的“捕获”中的“选项” 2.进入网卡选择界面,选择需要捕获的选择,这里我选择WLAN 3.双击捕获选择出现下面界面 4.点击如下图红方框即可停止捕获 5.点击下图放大镜可以进行放大 6.你也可以查询tcp报文如下图...
stm32单片机个人学习笔记16(SPI通信协议)
前言 本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 STM32入门教程-2023版 细…...
面试题——简述Vue 3的服务器端渲染(SSR)是如何工作的?
面试题——简述Vue3的服务器端渲染(SSR)是如何工作的? 服务器端渲染(SSR)已经成为了一个热门话题。Vue 3,作为一款流行的前端框架,也提供了强大的SSR支持。那么,Vue 3的SSR究竟是如何…...
Ubuntu 22.04安装K8S集群
以下是Ubuntu 22.04安装Kubernetes集群的步骤概要 一、设置主机名与hosts解析 # Master节点执行 sudo hostnamectl set-hostname "k8smaster" # Worker节点执行 sudo hostnamectl set-hostname "k8sworker1"# 所有节点的/etc/hosts中添加: ca…...
Ubuntu搭建esp32环境 配置打开AT指令集 websocket功能
1,搭建前提 环境搭建参考乐鑫官网给的本地编译 ESP-AT 工程方法 因为公司电脑和网络的特殊性,不能正确解析域名(仅在浏览器上可以访问) ,所以这边访问的时候改成了ssh 未了避免使用外网困难的问题,这里用…...
java八股文-消息队列
一、MQ基础篇 1. 什么是消息队列? 消息队列(MQ)是分布式系统中实现异步通信的中间件,解耦生产者和消费者。 2. 使用场景有哪些? 异步处理(如注册后发送邮件)系统解耦(不同服务通过…...
[晕事]今天做了件晕事65,gcc,cmake, pragam
文章目录 晕事cmake,unity,对gcc pragma指令有没有影响pragma指令的影响pragma指令的使用规范使用注意事项:晕事 最近在某些不能有优化的函数前加了指令 #pragma GCC optimize ("O0")我记得是这个指令只影响当前编译单元。 但是被人找上来了, 因为这个文件所牵…...
SAP-ABAP:使用ST05(SQL Trace)追踪结构字段来源的步骤
ST05 是 SAP 提供的 SQL 跟踪工具,可以记录程序运行期间所有数据库操作(如 SELECT、UPDATE、INSERT)。通过分析跟踪结果,可以精准定位程序中结构字段对应的数据库表。 步骤1:激活ST05跟踪 事务码 ST05 → 点击 Activa…...