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

java网络编程

计算机网络基础

网络编程的目的就是直接或间接地通过网络协议与其他计算机进行通信。
在 Java 语言中包含网络编程所需要的各种类,编程人员只需要创建这些类的对象,调用相应的方法,就可以进行网络应用程序的编写。

要进行网络程序的编写,编程人员需要对下面5个方面的基础知识有一定的了解:
1.计算机网络
2.网络分类
3.网络编程模式
4.套接字
5.网络通信协议

稍微具体的内容:

  1. 计算机网络
    指将地理位置不同的具有独立功能的多台计算机及其外部设备,
    通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,
    实现资源共享和信息传递的计算机系统。

  2. 网络分类
    按照地理范围主要将网络分为局域网、城域网、广域网和因特网。
    (1) 局域网(LocalArea Network)简称 LAN,是一种在小范围内实现的计算机网络,
    一般在一个建筑物内或者一个工厂、一个事业单位内部独有,范围较小。
    (2) 城域网(Metropolitan Area Network)简称为 MAN,一般是一个城市内部组建的计算机信息网络,提供全市的信息服务。
    (3) 广域网(Wide Area Network)简称为 WAN,它的范围很广,可以分布在一个省、一个国家或者几个国家。
    (4) 因特网(Internet)则是由无数的 LAN 和 WAN 组成的。

  3. 网络编程模式
    在网络通信中主要有两种模式的通信方式:
    一种是客户机/服务器(Client/Server)模式,简称为 C/S 模式;
    另一种是浏览器/服务器(Browser/Server)模式,简称 B/S 模式。
    Client/Server 模式
    客户机、服务器以及网络三者之间的关系图,使用这种模式的程序很多,例如很多读者喜欢玩的网络游戏,
    需要在本机上安装一个客户端,服务器运行在游戏开发公司的机房。
    在这里插入图片描述
    使用 C/S 模式的程序,在开发时需要分别针对客户端和服务器端进行专门开发。
    这种开发模式的优势在于由于客户端是专门开发的,表现力会更强,缺点就是通用性差,
    也就是说一种程序的客户端只能和对应的服务器端进行通信,不能和其他的服务器端进行通信,
    在实际维护中,也需要维护专门的客户端和服务器端,维护的压力较大。
    Browser/Server 模式
    对于很多程序,运行时不需要专门的客户端,而是使用通用的客户端,例如使用浏览器。
    用户使用浏览器作为客户端的这种模式叫作浏览器/服务器模式。
    使用这种模式开发程序时只需开发服务器端即可,开发的压力较小,不需要维护客户端。
    但是对浏览器的限制比较大,表现力不强。

  4. 套接字
    在网络上很多应用程序都是采用客户端/服务器(C/S)的模式,
    实现网络通信必须将两台计算机连接起来建立一个双向的通信链路,
    这个双向通信链路的每一端在Java的网络编程中,我们又称之为一个套接字(Socket)。
    套接字(Socket)是一个抽象出来的概念代表在端上的通信链路。

  5. 网络协议
    网络上的计算机之间要通信,就必须有一些约定,这些约定被称为网络通信协议。
    就像我们说话用某种语言一样,在网络上的各台计算机之间也有一种语言,这就是通信协议,
    不同的计算机之间必须使用相同的通信协议才能进行通信。
    通信协议是由三个要素组成:
    (1) 语义。语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。
    (2) 语法。语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。
    (3) 时序。时序是对事件发生顺序的详细说明。(也可称为“同步”)。
    人们形象地把这三个要素描述为:语义表示要做什么,语法表示要怎么做,时序表示做的顺序。
    通信协议是网络上的设备进行网络通信的基础,这些具体的协议是非常多的,
    在Java的网络编程这部分知识的学习中,我们必须要了解的有关的主要协议,TCP/IP 和 HTTP

协议

(1) TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议):
TCP/IP协议是一个协议集合。大家叫的时候方便说,所以统称为TCP/IP。
在 TCP/IP 中包含一系列用于处理数据通信的协议:
TCP (传输控制协议) - 应用程序之间通信
UDP (用户数据包协议) - 应用程序之间的简单通信
IP (网际协议) - 计算机之间和计算机网络之间的通信
ICMP (因特网消息控制协议) - 针对错误和状态
DHCP (动态主机配置协议) - 针对动态寻址

IP协议:

IP(Internet Protocol)协议,又称网际协议,是TCP/IP协议的核心。
它负责Internet上网络之间的通信,并规定了将数据报从一个网络传输到另一个网络所应遵循的规则。
具体来说,IP协议不但定义了数据传输时的基本单元和格式,还定义了数据报的递交方法和路由选择。此外,在TCP/IP网络中,主机之间进行通信所必需的地址,也是通过IP协议来实现的。
IP地址
要想使网络中的计算机能够进行通信,必须为每台计算机指定一个标识号,
通过这个标识号来指定接受数据的计算机或者发送数据的计算机。

在TCP/IP协议中,这个标识号就是IP地址,它可以唯一标识一台计算机,
目前,IP地址广泛使用的版本是IPv4,它是由4个字节大小的二进制数来表示,如:00001010000000000000000000000001。
由于二进制形式表示的IP地址非常不便记忆和处理,因此通常会将IP地址写成十进制的形式,
每个字节用一个十进制数字(0-255)表示,数字间用符号“.”分开,如 “192.168.1.100”。

随着计算机网络规模的不断扩大,对IP地址的需求也越来越多,
IPV4这种用4个字节表示的IP地址面临枯竭,因此IPv6 便应运而生了,
IPv6使用16个字节表示IP地址,它所拥有的地址容量是IPv4的接近8×10^28倍,
达到2^128-1个(全零的不能用),这样就解决了网络地址资源数量不够的问题。
端口号
通过IP地址可以连接到指定计算机,但如果想访问目标计算机中的某个应用程序,还需要指定端口号。
在计算机中,不同的应用程序是通过端口号区分的。
端口号是用两个字节(16位的二进制数)表示的,它的取值范围是0~65535,
其中,0~1023之间的端口号用于一些知名的网络服务和应用,
用户的普通应用程序需要使用1024以上的端口号,从而避免端口号被另外一个应用或服务所占用。

接下来通过一个图例来描述IP地址和端口号的作用,如下图所示。
在这里插入图片描述

TCP协议:

TCP 用于应用程序之间的通信。
当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。
这个请求必须被送到一个确切的地址。在双方“三次握手”之后,
TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信。
这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。
TCP三次握手四次挥手

TCP三次握手
      所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。
      在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:
在这里插入图片描述
ACK:确认标志。确认值(Acknowledgement),为1便是确认连接。
SYN:同步标志。表明同步序列编号栏有效。
FIN:结束标志。
ack: 确认编号(Acknowledgement Number),即接收到的上一次远端主机传来的seq然后+1,再发送给远端主机。提示远端主机已经成功接收上一次所有数据。

  1. 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
  2. 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  3. 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

TCP四次挥手
      所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:
在这里插入图片描述
      由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。
4. 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
5. 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
6. 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
7. 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

UDP协议

      Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。
使用UDP协议,传输数据之前源端和终端不建立连接,
      当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。
在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;
在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

UDP与TCP简单对比:
      时间上,UDP,无连接,不存在建立连接需要的时延,TCP建立链接会产生时延。
      空间上,TCP需要在端系统中维护连接状态,需要一定的开销。
此连接状态包括接收和发送缓存,拥塞控制参数和序号与确认号的参数。
      UCP不维护连接状态,也不跟踪这些参数,开销小。空间和时间上都具有优势。
      可靠性上,TCP面向链接的通信可靠性高,UDP可靠性差。

HTTP协议

      HTTP是HyperText Transfer Protocol的缩写,翻译过来就是超文本传输协议,
      它是一种用于分布式、协作式和web应用系统的应用层协议。
      我们以建行官网为例:在浏览器里输入http://www.ccb.com,然后猛按回车,呈现在你面前的,将是建行官网的首页了。作为一个开发者,我想你有必要去了解这一系列的处理流程,在这期间,浏览器和服务器到底是如何打交道的?服务器又是如何处理的?浏览器又是如何将网页显示给用户的呢?…,坦白讲,要想彻彻底底的弄清楚以上每个疑惑和处理细节,至少需要十本书的厚度,所谓“底层无极限”!
既然前面讲了TCP/UDP的网络通信协议,而且他们的使用是非常广泛的,那为啥有多出个http协议来呢?
UDP协议具有不可靠性和不安全性,显然这很难满足web应用的需要。
而TCP协议是基于连接和三次握手的,虽然具有可靠性,但任然具有一定的缺陷。
试想一下,B/S架构的网站,十万人同时在线也是很平常的事儿。
如果十万个客户端和服务器一直保持连接状态,那服务器那端有这么多带宽来分配吗?

这就衍生出了http协议。基于TCP的可靠性连接。
通俗点说,就是在请求之后,服务器端立即关闭连接、释放资源。
这样既保证了资源可用,也吸取了TCP的可靠性的优点。
HTTP协议由来的概况:
HTTP的发展是由蒂姆·伯纳斯-李在1989年在欧洲核子研究组织(CERN)所发起。
HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中,现今还在广泛使用的一个版本——HTTP 1.1。
      2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组
将HTTP 2.0标准提议递交至IESG进行讨论,于2015年2月17日被批准。 HTTP 2.0标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。
Bis:
工作组名字中的“bis”来自拉丁语中表示“二”的副词,
Bis通常被IETF用作名字的后缀来以表示标准的升级或者一些二次工作,
比如这里是针对HTTP1.1。
IESG:
Internet Engineering Steering Group,互联网工程指导小组,
它是IETF的上级单位,负责IETF活动和标准制定程序的技术管理工作,
核准或纠正IETF各工作组的研究成果,有对工作组的设立终结权,
确保非工作组草案在成为请求注解文件(RFC)时的准确性。
HTTP工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。
HTTP协议采用了请求/响应模型。
客户端向服务器发送一个请求报文,请求报文包含请求行、请求头部、空行和请求数据。
服务器收到客户端的请求会响应,响应的内容包括状态行、响应头部、空行和响应数据。

以下是 HTTP 请求/响应的步骤:

  1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址,客户端连接到Web服务器
    一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
  2. 发送HTTP请求
    通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,
    一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
  3. 服务器接收请求并返回HTTP响应
    Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。
    一个响应由状态行、响应头部、空行和响应数据4部分组成。
  4. 释放连接TCP连接
    若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;
    若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
  5. 客户端浏览器解析HTML内容
    客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。
    然后解析每一个响应头,响应头告知HTML文档的若干特殊信息和文档的字符集。
    客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

HTTP请求报文(就是浏览器首先发送给服务器的信息)
HTTP请求格式
在这里插入图片描述
HTTP请求方法
HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:
GET
向指定的资源发出“显示”请求。

HEAD
类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。

POST
向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。
数据被包含在请求数据中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。

PUT
向指定资源位置上传其最新内容。

DELETE
请求服务器删除Request-URI所标识的资源。

TRACE
回显服务器收到的请求,主要用于测试或诊断。

OPTIONS
这个方法可使服务器传回该资源所支持的所有HTTP请求方法。
用’*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

注意事项:
方法名称是区分大小写的,javaweb程序中不区分大小写,这里是转换后的大小写要区分。
HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。

URL(Uniform Resource Locator)
            超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的基本元素包括在一个简单的地址中。
URL 的具体语法格式如下所示

下面是一些简单的 URL 示例:
http://www.sun.com/    协议名://主机名
http://localhost:8080/Test/admin/login.jsp 协议名://机器名:端口号/文件名

头部:

  1. Accept,浏览器端能够处理的信息内容类型。
    Accept: 文件类型使用的MIME值,/ 代表任意类型
    MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。
    不用记,用哪个查那个,百度:MIME 参考手册
    注意:
      docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document
      xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
      pptx,application/vnd.openxmlformats-officedocument.presentationml.presentation
    ie会把 jpg、jpeg翻译成image/pjpeg,png翻译成image/x-png
    q是权重系数,范围 0 =< q <= 1,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容,
    若没有指定 q 值,则默认为1,若被赋值为0,则用于提醒服务器哪些是浏览器不接受的内容类型。
  2. Accept-Encoding, 浏览器能够处理的的压缩编码。
    通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是指字符编码)。
    例如: Accept-Encoding:gzip, deflate, br
  3. Accept-Language, 浏览器当前设置的语言。
    语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等;
  4. Accept-Charset:浏览器能够显示的字符集
  5. Connection:浏览器与服务器的连接类型
    例如:Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
    例如: Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭。
    当客户端再次发送Request,需要重新建立TCP连接。
  6. Host,发送请求的页面的域名。
  7. Referer,发送请求的页面的URI。当浏览器向web服务器发送请求的时候,一般会带上Referer,
    告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理。
  8. User-Agent,浏览器的用户代理字符串。告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。
  9. Cookie,用来存储一些用户信息以便让服务器辨别用户身份的。
  10. Cache-Control,指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据,还是重新发请求到服务器获取数据。
    常看到的:max-age=0,也就是这些资源在浏览器缓存中,保存的时间,值的单位是秒。

再看看HTTP响应消息(服务器返回给浏览器的):
HTTP响应格式
在这里插入图片描述
HTTP状态码
所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,
3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
状态代码的第一个数字代表当前响应的类型:
1xx消息——请求已被服务器接收,继续处理
2xx成功——请求已成功被服务器接收、理解、并接受
3xx重定向——需要后续操作才能完成这一请求
4xx请求错误——请求含有词法错误或者无法被执行
5xx服务器错误——服务器在处理某个正确请求时发生错误

响应头(消息头)包含:

  1. Location:这个头配合302状态吗,用于告诉客户端找谁
  2. Server:服务器通过这个头,告诉浏览器服务器的类型,如APACHE
  3. Content-Encoding:告诉浏览器,服务器的数据压缩格式
  4. Content-Length:告诉浏览器,回送数据的长度
  5. Content-Type:告诉浏览器,回送数据的类型
  6. Last-Modified:告诉浏览器当前资源缓存时间
  7. Refresh:告诉浏览器,隔多长时间刷新
  8. Content-Disposition:告诉浏览器以下载的方式打开数据。
    例如: context.Response.AddHeader(“Content-Disposition”,“attachment:filename=aa.jpg”);
    context.Response.WriteFile(“aa.jpg”);
  9. Transfer-Encoding:告诉浏览器,传送数据的编码格式
  10. ETag:缓存相关的头(可以做到实时更新)
  11. Expries:告诉浏览器回送的资源缓存多长时间。如果是-1或者0,表示不缓存
  12. Cache-Control:控制浏览器不要缓存数据 no-cache
  13. Pragma:控制浏览器不要缓存数据 no-cache
  14. Connection:响应完成后,是否断开连接。 close/Keep-Alive
  15. Date:告诉浏览器,服务器响应时间
  16. 状态行: 例如: HTTP/1.1 200 OK (协议的版本号是1.1 响应状态码为200 响应结果为 OK)
  17. 实体内容(实体头):响应包含浏览器能够解析的静态内容,例如:html,纯文本,图片等等信息

JAVA对网络的支持

            Java为网络编程提供了支持包java.net,该包下提供了InetAddress、ULRDecoder、URLEncoder、
URL和URLConnection等等很多工具类,这些类可以让我们通过编程的形式访问Web服务器或者其他的服务器。

InetAddress类及其常用方法

Internet 上的主机有两种方式表示地址,分别为域名和 IP 地址。
java.net 包中的 InetAddress 类对象包含一个 Internet 主机地址的域名和 IP 地址。

InetAddress 类提供了操作 IP 地址的各种方法。
该类本身没有构造方法,而是通过调用相关静态方法,比如getByName()方法获取实例。
InetAddress 类中的常用方法如下表 所示。
在这里插入图片描述
编写程序练习 InetAddress 类的基本使用方法:
(1) 创建一个类。
          在 main() 方法中创建一个 InetAddress 对象,调用 getByName() 方法并传递参数“www.qq.com”
输出此对象的 IP 地址字符串和主机名,代码如下所示。

public class InteAddreesTest {public static void main(String[] args) {try{InetAddress ia1=InetAddress.getByName("www.qq.com");System.out.println(ia1.getHostName());System.out.println(ia1.getHostAddress());InetAddress ia2=InetAddress.getByName("58.246.163.58");System.out.println(ia2.getHostName());System.out.println(ia2.getHostAddress());InetAddress ia3=InetAddress.getLocalHost();System.out.println("本地主机名:"+ia3.getHostName());System.out.println("本地ip地址:"+ia3.getHostAddress());}catch(UnknownHostException e){e.printStackTrace();}       }}
----------------------------------------------------20252月---------------------
www.qq.com
116.128.170.212
58.246.163.58
58.246.163.58
本地主机名:JCXJJGUR8BUA392
本地ip地址:192.168.1.7

注意:在上述代码中包含互联网的地址,所以运行时需要连网,否则会出现异常。

相关文章:

java网络编程

计算机网络基础 网络编程的目的就是直接或间接地通过网络协议与其他计算机进行通信。 在 Java 语言中包含网络编程所需要的各种类&#xff0c;编程人员只需要创建这些类的对象&#xff0c;调用相应的方法&#xff0c;就可以进行网络应用程序的编写。 要进行网络程序的编写&am…...

计算机网络面试知识点总结

目录 1. 计算机网络的基本知识点2. OSI 七层模型3. TCP/IP 四层模型4. TCP 和 UDP4.1 TCP 协议4.2 TCP 流量控制4.3 TCP 拥塞控制4.4 TCP 三次握手4.5 TCP 四次挥手4.6 TCP 粘包问题4.7 TCP Socket交互流程4.8 UDP 协议以及和 TCP 协议的不同 5. HTTP协议5.1 HTTP 请求方法以及…...

ubuntu22.4搭建单节点es8.1

下载对应的包 elasticsearch-8.1.1-linux-x86_64.tar.gz 创建es租户 groupadd elasticsearc useradd elasticsearch -g elasticsearch -p elasticsearch chmod uw /etc/sudoers chmod -R elasticsearch:elasticsearch elasticsearch 修改配置文件 vim /etc/sysctl.conf vm…...

卷积与动态特征选择:重塑YOLOv8的多尺度目标检测能力

文章目录 1. YOLOv8的网络结构概述2. 添加注意力机制2.1 为什么添加注意力机制&#xff1f;2.2 如何将注意力机制集成到YOLOv8中&#xff1f;2.3 效果分析 3. C2f模块的集成3.1 C2f模块简介3.2 如何在YOLOv8中集成C2f模块&#xff1f;3.3 效果分析 4. 卷积操作的优化4.1 卷积操…...

【Altium Designer】差分对等长设置以及绕线

在Altium Designer 17中设置差分对的等差规则及绕等长操作&#xff0c;需结合规则配置与交互式布线工具完成。以下是详细操作步骤&#xff1a; 目录 一、差分对等差规则设置 1. 原理图端差分对定义 2. PCB端差分规则配置 二、差分对等长绕线操作 1. 差分对布线 2. 交互式…...

BFS 和 DFS(深度优先搜索、广度优先搜索)

深度优先搜索&#xff08;DFS&#xff09;和广度优先搜索&#xff08;BFS&#xff09;是两种常用的图遍历算法&#xff0c;用于解决图相关的问题。它们在搜索问题中具有广泛的应用&#xff0c;如路径搜索、连通性检测等。 以下是具体区别&#xff1a; &#xff08;图片引自&am…...

汽车免拆诊断案例 | 2013 款奔驰 S300L 车起步时车身明显抖动

故障现象  一辆2013款奔驰S300L车&#xff0c;搭载272 946发动机&#xff0c;累计行驶里程约为15万km。车主反映&#xff0c;将挡位置于D挡&#xff0c;稍微释放一点制动踏板&#xff0c;车辆蠕动时车身明显抖动&#xff0c;类似气缸失火时的抖动&#xff0c;又类似手动变速器…...

基于UnrealEngine(UE5)的太空探索

视频部分可参见&#xff1a;https://www.bilibili.com/video/BV1JWA8eSEVg/ 中国 天宫号 空间站 人造卫星可视化 星链卫星可视化 小行星分布及运动轨迹可视化 月球基地 可视化 八大行星轨道 太阳系宜居带可视化 阿波罗8号拍摄的地球升起 谷神星模型及轨迹可视化 星座可视化 十…...

HTML Application(hta)入门教程

简介 HTA是HTML Application的缩写&#xff0c;又称为HTML应用程序。 hta是一个可执行文件&#xff0c;双击可以直接运行 hta与html非常相似&#xff0c;可直接将文件后缀改为.hta来获得HTA格式的文件。 支持VBS和JavaScript html的权限被限制在网页浏览器内&#xff0c;只有操…...

IOS UITextField 无法隐藏键盘问题

设置UITextField 键盘按钮返回键为“完成”&#xff0c;即return key 设置done .m代码设置代理 //设置代理协议 UITextFieldDelegate&#xff0c; self.mobileTextField.delegate self; ///点击完成键隐藏键盘 - (BOOL)textFieldShouldReturn:(UITextField *)textField{//取…...

ES6箭头函数:基础与进阶指南

目录 引言 一、基础篇&#xff1a;核心语法与特性 1.1 语法革新 1.2 this绑定机制 二、进阶篇&#xff1a;深度特性解析 2.1 闭包中的this继承 2.2 限制与注意事项 三、实践指南&#xff1a;应用场景与陷阱规避 3.1 推荐使用场景 3.2 应避免的场景 四、性能考量 结语…...

AI赋能编程:PyCharm与DeepSeek的智能开发革命

在这个智能化的时代&#xff0c;人工智能技术正在深刻地改变着我们的工作方式&#xff0c;尤其是在编程领域。无论是初学者还是资深开发者&#xff0c;都希望借助更高效的工具和智能助手来提升生产力、优化代码质量。今天&#xff0c;我们将聚焦于两个强大的工具&#xff1a;Py…...

在Spring Boot中如何使用Freemaker模板引擎

在 Spring Boot 中使用 FreeMarker 模板引擎可以帮助你创建动态的 Web 页面。以下是详细的步骤和示例代码,介绍如何在 Spring Boot 项目里集成和使用 FreeMarker。 1. 添加依赖 如果你使用的是 Maven 项目,需要在 pom.xml 文件中添加 FreeMarker 相关依赖。Spring Boot 提供…...

【论文精读】VLM-AD:通过视觉-语言模型监督实现端到端自动驾驶

论文地址&#xff1a; VLM-AD: End-to-End Autonomous Driving through Vision-Language Model Supervision 摘要 人类驾驶员依赖常识推理来应对复杂多变的真实世界驾驶场景。现有的端到端&#xff08;E2E&#xff09;自动驾驶&#xff08;AD&#xff09;模型通常被优化以模仿…...

【HarmonyOS Next】鸿蒙应用进程和线程详解

【HarmonyOS Next】鸿蒙应用进程和线程详解 一、前言 进程的定义&#xff1a; 进程是系统进行资源分配的基本单位&#xff0c;是操作系统结构的基础。 在鸿蒙系统中&#xff0c;一个应用下会有三类进程&#xff1a; (1) 主进程&#xff0c; (2) ExtensionAbility进程&#xff…...

基于深度学习的信号滤波:创新技术与应用挑战

一、引言 1.1 研究背景 随着科技的不断发展&#xff0c;信号处理领域面临着越来越复杂的挑战。在众多信号处理技术中&#xff0c;基于深度学习的信号滤波技术逐渐崭露头角&#xff0c;成为研究的热点。 基于深度学习的信号滤波在信号处理领域具有至关重要的地位。如今&#…...

从【人工智能】到【计算机视觉】,【深度学习】引领的未来科技创新与变革

前几天偶然发现了一个超棒的人工智能学习网站&#xff0c;内容通俗易懂&#xff0c;讲解风趣幽默&#xff0c;简直让人欲罢不能。忍不住分享给大家&#xff0c;点击这里立刻跳转&#xff0c;开启你的AI学习之旅吧&#xff01; 前言 – 人工智能教程https://www.captainbed.cn/l…...

什么是方法

System.out.println(),那么它是什么呢&#xff1f; Java方法是语句的集合&#xff0c;它们在一起执行一个功能。 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建&#xff0c;在其他地方被使用 这段Java代码出现错误的原因在于&#xff0c;在…...

Python strip() 方法详解:用途、应用场景及示例解析(中英双语)

Python strip() 方法详解&#xff1a;用途、应用场景及示例解析 在 Python 处理字符串时&#xff0c;经常会遇到字符串前后存在多余的空格或特殊字符的问题。strip() 方法就是 Python 提供的一个强大工具&#xff0c;专门用于去除字符串两端的指定字符。本文将详细介绍 strip(…...

合并区间(56)

56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {if (intervals.size() 1) {return intervals;}//现根据每一项的第一个值&#…...

如何保存爬虫获取商品评论的数据?

保存爬取的评论数据是爬虫项目中的一个重要环节。根据需求&#xff0c;你可以选择将数据保存为本地文件&#xff08;如CSV、JSON、TXT&#xff09;&#xff0c;或者存储到数据库&#xff08;如MySQL、MongoDB等&#xff09;。以下是几种常见的数据保存方式及其示例代码。 1. 保…...

使用docker配置PostgreSQL

配置docker阿里云镜像仓库 国内使用docker hub拉取镜像比较慢&#xff0c;所以首先配置个人的镜像仓库。 阿里云的个人镜像仓库是免费的&#xff0c;对个人来说足够用。 具体操作参考阿里云官方链接 。 关于个人镜像仓库的使用参考链接。 配置完个人镜像仓库后将公网配置到doc…...

阿里云虚机的远程桌面登录提示帐户被锁定了

提示由于安全原因&#xff0c;帐户被锁定。 阿里云虚机ECS的远程桌面登录提示帐户被锁定了&#xff0c;只能登录阿里云处理 阿里云-计算&#xff0c;为了无法计算的价值 需选择通过VNC连接 然后计算机管理&#xff0c;解除帐户锁定即可。...

SAP on Microsoft Azure Architecture and Administration (Ravi Kashyap)

SAP on Microsoft Azure Architecture and Administration (Ravi Kashyap)...

抽象类、接口、枚举

一、抽象类 1.1 简介 作为父类&#xff0c;里面的方法逻辑不能满足任何一个子类的需求&#xff0c;提供的逻辑根本就用不上&#xff0c;那么就不添加方法体了&#xff0c;此时这个方法需要 使用关键字abstract来修饰&#xff0c;表示为抽象方法&#xff0c;而抽象方法所在的类…...

GO系列-IO 文件操作

os io 判断文件是否存在 func fileExist(filePath string) (bool, error) {_, err : os.Stat(filePath)if err nil {return true, nil}if os.IsNotExist(err) {return false, nil}return false, &CheckFileExistError{filePath} } 读取文件内容 func readFileContext(…...

【前端】使用WebStorm创建第一个项目

文章目录 前言一、步骤1、启动2、创建项目3、配置Node.js4、运行项目 二、Node.js介绍 前言 根据前面文章中记录的步骤&#xff0c;已经安装好了WebStorm开发软件&#xff0c;接下来我们就用这个IDE开发软件创建第一个项目。 一、步骤 1、启动 启动软件。 2、创建项目 新建…...

自定义类型:结构体,枚举,联合

结构体 结构体的基本声明 基础知识&#xff1a;结构是一些值的集合&#xff0c;这些值称为成员变量&#xff0c;结构的每个成员可以是不同类型的变量。 //学生 struct Stu {//学生的相关信息char name[20];int age; }s1,s2; //s1,s2是直接创建的结构体变量&#xff08;全局变…...

柠檬水找零(力扣860)

这道题的贪心很简单&#xff0c;就是体现在对于20元的找零上。根据题意&#xff0c;20元有两种找零方式&#xff1a;1.找一张5元和一张10元&#xff1b;2.找3张5元。但是5元比较万能&#xff0c;因为无论是10还是20都需要用5元来找零&#xff0c;所以我们优先考虑第一种找零方式…...

sprintf和sscanf的用法和区别

sprintf和sscanf是C语言中常用的字符串处理函数&#xff0c;它们各自有不同的用途和用法。 1、sprintf的用法 sprintf函数主要用于将数据格式化为字符串并存储在指定的缓冲区中。其函数原型为&#xff1a; int sprintf(char *str, const char *format, ...); str&#xff1a…...

deepseek自动化代码生成

使用流程 效果第一步&#xff1a;注册生成各种大模型的API第二步&#xff1a;注册成功后生成API第三步&#xff1a;下载vscode在vscode中下载agent&#xff0c;这里推荐使用cline 第四步&#xff1a;安装完成后&#xff0c;设置模型信息第一步选择API provider&#xff1a; Ope…...

静态时序分析:时钟组间的逻辑独立、物理独立和异步的区别

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html 当设计中存在多个时钟&#xff08;同步或异步&#xff09;时&#xff0c;该如何使用SDC命令约束设计呢&#xff1f;本文就将对此进行讨论。 逻辑独立 例1 多个时钟完全逻辑独立 图1 逻辑…...

深入HBase——数据结构与算法

引入 通过前面的文章&#xff0c;我们对HBase已经有了基本认识&#xff0c;下面我们从HBase最核心的算法和数据结构进一步深入HBase。 HBase的一个列簇&#xff08;Column Family&#xff09;本质上就是一棵LSM树&#xff08;Log-Structured Merge-Tree&#xff09;​。LSM树…...

学习Linux准备2

使用win10系统带的wsl配置ubuntu系统&#xff0c;通过wsl功能我们可以更简单更轻松的获得Linux系统环境。 首先开启Windows自带的wsl功能 打开控制面板&#xff0c;选中启用或关闭Windows功能 这里我们点击进入 将上图红√点击上&#xff0c;点击确定&#xff0c;然后重新启动…...

MATLAB图像处理:图像分割方法

图像分割将图像划分为具有特定意义的子区域&#xff0c;是目标检测、医学影像分析、自动驾驶等领域的核心预处理步骤。本文讲解阈值分割、边缘检测、区域生长、聚类分割、基于图的方法等经典与前沿技术&#xff0c;提供MATLAB代码实现。 目录 1. 图像分割基础 2. 经典分割方…...

什么是“可迭代”

在 Python 中&#xff0c;“可迭代”&#xff08;Iterable&#xff09;是一个非常重要的概念&#xff0c;它指的是任何可以被逐个访问其元素的对象。换句话说&#xff0c;如果一个对象支持迭代操作&#xff08;比如可以通过 for 循环逐个访问其元素&#xff09;&#xff0c;那么…...

使用Ubuntu搭建Java部署环境

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:小舟从此逝&#xff0c;江海寄余生&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小…...

Linux 文件的三个时间:Access、Modify 和 Change

目录 一、文件的三个时间戳 1. 访问时间&#xff08;Access Time&#xff09; 2. 修改时间&#xff08;Modify Time&#xff09; 3. 更改时间&#xff08;Change Time&#xff09; 二、如何查看文件的三个时间戳 三、文件时间戳的变化规则 1. 修改文件内容 2. 修改文件…...

移植live555 上的 rtsp

一、V4L2视频采集模块&#xff08;完整示例&#xff09; #include <linux/videodev2.h> #include <sys/ioctl.h> #include <fcntl.h>// 初始化V4L2摄像头 int init_v4l2_camera(const char* dev_path, int width, int height) {int fd open(dev_path, O_RD…...

基于SpringBoot的“宠物救助及领养平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“宠物救助及领养平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统整体功能图 系统首页界面 系统注册页面…...

Gemini 2.0助力科学突破,AI联合科学家系统登场

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

electron提升软件运行权限,以管理员权限运行

大家有任何想法&#xff0c;都可以联系博主沟通。 本系列为实战文章&#xff0c;最终实现的桌面工具软件&#xff0c;获取方式&#xff1a;百度网盘地址&#xff1a;https://pan.baidu.com/s/1yrl0jYpti7QCn8CHBRT2lw?pwd1234 正文开始 前言一、提升electron运行权限的三种方…...

Docker 容器调试技巧

在开发和运维过程中&#xff0c;调试 Docker 容器中的应用或服务是一个常见且重要的任务。由于容器是相互隔离的&#xff0c;容器内部的日志和错误信息可能不像传统的服务器那样直观&#xff0c;因此掌握 Docker 容器调试技巧对于快速定位和解决问题至关重要。 本文将介绍一些…...

TSMaster【第七篇:千机百变——面板设计艺术】

武侠场景导入&#xff1a;唐门暗器阁的启示 江湖传言&#xff0c;唐门暗器之所以独步天下&#xff0c;全凭其「千机匣」中七十二种机关变化。TSMaster面板设计恰似打造暗器机关——控件如同飞镖、机簧、毒针&#xff0c;组合方式不同则威力迥异。昔日某新势力车型因仪表盘刷新…...

ctfshow——robots后台泄露

题目提示&#xff1a;总有人把后台地址写入robots&#xff0c;帮黑阔大佬们引路 题目如上图所示 根据提示&#xff0c;我们可以在URL上查看是否存在robots文件 打开后发现其中的内容如上图所示&#xff0c;存在一个flagishere.txt文件&#xff0c;我们可以继续在URL上进行操作…...

普通人怎样用好Deepseek?

第一章&#xff1a;准备篇&#xff08;30分钟上手&#xff09; DeepSeek 是一款功能强大的数据处理和分析工具&#xff0c;广泛应用于数据挖掘、机器学习、商业智能等领域。 本文将通过图文结合的方式&#xff0c;详细介绍 DeepSeek 的安装、配置、基本使用、高级功能以及实用…...

负载均衡集群( LVS 相关原理与集群构建 )

目录 1、LVS 相关原理 1.1、LVS集群的体系结构以及特点 1.1.1 LVS简介 1.1.2 LVS体系结构 1.1.3 LVS相关术语 1.1.4 LVS工作模式 1.1.5 LVS调度算法 1.2 LVS-DR集群介绍 1.2.1 LVS-DR模式工作原理 1.2.2 LVS-DR模式应用特点 1.2.3 LVS-DR模式ARP抑制 1.3 LVS – NA…...

前端面试-JavaScript 数据类型检测全解

目录 一、基础检测方法 二、方法深度解析 1. typeof 运算符 2. instanceof 运算符 3. 终极检测方案 三、特殊场景检测方案 四、手写实现原理 1. 通用类型检测函数 2. 改进版数组检测&#xff08;兼容旧浏览器&#xff09; 五、常见面试陷阱 六、最佳实践指南 七、扩…...

百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用

在私有云环境中成功部署 DeepSeek 满血版并实现性能调优&#xff0c;并不是一件容易的事情。选择合适的 GPU 配置、安装相应的环境、成功部署上线业务、加速推理任务加速、支撑多用户并发 …… 完成业务测试&#xff0c;成功融入生产业务中。 为了帮助企业快速实现 DeepSeek 服…...

微软CEO-纳德拉访谈-AGI计划

在与知名科技播客主播 Dwarkesh Patel 的深度访谈中,微软 CEO 萨提亚・纳德拉围绕 AI、量子计算、微软发展等多方面分享深刻见解,下面是针对访谈内容的介绍,其中还是有很多值得我们学习的地方。 1 AI 领域见解 影响力评估:纳德拉直言行业所标榜的 AGI 里程碑是 “无意义的基…...