查看QT源码,会发现很多类会有一个同样名字、但是以Private结尾的孪生类,这是QT用于封装私有操作的一种设计模式。这种设计模式可以有如下优点:
- 信息隐藏
- 二进制兼容
示例
myclass.h
1 | // myclass.h |
myclass.cpp
1 | // myclass.cpp |
参考链接
- C++学习—qt的公有类、私有类、Q_Q、Q_D、二进制兼容,by 手磨咖啡.
- Qt使用技巧–定义Private类,by 大王怕我去巡山.
查看QT源码,会发现很多类会有一个同样名字、但是以Private结尾的孪生类,这是QT用于封装私有操作的一种设计模式。这种设计模式可以有如下优点:
myclass.h
1 | // myclass.h |
myclass.cpp
1 | // myclass.cpp |
最近需要从Oracle数据库中提取一些数据,并使用文档模板生成文档,鉴于Python环境部署的方便性,编程的简便性,于是采用Python开发该程序。方法记录如下:
核心是 docxtpl 和 oracledb 两个库。
1 | mkdir wordtpl_generate |
创建envConfig.bat批处理文件,一键执行离线环境配置。
1 | python -m venv env |
1 | import getpass |
最近需要抽取csv文件中的特定列,使用excel老是将hh.mm.ss.SSS格式数据搞坏,于是想通过python直接提取。方法记录如下:
Pandas是用于数据操纵和分析的Python软件库。它建造在NumPy基础上,并为操纵数值表格和时间序列,提供了数据结构和运算操作。
1 | mkdir csv_extract |
创建envConfig.bat批处理文件,一键执行离线环境配置。
1 | python -m venv env |
1 | import pandas as pd |
通过套接字发送本地的数据包不会通过真实的网络接口发送,而是通过回环地址。因此,如果需要分析发往本机的网络数据包,需要Wireshark在回环地址上抓包。
windows系统没有提供本地回环网络的接口,用wireshark监控网络的话只能看到经过网卡的流量,看不到访问localhost的流量,因为wireshark在windows系统上默认使用的是WinPcap来抓包的,现在可以用Npcap来替换掉WinPcap,Npcap是基于WinPcap 4.1.3开发的,api兼容WinPcap。
Npcap 是 Nmap 项目的 Microsoft Windows 数据包捕获(和发送)库。它使用自定义 Windows 内核驱动程序以及我们的 Windows 版本的优秀 libpcap 库来实现开放Pcap API。这允许 Windows 软件使用简单、可移植的 API 捕获原始网络流量(包括无线网络、有线以太网、本地主机流量和许多 VPN)。 Npcap 现在提供:
安装Wireshark 3.4.4时,其安装包内置了Npcap的安装程序,但是安装时需要注意需勾选兼容WinPcap选项,否则Wireshark将找不到Adapter for loopback traffic capture网口。
最近在Kylin 4.0.4社区版上安装了VirtualBox,使用VirtualBox安装了Win7操作系统,虚拟机通过设置网口桥接模式与宿主机进行通信。偶尔出现宿主机无法ping通虚拟机,虚拟机无法ping通宿主机的情况,查看虚拟机网口接收情况,发现虚拟机接收数据包为0,重启虚拟机也无法恢复,因此严重怀疑其原因是虚拟机使用的宿主机网口工作模式并不是混杂模式。下面介绍在Linux上查看网口工作模式和设置网口工作模式的方法。
如果存在ifconfig命令,则可使用该命令查看网口的工作模式,命令如下:
1 | [root@localhost jack]# ifconfig |
如果存在ip命令,则可使用该命令查看网口的工作模式,命令如下:
1 | [root@localhost jack]# ip addr |
如果存在ifconfig命令,则可使用该命令设置网口的工作模式,命令如下:
1 | ifconfig eth0 promisc 设置混杂模式 |
如果存在ip命令,则可使用该命令设置网口的工作模式,命令如下:
1 | ip link set eth0 up |
大小端字节序问题让人十分头疼,死记硬背并不能加深对大小端字节序的理解。但是从数据可视化的角度,就能理解大小端字节序,让人豁然开朗。
字节序,又称端序或尾序(英语中用单词:Endianness 表示),在计算机领域中,指电脑内存中或在数字通信链路中,占用多个字节的数据的字节排列顺序。
字节的排列方式有两个通用规则:
通常在计算机内部,小端序被广泛应用于现代 CPU 内部存储数据;而在其他场景,比如网络传输和文件存储则使用大端序。
一般网络字节序为大端字节序,因为UDP/TCP/IP协议规定:把接收到的第一个字节当作高位字节看待,网络数据解析时先收到的数据存放于低地址,否则内存的访问将是不连续的。 所以,大端字节序 = 网络字节序 = 高位放低地址。
对于整形数0x11223344,采用网络传输时,从wireshark中抓到的消息包,如下所示:
1 | 0 1 2 3 4 5 6 7 8 9 A B C D E F |
从wireshark的数据可视化角度可知,网络通信采用大端序,低地址存储高位字节,高地址存储低位字节,符合人类阅读习惯。
Windows在默认情况下会将高地址的2GB空间分配给内核(也可以配置为1GB),而Linux默认情况下会将高地址的1GB空间分配给内核。也就是说,应用程序只能使用剩下的2GB或3GB的地址空间,称为用户空间(User Space)。
应用程序中定义的变量通常在栈区存储,而栈(stack)的增长方向是向下增长,即高地址向低地址增长。因此,从如下可视化角度查看数据是合理的。
1 | F E D C B A 9 8 7 6 5 4 3 2 1 0 |
C++中让程序只启动一个实例的方法主要有以下几种:
主要利用如下函数实现:
1 | 函数原型: |
1 | bool checkMyselfExist()//如果程序已经有一个在运行,则返回true |
如果没有毛泽东同志多次从危机中挽救中国革命,如果没有以他为首的党中央给全党、全国各族人民和人民军队指明坚定正确的政治方向,我们党和人民可能还要在黑暗中摸索更长时间。同中国共产党被公认为全国各族人民的领导核心一样,毛泽东同志被公认为中国共产党和中国各族人民的伟大领袖,在党和人民集体奋斗中产生的毛泽东思想被公认为党的指导思想,这是中华人民共和国建国以前二十八年历史发展的必然结果。
政治路线确定之后,干部就是决定的因素。【《毛泽东选集》第2卷,人民出版社1991年第2版,中国共产党在民族战争中的地位,第526页。】
tcpdump 用于收集有关网络流量数据的出色工具。 数据包捕获为故障排除和安全分析提供了有用的信息。
参数 | 含义 |
---|---|
-a | 将网络地址和广播地址转变成名字 |
-c | 在收到指定的包的数目后,tcpdump就会停止; |
-d | 将匹配信息包的代码以人们能够理解的汇编格式给出;以可阅读的格式输出。 |
-dd | 将匹配信息包的代码以c语言程序段的格式给出; |
-ddd | 将匹配信息包的代码以十进制的形式给出; |
-e | 在输出行打印出数据链路层的头部信息; |
-f | 将外部的Internet地址以数字的形式打印出来; |
-l | 使标准输出变为缓冲行形式; |
-n | 直接显示IP地址,不显示名称; |
-nn | 端口名称显示为数字形式,不显示名称; |
-t | 在输出的每一行不打印时间戳; |
-v | 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息; |
-vv | 输出详细的报文信息; |
-F | 从指定的文件中读取表达式,忽略其它的表达式; |
-i | 指定监听的网络接口; |
-r | 从指定的文件中读取包(这些包一般通过-w选项产生); |
-w | 直接将包写入文件中,并不分析和打印出来; |
-T | 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单 网络管理协议;) |
1 | tcpdump |
1 | tcpdump -w tcpdump_test.pcap |
导出的pcap文件可导入wireshark进行分析。
1 | tcpdump -D |
1 | tcpdump -i eth0 |
Anywhere 是随启随用的静态文件服务器,它能随时随地将你的当前目录变成一个静态文件服务器的根目录。
1 | npm install anywhere -g |
切换到静态文件目录,输入以下命令测试:
1 | $ anywhere |