当前位置: 首页 > news >正文

【开源工具】一键解决使用代理后无法访问浏览器网页问题 - 基于PyQt5的智能代理开关工具开发全攻略

🌐【开源工具】一键解决使用代理后无法访问浏览器网页问题 - 基于PyQt5的智能代理开关工具开发全攻略

在这里插入图片描述
请添加图片描述

🌈 个人主页:创客白泽 - CSDN博客
🔥 系列专栏:🐍《Python开源项目实战》
💡 热爱不止于代码,热情源自每一个灵感闪现的夜晚。愿以开源之火,点亮前行之路。
🐋 希望大家多多支持,我们一起进步!
👍 🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗分享给更多人哦

请添加图片描述

在这里插入图片描述

📌 概述:代理访问的痛点与解决方案

在日常开发和学习中,我们经常需要使用代理访问国际资源。但Windows系统代理设置存在几个典型痛点:

  1. 代理频繁失效需要手动切换
  2. 设置路径深(控制面板→Internet选项→连接→局域网设置)
  3. 状态不可视化,无法快速判断当前代理状态

本文介绍一款基于PyQt5开发的可视化代理开关工具,具有以下核心优势:

  • 一键切换系统代理状态
  • 美观的动画可视化效果
  • 实时状态反馈
  • 便携式设计(单文件运行)

🛠️ 功能特性

核心功能

  • 注册表代理状态实时检测
  • 管理员权限自动检测
  • 系统设置变更通知
  • 拖拽式无边框窗口

增强特性

  • 平滑过渡动画(QEasingCurve控制)
  • 自适应UI布局
  • 多显示器DPI适配
  • 跨平台兼容处理(Windows/macOS)

🎥 效果展示

在这里插入图片描述
在这里插入图片描述

图1:工具运行效果(开启/关闭状态对比对应的网络代理开启变化)

🧰 开发环境准备

基础环境

  • Python 3.8+
  • PyQt5 5.15
  • Windows 10/11(需管理员权限)

安装依赖

pip install pyqt5 win32ctypes ctypes

🚀 使用说明

基础使用

  1. 直接运行程序(建议管理员权限)
  2. 点击滑块切换代理状态
  3. 顶部拖拽区域可移动窗口
  4. 点击×按钮关闭程序

高级配置

修改代理服务器地址(需编辑注册表):

# 在setProxyState方法中添加以下代码
proxy_server = "127.0.0.1:1080"
winreg.SetValueEx(key, "ProxyServer", 0, winreg.REG_SZ, proxy_server)

🔍 代码深度解析

1. 自定义SwitchButton组件

class SwitchButton(QWidget):toggled = pyqtSignal(bool)def paintEvent(self, event):# 使用QLinearGradient实现渐变色效果gradient = QLinearGradient(bg_rect.topLeft(), bg_rect.bottomRight())if self._checked:gradient.setColorAt(0, QColor("#66BB6A"))  # 开启状态渐变色else:gradient.setColorAt(0, QColor("#E0E0E0"))  # 关闭状态渐变色

关键点分析

  • 通过pyqtProperty实现动画属性绑定
  • 使用QEasingCurve.OutQuad实现自然减速效果
  • 双状态绘制逻辑(开启/关闭)

2. 注册表操作核心逻辑

def setProxyState(self, enabled):try:with winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Internet Settings", 0, winreg.KEY_WRITE) as key:winreg.SetValueEx(key, "ProxyEnable", 0, winreg.REG_DWORD, 1 if enabled else 0)# 关键!通知系统设置变更self.notifySystem()

注册表路径解析

HKEY_CURRENT_USER
└── Software└── Microsoft└── Windows└── CurrentVersion└── Internet Settings├── ProxyEnable (DWORD)└── ProxyServer (STRING)

3. 系统通知机制

def notifySystem(self):INTERNET_OPTION_SETTINGS_CHANGED = 39INTERNET_OPTION_REFRESH = 37ctypes.windll.Wininet.InternetSetOptionW(0, INTERNET_OPTION_SETTINGS_CHANGED, 0, 0)ctypes.windll.Wininet.InternetSetOptionW(0, INTERNET_OPTION_REFRESH, 0, 0)

技术原理
调用WinINet API通知系统代理设置已变更,避免需要重启浏览器才能生效

💾 完整源码下载

import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QFrame)
from PyQt5.QtCore import (Qt, QPropertyAnimation, QEasingCurve, QPoint, pyqtProperty, pyqtSignal)
from PyQt5.QtGui import QColor, QFont, QPainter, QBrush, QPen, QLinearGradient
import winreg
import ctypes
import platformclass SwitchButton(QWidget):toggled = pyqtSignal(bool)def __init__(self, parent=None):super().__init__(parent)self.setFixedSize(80, 40)self._checked = Falseself._circle_position = QPoint(5, 5)  # 明确初始化位置self._bg_color = QColor("#cccccc")self._circle_color = QColor("#ffffff")self._active_color = QColor("#4CAF50")self._animation = QPropertyAnimation(self, b"circle_position")self._animation.setDuration(200)self._animation.setEasingCurve(QEasingCurve.OutQuad)def paintEvent(self, event):painter = QPainter(self)painter.setRenderHint(QPainter.Antialiasing)# 绘制背景bg_rect = self.rect()gradient = QLinearGradient(bg_rect.topLeft(), bg_rect.bottomRight())if self._checked:gradient.setColorAt(0, QColor("#66BB6A"))gradient.setColorAt(1, QColor("#81C784"))else:gradient.setColorAt(0, QColor("#E0E0E0"))gradient.setColorAt(1, QColor("#BDBDBD"))painter.setBrush(QBrush(gradient))painter.setPen(Qt.NoPen)painter.drawRoundedRect(bg_rect, 20, 20)# 绘制圆形滑块painter.setBrush(QBrush(self._circle_color))painter.setPen(QPen(QColor("#999999"), 1))painter.drawEllipse(self._circle_position.x(), 5, 30, 30)@pyqtProperty(QPoint)def circle_position(self):return self._circle_position@circle_position.setterdef circle_position(self, pos):self._circle_position = posself.update()def mousePressEvent(self, event):if event.button() == Qt.LeftButton:self.toggle()def toggle(self, checked=None):if checked is None:self._checked = not self._checkedelse:self._checked = checked# 动画效果start_pos = QPoint(5, 5) if not self._checked else QPoint(45, 5)end_pos = QPoint(45, 5) if not self._checked else QPoint(5, 5)self._animation.stop()self._animation.setStartValue(start_pos)self._animation.setEndValue(end_pos)self._animation.start()self.update()self.toggled.emit(self._checked)def isChecked(self):return self._checkeddef setChecked(self, checked):self.toggle(checked)class ProxySwitchApp(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("网络代理开关")self.setFixedSize(180, 210)self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint)self.setAttribute(Qt.WA_TranslucentBackground)self.initUI()self.initProxyState()def initUI(self):# 主窗口容器self.main_widget = QWidget()self.main_widget.setObjectName("mainWidget")self.setCentralWidget(self.main_widget)# 主布局layout = QVBoxLayout(self.main_widget)layout.setContentsMargins(20, 20, 20, 20)layout.setSpacing(20)# 标题栏title_bar = QWidget()title_bar.setFixedHeight(30)title_bar_layout = QHBoxLayout(title_bar)title_bar_layout.setContentsMargins(0, 0, 0, 0)self.title_label = QLabel("网络代理开关")self.title_label.setStyleSheet("font-size: 16px; font-weight: bold; color: #333333;")self.close_btn = QPushButton("×")self.close_btn.setFixedSize(30, 30)self.close_btn.setStyleSheet("""QPushButton {border: none;font-size: 18px;color: #777777;}QPushButton:hover {color: #ffffff;background-color: #E81123;border-radius: 15px;}""")self.close_btn.clicked.connect(self.close)title_bar_layout.addWidget(self.title_label)title_bar_layout.addStretch()title_bar_layout.addWidget(self.close_btn)# 开关控件switch_container = QWidget()switch_layout = QHBoxLayout(switch_container)switch_layout.setContentsMargins(0, 0, 0, 0)self.switch = SwitchButton()self.switch.toggled.connect(self.onSwitchToggled)self.status_label = QLabel()self.status_label.setStyleSheet("font-size: 14px; color: #555555;")self.status_label.setAlignment(Qt.AlignCenter)switch_layout.addStretch()switch_layout.addWidget(self.switch)switch_layout.addStretch()# 底部信息info_label = QLabel("点击滑块切换代理状态")info_label.setStyleSheet("font-size: 12px; color: #888888;")info_label.setAlignment(Qt.AlignCenter)# 添加到主布局layout.addWidget(title_bar)layout.addWidget(switch_container)layout.addWidget(self.status_label)layout.addWidget(info_label)layout.addStretch()# 设置样式self.main_widget.setStyleSheet("""#mainWidget {background-color: #ffffff;border-radius: 10px;border: 1px solid #dddddd;}""")def initProxyState(self):try:with winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Internet Settings", 0, winreg.KEY_READ) as key:value, _ = winreg.QueryValueEx(key, "ProxyEnable")self.switch.setChecked(value == 1)self.updateStatusLabel(value == 1)except WindowsError:self.switch.setChecked(False)self.updateStatusLabel(False)def onSwitchToggled(self, checked):self.setProxyState(checked)self.updateStatusLabel(checked)def setProxyState(self, enabled):try:with winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Internet Settings", 0, winreg.KEY_WRITE) as key:winreg.SetValueEx(key, "ProxyEnable", 0, winreg.REG_DWORD, 1 if enabled else 0)# 通知系统设置已更改self.notifySystem()return Trueexcept WindowsError as e:print(f"修改注册表失败: {e}")# 尝试以管理员身份运行if not self.isAdmin():self.showMessage("需要管理员权限", "请以管理员身份运行此程序")return Falsedef updateStatusLabel(self, enabled):if enabled:self.status_label.setText("代理状态: <span style='color:#4CAF50;'>已开启</span>")else:self.status_label.setText("代理状态: <span style='color:#F44336;'>已关闭</span>")def isAdmin(self):try:return ctypes.windll.shell32.IsUserAnAdmin()except:return Falsedef notifySystem(self):"""通知系统代理设置已更改"""if platform.system() == "Windows":INTERNET_OPTION_SETTINGS_CHANGED = 39INTERNET_OPTION_REFRESH = 37ctypes.windll.Wininet.InternetSetOptionW(0, INTERNET_OPTION_SETTINGS_CHANGED, 0, 0)ctypes.windll.Wininet.InternetSetOptionW(0, INTERNET_OPTION_REFRESH, 0, 0)def showMessage(self, title, message):from PyQt5.QtWidgets import QMessageBoxQMessageBox.information(self, title, message)def mousePressEvent(self, event):if event.button() == Qt.LeftButton:self.drag_pos = event.globalPos()event.accept()def mouseMoveEvent(self, event):if event.buttons() == Qt.LeftButton and hasattr(self, 'drag_pos'):self.move(self.pos() + event.globalPos() - self.drag_pos)self.drag_pos = event.globalPos()event.accept()if __name__ == "__main__":app = QApplication(sys.argv)# 设置全局字体font = QFont("Microsoft YaHei" if platform.system() == "Windows" else "PingFang SC")app.setFont(font)window = ProxySwitchApp()window.show()sys.exit(app.exec_())

🏆 进阶优化方向

1. 多代理配置预设

self.proxy_presets = {"SSR": "127.0.0.1:1080","Clash": "127.0.0.1:7890","V2Ray": "127.0.0.1:10808"
}

2. 系统托盘支持

from PyQt5.QtWidgets import QSystemTrayIcon, QMenudef createTrayIcon(self):tray = QSystemTrayIcon(self)menu = QMenu()# 添加菜单项...tray.setContextMenu(menu)tray.show()

3. 自动代理配置(PAC)支持


winreg.SetValueEx(key, "AutoConfigURL", 0, winreg.REG_SZ, pac_url)

📚 技术栈深度

PyQt5动画系统

  • QPropertyAnimation:属性动画核心类
  • QEasingCurve:提供30+种缓动曲线
  • 属性绑定机制:@pyqtProperty装饰器

Windows注册表安全

  • 权限管理:KEY_WRITE需要管理员权限
  • 异常处理:WindowsError捕获
  • 64/32位兼容:KEY_WOW64_64KEY标志

🧐 常见问题解答

Q:为什么修改后代理不立即生效?
A:需要调用InternetSetOptionW通知系统,部分浏览器可能需要手动刷新

Q:如何支持 socks5 代理?
A:需修改注册表ProxyServer值为socks=127.0.0.1:1080

Q:程序无法修改注册表?
A:右键以管理员身份运行,或添加UAC清单文件

🎯 总结与展望

本文开发的代理开关工具解决了以下核心问题:

  1. 将复杂的注册表操作可视化
  2. 提供状态即时反馈
  3. 通过动画提升用户体验

未来扩展方向

  • 增加代理延迟测试功能
  • 支持代理规则分组
  • 开发浏览器插件联动控制

技术思考:这种将系统底层配置可视化的思路,同样适用于其他系统设置管理(如环境变量、服务控制等),值得深入探索。


版权声明:本文代码部分采用MIT开源协议,转载请注明出处。技术交流欢迎评论区留言或私信作者。

相关文章:

【开源工具】一键解决使用代理后无法访问浏览器网页问题 - 基于PyQt5的智能代理开关工具开发全攻略

&#x1f310;【开源工具】一键解决使用代理后无法访问浏览器网页问题 - 基于PyQt5的智能代理开关工具开发全攻略 &#x1f308; 个人主页&#xff1a;创客白泽 - CSDN博客 &#x1f525; 系列专栏&#xff1a;&#x1f40d;《Python开源项目实战》 &#x1f4a1; 热爱不止于代…...

uniapp安卓GPIO电平控制

模块简介 本模块为 UniApp 提供了对 Android 系统下 GPIO 的访问能力&#xff0c;支持导出、设置方向、读写电平值等操作。适用于 Android 架构设备&#xff08;如 RK3288 平台&#xff09;。 支持功能 功能方法名说明初始化 GPIO 方向initGpio({gpio, direction})设置 GPIO…...

苹果芯片macOS安装版Homebrew(亲测)

在Linux服务器上安装一个软件常用yum&#xff0c;apt、dnf命令&#xff0c;同样macOS可以使用brew命令来安装软件。 brew会自动帮你下载、解压、安装和配置&#xff0c;更重要的是&#xff1a;它还会自动处理好软件之间的依赖关系&#xff0c;它将所有软件都安装在独立的统一目…...

vue | vue-macros 插件升级以及配置

Vue Macros 是一个为 Vue.js 提供更多宏和语法糖的开源项目vue-macros/vue-macros: Explore and extend more macros and syntax sugar to Vue. 问题&#xff1a;npm run build-only 打包时&#xff0c;报错&#xff1a;[Vue] Load plugin failed: vue-macros/volar 排查发现…...

计算机网络:(六)超详细讲解数据链路层 (附带图谱表格更好对比理解)

计算机网络&#xff1a;&#xff08;六&#xff09;超详细讲解数据链路层 前言一、数据链路层1. 数据链路层是什么&#xff1f;2. 哪些设备需要数据链路层&#xff1f;3. 数据链路层如何工作&#xff1f;4. 数据链路层的俩种信道4.1 点对点信道&#xff1a;一对一4.2 广播信道&…...

智能生成分析报告系统在危化安全生产监测预警评估中的应用

一、引言 在危险化学品安全生产监管中&#xff0c;传统的分析报告依赖人工整理与审核&#xff0c;效率低、响应慢&#xff0c;且极易受到主观判断、格式不规范、不同地区掌握尺度不一致的影响。而随着工业互联网、大数据、人工智能&#xff08;AI&#xff09;特别是大语言模型…...

微算法科技(NASDAQ:MLGO)研发可信共识算法TCA,解决区块链微服务中的数据一致性与安全挑战

随着区块链技术的不断演进和应用场景的拓展&#xff0c;微服务架构因其灵活性、可扩展性以及易于维护的特点&#xff0c;逐渐成为了构建复杂系统的首选架构模式。如何在微服务架构中有效应用区块链技术&#xff0c;确保数据的一致性和安全性&#xff0c;成为了一个亟待解决的问…...

UE5 开发遇到的bug整理

文章目录 一、人物在挂载某个Actor之后&#xff0c;移动有问题&#xff0c;可能是Actor类的碰撞没有关闭&#xff0c;和人物自身发生了碰撞。 一、人物在挂载某个Actor之后&#xff0c;移动有问题&#xff0c;可能是Actor类的碰撞没有关闭&#xff0c;和人物自身发生了碰撞。...

单片机——浮点数转换4位数码管显示

浮点数转换4位数码管显示 static char buffer[5]; int DecimalPlace 0; #define HideChar h void DisplayFloatOn4LED(float value) {long integer roundf(value );if (integer > 9999) //4位{integer 9999;snprintf(buffer, sizeof(buffer), "%4ld", integer…...

广东省专升本英语形容词与副词全梳理

一、形容词核心知识详解 &#xff08;一&#xff09;形容词的构成方式&#xff08;附记忆技巧&#xff09; 1. 后缀派生法&#xff08;9 大核心后缀&#xff09; ① -ly 结尾形容词&#xff08;易混副词&#xff0c;重点记忆&#xff09; ✅ 特点&#xff1a;虽以 - ly 结尾…...

GeoServer和GeoTools XML外部实体注入漏洞(CVE-2025-30220)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…...

Python Django全功能框架开发秘籍

本文在创作过程中借助 AI 工具辅助资料整理与内容优化。图片来源网络。 文章目录 引言一、Django 简介1.1 Django 的诞生与背景1.2 Django 的特点概述 二、Django 的核心特性2.1 ORM 特性2.1.1 ORM 原理与优势2.1.2 ORM 在实际应用中的优势 2.2 模板引擎2.2.1 模板引擎的工作机…...

四核 A53+工业级存储:移远 SC200L 与 pSLC SD NAND 如何重构 T-BOX 性能边界?

博客目录 一、移远 SC200L&#xff1a;T-BOX 的 “智慧大脑”二、米客方德 MKDN064GIL-ZA T-BOX&#xff1a;数据安全的坚固堡垒三、深度协同&#xff1a;拓展 T-BOX 应用边界 在车联网浪潮席卷而来的当下&#xff0c;T-BOX 作为汽车与外界交互的核心枢纽&#xff0c;其性能优劣…...

docker方式启动Jenkins

docker方式启动Jenkins 1.启动命令 我已经打包好了文件,如下命令即可启动 docker run -d -v jenkins_home:/var/jenkins_home -p 8088:8080 -p 50000:50000 --restarton-failure registry.cn-hangzhou.aliyuncs.com/devops_de/jenkins:lts-jdk17 还需要设置一下目录权限,要…...

【目标检测】图像处理基础:像素、分辨率与图像格式解析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

国产免费的k8s管理平台

xkube是一款永久免费且无任何功能限制的k8s集群管理平台&#xff0c;提供PC端和移动端全平台支持&#xff0c;具备完善的集群管理、运维监控和CI/CD发布功能&#xff0c;让企业轻松实现跨集群的统一管理和自动化运维。 技术特点&#xff1a; 1、xkube是一款国产永久免费的k8s…...

火山引擎大模型未来发展趋势

用户可能正在做技术选型或者行业研究&#xff0c;需要预测火山引擎在激烈竞争中的突围方向。从问题简洁性看&#xff0c;ta可能已经有一定基础认知&#xff0c;不需要我从零科普大模型概念。 火山引擎作为字节跳动的技术输出平台&#xff0c;优势在于背靠抖音、今日头条等超级应…...

Java基础(三):逻辑运算符详解

Java基础系列文章 Java基础(一)&#xff1a;发展史、技术体系与JDK环境配置详解 Java基础(二)&#xff1a;八种基本数据类型详解 Java基础(三)&#xff1a;逻辑运算符详解 目录 一、什么是逻辑运算符&#xff1f;二、基础逻辑运算符&#xff08;3种&#xff09;1、&&…...

设计模式 | 单例模式

单例模式&#xff08;Singleton Pattern&#xff09; 是设计模式中最简单却最常用的模式之一&#xff0c;它确保一个类只有一个实例&#xff0c;并提供全局访问点。本文将深入探讨单例模式的核心思想、实现技巧以及在C中的多种实现方式。 为什么需要单例模式&#xff1f; 在软…...

SQL_Server 基本语法

1.创建数据库 use master go if exists(select * from sysdatabases where nameCourseManageDB) drop database CourseManageDB go --创建数据库 create database CourseManageDB on primary (--数据库的逻辑文件名&#xff08;就是系统用的&#xff0c;必须唯一&#xff09…...

剑指offer39_连续子数组的最大和

连续子数组的最大和 输入一个 非空 整型数组&#xff0c;数组里的数可能为正&#xff0c;也可能为负。 数组中一个或连续的多个整数组成一个子数组。 求所有子数组的和的最大值。 要求时间复杂度为 O ( n ) O(n) O(n)。 数据范围 数组长度 [ 1 , 1000 ] [1,1000] [1,100…...

SPL 实践系列:跨库移植 SQL

背景 应用程序可能要基于不同数据库工作&#xff0c;各种数据库的 SQL 语法大体一致&#xff0c;但仍有些差别&#xff0c;结果就要改造这些 SQL&#xff0c;而这事通常只能手工调整&#xff0c;工作量大还容易出错。 完全自动改造 SQL 几乎是无法做到的&#xff0c;毕竟各种…...

docker启动的rabbitmq搭建并集群和高可用

Docker 搭建 RabbitMQ 集群步骤 以下是使用 Docker 快速搭建 RabbitMQ 集群的详细步骤&#xff0c;包含配置文件、网络设置和集群组建过程。 1. 创建自定义网络 首先创建一个 Docker 网络&#xff0c;使容器间可以通过名称互相访问&#xff1a; docker network create rabb…...

ISCSI存储

ISCSI存储 一、iscsi简介 1. 基本概念 iSCSI&#xff08;Internet Small Computer System Interface&#xff09;即互联网小型计算机系统接口&#xff0c;它是一种基于 TCP/IP 协议的存储网络协议&#xff0c;将传统的 SCSI&#xff08;Small Computer System Interface&…...

算法与数据结构:动态规划DP

文章目录 动态规划算法全面解析一、核心思想与基本概念二、动态规划与其他算法的区别三、动态规划的解题步骤四、经典案例解析1. **斐波那契数列&#xff08;Fibonacci&#xff09;**2. **0-1背包问题&#xff08;0-1 Knapsack&#xff09;**3. **最长公共子序列&#xff08;LC…...

核心概念解析:AI、数据挖掘、机器学习与深度学习的关系

核心概念解析&#xff1a;AI、数据挖掘、机器学习与深度学习的关系 本节旨在厘清人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;、深度学习&#xff08;DL&#xff09;、数据挖掘等常被混淆的概念及其相互关系。 1. 从应用目标看&#xff1a;人工智…...

跨域视角下强化学习重塑大模型推理:GURU框架与多领域推理新突破

跨域视角下强化学习重塑大模型推理&#xff1a;GURU框架与多领域推理新突破 大语言模型&#xff08;LLM&#xff09;推理能力的提升是AI领域的重要方向&#xff0c;强化学习&#xff08;RL&#xff09;为此提供了新思路。本文提出的GURU框架&#xff0c;通过构建跨领域RL推理语…...

黑马python(十三)

目录&#xff1a; 1.文件编码概念 2.文件的读取操作 3.文件的写入操作 4.文件的追加写操作 5.文件操作的综合案例 1.文件编码概念 2.文件的读取操作 多次调用read或相关读取方法会接着上一次读取的记录读 如果文件没有关闭&#xff0c;只要程序还在运行&#xff0c;文件…...

Redis-CPP 5大类型操作

这篇文章不会讲解所有关于5大基础类型的所有命令&#xff0c;只讲解几个常用的命令操作。如果想看全部的命令操作&#xff0c;可以看其它的文章。 string set 先来看一看set操作在服务器端的函数原型&#xff1a; SET key value [expiration EX seconds|PX milliseconds] [N…...

Linux 下的 socket

1、简介 Socket&#xff0c;中文常称为“套接字”&#xff0c;是 UNIX 操作系统中引入的一种通信抽象接口&#xff0c;用于支持不同进程之间&#xff0c;特别是不同主机之间的通信。在 UNIX 哲学中&#xff0c;“一切皆文件”&#xff0c;包括网络通信也不例外。Socket 就是这种…...

链接脚本基础语法

目录 前言 ELF文件布局 链接脚本语法 段定义标准格式 地址计数器 . 地址计数器的动态特性 赋值 vs 引用 符号定义 通配符规则 COMMON块 COMMON 块的产生与处理 示例脚本 前言 由于嵌入式系统内存资源珍贵&#xff0c;链接脚本可指定代码段&#xff08;.text &#…...

Python期末速成

一.基础内容 赋值语句&#xff1a; a 1 b "mayday" 标识符规则&#xff1a; 1.字母&#xff0c;数字&#xff0c;下划线&#xff0c;汉字组成。但数字不能开头 2.不能是保留字 3.特殊符号不行&#xff0c;*&#xffe5;^等 注释是在语句前面加&#xff03; …...

Python打卡训练营Day56

DAY 56 时序数据的检验 知识点回顾&#xff1a; 假设检验基础知识 原假设与备择假设P值、统计量、显著水平、置信区间 白噪声 白噪声的定义自相关性检验&#xff1a;ACF检验和Ljung-Box 检验偏自相关性检验&#xff1a;PACF检验 平稳性 平稳性的定义单位根检验 季节性检验 ACF检…...

没掌握的知识点记录

1、微内核的主要优点在于结构清晰、内核代码量少&#xff0c;安全性和可靠性高、可移植性强、可伸缩性、可扩展性高&#xff1b;其缺点是难以进行良好的整体优化、进程间互相通信的开销大、内核功能代码不能被直接调用而带来服务的效率低。 2、题目&#xff1a; 分页内存管理…...

Python商务数据分析——Python 入门基础知识学习笔记

一、简介 1.1 Python 特性 解释型语言&#xff1a;代码无需编译可直接运行&#xff0c;适合快速开发。 动态类型&#xff1a;变量类型在运行时确定&#xff08;如x1后x"str"仍合法&#xff09;。 面向对象&#xff1a;支持类、对象、继承等特性&#xff0c;代码可…...

企业级安全实践:SSL 加密与权限管理(二)

权限管理&#xff1a;企业数据的守护者 权限管理的基本概念与重要性 权限管理&#xff0c;是指根据系统设置的安全规则或策略&#xff0c;用户可以访问且仅能访问自己被授权的资源&#xff0c;不多不少 。它是企业信息安全体系的重要组成部分&#xff0c;旨在确保只有授权的人…...

JavaScript 的 “==” 存在的坑

(双等) 指的是宽松相等 — 会做隐式类型转换 举例&#xff1a;0 // true 5 5 // true (三等) 指的是严格相等 — 类型和值都相等才 true 举例&#xff1a;0 // false 5 5 // false 在业务逻辑里经常因为隐式转换导致条件误判&#xff0c;业界普遍推荐 一律用 / !。 举…...

深度解析云计算网络架构:VLAN+OVS+Bonding构建高可靠虚拟化平台

——从物理设备到虚拟机流量的全链路剖析 核心技术组合&#xff1a;VLAN逻辑隔离 OVS虚拟交换 Bonding链路聚合 超融合网络管理 一、架构全景&#xff1a;物理与虚拟网络的协同&#xff08;附架构图&#xff09; 核心设计哲学 #mermaid-svg-VbGP3fCgNnoLVMgH {font-family:&…...

Git使用总结

1.基本概念&#xff1a; Git中的区域&#xff1a; git中有几个区域&#xff1b;本地工作区&#xff1b;本地提交区&#xff1b;origin远端。 一般来说的工作上传顺序是&#xff1a; 将修改文件添加到工作区域----提交到本地提交区域----push到远端分支 Git中的分支 远端和…...

爬虫入门练习(文字数据的爬取)

爬取csdn用户的用户简介 学习一下 BeautifulSoup方法 from bs4 import BeautifulSoup html_content """ <html> <head><title>示例网页</title> </head> <body><h1 class"main-title">欢迎学习Beauti…...

MySQL学习(1)——基础库操作

欢迎来到博主的专栏:MySQL学习 博主ID:代码小豪 文章目录 数据库原理基础库操作增删数据库数据库编码与校验规则验证不同的校验规则对于库中数据的影响 备份与恢复数据库 数据库原理 mysql版本:mysql8.0 操作系统:ubuntu22.4 为了减少由于环境配置以及权限限制带来的使用问题&…...

P99延迟:系统性能优化的关键指标

理解P99延迟 当谈论系统性能时&#xff0c;延迟指标扮演着至关重要的角色。其中&#xff0c;P99延迟作为最重要的性能指标之一&#xff0c;能够帮助我们识别系统的性能瓶颈&#xff0c;优化用户体验。 构建一个功能完善的后端系统&#xff0c;通过了所有功能测试&#xff0c;准…...

人工智能、机器人最容易取哪些体力劳动和脑力劳动

人工智能、机器人最容易取哪些体力劳动和脑力劳动 人工智能和机器人的发展可以替代人类简单的体力劳动和脑力劳动&#xff0c;但很难替代复杂的体力劳动和脑力劳动。 肌肉收缩的原理和运动特点 人类的体力劳动是靠肌肉的收缩完成的&#xff0c;其工作原理是肌肉内的肌球蛋白…...

【代码解析】opencv 安卓 SDK sample - 1 - HDR image

很久没有写安卓了&#xff0c;复习复习。用的是官方案例&#xff0c;详见opencv-Android-sdk 包 // 定义包名&#xff0c;表示该类的组织路径 package org.opencv.samples.tutorial1;// 导入所需的OpenCV和Android类库 import org.opencv.android.CameraActivity; // OpenCV…...

管理综合知识点

比与比例涉及的问题 比与比例基础知识比例的转换正反比例浓度问题利润问题增长率问题比例与面积行程问题 一、比例转换与性质 核心公式&#xff1a; 若 a : b c : d a:b c:d a:bc:d或 a b c d \frac{a}{b} \frac{c}{d} ba​dc​ → a d b c ad bc adbc&#xff08;交…...

机器学习:特征向量与数据维数概念

特征向量与数据维数概念 一、特征向量与维数的定义 特征向量与特征类别 在机器学习和数据处理中&#xff0c;每个样本通常由多个特征&#xff08;Feature&#xff09; 描述。例如&#xff0c;一张图片的特征可能包括颜色、形状、纹理等&#xff1b;一个客户的特征可能包括年龄…...

《情感反诈模拟器》2025学习版

1.2 专业内容支持 67篇情感诈骗案例研究14万字心理学分析资料783条专业配音对白 二、安装与运行 2.1 系统要求 最低配置&#xff1a; 显卡&#xff1a;GTX 1060CPU&#xff1a;i5-8400存储&#xff1a;25GB空间 2.2 运行步骤 解压游戏文件&#xff08;21.7GB&#xff09;…...

C++ - 标准库之 <string> npos(npos 概述、npos 的作用)

一、std::string::npos 概述 std::string::npos 是一个静态常量&#xff0c;表示 size_t 类型的最大值 std::string::npos 用于表示字符串操作中的未找到的位置或无效位置 std::string::npos 属于 C 标准库中的 <string> 头文件 二、std::string::npos 的作用 std::s…...

策略设计模式

1. 什么是策略模式 策略模式是一种行为型设计模式&#xff0c;它定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以相互替换&#xff0c;且算法的变化不会影响使用算法的客户端,客户端中的具体实现只需要了解上下文类。 2. 由什么组成 策略接口&…...

C++结构体初始化与成员函数实现语法详解

C结构体初始化与成员函数实现语法详解 一、结构体静态成员初始化语法 在C中&#xff0c;静态成员变量需要在类外部进行定义和初始化。提供的代码展示了如何为MAIN_PROPULSION_CAN类的静态成员变量进行初始化&#xff1a; MAIN_PROPULSION_CAN::VoltageThresholds MAIN_PROPU…...