自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 shell编程(十一)awk指令

awk指令简介一般情况下,awk指令是进行文件内容的列操作,与sed相反,sed主要进行文件内容的行操作,这两个指令就可以直接对一个文件进行快速的操作。功能介绍一般使用awk的列操作,默认情况下,是以空格进行分割。首先创建一个文件内容如下:My name is dhyThis is a awk_test filesContent is a,b,c,df对文件进行awk的指令操...

2020-05-03 23:10:15 324

原创 shell编程(十)sed指令

sed指令介绍sed指令是shell中常用常见的指令,一般使用sed来进行文本文件的处理。一般sed指令是以行为单位进行处理文本文件的。参数说明a:新增,在指定行的下方进行新增行c:取代,取代n1到n2行之间的内容d:删除某些行i:插入,在指定行的上行插入一行内容p:打印s:替换,和vi中的替换语法类似,将内容替换成指定内容增加操作下方增加一行,两种方式第一种方式se...

2020-04-30 23:24:00 349

原创 shell编程(九)函数

C/C++中的函数int func(int a, int b){ return a+b;}在C/C++中,函数定义出,必须要有以下部分函数名返回值类型参数列表return进行返回优点:比较精细,使用起来比较收约束,但是在该约束的情况下使用比较方便。shell中的函数一般shell中的函数用来做一些shell的集合,这样可以使整个过程集合在一起,不会丢下某部分或者跳过某...

2020-04-25 23:20:10 311

原创 shell编程(八)select语句

selectshell中的select直接生成一个菜单,然后供用户进行选择(使用1,2,3等数字进行)简单了用户的操作方式,是程序运行具有更强的可读性。并且也完成了一个循环性的选择脚本。语法上因为是循环性的选择,所以需要使用do 和 done 进行涵括循环体。如下:一个模拟进行使用某款操作系统的shell脚本。在select的作用下,直接将选择框从英文的单词变成了数字1,2,3P...

2020-04-25 22:55:19 437

原创 shell编程(七)case语句

C/C++中的case语句int main(){ int num; cin >> num; switch (num) { case 1: cout << "case 1" << endl; break; case 2: cout << "case 2" << endl; break; default: ...

2020-04-23 15:24:17 261

原创 shell编程(六)while循环

C/C++中的while循环int i = 0;while (i < num){ //do something}优点:逻辑比较清晰,使用括号进行分割。shell中的while循环1. 第一种方式#!/bin/bash #author by dhyi=0while [ $i -lt 10 ]do echo "now the i is $i" ((i++)...

2020-04-18 23:06:36 953

原创 shell编程(五)for语句

C/C++中的for循环语句if (i = 0; i < num; ++i){ //do something}在C/C++中使用小括号花括号的形式将判断语句和逻辑语句进行区分,比较容易进行识别,也比较容易进行书写。shell中的for循环语句1. 第一种写法:#!/bin/bash #author by dhy#test for in ...for i in `se...

2020-04-18 22:46:50 532

原创 shell编程(四)运算符

C/C++中的基本运算符C/C++中有加减乘除等基本运算符,直接使用操作数加操作符就可以进行使用。如下所示:cout<<1+2<<endl; //计算1 + 2的值,平且打印cout<<2-1<<endl;cout<<1/2<<endl;cout<<2*2<<endl; 使用方便,并...

2020-04-15 15:33:28 128

原创 shell编程(三)if语句

C/C++中的if语句在C/C++中,if条件判断语句如下所示:if(a > b) cout<<"a>b"<<endl;else cout<<"a<=b"<<endl;条件满足:执行cout<<"a>b"<<endl;语句;条件不满足:执行cout<<"a<=b"&lt...

2020-04-14 23:16:14 413

原创 shell编程(二)命令行参数

main函数的命令行参数在Linux 下,我们有时需要手动的将main函数的两个命令行参数给出,然后程序才能正常运行,如下所示:#include<stdio.h>int main(int args, char* argv[]){ if(args == 2) { printf("main have two args, first is:%s, \ sec...

2020-04-13 23:29:05 410 1

原创 运行shell报错:[: !-d: unary operator expected

运行shell报错:[: !-d: unary operator expected今日在编写shell测试的时候,使用到了if 的逻辑判断语句,然后在进行判断一个文件(或目录)是否存在的时候,shell无法进行运行,并报错。报错原因:语法错误在进行使用shell 的一些逻辑判断是,有些语句必须前后加空格,有些则必须不能加空格,所以,这次我就吃了大亏。#!/bin/bash #by...

2020-04-09 23:19:56 1248

原创 shell编程(一)变量

shell 变量定义一个变量my_first_var=1如上代码所示,定义了一个变量名为my_first_var的变量,并且将其变量的值赋为1。注意命名只能用英文字母,数字和下划线,首个字符不能用数字开头。中间不能有空格,可以使用下划线 ‘_’不能使用bash中的关键字无效的命名方式:?var=1 #禁止以标点符号和数字打头a*b=12 #禁止标点符号使用一个变...

2020-03-31 16:37:09 132

原创 解决哈希冲突的7种办法

哈希函数的选取哈希函数可以有很多种,如下所示除留余数法直接定址法平方取中法随机数法等等等等,所以,在根据不同的场景可以制定不同的哈希函数,这样就可以减少哈希冲突出现的概率。闭散列中的线性探测和二次探测线性探测线性探测就是:当发生哈希冲突的时候,key值逐个向后进行查找,直到找到可以存放key的空位置。二次探测二次探测就是:当发生哈希冲突时,key值的位置按照 i^2(i...

2020-03-27 15:06:03 1462 1

原创 C++中vector容器为什么扩容时按照2倍或者1.5倍进行扩容

扩容机制首先在VS2013底下,vector的扩容操作是每次扩容*1.5;在GCC环境下是2倍。GCC下的扩容方式是以二倍形式扩容。VS2013下是以1.5倍进行扩容所以可能会有疑问:问题一:为什么非要以倍数的形式增长,而不是以个数的形式增长。问题二:为什么每次增长是1.5倍或者2倍形式,而不是3倍或者4倍形式增长。详解问题一倍数方式空间拷贝数据次数假设总共有n个元素,以...

2020-03-26 22:47:56 4533 1

原创 如何使用./ 执行和sh执行shell

方法一:给xxx.sh文件加上可执行权限chmod 指令加上可执行性权限,然后直接使用./ + 文件名 就可以运行。方法二:直接使用/bin/bash + 文件名执行方法三:使用sh指令+文件名执行其实方法二和方法三属于同一种方法详细解析一般.sh文件,第一行都是对应执行指令的路径,比如:..sh 文件, 一般是#!/bin/bash.py 文件,一般是#!/bin/pyth...

2020-03-23 22:36:00 2009

原创 stringstream的用法

stringstream概述头文件:< sstream >继承自:< iostream>自身的成员函数:构造, rdbuf, strstr:将缓冲区中的数据以string的形式转换。返回值为string。继承的主要使用的成员函数[>>]:继承自istream,可以向sstream中输入数据。[<<]:可以向某些变量里输出数据。...

2020-03-21 19:06:42 835

原创 线程池和多线程的区别

线程池的概念线程池大类总共分为4种fixThreadPool 正规线程(传统线程池)cacheThreadPool 缓存线程池singleThreadPoll 单线程线程池(单例线程池)ScheduledThreadPoll 周期性执行任务的线程池fixThreadPool 正规线程(传统线程池)含有核心线程,核心线程即为最大线程数量,没有非核心线程cacheThr...

2020-03-17 17:44:50 8469

原创 快速排序的四种优化方式

快速排序的四种优化方式本文只讲述概念。选用基准值(不在四种优化方式中)选用基准值有三种方式,选用的基准值较好,快速排序的性能也会较好。固定基准(也就是从begin的位置,作为排序的基准,没有一点优化,简单的快排方式都是这样)随机基准(和固定基准差不多)三数取中,这个基准就稍微优化了一些,从一堆数据中随机找出三个数据,把中间数据作为基准值,可以说是进行了稍微的优化。下面讲一下四种优...

2020-03-16 23:33:44 1876 1

原创 switch和if else效率

switch case 与 if elseswitch case会生成一个跳转表来指示实际的case分支的地址,这个跳转表的索引号于switch变量的值相等。而 if else是需要顺序的遍历条件,直到条件成立。switch case 的优缺点优点:在效率上:当分支较多时,switch的效率是很高的。因为swtich在确定了选择值之后,会直接跳转到那个特定的分支。缺点:switc...

2020-03-13 14:03:06 422

原创 volatile关键字

保持内存的可见性在gcc对代码进行一定的优化之后,可能会导致cpu取到的变量会不是最新的值,所以,保持内存的可见性尤为的重要。#include<iostream>#include<signal.h>using namespace std;int flag = 0; //全局变量void handler(int sig){ cout<<"ch...

2020-03-12 23:14:07 82

原创 gcc的优化参数介绍(-O1,-O2,-O3,-Os)

-O的设置一共有5种常见的O0:零,表示关闭所有优化选项, 也就是默认的参数,没有进行优化参数 -O1、-O2、-O3 中,随着数字变大,代码的优化程度也越高,不过这在某种意义上来说,也是以牺牲程序的可调试性为代价的。Os:是在-O2的基础上,去掉了那些会导致最终可执行程序增大的优化,如果想要更小的可执行程序,可以使用这个选项。补充几个Og 是在O1 的基础上,去掉了哪些影响调试的...

2020-03-12 23:06:02 6635

原创 【算法】已知rand1() 生成rand5(),rand7()生成rand10()

rand1() 生成rand5()rand1 可以随机返回0和1, 所以,想让其生成等概率的0-5的数字先需要让其生成等概率的一组数(0-n)然后再用这一组数来取模生成0-5int rand1(){ return rand() % 2;} //由于rand1 只能生成等概率的0-3之间的数,int rand3() //所以先生成0-3 再由0-3生成0-5{ ...

2020-03-11 23:06:54 1338 1

原创 C++异常的种类

概述C++中的异常是以继承的方式展现出来的,exception只是一个抽象类,通过虚函数的方式来进行继承,可以达到C++多态的效果。直接可以使用父类指针或者引用来捕获异常。详细介绍bad_typeid在使用typeid运算符时,如果其操作数是一个多态类型的指针,而该指针的值为NULL时,则会抛出异常。#include<iostream>#include<typein...

2020-03-08 23:26:28 2499

原创 子网划分方式详解

子网划分的原因我们知道,IP地址(IPv4)是一个4字节32位的正整数,所以,在同一网络中,一共最多能够放下2的32次方个主机,约等于43亿个主机,这就意味着,总共又43亿主机能够接入同一网络。但是到目前来看,这远远是不足以当今互联网的使用。减少网络流量,使网络流量尽量保存在本地路由器中,提高网络速率。简化管理,相比较庞大的网络系统,局域网的管理要容易的多。有助于覆盖大型的地理区域,讲所...

2020-03-08 16:55:20 5707

原创 五种IO模型

五种IO模型同步阻塞IO同步非阻塞IOIO多路复用(select、poll、epoll)信号驱动IO(SIGIO)异步IO(POSIX 的 aio_系列函数)首先先说明一点概念,IO执行的两个阶段在进行IO操作时,通常会经历两个阶段:第一个阶段:系统内核缓冲区先等待数据准备好。第二个阶段:当系统内核数据准备好之后,将内核空间的数据拷贝到用户空间(制定进程缓冲区)。针对于网...

2020-03-03 22:59:52 418

原创 AVL树的旋转(二叉平衡树)

概念二叉搜索树概念:https://blog.csdn.net/weixin_43796685/article/details/104345502AVL树代码:https://github.com/DHaoYu/C-Cplusplus/tree/master/C%2B%2B/%E4%BA%8C%E5%8F%89%E6%A0%91/%E4%BA%8C%E5%8F%89%E6%A0%91由于二...

2020-03-02 23:26:27 251

原创 Session、Cookie与Application的区别

联系Cookie和Session都是客户端和服务器之间保持交互状态的解决方案,Application是web应用中,为应用程序提供了一个全局的状态,所有的客户端都可以使用该状态CookieCookie是一小段的文本信息。当客户端请求服务器时,如果服务器需要记录该客户端的状态,则可以在向客户端响应response中向客户端浏览器发送一个Cookie,从而客户端将Cookie保存起来。当浏览器再...

2020-02-29 23:15:02 1886

原创 GET和POST的区别

GET和POST的区别GET后退按钮/刷新按钮没有副作用(幂等)POST的数据会被重新提交GET能被缓存,POST不能被缓存GET请求数据一般在URL之后,在HTTP的请求头中;POST请求数据在请求体中。GET请求的数据可以保留到历史纪录中,并且请求数据明文出现在URL中;POST的参数不会被保存,安全性相对较高。GET只允许ASCII编码,POST允许多种编码,对数据类型没有要求...

2020-02-28 23:23:33 92

原创 TCP与UDP的区别(超详细)

总结TCP是面向连接的,UDP是无连接的TCP是可靠的,UDP是不可靠的TCP是面向字节流的,UDP是面向数据报文的TCP只支持点对点通信,UDP支持一对一,一对多,多对多TCP报文首部20个字节,UDP首部8个字节TCP有拥塞控制机制,UDP没有TCP协议下双方发送接受缓冲区都有,UDP并无实际意义上的发送缓冲区,但是存在接受缓冲区TCP是面向连接的,UDP是无连接的在TC...

2020-02-28 17:14:45 51285 5

原创 一致性哈希

简介转自:五分钟理解一致性哈希算法一致性hash算法提出了在动态变化的cache环境中,判定哈希算法好坏的四个定义。平衡性:平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。单调性:单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到原有...

2020-02-27 21:50:09 105

原创 哈希表的开散列和闭散列(C++实现)

hash概念哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。搜索方法:可以进行少量的比较,1次或者2-3次从数据中得到要搜索的数据,是大量数据的搜索时间复杂度变成O(1)。哈希函数hashfunc可以通过哈希函数与存储表中的元素建立一亿映射的关系,可以通过此函数直接查找到该数据在哈希表中的位置。插入元素...

2020-02-27 17:00:07 1071

原创 测试UDP端口是否可以正常通讯(nc指令)

nc指令安装方式 yum install nc指令详解用法nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]参数说明-g&lt...

2020-02-25 16:20:59 2121

原创 排序算法的性能测试

注:这几种排序函数本人并没有加以优化,只是简单的将其给出,做一个简单的数据测试,所以当然不如库函数的效率。测试平台时Win10系统,VS2013,没存8G, CPU i5 7300所有数据都是本人亲测,代码链接:测试代码//sort_test310个数据100个数据发现选择排序和冒泡排序已经从0毫秒变成1毫秒1000个数据此时,发现插入排序,冒泡排序,选择排序的性能相对较差了。...

2020-02-23 23:17:25 368

原创 STL中sort排序分析

本人写的快排排序与algorithm中快排的效率比较我就纳闷了,快速排序已经是很快的排序算法了,为什么还和库中的排序算法相差如此之远。查阅网上资料与库中的源码得知在库中的排序算法不光光使用到了快速排序,并且使用到了多种排序相结合的方式,控制着整个排序中序列的大小与排序方式的进行。首先 STL中sort函数使用了三种排序手法,分别是快速排序,堆排序,插入排序三种方式,并且快速排序采用递归...

2020-02-22 22:24:40 282

原创 七大排序算法总结

排序算法分类类型排序名称排序名称插入排序类型直接插入排序希尔排序选择排序类型选择排序堆排序交换排序类型冒泡排序快速排序归并排序类型归并排序性能—时间复杂度&空间复杂度排序方法平均时间复杂度最好情况最差情况辅助空间稳定性插入排序O(n^2)O(n)O(n^2)O(1)稳定冒泡排序O...

2020-02-21 16:41:26 188 3

原创 图解二叉搜索树(C++)

二叉搜索树定义二叉搜索树(二叉排序树)可以是一颗空树(无结点)也可以:若它的左子树不空,则左子树上的所有结点都小于其根节点的值若它的右子树不空,则右子树上的所有结点都大于其根节点的值它的左右子树分别也必须是二叉搜索树如图:最左边的值一定是最小值,最右边的值一定是最大值结点结构template<class T> //模板参数struct BSTNode{ B...

2020-02-16 22:19:12 127

原创 智能指针循环引用图解秒懂

智能指针shared_ptr实现一个简单的shared_ptr类#include<iostream>#include<mutex> //仿函数template<class T>class DFDel{public: void operator()(T*& p) { if (p) { delete p; p = n...

2020-02-13 17:26:27 1138 1

原创 C++多态(五)---菱形继承中的虚函数表详解

C++多态菱形继承虚基表指针与虚基表我们知道,在虚继承(菱形继承)中,对于类D创建的对象d,为了避免A类中的变量重复,所以,将A类中成员变量放在d对象模型的最下面,由B类与C类各自虚基表指针访问虚基表中偏移量的方式进行访问A类成员变量。虚函数表指针与虚函数表(虚表)在类中成员函数实现多态时,需要将成员函数定义为虚函数,所以,在多态的情景下,单继承下会存在一个虚函数表指针,指向成员函数...

2019-12-28 11:54:49 3046 3

原创 C++多态(四)---虚函数表详解

C++多态在C++多态(三)中已经得知,虚函数表地址存放在对象的内存模型中,通过该指针(vfptr),可以访问到该对象的虚函数表。class Base{public: virtual void f(){ cout << "Base::f()" << endl; } virtual void g(){ cout << "Base::g()" <&...

2019-12-26 17:11:11 285 1

原创 C++多态(三)---多态的原理

C++多态问题引入求如下代码所占内存数class B{public: virtual void Func() { cout << "Func()" << endl; }private: int _a = 1;};int main(){ cout << sizeof(B) << endl; //8}我们发现,...

2019-12-24 00:11:02 180

空空如也

空空如也

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

TA关注的人

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