自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小蜗牛之家

我要 一步一步往上爬

  • 博客(24)
  • 资源 (1)
  • 收藏
  • 关注

原创 [LINUX]shell传递超过10个参数的获取

shell脚本中如果有参数,一般使用n的方式来获取传递进去的参数。如果传入的参数大于9个,获取第10个参数需要使用n的方式来获取传递进去的参数。如果传入的参数大于9个,获取第10个参数需要使用n的方式来获取传递进去的参数。如果传入的参数大于9个,获取第10个参数需要使用{10}的方式表示,否则linux系统会认为是想要获取第一个参数,并在后面追加一个0字符。...

2019-10-30 19:52:38 3560

原创 [LINUX]磁盘块存储机制

关于磁盘分块存储:①分块存储的另一种实现模式就是分连续的块,可以想象一下,如果将一个文件存储在连续的磁盘块上面,这样带来的好处是不需要记录每个块的索引再拼接了,类似于内存的操作方式,只要记录一个大小和块的首地址实际上就可以了,但是实际在操作的过程中,会需要对文件进行增加删除和修改,如果采用连续存储,可能只能开辟一个新的磁盘块去存储修改过后的文件(因为前面的都被连续的存储占用了),这样会导致...

2019-10-29 22:24:11 307

原创 [NET]ip分片与mtu

ip分片和mtu:①分片是指ip网络层发现数据包超过了链路层上报的mtu的值(最大网络传输单元),因此将大的数据报拆分成一个一个小的数据包,并打上标签,便于对端恢复的一个流程,这个思路其实比较简单,就是少量分批的传输数据。②mtu:网络最大的传输单元,通常设置为1500,网络中都是数据帧的概念,他是不管你用什么协议,包中具体数据是什么的,他唯一关心的一个细节就是数据包的大小,即这层只负责传输...

2019-10-28 20:29:20 653

原创 [LINUX]SSL协议主要应用

ssl协议的主要应用:①数字签名:主要用于校验数据的完整性,以及确保中途数据没有被别人篡改。(当然如果中间截获的人有私钥的话,这套机制也就瓦解了)。这个方法就是hash+对hash值的加密操作即可。②数据加密:这个是为了防止数据中途被泄露(别人不修改,也不影响数据,只是看里面的内容),这个时候需要对数据进行加密。通常的做法是先使用非对称加密进行一对对称秘钥的协商(当然确保这个过程是在别人如果...

2019-10-27 11:43:25 1222

原创 [LINUX]文件绝对路径到索引节点之间的转换

文件绝对路径到索引节点之间的转换算法:(system V系统,这个算法的特点是比较简单容易理解,相对的,对于某些特殊场景,其性能一般)。算法的输入是一个绝对路径,而输出是一个inode节点的编号。①目录的存储格式:目录以前规定不超过14个字符,而目录类型的inode都是前面预留的,所以目录的inode编号一般也比较小,基本上就是2个字节存储,所以一个目录表项的结构大小是16字节(linux很多...

2019-10-26 20:01:26 320

原创 [LINUX]管道的实现

管道,管道分为命名管道和无名管道,他们的区别主要是初始化的方式不同。①管道的存取:命名管道是一个实际存在于文件系统的特殊类型文件对应了内存索引节点,这中间会维护一个读偏移量和写偏移量。当一个进程以读的方式打开管道后(系统调用read),如果此时还没有任何其他进程试图往该管道里面写数据,那么内核会让这个读进程进入睡眠状态,直到另一个进程以写的方式打开该管道,并往里面写入数据(写的方式和写普通文件...

2019-10-25 19:57:55 181

原创 [C/C++]类成员的类型

类中对象的类型确定:类中的成员变量的类型如何使用?何时用继承,何时用指针(引用),何时用正常的成员变量:首先所有的类型都可以看作是一个类的对象,哪怕是最最基本的int。然后通过分析这个对象与本类的关系,来决定用什么类型:①【内存成员】如果是组合关系,缺一不可,缺少后本类的对象就生不出来了,那就必须用正常的占据内存的成员变量,比如人这个类中的手这个对象。②【纯内部指针】如果是一对一使用关系,且...

2019-10-24 22:31:58 803

原创 [C/C++]数组与指针

1.数组元素名和指针都表示地址,地址可以进行加法运算,比如p+1 = a[1]的地址 p+2 = a[2]的地址,也就是说间隔是该类型的长度2.数组名由于是地址,所以可以当做指针来用,比如a[] *(a+2) = a[2]的内容,同理,指针也可以当做数组来用,p[2] = a[2] = *(p+2) = *(a+2)3.减法同样适用,比如指向a[5],则*(p-3) = a[2]4.二维数组...

2019-10-23 19:43:45 84

原创 [C]restrict关键字

C99标准中支持Restrict关键字,用来修饰指针。 用restrict关键字修饰的指针所指向的内容,不会被其他任何指针更改,只能由restrict指针更改例如: int test_restrict(int* x, int* y) { *x = 0; *y = 1; return *x; } 这是普通的函数,但其实,x y都只更改了各自内容,没交叉更改,所以:int test_rest...

2019-10-22 22:20:17 113

原创 [LINUX]inode文件索引节点介绍

inode索引节点:①inode索引节点是一种数据结构,是VFS文件系统要求文件系统必须要实现的一个部分。以磁盘文件系统为例,inode结构体数据一般以线性的方式(数组),存储在磁盘上(一般磁盘布局是引导块、超级块、inode索引、数据块)4个布局。②inode结构与一个特定的文件相对应,在磁盘上,主要包括一些文件大小、修改时间、创建时间、inode修改时间、所属用户、文件操作权限、联结数、...

2019-10-21 22:24:55 591

原创 [算法]滑动平均模型简介

滑动平均模型,一般用于提升模型在测试集上的准确率。需要指定一个更新比率decay,一般会指定为比较大的一个值,比如0.996这种,同时会维护一个影子变量shadow,模型中的每个参数都会有一个与之对应的影子变量,这个变量在模型训练的时候,不会对模型的训练产生任何影响,即和没有影子变量的情况是一样的。但是每一轮训练,这个影子变量shadow的值都会进行更新,更新公式就是shadow = decay...

2019-10-20 10:45:15 362

原创 [LINUX]VFS高速缓存的实现方式

VFS buffercache的实现原理:①磁盘的存储方式:(这里的磁盘理解为驱动程序的模拟),磁盘类似块存储的方式,一个文件可能分为非常多的块来存储,每个块并不大,可能就4k个字节等,即一个文件最终被存储在多个块上,而上层通过索引节点inode来记录对于块的索引(一个inode对应于一个或者多个同样内容的文件路径),而一个inode对下对应了多个块的信息。inode之上就某个文件系统超级块(...

2019-10-18 19:56:09 274

原创 [C/C++]PCLINT错误集锦

1.指针类型不匹配 -返回指针的类型的函数后面需要加()2.未定义错误 - 1.可能变量的名称改变了,需要更新名称, 2. 可能需要去.h中包含头文件(一般很少) 3.有些未定义错误一次只能检查出一个,但其实是一连串的错误,需要连续编译查找3.函数未定义 - 有些函数可能换成了全新的函数,需要用SourceInsight进行查找4.函数参数缺少 - 可能是函数更新了,需要讨论...

2019-10-17 20:41:04 2220

原创 [工具]sourceinsight使用

1.向下搜索:右键+e:好处可以用鼠标选中后直接进行搜索2.后续的快捷键可以自行定义比如打开当前文件所在目录:explorer /e,/select,%f3.可以多用用左侧和右侧的搜索功能,是Alt + L ,Alt + R对应到搜索框4.生成指定数量的switch语句,(自动生成语句功能)Alt+S5.括号检查:双击单侧括号即可进行括号范围检查6.设置字体:直接...

2019-10-16 20:18:24 349

原创 [C/C++]std::tuple使用

tuple的使用:tuple是pair的一般化过程,即可以有多个《不同》的类型放在一个容器中(其他的容器,都是必须相同类型),形成一个对象。可以类比pair;生成用std::make_tuple<c1,c2,c3>(a1,a2,a3),访问用std::get(tuple对象),还可以配合std::tie来将一个tuple中的值映射到局部变量中。更多的应用场景是类似于python...

2019-10-15 22:08:04 405

原创 [C/C++]类的隐式内联和显式内联

类的隐式内联和显式内联:类内部的内联函数:类内部只要定义在函数其实都是默认inline的(即通常我们说的尽量不要往.h中类定义的地方直接定义函数,最好只是做一个申明,这个说法其实不太好,因为这会破坏隐藏内联的功能)。虽然说即便是隐藏的内联,也不一定是内联的,最后还是编译器决定,但是定义在.cpp中的内容,等于是放弃了内联功能,这种可能性降低的写法其实是不推荐的。另外,也可以用inline放...

2019-10-14 21:05:53 1295

原创 [C/C++]virtual关键字

和Inline有相同点,Inline就是编译的时候将函数直接展开来,不使用链接方式。Virtual也是影响编译和链接的一种修饰符。Virtual基类:(虚拟继承)用Virtual修饰类,派生类到基类存在多条路线时(多个继承脉络或者途径),一个这种派生类的对象实例化将包含多个基类对象。用Virtual来避免产生多个基类的对象在多继承下,虚继承就是为了解决菱形继承中,B,C都继承了A,D继承了B,...

2019-10-13 13:07:48 581

原创 [LINUX]mmap与read,write系统调用的区别

mmap和read、write的区别:文件数据在VFS系统中实际都是先读取到内核缓冲区,然后再拷贝到用户态缓冲区的,所以,实际上一份文件很可能在内存中存储了至少两份(一份内核,用于万一后续要用到,另一份是用户态内存,供用户自己去访问),这样做的优点是彻底的分离,但是缺点是其实对于空间、时间都是有很大的浪费的,时间浪费在拷贝操作上,尤其是大文件的读取,而空间浪费在多存了一份,mmap则是直接将内...

2019-10-12 19:53:27 479

原创 [C/C++]匿名联合

匿名联合:定义一个没有名字的union,相当于定义了一个共享一块内存的两个变量。可以直接调用的。同理,enum{内容},相当于#define的操作,相对define安全性更高,只是是有作用域的,调用的时候,要用::操作符号。struct一般没有这种特性,因为没有意义。...

2019-10-11 19:58:12 294

原创 [C/C++]函数式编程

“函数式编程"是一种"编程范式”(programming paradigm),也就是如何编写程序的方法论。它属于"结构化编程"的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。举例来说,现在有这样一个数学表达式:函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念。(1 + 2) * 3 - 4 传统的过程式编程,可能这样写:   var a = 1...

2019-10-10 22:26:00 454

原创 [LINUX]正则表达式

1..匹配任意一个字符,必须要有一个字符2.反斜杠:转义字符,c.t 匹配的是c.t, c.t可以匹配 cat cot 等3.字符组: a[bcde]t,可以匹配 abt,act adt aet 用中括号括起来的表示范围在字符类中有些元字符=普通字符,比如[.]表示匹配一个句号,可以简写[A-Z] [a-z] [0-9]等这种方式 又比如 -在字符组外面是普通字符,里面表示范围,...

2019-10-09 19:54:13 107

原创 [C/C++]weak_ptr弱指针使用场景

weak_ptr:弱指针:和shared_ptr共享指针是绑定的,只是不统计入引用计数而已。意思是如果有就用一下,如果没有,也没有关系。所以有些场景,我们几乎可以确定shared_ptr是肯定不会释放的,所以想用shared_ptr.get()来获取内部指针,再去做操作,这种情况下,其实就可以用weak_ptr,更加好一些,因为这个本来就是别人考虑到的这种场景来提供的功能;weak_ptr使用...

2019-10-08 20:14:56 981

原创 [C/C++]类的默认函数

类的五个默认函数主要是:拷贝构造、拷贝赋值、析构、移动构造、移动赋值①移动构造和移动赋值:在类的5大函数中(拷贝构造、拷贝赋值、析构、移动构造、移动赋值)这2种是性能相关的,决定了类对象的构造、移动的性能。编译器会对一个类自动的生成移动构造函数,前提是其所有非static成员,都顺利的拥有了对应的移动处理函数(这里的移动,指的其实是递归的移动处理);②一般析构函数总会定义,但是另外四个函数一...

2019-10-07 20:19:44 211

原创 [C/C++]std::move实现的方式

std::move主要用来将一个对象转换成右值引用,其实主要做的是一个类型转换的工作(static_cast),但同时也会做一些类型推导:实现如下:template<typename T>typename remove_reference<T>::type&& move(T&& t){ return static_cast&l...

2019-10-01 19:42:26 199

cppreference查询手册2019.chm

收集于cppreference.com 20190607,用于C/C++ 11,17,20的常用API和特性查询,好用的话记得评论下,多谢。

2019-12-21

空空如也

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

TA关注的人

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