当前位置: 首页 > news >正文

[Python学习日记-75] 计算机基础与网络

[Python学习日记-75] 计算机基础与网络

简介

计算机基础

什么是网络编程

计算机网络

简介

        本篇主要介绍的计算机基础是浓缩的,这是因为我们主要学习的是 Python,而 Python 主要是为了开发应用程序的,并不会用它来开发操作系统和嵌入式程序(因为这两类软件都更加偏向于底层,通常会使用 C、C++ 来进行开发),所以并没有全面的介绍计算机系统基础知识,介绍的更多的是我们平时使用的 PC 和服务器,而且会更加偏向于介绍应用软件与操作系统、PC 与 服务器之间的联系,当然因为是网络编程,所以开发人员对于网络要有基本的认识是非常重要的一件事。

计算机基础

        电脑目前已经是走进千家万户的状态了,身边的人几乎没有人说自己完全没见过电脑,但是除了计算机行业的从业者或者是爱好者外基本都只是停留在上网冲浪的阶段,而我们作为开发人员应该更加深入的了解计算机是如何组成以及上面所搭载的计算机软件是如何与硬件进行交互的。

        计算机系统(Computer System)是指用于数据管理的计算机硬件、软件及网络组成的系统。它是按人的要求接收和存储信息,自动进行数据处理和计算并输出结果信息的机器系统。人们在谈及计算机系统时,一般指由硬件子系统和软件子系统组成的系统简称为计算机。而将连接多个计算机以实现计算机间数据交换能力的网络设备,则称之为计算机网络,简称网络。

        计算机系统可划分为硬件(子系统)和软件(子系统)两部分。硬件由机械、电子元器件、磁介质和光介质等物理实体构成,例如处理器(含运算单元和控制单元)、存储器、输入设备和输出设备等。软件是一系列按照特定顺序组织的数据和指令,并控制硬件完成指定的功能。可将计算机软件进一步分为系统软件和应用软件,系统软件是指支持应用软件的运行,为用户开发应用软件提供平台支撑的软件,而应用软件是指计算机用户利用计算机的软、硬件资源为某一专门的应用目的而开发的软件。典型的计算机系统组成如下图

9d184969206a4ef58347fd00446b958d.png

        从存在形式上看,计算机硬件是有形的,而软件是无形的;从计算机功能来看,硬件与软件的界限正在逐渐模糊。在不同的应用场合,基于设计考虑,某些功能可能由硬件实现,也可能由软件实现。比如,较典型的可编程逻辑,它在设计阶段可作为软件对待,但运行中则是以逻辑门的物理形态而存在。

        众所周知,我们如果想要播放一个电影,而我们的电影应该是存在硬盘里面的,然后调用到应用软件里面进行播放的,那么中间这个调用的动作应该是由谁来进行的呢?没错就是由操作系统来执行的,以暴风影音为例过程如下:用户打开暴风音影,双击打开相应电影,暴风音影接收到输入,调用操作系统对应接口,然后操作系统操作硬盘指针到指定的扇区读取相应的数据,最后操作系统返回结果给暴风影音,这样就成功打开电影了。

2b0d5f7d4baf4486a6e0e567c376f816.png

        在这个过程当中我们很明显的可以看出,操作系统就是一个相当于中介这样的角色。有的小伙伴就有个疑问了,我们可以不通过操作系统,让应用程序直接操作硬件吗?行,但是不建议,应用程序想要操控硬件的时候是不是要用专门的语言代码(C、C++、汇编...)来对操控,这样除了要开发应用程序外我们还需要额外开发一个控制器程序来操控硬件,结构如下图所示

b899591f8e3640cb90f80243d6bf954a.png

        在这里你可以把控制器看作是应用程序开发的一个子功能,不过现在又面临一个问题,当我们想要再开发多一个 Office 的应用程序来解决文档编辑的问题时我们还要在开发应用程序的同时还要兼顾开发相应的控制器来操控硬件,这样应用程序才能成功的应用在这堆硬件上。我们不妨往前看一看会发现,Office 和暴风音影这两个不同功能的应用程序对于硬件的操控上面却有着很多的相同点,例如都会从硬盘里面读写数据,都会在显示器上面输出信息。那这就说明了在开发这两个不同功能的应用程序的控制器上面存在着重复造轮子的事情,而且开发控制器并不是一件简单的事。所以慢慢的人们就把各类的控制器功能整合起来,这就变成了我们现在所能看到的操作系统。而我们开发应用程序只需要直接调用操作系统预先给我们做好的接口即可,并不需要我们再进行控制器的开发。到这里我们对于目前的计算机系统有了个初步的认识,并且知道了应用程序并不能直接操控硬件,而是需要通过操作系统进行操控,这点在往后的开发当中非常重要。

        

什么是网络编程

        网络编程是指通过计算机网络进行数据传输和通信的编程技术。它涉及到在网络上建立连接、发送和接收数据、实现网络通信协议等方面的开发工作。这类开发我们经常能碰到,包括你现在在看的博客和平常用的微信也是网络编程的一种,常见的网络架构模式有 B/S(Browser/Server,浏览器到服务器)和 C/S(Client/Server,客户端到服务器)。

        C/S 架构是一种传统的网络架构模式,相对于 B/S 架构而言有性能、离线工作、客户端自由度高等优势,在 C/S 架构中,客户端和服务器端都需要编写相应的代码。客户端开发常用的开发语言有 Java、C#、C++ 等,主要负责用户界面设计、用户交互逻辑、数据展示等任务;服务器端开发常用的编程语言有 Java、C#、Python 等,主要负责接收和处理客户端的请求,进行数据存取、业务逻辑处理等任务。

        B/S 相对于 C/S 而言是 C/S 的改进型,有跨平台、维护方便、数据安全性高等优势,在 B/S 架构当中可以分为前后端开发,前端开发涉及到了多种技术,包括但不限于 HTML、CSS、JavaScript 等,主要负责页面设计、用户交互、数据展示等任务;后端开发会涉及到 Java、C#、Python 等,主要负责处理用户请求、数据存取、业务逻辑处理等任务。

        而我们在后面的学习当中将会先以写出 C/S 架构的软件为目标,我们先来了解一下 C/S 架构是如何运作的,如下图所示

87ddf7b393a1414db8706fabe7c40d6a.png

        结合上图和上文,我们知道想要开发一个 C/S 架构的软件则需要开发出两个软件,即客户端软件和服务器端软件,而中间通过网络来进行通信。既然需要通过网络来通信那就一定会用到一个硬件,那就是网卡了,从计算机基础的介绍我们得知应用程序是通过操作系统来操控硬件的,所以这里的客户端和服务器端都是通过自己的操作系统来操控网卡发送数据到网络的,而在这其中网络到底是什么呢?而作为应用程序开发人员也不需要了解太深入(关于网络的搭建等等的都是网络工程师干的活),我们只需要了解一些应用层和传输层的传输协议即可。

计算机网络

        计算机网络是利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,并依靠网络软件及通信协议实现资源共享和信息传递的系统。计算机网络技术主要涵盖通信技术、网络技术、组网技术和网络工程等四个方面。而作为应用开发人员我们接触比较多的是组网技术当中的网络协议,这是因为我们在编程的时候会通过调用这些协议来进行网络通信。

一、网络的发展

        纵观计算机网络发展,其大致经历了诞生、形成、互联互通和高速发展等4个阶段。

1、诞生阶段

        20世纪60年代中期之前的第一代计算机网络是以单个计算机为中心的远程联机系统,典型应用是由一台计算机和全美范围内2000多个终端组成的飞机订票系统,终端是一台计算机的外围设备,包括显示器和键盘,无 CPU 和内存。随着远程终端的增多,在主机之前增加了前端机(FEP)。当时,人们把计算机网络定义为“以传输信息为目的而连接起来,实现远程信息处
理或资源共享的系统”,这样的通信系统已具备网络的雏形。

2、形成阶段

        20世纪60年代中期至70年代的第二代计算机网络,是以多个主机通过通信线路互联起来为用户提供服务。它兴起于20世纪60年代后期,典型代表是美国国防部高级研究计划局协助开发的 ARPANET。主机之间不是直接用线路相连,而是由接口报文处理机(IMP)转接后互联的。IMP 和它们之间互联的通信线路一起负责主机间的通信任务,构成了通信子网。通信子网互联的主机负责运行程序,提供资源共享,组成资源子网。这个时期,网络概念为“以能够相互共享资源为目的互联起来的具有独立功能的计算机之集合体”,形成了计算机网络的基本概念。

3、互联互通阶段

        20世纪70年代末至90年代的第三代计算机网络是具有统一的网络体系结构并遵守国际标准的开放式和标准化网络。ARPANET 兴起后,计算机网络发展迅猛,各大计算机公司相继推出自己的网络体系结构及实现这些结构的软硬件产品。由于没有统一的标准,不同厂商的产品之间互联很困难,人们迫切需要一种开放性的标准化实用网络环境,因此产生了两种国际通用的最重要的体系结构,即 TCP/IP 体系结构和国际标准化组织的 OSI 体系结构。

4、高速发展阶段

        20世纪90年代至今的第四代计算机网络,由于局域网技术发展成熟,出现光纤及高速网络技术,整个网络就像一个对用户透明的庞大的计算机系统,发展为以因特网(Internet)为代表的互联网。

二、网络协议

        在介绍互联网协议之前我们先来举个例子,在中国每个地方都有自己的方言,例如广东有粤语,福建有闽南话,西藏有藏语等等,以前每个地方的人都只会说自己的方言,在本地生活可能没什么困难的,但是一涉及到需要出省的时候就出现语言不通的困难了,这个时候就轮到普通话出场了;普通话作为全国统一的语言,即一个统一的语言标准,可以说去到哪里大家都能听得懂对方讲话,这样国内不同地方的人相互交流那就没什么问题了,但是世界那么大你总想出去看看吧,每个国家都有类似的情况,这时候英语就登场了;英语目前作为全球通用语言来使用,即一个全球统一的语言标准,也就是说理想情况是全球所有人都应该会英语。然而现实世界总是没有那么理想的,全球人不是人人都会英语,全国人也不是所有人都会普通话,不过在计算机世界就不是这样一个说法了,特别是在特别强调互联互通的网络世界。我们将现实世界中的语言系统映射到网络世界当中,网络协议就是现实世界当中的英语,简单来说就是全世界所有计算机的网络连接都需要遵循网络协议才能进行互联互通。而网络协议当中分为了两种模型和两种协议集,即开放系统互联参考模型(OSI/RM)、TCP/IP(Transmission Control Protocol / Internet Protocol)参考模型和 OSI 协议集、TCP/IP 协议集。

1、开放系统互联参考模型

        开放系统是指遵从国际标准的、能够通过互连而相互作用的系统。系统之间的相互作用只涉及系统的外部行为,而与系统内部的结构和功能无关。国际标准化组织(International Standard Organization,ISO)公布了开放系统互连参考模型(OSI/RM)。OSI/RM 为开放系统互连提供了一种功能结构的框架。OSI/RM 是一种分层的体系结构,参考模型共有7层(所以也被叫做 OSI 7层模型),分层的基本想法是每一层都在它的下层提供的服务基础上提供更高级的增值服务,而最高层提供能运行分布式应用程序的服务。这样,通过分层的方法将复杂的问题分解,并保持层次之间的独立性。OSI/RM 的网络体系结构如下图所示

1.1 应用层

        应用层在 OSI 7层模型中是为应用软件提供接口,使应用程序能够使用网络服务,我们所写的 Python 程序通常就是运作在这一层,常见的应用层协议:http(80)、https(443)、dns(53)、ftp(20/21)、smtp(25)、pop3(110)、telnet(23)。

1.2 表示层

        表示层是对数据进行解码和编码、加密和解密、压缩和解压缩的,常见的格式有:

  • 图片:jpg、gif...
  • 音频:mp3、wma、aac...
  • 视频:mp4、avi...

1.3 会话层

        会话层负责建立、管理和终止表示层实体之间的会话连接,以及在设备或节点之间提供会话控制,协调通信过程,并提供3种不同的方式来组织它们之间的通信,分别为:单工、半双工、全双工。

1.4 传输层

        传输层负责建立端到端的连接,保证报文在端到端之间的传输。它拥有服务点编址、分段与重组、连接控制、流量控制、差错控制的功能。在传输层当中只有两个协议,即 TCP 和 UDP,TCP 和 UDP 将会在后面介绍 TCP/IP 协议集的时候进行详细介绍。

         传输层主要负责的就是端口号,一个端口号就代表了一个应用程序,而一个 IP 地址就拥有 65535个端口,而端口号也是有不同的类型的,类型分类如下

  • Well Know Ports:0~1023,已划分给特定协议,不能随意使用
  • Registered Ports:1024~49511,可以有限地去使用
  • Private / Dynamic Ports:49512~65535,可以随意使用

        关于 TCP/UDP 常用端口列表:

  • Service Name and Transport Protocol Port Number Registry
  • TCP/UDP 常用端口列表(中文)

        当客户端对服务器端进行访问时源端口(客户端)随机分配,客户端使用的源端口号一般为系统中未使用的且大于1023的端口;目的端口(服务器端)使用知名端口(例如80、443之类的),目的端口号为服务器端应用服务的进程,即一个端口号就可以代表了一个应用程序。

1.5 网络层

        网络层是为网络设备提供逻辑地址(例如IP),从而进行路由选择、维护路由表,并负责将分组数据从源端传输到目的端,在这一层的代表就是路由器和三层交换机。

        IP 目前有两个版本,分别为 IPv4(32位)和 IPv6(128位) ,其 IP 报头如下

  •  TTL:生存周期,每经过一次路由将会减1,TTL值为0则丢弃该数据包

        常见的 IP 协议有:ICMP(1)、OSPF(89)、EIGRP(88) 。

        IP 地址就像是你所住大楼的地址,当客户端对服务器端进行访问时,客户端的 IP 地址可以是随便一个,而服务器端的 IP 地址一定是要固定的,不然客户端将会无法访问服务器端。

1.6 数据链路层

        数据链路层是在不可靠的物理链路上,提供可靠的数据传输服务,把帧从一跳(结点)移动到另一跳(结点),在这里面主要涉及到 MAC 地址与 IP 地址之间的相互转换,在这里面涉及到的协议就是 ARP 和 RARP,前者是从 IP 地址转换为 MAC 地址,而后者则是反过程,即从 MAC 地址转换为 IP 地址。它拥有组帧、物理编址、流量控制、差错控制、接入控制,在这一层的代表就是交换机。

1.7 物理层

        物理层负责把逐个的比特从一跳(结点)移动到另一跳(结点)。它可以定义接口和媒体的物理特性(线序、电压、电流),定义比特的表示、数据传输速率、信号的传输模式,定义网络物理拓扑(网状、星型、环型、总线型等拓扑),在这一层的代表就是集线器。

2、OSI 协议集

        国际标准化组织除了定义开放系统互连(Open System Interconnection,OSI)参考模型,还开发了实现7个功能层次的各种协议和服务标准,通称为 OSI 协议。与其他协议一样,OSI 协议是实现某些功能的过程描述和说明。每一个 OSI 协议都详细地规定了特定层次的功能特性 OSI 协议集如下表所示

网络分层协议集
应用层VTDSFTMACNIP/CMISMHSANS.1
ACSE,RTSE,ROSE,CCR
表示层OSI 表示层协议
会话层OSI 会话层协议
传输层TP0,TP1,TP2,TP3,TP4
网络层ES-IS,IS-IS
X.25 PLPCLNP
数据链路层IEEE 802.2HDLC PAP-B
物理层802.3 802.4 802.5 FDDIRS-232 RS-449 X-21 V.35 ISDN

常见协议如下:

3、TCP/IP 协议集

        TCP/IP(Transmission Control Protocol / Internet Protocol)作为 Internet 的核心协议,已被广泛应用于局域网和广域网中,TCP/IP 的主要特性为逻辑编址、路由选择、域名解析、错误检测和流量控制以及对应用程序的支持等。TCP/IP 是个协议族,主要包括因特网协议(IP)、传输控制协议(TCP)、用户数据报协议(UDP)、虚拟终端协议(TELNET)、文件传输协议(FTP)、电子邮件传输协议(SMTP)、网上新闻传输协议(NNTP)和超文本传送协议(HTTP)等8个。

        而 TCP/IP 参考模型其实就是把 OSI 7层模型中用户层面(应用层、表示层、会话层)都整合为一个应用层,以及数据链路层和物理层都整合为网络接口层,故总层数为4层,也被称为 TCP/IP 4层模型,分别为应用层、传输层、网际层和网络接口层。TCP/IP 4层模型也是现在实际使用最多的模型,在后面的学习中主要用到的也是这一个模型。

        对于网络访问层,在 TCP/IP 参考模型中并没有详细描述,只是指出主机必须使用某种协议与网络相连。网际层是整个 TCP/IP 体系结构的关键部分,其功能是使主机可以把分组发往任何网络,并使分组独立地传向目标。传输层使源端和目的端机器上的对等实体可以进行会话。这一层定义了两个端到端的协议:传输控制协议(TCP)和用户数据报协议(UDP)。

3.1 TCP

        TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。它负责在网络中可靠地传输数据,并提供流量控制、拥塞控制和错误恢复等功能。使用 TCP 的应用有:Web 浏览器、电子邮件、文件传输程序等。

        有一个关于 TCP 的一个笑话:

A:我想听一个 TCP 的笑话

B:你好,你想听 TCP 的笑话么?

A:嗯,我想听一个 TCP 的笑话 。

B:好的,我会给你讲一个 TCP 的笑话。

A:好的,我会听一个 TCP 的笑话 。
B:你准备好听一个 TCP 的笑话么?

A:嗯,我准备好听一个 TCP 笑话

B:Ok,那我要发 TCP 笑话了。大概有10 秒,20个字 。
A:嗯 ,我准备收你那个10秒时长,20个字的笑话了。

B:抱歉,你的连接超时了。你好,你想听 TCP 的笑话么 ?

        不知道你 get 到这个笑话的笑点没有,在这个笑话当中可以感受到 A 和 B 之间在不停地反复确认,TCP 就是会有这个特征,这也是为什么它会被称为可靠的原因之一,我们先来看看 TCP 头部的组成,如下

  • URG(Urgent):表示紧急指针有效,需要尽快处理
  • ACK(Acknowledgment):表示确认号有效,ACK=1 通常表示这是一个确认数据段
  • PSH(Push):表示推送数据,当PSH被设置时,接收方应该尽快将接收到的数据交给应用层进行处理
  • RST(Reset):表示复位连接,通常在连接遇到问题时,重置连接用于重新建立
  • SYN(Synchronize):表示发起连接,在建立连接时,通信双方会通过发送和接收 SYN 标志来进行握手
  • FIN(Finish):表示结束连接,在关闭连接时,通信双方会通过发送和接收 FIN 标志来进行握手

        TCP 在数据传输前需要建立一个连接,并且在数据传输完成后需要断开连接。而这里的建立连接就涉及到了 TCP 三次握手了,而传输完成后的断开连接则涉及到 TCP 四次释放,如下图所示

        TCP 三次握手过程如下:

TCP 四次释放过程如下:

        在数据传输过程中,TCP 会将数据分成多个小的数据包,并按顺序发送到目标主机。如果有数据包丢失或损坏,TCP协议会重新发送丢失的数据包,确保数据的完整性。但是网络难免会发生波动,所以 TCP 拥有滑动窗口机制来应对该状况,使得 TCP 能够根据实际网络状况动态地调整传输速率,并保证数据的可靠性和完整性,具体过程如下

        滑动窗口机制的基本思想是发送方维护一个发送窗口,其中包含已发送但未收到确认的数据,发送窗口的起始位置由发送方维护的一个变量来表示。接收方维护一个接收窗口,其中包含已收到但未被接收方应用程序处理的数据,接收窗口的起始位置由接收方维护的一个变量来表示。发送方根据接收方的窗口大小来决定发送数据的数量和速率。一旦接收方收到数据并进行确认,接收窗口的起始位置就会向前滑动,表示已接收的数据已经被接收方应用程序处理。然后发送方再根据收到的确认数来进行发送,这样就能保证接收方时刻都有数据在缓冲区待处理,从而减少网络波动的影响。

        由于滑动窗口机制的存在,发送端和接收端都有一个窗口大小的值,表示可以发送或接收的数据的数量。所以在传输过程中 TCP 还会存在窗口确认的过程,接收端通过向发送端发送确认窗口大小的值,来告知发送端自己当前的接收能力。具体过程如下图所示

3.2 UDP

        UDP(User Datagram Protocol,用户数据报协议)是一种面向无连接的、不可靠的(尽力传递)传输层协议。它与TCP相比,没有建立连接和断开连接的过程,也不提重传机制、供流量控制和拥塞控制等功能,并且只提供基本的传输层功能,不过它因为数据包头较小而且没有网络管理流量,所以可以提供低开销数据传输。使用 UDP 的应用有:域名系统(DNS)、视频流、IP语音(VoIP)、简单网络管理协议(SNMP)、动态主机配置协议(DHCP)、路由信息协议(RIP)、简单文件传输协议(TFTP)、网络游戏等。

3.3 数据的分段和重组

        为保证所传输数据的大小符合传输介质的限制要求,并确保不同应用程序发出的数据能在介质中多路传输,TCP 和 UDP 处理数据段的方式都会不同。

TCP: 

         TCP 的数据段重组是指在接收端将分散的 TCP 数据段重新组装成完整的数据流的过程。在这个过程当中将会使用序列号,其是为了应对在传输的过程中可能会使才分后的数据段到达的先后顺序不同导致的乱序,过程如下图所示

UDP:

        UDP 的数据段重组仅仅是将接收到的数据按照先来后到的顺序转发到应用程序,过程如下图所示

4、ISO/OSI 模型与 TCP/IP 模型的对比

ISO/OSI 模型TCP/IP 协议TCP/IP 模型
应用层文件传输协议 FTP远程登录协议 Telnet电子邮件协议 SMTP网络文件服务协议 NFS网络管理协议 SNMP应用层
表示层
会话层
传输层TCPUDP传输层
网络层IPICMPARP    RARP网际层
数据链路层Enternet IEEE 802.3FDDIToken-Ring/IEEE 802.3 硬件层ARCnet

PPP/

SLIP

网络接口层
物理层硬件层

        如上表所示,TCP/IP 分层模型由4个层次构成,即应用层、传输层、网际层和网络接口层。网际层定义的协议除了 IP 外,还有 ICMP(Internet Control Message Protocol)、ARP(Address Resolution Protocol)和 RARP(ReverseAddress Resolution Protocol)等几个重要协议。应用层的协议有 NFS(Network File Serve)、Telnet、SMTP(Simple Mail Transport Protocol)、SNMP(Simple Network Management Protocol)和 FTP(File Transfer Protocol)等。
        Internet 的地址主要有两种表示形式:域名格式和 IP 地址格式。域名和 IP 地址是一一对应的。其中 IP 协议版本号为4的,称之为 IPv4;IP 协议版本号为6时,称之为 IPv6。
        WWW(World Wide Web)也称万维网,是指在因特网上以超文本为基础形成的信息网。它采用统一的资源定位器(Uniform Resource Locator,URL)和图文声并茂的用户界面,可以方便地浏览 Internet 上的信息和利用各种网络服务。互联网常用的服务包括域名服务(Domain Name Server,DNS)、WWW 服务、E-mail 电子邮件服务、FTP 文件传输服务、Telnet 远程登录服务、Gopher 等等。

三、网络的运作

        在客户端和服务器端之间通过网络传输的过程如下

        在 OSI 7层模型当中数据包是经过从上到下层层封装后才能通过传输介质来进行传输的,每一层都把上层的协议包当成数据部分,加上自己的协议头部,组成自己的协议包。当客户端进行数据封装时,具体过程如下图所示

        当服务器端接收到数据包后也会逐层进行解封装,具体过程如下图所示

相关文章:

[Python学习日记-75] 计算机基础与网络

[Python学习日记-75] 计算机基础与网络 简介 计算机基础 什么是网络编程 计算机网络 简介 本篇主要介绍的计算机基础是浓缩的,这是因为我们主要学习的是 Python,而 Python 主要是为了开发应用程序的,并不会用它来开发操作系统和嵌入式程序…...

【机器学习:六、特征工程】

1. 特征工程背景意义 在机器学习中,特征工程是模型成功的关键之一。无论算法多么先进,其性能都很大程度上依赖于输入数据的质量。特征工程是指对原始数据进行处理,以创建更适合算法的特征的过程。这一过程在以下方面具有重要意义&#xff1a…...

webpack打包要义

webpack基本 Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它的工作原理可以概括为以下几个核心步骤: 1. 入口起点(Entry) Webpack 从配置文件中指定的入口文件(Entry Point)开始,分析应用…...

Mybatis——Mybatis开发经验总结

摘要 本文主要介绍了MyBatis框架的设计与通用性,阐述了其作为Java持久化框架的亮点,包括精良的架构设计、丰富的扩展点以及易用性和可靠性。同时,对比了常见持久层框架,分析了MyBatis在关系型数据库交互中的优势。此外&#xff0…...

013:深度学习之神经网络

本文为合集收录,欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 深度学习是机器学习中重要的一个学科分支,它的特点就在于需要构建多层且“深度”的神经网络。 人们在探索人工智能初期,就曾设想构建一个用数学方式…...

Java 模板变量替换——字符串替换器(思路Mybatis的GenericTokenParser)

Java 模板变量替换——字符串替换器(思路Mybatis的GenericTokenParser) 思路字符串替换器 思路 模板变量替换无非是寻找出字符串(模板)中的特殊标记,用对应的变量进行字符串替换。 提到变量替换,大家第一能…...

蓝桥杯备考:数据结构之栈 和 stack

目录 栈的概念以及栈的实现 STL 的stack 栈和stack的算法题 栈的模板题 栈的算法题之有效的括号 验证栈序列 后缀表达式 括号匹配 栈的概念以及栈的实现 栈是一种只允许在一端进行插入和删除的线性表 空栈:没有任何元素 入栈:插入元素消息 出…...

Lambda离线实时分治架构深度解析与实战

一、引言 在大数据技术日新月异的今天,Lambda架构作为一种经典的数据处理模型,在应对大规模数据应用方面展现出了强大的能力。它整合了离线批处理和实时流处理,为需要同时处理批量和实时数据的应用场景提供了成熟的解决方案。本文将对Lambda…...

Vue.js组件开发,AI时代的前端新玩法

AI可不只是写写小说、聊聊天,现在它的触角已经伸到了程序员的代码世界里。特别是前端开发,很多人都在尝试用ChatGPT或者类似的AI工具来写代码,甚至直接生成Vue.js组件。有些人感叹,"写代码的时代是不是要结束了?&…...

标定 3

标定场景与对应的方式 标定板标定主要应用场景: (1)无法获取到执行机构物理坐标值,比如相机固定,执行机构为传送带等 (2)相机存在畸变等非线性标定情况,需要进行畸变校正 (3)标定单像素精度 (4)获取两个相机之间的坐标系关系 标定板操作步骤: (1)确定好拍…...

电商项目-基于ElasticSearch实现商品搜索功能(三)

本系列文章主要介绍基于 Spring Data Elasticsearch 实现商品搜索的后端代码,介绍代码逻辑和代码实现。 主要实现功能:根据搜索关键字查询、条件筛选、规格过滤、价格区间搜索、搜索查询分页、搜索查询排序、高亮查询。 主要应用技术:canal,…...

【51单片机】03 蜂鸣器-播放音乐

蜂鸣器-播放音乐 一、原理介绍1.硬件电路 二、练习1.让蜂鸣器发声2.尝试演奏小星星 一、原理介绍 蜂鸣器分为有源蜂鸣器、无源蜂鸣器两种。 有源蜂鸣器:施加合适的电压之后就会发出特定频率的声音 无源蜂鸣器:需要提供特定频率的声音信号,才能…...

MySQL 架构

MySQL架构 MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器的连接器。整体架构图如下所⽰: MySQL Connectors:为使⽤…...

XML 解析器:深入解析与高效应用

XML 解析器:深入解析与高效应用 引言 XML(可扩展标记语言)作为一种重要的数据交换格式,被广泛应用于各种系统和平台中。为了有效地处理和解析XML数据,XML解析器发挥着至关重要的作用。本文将深入探讨XML解析器的原理…...

LabVIEW设计 IIR 滤波器

这是一个设计 IIR 滤波器的 LabVIEW 程序框图,其功能主要是用于设计滤波器并计算其频率响应,但它并不直接对输入的波形进行实时滤波,而是提供一个滤波器的频率响应分析工具。 以下是框图中各部分的详细解释: 1. 主要模块功能说明 …...

基于改进粒子群优化的无人机最优能耗路径规划

目录 1. Introduction2. Preliminaries2.1. Particle Swarm Optimization Algorithm2.2. Deep Deterministic Policy Gradient2.3. Calculation of the Total Output Power of the Quadcopter Battery 3.OptimalEnergyConsumptionPathPlanningBasedonPSO-DDPG3.1.ProblemModell…...

AI刷题-数列推进计算任务、数组中的幸运数问题

目录 一、数列推进计算任务 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 优化思路 最终代码: 运行结果: 二、数组中的幸运数问题 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步…...

微服务的配置共享

1.什么是微服务的配置共享 微服务架构中,配置共享是一个重要环节,它有助于提升服务间的协同效率和数据一致性。以下是对微服务配置共享的详细阐述: 1.1.配置共享的概念 配置共享是指在微服务架构中,将某些通用或全局的配置信息…...

【计算机网络】窥探计网全貌:说说计算机网络体系结构?

标签难度考察频率综合题⭐⭐⭐60% 这个问题在计算机网络知识体系中是一个比较重要的问题,只有完整地了解计算机网络的体系结构才能清晰地认识网络的运行原理。 在回答这个问题时,笔者认为有几个比较重要的点: 首先一定要分清楚前置条件&am…...

【MySQL】DATEDIFF()函数使用

DATEDIFF 函数用于计算两个日期之间的差值,以天为单位 DATEDIFF 函数返回一个整数,表示 date1 和 date2 之间的天数。如果 date1 在 date2 之前,结果为负数;如果在 date2 之后,结果为正数;如果相等&#xf…...

计算机网络学习笔记

第1课 绪论、传输介质 【知识点回顾】 两种导线可以减小电磁干扰: 双绞线(分为非屏蔽双绞线、屏蔽双绞线)(RJ-45用)同轴电缆(短距离使用)网络通信的基本单位:位(bit&…...

Spring Boot性能提升的核武器,速度提升500%!

虚拟线程是 Java 21 引入的一个新特性,用于简化并发编程。它与传统的操作系统线程相比,具有显著的优势: 轻量级:虚拟线程由 JVM 管理,而非操作系统,因此它们的内存占用和创建成本远低于传统线程。理论上&am…...

zig 安装,Hello World 示例

1. 安装 Zig 首先,你需要在你的计算机上安装 Zig 编译器。你可以从 Zig 官方网站 下载适合你操作系统的版本。 安装完成后,你可以在终端中运行以下命令来检查 Zig 是否安装成功: zig version如果一切正常,它会显示 Zig 的版本信…...

【数据库系统概论】第5章 数据库完整性【!触发器】

目录 5.1数据库完整性概述 5.2 实体完整性 5.3 参照完整性 5.4 用户定义的完整性 属性上的约束 1. 列值非空(NOT NULL) 2. 列值唯一(UNIQUE) 3. 检查列值是否满足条件(CHECK) 元组上的约束 5.5 完…...

Linux中通过frp实现内网穿透

1、准备工作 准备一台公网服务器(云服务器),推荐阿里云或者腾讯云都可以 需要下载好frp安装包Linux端的和Windows端的安装包 网址:Releases fatedier/frp (github.com)https://github.com/fatedier/frp/releases 2、下载frp_0…...

Vscode辅助编码AI神器continue插件

案例效果 1、安装或者更新vscode 有些版本的vscode不支持continue,最好更新到最新版,也可以直接官网下载 https://code.visualstudio.com/Download 2、安装continue插件 搜索continue,还未安装的,右下脚有个Install,点击安装即可 <...

上海亚商投顾:沪指探底回升微涨 机器人概念股午后爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天探底回升&#xff0c;沪指盘中跌超1.6%&#xff0c;创业板指一度跌逾3%&#xff0c;午后集体拉升翻红…...

LeetCode 3297.统计重新排列后包含另一个字符串的子字符串数目 I:滑动窗口

【LetMeFly】3297.统计重新排列后包含另一个字符串的子字符串数目 I&#xff1a;滑动窗口 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-substrings-that-can-be-rearranged-to-contain-a-string-i/ 给你两个字符串 word1 和 word2 。 如果一个字符串 x 重新…...

ssm旅游攻略网站设计+jsp

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 需要源码或者定制看文章最下面或看我的主页 目 录 目 录 III 1 绪论 1 1.1 研究背景 1 1.2 目的和意义 1 1.3 论文结构安排 2 2 相关技术 3 2.1 SSM框架介绍 3 2.2 B/S结构介绍 3 …...

前端学习-环境this对象以及回调函数(二十七)

目录 前言 目标 环境对象 作用 环境对象this是什么&#xff1f; 判断this指向的粗略规则是什么&#xff1f; 回调函数 目标 常见的使用场景 综合案例&#xff1a;Tab任务栏切换 总结 前言 男儿何不带吴钩&#xff0c;收取关山五十州 目标 能够分析判断函数运行在不…...

计算机网络-数据链路层(虚拟局域网VLAN)

2.6 虚拟局域 2.6.1 虚拟局域网概述 以太网交换机连接的各个网络同属于一个广播域&#xff0c;随着以太网的规模扩大&#xff0c;广播域也会相应的扩大&#xff0c;巨大的广播域会带来巨大的弊端。 广播风暴 难以治理 潜在的安全问题 TCP/IP协议下会进行广播的协议&#xff1a…...

Python贪心

贪心 贪心&#xff1a;把整体问题分解成多个步骤&#xff0c;在每个步骤都选取当前步骤的最优方案&#xff0c;直至所有步骤结束&#xff1b;每个步骤不会影响后续步骤核心性质&#xff1a;每次采用局部最优&#xff0c;最终结果就是全局最优如果题目满足上述核心性质&#xf…...

CSS 盒模型

盒模型 CSS盒模型是网页布局的核心概念之一&#xff0c;它描述了网页元素的物理结构和元素内容与周围元素之间的关系。根据W3C规范&#xff0c;每个HTML元素都被视为一个矩形盒子&#xff0c;这个盒子由以下四个部分组成&#xff1a; 内容区&#xff08;Content area&#xff…...

【linux】vi编辑文件及readonly文件修改读写权限方法

板端vi修改文件&#xff1a; 1、vi 文件路径 vi mnt/eol/config/oem_eol.xml2、按 i进入修改状态&#xff0c;此时可以修改配置文件 3、按 esc退出修改状态&#xff0c;并按"wq!保存 问题&#xff1a;readonly文件无法直接vi修改 方案&#xff1a; 1、mount -o remoun…...

Git使用笔记

Git 版本控制 一、Git 介绍二、Git 使用1. 安装及配置2. 使用方法3. Git 命令3. 历史版本回退4. 分支 (Branch) 三、远程仓库1. SSH公钥连接Gitee2. 推送到远程仓库 一、Git 介绍 常见版本控制软件&#xff1a;集中式&#xff08;CVS、SVN&#xff09;&#xff0c;分布式&#…...

mermaid大全(语法、流程图、时序图、甘特图、饼图、用户旅行图、类图)

⚠️ 有些网站的mermaid可能不完整&#xff0c;因此下面教程中可能有些语法是无效的。 &#x1f60a;亲测Typora软件均可以显示。 1. 介绍 Mermaid是一个基于JavaScript的图表绘制工具&#xff0c;它使用类似Markdown的语法来创建和修改各种类型的图表。以下是关于Mermaid的详…...

慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(二)

3.UI模板 当我们选择一条已经建好的业务对象点击功能按钮【UI模板】进入该业务对象的UI显示配置界面。 右边填写的是UI模板的编码以及对应名称&#xff1b;菜单界面配置以业务对象UI模板编码获取显示界面。 3.1【列表-按钮】 展示的对应业务对象界面的功能按钮配置&#xff1…...

vue3+ts+element-plus 输入框el-input设置背景颜色

普通情况&#xff1a; 组件内容&#xff1a; <el-input v-model"applyBasicInfo.outerApplyId"/> 样式设置&#xff1a; ::v-deep .el-input__wrapper {background-color: pink; }// 也可以这样设置 ::v-deep(.el-input__wrapper) {background-color: pink…...

python迷宫寻宝 第6关 安全策略

地图&#xff1a; 1、体力不足去找终点&#xff0c;体力足则原地不动 import api## 判断是否需要离场的函数 # 体力足返回False&#xff0c;体力不足返回True def should_leave():# 拿到我离终点的距离e_row api.get.exit(what"row")e_col api.get.exit(what"…...

【计算机网络】lab7 TCP协议

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;计算机网络_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 实验目的…...

Monorepo设置:新手指南

Monorepo是一种项目代码管理方法&#xff0c;指在单个代码仓库中管理多个项目&#xff0c;有助于简化代码共享、版本控制、构建和部署的复杂性&#xff0c;并提供更好的可重用性和协作性。 简单理解&#xff1a;所有项目都在一个代码仓库中 &#x1f4e6;&#xff0c;但这并不意…...

HTTP 请求与响应的结构

一、引言 在当今数字化的时代&#xff0c;网络通信如同空气一般无处不在&#xff0c;而HTTP协议则是网络世界中最为重要的基石之一。当我们在浏览器中输入一个网址&#xff0c;轻松浏览网页、观看视频、下载文件或是进行在线购物等操作时&#xff0c;背后HTTP协议都在默默地发…...

计科高可用服务器架构实训(防火墙、双机热备,VRRP、MSTP、DHCP、OSPF)

一、项目介绍 需求分析&#xff1a; &#xff08;1&#xff09;总部和分部要求网络拓扑简单&#xff0c;方便维护&#xff0c;网络有扩展和冗余性&#xff1b; &#xff08;2&#xff09;总部分财务部&#xff0c;人事部&#xff0c;工程部&#xff0c;技术部&#xff0c;提供…...

Soildworks的学习【2025/1/12】

右键空白处&#xff0c;点击选项卡&#xff0c;即可看到所有已调用的选项卡&#xff1a; 点击机械小齿轮选项卡&#xff0c;选择文档属性&#xff0c;选择GB国标&#xff1a; 之后点击单位&#xff0c;选择MMGS毫米单位&#xff1a; 窗口右下角有MMGS&#xff0c;这里也可以选择…...

ORACLE-表空间和分区控制

--查询最后更新的统计信息时间 SELECT table_name, last_analyzed FROM dba_tables WHERE table_name 表名; --更新统计信息 -----按分区 BEGIN DBMS_STATS.GATHER_TABLE_STATS( ownname > XI_SF, -- 模式名称 tabname > 表名, -- 表名称 partnam…...

C# 与 Windows API 交互的“秘密武器”:结构体和联合体

一、引言 在 C# 的编程世界里&#xff0c;当我们想要深入挖掘 Windows 系统的底层功能&#xff0c;与 Windows API 打交道时&#xff0c;结构体和联合体就像是两把神奇的钥匙&#x1f511; 它们能够帮助我们精准地操控数据&#xff0c;实现一些高级且强大的功能。就好比搭建一…...

【数字化】华为-用变革的方法确保规划落地

导读&#xff1a;华为在数字化转型过程中&#xff0c;深刻认识到变革的必要性&#xff0c;并采用了一系列有效的方法确保转型规划的有效落地。华为认为&#xff0c;数字化转型不仅仅是技术层面的革新&#xff0c;更是企业运作模式、流程、组织、文化等深层次的变革。数字化转型…...

SpringData-Redis缓存

Spring Framework是领先的全堆栈Java/JEE应用程序框架。它提供了一个轻量级容器和一个通过使用依赖注入、AOP和可移植服务抽象实现的非侵入性编程模型。 NoSQL存储系统为传统RDBMS提供了一种横向可扩展性和速度的替代方案。就实现而言&#xff0c;键值存储代表NoSQL空间中最大…...

大语言模型兵马未动,数据准备粮草先行

​从OpenAI正式发布ChatGPT开始&#xff0c;大型语言模型&#xff08;LLM&#xff09;就变得风靡一时。对业界和吃瓜群众来说&#xff0c;这种技术最大的吸引力来自于理解、解释和生成人类语言的能力&#xff0c;毕竟这曾被认为是人类独有的技能。类似CoPilot这样的工具正在迅速…...

跳表和Mysql联合索引的最左原则和索引下推的优化

文章目录 跳表&#xff08;Skip List&#xff09;关键特性跳表的结构示意图跳表的查询效率为什么 MySQL 不使用跳表而使用 B 树&#xff1f;跳表的实际应用场景 总结 MySQL 联合索引的最左匹配原则最左匹配原则的规则示例&#xff1a;创建联合索引查询示例及索引使用情况设计联…...