一、计算机网络概论
网络基础
网络组成部分
网络结构
网络的网络
信息交换方式
电路和分组
网络分层
物理层、链路层、网络层、运输层、应用层
网络协议
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展开-重定向-执行命令-收集状态并返回
四、编程范式
前端: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
开放封闭原则:扩展时开放,更改时封闭
里式替换原则:子类可替换父类
依赖倒置原则:具体依赖抽象,下层依赖上层
接口分离原则:依赖通过接口进行区分
- 面向对象编程的五大原则:
单一职责原则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(监听的数据流)
操作符Monad(去除嵌套的observable)
- 响应式编程:离散的函数式编程
领域特定语言
举例:HTML、CSS、SQL
语言运行: