- 博客(27)
- 收藏
- 关注
原创 运输层协议
如何优化TCP 协议,来达到好的效果左面主机想和右面主机进行通讯在应用层:进程主体,申请端口,创建套接字(一个四元组),两端的套接字和套接字进程通讯。在运输层:端到端:防火墙在网络层:主机和主机之间的(IP 和 IP 之间)运输层协议概述:TCP :传输控制协议,面向连接,可靠的数据传输协议。UDP :用户报协议,无连接,不可靠的数据传输协议。交付和差错检验是TCP / UDP 最低责任。基本责任,将两个运行在端上的进程之间负责通信。UDP 为什么要进行差错检验?对于可靠还是不可靠,
2021-10-05 23:16:48
1415
原创 应用层协议
网络应用程序的体系结构CS结构 : 客户端服务端 (微信,QQ)P2P结构 : 端到端 (百度网盘,迅雷)CS 体系结构客户端通过网络跟服务器进行交互比如网页服务,发消息:都不是把信息直接给想要发的那个人,而是把信息交给服务器,服务器转发给那个人服务端大多数不是一个机器,而是一个数据中心,组成了一个虚拟的服务器。P2P不需要一个中心存在的服务器,所用用户通过这个服务连接到一起,拓展性很强,密集型强。缺点:对于用户来说,只想享受便利,不想享受服务。比如在百度云盘中的积分政
2021-10-05 00:44:56
915
原创 计算机网络概论
计算机网络概论1OSI 七层数据与其对应协议数据单元tips : 公司面试的时候,会问当输入网址之后,到数据展示之后的所有过程封装应用层发送数据(应用层会产生报文),一次性用send 发送所有的信息,有什么影响在传输层,TCP会对文件切片,而在应用层,我们可以直接给文件切片,会提高效率(根据底层逻辑调整相应代码,会提升代码运行效率)传输层加第一层头部(HtH_tHt)传输到网络层 IP 层 : 告诉去哪 (HnH_nHn)传输到数据链路层 : 本地局域网 : 数据要出去, 到哪
2021-10-04 20:40:09
149
原创 Socket与多线程实践
上节回顾:我们从应用层发数据发送方和接收方在不同的建筑里面,传输层有两个协议:TCP / UDPTCP / UDP 可以看作平行宇宙,互不干扰,接收方和发送方可以用TCP / UDP服务器的每个端口是相互隔离的TCP -> 快递协议1UDP -> 快递协议2SOCKET -> 快递员SOCKET 每次在一个端口,记录信息,读取信息如果想在一个端口同时用TCP / UDP, 那么在这一端口,生成两个SOCKET 快递员,分别为TCP / UDP
2021-10-04 00:44:07
233
原创 多线程编程基础
线程什么是线程pthread : p_thread, 线程是进程的分支。线程本质上是一种轻量级的进程。进程调度的代价太高,并且内存独立,通信很麻烦,为了解决这两个问题,引入了线程。多个线程共享的是同一片进程的空间,所以线程之间的通信,变得简单。进程调度的时间为什么成本高?进程之间调度有时间局部性,CPU建立缓存的过程,可能是为了运行效率的提升,进程刚运行的时候,内存会调度出去,缓存也会被清空,代价大,线程是共享的内存,线程切换不需要置换内存。原先线程建立的信息,另一个线程也是可以用的。接口
2021-10-03 00:52:14
135
原创 进程间通信2
设计一个本机聊天功能利用共享内存#ifndef _CHAT_H#define _CHAT_Hstruct Msg { char name[20]; char msg[1024]; pthread_mutex_t mutex; pthread_cond_t cond;};#endif#include "head.h"#include "chat.h"struct Msg *share_memory = NULL;int main() { i
2021-10-02 22:09:12
62
原创 进程间通信
shm亲缘关系:父亲 + 孩子 / 亲兄弟之间shmget 分配一个系统内存段#include <sys/ipc.h>//ipc,进程间通讯#include <sys/shm.h>int shmget(key_t key, size_t size, int shmflg);返回值与key有关,key相同,返回的只相同,成功返回id将id获取地址:shmatshmatvoid *shmat(int shmid, const void *shmaddr int sh.
2021-10-02 03:39:31
98
原创 高级进程管理
进程调度:进程调度是一个内任务是核子系统进程调度的主要任务是决定哪一个“就绪”状态的进程来执行就绪进程就是非阻塞进程阻塞进程就是正在睡眠的进程,需要内核唤醒的进程进程的三态模型协同式和抢占式协同:进程会一直运行知道它自己结束操作系统不做干预抢占:调度器决定进程合适结束并执行另一个进程,这叫做抢占进程被抢占前运行的时间称为该进程的时间片调度器给每个进程分配一个处理器时间片时间片:时间片的长短会对于系统的全局行为和性能来说是至关重要的时间片过长:-> 提升系统通吐率和
2021-10-01 01:32:20
113
原创 多进程 基础
多进程:什么是进程进程是程序在内存中的镜像镜像:imag,把程序放在进程中就是进程进程是正在运行的程序进程是程序跑起来,调用在内存中,他在进程中构成的对象实例化,叫做进程1. 什么是程序 (应用):程序的集合,编译好的,可执行的二进制文件(Linux中为普通文件,不过有x权限)2. 什么是线程进程接口有哪些1. fork():创建一个子进程negpid_t fork(void);//pid :process id,返回子进程呢个的id父进程会拷贝自己一份,然后生成一份孩子进程父亲和
2021-09-30 22:10:26
133
原创 网络编程基础
我们在网络层编程选择运输层协议(TCP/UDP) 或对TCP 和 UDP进行一些修改SOCKET是进程和运输层之间的接口,进程要发送网络数据,必须经过socket,然后在运输层交付某进程交付运输层协议数据 -> 套接字TCP协议类似于物流部,通过不同的交通方式到达目的地TCP:传输控制协议,面向连接,可靠的数据传输协议UDP:用户数据报协议无连接,不可靠的数据传输协议TCP/UDP 从一个地方到另一个地方,都依附底层的交通支持:IPIP : 尽力而为的交付服务(会因为一些不可抗力,导致
2021-08-31 19:30:46
103
原创 文件与IO
文件与IOcat cp mv 之类的命令都需要读取文件的内容读文件:打开文件:openint open(const char *pathname, int flags);//打开文件用什么样的方式,返回文件描述符文件描述符:0:标准输入 1:标准输出 2:标准错误输出如果flag 包含 O_CREAT 并且文件不存在,会自动创建一个文件文件描述符永远返回最小未被使用的文件编号(用来看打开的文件数)默认情况下,会设置一个O_CLOEXEC选项(flag),并且有一个offset(文件
2021-04-21 00:18:10
122
1
原创 类和对象
类和对象类和对象:类型与变量类型 = 类型数据 + 类型操作class People {public: void say(string world); void run(Location &loc);//成员操作private: string __name; Day __birthday; double __height; double __weight; //成员属性};访问权限:所用的属性和方法对外的访问权限public: 公共访问权限 :
2021-03-04 03:57:09
188
原创 从C到C++
课程标准为C++1103 到 11变化特大, 14 - 17变化小,20版本刚推行使用特别有限C++是C的超集 C++继承了C的绝大部分语法特性(摒弃了糟粕) C++继承了C语言的29个标准头文件(在做工程开发:标准头文件 +非标准头文件混合编程) C++头文件130个 (总共的头文件数量)异常处理(C++11) 类和对象 STL 模板 Lambda(C++11)STL由惠普实验室中的大佬们开发的工具,后来C++标准委员会纳入了C++的标准中,形成C++工具集STL类
2021-03-03 20:08:31
190
原创 Ubuntu 下的 Java 环境配置
Ubuntu 下的 Java 环境配置以云主机为例在官网下载jdkhttps://www.oracle.com/java/technologies/javase-downloads.html然后点击接受点下载,会有一个登录界面,有账号的直接登录,没有的注册后登录tips:密码的首字母需要大写下载完成后,可以通过软件,或者scp 指令,将下载好的压缩文件包传到云主机上scp jdk-8u281-linux-x64.tar.gz root@www.runoob.com:地址这里我
2021-02-26 02:30:25
631
1
原创 AC自动机——解决多模匹配问题
AC自动机什么是多模匹配问题?有多个模式串的匹配问题,就是多模匹配问题处理方法多个模式串,建立成一棵字典树和文本串的每一位对齐匹配,模拟暴力匹配算法的过程常规多模匹配从文本串中的每一次在字典树中看是否有可以匹配的当匹配成功文本串中的she时,也就意味着后续一定会匹配成功he she对应了字典树中的节点P,he对应了字典树中的节点QP和Q就是等价匹配节点,如果从P引出一条边指向Q,就可以加速匹配过程 在P下面查找节点的操作,等价于在Q下面查找节点的操作这条等价关系边,通常在A
2021-02-23 03:02:32
977
原创 字符串匹配之字典树与双数组字典树
字典树:姓名:Trie曾用名:字典树 ;单词查找树作用:单词查找 ;字符串排序根节点:整本字典根节点的子节点:按照前后顺序,分别存储a.b.c.d…当该字母在本树中,没有引申出来的单词,也可能不存在该字母子节点分红白两色红色:可以与根节点独立成词白色:不可与根节点独立成词也就是红色节点的数量就是单词的数量字典树如何做字符串排序?答:将字符串插入到字典树中,然后进行深度优先遍历,得到的字符串就是排好序的时间复杂度为O(n)正式字典树插入写法#include <std
2021-02-22 03:08:10
391
原创 字符串匹配算法——暴力 + KMP +SUNDAY + 哈希 + SHIFT_AND
单模匹配暴力匹配只有一个模式串机型匹配模式串:待查找的字符串依次性对齐,模式串的第一位和母串的每一位开始匹配,直到发现母串中的一部分跟模式串匹配单模匹配问题,顾名思义,只有一个模式串依次对齐模式串和文本串的每一位,直到匹配成功关键:不重不漏的找到答案int brute_force(const char *s, const char *t) { for (int i = 0; s[i]; i++) { int flag = 1; for (int j
2021-01-30 02:17:11
307
原创 树状数组
树状数组一、前缀和数组原数组:a1,a2,a3,......,ana_1, a_2, a_3, ......,a_na1,a2,a3,......,an前缀和:s[i]=∑k=1k=iak,ai=Si−Si−1s[i] = \sum_{k =1 }^{k = i}a_k, a_i = S_i - S_{i - 1}s[i]=∑k=1k=iak,ai=Si−Si−1差分数组:X=ai−ai−1X = a_i - a_{i - 1}X=ai−ai−1X数组是a数组的差分数组,a
2021-01-28 21:51:44
122
原创 单调队列与单调栈
热身一、数据结构操作分析:插入操作:可以用一个栈模拟,一直往栈顶放元素删除操作:就是正常的弹栈操作左移操作:弹栈操作,可弹出的元素需要保留,可以放到第二个栈里面右移操作:讲第二个栈顶元素,移动到第一个栈里面询问操作:维护一个数组F,每次元素更新,都需要维护数组F问题分析:关键就是新造一个数据结构,结构定义 + 结构操作模拟光标的功能,做移动,右移动,插入,删除,用对顶栈来模拟实现对顶栈,用数组模拟,或者用链表模拟题目中的BUG:Query K中 K 可能大于当前位置#incl
2021-01-26 03:23:30
212
原创 动态规划(二)——刷题 + 优化
练习题一:切割回文给出一个字符串S,问对字符串S最少切几刀,使得分成的每一部分都是一个回文串(注意:单一字符是回文串)状态定义:dp(i):dp(i) :dp(i): 以i位置为结尾,经过最少的切割,可以出现多少回文串?状态转移:dp[i]=min(dp[j])+1∥s[j+1]−>s[i]为回文dp[i] = \min (dp[j]) + 1 \| s[j + 1] -> s[i] 为回文dp[i]=min(dp[j])+1∥s[j+1]−>s[i]为回文根据状态转
2021-01-25 03:22:35
298
1
原创 动态规划(一)
一、从递推到动规(一)引:编写程序:如果有一对小兔,每一个月都剩下一对小兔,而所生下的每一对小兔在出生后的第三个月都生下一对小兔。那么,由一对兔子开始,满一年时一共可以繁殖成多少对兔子?得到了递推方程f(n)=f(n−1)+f(n−2)f(n) = f(n - 1) + f(n - 2)f(n)=f(n−1)+f(n−2)推算:第一个月 -> 一个兔子第二个月 -> 两只兔子(第一个月生的)第三个月 -> 三只兔子 (二月的两只兔子 + 一月成熟兔子生的兔子)第四个
2021-01-22 00:22:22
187
原创 线段树
线段树线段树:解决区间的修改以及查询,用来维护一维序列的一种高级数据结构支持的操作:奇性函数的区间修改与查询修改:Modify(值,位置) 查询:Query(区间的起始点,区间的终止点)线段树中的关键词:完全二叉树:线段树程序实现时候的实际存储结构区 间: 线段树中每个节点所维护的范围向 上 更 新:用两个子节点的信息更新本节点的信息下 沉 标 记:将本节点的懒惰标记更新给两个子节点口 诀:下沉发生在递归之前,向上发生在递归之后一、问题
2021-01-20 04:13:21
170
原创 霍夫曼树与霍夫曼编码
霍夫曼树以及哈夫曼编码一、什么是哈夫曼树与哈夫曼编码编码是什么答:在ASCII 编码中‘a’ = 97 = (01100001)2(01100001)_2(01100001)2‘0’ = 48 = (00110000)2(00110000)_2(00110000)2注意:任何信息,在计算机中,都是二进制存储的ASCII编码规则下的信息:“aa00” = 0110 0001、01100001、00110000、00110000信息的价值在于流通,从一台计算机 传输到 另外一台计算机
2021-01-18 22:29:20
932
原创 手撕红黑树
从0到1手撕红黑树红黑树:一种自平衡的二叉查找树一、性质 (平衡条件) (很重要)节点非黑即红根节点是黑色叶子节点(NIL)是黑色红色节点连接的两个子节点均为黑色 -> (红色节点与红色节点不可以相连)从根节点到所有叶子节点的路径上,黑色节点的数量相同小推论:性质4+性质5 => 最长边节点数量:最短边节点数量 = 2 :1某种程度上来说,红黑树也是靠控制树高来控制平衡的节点定义typedef struct Node { int key; int co
2021-01-15 02:16:17
569
原创 菜鸡提升日记——递归枚举
枚举题目来自acwing1.递归实现指数型枚举1.保证答案中升序,需要保证备选数组中数字为升序,题目为自然数1-n不用考虑排序,但是需要一个start来确定每次放入答案数组中的数字从多少开始。2.输出每一种方案,需要设立0-n个边界值(n为空集)#include<bits/stdc++.h>using namespace std;int ans[20];int vis[20];int n;void dfs(int pos,int start,int cur)//star
2020-09-06 02:34:08
167
原创 离散数学——真值表判断
离散数学_真值表判断算法小白代码比较冗长主要使用了栈和一个二进制转换对于题目来说,需要解决的地方应该是括号的优先级大佬都晓得,栈是解决优先级的好办法所以二话不说,上代码(C++写的)```cpp#include<cstdio>#include<iostream>#include<cstring>#include<string&g...
2020-04-13 23:25:59
3698
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人