计算机网络| 青训营笔记

94 阅读2分钟

一、计算机网络概论

网络基础

网络组成部分

网络结构

网络的网络

信息交换方式

电路和分组

网络分层

物理层、链路层、网络层、运输层、应用层

网络协议

1、协议:
1)依赖于连接
2)定义多个通信实体之间交换的报文格式和顺序
2、标头和载荷

web中的网络

1、HTTP协议:
请求:方法+资源路径+版本+头部
响应:状态行+头部+正文
2、HTTP 3:QUIC-1RTT

网络安全

1、三要素:机密性、完整性、身份验证
2、公钥、私钥、哈希函数、根证书\


二、Linux

Linux基本组成

内核、shell(命令解释器)、文件系统、应用程序(比如vscode)

体系结构

用户空间+内核空间【系统调用、内核(硬件与软件之间的中间层、资源管理程序)、平台架构相关的代码】

系统结构

1、进程管理
2、文件系统:
Linux中一切皆文件,通过虚拟文件系统VFS做中间的抽象和抹平差异。


三、shell脚本和编程

构成

解释器+编程语言

语法与命令

变量:自定义变量+环境变量(父子shell)+系统环境变量
管道:将前一个命令的结果传递给后一个命令
重定向:输入【>覆盖 >>追加 2>错误输出 &>正确和错误输出统一写入】/输出【< <<】
判断命令:test [] [[]]
分支语句if-elif-else-fi
case $变量 in
循环语句:while until for
函数:funcName(){echo "abc"}
模块化:source[函数库的路径]
常用命令: shell命令.png

执行过程及原理

字符解析-shell展开-重定向-执行命令-收集状态并返回


四、编程范式

前端:JavaScript
基于原型和头等函数的多范式语言(网站开发、引擎嵌入(控制脚本语言))
过程式、面向对象、函数式、响应式

编程范式分类

  • 命令式
    告诉计算机如何去做how\
var arr=[1,2,3,4,5];
//求数组中所有偶数的和
//每一步要做什么都告诉计算机
var sum=0;
for(var i=0;i<arr.length;i++){
if(arr[i]%2===0{
sum+=arr[i];
}
}

(过程:按照过程分组,自顶向下、结构化编程;对象:封装-继承-多态-依赖注)

    • 面向过程的缺点:数据和算法关联弱,结构无法复用
    • 面向对象:封装:将数据和算法封装到类里面;继承:无需重写即可对类进行功能扩充;多态:不同的结构可以进行接口共享,从而达到函数复用;依赖注入:去除代码耦合(声明依赖-声明实现-得到注入对象)
    • 面向对象编程的五大原则: 单一职责原则SRP
      开放封闭原则:扩展时开放,更改时封闭
      里式替换原则:子类可替换父类
      依赖倒置原则:具体依赖抽象,下层依赖上层
      接口分离原则:依赖通过接口进行区分
    • 面向对象的缺点:总是附带着多余的隐含环境
  • 声明式
    告诉计算机我要什么what\

var arr=[1,2,3,4,5];
//求数组中所有偶数的和
//声明我要什么,背后怎么做的没关系
var sum = arr.filter(it=>it%2===0).reduce(a,b)=>a+b);

(函数式:通过函数来声明、响应式:通过过程流和函数映射):声明想要的结果

    • 函数式编程,如:react:1、一等函数(聚合转发)2、纯函数(不依赖也不改变外部环境)3、currying(将通用参数传入到闭包中)4、composition 5、functor(可以看做是容器的类型,支持对容器内的元素进行操作),常见的functor:Array.map,Promise.then 6、Monad(去除嵌套容器,将容器中的内容取出来),常见monad:Array.flatMap,Promise.then 7、Applicative(直接对两个容器直接操作)
    • 响应式编程:离散的函数式编程
      Observable(监听的数据流)
      操作符 image.png Monad(去除嵌套的observable)

领域特定语言

举例:HTML、CSS、SQL
语言运行:

image.png