自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 php学习之数组

上一节我们学习了php的基本语法和基础数据类型,本节来学习数组的相关内容。首先我们要明白一点,如果说变量是数据的容器的话,那么数组就是变量的容器。数组存储是以键值对的形式存储的,键一般默认是从0开始自增的,也可以自己设置key值。数组内部可以定义多种不同的数据类型。上述是对数组的增删改操作,增操作是以key值作为条件进行增操作,改操作和增操作相同,而删除操作则是有特定的函数进行删除!查数据实则就是对数据的输出,通过下标访问想要输出的数据。接下来是遍历操作,使用关键字 foreach(

2022-03-15 18:00:00 401

原创 PHP学习之基础语法

首先我们要知道php是一门解释性的语言,它不像C/C++需要编译后才可以执行,先写一个简单的“hello world”看看php的基本语法!php的代码必须写在 <?php ......?>里,echo则是将引号内容输出到浏览器中去!其次,html和php是可以混用的,比如我们想要对输出内容进行加粗就可以使用html中的 < h1> < /h1>逻辑上的语法基本符合C语言。echo和var_dump的区别为,var_dump主要是用来进行调试的,在正

2022-03-14 23:38:02 677

原创 关于哈希的一致性

一致性哈希算法的基本概念其实,一致性哈希算法也是使用取模的方法,只是,刚才描述的取模法是对服务器的数量进行取模,而一致性哈希算法是对2^32取模,什么意思呢?我们慢慢聊。首先,我们把二的三十二次方想象成一个圆,就像钟表一样,钟表的圆可以理解成由60个点组成的圆,而此处我们把这个圆想象成由2^32个点组成的圆,示意图如下:圆环的正上方的点代表0,0点右侧的第一个点代表1,以此类推,2、3、4、5、6……直到2^32-1,也就是说0点左侧的第一个点代表(2 ^ 32)-1,我们把这个由2的32次方个点组

2022-03-10 09:17:47 194

原创 三剑客之awk行与列

awk特点统计计算,过滤,统计日志awk执行过程awk -F, ‘BEGIN{print “name”}{print $2}END{print “end”}’ file.txtawk在读取文件之前就可以执行BEGIN{print “name”} 中的内容行与列行: 记录 record ,每一行默认以回车为分割列: 域,字段,filed ,每一列默认通过空格分割awk中行和列的结束标记都是可以修改的awk的取行操作NR==1:取出第一行NR>=1&&NR&lt

2022-03-05 08:00:00 535

原创 三剑客之sed特点

一,sed命令的特点和格式1,命令格式:sed -r ‘s#oldboy#oldgirl#g’ mytest (将oldboy替换为oldgirl)单引号中的s表示替换功能,g表示修饰符,可以省略,mytest为文件参数,-r为选项。2,sed命令的核心功能:增删改查s:表示替换功能p:表示显示功能,printd:表示删除功能,delete(以行为单位)cai:表示增加c\a\i二,sed的执行过程sed的执行过程主要为两点:找和行为动作。找:找到想要的行行为动作:即想要实现

2022-03-04 22:25:04 286

原创 三剑客之grep参数

grep参数含义1,-E :表示egrep,支持识别扩展正则2,-A:表示after,-A5表示匹配到想要的内容以及后五行内容3,-B:表示befor,-B5表示匹配到想要的内容以及前五行内容4,-C:表示context,-C表示匹配到想要的内容以及上下五行内容5,-c:表示统计想要的内容出现了多少行,类似于wc -l6,-v:表示取反,排除(以行为单位)7,-n:显示行号8,-i:忽略大小写9,-w:精确匹配不加参数的话会匹配所有含有abc的数据,加上精确匹配的话,就只会匹配想

2022-03-04 18:00:00 418

原创 Linux之三剑客特点

本节我们来了解一下三剑客的使用场景和特点。1,grep特点:过滤使用场景:grep过滤优先考虑2,sed特点:替换,修改文件内容,取行使用场景:如果要替换/修改文件内容,取出某个范围的内容 (只要昨天到今天的时间段的内容)3,awk特点:取列,统计计算使用场景:取列,对比比较(>,<,<=,>=,!=),统计与计算...

2022-03-04 10:07:00 400

原创 扩展正则 (一)

前面我们聊过了基础正则,本节开始来聊一聊扩展正则吧!首先我们要知道常用的扩展正则符号都有哪些:+,|,{},(),?1,+ :表示前一个字符出现1次或1次以上。这里没有返回结果是因为grep默认只能识别基础正则,对于扩展正则语法无法识别。第一种方式是使用 egrep,e表示extrem扩展的意思。第二种方式是增加参数 -E。第三种方式则是可以对扩展符号前加转义字符。+多和[]匹配使用匹配0-9出现1次或1次以上的行。2,| :表示或者的意思。[]和 | 的区别:[]中的

2022-03-02 11:13:33 449

原创 基础正则(续)

紧接上回内容。6,* :表示前一个字符连续出现0次或0次以上。7 .* :表示任意内容,所有内容8,[] :[abc] 表示 一次匹配一个字符,匹配任意一个字符(a或b或c)范围匹配 [a-z]

2022-03-01 23:46:26 124

原创 基础正则(一)

首先我们在Linux中打开.text文件,向文件中写入内容。1,^:表示以…开头的行 eg:^test 表示以test开头的行寻找以oldboy开头的行,没有提示说明没有找到符合要求的行。返回以 I 开头的行2,$:表示以…结尾的行返回以 448 结尾的行。3^ $:表示空行,说明这一行没有任何内容注意: 空格也是符号返回空行。^$的主要应用案例:排除文件中的空行注意 -v参数表示排除操作4,. :表示任意一个字符注意:. 不会匹配空行5,\ . $ :需要增

2022-03-01 22:29:49 216

原创 正则表达式符号

正则表达式主要应用命令在Linux三剑客中——grep,sed,awk。主要的应用场景在——文件查询,过滤有规律的内容,尤其是日志文件。接下来简单说一下正则符号:基础符号:^, $,^ $, . , *, . *, [a-z], [^abc]。扩展符号:+,{},|,()等正则与通配符的区别正则的主要目标和用途是:三剑客,高级语言进行内容过滤(匹配字符)。通配符的主要目标和用途:用来匹配文件或文件名的。eg: *.txt, *.log正则与通配符支持的命令正

2022-03-01 14:57:51 358

原创 QT学习网络篇(三)

前两节我们完成了TCP连接,本节会主要针对UDP连接。首先我们要知道,TCP是分服务器和客户端的,但是UDP是不分的,所以相较于TCP来说实现比较简单一点,只需要使用一个类QUdpSocket工程创建想必大家也已经熟练了,这里就不再说了,直接上UI。前期的准备工作包括头文件的包含以及pro文件的内容和TCP是基本上一样的,这里就不多说了,直接上逻辑功能实现吧!**注意:**消息弹窗需要包含 QmessaBox 头文件接下来实现发送槽函数.最后是关闭槽函数。至此关于QT的UDP连接

2022-02-28 17:05:20 1247

原创 QT学习之网络篇(二)

紧接上节,我们来说说客户端的实现。因为工程创建和server一样,这里就跳过了工程的创建,我们直接展示做好的UI界面吧。下面就是实现其逻辑功能了,和Server是一样的。以上逻辑功能实现都是按照顺序的,大家可以仔细看一看对应的逻辑代码以及槽函数的调用。...

2022-02-27 08:30:00 208

原创 QT学习之网络篇(一)

首先对于网络的话想必大家非常熟悉的就是TCP和UDP了,QT网络编程也主要是以这两个协议为主,想要进行网络编程我们首先需要包含两个库文件,分别是QTcpServer和QTcpSocket。本节内容主要是完成对Server端的任务。从帮助中可以看到我们需要包含对应的头文件,同时也需要在pro文件中加入network。接下来我们看看QTcpSocket,我们也需要包含对应的头文件。我们首先要在头文件的类中声明服务器和套接字变量。接下来就是创建是在cpp文件中创建实例对象了。初始化完成后就是

2022-02-26 13:03:13 1614

原创 QT学习之打包成Windows软件

我们紧接上回我们完成了对串口软件助手的大体设计,接下来就是我们要如何将它打包成可执行文件发给用户让用户使用呢?首先我们把工程切换到release模式下进行编译。下来我们要找到release构建的文件夹。我们可以在此工程目录下找到.release文件夹里的.exe文件,但是目前还并不能打开,我们需要为此执行文件设计一个图标,也就是我们平常点击APP的图标。注意: 这里的图标必须是.ico后缀的图片我们将我们的ico图片放入我们的工程文件目录下。同时我们在pro文件中加入该图标属性。接下来我

2022-02-25 21:39:35 864

原创 QT学习串口编程(下)

紧接上回,编译后发现串口设置函数报错,发现报错原因是因为参数类型不匹配,通过查看了解到是因为我调用错了函数,正确的函数调用应该是下图所示。下来对打开串口操作进行弹窗操作。想要有这个消息弹窗,我们一定要包含头文件。下来我们要增加关闭开关。使用PushButton控件,‘X’来表示“关闭”操作,右键转入槽函数,定义槽函数。编译查看效果图。接下来我们对接收框和发送框进行connect操作。...

2022-02-25 14:21:49 360

原创 QT学习串口编程之初始化(中)

上一节我们完成了串口UI的设计,这节我们来说串口逻辑功能的实现。首先我们在头文件中加入包含的Qserialport.h,然后定义串口指针。下来我们要new一个串口实例对象。下来我们要new一个串口实例对象对象实例化之后就是对串口的初始化工作了,当我们打开串口的时候就要对串口进行初始化,所以串口的初始化是和打开串口按钮想关联的,在这里就用到我们之前所说到的槽函数和信号了。进入UI界面,右键单击“打开串口”,选择 “转入槽”,进入槽函数,定义变量。接下来便是根据UI中控件的值来对声明的变量

2022-02-23 22:47:11 1961

原创 QT学习串口编程之串口软件的UI设计

学会了如何使用QT进行界面设计之后,接下来让我们来进入第二阶段的学习——串口编程吧。首先我们需要对串口软件的UI界面进行仿写。首先存在一个接收方和发送方,接收框主要是串口软件接收设备发来的数据,发送框则是串口软件给设备发送数据。我们在控件编辑器中找到接收框的控件。接下来就是对小窗体的设计。接下来是标签设计。然后就是发送框的选中。接下来是对按钮控件的选中。下面就是我们的广告位的设计。编译后我们发现接收框和发送框都可以写数据,这显然是不符合逻辑的,所以我们需要对接收框做写限制,

2022-02-22 22:57:01 1867

原创 QT学习五(续篇)

上集说到界面切换以及返回功能的实现,这集我们紧接上节内容来说一说用户登录界面的切换以及用户账户和密码数据的读取吧!ui指向账户和密码控件从而获取文本数据,通过 if 判断用户是否合法,合法则可以界面切换,否则失败。编译之后就可以得到结果了...

2022-02-22 17:53:43 102

原创 QT学习五之界面切换

紧接上回我们已经做好了一个完整的界面,那么接下来的任务就是界面切换了,比如我们点击注册或者登录按钮后,就需要切换到一个新的界面,那么接下来我们就来看看界面的切换是怎们实现的把!我们想要切换一个界面那么我们首先就要有一个新的界面来让它可以切换,所以我们首先要做的是重新建立一个新的界面。在我们的工程中右键ClassTest,选择添加新的文件,选择QT,选择QT设计器界面类选项就可以开始创建界面啦!设计界面的流程和前面几节内容有讲过(强烈暗示),这里就不在细讲了,直接给大家看成果图吧。界面以及设计完毕,

2022-02-21 08:00:00 5321

原创 QT学习四之界面布局

紧接第三回,我们以及完成了UI界面的背景图片资源的上传,在我们日常使用的APP或者其他应用程序时,我们都可以进行窗口化并且可以自由调整窗口大小,而我们的UI界面虽然也可以调整窗口大小,但是我们的标签并不会自己适配当前窗口大小,那我们改如何去调整标签的自适应呢?这时我们就可以用到第一回所标注的界面布局工具栏了!!QT下共有三种界面布局:1,水平布局:选中两个控件2,垂直布局:同上3,栅格布局与上面不同的是,栅格布局需要弹簧控件拖好弹簧后选择栅格布局最后我们编译一下,看一下最终效果如何

2022-02-20 15:55:42 2459

原创 QT学习篇三之图片资源

紧接上回,我们已经完成了UI界面的大体框架,但是有没有觉得只有几个标签显得有点太突兀了,那么我们如何增添背景资源来让我们的UI界面更好看一点呢?首先我们需要向工程中添加资源文件,进入我们的项目工程,右键ClassTest选择添加新文件点击Chose进行下一步,对资源路径进行选择,注意不能出现中文路径名!至此我们的资源文件就创建完成了!!接下来我们需要把图片资源放到我们的工程所在文件夹里去然后右键.qrc文件,选择Open with里的资源编辑器,在下面的添加里选择添加前缀,此前缀为qrc

2022-02-20 14:18:47 854

原创 QT学习篇之二

紧接上回,我们虽然已经做好了QQ登录界面的整体框架,但是我们会发现,无论我们点击登录按钮还是注册按钮,都是没有反应的,今天我们就来看看如何解决按钮响应的问题吧!首先我们要知道,想要让按钮响应就需要我们使用QT信号和槽,接下来我们详细了解这两者的作用。首先我们要给控件改名字:为什么要改名字呢?为了代码分析更方便,更易懂。控件名要通俗易懂;我们双击窗体中控件,可以在右边的对象栏中进行控件名的修改什么是信号和槽?信号就是点击控件时发出的信号(我们可以理解为触发中断),槽则与控件一一对应,每一个控件都

2022-02-19 22:30:00 1641

原创 初识QT之QTWidget窗口

红色字体为QT工程设计所涉及到的一些处理功能模板的作用以及信息标注。接下来简单设计一个简单的QQ登录界面,需要找个图片,登录等组件:找到Label组件,用鼠标将其拖至 ‘待设计的窗体’ 中,输入 “QQ登录界面”窗体大小可以通过属性编辑器中的 ‘geometry’ 来进行调试;字体大小可以通过属性编辑器中的 ‘font’ 来进行调试;对于字体的位置调整,可以在属性编辑器中搜索alignment 来进行居中等位置的调整;接下来是账号和密码输入界面,我们在组件中找到 ‘Input w.

2022-02-19 15:14:57 3730

原创 hash functions

这里我们看一看标准库自己实现的hash function吧:标准库的hash函数只针对内置类型,对于自定义类型无法进行hash;其hash值输出为下图:不同版本的编译器对应的hash函数有所不同。这里附上vs2019的hash源码...

2022-01-27 08:00:00 192

原创 容器篇之hash_table

首先说一下hashtable的基本结构:由vector来维护,vector中的每一个元素都是指针类型指向一个自由链表,有种二级空间配置器的感觉哦。当自由链表元素过多时会导致查询的时候速度过慢,当链表元素大于vector长度时,将该链表断开,对vector进行扩充,随后重新对链表元素进行分配,这里的分配方法是除留余数法,元素除以vector长度所留余数即为存储位置的下标。...

2022-01-26 07:00:00 243

原创 lambdas表达式(二)

上节说到简单的lambdas表达式的语法和应用,这里接着上节继续讲讲lambdas表达式吧。lambdas也可以和set一起使用,作为set第二参数,其中decltype是获取tmp的返回类型,这里会调用set的构造函数进行初始化set<>里的第二参数实际上就是我们写的lambdas表达式,而lambdas要做的是对传进来的参数进行比大小,也就是说我们使用我们自己定义的比大小规则替代了set本身的compare准则。但是这里有一个小bug,那就是myset(tmp)这里的tmp会报错,原

2022-01-25 20:30:00 175

原创 C++2.0新特性之lambdas(一)

什么是lambdas?在2.0中加入lambdas表达式,它允许我们定义出 ‘被用来当成一个参数或者是局部对象的内联函数’。lambdas改变了对标准库的使用。lambdas最简单的使用方法:[] {std::cout<<“hello lambdas”<<std::endl;}我们可以通过后面加 ‘()’ 的方式直接调用它:[] {std::cout<<“hello lambdas”<<std::endl;}(); //prints “he

2022-01-25 13:00:00 577

原创 C++ 2.0新特性(续)

上节说到2.0新加的几个头文件和标准库,这节说一下2.0新添加的关键字:delete和default;1,delete本意删除的意思,在2.0中是这样使用:String()=delete;意思是删除默认的构造函数,也就是说在创建实例对象时,编译器不会再调用默认的构造函数,如果没有写其他的构造函数的话就会报错,如图测试:一定注意,析构函数在delete的时候一定要谨慎,不然会很麻烦的。2 default则是默认的意思,用法与delete相同,以上图类为例,My_class() =default,意思

2022-01-25 08:00:00 187

原创 浅谈C++ 2.0新特性

C++1.0也就是我们俗称的C98,而C++2.0则是C11/14的统称,而从1.0到2.0C++又增加了那些新特性呢?在这里就浅谈一下C11/14的新特性吧!1,首先是header file部分,1.0版本时的头文件是一定要.h的,eg:#include<stdio.h>,而2.0版本可以去掉.h了,eg:#include2.0新添加的头文件:#include<unordered_set>#include < array>#include <type_t

2022-01-24 18:00:00 616

原创 关于new和delete

new和delete也是老生长谈的问题了。这里再次说一下个人对其的理解。1,首先是new:new是关键字而非和malloc一样如果空间分配错误会返回nullptr,new失败会抛出异常——throw();在调用new时如果对new没有进行重载就会调用全局new,也就是::operator new(),如果是自定义类型还会调用构造函数进行实例化对象的操作,new的内部最终是调用malloc进行空间分配。注:::operator new可以进行重载,其内容可以根据自身需要进行选择合适的内存分配方法(但是重

2022-01-24 09:00:00 216

原创 连的IP 地址存在,但端口号不存在的主机的握手过程是怎么样的?

前面已经提到的过IP地址压根就不存在的情况。想知道的同学可以回到我上一节的内容查看。假如IP地址存在但端口号是瞎编的呢?它的握手过程会是怎么样的呢?现象也比较简单,IP地址是存在的,也就是在互联网中这个机器是存在的。那么我们可以正常发消息到目的IP,因为对应的MAC地址和IP都是正确的,所以,数据从数据链路层到网络层都很OK。直到传输层,TCP协议在识别到这个端口号对应的进程根本不存在时,就会把数据丢弃,响应一个RST消息给发送端。此图来源于网络,不可用于商业RST字段在前几节有所涉及,这里

2022-01-12 15:00:00 926

原创 连接一个不存在的IP的主机时,握手是怎么样的?

我们先来看看正常的握手过程:服务器端启动之后调用LISTEN方法后回进入LISTEN状态,等待连接,客户端调用connect(IP地址)方法发起连接,向IP地址发起第一次握手,发送SYN到目的服务器。服务器在收到第一次握手之后,就会响应发出SYN,ACK,这是第二次握手。客户端在收到服务器发送的SYN时,也会响应发送一个ACK,至此三次握手结束,客户端和服务器都进入ESTABLISHED状态。以上为TCP的三次握手的抓包过程。那么,当我们连接一个IP地址不存在的主机时的握手是什么样呢?首先我

2022-01-12 09:00:00 513

原创 HTTP补充内容

众所周知,服务器与客户端想要进行数据传输就需要双方建立通信连接,常见的就是TCP连接,也就是三次握手,但是,当我们打开浏览器页面时,查看资源可以发现,会有很多资源状态码(200),那是不是每一个资源都要进行一次TCP连接呢?如上图所示,每一次返回成功状态码都表示一次资源请求的成功,按理说,每一个资源的请求都得有一次请求连接,但是,是否是每一个资源的请求都会有三次握手呢?答案当然是不会的!这么多资源,得进行多少次三次握手啊,想想就很耗时,所以自然是不会的,那么这么多资源到底是怎么样传输的呢?接下来给大家解

2022-01-11 08:00:00 158

原创 TCP报文

首先我们来看一看TCP报文格式:端口号:用来标识同一台计算机的不同的应用程序。1,源端口:源端口和IP地址的作用是标识报文的返回地址。2,目的端口:端口指明接收方计算机上的应用程序接口。TCP报头中的源端口号和目的端口号同IP数据报中的源IP和目的IP唯一确定一条TCP连接。URG:当URG=1时表示报文中有紧急数据需要发送,通常配合紧急指针使用ACK:与确认号关联,当ACK=1时,才可以读取确认号,为0时则无法读取确认号,就认为建立连接失败,所以ACK是用来确认连接的,一旦三次握手成功,则所

2022-01-09 07:00:00 1315

原创 HTTP请求之POST和GET

相信对于HTTP大家也是耳闻熟详了,对于它的TCP连接也是老八股了,相信什么三次握手和四次挥手也是老生常谈的东西了,这些不是今天文章的主要内容,所以在这里就不细说了,接下来就进入主题吧!每次当大家在输入栏中输入URL地址后就会呈现出界面,有没有想过他是通过什么方法来得到?在HTTP中请求方法有两种:POST和GET直接在地址栏里输入的请求是GET请求,而POST是将资源请求放在表单进行操作的,GET请求的资源可以放在URL的参数中,POST将资源的请求放在body里,这样的做的好处是相比较GET来说安

2022-01-08 06:00:00 1443

原创 浅谈Linux虚拟内存管理和虚拟地址空间

虚拟内存技术使得不同进程在运行过程中,它所看到的是自己独占了当前系统的4G内存空间。所有进程共享同一物理内存,每个进程只把自己目前需要的虚拟内存空间映射并存储到物理内存上。事实上,在每个进程被创建时候,内核只为进程"创建”了虚拟内存的布局,具体就是初始化进程控制表中内存相关的链表,实际上并不立即就把虚拟内存对应位置的程序数据和代码(.txt段,.data段)拷贝到物理内存中,只是建立好虚拟内存和磁盘文件之间的映射关系,等到程序运行的时候,才会通过缺页异常来拷贝数据。还有进程在运行过程中需要动态分配内存,比如

2022-01-07 13:30:00 775

原创 Linux下的五种IO模型

1,阻塞型IO:最简单的一种IO模型,简单来讲就是死等,即线程或进程一直等待某个条件,不满足则一直等待。2,非阻塞型IO:应用进程与内核交互,目的未达到之前会直接返回,然后不断轮询,不停的去问内核数据是否准备好,如果发现准备好了,就把数据拷贝到用户空间。应用进程通过recvfrom调用不停的去和内核交互,直到内核准备好数据。如果没有准备好,内核会返回error,应用进程在得到error后,过一段时间再发送recvfrom请求。在两次发送请求的时间段,进程可以先去做其他的事情。3,信号驱动IO:我们会发现

2022-01-07 08:00:00 786

原创 深入理解TCP

TCP第三次握手携带数据第一次和第二次是不可以携带数据的,但是第三次是可以携带数据的。加入第一次握手可以携带数据的话,那对于服务器来说太危险了,如果有人恶意攻击服务器的话,每次都在第一次握手中的SYN报文中放入大量的数据,并且不断的重发SYN报文,服务器就会花费很多时间和内存空间去接收这些报文。第三次握手,此时客户端已经处于ESTABLISHED状态。对于客户端来说,已经建立了连接,并且已经知道服务器的接收和发送能力是正常的,所以也就可以携带数据了。服务器不调用accept即使服务端不调用acce

2022-01-04 14:00:00 820

原创 初识session和cookie

session和cookie的区别:1,cookie数据存放在客户端的浏览器上,session数据放在服务器上。2,cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应该使用session3,session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用cookie4,单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie。cookie和session的联系sess

2022-01-04 08:00:00 830

空空如也

空空如也

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

TA关注的人

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