理论知识
文章平均质量分 84
Amberda
(ˉ▽ ̄~)
展开
-
vim常用命令总结
vim有多种模式,但是常用的就是三种模式:命令模式、插入模式、末行模式(还有可视模式) 命令模式:控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式下,或者到末行模式下。 插入模式:只有在插入模式下,才可以做文字输入,按ESC键可回到命令行模式。 末行模式:文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下,shift+冒号,即可进入该模式。在低行模...原创 2018-08-21 16:58:39 · 244 阅读 · 0 评论 -
网络-----Linux下和Windows下ping命令的区别
Ping 是Windows自带的一个DOS命令。利用它可以检查网络是否能够连通,用好它可以很好地帮助我们分析判定网络故障。该命令可以加许多参数使用,键入Ping按回车即可看到详细说明。Ping 命令可以用来验证与远程计算机的连接。 ping的参数 ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count]...转载 2018-06-01 22:01:58 · 3932 阅读 · 0 评论 -
网络-----Linux下常见网络命令总结
主要说明Linux环境下命令的使用ping命令1、原理ping 命令是用来测试TCP/IP 网络是否畅通或者测试网络连接速度的命令,对确定网络是否正确连接,以及网络连接的状况十分有用。简单的说,ping就是一个测试程序,如果ping运行正确,大体上就可以排除网络访问层、网卡、Modem的输入输出线路、电缆和路由器等存在的故障,从而缩小问题的范围。 ping命令的原理是根据计算...原创 2018-06-06 12:39:02 · 25300 阅读 · 1 评论 -
STL-----浅析二级空间配置器
在之前我们已经简单介绍过STL中的一级空间配置器,并且进行了模拟实现 但是来看下面这个问题: 如图,阴影部分是我们开辟的不连续的小的内存块,空白区域是空闲的,如果现在要申请一段三个块大小的连续空间,可以申请出来吗?显然不能。但我们会发现系统剩余的内存明明足够我们需要的空间大小,可开辟太多了不连续的小块空间,导致没有办法开辟出来大块的内存,这就是内存碎片的问题。 STL中的二级空间配置器...原创 2018-05-26 18:05:59 · 843 阅读 · 9 评论 -
Linux---文件描述符fd与FILE结构体
之前在学习C++继承和多态的时候对于三个概念理解的不是很透彻,现在对这三个的概念来总结一下重载 overload重载:简单说就是函数名称相同,但是参数列表不相同的情形,这样的同名不同参数的函数互相称之为重载函数。 重载实际上属于多态的一种,是编译时多态即静态多态 来看看重载的条件相同的范围(成员函数重载)函数名相同参数列表不同在这里解释一下参数列表不同可以是以下...原创 2018-01-31 13:54:19 · 633 阅读 · 0 评论 -
网络-----TCP报头中的选项字段
选自《Linux高性能服务器编程》3.2.2TCP头部的最后一个选项字段(options)是可变长的可选信息。这部分最多包含40字节,因为TCP头部最长是60字节(其中还包含前面讨论的20字节的固定部分)。典型的TCP头部选项结构如图所示。 选项的第一个字段kind说明选项的类型 有的TCP选项没有后面两个字段,仅包含1字节的kind字段第二个字段length(如果有的话)指...原创 2018-05-20 12:07:53 · 11533 阅读 · 2 评论 -
网络-----浅谈TCP的三次握手和四次挥手
TCP三次握手TCP连接建立的过程被称为三次握手,先来看看三次握手的过程,上张图 1、客户端向服务器发出连接请求报文段,这时TCP报文段首部的同步标志位 SYN=1 ,同时选择一个初始序号 seq=x(图中seq=123)。TCP规定,SYN报文段不能携带数据但要消耗掉一个序号。这时客户端进入SYN_SENT状态——第一次握手2、服务器收到连接请求报文段之后若同意建立连接,就向客户...原创 2018-05-20 10:55:13 · 397 阅读 · 0 评论 -
网络-----浅析IP数据报格式及TCP/UDP报文段首部格式
IP数据报的格式先来上张图在解释: 来看看每个字段的具体含义:(只讨论IPV4的情况)1、版本 占4位,指IP协议的版本。通信双方使用IP协议的版本必须一致。例:使用IPV4即填42、首部长度 占4位,顾名思义,这个字段就是标识了IP数据报的首部长度。该字段以4字节为单位,可以表示的最大的数是”1111”,也就是十进制数15,所以IP首部长度最大为60字节(15*4=60)。...原创 2018-05-18 20:52:21 · 5814 阅读 · 2 评论 -
网络------简介OSI及TCP/IP参考模型
OSI七层网络模型称为开放式系统互联参考模型,是计算机网路体系结构发展的产物,它是一个逻辑上的定义和规范,把网络从逻辑上分为了7层.。 来看一张图: 这七层每一层都有相关、相对应的物理设备,比如路由器、交换机等。来从下到上来介绍一下这七层:物理层物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础,物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠...原创 2018-05-06 10:32:49 · 357 阅读 · 0 评论 -
STL-----模拟实现一级空间配置器
众所周知,STL中有六大组件:容器容器适配器仿函数迭代器算法空间配置器在之前的学习中前面五种我们都已经接触过了,但是在学习其他组件的过程中,我们会发现一个东西隐藏在了一切组件的背后,它就是空间配置器以STL的实现角度而言,空间配置器是第一个就需要介绍的组件。因为整个STL的操作对象都存放在容器之内,而容器一定需要配置空间来存放数据的。在我们平时写程序时,需要开辟空间可...原创 2018-05-11 22:30:25 · 351 阅读 · 0 评论 -
C语言-----全局变量、局部变量、静态全局变量、静态局部变量的区别和联系
转自:全局变量、局部变量、静态全局变量、静态局部变量的区别C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。从作用域看:全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然...转载 2018-07-14 23:41:26 · 1550 阅读 · 0 评论 -
C++-----不能声明为虚函数的函数和建议声明为虚函数的函数
不能声明为虚函数的函数1. 普通函数普通函数不是类的成员函数,所以只能被重载而不能被重写,声明为虚函数也没有任何的意义。而且编译器会在编译时绑定函数,但动态多态体现在运行时绑定。2. 静态成员函数首先静态成员函数不属于任何类对象或类实例,它是所以类对象共享的,所以静态函数变为虚函数没有意义。 其次静态函数中没有this指针,而虚函数依靠虚表指针和虚表来调用,虚表指针在类的构造函数...原创 2018-08-03 17:46:47 · 315 阅读 · 0 评论 -
C语言-----模拟实现内存操作函数(memset、memcpy、memmove、memcmp、memchr)
之前实现过一些字符串操作函数,在C标准库中还有一些操作内存的函数1、 memset这个函数是用来设置内存内容的,平时我们可以利用它来初始化一段连续空间。 要注意的是这个函数的后两个参数,第二个参数是int,但是具体使用的时候用的是char类型,第三个参数是你要设置内存的大小,以字节为单位。void* my_memset(void* buf, int value, size_t n...原创 2018-07-30 18:05:41 · 576 阅读 · 0 评论 -
Linux中的内存分配
不同的语言规定的内存分配是不一样的。 “段”是对一个完整的程序而言,也就是从操作系统的角度看 “区”则是对整个内存而言对于一个程序而言:栈:存放局部变量堆:动态开辟的变量,new malloc开辟出的数据段,也就是全局区/静态区 —— 又可以分为已初始化BSS段和未初始化DATA段,注意的是bss段不给该段的数据分配空间,只是记录数据所需空间的大小只读数据区—-存放字...原创 2018-08-21 16:47:43 · 289 阅读 · 0 评论 -
Effective C++读书笔记一(让自己习惯C++)
条款01:视C++为一个语言联邦最初的C++只是C加上一些面型对象特性,就像C++最初的名字“C with Classes”。但是现在C++已经是一个多重泛型编程语言。为了理解C++我们必须认识其主要的次语言1、CC++仍然是以C为基础,区块、语句、预处理器、内置数据类型、数组、指针等通通来自于C2、Object-Oriented C++这部分也就是C with Cla...原创 2018-08-08 23:22:57 · 166 阅读 · 0 评论 -
网络-----TCP的可靠性保证相关机制
在之前,我们已经初步接触了TCP协议TCP是传输层的协议它的主要特点有:TCP是面向连接的(TCP的三次握手和四次挥手)TCP面向字节流TCP带缓冲的(不会立即发送,会等到一个合适的时机再发,因为有可能来不及应答)TCP是全双工的TCP保证了可靠传输TCP具有流量控制今天我们主要谈一下TCP是如何保证可靠性的确认应答机制TCP的确认应答机制就是,发送端给接...原创 2018-08-15 23:43:12 · 1401 阅读 · 0 评论 -
Effective C++读书笔记三(资源管理)
所谓资源就是,一旦你用了它将来必须还给系统。 C++程序中最常使用的资源就是动态分配内存,但内存只是你必须管理的众多资源之一。例如:文件描述符、互斥锁、图形界面中的字型和笔刷、数据库连接及网络socket。不论是哪一种资源,当你不再使用它的时候,必须将它还给系统。条款13:以对象管理资源先来看个例子:class Investment {...}; //继承体系中的root...原创 2018-08-11 09:58:46 · 214 阅读 · 0 评论 -
Effective C++读书笔记四(设计与声明)
条款18:让接口容易被正确使用,不易被误用如果客户企图使用某个接口而却没有获得他所预期的行为,那么这个代码就不该通过编译;如果代码通过了编译,它的所作所为就应该是客户想要的。 要是想开发一个“容易被正确使用,不容易被误用”的接口,首先必须考虑客户有可能做出什么样的错误。来看个例子:class Date{public: Date(int month, int day, in...原创 2018-08-14 15:32:04 · 185 阅读 · 0 评论 -
C++11中值得关注的几大变化(详解)
源文章来自前C++标准委员会的 Danny Kalev 的 The Biggest Changes in C++11 (and Why You Should Care),赖勇浩做了一个中文翻译在这里。所以,我就不翻译了,我在这里仅对文中提到的这些变化“追问为什么要引入这...转载 2018-08-06 10:01:38 · 474 阅读 · 0 评论 -
Effective C++读书笔记二(构造 / 析构 / 赋值运算)
条款05:了解C++默默编写并调用了哪些函数class Empty{};上面这个类是一个 空类,但是经过C++处理之后,它就不再是一个空类了。如果你自己没有生命,编译器就会为它声明一个构造函数、拷贝构造函数、赋值运算符重载和析构函数,所有这些函数都是public而且inline的。其实上面的类就会变成下面这个样子class Empty{public: Empty(){...原创 2018-08-09 23:07:55 · 219 阅读 · 0 评论 -
C/C++动态内存管理
在C语言中,如果我=我们需要动态开辟一块空间,会用到下面这几个函数:malloc:void* malloc(size_t size); malloc函数是在内存中开辟一段连续的空间,开辟的大小为size个字节。开辟成功之后会返回这块空间的首地址calloc:void* calloc(size_t num, size_t size);calloc和malloc...原创 2018-08-05 13:39:51 · 199 阅读 · 0 评论 -
C++----浅析智能指针
背景到目前为止,我们编写的程序中所使用的对象都有着严格定义的生命周期。全局对象在程序启动时分配,在程序结束时销毁。对于局部自动变量,当我们进入其定义所在的程序块时被创建,在离开块的时候销毁。局部static对象在第一次使用前分配,在程序结束时销毁。 除了自动和static对象外,C++还支持动态内存分配。动态分配的对象的生命周期与它们在何处创建是无关的,只有它们被显示释放时,这些对象才会销毁...原创 2018-08-05 12:22:42 · 231 阅读 · 0 评论 -
数据结构------并查集
先来看一道题: 假设一组有n个人和m对好友关系(存于数组r)。如果两个人是直接或者间接好友(好友的好友就是间接好友),则认为他们属于同一个朋友圈,请写出程序求出这个n个人里面一共有多少个朋友圈。 例如:n = 5,m = 3,r = {{1,2},{2,3},{4,5}} 表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一个朋友圈,4、5属于一个朋友圈.。则一共拥有...原创 2018-04-25 20:27:06 · 409 阅读 · 0 评论 -
Linux重要目录、部分命令及权限
(Linux下vim的配置,及g++、gdb的安装:http://blog.csdn.net/qq_34021920/article/details/76376837)一、Linux下根目录的文件1. 根目录”/”Linux下的根目录类似于windos下的“C:\”,位于目录结构的最顶层,它下面的文件包含了操作系统中所有的目录和文件。 如下图所示: 可以发现根目录下主要存在的文...原创 2017-11-17 17:26:35 · 2280 阅读 · 0 评论 -
Linux静态库和动态库
静态库:静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。当然,程序运行的时候将不再需要这种库。 这类库的名字一般是libxxx.a,xxx为库的名字。利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,它的优点就显而易见了,即编译后的执行程序不需...原创 2018-03-24 21:45:15 · 156 阅读 · 0 评论 -
Linux下g++/gdb的简单安装和vim的配置
Linux下g++/gdb的简单安装和vim的配置首先说明,本片博客所讲的g++和gdb的安装以及vim的配置仅在Centos 6.0 版本上进行了测试,所以,不同的版本可能会出现差异!注: g++/gdb的安装方法给出的都是简单命令下载安装;g++的安装: 现在下载的Centos的版本几乎都会自带gcc和vim,所以我们需要的只是g++而已;如果没有请先...转载 2017-07-30 11:53:49 · 1222 阅读 · 0 评论 -
浅析TCP协议中URG和PSH的区别与联系
以上为TCP的段格式,今天来主要看看图中URG和PSH 这两个标志位的区别和联系:URG:(紧急标志位)表示本报文段中发送的数据是否包含紧急数据。URG=1时,表示有紧急数据。后面的16位紧急指针字段只有在URG=1时才有效。PSH:(急迫标志位)在一个交互程序中,当客户发送一个命令给服务器时,它设置PSH标志并停下来等待服务器的响应。通过允许客户应用程序通知其TCP设置PSH标志,客户进程通知T...原创 2017-07-20 22:34:35 · 488 阅读 · 0 评论 -
调研TCP定时器
TCP定时器 TCP是提供可靠的传输层,既然传输数据就必须确认从另一方收到了数据,但是数据和确认在传输过程中都有可能丢失,那么这个时候,TCP协议是使用定时器进行实现的,如果定时器溢出时还没有收到确认,就会重传,关键在于超时和重传策略,怎样决定超时的时间间隔和如何确定重传的频率。 TCP定时器的分类:(1)重传定时器(2)坚持定时器(3)保活定时器(4)时间等待定时器接下来具体看看这四种定时器...原创 2017-07-29 19:15:51 · 293 阅读 · 0 评论 -
端口分类调研
一、什么是端口: 在 Internet上,各主机间通过TCP/TP协议发送和接收数据报,各个数据报根据其目的主机的ip地址来进行互联网络中的路由选择。可见,把数据报顺利的传送到目的主机是没有问题的。问题出在哪里呢?我们知道大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据报传送给众多同 时运行的进程中的哪一个呢?显然这个问题有待解决,端口机制便由此被引入进...原创 2017-07-15 23:28:23 · 276 阅读 · 0 评论 -
Linux中的线程安全和可重入函数
一、线程安全: 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。例如下面这几个函数就被称为线程不安全函数:(1).不保护共享变量的函数(2).保持跨过多个状态调用的函数(3)...原创 2017-06-27 08:47:45 · 328 阅读 · 0 评论 -
共享内存
之前我们已经了解了管道和消息队列:http://blog.csdn.net/qq_34021920/article/details/79596262今天我们再来看一种共享内存共享内存 共享内存顾名思义就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存...原创 2017-06-08 22:25:40 · 814 阅读 · 0 评论 -
线程死锁
一、死锁概念 线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代码块时,便占有了资源,直到它退出该代码块或者调用wait方法,才释放资源,在此期间,其他线程将不能进入该代码块。当线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。 接下来给大家举一个简...原创 2017-06-15 21:24:52 · 399 阅读 · 0 评论 -
解析僵尸进程和孤儿进程
大家都知道Linux中的进程分为多种状态,例如: “R (running)”运行状态、 “S (sleeping)”睡眠状态(浅度睡眠)、 “D (disk sleep)”磁盘睡眠状态、 “T (stopped)”停止进程、 “X (dead)”死亡状态、 “Z (zombie)”僵死状态等等。 僵死状态是一个比较特殊的状态:当进程退出并且父进程(使用wait()系统调用)没有读取到...原创 2017-04-29 15:07:30 · 477 阅读 · 0 评论 -
Linux中的黏滞位
1.粘滞位:(Sticky Bit)粘滞位是一个访问权限标志位,可以用来表示文件和路径。目前只针对目录有效,对于文件已经没有效果了2.黏滞位的作用:粘滞位最常用是应用于路径,当路径被设置粘滞位后,路径下的文件只有owner或root才能重命名或删除文件,如果没有粘滞位,任何用户,不管是不是owner或root,只要有路径写和执行权限,都可以对文件进行删除或者重命名。(粘滞位可以阻止一般用户删除/重...原创 2017-04-03 20:28:56 · 416 阅读 · 0 评论 -
浅析C语言结构体及位段
数据经常以组的形式存在。例如,学校需要了解每位学生的姓名,学号和成绩等。如果这些值储存在一起,访问起来会更加简单。但如果类型不同,就无法存储于同一个数组中。所以在C语言中可以使用结构把不同类型的值存储在一起。 先来看看百度百科对结构体的定义:结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。数组是相同类型的元素的集合,结构也是一些值的集合,这些值称...原创 2017-07-08 23:10:07 · 897 阅读 · 4 评论 -
NAT技术与代理服务器
作为标识TCP/IP网络中每个结点的IP地址,由于它只有32个bit的空间,随着网络的发展,它变得越来越稀有,再加上IP地址地区分配的极端不平衡,已使一些地区比如亚洲部分国家的IP资源很快就会用完,在IPv6还没有普及开来之时,为了解决IP地址的燃眉之急,我们需要一种手段来尽量减少对公网IP的使用,这种手段就是NAT。NAT:(Network Address Transtation)网...原创 2017-07-21 20:11:25 · 579 阅读 · 0 评论 -
ARP脚本及ARP协议
ARP----地址解析协议 地址解析协议:是根据IP地址获取物理地址的一个TCP/IP协议。 主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接受返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一段时间,下次请求时直接查询ARP缓存以节约资源。 地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的...原创 2017-07-23 22:54:27 · 405 阅读 · 0 评论 -
C++-----重载、重写与隐藏
之前在学习C++继承和多态的时候对于三个概念理解的不是很透彻,现在对这三个的概念来总结一下重载 overload重载:简单说就是函数名称相同,但是参数列表不相同的情形,这样的同名不同参数的函数互相称之为重载函数。 重载实际上属于多态的一种,是编译时多态即静态多态 来看看重载的条件相同的范围(成员函数重载)函数名相同参数列表不同在这里解释一下参数列表不同可以是以下几种...原创 2018-05-03 18:11:08 · 212 阅读 · 0 评论 -
基于单链表和基于环形队列的生产者单消费者模型
先来介绍一下生产者消费者模型,举一个常见的例子:生活中,我们会经常去超市买东西,这里涉及到了三个事物:我们、超市、供货商。很容易就可以想到,我们就相当于消费者,而供货商就相当于生产者,那么超市就算是一个交易场所了。对于生产者消费者模型我们可以简单的总结一下叫做 3 2 1原则 3:三种关系2:两个对象1:一个交易场所一个交易场所很容易理解,还有两个对象当然就算生产者和消费...原创 2018-04-09 17:33:01 · 561 阅读 · 0 评论 -
Linux----详解信号
信号的概念信号是进程间通信机制中唯一的异步机制 来看看在Linux中都有哪些信号 kill -l 命令可以查看Linux中的信号列表 我们可以看到每个信号都有一个编号和一个宏定义名称,这些宏定义可以在头文件signal.h中找到。而且可以发现的是没有32、33号信号。1-31号信号叫做普通信号,34-64号信号叫做实时信号。 在这里对这些信号就不做详细的解释了,可以查看man手册...原创 2018-03-31 21:13:23 · 383 阅读 · 0 评论