计网优秀博客收藏
学习建议 如何构建计算机网络知识体系 基础知识点 两台计算机之间是如何通信的 IP协议精讲 ARP协议精讲 TCP 三次握手和四次挥手 DNS协议解析 HTTP协议 ICMP协议 DHCP协议 滑动窗口协议 面试 在浏览器中输入网址后回车发生了什么 为什么DNS协议使用UDP DDos攻击
OSI七层参考模型
参考网址: https://blog.csdn.net/xx16755498979/article/details/132489516 OSI七层参考模型 物理层 主要定义物理设备标准,如网线接口类型、传输介质的传输速率等。 作用:传输比特流(数模转换和模数转换) 数据:比特 数据链路层 定义如何让格式化数据以帧为单位进行传输,以及如何控制对物理介质的访问,用MAC地址访问介质。 作用:建立逻辑连接、进行硬件地址寻址、差错校验 数据:帧 网络层 进行逻辑地址寻址 作用:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。 传输层 定义了一些传输数据的协议和端口号(WWW端口80),如TCP、UDP。 作用:将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。 数据:段 会话层 通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。 作用:再系统之间发起会话或者接受会话请求 表示层 数据的表示、安全、压缩 作用: 进行对接收的数据进行解释、加密与解密、压缩与解压缩(把计算机能识别的东西转换为人能识别的东西,如图片、声音等) 应用层 ...
C++-模板
模板概念 C++ 模板(Templates)是 C++ 中一种强大的工具,用于实现泛型编程。模板允许编写与类型无关的代码,从而可以重用代码,并在编译时生成特定类型的代码。这种机制可以用于函数、类和别名模板等。 1. 什么是模板? 模板是一种用于创建通用代码的机制,它允许我们编写一次代码,然后用不同的数据类型来使用它,而不需要重复编写相同的逻辑。例如,可以使用模板创建一个可以处理 int、double、char 等类型的函数或类。 2. 函数模板 函数模板是用于生成可以接受不同类型参数的函数的模板。其语法如下: 1234template<typename T>T add(T a, T b) { return a + b;} 在这个示例中: template<typename T> 声明了一个模板,T 是一个占位符类型。 add 函数的参数类型和返回类型都是 T,这意味着它可以处理任何类型的数据,只要这些数据支持 + 操作符。 函数模板的使用 123456789int main() { int x = 10, y = 2 ...
单调栈
单调栈 单调栈分为单调递增栈和单调递减栈 - 单调递增栈即栈内元素保持单调递增的栈 - 同理单调递减栈即栈内元素保持单调递减的栈 操作规则(下面都以单调递增栈为例) 如果新的元素比栈顶元素大,就入栈 如果新的元素较小,那就一直把栈内元素弹出来,直到栈顶比新元素小 效果 栈内的元素是递增的 当元素出栈时,说明这个新元素是出栈元素向后找第一个比其小的元素 举个例子,配合下图,现在索引在 6 ,栈里是 1 5 6 。 接下来新元素是 2 ,那么 6 需要出栈。 当 6 出栈时,右边 2 代表是 6 右边第一个比 6 小的元素。 当元素出栈后,说明新栈顶元素是出栈元素向前找第一个比其小的元素 当 6 出栈时,5 成为新的栈顶,那么 5 就是 6 左边第一个比 6 小的元素。 模板 12345678910stack<int> st;for(int i = 0; i < nums.size(); i++){ while(!st.empty() && st.top() > nums[i]) { st.po ...
编译原理-语法制导翻译与属性文法
语法制导翻译概述 语法分析的基础上,根据源程序中各语法结构的语义进行翻译 编译器一般先将经过语法分析后的源程序翻译成某种形式的中间代码 语义分析器的主要任务 检查各个语法结构的静态语义,即验证语法正确的程序结构是否真正有意义,也称为静态语义分析或静态检查 类型检查:操作数和操作符的类型是否相容; 控制流检查:控制流转向目标地址是否合法; 唯一性检查:对象是否被重复定义; 关联名检查:同一名字多次特定出现是否一致。 将静态检查和中间代码生成结合到语法分析中进行的技术称为语法制导翻译 (syntax-directed translation) 语法制导翻译的基本思想 在进行语法分析的同时,完成相应的语义处理 一旦语法分析器识别出一个语法结构(例如E->E+T)就要立即对其进行翻译。 翻译是根据语言的语义进行的,并通过调用事先为该语法结构编写的语义子程序来实现。 对文法中的每个产生式附加一个/多个语义动作(或语义子程序) 在语法分析的过程中,每当需要使用一个产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作外,还要执行相应的语义动作(或调用相应的语义子程序) 语义子程 ...
Git指令集
初始化设置 配置用户名 1git config --global user.name "Your Name" 配置邮箱 1git config --global user.email "mail@example.com" 存储配置 1git config --global credential.helper store 创建仓库 创建一个新的本地仓库 ( 省略 project-name 则在当前目录创建) 1git init <project-name> 克隆一个远程仓库 1git clone <url> 四个区域 工作区(Working Directory) 就是你在电脑里能实际看到的目录。 暂存区(Stage/Index) 暂存区也叫索引, 用来临时存放未提交的内容, 一般在 .git 目录下的 index 中。 **本地仓库(**Repository) Git在本地的版本库, 仓库信息存储在 .git 这个隐藏目录中。 **远程仓库(**Remote Repository) 托管在远程服务器上的仓库。 常用的有 ...
编译原理-自顶向下的语法分析
语法分析概述 语法分析的主要工作是根据源语言的文法,判别某个单词序列是否是源语言的一个句子 语言是满足一定组成规则的句子集合 句子是满足一定组成规则的单词序列 单词则是满足一定组成规则的字符串 这些组成规则就是文法中的产生式 两种方式 产生句子的方式:从文法的开始符号开始,逐步推导出这个单词序列,也称为自顶向下的语法分析 递归子程序法 预测分析法(LL(1)) 识别句子的方式:逐步将构成程序的单词序列归约为文法的开始符号,也称为自底向上的语法分析 算符优先分析法 LR(0)、SLR(1)、LR(1)、LALR(1) 无论是自顶向下还是自底向上,语法分析器都是自左到右地扫描输入单词序列,每次读入一个单词,针对输入单词序列建立一颗语法分析树 不同的分析方法对应着不同的构建树的方式 语法分析时的恢复策略 紧急方式恢复策略:丢弃输入记号,直到发现某个指定的同步记号为止。同步记号通常是定界符(分号或end标记),标志着一条新语句的开始。 短语级恢复策略:对剩余输入做局部纠正 自顶向下的语法分析面临的问题 基本思想: 从文法的开始符号出发,寻求所给的输入符号串的一个最左 ...
软件工程
软件生命周期 核心内容:软件生命周期的各过程 软件工程学概述 概念定义 软件工程是指导计算机软件开发和维护的一门工程学科。 采用工程的概念、原理、技术和方法来开发与维护软件。把正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。 本质特性 软件工程关注于大型程序的构造 软件工程的中心课题是控制复杂性 软件经常变化 开发软件的效率非常重要 和谐地合作是开发软件的关键 必须有效地支持它的用户 两种背景的人创造产品这个特性与前两个特性紧密相关 基本原理 用分阶段的生命周期计划严格管理 坚持进行阶段评审 实行严格的产品控制 采用现代程序设计技术 结果应能清楚地审查 开发小组的人员应该少而精 承认不断改进软件工程实践的必要性 三要素 方法:完成软件开发的各项任务的技术方法,回答“怎样做”的问题 工具:为运用方法而提供的自动的或半自动的软件工程支撑环境 过程:为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤 方法学 传统方法学 也称为生命周期方法学或结构化范型。 软件生命周期的全过程依次 ...
编译原理-词法分析
词法分析器的功能 功能:输入源程序,输出单词符号。即:把构成源程序的字符串转换成“等价的”单词序列 根据词法规则识别及组合单词,进行词法检查 对数字常数完成数字字符串到二进制数值的转换 删去空格和注释等不影响程序语义的字符 单词的分类与表示&词法分析器的输出 单词的内部形式 二元组 (种别, 属性值) 种别:表示种类(可以用整数编码或宏) 属性值:不同的单词不同的值 按单词种类分类 固定数量单词采用一符一类 存储方式 问题:如何存储标识符和常量的属性值 方法1:用标识符和常量本身的值表示 方法2:用指针表示 本身的值 不同值存储空间长度不同 往往需要对长度加以限制,意味着要截断 用指针表示 指针长度固定->属性值的长度相同 间接访存->由于词法分析器要兼顾符号表的查填和维护,间接访存增加负担 例子 源程序的输入缓冲与预处理 源程序以字符流形式存储于外部介质 为正确识别单词,编译程序需要一系列相关处理 超前搜索和回退 标识符的识别,或双字符运算符(**, <=, <>) 回退操作修正超前搜索 缓冲区 假定源程 ...
编译原理-引论
程序设计语言 机器语言 每一个具体的计算机系统都具有自己的指令系统 以0,1代码表示的机器指令所构成的语言 汇编语言 适当的助记符来表示指令中的操作和操作数 如含有:add、mov … 高级语言 其表示方法更接近于待解问题的表示方法 定义数据、描述运算、控制流程、传输数据 如:C、FORTRAN、PASCAL、C++、JAVA 程序设计语言的翻译 翻译程序(Translator) 将某一种语言描述的程序(源程序——Source Program)翻译成等价的另一种语言描述的程序(目标程序——Object Program)的程序。 翻译程序 包含 解释程序 和 编译程序 两种 解释程序(Interpreter) 边解释边执行:不断读取源程序的语句,解释语句,读取此语句需要的数据,根据执行结果读取下一条语句,继续解释执行,直到返回结果 类似于自然语言翻译的同声传译 编译程序(Compiler) 将源程序完整地转换成机器语言程序或汇编语言程序,然后再处理、执行的翻译程序 高级语言程序 → 汇编/机器语言程序 类似于自然语言翻译的通篇笔译 其他翻译程序 汇 ...