- 博客(82)
- 收藏
- 关注
原创 关于博客
1.写这篇博客的时候已经是一个大三的学生。2.C、C++、数据结构、算法、操作系统、网络原理、Linux相关,会持续更新。3.用博客来记录自己的学习和生活。已经慢慢体会到了其中乐趣。4.写博客来督促自己学习。5.会尽量将博客写的条理清晰。这是我的学习路线,也希望可以帮助到你。6.最后,学会沉淀。...
2019-09-28 12:04:15 192
原创 【网络原理】应用层
一、域名系统DNS1、域名系统DNS概述1、DNS:互联网使用的命名系统,用来把机器名转换成IP地址。2、域名到IP地址解析过程要点如下:当某一应用程序需要把主机名解析为IP地址时,该应用程序就调用解析程序,把待解析的域名放在DNS请求报文中,以UDP方式发给本地域名服务器,本地域名服务器在查找域名后,把对应的IP地址放在应答报文中返回。应用进程获得IP地址即可进行通信。若本地域名服务器不能回答该请求,则域名服务器再向其他域名服务器发出查询请求,直到查到为止。2、互联网的域名结构1、互联网
2020-05-23 15:49:13 1937 1
原创 【网络原理】运输层
一、运输层协议概述1、进程之间的通信1、运输层的两个重要功能:⑴、运输层第一个重要功能:通过复用和分用技术为应用进程之间提供端到端的逻辑通信。“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送;即:应用进程看见的是用户数据好像在两个运输层实体之间的端到端逻辑通信信道中传输。但事实上这两个运输层之间并没有一条水平方向的物理连接,这样运输层向高层用户屏蔽了下面网络核心部分的通讯细节。复用è指的是发送方不同的进程都可以使用同一个运输层协议传送数据。分用è指接收方的运输层剥去报文首部后能够把这些
2020-05-23 10:39:26 4820
原创 【网络原理】网络层
一、网络层提供的两种服务1、网络层的任务以分组为单位将数据信息从源点传输到目的点。通过路由选择算法,为分组选择合适的路径。2、问题提出:网络层应向传输层提供怎样的服务?面向连接还是无连接?虚电路交换:建立连接、通信、拆除连接;虚电路仅仅表示一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送。互联网实际的设计思路【数据报服务】:网络层向上层只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络层不提供服务质量的承诺。图示如下:表4-1:虚电路服务和数据报服务的对比二、网际协
2020-05-19 19:57:02 1011
原创 【网络原理】数据链路层
一、数据链路层的基础知识:1、数据链路层主要目的将原始的、有差错的物理线路变成无差错的数据链路。2、数据链路层主要功能1.链路管理:数据链路的建立、维护、释放;2.帧同步:接收方应从收到的比特流中正确地判断出一帧的开始与结束位;3.流量控制:控制发送方的数据发送速度,使得接收方来得及接收,以致网络不发生拥塞;4.差错控制:发现传输中出现的错误;5.透明传输:使接收方分辨数据还是控制信息;6.寻址:收发双方应知道对方是谁;3、数据链路层使用的信道1.点对点信道 1vs 12.
2020-05-18 12:02:32 1923
原创 【网络原理】物理层
一、物理层的基本概念1.物理层主要目的:在传输媒体上透明传输比特流;2.物理层主要任务:确定与传输媒体的接口有关的一些特征:1.机械特征:指明接口所用接线器的形状、尺寸、引脚数和排列等等;2.电气特征:指明接口电缆上各条线出现的电压范围;3.功能特征:指明某条线上出现某一电平的电压的意义;4.过程特征:指明对于不同功能的各种可能事件出现顺序;数据在计算机中多采用并行传输,在通信线路上,一般都是串行传输,主要出于经济上考虑;注:物理层不是传输媒体,而是确定传输媒体的接口特性。二、数据通信
2020-05-17 18:38:04 1144
原创 【网络原理】网络概述
1.1、互联网概述1.1.1、互联网概述→Internet1、网络:由若干结点和连接这些结点的链路组成;2、结点:可以是计算机、集线器、交换机、路由器等;3:网络与互联网之间的关系→网络计算机连在一起;互联网将许多网络连在一起注意:internet 和 Internet 的区别internet(互联网或互连网)是一个通用名词,它泛指由多个计算机网络互连而成的网络。Internet(互联网)则是一个专用名词,它指当前全球最大的、开放的、由众多网络相互连接而成的特定计算机网络,它采用 TCP/I
2020-05-17 11:56:07 2386
原创 【数据结构】二叉树(个人补习向)
一.树的概念及其相关1.概念及特点树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;2. 相关定义:节点的度:一个节点含有的子树的个数称为该节点的度;叶子节点:度为0的节点称为叶节点;非叶子节点/分支节点:度不为0的节点;父节点:若一个节...
2020-03-21 16:34:08 147
原创 【数据结构】七大排序算法
一.常见排序算法插入排序1.直接插入排序2.希尔排序选择排序3.选择排序4.堆排序交换排序5.冒泡排序6.快速排序归并排序7.归并排序二.插入排序1.直接插入排序时间复杂度:O(N^2)空间复杂度:O(1)稳定性:稳定算法描述:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。voi...
2020-03-20 15:54:48 241 3
原创 基于LZ77压缩原理实现压缩程序
一.LZ77原理LZ77是基于字节的通用压缩算法,它的原理就是将源文件中的重复字节(即在前文中出现的重复字节)使用(距离,长度)的二元组进行替换。例:mnoabczxyuvwabc123456abczxydefghmnoabczxyuvm(9,3)123456(18,6)defgh二.压缩过程1.将文件中一部分字节先传入自己创建的缓冲区,用于查找重复和压缩。缓冲区分为查找缓冲区...
2020-03-19 16:04:39 1256
原创 【数据结构】哈希表及其模拟实现
一.哈希及其概念通过一定的哈希函数,确定元素的存储位置。搜索效率较高,为O(1)负载因子:存储元素个数/总表格长度 若大于一定值需要扩容二.常见的哈希函数直接定址法:hashfunc(date)=A*date+B;【A,B为常数】除留余数法:hashfunc(date)=date%capacity【capacity为表格容量】平方取中法:将数据平方后取中间三位。折叠法:例 1...
2020-03-15 11:26:28 263 1
原创 【数据结构】C++实现(一)
一.顺序表用数组实现。尾插尾删较容易,头插头删需使用循环平移元素。注意插入元素时判断容量,以及扩容方式。#include<iostream>using namespace std;#define SIZE 10template <class T>class seqlist1 {public: seqlist1() :capacity(SIZE) ...
2020-02-15 22:18:44 191
原创 【Linux】线程池
线程池创建了一大堆线程(等价,无角色之分)+线程安全的队列从程序角度分析,线程池中线程是用来处理线程池队列中的数据1. 思考:为什么使用线程池/使用线程池的场景大量的不同请求涌入服务器的场景第一种情况:只有一个处理业务线程 串行处理,效率低第二种情况:重新开辟新的线程处理时间成本:创建线程+处理业务+销毁线程潜在风险:可能会造成操作系统资源耗尽,造成系统崩溃。创建大量线程,操...
2020-02-15 12:11:56 112
原创 【Linux】线程安全(二)
一.POSIX信号量实现进程/线程间同步与互斥本质:计数器+等待队列+等待+唤醒接口与条件变量对比:多了一个资源计数器
2020-02-14 09:08:22 134
原创 【Linux】线程安全
1.线程安全问题多个线程同时访问临界资源,产生二义性。临界资源:也称共享资源,比如一个对象,对象 中的属性,一个文件,一个数据库等2.解决线程安全问题同步:保证执行流对临界资源的合理访问。(轮询访问)互斥:保证不同执行流对临界资源的原子访问。即每次只能有一个执行流访问临界资源。3.互斥如何实现1.互斥锁互斥锁底层是一个互斥量计数器,只有两个取值。0/10表示资源不可以被...
2020-02-13 17:38:57 1165
原创 【Linux】线程
一.线程(执行流)1.概念线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。2.线程,进程的区别操作系统的最小调度单位:线程操作系统的进程资源分配的基本单位:进程1.构成进程由3部分构成 :进程控制块(pcb), 程序段,数据...
2020-02-13 16:22:53 288
原创 【Linux】进程间通信
一.进程间通信简介1.进程间通信目的数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。2...
2020-02-06 18:25:01 141
原创 【Linux】基础IO
一.系统所提供的IO接口1.open()#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode...
2020-02-06 13:37:25 227
原创 【Linux】进程控制
一.进程创建在linux中利用fork函数创建子进程,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。详悉fork()函数从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。#include <unistd.h>pid_t fork(void);返回值:子进程中返回0父进程返回子进程id出错返回-1fork函数...
2020-02-03 18:08:47 168
原创 【Linux】环境变量相关
一.基本概念环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。二.常见环境变量PATH : ...
2020-02-03 16:25:46 214
原创 【Linux】查看进程以及建立子进程fork()函数
一.系统文件查看进程进程的信息可以通过 /proc 系统文件夹查看如:要获取PID为1的进程信息,你需要查看 /proc/1 这个文件夹。二.通过命令查看进程1.ps命令显示此刻的进程BSD选项ps a #输出与终端相关进程信息ps x #输出与终端无关进程信息ps ax #输出所有进程信息ps aux #以用户导向的格式输出所有进程信息ps axuf #将进程以树形...
2020-02-03 11:04:15 1651
原创 【Linux】进程概念
一.冯诺依曼体系当前计算机主要是基于冯诺依曼体系结构设计的,下面就简单分析一下冯诺依曼体系结构的计算机是如何工作的。主要由五大部件组成1.存储器用来存放数据和程序2.运算器主要运行算数运算和逻辑运算,并将中间结果暂存到运算器中3.控制器主要用来控制和指挥程序和数据的输入运行,以及处理运算结果4.输入设备用来将人们熟悉的信息形式转换为机器能够识别的信息形式,常见的有...
2020-02-01 18:34:26 168
转载 GDB:Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.x86_64
debuginfo-install glibc-2.12-1.132.el6.x86_64问题描述:centos中GDB调试出现如下错误:Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.x86_641修改/etc/yum.repos.d/CentOS-Debuginfo.repo里面的debug...
2020-01-31 14:33:23 378
原创 【Linux】编译器gcc及调试器gdb
一.程序的执行过程1 预处理(进行宏替换)2 编译(生成汇编)3 汇编(生成机器可识别代码)4 连接(生成可执行文件或库文件)二.Linux编译器gcc使用1.格式 :gcc [选项] 要编译的文件 [选项] [目标文件]1.预处理(进行宏替换):gcc -E hello.c -o hello.i2.编译(生成汇编): gcc -S hello.i -o hello.s3....
2020-01-29 16:20:01 549
原创 【Linux】Vim编译器的使用方法
一.如何进入(有点沙雕,我一开始都不知道)直接在linux系统下输入vi 【文件名】指令即可进入。如:vi a.txt二.vim编译器的三种工作模式命令模式(一开始进入的界面即是命令模式)编辑模式(键盘输入i进入编辑模式,esc键由输入模式进入命令模式)底层模式(键盘输入:进入底层模式,esc键由底层模式进入命令模式)三.命令模式此状态下敲击键盘动作会被vim识别为命令,而非输...
2020-01-28 12:44:43 898
原创 【Linux】常见指令总结(三)
一.more指令语法:more [选项][文件]功能:more命令,功能类似 cat常用选项:-n 对输出的所有行编号q 退出moremore b.txt二.less指令less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, ...
2020-01-27 18:26:05 5460
原创 【Linux】常见指令总结(二)
一.cp指令语法:cp [选项] 源文件或目录 目标文件或目录功能: 复制文件或文件夹说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而后的目的地并非一个已存在的目录,则会出现错误信息常用选项:-f 强行复制文件或目录, 不论目的文件或目录是否已经存在-i...
2020-01-27 13:09:18 963 1
原创 【Linux】常见指令总结(一)
一.ls指令语法: ls [选项][目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录像文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件-k 以 k 字节的形式表示文件的大小...
2020-01-27 12:46:02 3463
原创 【Linux】centos7连接xshell所需ip地址查询
1.输入ip查询命名 ip addr 此命令会出现3个条目,centos的ip地址是ens33条目中的inet值。会发现 ens33 没有 inet 这个属性,那么就没法通过IP地址连接虚拟机。2.接着来查看ens33网卡的配置: vi /etc/sysconfig/network-scripts/ifcfg-ens33注意vi后面加空格vi是Linux内置的文本编辑器命令 打开文件...
2020-01-20 18:48:07 1734 1
原创 【C++】强制类型转换
C++为了加强类型转换的可视性,引入了四种强制类型转换操作符:static_cast、reinterpret_cast、const_cast、dynamic_cast最好不使用强制类型转换!!!!!一.static_caststatic_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型进行转换。in...
2020-01-16 20:20:39 1863
原创 【C++】智能指针详解
智能指针:将对内存的管理交付给对象,当对象析构时就能够清理资源,有效的避免内存泄露问题。(因为原生态指针(T*)管理资源时,若用户忘记释放内存,则可能会导致资源泄露。)下面介绍四种智能指针一.auto_ptr智能指针C++98中经历过三种版本更新。C++11中保留第一版auto_ptr,因为有更好的智能指针出现。1.首先介绍智能指针的三大结构1.RAII:利用对象生命周期来控...
2020-01-09 14:16:59 1331
原创 【C++】继承
一.继承的概念及定义1.概念:面向对象程序设计代码复用最重要的手段,在保持原有类(基类)特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,是类设计层次的复用。继承用例class Person{public:protected:string _name = "peter"; // 姓名int _age = 18; // 年龄};/...
2019-12-11 13:45:21 156
原创 【C++】I/O流
一.I/O流的概念“ 流 ” :即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且具有方向性的数据( 其单位可以是bit,byte,packet )的抽象描述。C++流:是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设备(显示器)输出的过程。这种输入输出的过程被形象的比喻为“流”。二.C++I/O流C++定义了I/O标准类库,这些每个类都称...
2019-11-17 21:22:11 521
原创 【C++】模板之模板分离情况
这篇博客讲述模板分离报错原因与解决方法!一.模板分离:即模板的声明写于头文件a.h模板的定义写于源文件a.cpp在main.cpp中使用模板的情况。// a.htemplate<class T> T Add(const T& left, const T& right);// a.cpptemplate<class T> T Add(co...
2019-11-17 12:15:31 316
原创 【C++】模板之模板特化
一.模板特化概念与分类1.模板特化概念使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果。就需要对模板进行特化。即:在原模板类的基础上,针对特殊类型所进行特殊化的实现方式。2.模板特化分类类模板特化函数模板特化二.函数模板特化(只能为全特化)前情提要:一般不使用函数模板特化,直接用一般函数即可。特化步骤:必须要先有一个基础的函数模板...
2019-11-17 11:53:16 564
原创 【c++】模板之(非)类型模板参数
一.模板参数类型模板参数: 出现在模板参数列表中,跟在typename/class后的参数。非类型模板参数:用一个常量作为模板的一个参数。可以将该参数当做常量来使用。二.举例定义一个模板类型的静态数组空间类。template <class T,size_t N>class array1 {public: T& operator[](size_t inde...
2019-11-17 11:18:34 451
原创 【C++】list的模拟实现
1.代码#include<iostream>#include<vector>using namespace std;namespace zz { template<class T>struct Node{ Node(const T& data = T()) :_pNext(nullptr) , _pPre(nullptr) ,...
2019-10-30 17:07:56 340
原创 【C++】list应用
一.list的底层结构带头结点的双向循环链表二.功能应用1 构造函数//构造函数 list<int> l1; //空 list<int> l2(10, 5); //放置10个5 vector<int> v1{ 1,2,3,4,5 }; list<int> l3(v1.begin(), v1.end());//范围构造 /...
2019-10-30 15:00:40 306
原创 【C++】vector迭代器失效
一.迭代器失效原因在STL中vector容器会存在迭代器失效,原因无非以下两种:1.使用容器内函数可能会进行扩容,从而开辟新空间,销毁旧空间,可能会导致迭代器指向非法空间,导致失效。Resize()/reserve()/insert()/assign()/push_back()等方法可能会扩容。2.清空空间导致迭代器失效clear()/resize(0)3.使用erase()进行循环...
2019-10-20 13:09:56 405
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人