公告
感谢您使用我写的软件!
兼容性:软件可以提供制作100K以上大小彩信,但是由于手机终端对于彩信的支持不一,3个多媒体附件以内、容量30K以下的彩信才会被目前绝大多数彩信手机所支持。
推荐彩信制作格式:
支持单条中英文短信的发送和长文字短信的自动多条分拆发送
兼容性:普通单条短信被所有手机品牌支持
长文字短信的支持较为复杂,长度少于67*3汉字的长汉字短信(少于154*3字母长英文短信)可以被大多数国际品牌手机支持,但部分国内品牌手机出现短信首字乱码现象。
#0、停止kubelet服务 systemctl stop kubelet #1、在用户目录生成k8s客户段配置保存目录,非必要 mkdir ~/.kube/ #2、将主节点的集群配置复制到该目录,非必要 scp root@192.168.80.200:/etc/kubernetes/admin.conf ~/.kube/config #3、将集群配置复制到默认的k8s的kubelet配置目录,可以省略1,直接使用2的scp替代cp cp ~/.kube/config /etc/kubernetes/kubelet.conf chown $(id -u):$(id -g) $HOME/.kube/config
#从客户端同步key相关内容 scp 192.168.80.xxx:/var/lib/kubelet/pki/* ./ #删除多余的文件 rm -rf kubelet-client-2024* #重新生成客户端key openssl req -new -key kubelet.key -out kubelet.csr -subj "/CN=kubelet" #使用主节点证书生成客户端请求证书 openssl x509 -req -in kubelet.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out kubelet.crt -days 3650 #将客户端证书和key生成一个pem文件 cat kubelet.crt kubelet.key > kubelet-client-current.pem #将生成的pem下发到客户段节点 scp ./* 192.168.80.xxx:/var/lib/kubelet/pki/ #将依据ca下发到客户端节点 scp /etc/kubernetes/pki/ca.crt 192.168.80.xxx:/etc/kubernetes/pki/ca.crt
#4、重启kubelet systemctl restart kubelet
ETCDCTL_API=3 etcdctl snapshot restore /var/backups/kube_etcd/etcd-2023-05-16-09-30-01/snapshot.db --data-dir=/var/lib/etcd --initial-cluster-token k8s_etcd --initial-cluster default=http://192.168.80.200:2380 --initial-advertise-peer-urls=http://192.168.80.200:2380 ./kk create cluster -f ./dev.yaml --with-kubernetes v1.21.5 --with-kubesphere v3.2.1
scp 192.168.80.205:/etc/kubernetes/manifests/haproxy.yaml /etc/kubernetes/manifests/haproxy.yaml mkdir /etc/kubekey/ scp -r 192.168.80.205:/etc/kubekey/haproxy /etc/kubekey/ kubectl apply -f /etc/kubernetes/manifests/haproxy.yaml
$ vim /var/lib/kubelet/config.yaml allowedUnsafeSysctls: - kernel.shm* - kernel.msg* - kernel.sem - fs.mqueue.* - net.*
conntrack -D
#1、在问题node上,修改kubelet服务启动参数 vim /etc/systemd/system/kubelet.service #2、允许运行不安全的sysctls ExecStart=/usr/local/bin/kubelet --allowed-unsafe-sysctls=net.* #3、修改kubelet配置参数 vim /var/lib/kubelet/config.yaml #4、允许不安全的参数,添加到文件末尾即可 allowedUnsafeSysctls: - kernel.shm* - kernel.msg* - kernel.sem - fs.mqueue.* - net.* #5、重启kubelet服务 systemctl daemon-reload && systemctl restart kubelet #6、可能需要驱逐node上现有的无效pod,在主节点上运行,注意所属namespace(项目) kubectl get pods -n project -o wide | grep SysctlForbidden | awk 'NR>1{print "kubectl delete pod -n project " $1}' | bash
虚函数和虚析构函数在调用的处理上是不同的,虚析构函数是子调用父,层层调用,对于普通的虚函数,则是重载的方式,需要注意。下面的代码执行结果是:
derivedA say: hello virtual function!.
~finalA
~derivedA
~baseA
#include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> class baseA{ public: virtual ~baseA() { printf("~baseA\r\n"); }; virtual void sayHello(const char *str){ printf("baseA say: %s.\r\n", str); }; }; class derivedA : public baseA { public: virtual ~derivedA() { printf("~derivedA\r\n"); }; virtual void sayHello(const char *str){ printf("derivedA say: %s.\r\n", str); }; }; class finalA : public derivedA { public: ~finalA() { printf("~finalA\r\n"); }; void sayHello(const char *str){ printf("derivedA say: %s.\r\n", str); }; }; int main() { finalA *a = new finalA(); a->sayHello("hello virtual function!"); delete a; return 0; } |
在Win7和Winxp这样的非windows server系统上安装SQL Server 2005以后的开发版本,已经变得越来越不容易,但是好在有很多的热心大牛做了各样的安装盘。但是在实际使用中,我就遇到了一个奇怪的问题:在Win7系统上安装SQL Server2005的开发版本,实际测试时,本机程序直接使用ADO连接该数据库,第一次的语句反馈时间超过了2秒,造成业务逻辑判断失败。经过若干次失败的尝试,发现只需要一个简单的SQL Server2005配置改动,就可以解决这个问题。
1)SQL安装好之后有个配置工具菜单组,其中有个工具叫做SQL server配置管理
2)SQL Server 2005网络配置中的MSSSQLSERVER的协议,默认是 Shared Memory 已启用;TCP/IP 已禁用。修改成把Shared Memory 禁用掉,把TCP/IP启用。
3)然后重启SQL Server服务
关于Shared Memory和TCP/IP以及VIA的区别,网上可以搜到,我就不多说了。
在ADO方式访问Excel时,需要注意几个问题:
1)新旧格式Excel(xls和xlsx)访问ado字符串的区别
2)获得多表单(sheet)的表单名
if(connXLS->Connected) connXLS->Connected = false; if(CompareStr(sFileExtName, "xls")==0) { sConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Persist Security Info=false;Data Source=" + sXlsFileName; //2003(Microsoft.Jet.Oledb.4.0) //string strConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", excelFilePath); }else{ sConnectString = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 8.0;HDR=YES;IMEX=1';Persist Security Info=false;Data Source=" + sXlsFileName; //2007(Microsoft.ACE.OLEDB.12.0) //string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", excelFilePath); } connXLS->ConnectionString = sConnectString; adoXLS->Connection = connXLS; try { AnsiString sTableName; OleVariant EmptyParam = varEmpty; EmptyParam.VType = VT_ERROR; EmptyParam.VError = DISP_E_PARAMNOTFOUND; auto_ptr<TADOQuery> query(new TADOQuery(NULL)); query->Connection = connXLS; connXLS->OpenSchema(siTables, EmptyParam, EmptyParam, (TADODataSet*)query.get()); for ( ; !query->Eof; query->Next() ) { sTableName = query->FieldByName("TABLE_NAME")->AsString; printscreen("当前Excel %s", sTableName.c_str()); } if(adoXLS->Active) adoXLS->Close(); adoXLS->TableName = sTableName; adoXLS->Open(); }catch(Exception &exception){ ShowMessage(exception.Message); return; } |