linux高级程序设计

2023-11-05

这本阿里P8撰写的算法笔记,再次推荐给大家,身边不少朋友学完这本书最后加入大厂:

Github 疯传!史上最强悍!阿里大佬「LeetCode刷题手册」开放下载了!

一网络通信基础

        TCP/IP协议簇基础:之所以称TCP/IP是一个协议簇,是因为TCP/IP包含TCP 、IP、UDP、ICMP等多种协议。下图是OSI模型与TCP/IP模型的对比,TCP/IP将网络划分为4层模型:应用层、传输层、网络层和网络接口层(有些书籍将其分为5层,即网络接口层由链路层和物理层组成)

(1)网络接口层:模型的基层,负责数据帧的发送已接收(帧是独立的网络信息传输单元)。网络接口层将帧格式的数据放到网络上,或从网络上把帧取下来。

(2)互联网(网络层):互联协议将数据包封装成IP数据包,并运行必要的路由算法,有效的找到达到目的主机最优的路径树。这里有四种互联协议:

网际协议IP:负责在主机和网络之间路径寻址和路由数据包。目前主要为IPV4地址,IPV6已经在教育网中广泛使用。

地址解析协议ARP:获得同一物理网络中的主机硬件地址

网际控制消息协议ICMP:发送消息,并报告有关数据包的传送错误

互联组管理协议IGMP:用来实现本地多路组播路由器报告

(3)传输层:传输协议在主机之间提供通信会话。传输协议的选择根据数据传输方式而定

主要有以下两种传输协议:

传输控制协议TCP:为应用程序提供可靠的通信连接。适合于一次传输大批数据的情况,并适用于要求得到响应的应用程序。

影虎数据包协议UDP:提供了无连接通信,且不对传送包进行可靠性确认。适合于一次传送小量数据(一般小于520字节),可靠性则由应用层来完成。

(4)应用层:应用程序通过这一层访问网络,主要包括常见的FTP,HTTP,DNS和TELNET协议

ELNET:提供远程登录服务

FTP:提供应用级的文件传输服务

SMTP:电子邮件协议

SNMP:简单网络管理协议

DNS:域名解析服务,将域名映像成IP地址的协议

HTTP:超文本传输协议,web服务器所采用的协议

 

二 IPv4协议基础

        TCP/IP中,IP地址在逻辑上唯一的标识了网络中的一台主机,连接到公网上的主机地址是唯一的,一个IP地址对应一台主机。

        IP地址两种表示形式:二进制表示法和点分十进制表示法。每个IP地址由两部分组成:网络号和主机号。TCP/IP通讯过程:

        传输层及其以下的机制由内核提供,应用层由用户进程提供(后面将介绍如何使用socket API编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示TCP/IP数据包的封装

        不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。上图对应两台计算机在同一网段中的情况,如果两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器跨路由器通讯过程:

        其实在链路层之下还有物理层,指的是电信号的传递方式,比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)是工作在物理层的网络设备,用于双绞线的连接和信号中继(将已衰减的信号再次放大使之传得更远)。

        链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机是工作在链路层的网络设备,可以在不同的链路层网络之间转发数据帧(比如十兆以太网和百兆以太网之间、以太网和令牌环网之间),由于不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层首部重新封装之后再转发。

        网络层的IP协议是构成Internet的基础。Internet上的主机通过IP地址来标识,Internet上有大量路由器负责根据IP地址选择合适的路径转发数据包,数据包从Internet上的源主机到目的主机往往要经过十多个路由器。路由器是工作在第三层的网络设备,同时兼有交换机的功能,可以在不同的链路层接口之间转发数据包,因此路由器需要将进来的数据包拆掉网络层和链路层两层首部并重新封装。IP协议不保证传输的可靠性,数据包在传输过程中可能丢失,可靠性可以在上层协议或应用程序中提供支持。

        网络层负责点到点(point-to-point)的传输(这里的“点”指主机或路由器),而传输层负责端到端(end-to-end)的传输(这里的“端”指源主机和目的主机)。传输层可选择TCP或UDP协议。TCP是一种面向连接的、可靠的协议,有点像打电话,双方拿起电话互通身份之后就建立了连接,然后说话就行了,这边说的话那边保证听得到,并且是按说话的顺序听到的,说完话挂机断开连接。也就是说TCP传输的双方需要首先建立连接,之后由TCP协议保证数据收发的可靠性,丢失的数据包自动重发,上层应用程序收到的总是可靠的数据流,通讯之后关闭连接。UDP协议不面向连接,也不保证可靠性,有点像寄信,写好信放到邮筒里,既不能保证信件在邮递过程中不会丢失,也不能保证信件是按顺序寄到目的地的。使用UDP协议的应用程序需要自己完成丢包重发、消息排序等工作。

目的主机收到数据包后,如何经过各层协议栈最后到达应用程序呢?整个过程如下图所示Multiplexing过程

        以太网驱动程序首先根据以太网首部中的“上层协议”字段确定该数据帧的有效载荷(payload,指除去协议首部之外实际传输的数据)是IP、ARP还是RARP协议的数据报,然后交给相应的协议处理。假如是IP数据报,IP协议再根据IP首部中的“上层协议”字段确定该数据报的有效载荷是TCP、UDP、ICMP还是IGMP,然后交给相应的协议处理。假如是TCP段或UDP段,TCP或UDP协议再根据TCP首部或UDP首部的“端口号”字段确定应该将应用层数据交给哪个用户进程。IP地址是标识网络中不同主机的地址,而端口号就是同一台主机上标识不同进程的地址,IP地址和端口号合起来标识网络中唯一的进程。

        注意,虽然IP、ARP和RARP数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,ARP和RARP属于链路层,IP属于网络层。虽然ICMP、IGMP、TCP、UDP的数据都需要IP协议来封装成数据报,但是从功能上划分,ICMP、IGMP与IP同属于网络层,TCP和UDP属于传输层。本文对RARP、ICMP、IGMP协议不做进一步介绍。

 三 TCP与UDP的区别

        中国移动、中国联通推行的GPRS网络、CDMA网络已覆盖大量的区域,通过无线网络实现数据传输成为可能。无线Modem采用GPRS、CDMA模块通过中国移动、中国联通的GPRS、CDMA网络进行数据传输,并通TCP/IP协议进行数据封包,可灵活地实现多种设备接入,工程安装简单,在工业现场数据传输的应用中,能很好的解决偏远无网络无电话线路地区的数据传输的难题。同传统的数传电台想比较,更具有简便性、灵活性、易操作性,同时还降低了成本,无线Modem传输方案是现代化工业现场数据传输最好的选择方案。         目前中国移动、中国联通提供的GPRS网络、CDMA网络的数据传输带宽在40Kbps左右,且受带宽的限制,数据采集方案最好采用于主动告警、数据轮巡采集、告警主动回叫等对传输带宽占用较少的采集方式。同时考虑对前置机实时采集方案的支持,无线Modem传输方案只能作为目前传输方案的补充。 随着无线通讯技术的不断发展,无线传输数据带宽将不断提高,采用3G无线网络,数据传输带宽将达到2M,无线传输方案将逐渐成为监控传输组网的主要应用方案。目前,由于GPRS和CDMA固有的特性,在各个领域中GPRS和CDMA的应用也越来越广泛,但是关于传输中使用TCP/IP协议还是UDP协议,却争论很多。

        TCP(Transmission Control Protocol)---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。

        UDP(UserDatagram Protocol)---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

这里先简单的说一下TCP与UDP的区别: 1。基于连接与无连接 2。对系统资源的要求(TCP较多,UDP少) 3。UDP程序结构较简单 4。流模式与数据报模式 5。TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证

另外结合GPRS网络的情况具体的谈一下他们的区别: 1。TCP传输存在一定的延时,大概是1600MS(移动提供),UDP响应速度稍微快一些。 2。TCP包头结构   源端口16位   目标端口 16位   序列号 32位   回应序号 32位   TCP头长度4位   reserved6位   控制代码6位   窗口大小16位   偏移量16位   校验和16位   选项 32位(可选)   这样我们得出了TCP包头的最小大小.就是20字节.

  UDP包头结构   源端口16位   目的端口16位   长度 16位   校验和 16位 (UDP的包小很多.确实如此.因为UDP是非可靠连接.设计初衷就是尽可能快的将数据包发送出去.所以UDP协议显得非常精简.)

3。GPRS网络端口资源,UDP十分紧缺,变化很快。

而TCP采用可靠链路传输,不存在端口变化的问题工业场合的应用一般都有以下特点,

1。要求时时传输,但也有一些场合是定时传输,总的来说在整个传输过程中要求服务器中心端和GPRS终端设备能相互的、时时的传输数据。 TCP本身就是可靠链路传输,提供一个时时的双向的传输通道,能很好的满足工业现场传输的要求。但是GPRS网络对TCP链路也存在一个限制:此条链路在长时间(大概20分钟左右,视具体情况而定)没有数据流量,会自动降低此链路的优先级直至强制断开此链路。所以在实际使用中也会采用心跳包(一般是一个字节的数据)来维持此链路。 UDP由于自身特点,以及GPRS网络UDP端口资源的有限性,在一段时间没有数据流量后,端口容易改变,产生的影响就是从服务器中心端向GPRS终端发送数据,GPRS终端接收不到。具体的原因就是移动网关从中作了中转,需要隔一定时间给主机发UDP包来维持这个IP和端口号,这样主机就能主动给GPRS发UDP包了并且我在测试中发现,这个间隔时间很短,我在1多分钟发一次UDP包才能够维持,但是再长可能移动网关那边就要丢失这个端口了,此时如果主机想主动发数据给GPRS,那肯定是不行的了,只有GPRS终端设备再发一个UDP包过去,移动重新给你分配一个中转IP和端口,才能够进行双向通讯。

2。要求数据的丢包率较小。有些工业场合,例如电力、水务抄表,环保监测等等,不容许传输过程中的数据丢失或者最大限度的要求数据的可靠性。从这一点来看,很显然在无线数据传输过程中,TCP比UDP更能保证数据的完整性、可靠性,存在更小的丢包率。在实际测试中也是如此。以厦门桑荣科技有限公司提供的GPRS终端设备为例:TCP的在千分之9,UDP的在千分之17左右。

3。要求降低费用。目前有很大部分GPRS设备的应用都是取代前期无线数传电台,除了使用范围外,其考虑的主要问题就是费用。能降低费用当然都是大家最愿意接受的。和费用直接相关的就是流量了,流量低,费用就低了。虽然TCP本身的包头要比UDP多,但是UDP在实际应用中往往需要维护双向通道,就必须要通过大量的心跳包数据来维护端口资源。总的比较起来,UDP的实际流量要比TCP还要大。很多使用者在初期的时候并不了解UDP需要大量心跳包来维持端口资源这个问题,往往都认为UDP要比TCP更节省流量,实际上这里存在着一个误区。

4。在某些特定的应用场合,例如一些银行的时时交互系统,对响应速度要求很高,此时数据传输频率较快,不需要大量心跳包维持UDP端口资源,采用UDP就比较有利了。

5。在目前的1:N的传输模式中,既有多个GPRS终端设备往一个服务器中心传输数据,此时采用UDP会比TCP要好的多,因为UDP耗用更少的系统资源。但是在实际应用中却发现,很多用户还是采用TCP的传输方式,建立二级中心1:A(1:N),即每一个分中心对应N/A台设备,独立处理数据,再统一将数据传送到主中心。这样既能保证了传输过程中采用了TCP的传输协议,又能很好处理了中心服务器的多链路的系统耗用的问题。 ———————————————— 版权声明:本文为CSDN博主「a1314521531」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/wqx521/article/details/51037048

这本阿里P8撰写的算法笔记,再次推荐给大家,身边不少朋友学完这本书最后加入大厂:

Github 疯传!史上最强悍!阿里大佬「LeetCode刷题手册」开放下载了!

以上就是良许教程网为各位朋友分享的Linux相关知识。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux高级程序设计 的相关文章

  • PCL 区域生长分割(C++详细过程版)

    区域生长 一 概述 二 代码实现 三 结果展示 1 原始点云 2 聚类结果 四 相关链接 一 概述 区域生长分割是PCL里经典的点云聚类分割算法 具体算法原理和实现代码见 PCL 区域生长分割 为充分了解算法实现的每一个细节和有待改进的地方
  • display:none元素不可见,可通过JS方法把它修改为可见

    页面元素无论用什么xpath都无法定位 by id class name都试过了 可以去页面看看是否这个元素的display是none display none方法是设置元素不可见 所以解决办法就是首先通过JS方法把它修改为可见 js do
  • Kafka 创建 两个topic 一个用于发送信息 一个用于接收Flink处理之后的信息

    Kafka 创建 两个topic 一个用于发送信息 一个用于接收Flink处理之后的信息 Kafka生产者Java代码 package cn oneseek import cn oneseek util JsonData import or
  • 网络工程专业毕设题目选题大全

    文章目录 0 简介 1 如何选题 2 最新网络工程选题 2 1 Java web SSM 系统 2 2 大数据方向 2 3 人工智能方向 2 4 其他方向 4 最后 0 简介 学长搜集分享最新的网络工程专业毕设毕设选题 难度适中 适合作为毕
  • vue入门教程之-属性、事件和双向绑定

    vue入门教程之 属性 事件和双向绑定 欢迎关注博主公众号 java大师 专注于分享Java领域干货文章 关注回复 资源 免费领取全网最热的Java架构师学习PDF 转载请注明出处 https www javaman cn vue vue
  • 【JAVA

    package learn import java awt import javax swing import java awt event public class PinBall private Frame frame new Fram
  • 中国金融牌照全解读

    前言 金融牌照 即金融机构经营许可证 是批准金融机构开展业务的正式文件 目前金融许可证由银监会 证监会和保监会等部门分别颁发 金融监管根据时段划分为事前监管 事中监管 事后监管 市场准入制度是事前监管的核心 金融许可证则是市场准入制度的常态
  • ITERM2 自动登录跳板机脚本(多跳、带动态TOKEN)

    代码如下 设置方式是 iterm2 preference Profiles 新建一个profile 并设置Name为a Command为 Users XXX Desktop a sh 在sen text as start内传入4个参数 US
  • Android开发——菜单(Menu)-——选项菜单(OptionMenu)

    Menu 在Android3 0以前的menu显示 是用户点击手机下方操作按钮的菜单按钮时 会从界面底部向上弹出菜单 菜单内容出现在屏幕底部 可以包含六个及以上的菜单项 超出的部分则以 更多 来显示 在Android3 0以后的更高版本的系
  • git clone使用方法

    步骤是转载的该文章 后面有添加自己的要注意的地方 不完全一样 仅码住自用 使用Git clone项目 1 首先我们要确保我们的电脑上已经安装Git 桌面点击右键出现如下图所示的两个Git即Git已经安装 2 在电脑的任意一个磁盘里新建一个本
  • ARM公司发展史

    目录 1 前言 2 ARM公司发展史 3 ARM架构发展史 3 1ARMv1架构 3 2 ARMv2架构 3 3 ARMv3架构 3 4 ARMv4架构 3 5 ARMv5架构 3 6 ARMv6架构 3 7 ARMv7架构 3 8 ARM
  • 关于存储器按字节寻址和按字寻址的理解

    关于存储器按字节寻址和按字寻址的理解 近日在学习MOOC上学习哈工大刘宏伟老师的 计算机系统组成原理 课程 在4 1节提到主存的时候简单地提到一下关于按字节寻址和按字寻址的寻址空间问题 个人非常疑惑于是各处搜索查找资料 下面是本人就这个问题
  • 【机器学习】左逆、右逆、伪逆和广义逆的概念理解

    逆矩阵 对于矩阵 A A A 如果存在一个矩阵 B B B 使得 A B B
  • spring boot配置logback日志

    spring boot配置logback日志 第一次用 markdown编辑 哈哈 在上一篇spring boot入门里提过 Spring Boot默认的日志打印是logback 所以配置logback日志会很简单 但是也有注意的地方 本次
  • vue实时监听窗口宽度变化

    自适应 向来是前端工程师需要解决的一大问题 即便作为当今非常火热的vue框架 也无法摆脱 虽然elementui iview等开源UI组件库层出不穷 但官方库毕竟不可能满足全部需求 因此我们可以通过 监听窗口变化 达到想要的绝大部分自适应效
  • spring Cache的缓存记录

    使用Spring Cache需要我们做两方面的事 n 声明某些方法使用缓存 n 配置Spring对Cache的支持 和Spring对事务管理的支持一样 Spring对Cache的支持也有基于注解和基于XML配置两种方式 下面我们先来看看基于
  • C++(day3)

    思维导图 封装顺序栈 stack h ifndef STACK H define STACK H include
  • 激活函数之ReLU/softplus介绍及C++实现

    softplus函数 softplus function x ln 1 exp x softplus函数可以用来产生正态分布的 和 参数 因为它的范围是 0 当处理包含sigmoid函数的表达式时它也经常出现 softplus函数名字来源于
  • 裸奔时代,区块链技术能否帮助我们保护个人隐私?

    在这个信息交流飞速发展的年代 在人们在享受互联网信息带来的便利的同时 常常会感慨这是一个没有隐私的裸奔时代 对于个人信息的泄露大家已经见怪不怪了 网络爬虫 人肉搜索等手段的问世 将人们的生活置于各种显微镜下 各种促销或骚扰电话让人不胜其烦
  • python中函数介绍及其运用

    前言 一 定义函数 二 传递实参 1 位置实参 2 关键字实参 3 给形参指定默认值 三 函数返回值 1 返回简单值 2 返回字典 3 结合使用函数和while 循环 四 传递列表 1 在函数中调用列表 2 在函数中修改列表 3 禁止在函数

随机推荐

  • qt中信号与槽多次调用的问题及信号与槽的连接方式问题

    发送一次信号 调用多次槽函数问题 在同一个类中 多次链接QObject connect sender SIGNAL signalSender QString int receiver SLOT onSignalSender QString
  • java poi 4.1.2 操作excel说明

    文章目录 描述 导包 excel写入 excel读取 数据类型与多行多列 描述 poi是Apache下一款java语言excle高效读写工具 本博客将从读 写等方面做说明 xls 2007前版本 和xlsx 2007版本和此后 使用不同类
  • bat:使用bat脚本获得文件名,修改时间,大小

    echo for i in D J 1012 ftprun log do echo nxi echo zi字节 echo ti echo Y gt ni log pause
  • 固高运动控制卡IO口输入输出

    固高运动控制卡开发资料 关注我免费下载 输入 板卡上的输入 long ss 0 GT GetDi MC GPI ss bool gpists 1 lt lt bit 1 bit为输入接口号 拓展模块的输入 short Extflag 0 返
  • Qt 样式表之QSS

    前言 最近想给程序做个换皮肤的功能 于是想起了用 QSS QSS 这个东西也算是老古董了 博主刚工作那会就有接触过 但是没有深入去了解 趁着这一次机会来学习一下 网上翻阅了一些资料 结合 Qt 的官方文档 博主把 QSS 的相关知识点整理了
  • [1063]CM+CDH6.3.2环境搭建(全网最全)

    文章目录 1 环境准备 1 1 三台虚拟机准备 1 2 常用yum源更新 gcc G C 等环境 可以跳过 1 3 配置本地yum云 1 3 1 更新yum源httpd 1 3 2 更新yum源yum utils 1 3 3 将下载好的资源
  • Laravel8.x + jwt 授权系统

    1 创先一个新项目 composer create project prefer dist laravel laravel my app 2 配置好数据库后迁移数据 php artisan migrate 3 让我们为 User 模型创建一
  • configParse 是如何解析配置文件的,下面解析配置文件的步骤,并用具体示例说明

    1 创建文件test ini以及存放内容 2 我的是python3 需要安装 pip install ConfigParser 3 创建ConfigParser对象 4 在上面的代码allow no value参数表示在配置文件中是否允许选
  • EFK6.3+kafka+logstash日志分析平台集群

    转载来源 EFK6 3 kafka logstash日志分析平台集群 https www jianshu com p f956ebbb2499 架构解读 第一层 数据采集层 安装filebeat做日志采集 同时把采集的日志发送给kafka
  • JS中的块级作用域

    JS中是没有块级作用域作用域这个概念 为实现块级作用域可通过闭包的形式实现 下面通过一个例子来说一下JS中的块级作用域 function outputName count for var i 0 i
  • 大数据电商数据仓库系统搭建(CDH数仓) 附离线安装包

    一 Cloudera Manager 概述 1 CM 简介 Cloudera Manager是一个拥有集群自动化安装 中心化管理 集群监控 报警功能的一个工具 使得安装集群从几天的时间缩短在几个小时内 运维人员从数十人降低到几人以内 极大的
  • Qt在Windows上简单调用opencv摄像头Demo

    OpenCV也和Qt一样 有很多版本 有各种平台版本 Android ios Windows Linux等 同样在Windows上 也分vc10 vc11 vc12版 做一个简单的demo 用Qt调用opencv摄像头接口显示当前摄像头画面
  • STM32 Keil中关于stlink的调试 下载设置

    1 首先找到魔法棒 或者右键项目 选择第一个Options of 2 找到Debug 选择stlink下载 点击setting 3 选择模式为SW模式 点击确定 进入下一步 4 点击Utilities选项卡 先取消use debug dri
  • 线性同余法生成随机数Matlab_生成安全的随机数

    0x01 生产随机数的方式 Math random 0到1之间随机数 java util Random伪随机数 线性同余法生成 java security SecureRandom真随机数 java util concurrent Thre
  • 【源码&库】在调用 createApp 时,Vue 为我们做了那些工作?

    在使用Vue3时 我们需要使用createApp来创建一个应用实例 然后使用mount方法将应用挂载到某个DOM节点上 那么在调用createApp时 Vue再背后做了些什么事情呢 今天就来扒一扒Vue3的源码 看看调用createApp发
  • android知识点总结

    1 抗锯齿 会占用系统资源 对于线条 mPaint setAntiAlias true 对于图片 canvas setDrawFilter new PaintFlagsDrawFilter 0 Paint FILTER BITMAP FLA
  • phpstudy CRMEB安装配置mysql sql-mode报错及配置redis

    安装CRMEB程序时 数据库报mysql数据库报 请在mysql配置文件修sql mode为NO AUTO CREATE USER NO ENGINE SUBSTITUTION 找了好几个答案都redi是错误的 试错半小时总结最靠谱答案如下
  • AI算法工程师

    文章目录 一 我们身处人工智能的时代 人工智能的时代 人工智能的应用 二 人工智能的流程和基本概念 人工智能常见流程 人工智能基本概念与区别 三 人工智能的常见任务和本质 有监督机器学习任务与本质 无监督机器学习任务与本质 一 我们身处人工
  • docker 卸载镜像_为什么删除docker镜像后依然占用本地空间?

    bin bash Copyright 2017 Th o Chamley Permission is hereby granted free of charge to any person obtaining a copy of this
  • linux高级程序设计

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 一网络通信基础 TCP IP协议簇基础 之所以称TCP IP是一个协议簇 是因为