为什么要学习底层知识?

不学习底层知识可能不会阻碍你成为一个称职的程序员,但也许会阻碍你成为一个优秀的程序员。

了解底层的知识有助于解决问题,并且做出更好的设计。打个比方,就像庖丁解牛,他看到一个牛后,不止看到的是牛,而是由各个骨骼,经络,肌肉等模块组成的有机体——整个系统对你来说就是赤裸裸的,没有任何神秘的面纱。这样也许能够给程序员提供更多的安全感。

但是如果你编程所依赖的平台需要你去了解更底层的知识才能够解决问题,那么,他可能没有做好他应尽的职责。

我们每个程序员或许都有一个梦,那就是成为大牛,我们或许都沉浸在各种框架中,以为框架就是一切,以为应用层才是最重要的,你错了。在当今计算机行业中,会应用是基本素质,如果你懂其原理才能让你在行业中走的更远,而计算机基础知识又是重中之重。下面,跟随我的脚步,为你介绍一下计算机底层知识。

第一份笔记、底层知识笔记

大纲

 

目录

 

 

CPU

大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和CPU打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算机最核心的- CPU

CPU是什么

CPU的全称是Central Processing Unit ,它是你的电脑中最硬核的组件,这种说法一点不为过。CPU是能够让你的计算机叫计算机的核心组件,但是它却不能代表你的电脑,CPU与计算机的关系就相当于大脑和人的关系。它是一种小型的计算机芯片,它嵌入在台式机、笔记本电脑或者平板电脑的主板。上。通过在单个计算机芯片上放置数十亿个微型晶体管来构建CPU。这些晶体管使它能够执行运行存储在系统内存中的程序所需的计算,也就是说CPU决定了你电脑的计算能力。

CPU的内部结构

 

 

标志寄存器

 

内存的物理结构

在了解一个事物之前,你首先得先需要见过它,你才会有印象,才会有想要了解的兴趣,所以我们首先需要先看一下什么是内存以及它的物理结构是怎样的。

 

 

内存的现实模型

为了便于记忆,我们把内存模型映射成为我们现实世界的模型,在现实世界中,内存的模型很想我们生活的楼房。在这个楼房中,1层可以存储一个字节的数据,楼层号就是地址,下面是内存和楼层整合的模型图

 

 

内存的使用

 

链表

下面我们来介绍一下链表和二叉树它们都是可以不用考虑索引的顺序就可以对元素进行读写的方式。通过使用链表,可以高效的对数据元素进行添加和删除操作。而通过使用二叉树,则可以更高效的对数据进行检索

 

 

二叉树

二叉树也是一种检索效率非常高的数据结构,二叉树是指在链表的基础上往数组追加元素时,考虑到数组的大小关系,将其分成左右两个方向的表现形式。假如我们把50这个值保存到了数组中,那么,如果接下来要进行值写入的话,就需要和50比较,确定谁大谁小,比50数值大的放右边,小的放左边,下图是二叉树的比较示例

 

为什么用二进制表示

 

 

便于计算机处理的补数

 

算数右移和逻辑右移的区别

 

逻辑运算的窍门

 

哈夫曼算法和莫尔斯编码

下面我们来介绍另外一种压缩算法,即哈夫曼算法。在了解哈夫曼算法之前,你必须舍弃半角英文数字的1个字符是1个字节(8位)的数据下面我们就来认识一下哈夫曼算法的基本思想。

 

用二叉树实现哈夫曼算法

刚才已经提到,莫尔斯编码是根据日常文本中各字符的出现频率来决定表示各字符的编码数据长度的。不过,在该编码体系中,对AAAAAABBCDDEEEEEF这种文本来说并不是效率最高的。

下面我们来看一下哈夫曼算法。哈夫曼算法是指,为各压缩对象文件分别构造最佳的编码体系,并以该编码体系为基础来进行压缩。因此,用什么样的编码(哈夫曼编码)对数据进行分割,就要由各个文件而定。用哈夫曼算法压缩过的文件中,存储着哈夫曼编码信息和压缩过的数据。

 

 

认识磁盘

首先,磁盘和内存都具有存储功能,它们都是存储设备。区别在于,内存是通过电流来实现存储; 磁盘则是通过磁记录技术来实现存储。内存是一种高速,造假昂贵的存储设备;而磁盘则是速度较慢、造假低廉的存储设备;电脑断电后,内存中的数据会丢失,而磁盘中的数据可以长久保留。内存是属于内部存储设备,硬盘是属于外部存储设备。一般在我们的计算机中,磁盘和内存是相互配合共同作业的。

程序不读入内存就无法运行

在了解磁盘前,还需要了解一下内存的运行机制是怎样的, 我们的程序被保存在存储设备中,通过使用CPU读入来实现程序指令的执行。这种机制称为存储程序方式,现在看来这种方 式是理所当然的,但在以前程序的运行都是通过改变计算机的布线来读写指令的。

计算机最主要的存储部件是内存和磁盘。磁盘中存储的程序必须加载到内存中才能运行,在磁盘中保存的程序是无法直接运行的,这是因为负责解析和运行程序内容的CPU是需要通过程序计数器来指定内存地址从而读出程序指令的。

 

Windows操作系统克服了CPU以外的硬件差异

 

 

可以使用虚拟机获取其他环境

 

 

操作系统功能的历史

操作系统其实也是一种软件,任何新事物的出现肯定都有它的历史背景,那么操作系统也不是凭空出现的,肯定有它的历史背景。

 

 

操作系统和高级编程语言使硬件抽象化

通过使用操作系统提供的系统调用,程序员不必直接编写控制硬件的程序,而且,通过使用高级编程语言,有时也无需考虑系统调用的存在,系统调用往往是自动触发的,操作系统和高级编程语言能够使硬件抽象化,这很了不起。

 

 

汇编语言的语法是操作码+操作数

在汇编语言中,一行表示一对CPU的一个指令。汇编语言指令的语法结构是操作码+操作数,也存在只有操作码没有操作数的指令

 

 

 

临时确保局部变量使用的内存空间

 

外围设备的中断请求

IRQCInterrupt Request) 代表的就是中断请求。IRQ用来暂停当前正在运行的程序,并跳转到其他程序运行的必要机制。该机制被称为处理中断。中断处理在硬件控制中担当着重要的角色。因为如果没有中断处理,就有可能无法顺畅进行处理的情况。

 

利用DMA实现短时间内大量数据传输

 

由于内容涉及较为全面,所以就不一一介绍了..............Σ( ° △ °|||)︴.....完整笔记请看文末

第二份笔记、网络是怎样连接的

探索之旅路线图

 

 

目录大纲

 

 

 

 

由于笔记章节实在过多过长,内容涉及太全就不一一展现出来了Σ( ° △ °|||)︴

第一章、浏览器生成消息

  • 生成HTTP请求消息
  • 向DNS服务器查询Web服务器的IP地址
  • 全世界DNS服务器的大接力
  • 委托协议栈发送消息

浏览器并不会亲自负责数据的传送。传送消息是搬运数字信息的机制负责的工作,因此浏览器会委托它将数据发送出去。具体来说,就是委托操作系统中的网络控制软件将消息发送给服务器。第1章中,我们会探索到浏览器将数据委托出去为止。

 

HTTP的基本思路

 

IP地址的基本知识

 

解析器的内部原理

 

寻找相应的DNS服务器并获取IP地址

 

第二章、用电信号传输 TCP/IP数据

  • 创建套接字
  • 连接服务器
  • 收发数据
  • 从服务器断开并删除套接字
  • IP与以太网的包收发操作
  • UDP协议的收发操作

第1章,我们从解析浏览器中输入的网址开始,探索了生成HTTP请求消息、委托操作系统发送消息等步骤。本章,我们将讲解操作系统中的协议栈是如何处理数据发送请求的。第1章介绍了发送消息的场景,接下来我们将视角切换到协议栈的内部来继续探索吧。

 

协议栈的内部结构

 

根据网络包平均往返时间调整ACK号等待时间

 

使用窗口有效管理ACK号

 

 

通过ARP查询目标路由器的MAC地址

 

给网络包再加3个控制数据

 

第三章、从网线到网络设备

  • 信号在网线和集线器中传输
  • 交换机的包转发操作
  • 路由器的包转发操作
  • 路由器的附加功能

上一章,我们探索了客户端中的协议栈和网卡,介绍了发送网络包,也就是将网络包转换成电信号通过网线传输出去的过程。本章我们将继续跟着上一章的脚步,看一看通过网线传输出去的包是如何经过集线器、交换机和路由器等网络设备,最终进入互联网的。

"双绞”是为了抑制噪声

 

自动协商:确定最优的传输速率

 

地址转换的基本原理

 

第四章、通过接入网进入互联网内部

  • ADSL接入网的结构和工作方式
  • 光纤接入网(FTTH)
  • 接入网中使用的PPP和隧道
  • 网络运营商的内部
  • 跨越运营商的网络包

上一章,我们探索了从客户端计算机发送的网络包通过家庭和公司局域网中的集线器和路由器前往目的地的过程。本章,我们来看一看同络包是如何通过互联网接入路由器,最终进入互联网内部的。

连接用户与互联网的接入网

 

分离器的作用

 

单模与多模

 

通过光纤分路来降低成本

 

在以太网上传输PPP消息

 

POP和NOC

 

第五章、服务器端的局域网中有什么玄机

  • Web服务器的部署地点
  • 防火墙的结构和原理
  • 通过将请求平均分配给多台服务器来平衡负载
  • 使用缓存服务器分担负载
  • 内容分发服务

上一章,我们探索了网络包在进入互联网之后,通过通信线路和运营商网络到达服务器POP端的过程。接下来,网络包将继续朝服务器前进,并通过服务器前面的防火墙、缓存服务器、负载均衡器等。本章我们将对这部分进行探索。

 

将Web服务器部署在数据中心

 

使用负载均衡器分配访问

 

缓存服务器通过更新时间管理内容

 

利用内容分发服务分担负载

 

第六章、请求到达Web服务器响应返回浏览器

上一章,我们探索了Web服务器前面的防火墙、缓存服务器、负载均衡器等设备,现在网络包已经通过这些设备,到达了Web服务器中。本章的探索之旅就从这里开始。

服务器端的套接字和端口号

 

将请求的URI转换为实际的文件名

 

网络包的旅程

 

网络包的旅程( 续)

 

从输入网址到显示出网页内容,这个过程只有短短几秒的时间。然而,正如本书所讲,在这短短几秒的背后,离不开各种设备和软件的相互配合。我们在探险之旅中所涉猎的这些内容已经十分复杂了,但这还仅仅是网络世界的一小部分而已,还有很多内容我们无法讲解,如果深人挖掘其中一些细节也是难以穷尽的。网络的复杂度由此可见一斑。

 

这份【底层知识宝典】【网络是怎样连接的】笔记文档分别为100+、366页,需要完整版的朋友,可以转发此文关注小编,私信小编【666】来获取!!

当然,单单有文档看是远远不够的,还有视频和相匹配的课件进行学习提升,努力把计算机网络这一块儿给搞明白,相信一定会有不凡的人生!!

HTTP/TCP/IP/网络IO学习视频

 

 

 

 

还有课件分享

TCP

 

IO课件

 

TCP/IP

 

TCP/IP/IO网络通信视频和课件获取,转发关注小编,添加小助理获取!

好了,今天就分享到这里了,希望大家能够好好学习,把计算机网络这一块儿给提升上来,也希望本文能够得到大家的喜欢!!