自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

_Y__X_的博客

Fighting!

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

原创 C++数据结构——哈希表

文章目录1.unordered_map/unordered_set2. 底层结构2.1哈希概念2.2哈希函数2.3常见哈希函数2.4 哈希冲突3.闭散列(开放定址法)3.1线性探测3.2闭散列扩容-载荷因子3.3二次探测4.开散列4.1开散列增容1.unordered_map/unordered_setunordered_map是存储<key, value>键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。在unordered_map中,键值通常用于惟一地标识元素,

2021-06-13 17:58:09 1839 1

原创 带你了解面试高频TCP协议——详解

文章目录1.TCP协议TCP报头32位序号和32位确认序号2. 确认应答机制2. 超时重传机制3.连接管理机制3.1 为什么要3次握手?3.2TCP的三次握手是否都可以携带数据?3.2 为什么要四次挥手?4.滑动窗口5.流量控制6.拥塞控制1.TCP协议TCP的全称是Transmission Control Protocol,传输控制协议,是一种面向连接的协议;它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据往来格式以及传送方式。TCP报头16位源端口号:发送端的端口号

2021-06-09 13:25:04 1181 20

原创 红黑树特性和实现详解——C++进阶数据结构

1.红黑树的概念红黑树是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。2.红黑树的性质每个结点不是红色就是黑色根结点是黑色的如果一个结点是红色的,则它的两个孩子结点是黑色的对于每个结点,每条路径上都有相同数量的黑结点每个叶子结点都是黑色的(此处的叶子结点指的是空结点,上图的NIL结点)思考:为什么满足上面的性质,红黑树就能保证:

2021-06-05 18:17:34 1947 24

转载 【网络协议】_UDP详谈

文章目录1. UDP简介2.UDP特点3.UDP首部格式4. UDP伪首部5. UDP面向数据报6. UDP的缓冲区7. 基于UDP的应用层协议1. UDP简介Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。TCP 协议在进行数据传输时,需要建立连接,并且每次传输的数据都需要进行确认。当不再进行传输数据时,还需要断开连接。这样做虽然安全,

2021-06-05 01:01:22 1345 1

原创 应用层——HTTP、HTTPS协议详解

HTTP协议HTTP 全称 HyperText Transfer Protocol超文本传输协议,超文本即超越普通文本的文本,即音视频、图片、文件的混合体。URLURL(Uniform Resourse Locator)统一资源定位符1.协议方案名:通信双方指定的协议名2.主机名和密码:对用户进行认证3.域名:服务器的主机名或IP地址4.端口:服务段侦听的端口,省略时使用默认端口HTPP使用80端口,HTTPS使用443端口5.资源路径:资源在主机上的存放路径,"/"是服务器定义的逻辑上的

2021-06-02 16:40:53 998 15

原创 AVLTree(二叉平衡树)底层实现

文章目录1. AVL树的概念1.1 AVL树节点的定义1.2 AVL树的插入1.3AVL树的旋转处理1.3.1右单旋1.3.2左单旋1.3.3 左右双旋1.3.4 右左双旋1.4完整代码实现及验证1. AVL树的概念如果二叉搜索树的插入序列是有序的或者是接近有序,那么二叉搜索树就会退化为单支树(类似单链表),查找元素相当于在顺序表中搜索元素,时间复杂度为O(N)。AVLtree(Adelson Velskii Landis tree)是一个加上额外平衡条件的二叉搜索树,左右子树高度之差(简称平衡因子)

2021-05-31 17:23:00 495 1

原创 set和map

1. 键值对**用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。**比如一个英汉互译的字典,每个英文单词都对应着一个翻译val。SGI-STL中关于键值对的定义:template <class T1, class T2>struct pair{typedef T1 first_type;typedef T2 second_type;T1 first;T2 second;pair(): fi

2021-05-28 12:55:25 821 3

原创 协议(初识HTTP协议)

1协议1.1结构化数据协议是一种 “约定”. socket api的接口, 在读写数据时, 都是按 “字符串” 的方式来发送接收的. 如果我们要传输一些"结构化的数据" 怎么办呢?结构化的数据:比如发送微信消息,消息的组合由时间,发送人等信息序列化:发送信息的时候、需要将信息多变一反序列化:接收信息、将信息一变多2网络版计算器例如, 我们需要实现一个服务器版的加法器. 我们需要客户端把要计算的两个加数发过去, 然后由服务器进行计算, 最后再把结果返回给客户端。约定方案:定义结构体来表示我

2021-05-25 15:36:42 727 4

原创 TCP协议通讯流程

TCP协议通讯流程建立连接的过程:- 调用socket,创建文件描述符- 调用connect,**向服务器发送连接请求**- connect会发出**SYN数据报**并阻塞等待服务器的应答(第一次)- 服务器收到客户端的SYN会应答一个SYN-ACK段表示"同意建立连接"(第二次)- 客户端收到SYN-ACK后会从 connect返回,同时应答一个ACK段(第三次)这个建立连接的过程就称为三次握手。

2021-05-24 20:47:26 282 2

原创 Linux——网络基础socket套接字(协议、协议模型、IP、Port、网络字节序)

协议协议是指通信双方约定使用同一种解析信息的手段来进行有效的沟通协议分层模型OSI参考模型(自下而上):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层TCP/IP五层(或四层)模型TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。物理层:负责光/电信号的传递方式. 物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.数据链路层

2021-05-23 18:26:22 413 3

原创 C++____二叉搜索树

1. 二叉搜索树概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树int a [] = {5,3,4,1,7,8,2,6,0,9};template <class K>struct BSTreeNode{ K _key; BSTreeNode<K>* _left; BSTreeNode

2021-05-23 15:45:25 205 1

原创 二叉树的前中后序非递归法

题目集合:144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历前序遍历:思路:前序非递归遍历需要借助栈如果树为空,直接返回如果树非空:从根节点位置开始遍历,因为前序遍历规则:根节点、左子树、右子树a. 沿着根节点一直往左走,将所经过路径中的节点依次入栈,并访问。b. 取栈顶元素,该元素取到后,其左子树要么为空,要么已经遍历,可以直接遍历该节点,对于该节点,其左子树已经遍历,该节点也已经遍历,剩余其右子树没有遍历,将其左子树当成一棵新的树开始遍历,继续a/**

2021-05-17 21:28:56 161 6

原创 C++__多态

1. 多态的概念2. 多态的定义及实现2.1多态的构成条件2.2 虚函数2.3虚函数的重写2.4 虚函数重写的两个例外2.5 C++11 override 和 final2.6 重载、覆盖(重写)、隐藏(重定义)的对比3. 抽象类3.1 接口继承和实现继承4.多态的原理4.1虚函数表4.2 动态绑定与静态绑定

2021-05-10 10:59:27 566 11

原创 C++___继承

1. 继承的概念2. 继承的定义格式2.1 继承关系和访问限定符3.基类和派生类对象赋值转换4.继承中的作用域5. 派生类的默认成员函数6.继承与友元7. 继承与静态成员8.复杂的菱形继承及菱形虚拟继承(重点)9.继承的总结和反思10. 常见继承题

2021-05-01 18:12:05 548 6

原创 Linux__线程池及设计模式(单例模式)

文章目录线程池 :单例模式饿汉模式懒汉模式--延时加载线程池 :线程池=线程安全队列+一大堆的线程(执行任务的线程)线程池示例:创建固定数量线程池,循环从任务队列中获取任务对象,获取到任务对象后,执行任务对象中的任务接口代码示例:#pragma once #include <unistd.h>#include <math.h>#include <pthread.h>#include <iostream>#include <q

2021-04-30 15:00:28 338 2

原创 Linux__生产者消费者模型

1.生产者与消费者模型1.1基于阻塞队列的生产者与消费者模型321原则:3: 三种关系,生产者VS生产者(互斥),生产者VS消费者(同步),消费者VS消费者(互斥)2: 两种角色,生产者和消费者1: 一个交易场所(这里就是一个线程安全的BlockQueue队列)优点可以解耦合:生产者和消费者都是通过队列进行交互。支持忙闲不均:队列起到了缓冲的作用。支持并发:生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取。实现用STL中的

2021-04-24 19:58:07 178 5

原创 Linux___线程互斥与同步

文章目录1. 线程互斥1.1 进程线程间与互斥相关的背景知识1.2互斥量mutex1.3互斥量的接口1.4互斥量实现原理1. 线程互斥1.1 进程线程间与互斥相关的背景知识临界资源:被多个执行流同时访问的共享资源就叫做临界资源。临界区:每个线程内部,访问临界资源的代码,就叫做临界区。原子性:不会被任何调度机制打断的操作,该操作只有两态,要么别做,要么做完。互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用。1.2互斥量mutex大部分情况,线程

2021-04-22 22:57:11 798 3

原创 C++___stack&&queue&&priority_queue

文章目录1. stack的介绍和使用2. queue的介绍和使用3. priority_queue的介绍和使用3.1模拟实现priority_queue4.仿函数1. stack的介绍和使用2. queue的介绍和使用3. priority_queue的介绍和使用优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成大堆的结构。传入less是大堆,传入greater是小堆,和我们常识是相反的。3.1模拟实现priority_q

2021-04-21 14:54:11 411 3

原创 Linux___线程概念及线程控制

1.线程概念1.1什么是线程1.2线程的优缺点1.3线程的异常2.Linux中进程VS线程3.线程控制3.1POSIX线程库3.2创建线程3.3什么是LWP3.4线程ID及进程地址空间3.5 线程终止3.6 线程等待3.7 分离线程

2021-04-17 19:57:15 383

原创 Linux__进程信号

1.信号的引入2.信号概念3.信号列表4.信号的生命周期4.1信号处理常见方式概览5.信号的产生5.1通过终端按键产生信号(键盘组合键)5.2调用系统函数向进程发信号5.3由软件条件产生的信号5.4 硬件异常产生信号6.阻塞信号6.1信号其他相关常见概念6.2信号在内核中的表示示意图6.3 sigset_t6.4 信号集操作函数6.5 sigprocmask函数6.6 sigpending函数6.7用上述函数写一个获取信号小程序:**7.信号的捕捉7.1内核如何实现信号

2021-04-13 15:06:51 990

原创 C++——list的使用及模拟实现

文章目录1.list1.1list的构造1.2list的iterator使用1.3list的增删查改2.list的模拟实现1.listlist的优点:list头部、中间插入不再需要挪动数据,O(1)效率高list插入数据是新增节点,不需要增容list的缺点:不支持随机访问,访问某个元素效率O(N)底层节点动态开辟,小节点容易造成内存碎片,空间利用率低,缓存利用率低1.1list的构造list()构造空的listlist(size_type n,const val

2021-04-12 16:23:44 356

原创 共享内存

1.共享内存2.共享内存操作过程3.共享内存函数4.共享内存资源查看和删除5.实现内存共享程序6.总结

2021-04-10 16:15:15 1949 1

原创 进程间通信(匿名管道和命名管道)

1.进程间通信目的2.进程间通信分类3. 管道4.匿名管道4.1用fork来共享管道原理4.2管道创建过程4.3站在文件描述符角度-深度理解管道4.3.1如果写端,不关闭文件描述符,且长时间不写入,那么读端可能(管道内有历史数据就会先读取完)长时间阻塞4.3.2当我们在实际写入时,如果写入条件不满足(包括缓冲区写完),那么写入端就要被阻塞。4.3.3如果写入端关闭文件描述符,读取端就会读取到文件末尾,read返回0值4.3.4如果读取端关闭,写入端进程被OS直接杀掉(OS系统统筹管理资源

2021-04-09 17:16:22 921 1

原创 C++___vector的模拟实现

1.vector深度剖析及模拟实现1.1 std::vector的核心框架接口的模拟实现myVector::vector1.2 使用memcpy拷贝问题

2021-04-07 15:27:24 915 1

原创 C++___vertor

1. vertor的介绍2. vector的使用2.1vertor的定义2.2 vector的遍历2.3 vector的容量2.4 增删查改3.vector 迭代器失效问题

2021-04-05 16:30:56 2089 2

原创 Leetcode___只出现一次的数字Ⅰ和Ⅱ

解题思路:由于题目已告知数组是整数数组且是非空的,只有某个元素只出现一次,其它元素均出现两次。我们自然而然地会相到位运算中的“异或”,两个相同的数字异或的结果为 0,由于数组中其它元素均出现两次,只有一个元素出现一次,所以可以遍历整个数组,让所有数组元素异或,得到的结果就是只出现一次的那个元素。说明:a ^ a = 0; 0 ^ a = a代码示例:class Solution {public: int singleNumber(vector<int>& nums.

2021-04-03 19:12:07 162

原创 260. 只出现一次的数字 III

题目:给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。方法一:分组异或先对所有数字进行一次异或,得到两个出现一次的数字的异或值。在异或结果中找到任意为 1 的位。根据这一位对所有的数字进行分组。在每个组内进行异或操作,得到两个数字。class Solution {public: vector<int> singleNumber(vector<int>&

2021-04-02 14:12:17 136

原创 Linux——系统文件I/O

基础IO1.C文件接口及标准输入、输出和错误2.系统调用IO3.文件描述符4.dup2系统接口重定向什么是重定向?缓冲区dup2系统接口5.文件系统6.软/硬链接

2021-04-01 22:33:38 321

原创 C++__string类的使用

文章目录String类string常见接口1.1 string类对象的常见构造1.2 string类对象的容量操作1.3 访问遍历1.4 修改操作String类string在底层实际是:basic_string模板类的别名,typedef basic_string<char> string;在使用string类时,必须包含#include头文件以及using namespace std;string常见接口1.1 string类对象的常见构造1.string(): 构造空的s

2021-03-30 12:18:03 221 1

原创 模拟实现miniShell

模拟实现shell什么是shellshell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接受用户输入的命令并把它送入内核去执行。实际上shell就是一个命令解释器,它解释有用户输入的命令并且把它们送到内核。不仅如此,shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。shell变成语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。实现shell,需要做到以下四点:接收

2021-03-26 15:51:00 947 1

原创 Linux__进程控制

1.进程创建1.1fork函数初识1.2fork函数返回值1.3 写时拷贝1.3 fork的常规用法2.进程终止2.1 进程退出的情况2.2 进程常见退出方法3.进程等待3.1进程等待的必要性3.2进程等待wait方法3.3 waitpid方法3.4 获取子进程status4.进程程序替换4.1替换原理4.2 替换函数4.3 函数解释4.4 命名理解4.5示例

2021-03-16 22:52:54 489 3

原创 剑指 Offer 28. 对称的二叉树

对称的二叉树请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */boo

2021-03-15 21:42:08 89

原创 Linux__进程地址空间

文章目录1.什么是进程地址空间2.为什么要有地址空间?3.地址空间是怎么工作的?1.什么是进程地址空间下图就是进程地址空间概念图。进程并不是一直占用所有的地址空间资源,地址空间是进程的活动范围 。进程地址空间是虚拟地址空间,不是物理地址空间,在语言上打印出来的地址叫做虚拟地址,地址空间是对物理内存的一种虚拟化表示。虚拟空间最终以某种方法转化到物理内存上。(OS负责将虚拟地址转化为物理地址)说明:上面的图就足矣说名问题,同一个变量,地址相同,其实是虚拟地址相同,内容不同其实是被映射到了不

2021-03-13 20:52:16 194 1

原创 C++——(函数模板,类模板)

1.泛型编程2.函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则3.类模板3.1 类模板的定义格式3.2 类模板的实例化

2021-03-12 22:15:19 229 1

原创 C++——内存管理(new/delete和malloc/free的区别)

1.c++内存分布2.new和delete的用法2.1new/delete操作内置类型2.2new和delete操作自定义类型2.3operator new与operator delete函数3.面试题:new和delete的区别

2021-03-12 16:21:43 518 1

原创 类和对象——(初始化列表,explicit关键字,static成员,友元)

1.初始化列表2.explicit关键字3.static成员概念:4.友元4.1友元函数4.2友元类

2021-03-10 12:53:07 1821 13

原创 Linux进程(fork函数,僵尸进程,孤儿进程)

Linux进程1.通过系统调用创建进程fork初识1.1如何理解进程创建?1.2 fork为什么有俩个返回值?如何深刻的理解?2.进程状态2.1 进程状态的查看2.2 R运行状态(running)2.3 S休眠状态(浅度休眠状态)2.4 T停止状态(stopped)3. 僵尸进程3.1 为什么要有僵尸状态?3.2 僵尸进程的危害4.孤儿进程1.通过系统调用创建进程fork初识使用man fork可以看到fork的功能(创建一个子进程)在fork()函数之前需要调用关于printf的进程,在fork

2021-03-01 18:01:00 614

原创 C语言isalpha函数介绍

isalpha()语法:头文件:#include <ctype.h>函数声明:int isalpha(int c);功能:如果参数是字母字符,函数返回非零值,否则返回零值。代码演示:#include <stdio.h>#include <ctype.h>int main(){ printf("isalpha('A')=%d\n",isalpha('A'));

2021-02-14 19:44:41 1638

原创 C++——类和对象(中)

文章目录1.类的6个默认成员函数2.构造函数3.析构函数4.拷贝构造函数5.运算符重载5.1 运算符重载5.2赋值运算符重载6.const成员1.类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。默认成员函数就是,我们不写编译器会自动生成一份,我们写了就用我们写的。2.构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值

2021-02-07 13:52:07 510

原创 Linux——进程概念

1.冯诺依曼体系结构我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。输入设备:键盘,网卡,鼠标,摄像头,麦克风,硬盘…输出设备:显示器,声卡,喇叭,网卡,硬盘…输入输出设备(外围设备)内存:掉电易失性存储介质1.越靠近 CPU 速度越快,容量越小,价格越贵。2.每一种存储器设备只和它相邻的存储设备打交道在认识层面上,可以认为内存整体是外设和cpu的"缓存",程序运行时内存对数据进行了预加载,把程序缓存起来了。关于冯诺依曼,必须强调几点:1

2021-02-05 16:35:34 525

空空如也

空空如也

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

TA关注的人

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