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

Day19-【Java SE进阶】网络编程

一、网络编程

1.概述
  • 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。
  • java.net,*包下提供了网络编程的解决方案!

基本的通信架构
基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端)。

在这里插入图片描述

在这里插入图片描述
网络通信的关键三要素
在这里插入图片描述
IP地址

  • IP(Internet Protocol):全称”互联网协议地址”,是分配给上网设备的唯一标志。
  • IP地址有两种形式:IPV4、IPV6

在这里插入图片描述

  • IPv6:共128位,号称可以为地球每一粒沙子编号。
  • IPV6分成8段表示,每段每四位编码成一个十六进制位表示,数之间用冒号(:)分开。

在这里插入图片描述
IP域名

  • 公网IP:是可以连接互联网的IP地址;内网IP:也叫局域网IP,只能组织机构内部使用。
  • 192.168.开头的就是常见的局域网地址,范围即为192.168.0.0–192.168.255.255,专门为组织机构内部使用。
    在这里插入图片描述

特殊IP地址
127.0.0.1、localhost:代表本机IP,只会寻找当前所在的主机。
IP常用命令:
ipconfig:查看本机IP地址。
ping IP地址:检查网络是否连通。

1.1 InetAddress
  • 代表IP地址。
    -

端口

  • 标记正在计算机设备上运行的应用程序的,被规定为一个16 位的二进制,范围是 0~65535

分类

  • 周知端口:0~1023,被预先定义的知名应用占用(如:HTTP占用 80,FTP占用21)
  • 注册端口:1024~49151,分配给用户进程或某些应用程序。
  • 动态端口:49152到65535,之所以称为动态端口,是因为它 一般不固定分配某种进程,而是动态分配。
  • 注意:我们自己开发的程序一般选择使用注册端口,且一个设备中不能出现两个程序的端口号一样,否则出错。

通信协议

  • 网络上通信的设备,事先规定的连接规则,以及传输数据的规则被称为网络通信协议

开放式网络互联标准:OSI网络参考模型

  • OSI网络参考模型:全球网络互联标准。
  • TCP/IP网络模型:事实上的国际标准。
    在这里插入图片描述
1.2 重要知识点:传输层的2个通信协议
  • UDP(User Datagram Protocol):用户数据报协议;
  • TCP(Transmission ControlProtocol):传输控制协议。

UDP协议

  • 特点:无连接、不可靠通信。
  • 通讯效率高!语音通话 视频直播
  • 不事先建立连接,数据按照包发,一包数据包含:自己的IP、程序端口,目的地IP、程序端口和数据(限制在64KB内)等。
  • 发送方不管对方是否在线,数据在中间丢失也不管,如果接收方收到数据也不返回确认,故是不可靠的。

TCP协议

  • 特点:面向连接、可靠通信。
  • 通信效率相对不高 网页 文件下载 支付
  • TCP的最终目的:要保证在不可靠的信道上实现可靠的传输。
  • TCP主要有三个步骤实现可靠传输:三次握手建立连接,传输数据进行确认,四次挥手断开连接。
  • TCP协议:三次握手建立可靠连接
    • 可靠连接:确定通信双方,收发消息都是正常无问题的!(全双工)
    • 传输数据会进行确认,以保证数据传输的可靠性在这里插入图片描述
  • TCP协议:四次握手断开连接
    • 目的:确保双方数据的收发都已经完成!

在这里插入图片描述

在这里插入图片描述

2. UDP通信-快速入门

UDP通信

  • 特点:无连接、不可靠通信。
  • 不事先建立连接;发送端每次把要发送的数据(限制在64KB内)、接收端IP、等信息封装成一个数据包,发出去就不管了。
  • Java提供了一个java.net.DatagramSocket类来实现UDP通信。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
import java.net.*;public class Client {public static void main(String[] args) throws Exception {//1. 创建客户端对象(发韭菜出去的人)DatagramSocket socket = new DatagramSocket();//2. 创建数据包对象封装要发出去得数据(创建一个韭菜盒子)/* public DatagramPacket(byte buf[], int length,InetAddress address,int port)参数一:封装要发出去的数据。参数二:发送出去的数据大小(字节个数)参数三:服务端的IP地址(找到服务端主机)参数四:服务端程序的端口。*/byte[] bytes = "我是客户端,向您发送数据!".getBytes();DatagramPacket packet = new DatagramPacket(bytes,bytes.length,InetAddress.getLocalHost(),6666);//3. 开始正式发送这个数据包出去了socket.send(packet);System.out.println("客户端数据发送完毕~~~");socket.close();//释放资源!}
}
import java.net.DatagramPacket;
import java.net.DatagramSocket;public class Server {public static void main(String[] args) throws Exception {//1. 创建一个服务端对象(创建一个接韭菜的人) 注册端口DatagramSocket socket = new DatagramSocket(6666);//2. 创建一个数据包对象,用于接收数据的(创建一个韭菜盒子)byte[] buf = new byte[1024 * 64];DatagramPacket packet = new DatagramPacket(buf, buf.length);//3. 开始正式使用数据包来接收客户端发来的数据socket.receive(packet);//4. 从字节数组中,把接收到的数据直接打印出来// 接收多少就倒出多少 获取本次数据包接收了多少数据int len = packet.getLength();String s = new String(buf, 0, len);System.out.println(s);String hostAddress = packet.getAddress().getHostAddress();int port = packet.getPort();System.out.println(hostAddress + ":" + port);socket.close();//释放资源}
}

在这里插入图片描述
在这里插入图片描述
UDP通信 多发多收
edit configures->allow 多开 apply即可躲开client程序的

package com.jingwei;import java.net.*;
import java.util.Scanner;public class Client {public static void main(String[] args) throws Exception {//1. 创建客户端对象(发韭菜出去的人)DatagramSocket socket = new DatagramSocket();//可以分配端口 或者不填写自动分配//2. 创建数据包对象封装要发出去得数据(创建一个韭菜盒子)/* public DatagramPacket(byte buf[], int length,InetAddress address,int port)参数一:封装要发出去的数据。参数二:发送出去的数据大小(字节个数)参数三:服务端的IP地址(找到服务端主机)参数四:服务端程序的端口。*/Scanner sc = new Scanner(System.in);while (true) {System.out.println("请说");String msg = sc.nextLine();if("exit".equals(msg)) {System.out.println("退出成功!");socket.close();break;}byte[] bytes = msg.getBytes();DatagramPacket packet = new DatagramPacket(bytes,bytes.length,InetAddress.getLocalHost(),6666);//3. 开始正式发送这个数据包出去了socket.send(packet);}System.out.println("客户端数据发送完毕~~~");}
}
package com.jingwei;import java.net.DatagramPacket;
import java.net.DatagramSocket;public class Server {public static void main(String[] args) throws Exception {//1. 创建一个服务端对象(创建一个接韭菜的人) 注册端口DatagramSocket socket = new DatagramSocket(6666);//2. 创建一个数据包对象,用于接收数据的(创建一个韭菜盒子)byte[] buf = new byte[1024 * 64];DatagramPacket packet = new DatagramPacket(buf, buf.length);while (true) {//3. 开始正式使用数据包来接收客户端发来的数据socket.receive(packet);//4. 从字节数组中,把接收到的数据直接打印出来// 接收多少就倒出多少 获取本次数据包接收了多少数据int len = packet.getLength();String s = new String(buf, 0, len);System.out.println(s);String hostAddress = packet.getAddress().getHostAddress();int port = packet.getPort();System.out.println(hostAddress + ":" + port);System.out.println("-----------------------");}}
}
3. TCP通信
  • 特点:面向连接、可靠通信。
  • 通信双方事先会采用“三次握手”方式建立可靠连接,实现端到端的通信;底层能保证数据成功传给服务端。
  • Java提供了一个java.net.Socket类来实现TCP通信。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
一发一收

package com.jingwei;import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;public class SocketClient {public static void main(String[] args) throws IOException {System.out.println("服务端启动成功!");//1. 创建ServerSocket的对象,同时为服务端注册端口。ServerSocket serverSocket = new ServerSocket(8888);//2. 使用ServerSocket对象,调用accept方法,等待客户端的连接请求。Socket socket = serverSocket.accept();//3. 从socket通信管道中得到一个字节输入流InputStream is = socket.getInputStream();//4. 把原始的字节输入流包装成数据输入流DataInputStream dis = new DataInputStream(is);//5. 使用数据输入流读取客户端发送过来的消息String s = dis.readUTF();System.out.println(s);//其实我们也可以获取客户端的IP地址SocketAddress remoteSocketAddress = socket.getRemoteSocketAddress();System.out.println(remoteSocketAddress);dis.close();socket.close();}
}
package com.jingwei;import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;public class SocketServer {public static void main(String[] args) throws IOException {//1. 创建Socket对象,并同时请求与服务器程序的连接。Socket socket = new Socket("127.0.0.1", 8888);//2. 从Socket通信管道中得到一个字节输出流,用来发数据给服务端程序OutputStream os = socket.getOutputStream();//3. 把低级的字节输出流包装成数据输出流DataOutputStream dos = new DataOutputStream(os);//4. 开始写数据出去了dos.writeUTF("在一起好吗?");dos.close();socket.close();//释放连接资源}
}

多发多收

package com.jingwei;import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class SocketServer {public static void main(String[] args) throws IOException {//1. 创建Socket对象,并同时请求与服务器程序的连接。Socket socket = new Socket("127.0.0.1", 8888);//2. 从Socket通信管道中得到一个字节输出流,用来发数据给服务端程序OutputStream os = socket.getOutputStream();//3. 把低级的字节输出流包装成数据输出流DataOutputStream dos = new DataOutputStream(os);Scanner sc = new Scanner(System.in);while (true) {System.out.println("请说:");//4. 开始写数据出去了String msg = sc.nextLine();if("exit".equals(msg)){dos.close();socket.close();break;}dos.writeUTF(msg);dos.flush();}//        dos.close();
//
//        socket.close();//释放连接资源}
}
package com.jingwei;import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;public class SocketClient {public static void main(String[] args) throws IOException {System.out.println("服务端启动成功!");//1. 创建ServerSocket的对象,同时为服务端注册端口。ServerSocket serverSocket = new ServerSocket(8888);//2. 使用ServerSocket对象,调用accept方法,等待客户端的连接请求。Socket socket = serverSocket.accept();//3. 从socket通信管道中得到一个字节输入流InputStream is = socket.getInputStream();//4. 把原始的字节输入流包装成数据输入流DataInputStream dis = new DataInputStream(is);while (true) {//5. 使用数据输入流读取客户端发送过来的消息try {String s = dis.readUTF();System.out.println(s);//其实我们也可以获取客户端的IP地址SocketAddress remoteSocketAddress = socket.getRemoteSocketAddress();System.out.println(remoteSocketAddress);} catch (IOException e) {System.out.println(socket.getRemoteSocketAddress()+"离线了!");dis.close();socket.close();break;}}
//        dis.close();
//        socket.close();}
}

在这里插入图片描述

目前我们开发的服务端程序,是否可以支持与多个客户端同时通信?

  • 不可以的。
  • 因为服务端现在只有一个主线程,只能处理一个客户端的消息,

在这里插入图片描述

package com.jingwei;import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class SocketServer {public static void main(String[] args) throws IOException {//1. 创建Socket对象,并同时请求与服务器程序的连接。Socket socket = new Socket("127.0.0.1", 8888);//2. 从Socket通信管道中得到一个字节输出流,用来发数据给服务端程序OutputStream os = socket.getOutputStream();//3. 把低级的字节输出流包装成数据输出流DataOutputStream dos = new DataOutputStream(os);Scanner sc = new Scanner(System.in);while (true) {System.out.println("请说:");//4. 开始写数据出去了String msg = sc.nextLine();if("exit".equals(msg)){dos.close();socket.close();break;}dos.writeUTF(msg);dos.flush();}//        dos.close();
//
//        socket.close();//释放连接资源}
}
package com.jingwei;import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class SocketClient {public static void main(String[] args) throws IOException {System.out.println("服务端启动成功!");//1. 创建ServerSocket的对象,同时为服务端注册端口。ServerSocket serverSocket = new ServerSocket(8888);//2. 使用ServerSocket对象,调用accept方法,等待客户端的连接请求。while (true) {Socket socket = serverSocket.accept();System.out.println("有人上线了"+socket.getRemoteSocketAddress());new ServerReaderThread(socket).start();}
//        dis.close();
//        socket.close();}
}
package com.jingwei;import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;public class ServerReaderThread extends Thread{private Socket socket;public ServerReaderThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {InputStream inputStream = socket.getInputStream();DataInputStream dataInputStream = new DataInputStream(inputStream);while (true){try {String msg = dataInputStream.readUTF();System.out.println(msg);} catch (IOException e) {System.out.println(socket.getRemoteSocketAddress()+"下线了");dataInputStream.close();socket.close();break;}}} catch (IOException e) {throw new RuntimeException(e);}}
}

TCP通信-综合案例

  • 即时通信-群聊
  • 实现一个简易版的BS架构

题目:要求从浏览器中访问服务器
并立即让服务器响应一个很简单的网页给浏览器展示
网页内容就是“我666”

在这里插入图片描述

注意:服务器必须给浏览器响应HTTP协议规定的数据格式,否则浏览器不识别返回的数据

在这里插入图片描述

package com.jingwei;import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class SocketClient {public static void main(String[] args) throws IOException {System.out.println("服务端启动成功!");//1. 创建ServerSocket的对象,同时为服务端注册端口。ServerSocket serverSocket = new ServerSocket(8888);//2. 使用ServerSocket对象,调用accept方法,等待客户端的连接请求。while (true) {Socket socket = serverSocket.accept();System.out.println("有人上线了"+socket.getRemoteSocketAddress());
//            new ServerReaderThread(socket).start();new ServerWriterThread(socket).start();}
//        dis.close();
//        socket.close();}
}
package com.jingwei;import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;public class ServerWriterThread extends Thread {private Socket socket;public ServerWriterThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {OutputStream outputStream = socket.getOutputStream();PrintStream printStream = new PrintStream(outputStream);printStream.println("Http/1.1 200 OK");printStream.println("Content-Type: text/html;charset=utf-8");printStream.println();printStream.println("<!DOCTYPE html>");printStream.println("<html>");printStream.println("<head>");printStream.println("<title>Server Writer</title>");printStream.println("</head>");printStream.println("<body>");printStream.println("<h1>Server Writer</h1>");printStream.println("</body>");printStream.println("</html>");printStream.flush();printStream.close();socket.close();} catch (IOException e) {throw new RuntimeException(e);}}}

拓展知识
每次请求都开一个新线程,到底好不好?
高并发时,容易宕机!

在这里插入图片描述

package com.day19;import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.*;public class SocketClient {public static void main(String[] args) throws IOException {System.out.println("服务端启动成功!");//1. 创建ServerSocket的对象,同时为服务端注册端口。ServerSocket serverSocket = new ServerSocket(8888);//创建出一个线程池,负责处理通信管道的任务ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(20 * 2, 20 * 2, 0, TimeUnit.SECONDS,new ArrayBlockingQueue<>(8), Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());//2. 使用ServerSocket对象,调用accept方法,等待客户端的连接请求。while (true) {Socket socket = serverSocket.accept();System.out.println("有人上线了"+socket.getRemoteSocketAddress());
//            new ServerReaderThread(socket).start();//3、把这个客户端对应的socket通信管道,交给一个独立的线程负责处理。threadPoolExecutor.execute(new ServerWriterRunnable(socket));}
//        dis.close();
//        socket.close();}
}
package com.day19;import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;public class ServerWriterRunnable implements Runnable {private Socket socket;public ServerWriterRunnable(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {OutputStream outputStream = socket.getOutputStream();PrintStream printStream = new PrintStream(outputStream);printStream.println("Http/1.1 200 OK");printStream.println("Content-Type: text/html;charset=utf-8");printStream.println();printStream.println("<!DOCTYPE html>");printStream.println("<html>");printStream.println("<head>");printStream.println("<title>Server Writer</title>");printStream.println("</head>");printStream.println("<body>");printStream.println("<h1>Server Writer</h1>");printStream.println("</body>");printStream.println("</html>");printStream.flush();printStream.close();socket.close();} catch (IOException e) {throw new RuntimeException(e);}}}

相关文章:

Day19-【Java SE进阶】网络编程

一、网络编程 1.概述 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。java.net,*包下提供了网络编程的解决方案! 基本的通信架构 基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端)。 网络通信的…...

pyqt写个星三角降压启动方式2

星三角降压启动用可以用类进行封装&#xff0c;就像博图FB块那样。把逻辑都在类里完成&#xff0c;和外界需要交互的暴露出接口。测试过程中&#xff0c;发现类中直接用定时器QTimer会出现问题。然后就把定时器放到外面了。然后测试功能正常。 from PySide6.QtWidgets import …...

js可视化爬取数据生成当前热点词汇图

功能 可以爬取到很多数据&#xff0c;并且生成当前的热点词汇图&#xff0c;词越大越热门&#xff08;词云图&#xff09; 这里以b站某个评论区的数据为例&#xff0c;爬取63448条数据生成这样的图片 让我们能够更加直观的看到当前的热点 git地址 可以直接使用&#xff0c;中文…...

研发岗-面临统信UOS系统配置总结

第一步 获取root权限 配置环境等都需要用到root权限&#xff0c;所以我们先获取到root权限&#xff0c;方便下面的操作 下载软件 在UOS应用商店下载的所需应用 版本都比较低 安装node 官网下载了【arm64】的包&#xff0c;解压到指定文件夹&#xff0c;设置链接&#xff0…...

【STL详解 —— list的介绍及使用】

STL详解 —— list的介绍及使用 list的介绍list的介绍使用list的构造list iterator的使用list capacitylist element accesslist modifiers 示例list的迭代器失效 list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭…...

cocos creator开发中遇到的问题和解决方案

前言 总结一下使用cocos开发遇到的坑&#xff0c;不定期更新。 问题汇总 代码修改Position坐标不生效 首先要通过打log或者断点排除下是不是逻辑上的问题&#xff0c;还有是不是有动画相关把位置修改了。我遇到的问题是坐标修改被widget组件覆盖了。 纹理压缩包体变大 co…...

10分钟带你学会配置DNS服务正反向解析

正向解析 服务端IP客户端IP网址192.168.160.134192.168.160.135www.openlab.com 一、首先做准备工作&#xff1a; 关闭安全软件&#xff0c;关闭防火墙&#xff0c;下载bind软件 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld [rootserver ~]# y…...

【vim 学习系列文章 19 -- 映射快捷键调用两个函数 A 和B】

请阅读【嵌入式开发学习必备专栏 之 Vim】 文章目录 映射快捷键调用两个函数 映射快捷键调用两个函数 在 Vim 中&#xff0c;如果想通过按下 gcm 来调用两个函数&#xff0c;比如 FunctionA 和 FunctionB&#xff0c;需要先定义这两个函数&#xff0c;然后创建一个映射。这个映…...

Windows安装MongoDB结合内网穿透轻松实现公网访问本地数据库

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

sgg大数据全套技术链接[plus]

写在开头&#xff1a;感谢尚硅谷&#xff0c;尚硅谷万岁&#xff0c;我爱尚硅谷 111个技术栈43个项目&#xff0c;兄弟们&#xff0c;冲&#xff01; 最近小米又又又火了一把&#xff0c;致敬所有造福人民的企业和伟大的企业家&#xff0c;致敬雷军&#xff0c;小米&#xff…...

OpenHarmony南向嵌入式:【XR806开发板指导文档】

一. 简介 芯片介绍 XR806是全志科技旗下子公司广州芯之联研发设计的一款支持WiFi和BLE的高集成度无线MCU芯片&#xff0c;支持OpenHarmony轻量设置系统。具有集成度高、硬件设计简单、BOM成本低、安全可靠等优点。可广泛满足 智能家居、智慧楼宇、工业互联、儿童玩具、电子竞…...

Rust 实战练习 - 10. JSON、XML、YAML/TOML、Ini专题

配置文件 常见的配置文件有很多&#xff1a;JSON, Ini, XML, TOML, YAML … 目标&#xff1a; JSON/YAML/TOMLIniXML Rust中序列化用的最多的是 serde, 依赖它&#xff0c;有很多出色的第三方库可以使用。 其中&#xff0c;serde本身支持JSON/YAML/TOML/JSON5…多种&#…...

5.Hexo为页面标记标签和类别

Hexo的标签和类别基本上是可以在Hexo中将内容分组的两种方式 如果在网站上有一堆内容&#xff0c;有不同的博客文章 将博客文章分类为不同的类别会很有帮助 用特定的关键词为博客文章标记 如果可以同时分类和标记页面&#xff0c;会使网站用户更轻松地找到他们想要的页面类型 …...

·13·1dawwd

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…...

Docker - PostgreSQL

博文目录 文章目录 说明命令 说明 Docker Hub PostgreSQL 数据卷数据卷印射在容器内的路径postgres/var/lib/postgresql/data |容器内的路径|说明| |–|–|–| |/var/lib/postgresql/data|数据目录| 部分环境变量是否必要说明POSTGRES_PASSWORD必需设置超级用户密码POSTGRES…...

Python | Leetcode Python题解之第26题删除有序数组中的重复项

题目&#xff1a; 题解&#xff1a; class Solution:def removeDuplicates(self, nums: List[int]) -> int:if not nums:return 0n len(nums)fast slow 1while fast < n:if nums[fast] ! nums[fast - 1]:nums[slow] nums[fast]slow 1fast 1return slow...

【电控笔记4】拉普拉斯-传递函数-pid

数据标幺化 拉普拉斯变换 欧拉公式 常见s变换 s变换性质...

针对“AI+医疗”的可行方案

针对“AI医疗”的可行方案如下&#xff1a; 一、方案目标 利用AI技术&#xff0c;结合医疗数据&#xff0c;开发一套高效、准确的医疗辅助系统&#xff0c;旨在提高医疗诊断的精度、加速药物研发进程、优化疾病预测模型&#xff0c;从而辅助医生进行疾病诊断和治疗方案制定。…...

时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测

时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测 目录 时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-ESN基于麻雀搜索…...

Go——面向对象

一. 匿名字段 go支持只提供类型而不写字段名的方式&#xff0c;也就是匿名字段&#xff0c;也称为嵌入字段。 同名字段的情况 所以自定义类型和内置类型都可以作为匿名字段使用 指针类型匿名字段 二.接口 接口定义了一个对象的行为规范&#xff0c;但是定义规范不实现&#xff…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...