自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 p2p双向传输300M的文件 开发心得(Python windows)

最近写了p2p的文件传输软件,300M的文件只需1.5秒左右即可完成传输。期间遇到了一些问题,这里总结一下开发心得。1、多线程编程调用消息发送队列时,需要加锁,保证整块数据内部不会插入其它数据。参考之前的文章:socket send recv使用心得。再向发送队列添加数据时,需要容错处理,因为取队列的速度可能会低于加的速度导致加失败。2、接收线程在处理数据时,需要根据数据头分块处理,每次recv(buff)获取的未必是一包可处理的处理,可能是半包或者超过一包。3、根据要传送的文件大小,动态修改发送和接

2022-03-04 14:38:59 1086 2

原创 设计模式-11种行为型

11种行为型模式有:责任链模式解释器模式命令模式迭代器模式:在类内部增加迭代器类,并提供访问数据的接口,例如iterator,next()。中介者模式:将多个类之间的耦合关系,转变为多个类分别与中介类的关系。备忘录模式:数据存档、读档。观察者模式:观察者,被观察者,注册行为,响应(调用之前观察者注册的行为)。状态模式:当状态改变了,行为也跟着改变了;将特定的行为封装到状态对象中,用于代替if else或switch case。每个状态只是完成事情的一部分,所有状态合起来才能完整的完成这个事情

2022-02-17 11:44:05 367

原创 设计模式-11种行为型之命令模式

long long ago,我写过一个DHW大话务软件,当时对命令的处理就是采用命令模式。这里简要剖析一下,所有cmd类都继承一个base抽象类,这里会用到命令模式、函数模板。//声明一个cmd基类/接口,主要包含execute方法class ADhwCmdExeBase{public: ADhwCmdExeBase() { } virtual E_DhwCmdExeStatus ExecuteCmd(T_Message *pMsg) = 0; virtual

2022-02-15 17:27:28 303

原创 设计模式-7种结构型

结构型设计模式有7种,分别是:适配器模式桥接模式组合模式装饰模式代理模式外观模式享元模式适配器模式:手机充电5V,居民入户220V,中间新增个适配类,提供接口将220V转换为5V,然后将结果输出给手机。桥接模式:平等类的组合。形状抽象类的子类有各种形状,颜色抽象类的子类有各种形状。可以将颜色合成/聚合为各形状子类的成员,提供赋值接口。从而实现各种形状和各种颜色的组合。组合模式:整体与部分的组合。管理者和雇员的例子。管理者也是雇员,有职位等属性,比雇员多了下属成员等属性。将相同的部分合并为

2022-02-14 16:45:06 227

原创 设计模式-建造者模式

构建型设计模式包括:简单工厂模式、工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。个人认为,原型模式,在java中用处较大,在c++中可以用拷贝构造函数代替。本次实现建造者模式,主要可以解决构造函数参数过长的场景。#ifndef BUILDER_MODE#define BUILDER_MODE#include <QDebug>class CSendLc{public: class CBuild{ public: int a;

2022-02-10 15:29:23 639

原创 统计数据尾号分布(Python)

根据中签尾号,分析深圳小汽车车牌摇号数据。d={}def analyze_line(line): if not re.match(r'[0-9]+\s+[0-9]+\s+\S', line): # +表示一个或多个 \s任意空字符 \S非空字符 return #过滤无效行 print(line, end='') m = re.search(r' [0-9]+', line) #匹配中间的数据,line[m.start[]:m.end()]=' 668710

2022-01-28 16:00:18 808

原创 常见的排序方法(Python实现)

主程序如下:from random import randintimport timeimport copyGA_MAX = 19 #待排序的数据的数量ga = [randint(0, 199) for i in range(GA_MAX)] #待排序的数据ga_copy = [] #用于检测排序结果def print_ga(): # print(ga) print(''.join(str(i) + ' ' for i in ga))def random_ga()

2022-01-26 17:23:40 804

原创 bash 统计当前目录文件数量

#! /bin/bashsum=0for i in $(ls) # ls -r 反向排序doif [ -f $i ]#if [[ -f $i ]]#if test -f $ithen((sum+=1))echo $ifidoneecho "sum=$sum"返回主目录

2022-01-26 15:09:11 1432

原创 bash 冒泡排序

#! /bin/bash#排序整数,从小到大 冒泡排序read a b c dar=($a $b $c $d)for((i=0;i<=3;i++))dofor((j=0;j<=((3-1-$i));j++))doif [ ${ar[$j]} -gt ${ar[(($j+1))]} ]thend=${ar[(($j+1))]}ar[(($j+1))]=${ar[$j]}ar[$j]=$dfidonedoneecho "${ar[*]}"返回主目录...

2022-01-26 15:05:24 257

原创 bash 乘法表

#! /bin/bash#乘法表for((j=1;j<=9;j++))dofor((i=1;i<=$j;i++))doprintf "$i*$j=$(($i*$j)) "#echo -n "$i*$j=$(($i*$j)) " #这行也可以doneechodone脚本输出结果:1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=91*4=4 2*4=8 3*4=12 4*4=161*5=5 2*5=10 3*5=15 4*5=20 5*5=251

2022-01-26 14:59:56 1104

原创 bash 猜数游戏

#! /bin/bash#猜数游戏#shell带有内置函数RANDOM可以随机生成随机数其范围为:0~32767 $RANDOMnum_valid=1num=0#-------------------------------------------------function guess_input(){#echo "please input num(1-999)"#read -n 3 num#num=$(($RANDOM%999 +1)) # $(())整数运算符num=$

2022-01-26 14:50:36 3392

原创 bash 调用python文件

pytest.pyfrom sys import argvdef f1(): print('this is f1.')if __name__ == '__main__': a = 'abc' b = 'xyz' c = a+b d = 'abc''xyz' print(c) print(d) print("argv[0]", argv[0]) for i in argv: print(i) #if le

2022-01-26 14:30:50 3084

原创 bash 将文件内容转置

#! /bin/bash#将文件内容转置#AWK 是一种处理文本文件的语言,是一个强大的文本分析工具cat test_data_transpose_file.txtecho ""echo "-------------------"if True;thena=$(awk '{print $1}' test_data_transpose_file.txt)b=$(awk '{print $2}' test_data_transpose_file.txt)echo $aecho $b#

2022-01-26 11:47:24 600

原创 设计模式-单例模式

饿汉子模式#include <QDebug>class CReject{public: static CReject* GetInstance() { return spInst; //return &Inst; } void PrintReject(); void SetIndex(int a){m_index=a;}public://真正的单例需要把拷贝构造函数私有化 CReject(const

2022-01-26 11:15:43 725

原创 bash 包含其它文件

#!/bin/bash#包含其它文件#. ./test_data_source.txtsource ./test_data_source.txtecho "--------------"echo $$echo "Language: $1"echo "URL: $2"echo "-------------"func_echo_array hellotest_data_source.txt文件如下#! /bin/bashfunction func_echo_array(){

2022-01-24 11:05:57 133

原创 bash 统计单词出现频率

# /bin/bash#统计单词出现频率#单词都是小写字母和' '单引号组成。单词之间有一个或多个空格组成。#test_data_words.txt#统计指定字符if True;thengrep -o -i '\bYOU\b' test_data_words.txt | wc #-o 或 --only-matching#grep -o -i '\bYOU\b' test_data_words.txt | wc -wfiecho "-----------------------"# 有

2022-01-24 10:52:04 458

原创 bash 显示有效的电话号码

#! /bin/bash#显示有效的电话号码#格式如下#(xxx) xxx-xxxx#xxx-xxx-xxxxgrep -P '^\(?1{1}[0-9]{2}\)?( |-)[0-9]{3}-{1}[0-9]{4}\s' test_data_number.txt-P, --perl-regexp PATTERN is a Perl regular expression13661242508136adfdafdaf136d568974025813526848136

2022-01-24 10:36:02 277

原创 bash 打印第10行

#! /bin/bash#显示line.txt的第10行if True;thenhead -n 10 test_data_line.txt| tail -n +10 #tail -n +10 就第10行到末尾fiif True;thentail -n +10 test_data_line.txt | head -n 1fiif True;thensed -n '10,10p' test_data_line.txtfiline1line2line3line4line5

2022-01-24 10:22:23 476

原创 bash 移动字符设备文件

#! /bin/bash#判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下echo "input filename "read filenameif [ -c $filename ]thencp $filename /devfi返回主目录

2022-01-24 09:55:47 244

原创 bash cp file

#! /bin/bash#author zhuofeng#cp mv rm 复制/移动一定大小的文件到指定目录tdirectory="temp"if ! [ -d $tdirectory ]thenecho "create directory"mkdir $tdirectoryfi#for i in $(find ./ -type f -size +0b) #for 语句是以空格为分隔符,所以遇到名字有空格的文件,就会有问题find ./ -type f -size +0b

2022-01-24 09:54:11 199

原创 bash break continue

#! /bin/bash#break n#continue nfunction test_break(){echo "input num:"while read num;docase $num in0)echo 'zero';;[1-5])echo "1-5";;[6-9])echo "6-9"break;;*)echo "other";;esacdone}test_break返回主目录

2022-01-24 09:40:39 235

原创 bash return

#!/bin/bashsum=0 #全局变量function getsum(){ for((i=$1; i<=$2; i++)); do ((sum+=i)) #改变全局变量 done echo "--" return $? #返回上一条命令的退出状态}read mread ngetsum $m $necho "The sum is $sum" #输出全局变量if getsum $m $n; then echo

2022-01-24 09:40:03 547

原创 bash select in

#! /bin/bashecho "select your os"select name in 'linux' 'iso' 'windows' 'unix'doecho "your select $name"done#回车将重新执行select语句#ctrl D 退出select的无限循环echo "after ctrl D"脚本输出结果:select your oslinuxisowindowsunix#? 1your select linux#? 7your

2022-01-24 09:39:46 78

原创 bash while for

#! /bin/bash#---------------------------------function test_while(){echo $0 'test_while_until'sum=0i=1#while((i<=100))until((i>100))do((sum+=i))((i+=1))doneecho sum=$sum}#---------------------------------function test_for_c(){ech

2022-01-21 11:40:02 171

原创 bash case in

#! /bin/bashtestfunction test(){printf "input a char:"read -n 1 aprintf "\n"case $a in[967]) echo '9 or 6 or 7' ;;a | A) echo 'a | A' ;;[0-9]) echo '0-9' ;;[a-z]) echo 'a-z' ;;[A-Z]) echo 'A-Z' ;;*) echo 'other' ;;esac}脚本输出结果

2022-01-21 11:36:54 506

原创 bash write2file

#! /bin/bashread filenameread urlif test -w $filename && [ -n $url ]then echo $url>$filename echo "write succ"else echo "write fail"fi脚本输出结果:返回主目录

2022-01-21 11:35:00 289

原创 bash if else

#! /bin/bashprintf "please input integer number:"read numif ((num ==1))thenecho "num is 1"elif ((num == 2))thenecho "num is 2"elif ((num == 3));thenecho "num is 3"elseecho "num is other"fi脚本输出结果:please input integer number:123num is othe

2022-01-21 11:28:44 283

原创 bash exit

#! /bin/bashecho "befor exit"exit 1echo "after exit"脚本输出结果:使用 bash ./test_exit.txtbefor exit使用 . test_exit.txt当前进程会退出。返回主目录

2022-01-21 11:26:09 445

原创 bash 数组操作

#! /bin/bash#数组操作testfunction test(){array1=(5 100 'www.baidu')array2=(a b 90)echo array1[1]=${array1[1]}echo len_a1=${#array1[*]}echo array1= ${array1[*]}echo "拼接"array3=(${array1[*]} ${array2[*]})echo ${array3[*]}echo "---"array1[5]=55

2022-01-21 11:16:32 636

原创 bash 函数调用

#! /bin/bash#函数function func(){echo "language: $1"echo "URL: $2"echo "total para is $#"}#调用函数func C++ http://c/echo $0 pid is $$脚本输出结果:language: C++URL: http://c/total para is 2/usr/bin/bash pid is 5708返回主目录...

2022-01-21 11:00:13 868

原创 bash shell实践目录

字符串的拼接与截取

2022-01-21 10:40:25 248

原创 bash 字符串的拼接与截取

#! /bin/bash#字符串拼接与截取function test(){url="https://www.baidu.com"a="index"b="$url$a" #拼接c="$url:$a" #拼接echo url=$urlecho a=$aecho $becho $clen=${#url}echo $lenecho "#截取右边字符"x=${url#*//}y=${url#https://}z=${url#*/}zz=${url##*/}echo $x,$

2022-01-21 10:18:44 1023

原创 数据发一半,网络就异常了,应用层能收到一些数据吗?

数据发一半,网络就异常了,应用层能收到一些数据吗?我认为,应用层不一定能收到。如果传输层采用的是UDP,UDP是不分包,不组包,不重传的。UDP收到应用的发送请求,直接将数据包加上UDP头后,丢给IP层。IP层是会分片,组片。IP层根据MTU将数据分片传送,IP层也不重发。接收方收到IP片后,在IP层进行组片,如果组成功,就丢给传输层;如果组失败,就丢弃这个垃圾包。所以在UDP传输下,如果UDP丢给IP层的数据很大,分片后,传输一半网络异常后,接收方的IP层就会把收到的一片片丢弃,导致传输层收不到数据,

2021-12-01 19:24:37 2201 2

原创 Lambda Python与C++11

Lambda Python与C++11匿名函数,简洁,高效很多语音都支持匿名函数,主要是简洁和高效。Python的相对容易,C++11的语法复杂,但作为程序员必须得掌握。

2021-12-01 19:22:57 1118

原创 函数参数的压栈顺序

对于一般的c++是从右边开始压栈,可以看两个例子: int arr[]={1,2,3,4 }; int *ptr=arr; PrintMN(*(++ptr),*ptr); ptr=arr; PrintMN(*ptr,*(++ptr));void PrintMN(int m, int n){ qDebug()<<'m'<<m; qDebug()<<'n'<<n;}上文在QT的输出结果是m 2

2021-12-01 19:11:01 1009

原创 socket send recv使用心得(Python windows)

最近使用python socket做了一些程序,遇到了一些问题,后来逐一解决了。这里结合之前的认知,总结以下心得,避免后来人踩坑。1、send和sendall的区别发送方使用sendall,不要使用send。sendall在返回的时候,会确保数据已传给tcpip;send并不一定会把数据全部发完,而是发一次,就返回发送的数据长度。在一般的程序设计中,我们更多场景是使用sendall,使用send就需要自己处理未发送的数据。2、recv是拷贝数据,不是接收数据,每次拷贝多少?recv并不是取完对方发送

2021-10-27 14:49:58 2239 1

原创 比较pow(x,y)的实现算法

概述用python,比较pow的实现算法思路主要对比递归和while循环。PowCircle2函数和PowCircle类似,PowCircle2更容易理解一些。源码from time import ctimefrom math import *def PowRecursion(x,y): if(y==0): return 1 if(y==1): return x t = PowRecursion(x, (int)(y / 2))

2020-09-11 17:48:52 316

原创 贷款利率LPR

贷款利率4.41crrent lpr=4.65 加点为-0.24(永远不变了)result = 4.65-0.24=4.41以后:若lpr=4.8 result= 4.8 -0.24 = 4.56若lpr=4.0 result= 4.0-0.24 = 3.76高点转比较好,转的时候,利用加点将固定和LPR对等。以后就看LPR值,LPR降则降,升则升。 ------ ------...

2020-09-04 17:24:20 142

原创 C++ LIST VECTOR MAP的底层实现

本文参考了网上文章,一搜一大把。LIST支持快速增删,底层使用循环双向链表实现。VECTOR支持快速随机访问,底层使用数组实现。当新增数据,超过已申请的剩余空间时,将会自动resize重新申请全部空间,将已有数据和新增数据拷贝给新申请的空间,然后释放原先申请的空间。MAPKEY值唯一,底层使用红黑树实现,也就是平衡二叉数。...

2020-09-04 17:16:26 416

原创 线程休眠和阻塞的区别

经常会有人问线程(或者进程)休眠和阻塞的区别,挂起和阻塞的区别。个人决定不同的操作系统,会有不同的差异。本文做一个思路的介绍。进程、线程状态进程一般分五个状态:创建,就绪,运行,阻塞,结束线程一般分四个状态:就绪,运行,阻塞,死亡针对进程或线程各个状态的区别,从名字大概就可以看出来了。针对阻塞、休眠,挂起,又怎么考虑区别呢?实际使用时,经常称呼阻塞后进入挂起,因为可以认为挂起就是一个动作,进入阻塞态或休眠态。休眠和挂起并没有写入线程、进程生命周期的状态。1、主动,被动角度阻塞pend是被动,在访

2020-09-04 17:04:35 4177 5

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除