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

PyQt5可视化 7 饼图和柱状图实操案例 ②建表建项目改布局

 

目录

一、数据库建表

1 建表

2 插入数据

3 查看表数据

二、建立项目

1 新建项目

2 appMain.py

3 myMainWindow.py

4 myChartView.py

2.4.1 提升的后果

2.4.2 QmyChartView类说明

2.4.3 添加代码

三、修改myMainWindow.py程序,添加功能

1 打开数据库

2 生成分数数据

3.2.1 import新模块

3.2.2 在构造函数中设置数据模型,调用生成分数函数 

3.2.3 生成分数函数 

3.2.4 运行看看

3 统计各分数段人数

3.3.1 构造函数中调用

3.3.2 统计各分数段人数的函数 

3.3.3 运行看看 

四、窗体的布局

1 窗体大小变化时界面的变化

2 设置栅格布局

4.2.1 设置栅格布局

4.2.2 运行看看初始大小

4.2.3 放大到整个屏幕

3 打破布局

4 固定frameHead高度

5 设置栅格布局

4.5.1 设置前窗体的层次结构

4.5.2 改为栅格布局

4.5.3 运行看看

6 splitter布局

4.6.1当前的布局

4.6.2 运行中改变布局


一、数据库建表

1 建表

CREATE TABLE sanguozhi(姓名		VARCHAR(20)     PRIMARY KEY,统帅		DECIMAL(8,2)    NOT NULL,武力		DECIMAL(8,2)    NOT NULL,智力		DECIMAL(8,2)    NOT NULL,政治		DECIMAL(8,2)    NOT NULL,魅力		DECIMAL(8,2)    NOT NULL
)

2 插入数据

INSERT INTO sanguozhi VALUES('诸葛亮', 93, 38, 100, 96, 93)
INSERT INTO sanguozhi VALUES('张飞',   86,  98,  63, 22, 44)
INSERT INTO sanguozhi VALUES('赵云',   91,  96,  76, 65, 81)
INSERT INTO sanguozhi VALUES('曹操',   98,  72,  91, 94, 96)
INSERT INTO sanguozhi VALUES('吕布',   95, 100,  26, 13, 36)
INSERT INTO sanguozhi VALUES('貂蝉',   20,  26,  81, 65, 95)
INSERT INTO sanguozhi VALUES('小乔',   17,  13,  74, 68, 92)

3 查看表数据

二、建立项目

1 新建项目

2 appMain.py

新建文件appMain.py,内容如下

3 myMainWindow.py

新建文件myMainWindow.py,输入以下内容

4 myChartView.py

2.4.1 提升的后果

在Ui_MainWindow.py出现了刚刚设计提升时产生的类

现在来写这个类的代码

2.4.2 QmyChartView类说明

QChart和QChartView是基于Graphics View结构的绘图类

要对一个QChart图表进行鼠标和按键操作,需要在QChartView类里对鼠标和按键事件进行处理,这就需要自定义一个从QChartView继承的类

QmyChartView类是从QChartView类继承的用作图表的视图组件,实现了鼠标、按键事件的处理,能够在鼠标移动时发射信号mouseMove(),鼠标框选中一个矩形区域时放大显示此区域,通过按键进行图表缩放和移动操作

2.4.3 添加代码

三、修改myMainWindow.py程序,添加功能

1 打开数据库

def __openDB(self):         #打开数提库self.DB = QSqlDatabase.addDatabase("QODBC")self.DB.setDatabaseName("Driver={Sql Server};Server=localhost;Database=LYL16pyqt5;Uid=sa;Pwd=666666")if not self.DB.open():      #打开数据库QMessageBox.warning(self, "错误","打开数据库失败")

2 生成分数数据

3.2.1 import新模块

3.2.2 在构造函数中设置数据模型,调用生成分数函数 

 

3.2.3 生成分数函数 

def __generateData(self):        ##生成分数数据self.dataModel.clear()headerList=["姓名","统帅","武力","智力","政治","魅力","平均分"]self.dataModel.setHorizontalHeaderLabels(headerList)        #设置表头文字qryStudList=QSqlQuery(self.DB)      #学生信息列表qryStudList.exec("SELECT 姓名,统帅,武力,智力,政治,魅力 FROM LYL16sanguozhi")qryStudList.first()while(qryStudList.isValid()):       #当前记录有效itemList=[]studName=qryStudList.value("姓名")item=QStandardItem(studName)        #创建item.setTextAlignment(Qt.AlignCenter)itemList.append(item)       #添加到列表avgScore=0studTongshuai=qryStudList.value("统帅")item=QStandardItem("%.0f"%studTongshuai)       #创建item.setTextAlignment(Qt.AlignCenter)item.setFlags(item.flags()&(not Qt.ItemIsEditable))itemList.append(item)       #添加到列表avgScore =avgScore+studTongshuaistudWuli=qryStudList.value("武力")item=QStandardItem("%.0f"%studWuli)      #创建item.setTextAlignment(Qt.AlignCenter)item.setFlags(item.flags()&(not Qt.ItemIsEditable))itemList.append(item)            #添加到列表avgScore =avgScore+studWulistudZhili=qryStudList.value("智力")item=QStandardItem("%.0f"%studZhili)        #创建item.setTextAlignment(Qt.AlignCenter)item.setFlags(item.flags()&(not Qt.ItemIsEditable))itemList.append(item)            #添加到列表avgScore =avgScore+studZhilistudZhengzhi=qryStudList.value("政治")item=QStandardItem("%.0f"%studZhengzhi)      #创建item.setTextAlignment(Qt.AlignCenter)item.setFlags(item.flags()&(not Qt.ItemIsEditable))itemList.append(item)            #添加到列表avgScore =avgScore+studZhengzhistudMeili=qryStudList.value("魅力")item=QStandardItem("%.0f"%studMeili)        #创建item.setTextAlignment(Qt.AlignCenter)item.setFlags(item.flags()&(not Qt.ItemIsEditable))itemList.append(item)            #添加到列表avgScore =avgScore+studMeili#创建平均分item=QStandardItem("%.1f"%(avgScore/ 5.0 ))item.setTextAlignment(Qt.AlignCenter)item.setFlags(item.flags()&(not Qt.ItemIsEditable))     #平均分不允许编辅itemList.append(item)       #添加到列表self.dataModel.appendRow(itemList)      #添加到数据模型if not qryStudList.next():     #移动到下一条记录,并判断是否到末尾了break

3.2.4 运行看看

3 统计各分数段人数

3.3.1 构造函数中调用

3.3.2 统计各分数段人数的函数 

def __surveyData(self):     ##统计各分数段人数for i in range(1, 6):       #0姓名1统帅2武力3智力4攻治5魅力,range(1,6)即从1到5cnt50,cnt60,cnt70,cnt80,cnt90=0,0,0,0,0for j in range(self.dataModel.rowCount()):      #行数等于人数val=float(self.dataModel.item(j, i).text())#分数if val<60:cnt50 =cnt50+1elif (val>=60 and val<70):cnt60 =cnt60+1elif (val>=70 and val<80):      cnt70 =cnt70+1elif(val>=80 and val<90):cnt80 =cnt80+1 else:cnt90 =cnt90+1item=self.ui.treeWidget.topLevelItem(0)     #第1行,60item.setText(i,str(cnt50))      #第i列item.setTextAlignment(i,Qt.AlignHCenter)item=self.ui.treeWidget.topLevelItem(1)     #第2行[60,70)item.setText(i, str(cnt60))     #第i列item.setTextAlignment(i, Qt.AlignHCenter)item=self.ui.treeWidget.topLevelItem(2)     #第3行[70,80)item.setText(i, str(cnt70))     #第i列item.setTextAlignment(i, Qt.AlignHCenter)item=self.ui.treeWidget.topLevelItem(3)     #第4行[80,90)item.setText(i, str(cnt80))     #第i列item.setTextAlignment(i, Qt.AlignHCenter)item=self.ui.treeWidget.topLevelItem(4)     #第5行[90.100]item.setText(i, str(cnt90))    #第i列item.setTextAlignment(i,Qt.AlignHCenter)

3.3.3 运行看看 

四、窗体的布局

1 窗体大小变化时界面的变化

拉大窗口看看 

好难看,窗口拉大,显示区域没有跟着变大 

2 设置栅格布局

4.2.1 设置栅格布局

在窗体空白处点击或者在右上角的对象选中窗体,选择栅格布局

设计界面效果如下,看上去不错

 

4.2.2 运行看看初始大小

不错不错

4.2.3 放大到整个屏幕

 

好难看,上面的frameHead不需要那么高。界面放大,frameHead、frameData,tabWidget都拉大了

3 打破布局

让布局变回原样 

 

4 固定frameHead高度

希望在窗口放大的时候,frameHead不放大,只是放大表格和图形显示区域

改frameHead的sizePolicy属性,当前这个属性是这样的

 

希望窗口扩大的时候,frameHead水平方向可以跟着放大,但垂直方向固定不动。修改策略 

5 设置栅格布局

4.5.1 设置前窗体的层次结构

可以看到,窗体从大的角度来看由两个部分组成,一部分是frameHead,另一部分是splitter(由frameData和tabWidget组成)

从界面上来看,frameHead占据了窗口上方的大部分,但并没有占满整个上面一条空间

4.5.2 改为栅格布局

改完frameHead的属性后,再把窗体设为栅格布局。窗体变成了这样

 

由于设置了栅格布局,而且frameHead的扩展策略是水平方向Prefered,所以frameHead霸占了整个窗体上部空间(如果水平是fixed的,那么不会占满)

4.5.3 运行看看

刚运行界面

 

放大到整个屏幕 

frameHead不会变太高了

6 splitter布局

4.6.1当前的布局

从当前布局可以看出,frameData和groupBoxGrade通过一个splitter,组合到一起。

splitter是分裂器,可以左右分割和上下分割,可以在两个可以自由改变大小的组件之间进行分割

4.6.2 运行中改变布局

拖完之后 

把屏幕放到最大 

相关文章:

PyQt5可视化 7 饼图和柱状图实操案例 ②建表建项目改布局

目录 一、数据库建表 1 建表 2 插入数据 3 查看表数据 二、建立项目 1 新建项目 2 appMain.py 3 myMainWindow.py 4 myChartView.py 2.4.1 提升的后果 2.4.2 QmyChartView类说明 2.4.3 添加代码 三、修改myMainWindow.py程序&#xff0c;添加功能 1 打开数据库 …...

sonarqube指标详解

最近公司引入了sonar&#xff0c;作为代码质量检测工具&#xff0c;以期提高研发同学的代码质量&#xff0c;但是结果出来后&#xff0c;有些同学不清楚相应的指标内容&#xff0c;不知道应该重点关注哪些指标&#xff0c;于是查询了一下相关的资料&#xff0c;加以总结同时也分…...

耳机 喇叭接线分析

1 注意 1 首先必须接地 2 接某一个声道 2 分析 从三段式耳机结构可以得出&#xff1a; 模拟数据 必须的 结构 1 地 2 左or右信号 附加 我们要注意 耳机也是分左声道 右声道的 参考&#xff1a;耳机插头3.5与2.5三段与四段i版与n版等详解 在iPhone还没现在这么NB的时候&a…...

SpaceNet 建筑物检测

SpaceNet 建筑物检测 该存储库提供了一些 python 脚本和 jupyter 笔记本来训练和评估从SpaceNet卫星图像中提取建筑物的卷积神经网络。 用法...

蓝桥杯刷题第六天

第一题&#xff1a;星期计算问题描述本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。已知今天是星期六&#xff0c;请问 20的22次方天后是星期几?注意用数字 1 到 7 表示星期一到星期日。运行限制最大运行时间&#xff1a;1s最…...

Linux C++ 多线程高并发服务器实战项目一

文章目录1、项目介绍2、项目流程2.1、环境变量搬家2.2、设置进程title2.3、信号初始化2.4、开始监听端口2.5、创建守护进程2.6、创建子进程1、项目介绍 1、按照包头包体的格式收发数据包&#xff0c;解决粘包的问题 2、非常完整的多线程高并发服务器 3、根据收到数据包执行&…...

QML ComboBox简介

1.简介 ComboBox是一个组合按钮和弹出列表。它提供了一种以占用最小屏幕空间的方式向用户显示选项列表的方法。 ComboBox用数据模型填充。数据模型通常是JavaScript数组、ListModel或整数&#xff0c;但也支持其他类型的数据模型。 常用属性&#xff1a; count : int&#x…...

uniapp使用webview嵌入vue页面及通信

最近刚做的一个需求&#xff0c;web端&#xff08;Vue&#xff09;使用了FormMaking库&#xff0c;FormMaking是一个拖拉拽的动态设计表单、快速开发的一个东西&#xff0c;拖拽完之后最终可以导出一个很长的json&#xff0c;然后通过json再进行回显&#xff0c;快速开发&#…...

深度学习部署笔记(九): CUDA RunTime API-2.1内存管理

1. 前言 主要理解pinned memory、global memory、shared memory即可 2. 主机内存 主机内存很多名字: CPU内存&#xff0c;pinned内存&#xff0c;host memory&#xff0c;这些都是储存在内存条上的Pageable Memory(可分页内存) Page lock Memory(页锁定内存) 共同组成内存你…...

Idea+maven+spring-cloud项目搭建系列--11-2 dubbo鉴权日志记录数据统一封装

前言&#xff1a;使用dubbo做为通信组件&#xff0c;如果接口需要鉴权&#xff0c;和日志记录需要怎样处理&#xff1b; 1 鉴权&#xff1a; 1.1 在bootstrap.yml 中定义过滤器&#xff1a; dubbo.provider.filter: 过滤器的名字&#xff1a; 1.2 resources 目录下创建配置文…...

SOLIDWORKS免费培训 SW大型装配体模式课程

在SOLIDWORKS的使用过程中&#xff0c;大家经常会遇到大型装配体的处理问题&#xff0c;微辰三维的培训课程中也包含了一些大型装配体的技术培训&#xff0c;下面整理一些常见问题&#xff0c;供参考&#xff1a;大型装配体模式1.当我们打开一个大的装配体时&#xff0c;可能会…...

xxl-job registry fail

解决方法&#xff1a; 1、检查nacos是否正确&#xff0c;一定要注意格式&#xff0c;一般都是addersses的地址问题&#xff0c;一定的要加/不然找不到&#xff0c;本机就不要使用ip了&#xff0c;用localhost。 xxl: job: admin: addresses: http://localhost:8080/xxl-job-ad…...

【C#进阶】C# 反射

序号系列文章11【C#基础】C# 预处理器指令12【C#基础】C# 文件与IO13【C#进阶】C# 特性文章目录前言1&#xff0c;反射的概念2&#xff0c;使用反射访问特性3&#xff0c;反射的用途4&#xff0c;反射的优缺点比较4.1 优点&#xff1a;4.2 缺点&#xff1a;5&#xff0c;System…...

公网NAT网关与VPC NAT网关介绍与实践

NAT网关介绍 NAT网关是一种网络地址转换服务&#xff0c;提供NAT代理&#xff08;SNAT和DNAT&#xff09;能力。 公有云NAT分为公网NAT网关和VPC NAT网关。 1&#xff09;公网NAT网关&#xff1a;提供公网地址转换服务。 2&#xff09;VPC NAT网关&#xff1a;提供私网地址转换…...

Windows中UWP、WPF和Windows窗体的区别

Windows 中开发应用&#xff08;或者可以说客户端&#xff09;有三种方法&#xff1a; UWP&#xff08;Universal Windows Platform&#xff09;、WPF&#xff08;Windows Presentation Foundation&#xff09;和 Windows 窗体&#xff08;Win Forms&#xff09;。这三种方法在…...

Flink从入门到精通系列(一)

1、Flink概述 Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于在&#xff0c; 无边界和有边界数据流上进行有状态的计算 &#xff0c;Flink 能在所有常见集群环境中运行&#xff0c;并能以内存速度和任意规模进行计算。 Apache Flink 功能强大&#xff0c;支持开发…...

云原生应用风险介绍

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/129303616 一、传统风险 传统风险主要是注入、敏感数据泄露、跨站脚本、配置错误等等&#xff0c;这些传统的安全风险在云原生应用中也是存在的&#xff0c;这里就不具体展开说了。 二、云原生应用架…...

什么是测试用例设计?

前言 想要进行测试自动化的团队都会遇到这个问题&#xff1a;自动化的成功和编码能力有多大的关联&#xff1f;现在更多的招聘信息越来越偏重于对测试人员的编程能力的要求&#xff0c;似乎这个问题的答案是极大的正关联性。 测试人员可以将编码能力用于与测试相关的各种目的…...

数据分析:基于K-近邻(KNN)对Pima人糖尿病预测分析

数据分析&#xff1a;基于K-近邻(KNN)对Pima人糖尿病预测分析 作者&#xff1a;AOAIYI 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;AOAIYI首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x…...

Kettle体系结构及源码解析

介绍 ETL是数据抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;、装载&#xff08;Load&#xff09;的过程。Kettle是一款国外开源的ETL工具&#xff0c;有两种脚本文件transformation和job&#xff0c;transformation完成针对数据的基础转换&…...

大数据 | (二)SSH连接报错Permission denied

大数据 | &#xff08;三&#xff09;centos7图形界面无法执行yum命令&#xff1a;centos7图形界面无法执行yum命令 哈喽&#xff01;各位CSDN的朋友们大家好&#xff01; 今天在执行Hadoop伪分布式安装时&#xff0c;遇到了一个问题&#xff0c;在此跟大家分享&#xff0c; …...

前端——6.文本格式化标签和<div>和<span>标签

这篇文章&#xff0c;我们来讲一下HTML中的文本格式化标签 目录 1.文本格式化标签 1.1介绍 1.2代码演示 1.3小拓展 2.div和span标签 2.1介绍 2.2代码演示 2.3解释 3.小结 1.文本格式化标签 在网页中&#xff0c;有时需要为文字设置粗体、斜体和下划线等效果&#xf…...

浅谈Xpath注入漏洞

目录 知识简介 攻击简介 基础语法 语法演示 漏洞简介 漏洞原理 漏洞复现 Xpath盲注 知识简介 攻击简介 XPath注入攻击是指利用XPath 解析器的松散输入和容错特性&#xff0c;能够在 URL、表单或其它信息上附带恶意的XPath 查询代码&#xff0c;以获得权限信息的访问权…...

Oracle LogMiner分析归档日志

目录&#xff1a;Oracle LogMiner分析归档日志一、准备测试环境1、开启数据库归档日志2、打开数据库最小附加日志3、设置当前session时间日期格式二、创建测试数据1、创建数据2、数据落盘三、日志发掘测试挖掘在上次归档的Redo Log File1.确定最近归档的Redo Log File2.指定要分…...

趣味三角——第15章——傅里叶定理

第15章 傅里叶定理(Fourier’s Theorem) Fourier, not being noble, could not enter the artillery, although he was a second Newton. (傅立叶出生并不高贵&#xff0c;因此按当时的惯例进不了炮兵部队&#xff0c;虽然他是第二个牛顿。) —Franois Jean Dominique Arag…...

市场营销的核心是什么?

之所以写下「市场营销的核心是什么&#xff1f;」这篇文章&#xff0c;是因为这几天刚读完了《经理人参阅&#xff1a;市场营销》这本书。作为一个有着近十年工作经验的市场营销从业人员&#xff0c;看完这本书也产生了很多新的想法&#xff0c;也想记录一下&#xff0c;遂成此…...

c/cpp - 多线程/进程 多进程

c/cpp - 多线程/进程 多进程多进程创建多进程进程等待多进程 宏观上 两个进程完全并发的 父子进程具有互相独立的进程空间 父进程结束&#xff0c;不影响子进程的执行 创建多进程 #include <sys/types.h> #include <unistd.h> #include <stdio.h>int main()…...

MySQL必知必会 | 存储过程、游标、触发器

使用存储过程 存储过程 简单来说就是为了以后的使用而保存的一条或多条MySQL语句的集合。 我觉得就是封装了一组sql语句 为什么需要存储过程&#xff08;简单来说就是&#xff0c;简单、安全、高性能 通过把处理封装在容易使用的单元中&#xff0c;简化复杂操作所有开发人员…...

优化Facebook广告ROI的数据驱动方法:从投放到运营

“投放广告并不是最终的目的&#xff0c;关键在于如何最大程度地利用数据驱动的方法来提高广告投放的回报率&#xff08;ROI&#xff09;”Facebook广告是现代数字营销中最为常见和重要的广告形式之一。但是&#xff0c;要让Facebook广告真正发挥作用&#xff0c;需要通过数据驱…...

动态规划入门经典问题讲解

最近开始接触动态规划问题&#xff0c;以下浅谈&#xff08;或回顾&#xff09;一下这些问题的求解过程。解题思路对于动态规划问题&#xff0c;由于最终问题的求解需要以同类子问题作为基础&#xff0c;故需要定义一个dp数组&#xff08;一维或二维&#xff09;来记录问题求解…...

快速入门深度学习1(用时1h)

速通《动手学深度学习》1写在最前面0.内容与结构1.深度学习简介1.1 问题引入1.2 思路&#xff1a;逆向思考1.3 跳过1.4 特点1.5 小结2.预备知识&#xff08;MXNet版本&#xff0c;学错了。。。。&#xff09;2.1 获取和运行本书的代码2.2 数据操作2.2.1 略过2.2.2 小结2.3 自动…...

PaddleOCR关键信息抽取(KIE)的训练(SER训练和RE训练)错误汇总

1.SER训练报错: SystemError: (Fatal) Blocking queue is killed because the data reader raises an exception 1.1.问题描述 在执行训练任务的时候报错 单卡训练 python3 tools/train.py -c train_data/my_data/ser_vi_layoutxlm_xfund_zh.yml错误信息如下&#xff1a; T…...

信息收集之搜索引擎

Google Hacking 也可以用百度&#xff0c;不过谷歌的搜索引擎更强大 site 功能&#xff1a;搜索指定域名的网页内容&#xff0c;可以用来搜索子域名、跟此域名相关的内容 示例&#xff1a; site:zhihu.com 搜索跟zhihu.com相关的网页“web安全” site:zhihu.com 搜索zhihu…...

Flutter(四)布局类组件

目录布局类组件简介布局原理与约束线性布局&#xff08;Row和Column&#xff09;弹性布局流式布局&#xff08;Wrap、Flow&#xff09;层叠布局&#xff08;Stack、Positioned&#xff09;对齐与相对定位&#xff08;Align&#xff09;Align和Stack对比Center组件LayoutBuilder…...

【黑马】Java基础从入门到起飞目录合集

视频链接&#xff1a; Java入门到起飞&#xff08;上部&#xff09;&#xff1a;BV17F411T7AoJava入门到起飞&#xff08;下部&#xff09;&#xff1a;BV1yW4y1Y7Ms 学习时间&#xff1a; 2023/02/01 —— 2023/03/09断断续续的学习&#xff0c;历时大概37天&#xff0c;完结撒…...

PMP考前冲刺3.10 | 2023新征程,一举拿证

题目1-2&#xff1a;1.在最近的一次耗时四周的迭代中&#xff0c;赫克托尔所在的敏捷团队刚完成了10 个用户故事点的开发、测试和发布&#xff0c;那么团队的速度是&#xff1f;A. 10B. 4C. 5D.402.产品负责人奥佩&#xff0c;倾向于在短周期内看到工作产品的新版本&#xff0c…...

JavaScript Math常用方法

math是JavaScript的一个内置对象&#xff0c;它提供了一些数学属性和方法&#xff0c;可以对数字进行计算&#xff08;用于Number类型&#xff09;。 math和其他全局对象不同&#xff0c;它不是一个构造器&#xff0c;math的所有方法和属性都是静态的&#xff0c;直接使用并传入…...

【C++】模板进阶

文章目录一、非类型模板参数1、非类型模板参数2、C11 中的 array 类二、模板的特化1、模板特化的概念2、函数模板特化3、类模板特化3.1 全特化3.2 偏特化三、模板的分离编译四、模板总结一、非类型模板参数 1、非类型模板参数 模板参数分为类型形参与非类型形参&#xff0c;类…...

三板斧解决leetcode的链表题

在《波奇学单链表》中我们提到单链表的两个特点单向性。头节点尾节点的特殊性导致分类讨论的情况。如何看单链表&#xff1f;让我们简化成下图cur表示当前节点&#xff0c;下图表示cur移动&#xff0c;圆圈表示值用哨兵卫节点(新的头节点)和把尾节点看成NULL来把头尾节点一般化…...

全生命周期的云原生安全框架

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/129423036 一、全生命周期的云原生安全框架 如图所示&#xff1a; 二、框架说明 在上图中&#xff0c;我们从两个维度描述各个安全机制&#xff0c;横轴是开发和运营阶段&#xff0c;细分为编码、测试…...

【本地网站上线】ubuntu搭建web站点,并内网穿透发布公网访问

【本地网站上线】ubuntu搭建web站点&#xff0c;并内网穿透发布公网访问前言1. 本地环境服务搭建2. 局域网测试访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名4.3 测试访问公网固定二级子…...

电脑怎么重装系统?教你轻松掌握这些方法

重新安装计算机系统有两种原因&#xff1a;一种是计算机系统可以正常使用&#xff0c;但是电脑比较卡&#xff0c;为了提高它的运行速度&#xff0c;所以想要通过重新安装系统来解决这个问题;另一种原因是计算机系统文件丢失&#xff0c;系统出现蓝屏&#xff0c;或者黑屏的情况…...

leetcode-每日一题-2379(简单,字符串)

久违的简单题......给你一个长度为 n 下标从 0 开始的字符串 blocks &#xff0c;blocks[i] 要么是 W 要么是 B &#xff0c;表示第 i 块的颜色。字符 W 和 B 分别表示白色和黑色。给你一个整数 k &#xff0c;表示想要 连续 黑色块的数目。每一次操作中&#xff0c;你可以选择…...

SLF4J日志框架在项目中使用

介绍 SLF4J全称“Simple Logging Facade for Java”&#xff0c;作为各种日志框架的简单门面。例如&#xff1a; java.util.logging、logback 、 reload4j等。只需要切换日志框架的jar包依赖就可以切换日志框架。 SLF4J支持的日志框架包含如下&#xff1a; log4j&#xff1a…...

Spark MLlib 模型训练

Spark MLlib 模型训练决策树随机森林GBDTSpark MLlib 开发框架下 : 监督学习 : 回归 (Regression) , 分类 (Classification) , 协同过滤 (Collaborative Filtering)非监督学习 : 聚类 (Clustering) 、频繁项集 (Frequency Patterns) 例子分类 : 算法分类 : 算法分类算法子分类…...

Python中变量的作用域精讲

文章目录前言一、局部变量二、全局变量前言 变量的作用域是指程序代码能够访问该变量的区域&#xff0c;如果超出该区域&#xff0c;再访问时就会出现错误。在程序中&#xff0c;一般会根据变量的 “有效范围” 将变量分为 “全局变量” 和 “局部变量”。 一、局部变量 局部变…...

数据仓库工程师的工作职责的相关介绍

1. BI 开发工程师的工作内容是什么&#xff1f; BI开发工程师&#xff08;Business Intelligence Developer&#xff09;是负责设计和开发企业级BI系统的专业人员。他们的主要工作是从多个数据源中提取、转换、加载和分析数据&#xff0c;以支持企业决策。以下是BI开发工程师的…...

ESP UART 介绍

1 UART 介绍 UART 是一种以字符为导向的通用数据链&#xff0c;可以实现设备间的通信。异步传输的意思是不需要在发送数据上添加时钟信息。这也要求发送端和接收端的速率、停止位、奇偶校验位等都要相同&#xff0c;通信才能成功。 1.1 UART 通信协议 一个典型的 UART 帧开始…...

第十三届蓝桥杯省赛Python大学B组复盘

目录 一、试题B&#xff1a;寻找整数 1、题目描述 2、我的想法 3、官方题解 4、另解 二、试题E&#xff1a;蜂巢 1、题目描述 2、我的想法 3、官方题解 三、试题F&#xff1a;消除游戏 1、题目描述 2、我的想法&#xff08;AC掉58.3%&#xff0c;剩下全超时&#x…...

linux入门---vim的配置

这里写目录标题预备知识如何配置vimvim一键配置预备知识 在配置vim之前大家首先得知道一件事就是vim的配置是一人一份的&#xff0c;每个用户配置的vim都是自己的vim&#xff0c;不会影响到其他人&#xff0c;比如说用户xbb配置的vim是不会影响到用户wj的&#xff0c;虽然不同…...