【00】408笔记

2024-09-08 01:52
文章标签 笔记 408 00

本文主要是介绍【00】408笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

请添加图片描述
上图参考文章
RIP 最大的跳数为15
为主机配置地址:DHCP
ICMP报文传输方式:放在IP数据报的数据字段中传送
CIDR技术的作用:是网络归并技术,把小的网络汇聚成大的超网,进而缓解了地址资源不足的问题

IP首部字段,与分片和重组有关的是:片偏移,标志,标识
在这里插入图片描述
普通IP首部长为20个字节,最长60字节

  • 16位总长度(Total Length): 标识IP数据报包的总长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。由于该字段长16bit,所以IP数据包最长可达2^16 -1 = 65535字节,当数据包被分片时,该字段的值也随着变化。
  • 16位标识(Identification): 用于标识IP数据报的唯一码,如果因为数据链路层帧数据段长度限制(也就是MTU,支持的最大传输单元为1500字节),一个过长的IP数据包需要被拆散进行分片发送,拆分出的每个分片的IP数据包标识都是一致的,当分片要进行重组的时候就是依据了这个标识。
  • 3位标志(Flag): 目前只有两种,即只有后2位有意义;最低位为MF(More Fragment),为1代表后面还有分片的数据包,MF=0代表当前数据包已是最后的数据包。第二位为DF(Don’t Fragment),DF=1代表不能分片,此时若这个包长度大于路由器的长度限制,则直接丢弃了,DF=0代表可以分片。
  • 13位片偏移(Fragment Offset): 代表某个分片在原始IP数据包中的相对位置。通过这个偏移量和16位标识将多个分片数据包进行还原成原IP数据包。
  • 8位协议(Protocol): 代表上层的传输协议类型,一般常见的1代表ICMP,6代表TCP,17代表UDP。

参考文章

  • 单播
  • 多播
  • 广播
    • 主机之间的一对多的通信
    • 所有的主机都可以接收到广播消息(不管你是否需要)
    • 广播禁止穿过路由器(只能做局域网通信)
    • 只有UDP可以广播
    • 广播地址 有效网络号+全是1的主机号
    • 192.168.50.123 -----》 192.168.50.255
    • 255.255.255.255 给所有的网段中的所有主机发送广播,也是只能做局域网通信
    • 需要相同端口

转发分组过程中源mac和目的mac会变,考虑NAT涉及私有地址转换,源地址和目的地址改变。

spooling 设备与输入输出井之间数据传输是由系统实现的
spooling技术实现了将独占设备改造成共享设备的技术
一个管道可以实现双向的数据传输,同一个时刻最多有一个方向的传输,不能两个方向同时进行。

管道单独构成一种文件系统,并且只存在于内存中。类似于半双工信道的进程通信机制。

4个fork 之后有 2 4 = 16 2^4=16 24=16个进程,派生出 16 − 1 = 15 16-1=15 161=15个进程。

实时系统为了满足用户实时交互以及对重要时间的迅速反应,所以采取抢占式的优先数高者优先。

基于关键字之间比较的算法,无论用什么方法都至少需要进行log_2n!次比较
基于比较方法的n个数据的内部排序,最坏情况下时间复杂度能达到的最好下界是: O ( n l o g 2 n ) O(nlog_2n) O(nlog2n)

堆排序辅助空间 O ( 1 ) O(1) O(1),快速排序 O ( l o g n ) O(log_n) O(logn),归并为 O ( n ) O(n) O(n)

时间复杂度题目本质就是代码执行次数

时间局部性:一条【指令】执行之后可能会被再次执行。
空间局部性:内存相邻的【数据】可能会被再次执行,所以存在cache中

链表

typedef int ElemType;
typedef struct LNode{ElemType data;struct LNode *next;
}LNode,*LinkList;

头插法

带头节点

在这里插入图片描述

LinkList HeadInsert(LinkList& L,int n){LNode *s;int x=1;L = (LinkList)malloc(sizeof(LNode));//创建头结点L->next = NULL;//初始化为空链表while(x!=n){s = (LNode*)malloc(sizeof(LNode));//创建新结点s->data = x;s->next = L->next;//核心代码;L->next = s;//核心代码;x++;}return L;
}

不带头节点

在这里插入图片描述

LinkList HeadInster(LinkList &L,int n){LNode *s;int x=1;L= (LinkList)malloc(sizeof(LNode));L->data=x++;L->next=NULL;while(x!=n){s=(LNode*) malloc(sizeof(LNode));s->data=x;s->next=L;L=s;x++;}return L;
}

上面图片和代码参考
仔仔木

尾插法

在这里插入图片描述

带头节点的尾插法

LinkList TailInster(LinkList&L,int n){int x = 1;L = (LinkList)malloc(sizeof(LNode));LNode *s,*r = L;while(x!=n){s = (LNode*)malloc(sizeof(LNode));s->data = x;r->next = s;r = s;x++;}
}

逆置法

带头结点实现尾插法

LinkList TailInserter(LinkList &L,int n){int x=1;L=(LinkList)malloc(sizeof(LNode));LNode *s,*r=L;while(x!=n){s=(LNode*)malloc(sizeof(LNode));s->data=x;r->next=s;r=s;x++;}r->next=NULL;return L;
}

不带头结点实现尾插法

LinkList TailInserter(LinkList &L,int n){int x=1;L=(LinkList)malloc(sizeof(LNode));L->data=x++;LNode *s,*r=L;while(x!=n){s=(LNode*)malloc(sizeof(LNode));s->data=x;r->next=s;r=s;x++;}r->next=NULL;return L;
}

归并法

typedef struct node{
Elemtype data;
struct node* next;
}Lnode;Lnode* merge1(Linklist& LA, Linklist& LB) {Lnode* LC = (Lnode*)malloc(sizeof(Lnode));LC->next  = NULL;Lnode *pa = LA->next, *pb = LB->next, *pc = LC;while (pa && pb) {if (pa->data < pb->data) {pc->next = pa;pa       = pa->next;} else {pc->next = pb;pb       = pb->next;}pc = pc->next;}if (pa)pc->next = pa;if (pb)pc->next = pb;return LC;
}//******************************************************
Lnode* merge2(Linklist& LA, Linklist& LB) {// merge two sorted Singly linked lists// LA, LB and the return one ( LC ) all have a head node// all the linklist are sorted not in the same way://		LA and LB are the same, but LC just the other way// we assume that LA and LB are sorted in an increasing order// KEY: insert in the frontLnode* LC = (Lnode*)malloc(sizeof(Lnode));LC->next  = NULL;Lnode *pa = LA->next, *pb = LB->next, *temp = NULL;while (pa && pb) {if (pa->data < pb->data) {temp     = pa->next;pa->next = LC->next;LC->next = pa;pa       = temp;} else {temp     = pb->next;pb->next = LC->next;LC->next = pb;pb       = temp;}}// only one of the following "while" will be excutedwhile (pa) {temp     = pa->next;pa->next = LC->next;LC->next = pa;pa       = temp;}while (pb) {temp     = pb->next;pb->next = LC->next;LC->next = pb;pb       = temp;}return LC;
}

参考代码
链接

双指针法

参考内容
链接

链表——双指针和双链表

  • 两个指针从不同位置出发:一个从始端开始,另一个从末端开始(对撞指针);相隔k个位置进行遍历
  • 两个指针以不同速度移动:一个指针快一些,另一个指针慢一些。一个走一步,一个走两步
  • 滑动窗口:有左右端点和长度,根据题目调整左右端点的位置进行滑动,也是一种特殊的双指针。
    扁平化多级双向链表
    题目
    多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。
    给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。
    示例 1:
输入:head =[1,2,3,4,5,6,null,null,null,7,8,9,10,null,null,11,12]
输出:[1,2,3,7,8,11,12,9,10,4,5,6]

在这里插入图片描述
扁平化后的链表如下图:
\

给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。

  • 遇到child就递归, 把next和child都传递过去, 因为指针会遍历到后面, 正好可以拼接next和child
  • 递归返回之后要清掉child, 并且处理好prev指针
// 优化前
const flatten = (head, next) => {let curr = headwhile (curr && (curr.next || curr.child)) {if (curr.child) {curr.next = flatten(curr.child, curr.next)curr.child = nullcurr.next.prev = curr}curr = curr.next}if (next) {next.prev = currcurr.next = next}return head
}
滑动窗口

例题
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

这篇关于【00】408笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146780

相关文章

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个

Git 的特点—— Git 学习笔记 02

文章目录 Git 简史Git 的特点直接记录快照,而非差异比较近乎所有操作都是本地执行保证完整性一般只添加数据 参考资料 Git 简史 众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Linus