一、高级控件-QListView列表数据显示控件 1.基本概念 QListView列表数据显示控件也是高级控件的一种,用法比较简单 2.代码 点击查看代码 from PyQt5.Qt import * import sys class Window(QWidget) : def __init__(self) : super().__init__() self.setWindowTitle(QListView列表数据显示控件 - PyQt5中文网) self.resize(600, 500) self.func_list() def func_list(self) : self.func() def func(self) : #1.创建一个列表数据模型 self.model = QStringListModel() self.list = ['列表数据1', '列表数据2', '列表数据3'] #2.把数据和数据模型关联起来 self.model.setStringList(self.list) #3.创建一个列表数据 self.listview = QListView() #4.关联 self.listview.setModel(self.model) #5.列表形式展示 layout = QVBoxLayout() layout.addWidget(self.listview) self.setLayout(layout) #6.连接槽函数,输出选择列表元素 self.listview.clicked.connect(self.cao) def cao(self, item) : QMessageBox.information(self, 'QListView', '你选择了:' + self.list[item.row()]) if __name__ == '__main__' : app = QApplication(sys.
编写客户端页面,引入Paho官方客户端js库
贴出关键代码如下:
// 创建客户端实例 //注意不要在client前写var client = new Paho.MQTT.Client(location.hostname, Number(location.port), clientId); // 设置回调处理程序 client.onConnectionLost = onConnectionLost; client.onMessageArrived = onMessageArrived; // 连接客户端 client.connect({onSuccess:onConnect}); // 客户端连接时调用 function onConnect() { // 建立连接后,进行订阅并发送消息。 console.log(onConnect); client.subscribe(World); message = new Paho.MQTT.Message(Hello); message.destinationName = World; client.send(message); } //当客户端失去连接时调用 function onConnectionLost(responseObject) { if (responseObject.errorCode !== 0) { console.log(onConnectionLost:+responseObject.errorMessage); } } //消息到达时调用 function onMessageArrived(message) { console.log(onMessageArrived:+message.payloadString); } 原网站:https://blog.51cto.com/u_3423936/5062986
**python安装和环境配置 **
1.安装Python前需了解的基本常识: 2.下载python https://www.python.org/downloads/
3.安装python 3.1配置环境变量 4.检查python是否安装成功 打开cmd(快捷键:win+r),输入python,看到版本号即为安装成功 5.编写第一个python程序
啥也不说,上代码
public static void main(String[] args) { int i, j, n; for (i = 0; i < 11; i++) { for (j = 0; j < 10; j++) { n = 10 * i + j; if (n > 107) break; System.out.print(String.format(\33[%dm %3d\33[m, n, n)); } System.out.print(\n); } System.out.print(\33[31m 文字+\33[m\n); } 输出结果:
原理输出显示控制符控制了显示的格式:https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
问题 上传图片时报错:413 Request Entity Too Large 原因:nginx限制了文件上传大小 修改nginx.conf的值就可以解决了 client_max_body_size 256M; 可以选择在http{ }中设置:client_max_body_size 256m;
也可以选择在server{ }中设置:client_max_body_size 256m;
还可以选择在location{ }中设置:client_max_body_size 256m;
三者有区别
设置到http{}内,控制全局nginx所有请求报文大小
设置到server{}内,控制该server的所有请求报文大小
设置到location{}内,控制满足该路由规则的请求报文大小
同时记得修改php.ini内的上传限制
upload_max_filesize = 256M https://www.orcy.net.cn/1555.html
一、问题来源 最近做一个海安项目,不同网域之间数据需要通过FTP摆渡文件的形式同步,因此代码就涉及到FTP文件压缩上传、下载解压的操作。windows本地开发环境对文件下载解压没有问题,发布linux个别文件报如下错误:
org.apache.tools.ant.BuildException: Error while expanding /opt/opsmgr/web/components/tomcat85linux64.2/webapps/ctm01favorite/WEB-INF/classes/download/1648798558_zap.zip java.io.IOException: central directory is empty, can't expand corrupt archive. at org.apache.tools.ant.taskdefs.Expand.expandFile(Expand.java:206) at org.apache.tools.ant.taskdefs.Expand.execute(Expand.java:148) at com.hikvision.js.ctm01favorite.utils.CompressUtils.decompressionZip(CompressUtils.java:46) at com.hikvision.js.ctm01favorite.task.ScheduledTasks.handleZipFile(ScheduledTasks.java:123) at com.hikvision.js.ctm01favorite.task.ScheduledTasks.lambda$ftpDataReceive$1(ScheduledTasks.java:83) at org.springframework.cloud.sleuth.instrument.async.TraceRunnable.run(TraceRunnable.java:67) at com.hikvision.starfish.log.business.async.BusLogRunnable.run(BusLogRunnable.java:33) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: java.io.IOException: central directory is empty, can't expand corrupt archive. at org.apache.tools.zip.ZipFile.populateFromCentralDirectory(ZipFile.java:459) at org.apache.tools.zip.ZipFile.<init>(ZipFile.java:215) at org.apache.tools.ant.taskdefs.Expand.expandFile(Expand.java:184) ... 9 common frames omitted 排查发现报错的就是固定的那几个文件,本地windows环境检查发现文件状态正常,没有损坏的情况。
二、解决方法 FTP文件下载时设置以字节的方式进行传输,ftpClient.setFileType(FTP.BINARY_FILE_TYPE);完整代码如下:
public boolean downloadFileNew(String pathname, String filename, String localpath, FTPClient ftpClient) { boolean flag = false; OutputStream os = null; try { logger.
Service是Kubernetes接入层的一种抽象资源,它为我们提供了一种固定的、统一的访问接口地址和负载均衡能力,这时可能会想到,当时使用docker-compose的时候,不存在Service概念,不也运行起来了吗?是的,在Kubernetes集群内部Pod ip也是互通的,但是Pod的ip会经常因为扩容、重建而导致客户端访问错误,pod访问无法提供负载均衡的能力,而Service通过选择一组Pod的label就直接可以访问到Pod,而且可以使用万年不变的域名,所以就选择Service了。
1、Service是怎么产生的,在集群内部是如何存在的呢?
在kubernetes当中所谓的Service是kube-proxy生成iptables或ipvs规则,它会产生一组虚拟地址,在集群环境下有效。Service不能直接到达Pod内部,中间会间隔EndPoints,这是一组ip和port的组合。默认类型是ClusterIP它仅能接收集群中pod客户端程序的访问请求。这也是最常用的一种类型,另外还有NodePort、LoadBalancer、ExternalName。
2、iptables或ipvs,到底是iptables还是ipvs呢?
一个Service对象就是工作节点上的一些iptables或ipvs规则,用于将到达Service对象IP地址的流量调度转发至相应的Endpoints对象指向的IP地址和端口之上。
这句话我们经常看到,如何理解呢?
Kubernetes1.1之前是基于userspace实现,这种模型之下,每次请求流量要先到达内核空间,经有套接字转发到kube-proxy,然后再由它送回到内核空间,之后调度到后端pod之上,可以看出请求在用户空间和内核空间来回转发,效率必然不高。但是当pod无响应时,能够自动重定向到其它pod。
在Kubernetes1.1版本开始引入iptables规则,Kubernetes1.2开始成为默认类型。即在创建Service资源时,集群上每个节点的kube-proxy都会收到通知,并且创建iptables规则,用于转发到此Service ClusterIP的流量。工作TCP/IP的传输层,高效稳定。
但是这种方式有如下缺点: 1、iptables代理模型挑中的pod无响应时,不能自动重定向到集群内部其它pod资源对象之上。 2、kube-proxy通过iptables处理Service和pod的交互,每产生一个计算节点或者产生大量的pod就需要产生相应大量的iptables规则,不难想象,这些iptables规则每次需要刷新匹配保证正确性,就需要占用大量的CPU资源,所以基于iptables的Service实现就成了制约Kubernetes承载更多pod的瓶颈。
在Kubernetes1.11开始默认使用ipvs模型,在这种模型下kube-proxy会跟踪APIServer上Service和endpoints对象变化,调用netlink创建ipvs规则,请求调度流量功能由ipvs实现,运行于netfilter之上的钩子函数,具有流量转发速度快,规则性能同步好的特点,支持众多调度算法,剩下仍然由iptables完成。说到这里我们就大概明白了iptables和ipvs的作用和关系了。
3、Kubernetes的服务发现是通过dns实现,那么为什么会出现四种类型的服务暴露方式呢?
说到Service不得不介绍kubernetes网络模型和通信方式
一个完整的Kubernetes集群应该包含三层网络,首先第一层是mater和node节点之间的网络,这个网络需要在部署kubernetes集群之前配置完成;第二层网络是pod的网络通过kubelet或者cni插件实现,用于pod之间或者内部的通信,集群中的所有pod均处在同一个网络平面空间内,可以直接通信;第三层网络是Service资源的网络,是一个虚拟网络,用于为Kubernetes集群配置IP地址,但此地址并不配置于任何主机或者容器的网络接口之上,而是通过kubeproxy配置为iptables规则,将发往该地址的所有流量调度至后端的pod之上。
通信方式分为以下四种:
同一个pod的内部通信; 各个pod彼此通信; pod和service的通信; 集群外部流向service的通信。 所以Service为了满足这些通信方式就出现了如下类型:
ClusterIP:为集群内部ip地址暴露服务,仅在集群内可达,外部ip无法访问,默认Service类型;
NodePort:这种类型建立在clusterIp之上,为节点的IP地址暴NodePort服务,外部节点可以通过NodeIP:NodePort直接访问;
LoadBalancer:这种类型构建在NodePort之上,它可以关联到集群外部的某个负载均衡设备。Kubernetes没有为私有化集群提供LoadBalancer的支持。如果在私有化集群使用需要自建负载均衡器;
ExternalName:其通过将Service映射至由externalName字段的内容指定的主机名来暴露服务,此主机名需要被DNS服务解析至CNAME类型的记录。这句话怎么理解呢?
举个例子,你所有的服务都在集群内部,但是你有个数据库是mongodb,没有实现容器化,更没有部署在Kubernetes内部,当然你可以通过在ConfigMap中添加配置访问这个外部服务,但是当你的环境发生变化,比如从开发环境和生产环境的数据地址不同,这个时候你需要修改和重建ConfigMap。这个时候可以使用Kubernetes ExternalName内置服务发现机制运用于集群外部运行的服务,像使用集群内的服务一样使用外部服务!通过这种方式,您可以在开发环境和生产环境中实现相同的功能,如果您最终将服务移入集群内,则不需要更改任何代码和配置。
kind: Service apiVersion: v1 metadata: name: mongo spec: type: ExternalName externalName: mango123456.com 你只需要访问:mongodb://<dbuser>:<dbpassword>@mongo:<port>就可以自动访问外部服务。
4、Service本身有端口、Pod也有端口、容器也有端口,之间有什么关系呢?
containerPort:一个信息性数据,为集群提供一个可以快速了解相关pod可以访问端口的途径,而且显式指定容器端口,无论你是否指定都不影响其他节点上的客户端pod对其进行访问;
port:服务提供端口,用于kubernetes集群内部服务访问;
targetPort:pod目标端口,如果不设置使用默认port端口,port和nodePort的数据通过这个端口进入到Pod内部,Pod里面的containers的端口映射到这个端口,提供服务;
nodePort:Kubernetes集群外部用户访问端口;
#学号20214118 Python技能树及CSDN MarkDown编辑器测评
课程: 《python程序设计》
班级:2141
姓名:韦星宇
学号:20214118
实验教师:王志强
实验日期:2022年4月19日
必修/选修:公选课
Python技能树及CSDN MarkDown编辑器测评_ypgwxh的博客-CSDN博客
冒泡排序算法过程:
冒泡排序算法 1、每一次循环结束之后,都要找出最大的数据,放到参与比较的这堆数据的最右边。(冒出最大的那个气泡。) 2、核心:左边的数字和右边的数字比对,当左边 > 右边的时候,交换位置。(左右数字对比,左>右,交换位置)原始数据:3, 2, 7, 6, 8第1次循环:(最大的跑到最右边。)2, 3, 7, 6, 8 (3和2比较,2 < 3,所以2和3交换位置)2, 3, 7, 6, 8 (虽然不需要交换位置:但是3和7还是需要比较一次。)2, 3, 6, 7, 8 (7和6交换位置)2, 3, 6, 7, 8 (虽然不需要交换位置:但是3和7还是需要比较一次。)经过第1次循环,此时剩下参与比较的数据:2, 3, 6, 7第2次循环:2, 3, 6, 7 (2和3比较,不需要交换位置)2, 3, 6, 7 (3和6比较,不需要交换位置)2, 3, 6, 7 (6和7比较,不需要交换位置)经过第2次循环,此时剩下参与比较的数据:2, 3, 6第3次循环:2, 3, 6 (2和3比较,不需要交换位置)2, 3, 6 (3和6比较,不需要交换位置)经过第3次循环,此时剩下参与比较的数据:2, 3第4次循环:2, 3 (2和3比较,不需要交换位置)
public class BubbleSort { public static void main(String[] args) { // int类型的数组对象 int[] arr = {9, 8, 10, 7, 6, 0, 11};// 7条数据,循环6次。以下的代码可以循环6次。(冒泡排序的外层循环采用这种方式) for(int i = arr.
原文链接:https://www.cnblogs.com/hhlotus/p/12718748.html
PHP连接SQLSERVER中文乱码问题
1、SQL语句中有中文会导致查询失败;
2、查询结果有中文会显示乱码。
解决方法一(较简单,建议使用):
1、PHP文件保存时选ANSI编码;
附:VS Code 改变默认文字编码,File(文件)->Preferences(首选项)->Usersettings(设置),搜索encoding,将utf8改为gbk
2、PHP文件头加入
header(Content-Type: text/html; CHARSET=GBK); 解决方法二(较麻烦): 1、PHP文件保持默认UTF-8编码; 2、查询前对SQL转码 $sql = SELECT '是'='是'; $sql=iconv('UTF-8','GBK',$sql); 3、查询结果对含中文列转码
$stmt = sqlsrv_query( $conn, $sql); if($stmt){ while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC) ) { echo iconv('GBK','UTF-8',$row[0]).<br />; } }