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

Java+SVNCloud+Mysql课程设计

文章目录

  • 1、主要内容
  • 2、所需准备
  • 3、与sql访问的中间类:SqlMessage
  • 4、窗口界面
  • 5、main方法

1、主要内容

课程设计,主要通过Javas wing创建窗口,jdbc连接云端mysql数据库进行基本操作,支持随机生成数据并用动态展示数据结果。

先来看一下实现效果:
在这里插入图片描述
在这里插入图片描述

2、所需准备

  1. 在SVNCloud上部署MySQL
  2. 下载所需Java包并导入到IDEA

请访问: SVNCloud 官网、JfreeChart下载、Mysql jar下载部署
等内容,形成类似以下的目录结构,若是代码建构过程发现错误,请仔细检查环境问题。
目录结构

3、与sql访问的中间类:SqlMessage

package Course_Design;
import java.sql.*;class DataStruct{   //数据结构体根据数据库内容依次定义String tim;     //时间String tmp;     //温度String hum;     //湿度String lit;     //光强
}
public class SqlMessage {static DataStruct selected;     //选中的数据存储到这里static DataStruct prepared;     //即将改写的数据存到这里//查询语句等结构static Connection connection;static Statement statement;static PreparedStatement st;static ResultSet result;SqlMessage(){selected = new DataStruct();prepared = new DataStruct();}void SqlInit() throws SQLException, ClassNotFoundException{//  1.加载驱动Class.forName("com.mysql.cj.jdbc.Driver");//  2.用户信息和url,请注意加上useSSL = false,否则连接失败String url = "jdbc:mysql://sql.wsfdb.cn:3306/ Database(请改为你的数据库名称) ?useSSL=false";//url: jdbc:mysql:// + 目的地址 + 端口号 + 数据库名称? + 其他,这里请确保你在SVNCloud建立了数据库且可以通过navicat等工具正常连接String username="username";	//用户名String password="******";	//密码//  3.连接成功,数据库对象 Connectionconnection = DriverManager.getConnection(url,username,password);//  4.绑定statement = connection.createStatement();}void SendMessage(String sql)throws SQLException {       //发送sql语句(有结果集版本)result = statement.executeQuery(sql);}void upDate(String sql) throws SQLException {           //发送sql语句(无结果集版本)st = connection.prepareStatement(sql);System.out.println("execute:"+sql);int res = st.executeUpdate();if(res > 0){System.out.println("数据更新成功:"+res);}st.close();}void CloseAll()throws SQLException {		//关闭数据库statement.close();connection.close();}
}

4、窗口界面

package Course_Design;import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Random;public class MyWindow {static SqlMessage sys = new SqlMessage();static int connect_flag = 0;//是否连接数据库的标识,当连接数据库时,生成数据失效static JTextField Edit_tim; //时间文本区域static JTextField Edit_tmp; //温度文本区域static JTextField Edit_hum; //湿度文本区域static JTextField Edit_lit; //光强文本区域static JButton BTN_add = new JButton("添加数据"); //添加static JButton BTN_del = new JButton("删除数据"); //删除static JButton BTN_mod = new JButton("修改数据"); //修改static JButton BTN_sum = new JButton("生成数据"); //生成static JButton BTN_con = new JButton("连接/断开");//连接与断开SQLstatic JButton BTN_lad = new JButton("刷新");     //刷新数据static JFrame window = new JFrame("传感器信息操作系统");static JTable table;static MyTableModel model;private Box getPanel() { //绘制所有小控件//建议panel内部使用GridLayout布局,Panel之间使用Box布局更加美观Box Vbox1 = Box.createVerticalBox();Box Vbox2 = Box.createVerticalBox();Panel Vbox3 = new Panel(new GridLayout(3,2));Box Vbox4 = Box.createVerticalBox();Box Hbox  = Box.createHorizontalBox();JLabel label1 = new JLabel("时间:");Edit_tim = new JTextField(10);JLabel label2 = new JLabel("温度:");Edit_tmp = new JTextField(10);JLabel label3 = new JLabel("湿度:");Edit_hum = new JTextField(10);JLabel label4 = new JLabel(" 光强:");Edit_lit = new JTextField(10);//label 与 text edit 加入窗体Vbox1.add(label1);Vbox2.add(Edit_tim);Vbox1.add(label2);Vbox2.add(Edit_tmp);Vbox1.add(label3);Vbox2.add(Edit_hum);Vbox1.add(label4);Vbox2.add(Edit_lit);// 按键加入窗体,创建消息映射Vbox3.add(BTN_add); BTN_add.addActionListener(e -> On_BTN_add());Vbox3.add(BTN_del); BTN_del.addActionListener(e -> On_BTN_del());Vbox3.add(BTN_mod); BTN_mod.addActionListener(e -> On_BTN_mod());Vbox3.add(BTN_sum); BTN_sum.addActionListener(e -> On_BTN_sum());Vbox3.add(BTN_con); BTN_con.addActionListener(e -> On_BTN_con());Vbox3.add(BTN_lad); BTN_lad.addActionListener(e -> On_BTN_lad());Hbox.add(Vbox1);Hbox.add(Vbox2);Panel func = new Panel(new GridLayout(1,0));func.add(BTN_Func_Summon);BTN_Func_Summon.addActionListener(e -> On_BTN_Func_Summon());func.add(BTN_Func_Drawer);BTN_Func_Drawer.addActionListener(e -> On_BTN_Func_Drawer());Vbox4.add(func);Vbox4.add(Box.createVerticalStrut(70));Vbox4.add(Hbox);Vbox4.add(Box.createVerticalStrut(40));Vbox4.add(Vbox3);return Vbox4;}public void InitWindow(){   //初始化table主窗体window.setSize(600,400);window.setResizable(false);window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 初始化表格形式,选择信号为行选Object[][] tableData = new Object[0][4];    //表格内容String[] names = {"时间","温度","湿度","光强"};  //设置表头model = new MyTableModel(tableData,names);table = new JTable(model);table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//设置table点击事件,点击即选中单行table.addMouseListener(new MouseListener() {@Override public void mouseClicked(MouseEvent e) {On_Table_clicked();}@Override public void mousePressed(MouseEvent e) {}@Override public void mouseReleased(MouseEvent e) {}@Override public void mouseEntered(MouseEvent e) {}@Override public void mouseExited(MouseEvent e) {}});//将table放入JScrollPane以便于滚动表格JScrollPane scrollPane = new JScrollPane(table);//开始布局控件JPanel panel1 = new JPanel();panel1.add(scrollPane);JPanel panel2 = new JPanel();panel2.add(getPanel());JPanel total = new JPanel();total.add(panel1);total.add(panel2);//加入控件window.add(total);window.pack();window.setVisible(true);}void On_BTN_add(){if (connect_flag == 0){Update_Field();model.addRow(GetObject());}else{String sql = "Insert Into visual_sensor values('"+SqlMessage.prepared.tim+"',"+SqlMessage.prepared.tmp+","+SqlMessage.prepared.hum+","+SqlMessage.prepared.lit+");";try {sys.upDate(sql);Update_Field();model.addRow(GetObject());} catch (SQLException e) {throw new RuntimeException(e);}}}void On_BTN_del(){if(connect_flag == 0){int flag = table.getSelectedRow();if(flag == -1) {JOptionPane.showMessageDialog(null, "未选择删除元素", "错误",JOptionPane.ERROR_MESSAGE);}else{model.removeRow(table.getSelectedRow());}}else{String sql = "Delete from visual_sensor Where time='"+ SqlMessage.selected.tim + "' and temperature = "+ SqlMessage.selected.tmp + " and humidity = "+ SqlMessage.selected.hum + " and light = "+ SqlMessage.selected.lit + ";";try {sys.upDate(sql);model.removeRow(table.getSelectedRow());} catch (SQLException e) {throw new RuntimeException(e);}}}void On_BTN_mod(){if (connect_flag == 0){On_BTN_del();On_BTN_add();}else{String sql = "Update visual_sensor set time = '"+SqlMessage.prepared.tim+ "', temperature = "+SqlMessage.prepared.tmp+ ", humidity = "+SqlMessage.prepared.hum+ ",light = "+SqlMessage.prepared.lit+ " where time = '"+SqlMessage.selected.tim+ "' AND temperature = "+SqlMessage.selected.tmp+ " AND humidity = "+SqlMessage.selected.hum+ " AND light = "+SqlMessage.selected.lit+ ";";try {sys.upDate(sql);//避免重复执行sql节约资源connect_flag = 0;On_BTN_del();On_BTN_add();connect_flag = 1;} catch (SQLException e) {throw new RuntimeException(e);}}}void On_BTN_sum(){//生成数据并填入缓冲区//数据均采用两位小数//格式化时间 时:分:秒LocalTime time = LocalTime.now();DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");String tm = time.format(formatter);SqlMessage.prepared.tim = tm;//格式化湿度 0-1double rand1=Math.random();String hum="0";hum += new DecimalFormat(".00").format(rand1);SqlMessage.prepared.hum = hum;//格式化光强 0-600double rand21=Math.random();Random random = new Random();int rand22 = random.nextInt(600);String light = rand22 + new DecimalFormat(".00").format(rand21);SqlMessage.prepared.lit = light;//格式化温度 18-34double rand31=Math.random();int rand32 = random.nextInt(16)+18;String tmp = rand32 + new DecimalFormat(".00").format(rand31);SqlMessage.prepared.tmp = tmp;//打印提示信息System.out.println("Summon column as\t"+tm+"\t"+tmp+"\t"+hum+"\t"+light);ShowInfo();}void On_BTN_con(){//切换sql连接状态,默认关闭,点击开启后直接读取DB table信息并加载if(connect_flag == 0){try {sys.SqlInit();System.out.println("Connect sql successfully!");connect_flag =1;} catch (SQLException | ClassNotFoundException e) {System.out.println("Connect sql failed!");throw new RuntimeException(e);}}else{try {sys.CloseAll();System.out.println("Close sql successfully!");connect_flag = 0;} catch (SQLException e) {System.out.println("Close sql failed!");throw new RuntimeException(e);}}}void On_BTN_lad(){if(connect_flag == 1){String sql = "select * from visual_sensor;";try {sys.SendMessage(sql);model.setRowCount(0);while(SqlMessage.result.next()){//改为在窗口上显示Object[] ob = new Object[4];ob[0] = SqlMessage.result.getString("time");ob[1] = SqlMessage.result.getString("temperature");ob[2] = SqlMessage.result.getString("humidity");ob[3] = SqlMessage.result.getString("light");model.addRow(ob);}SqlMessage.result.close();}catch (SQLException e) {System.out.println("加载数据异常");throw new RuntimeException(e);}}else{JOptionPane.showMessageDialog(null, "请连接数据库后刷新", "错误",JOptionPane.ERROR_MESSAGE);}}void On_Table_clicked(){int flag = table.getSelectedRow();if (flag!= -1){SqlMessage.prepared.tim = table.getValueAt(flag,0).toString();SqlMessage.prepared.tmp = table.getValueAt(flag,1).toString();SqlMessage.prepared.hum = table.getValueAt(flag,2).toString();SqlMessage.prepared.lit = table.getValueAt(flag,3).toString();SqlMessage.selected.tim = SqlMessage.prepared.tim;SqlMessage.selected.tmp = SqlMessage.prepared.tmp;SqlMessage.selected.hum = SqlMessage.prepared.hum;SqlMessage.selected.lit = SqlMessage.prepared.lit;ShowInfo();}}void ShowInfo(){Edit_lit.setText(SqlMessage.prepared.lit);Edit_tmp.setText(SqlMessage.prepared.tmp);Edit_hum.setText(SqlMessage.prepared.hum);Edit_tim.setText(SqlMessage.prepared.tim);}Object[] GetObject(){Object[] ob = new Object[4];ob[0] = SqlMessage.prepared.tim;ob[1] = SqlMessage.prepared.tmp;ob[2] = SqlMessage.prepared.hum;ob[3] = SqlMessage.prepared.lit;return ob;}void Update_Field(){SqlMessage.prepared.tim = Edit_tim.getText();SqlMessage.prepared.tmp = Edit_tmp.getText();SqlMessage.prepared.hum = Edit_hum.getText();SqlMessage.prepared.lit = Edit_lit.getText();}//***********************************************生成与绘制功能模块主要内容**********************************************Timer timer = new Timer(1000, e -> {//1秒生成一个数据,通过模拟按键实现On_BTN_sum();Insert_DataSet();On_BTN_add();});static JButton BTN_Func_Summon = new JButton("生成器");static JButton BTN_Func_Drawer = new JButton("制表器");void On_BTN_Func_Summon(){if(!timer.isRunning()){timer.start();System.out.println("Timer running ... ...");}else{timer.stop();System.out.println("Timer stopped ... ...");}}DefaultCategoryDataset dataset = new DefaultCategoryDataset();void On_BTN_Func_Drawer(){JFreeChart chart = ChartFactory.createLineChart("DataSet","Collected Time","Values(%)",dataset,PlotOrientation.VERTICAL,true,false,false);ChartFrame chartFrame = new ChartFrame("Course Design",chart);chartFrame.pack();chartFrame.setVisible(true);}void Insert_DataSet(){dataset.addValue((Double.parseDouble(SqlMessage.prepared.tmp)-18)/0.16,"temperature",SqlMessage.prepared.tim);dataset.addValue(Double.parseDouble(SqlMessage.prepared.hum)*100,"humidity",SqlMessage.prepared.tim);dataset.addValue(Double.parseDouble(SqlMessage.prepared.lit)/6,"light",SqlMessage.prepared.tim);}
}class MyTableModel extends DefaultTableModel{//自己构建表格模型,删除表格内编辑属性@Overridepublic boolean isCellEditable(int row, int column) {return false;}public MyTableModel(Object[][] data, Object[] columnNames) {setDataVector(data, columnNames);}
}

5、main方法

package Course_Design;
import java.sql.*;public class Conn {public static void main(String[] args) throws SQLException, ClassNotFoundException {MyWindow window = new MyWindow();window.InitWindow();}
}
//请注意将上面三个类放在一个软件包里,并用packge 包名;

看到最后,如果觉得对你有帮助,不妨点个关注,到主页看看我的其他作品,欢迎下次光临。

相关文章:

Java+SVNCloud+Mysql课程设计

文章目录 1、主要内容2、所需准备3、与sql访问的中间类:SqlMessage4、窗口界面5、main方法 1、主要内容 课程设计,主要通过Javas wing创建窗口,jdbc连接云端mysql数据库进行基本操作,支持随机生成数据并用动态展示数据结果。 先…...

MySQL之创建高性能的索引(四)

创建高性能的索引 空间数据索引(R-Tree) MyISAM表支持空间索引,可以用作地理数据存储。和B-Tree索引不同,这类索引无须前缀查询。空间索引会从所有维度来索引数据。查询时,可以有效地使用任意维度来组合查询。必须使用MySQL的GIS相关函数如…...

Python 限制输入数的范围

Python 限制输入数的范围 在 Python 编程中,我们经常需要限制用户输入的数据范围,以避免一些可能出现的问题。例如,在一个游戏程序中,我们可能想要确保玩家的分数在某个范围内,而不是太高或太低。在这个博文中&#x…...

STM32两轮平衡小车原理详解

STM32两轮平衡小车是一种基于STM32微控制器的智能机器人,它能够通过传感器和算法实现自我平衡。以下是对STM32两轮平衡小车原理的详解,以及一些基础的代码示例。 原理详解 1. 系统组成 主控制器:STM32系列微控制器,作为小车的大…...

(笔记)如何评价一个数仓的好坏

如何评价一个数仓的好坏 1数据质量产生原因评估方法流程 2模型建设产生问题原因评估方法流程 3数据安全产生问题原因评估方法流程 4成本/性能产生问题原因评估方法流程 5 用户用数体验产生问题原因评估方法流程 6数据资产覆盖产生问题原因评估方法流程 数仓评价好坏是对数仓全流…...

友善RK3399v2平台利用rkmpp实现硬件编解码加速

测试VPU 编译mpp sudo apt update sudo apt install gcc g cmake make cd ~ git clone https://github.com/rockchip-linux/mpp.git cd mpp/build/linux/aarch64/ sed -i s/aarch64-linux-gnu-gcc/gcc/g ./arm.linux.cross.cmake sed -i s/aarch64-linux-gnu-g/g/g ./arm.lin…...

Mysql 8.0 主从复制及读写分离搭建记录

前言 搭建参考:搭建Mysql主从复制 为什么要做主从复制? 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。架构的扩展。业务量越来越大,I/O访问频…...

PyTorch、显卡、CUDA 和 cuDNN 之间的关系

概述 PyTorch、显卡、CUDA 和 cuDNN 之间的关系及其工作原理可以这样理解: 显卡 (GPU) 显卡,特别是 NVIDIA 的 GPU,具有大量的并行处理单元,这些单元可以同时执行大量相似的操作,非常适合进行大规模矩阵运算&#x…...

Lambda 表达式练习

目录 sorted() 四种排序 List 转 Map map 映射 对象中 String 类型属性为空的字段赋值为 null BiConsumer,> T reduce(T identity, BinaryOperator accumulator) allMatch(Predicate p) groupingBy(Function f) flatMap(Function f) Optional.ofNullable(T t) 和 …...

JavaScript第七讲:数组,及练习题

目录 今天话不多说直接进入正题! 1. 创建数组对象 2. 数组长度 3. 遍历一个数组 4. 连接数组 5. 通过指定分隔符,返回一个数组的字符串表达 6. 分别在最后的位置插入数据和获取数据(获取后删除) 7. 分别在最开始的位置插入数据和获取数据(获取后删…...

从docker镜像反推Dockerfile

在项目运维的过程中,偶尔会遇到某个docker image打包时候的Dockerfile版本管理不善无法与image对应的问题,抑或需要分析某个三方docker image的构建过程,这时,就希望能够通过image反推构建时的instruction. 想实现这个过程可以使…...

车载软件架构 - AUTOSAR 的信息安全框架

车载软件架构 - AUTOSAR 的信息安全架构 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗…...

欧洲版“OpenAI”——Mistral 举办的 AI 大模型马拉松

近期,法国的 Mistral AI 举办了一场别开生面的 AI 大模型马拉松。要知道,Mistral 可是法国对 OpenAI 的有力回应,而且其技术还是完全开源的呢!这场在巴黎举行的黑客马拉松,规模空前盛大,竟然有超过 1000 名…...

Java | Leetcode Java题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; class Solution {public int longestConsecutive(int[] nums) {Set<Integer> num_set new HashSet<Integer>();for (int num : nums) {num_set.add(num);}int longestStreak 0;for (int num : num_set) {if (!num_set.contai…...

C++的List

List的使用 构造 与vector的区别 与vector的区别在于不支持 [ ] 由于链表的物理结构不连续,所以只能用迭代器访问 vector可以排序,list不能排序(因为快排的底层需要随机迭代器,而链表是双向迭代器) (算法库里的排序不支持)(需要单独的排序) list存在vector不支持的功能 链…...

网易有道QAnything使用CPU模式和openAI接口安装部署

网易有道QAnything可以使用本地部署大模型&#xff08;官网例子为qwen&#xff09;也可以使用大模型接口(OPENAI或者其他大模型AI接口 )的方式&#xff0c;使用在线大模型API接口好处就是不需要太高的硬件配置。 本机环境windows11 首先安装WSL环境, 安装方法参考https://zhuan…...

量子加速超级计算简介

本文转载自&#xff1a;量子加速超级计算简介(2024年 3月 13日) By Mark Wolf https://developer.nvidia.cn/zh-cn/blog/an-introduction-to-quantum-accelerated-supercomputing/ 文章目录 一、概述二、量子计算机的构建块&#xff1a;QPU 和量子位三、量子计算硬件和算法四、…...

Unity3D 基于YooAssets的资源管理详解

前言 Unity3D 是一款非常流行的游戏开发引擎&#xff0c;它提供了丰富的功能和工具来帮助开发者快速创建高质量的游戏和应用程序。其中&#xff0c;资源管理是游戏开发中非常重要的一部分&#xff0c;它涉及到如何有效地加载、管理和释放游戏中的各种资源&#xff0c;如模型、…...

Linux 自动化升级Jar程序,指定Jar程序版本进行部署脚本

文章目录 一、环境准备二、脚本1. 自动化升级Jar程序2. 指定Jar程序版本进行部署总结一、环境准备 本文在 CentOS 7.9 环境演示,以springboot为例,打包后生成文件名加上版本号,如下打包之后为strategy-api-0.3.2.jar: pom.xml<?xml version="1.0" encoding=&…...

python练习五

Title1&#xff1a;请实现一个装饰器&#xff0c;每次调用函数时&#xff0c;将函数名字以及调用此函数的时间点写入文件中 代码&#xff1a; import time time time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 获取当前的时间戳 # 定义一个有参装饰器来实…...

YOLOv1深入解析与实战:目标检测算法原理

参考&#xff1a; https://zhuanlan.zhihu.com/p/667046384 https://blog.csdn.net/weixin_41424926/article/details/105383064 https://arxiv.org/pdf/1506.02640 1. 算法介绍 学习目标检测算法&#xff0c;yolov1是必看内容&#xff0c;不同于生成模型&#xff0c;没有特别…...

Apache Calcite - 自定义标量函数

前言 上一篇文章中我们介绍了calcite中内置函数的使用。实际需求中会遇到一些场景标准内置函数无法满足需求&#xff0c;这时候就需要用到自定义函数。在 Apache Calcite 中添加自定义函数&#xff0c;以便在 SQL 查询中使用自定义的逻辑。这对于执行特定的数据处理或分析任务…...

STM32作业实现(四)光敏传感器

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…...

HTML+CSS 文本动画卡片

效果演示 实现了一个图片叠加文本动画效果的卡片&#xff08;Card&#xff09;布局。当鼠标悬停在卡片上时&#xff0c;卡片上的图片会变为半透明&#xff0c;同时显示隐藏在图片上的文本内容&#xff0c;并且文本内容有一个从左到右的渐显动画效果&#xff0c;伴随着一个白色渐…...

MongoDB CRUD操作: 在本地实例进行文本搜索查询

MongoDB CRUD操作&#xff1a; 在本地实例进行文本搜索查询 文章目录 MongoDB CRUD操作&#xff1a; 在本地实例进行文本搜索查询举例创建集合创建文本索引精准搜索排除短语结果排序 在本地实例运行文本搜索查询前&#xff0c;必须先在集合上建立文本索引。MongoDB提供文本索引…...

文档智能开源软件

文档智能介绍&#xff1a; 文档智能通常指的是利用人工智能技术来处理和分析文档内容&#xff0c;以实现自动化、智能化的文档管理。文档智能的应用领域非常广泛&#xff0c;包括但不限于&#xff1a; 1. **文档识别**&#xff1a;使用OCR&#xff08;光学字符识别&#xff0…...

[C][可变参数列表]详细讲解

目录 1.宏含义及使用2.宏原理分析1.原理2.宏理解 1.宏含义及使用 依赖库stdarg.hva_list 其实就是char*类型&#xff0c;方便后续按照字节进行指针移动 va_start(arg, num) 使arg指向可变参数部分(num后面) va_arg(arg, int) 先让arg指向下个元素&#xff0c;然后使用相对位置…...

54. 螺旋矩阵【rust题解】

题目 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 示例 1 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2 输入&#xff1a;matrix [[1,2,3,4],[5,6,…...

学习笔记——网络参考模型——TCP/IP模型(传输层)

四、TCP/IP模型-传输层 一、TCP 1、TCP定义 TCP(Transmission Control Protocol&#xff0c;传输控制协议)∶为应用程序提供可靠的面向连接的通信服务。目前&#xff0c;许多流行的应用程序都使用TCP。 连接&#xff1a;正式发送数据之前&#xff0c;提前建立好一种虚拟的&…...

Java中的Instant

在Java中&#xff0c;Instant 是 java.time 包中的一个类&#xff0c;用于表示时间轴上的一个瞬时点&#xff0c;通常以纳秒精度表示。它通常用于表示机器可读的时间戳&#xff0c;而不是人类可读的时间表示&#xff08;如日期和时间&#xff09;。 Instant 主要用于时间计算和…...