我是靠谱客的博主 典雅仙人掌,最近开发中收集的这篇文章主要介绍CSNOTE计算机基础学习路径,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

网络基础:
概述【DONE】
物理层【带通调制,DONE】
链路层【DONE 信道复用,csma/cd,集线器,交换机,虚拟局域网】
网路层【ip数据报格式,ttl片偏移标识符;分类子网cidr最长匹配原则;ARP:由ip到mac,缓存与广播;icmp网际控制报封装在ip中,提高交付成功的机会,差错and询问,ping 和 tractroot;VPN 使用公用的互联网作为本机构各专用网之间的通信载体,用隧道技术实现;NAT转换专用ip和全球ip,ip+port;路由器:路由选择 + 分组转发;RIP内部路由,不超过15跳,距离向量一次修改,限制规模;OSPF全网基于dijk,泛洪收敛快;自治系统间bgp边界网关协议,选取发言人通过tcp连接交换信息】
传输层【udp无连接,最大交付,无拥塞控制,面向保温,111多多1多多;tcp连接,可靠交付,流量拥塞控制,全双工,字节流,11;tcp报文,序号,确认号,数据偏移,确认ack,同步syn,终止fin,窗口(接受方缓存有限);三次握手,server监听,client发请求报文syn=1ack=0初始序号x,server发连接确认报文syn=1ack=1确认号x+1初始序号y,a再确认确认号y+1序号x+1,之后建立连接;三次握手防止失效连接到达server,若客户发的连接请求滞留,server会隔一段时间收到,若没有第三次握手就会错误打开,若有第三次握手,client就会忽略对滞留连接的连接确认;四次挥手,client发送释放连接fin=1,server收到后发出确认此时tcp半关闭只有b可以向a发数据,当server不需要连接时候发送释放报文fin=1,a收到后确认进入timewait等待2msl(最大报文存活),b收到a确认后释放,closewait是为了让server发完未传送完的数据然后再发fin,timewait阶段两个理由1是确保确认报名能够到达否则会收到不符合的ack2是为了本连接的所有报文都消失使得下一个新连接不会出现旧连接的请求;可靠传输利用超时重传机制,报文从发送再到接受再到确认的往返时间叫rtt,有加权rtts,超时时间rto = rtts + 4rttd(为偏差的加权平均);tcp滑动窗口,缓存,发送和接受方都有,接受方告诉发送方自己的大小,发送方根据此来设置自己的窗口和其他信息,确认了就向右滑动,接受窗口只会对最后一个按序到达的进行确认;流量控制是控制发送方发送速率,保证接受方来得及接受;拥塞控制是由于拥塞会导致分组丢失而重传,慢开始拥塞避免快重传快恢复,拥塞窗口要发送方维护;慢开始由1开始,然后2的倍数增到了门限只能+1,若超时则门限 = 当前大小 / 2,然后再慢开始;快重传和快恢复,如果发送方收到三个重复确认可以知道下一个报文丢失,马上进行重传,这种情况下只是个别丢失而不是拥塞因此快恢复,令门限 = 当前大小 / 2,当前大小 = 门限,DONE】
应用层【dns域名系统,记录主机名和ip关系,根顶级二级,可用upd和tcp port53,大多数udp,要求域名解析器和服务器保证超时重传和可靠性,当大于512bytes或区域传送(主向辅传变化的数据)时用tcp;文件传送ftp采用tcp,用控制连接port21和数据连接,数据连接有主动和被动,表现为端口谁确定谁随机,主动模式客户端开放端口要配置客户端防火墙,被动模式服务器开放端口导致安全性减弱;动态主机配置DHCP自动配置ip子网掩码等,client泛洪discover,server返回offer报文,client发送request给server,server再发送ack,这时client就可以用ip了;telnet登陆远程主机;电子邮件协议用户代理,邮件server和邮件protocol,发送和读取,发送smtp,读取pop3和imap,发送方代理andserver,接受方serverand代理,smtp值发ascii,通过扩充mime可发送二进制,定义了非ascii的编码,pop3用户从server读取就删除最新版不删除,imap客户端和服务器保持同步,若不手动删除server也不删除,可随时访问server;常用端口dns53dhcp67/68snmp161/162ftp20/21telnet23http80smtp25pop3110imap143;dns是udp或tcp,dhcp是udp,snmp是udp,其他全tcp;Web网页请求过程;1dhcp配置注意信息请求报文广播ipmac数据帧交换机自学习获得ip可配置ip掩码和dnsip;2arp解析mac,为了获得网关的mac需要arp(dhcp只知道网关ip),用广播的以太网帧进行匹配回答;dns解析由rip ospf和bgp路由协议,查询域名,并反向转发;http请求页面,get报文三次握手,发syn给server,server发synack,浏览器生成get交付给server,生成响应报文发回给主机,chrome抽取出web页面渲染即可,DONE】

HTTP:
基本概念【请求和响应报文,请求报文:方法、url、version、header、body;响应报文:version、状态码描述,header,body;URL统一资源定位符来定位资源,是URI统一资源表示符的子集;URN知识定义一个资源的名称,不能定位,Done】
http方法【get获取资源;head获取报文首部用于确认url的有效性和资源更新的日期时间;post传输实体主体;put上传文件,任何人都可,安全性较差;patch对资源进行部分修改,相比put必须完全代替;delete删除文件,不带验证机制;options查询支持的方法(返回get等);connect要求仔与代理server通信时建立隧道,使用SSL和TLS协议将通信内容加密后在隧道传输;trace追踪路径,server返回路径,maxForwards填入竖直,通常不用因为会被XST攻击(跨站追踪),DONE】
http状态码【1xx:接受的请求正在处理;200ok;204 请求成功处理 返回的响应报文无内容;206 客户端进行范围请求;3xx重定向;301永久重定向;302临时重定向;303 get方法临时;304 如果请求首部有一些字段不满足条件;307 与302类似,不要求把post改成get;4xx客户端错误;400 语法错误;401 未认证;403 请求被拒绝;404 not found; 5xx 服务器错误;500 服务器正在执行请求错误;503server超载or停机维护,Done】
http首部【通用首部,请求首部,响应首部,实体首部,了解一下,Done】
具体应用【短链接和长连接,举例若浏览器要访问多图+html每次建立一个tcp开销大,所以只用建立一个tcp就可以多次http,http/1.1就是长连接,之前默认短链接;流水线,默认情况http顺序发出,下一个请求只有当收到响应猜发出,流水线是指再同一次长连接连续发请求,不等待响应;cookie,http无状态,cookie保存状态信息,存在用户本地的小数据会被再次请求时携带上,cookie现在不再用于客户端数据的存储,可用api;会话状态管理,个性化设置,浏览器行为跟踪;创建时server发的setcookie,client得到后把cookie保存,后续client就会代入cookie信息;会话性和持久性cookie;作用域,domains和path;httponly的cookie不能被javascript脚本调用;xss跨站脚本攻击常用js的api窃取cookie;secureCookie只能用https;session讲cookie存储在server端,用户信息放Redis,的key就是sesstion,然后回应sesstion id给client,client再次链接server就可以发id让redis取出value;若浏览器禁用cookie,不能将session id放cookie,只能用url重写把id放url参数;cookie只可存ansi,session任意;cookie可加密,若所有存session开销大;缓存,缓解服务器压力;降低客户端获取资源的延迟;让代理server/client浏览器进行缓存;cache-control字段,禁止缓存,no-cache确认缓存的有效应,私有公有cache,缓存过期max-age,缓存验证,ETag,Last-Modified;内容协商,返回合适的内容,服务端驱动型,代理驱动型,vary使用server中的缓存;内容编码,将实体主体进行压缩,gzip,compress,deflate,identity,content-encoding字段;范围请求,若网络中断server只发送了一部分,范围请求可以st client要求server只发未发的那部分,加入range表示请求的范围,accpet-ranges,响应请求码;分块传输编码,chunked,把数据分割,让浏览器逐步显示页面;多部分对象集合,一个报文主体内可含多种类型的实体,每个部分用boundary字段定义的分隔符分割,每个部分都有首部;虚拟主机,是的一台服务器多个域名,在逻辑上看成多个服务器;通信数据转发,代理server接受client的请求,并转发给server;代理server可以缓存、负载均衡、网络访问控制、访问日志记录;用户察觉的到正向proxy,反向代理在内部网络中用户察觉不到;网关服务器会将http转化为其他协议进行通信,从而请求其他非httpserver的服务;隧道,使用ssl加密手段,建立cs间的安全通路,DONE】
https【风险,明文可能被窃听,通信方可能伪装,报文可能被篡改,https = http + ssl,再由ssl + tcp通信,使用了隧道,可加密认证完整性;对称加密,同一密钥,运算快但密钥无法安全传输;非对称,可加密or签名,更安全传输,但慢;https采用混合加密机制,使用非对称加密传输对称加密的密钥,获取后采用对称加密提高效率;认证,通过证书,ca认证机构都信赖的三方机构,对数字签名进行验证身份,data + 签名(data哈希+ 签名)传过去server,server拿到data得到hash,然后对签名揭解密也得到哈希,就可判断认证;完整性保护,报文摘要MD5,http被篡改后可以改md5的值所以不安全,https结合了加密和认证,加密后的报文篡改后由于无法知道铭文无法计算报文摘要;缺点加解密慢,需要证书费用;总结,加解密,签名ca,完整性保护报文摘要,DONE】
http2.0【http/1.x都是以牺牲性能为代价的,client需要多个连接才可以实现并发和缩短延迟,不压缩请求和首部,造成不必要的网络流量,不支持有效的优先级,tcp利用率低下;二进制分帧层,2.0把报文分成headers和data,都是二进制格式,在通信中只有一个tcp,可以承载任意数量双向的数据流,一个数据流都有一个唯一id课优先级用于承载双向信息,消息是与逻辑请求或响应对应的完整的一系列帧,帧是最小通信单位,来自不同数据流的帧可以交错发送,根据帧头的数据流标识符重组;server推送,client请求一个资源时,会把相关资源一起发给server,这样就不会再次发起请求;首部压缩,1.1首部大量信息,且每次都要重复发送,2.0cs同时维护更新一个之前见过的首部字段表,避免重复传输,2.0使用huffman编码对首部压缩,DONE】
http1.1【默认长连接,支持流水线,同时多tcp,支持虚拟主机,新增code100,支持分块传输编码,新增缓存处理指令max-age,DONE】
get和post比较【get用于获取资源,post用于传输实体主体;参数,get参数都是以查询string出现在url,post参数存储在实体种,也可以通过被抓包工具查看;url只支持ascii,get存在中文就要编码,post支持uf-8;安全,安全的http只是可读,get安全post不安全,post上传数据可能会修改db,安全有get head和options,不安全有post put delete;幂等,同样的请求一次or多次效果相同,server状态相同,幂等方法无副作用,安全都是幂等;可缓存,请求的http本身可缓存如head和get,但put和delete不可缓存,post大多数情况不可缓存,响应的状态码可缓存,响应报文首部没有指定不进行缓存;xmlHTTPrequest,api,为client提供了cs间传输数据的功能,提供一个通过url获取数据的简单方式,不会使得整个页面刷新,只会更新一部分,在xmlhttprequest使用post,浏览器会先发header再data,get的话一起发,DONE】

Socket:
IO模型【io包括数据准备+从内核向进程复制数据;unix五种io模型,阻塞,非阻塞,io复用,信号驱动io,异步io;阻塞io:应用进程被阻塞,知道数据从内核缓冲区复制到应用进程缓冲区才返回,在阻塞种其他进程可以执行,recfrom系统调用;非阻塞io,应用进程执行系统调用后,内核返回一个错误码,进程可继续执行,要轮询polling问io是否完成,利用率低;io复用,使用select或poll等data,并且可以等待多个socket中的任意一个变可读,可读后利用recvfrom把数据从内核复制到进程;让单个进程可以处理多个io,事件驱动io,若一个web没有io复用,那个每个socket都要一个thread,消耗很大,io复用系统开销小;信号驱动io,app使用sigaction系统调用,kernel返回可以继续执行,非阻塞,发送sigio信号,app调用recvfrom,也就是kernel在收到data的时候发信号;异步io,app执行aio_readkernel例可返回,不阻塞,kernel完成所有操作向app发信号,异步io通知appio完成,信号驱动通知app可以io;总结,同步io将数据从kernel复制到app的阶段,app会阻塞,异步io,kernel到app不阻塞,同步io包括阻塞io,非阻塞io,io复用和信号驱动io;非阻塞,信号,异步在第一阶段不阻塞;DONE】
IO复用【select/poll/epoll都是多路复用的实现;select允许应用程序监视一组文件描述符,等待一个或多个描述符就绪,从而完成io;poll和select类似,等描述符就绪;比较,select会修改描述符,select描述符类型用array实现,poll没有限制描述符数量,poll提供了更多时间类型并对描述符的重复利用上比select高,若一个thread调用了select或者poll,另一个关闭了会导致结果不确定;速度慢,要把他从进程buff赋值到kernelbuff,几乎所有支持select较新支持poll;epoll用于向内核注册新描述符或改变某描述符状态,维护在rbt上,仅用于linuxos,epoll更灵活没有描述符数量限制,对多线程编程更友好,不会有不确定;工作模式,LT模式检测到描述符事件到达,告诉进程,进程可以不立即处理,ET模式通知后必须立即处理,下次再调用epollwait不会再得到事件到达通知,避免epoll被重复除法,效率高,只支持noblocking,避免由于一个文件句柄的阻塞处理把多个描述符任务饿死;应用场景,select timeout微妙更精确,核反应堆的控制,select可移植性更好;poll没有最大描述符限制,若平台对实时性要求不高首选poll;epoll知在linux上,有大量的描述符同时轮询,最好长连接,同时监控小于1k描述符就没必要用epoll,短暂的变化描述符也没必要用epoll;当且仅当超大量且长连接的才用,因为epoll都在kernel频繁调用会降低效率,DONE】

os
概述
基本特征【并发,并发是指再宏观上一段时间内能同时运行多个程序,微观不是同时的;而并行则是指在同一时刻能运行多个指令,并行要硬件支持,如多流水线多核处理器或分布式计算机系统,操作系统通过引入进程和线程使得程序可以并发运行;共享,共享是指系统中的资源可以被多个并发进程共同使用,互斥or同时,互斥共享资源为临界资源如打印机,同一个时刻只有一个进程,需要同步机制来实现;虚拟,是指一个物理实体转换为多个逻辑实体,时分复用or空分复用,多个进程能在一个cpu并行使用了时分复用,让每个进程轮流占用cpu,每次只执行一个小时间片并快速切换,虚拟内存使用了空分复用,将物理内存抽象为地址空间,每个进程有各自的地址空间,页被映射到物理内存,并不需要全部在物理内存中,当使用到一个不在物理内存的页可以执行页面置换算法将该页置换;异步,指进程不是一次性执行完毕,走走停停,不可知的速度推进,DONE】
基本功能【进程管理:进程控制、进程同步、进程通信、死锁处理、处理机调度等;内存管理:内存分配、地址映射、内存保护和共享、虚拟内存等;文件管理:文件存储空间的管理、目录管理、文件读写管理和保护等;设备管理:完成用户的io请求,方便用户使用各种设备,提高设备的利用率,缓冲管理、设备分配、设备处理、虚拟设备等,DONE】
系统调用【如果一个进程在用户态需要使用内核态的功能,就进行系统调用从而陷入kernel,由os代为完成;主要的调用有进程控制fork exit wait;进程通信pipe shmget mmap;文件操作open read write;设备操作ioctl read write;信息维护getpid alarm sleep;安全chmod unask chown,DONE】
宏内核【宏内核是将os功能作为一个紧密结合的整体放在内核,各模块共享信息,性能高】
微内核【os不断复杂,将一部分os功能移除kernel,从而减低复杂度,移除的部分根据分层原则划分成若干服务,相互独立;在微kernel下,os被划分成小的、定义良好的模块,只有微内核运行在内核态,其余用户态;频繁地用户态和内核态切换,性能损失】
中断分类【外中断:由cpu执行指令意外地时间引起,io中断,表示输入输出处理完成,可以发送下一个io,时钟中断、控制台中断等;异常:由cpu内部指令时间引起,非法操作码,地址越界,溢出等;陷入:在用户程序中使用系统调用】
进程管理
进程【进程是资源分配的基本单位;进程控制块pcb描述进程的基本信息和运行状态,所谓创建进程和撤销进程都是对pcb的操作,进程可并发执行】
线程【线程是独立调度的基本单位;一个进程可以有多个线程,它们共享进程资源;qq和浏览器是2个进程,浏览器很多线程,如http请求、事件响应、渲染线程等等;线程的并发执行使得在浏览器中点击一个新链接从而发起http请求时,浏览器还可以响应用户的其他事件】
区别【1.拥有资源,进程是资源分配的基本单位,线程不拥有资源,线程可以访问隶属进程的资源;2.调度,线程是独立调度的基本单位,在同一个进程中,线程切换不会引起进程切换,从一个进程的线程切换到另一个进程的线程时,会引起进程切换;3.系统开销:进程的分配撤销开销(内存、io设备)都远大于线程,进程切换时涉及当前进程cpu环境保存和新进程cpu环境设置,而线程切换只需保存和设置少量寄存器内存,开销小;4.通信方面:线程可以通过直接读写同一个进程中的数据通信,进程通信要ipc】
进程状态的切换
在这里插入图片描述
【ready等待被调度,waiting等待资源;只有ready和running可以互相转换,其他都是单向转换,ready通过调度算法获得cpu时间从而变为运行,运行在时间片用完后就会转为就绪,阻塞是缺乏需要的资源从running转换,但不是cpu时间,否则会变回ready】

进程调度算法【批处理系统,没有太多的用户操作,算法目标是保证吞吐量和周转时间;先来先服务fcfs,非抢占式,根据请求的顺序进行调度,有利于长作业不利于短作业,短作业必须等待长作业执行很长时间,造成短作业等待过长;短作业优先sjf,非抢占,运行最短的顺序调度,长作业会饿死,处于一直等待前面短作业执行的状态,若一直有短作业,长作业得不到调度;最短剩余时间优先 srtn 最短作业优先的抢占版本,按剩余运行时间顺序调度,当新作也到来,若其需要时间少则先运行否则进行等待;交互式系统,有大量的用户,目标是快速响应;时间片轮转,按fcfs分成队列,时间片用完有时钟中断把其放到back,其效率和时间片大小有关系,若太小切换频繁,切换会花过多时间,若过长是实时性得不到保证;优先级调度,每个进程一个优先级按分级顺序,为了防止低优先级饿死,可以根据时间增加优先级;多级反馈队列,多个队列时间片不同,在一个队列没执行完会去下一个队列(下一个队列时间片更长),最上面优先权最高,只有上一个队列没有进程排队才会调度当前队列,看作是时间片轮转和优先级的结合;实时系统,在一个确定时间内得到响应,硬实时满足绝对的截止时间,软实时有一定的容忍,DONE】
进程同步【临界区:对临界资源进行访问的那段代码称为临界区,为了互斥访问临界资源,每个进程在进入临界区之前,需要先进行检查;同步和互斥:同步,多个进程因为合作产生的直接制约关系,使得进程有一定的先后执行关系;互斥,多个进程 在同一时刻只有一个进程能进入临界区;信号量:semaphore整形变量,可以对其进行down和up也就是常见的p和v,down:若信号量大于0,则-1操作,若信号量等于0,进程睡眠,等待信号量大于0;up,对信号量+1操作,唤醒睡眠的进程让其完成down操作;p和v都要被涉及成源于,不可分割,通常的做法是在执行这些操作的时候屏蔽中断;若信号量只能0或1,就成为了mutex,0加缩1解锁;生产消费问题,只有缓冲没有满生产者才可以放入,只有缓冲区不空消费才可以拿走,缓冲区临界资源,要mutex控制缓冲去的访问,需要记录物品的数量,用信号量统计,empty记录空的数量,full记录满的数量,其中当empty不为0时生产可以放入,full不为0的时候消费者才可以拿走;不能先对mutex加锁再执行empty,否则生产者对mutex加缩再发现empty = 0就睡眠,而消费者无法进入临界区执行不了up,所以empty永远为0,生产者永远等待且不释放锁;管程,信号量要做很多控制,管程可以把控制代码独立出来,更简单,c不支持管城,类pascal语言;特性在一个时刻只能有一个进程使用管程,进程在无法执行不能一直占用管程,否则其他用不到,管程引入了wiat和signal实现同步,wait会调用进程阻塞,让出来给另一个管城,signal用于唤醒;DONE】
经典同步问题【哲学家进餐问题:哲学家吃饭,要左右拿筷子,一次拿一只,若全部同时拿左再拿右,就会死锁,两个条件1.必须同时拿两个筷子2.两个邻居都没有进餐才可以进餐;读者写者问题,允许多个进程对数据读,但不允许读写or写写同时发生;一个count记录读的总数,count_mutex对count加锁,互斥data_count对读写的数据加缩,写者就看着data锁进行写,读者分两个阶段,先获得count锁,然后第一个读者占领data锁,释放count锁,然后读,然后再获得count锁,count–,最后一个读者释放data锁,释放count锁,DONE】
进程通信【进程同步:控制多个进程按一定顺序执行,进程通信:进程间传输信息,进程通信是一种手段,进程同步是一种目的,为了同步需要通信;管道,通过pipe函数创建,fd[0]读,fd[1]写,只支持半双工通信(单向交替,只能在父子or兄弟进程中使用);FIFO命名管理,去除了只能在父子进程中的限制,FIFO常用于cs程序,在cs进程传输数据;mq,可以独立于读写进程存在,避免了FIFO中同步管道打开和关闭的困难,避免FIFO同步阻塞问题,读进程可以有选择地接受不像FIFO默认接受;信号量,一个计数器,为多个进程提供对共享数据对象的访问;共享存储,允许给多个进程共享一个存储区,不需要在进程中复制数据,最快的IPC(进程通信),需要用信号量同步对共享存储的访问,多个进程可以将同一个文件映射到它们的地址空间从而实现共享内存,另外xsi共享内存不是使用文件,而是使用内存的匿名段;套接字,不同机器间的进程通信,DONE】
死锁
必要条件【互斥:每个资源要么分给了一个进程、要么就是可用的;占有和等待:已经得到了某个资源的进程可以再请求新的资源;不可抢占:已经分配给一个进程的资源不能强制被抢占,它只能被显式释放;环路等待:有两个或两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源】
处理方法【鸵鸟策略,死锁检测和恢复,死锁预防,死锁避免】
鸵鸟策略【假装啥都没发生;解决死锁大家高,这样性能好;若影响不大or死锁概率低,可采用,unix linux win处理的方法就是忽略它】
死锁的检测和恢复【不试图阻止,当检测到的时候再恢复;1.每种类型一个资源的死锁检测,资源指向进程说明资源分配给进程,进程指向资源说明进程请求获取该资源,通过检测有向图是否存在环,从一个节点开始dfs,对所有访问过的节点标记,如果访问了已经标记的节点就存在环;每种类型多个资源的死锁将测,寻找未被标记的进程请求向量小于剩余向量,然后增加剩余向量,一直找这样的进程直到所有进程释放资源;若未全部释放,说明存在死锁;死锁恢复,抢占恢复&回滚恢复&杀死进程恢复,DONE】
内存管理
设备管理

linux
常用操作and概念
磁盘
分区
文件系统
文件
压缩与打包
bash
管道指令
正则
进程管理

最后

以上就是典雅仙人掌为你收集整理的CSNOTE计算机基础学习路径的全部内容,希望文章能够帮你解决CSNOTE计算机基础学习路径所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部