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

第三阶段04-同步请求和异步请求,get/post,Josn,pojo,Session/Cookie,过滤器Filter

文章目录

      • 同步请求和异步请求
      • 客户端如何发出异步请求
      • 自定义模板代码
      • Get和Post请求
      • 异步版本的注册和登录
      • 商品管理系统(异步版本)
    • 商品列表步骤:
      • 前后端分离
      • 为什么需要前后端分离?
      • 为什么以后不再使用同步请求?
      • JSON
      • POJO
      • 会话对象Session
      • 如何记住登录状态
      • 后端的MVC
      • 会话管理Cookie
      • 通过Cookie实现记住用户名和密码功能
      • 过滤器Filter
      • timstamp时间类型
      • 当表字段的名和VO中的属性名不一致时的解决方案:

同步请求和异步请求

  • 同步: 指单线程依次做几件事

  • 异步: 指多线程同时做几件事

  • 同步请求: 指客户端只有一个主线程, 主线程需要负责页面的渲染操作以及监听操作,如果需要发出请求时,主线程会停止渲染(清空页面) 发出请求, 直到服务器响应了数据之后才会将服务器响应的数据再次渲染出来,这样把原内容清空掉显示新的内容称为页面的整体刷新, 同步请求只能实现整体刷新,无法实现页面的局部刷新

  • 异步请求: 指客户端主线程负责页面的渲染和监听,如果需要发出请求时,创建一个新的子线程,由子线程发出请求,请求到数据后把数据呈现在原页面的基础之上, 这种对原页面的部分内容进行改动称为页面的局部刷新, 只有通过异步请求才能实现页面的局部刷新.

客户端如何发出异步请求

  • 之前发出请求的方式都是同步请求
  • 通过Axios框架发出异步请求
    • html页面中引入axios.js框架文件
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script>
  • 相关代码:

    //发出异步get请求
    axios.get("/helloAxios").then(function (response) {//response是响应对象,response.data得到服务器响应的数据alert(response.data);v.info=response.data;
    });
    

自定义模板代码

请添加图片描述

请添加图片描述

Get和Post请求

  • Get: 请求参数在请求地址的后面, 由于参数在请求地址当中是可见的所以不能传递带有敏感信息的参数,Get请求参数只能传递几k的数据
    • 应用场景: 如果只传递一个参数并且非敏感信息时,一般使用get 因为方便,从字面意思理解get是获取的意思,如果这个请求是查询请求一般也都使用get
  • Post:请求参数在请求体里面,参数大小没有限制
    • 应用场景: 参数中有敏感信息时,上传文件时, 当传递的参数为多个参数,将多个参数封装到自定义的JS对象里面进行传递时使用Post会更方便
  • 应用场景总结: 除了必须使用post的两种情况(1.敏感信息 2.文件上传) 如果传递的参数是2个参数以内 则使用get请求, 如果大于2个参数一般使用post请求, 2个参数时使用两者都可以

异步版本的注册和登录

  • 准备工作:

    • 创建boot08工程, 勾选3个对勾

    • 创建完工程后把mysql的依赖换掉 然后刷新maven

      <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.15</version>
      </dependency>
      
    • 修改application.properties里面连接数据库的信息 url username 和password
      请添加图片描述

    • [

    • 在工程中static里面添加index.html首页 首页中准备注册和登录两个超链接

  • 注册功能:

    • 创建reg.html页面, 在页面中通过vue对页面进行管理, 页面中准备三个文本框和一个自定义按钮, 三个文本框和data里面的user对象进行双向绑定, 给按钮添加点击事件, 事件触发时向/reg地址发出异步post请求,并且把v.user传递过去, 服务器返回的值是1代表注册成功显示到首页 否则代表用户名已存在.
    • 创建controller.UserController 在里面添加reg方法处理/reg请求, 创建entity.User实体类, 在reg方法的参数列表处声明User对象接收传递过来的参数(不要忘记使用@RequestBody注解修饰), 在方法中调用mapper的selectByUsername方法 通过用户名查询到数据库里面的用户信息, 如果查询到了直接给客户端响应2 代表用户名已存在, 如果没有查询到 调用mapper的insert方法 最后响应1 代表注册成功.
    • 创建mapper.UserMapper,里面实现两个方法分别是selectByUsername和insert方法
  • 登录步骤:

    • 创建login.html页面, 在页面中通过vue对页面进行管理, 页面中准备2个文本框和一个自定义按钮, 2个文本框和data里面的user对象进行双向绑定, 给按钮添加点击事件, 事件触发时向/login地址发出异步post请求,并且把v.user传递过去, 服务器返回的值是1代表登录成功显示到首页如果返回的值是2代表用户名不存在 否则代表密码错误
    • 在UserController中添加login方法处理/login请求,参数列表处声明User对象接收传递过来的参数(@RequestBody不要忘记) 在方法中调用mapper的selectByUsername方法, 通过判断分别给客户端响应1,2,3 三种情况

商品管理系统(异步版本)

  • 添加商品步骤:
    • 在首页里面添加超链接 请求地址 /insert.html
    • 创建insert.html页面 通过vue管理页面 ,准备三个文本框 和一个自定义按钮,文本框和变量进行双向绑定, 给按钮添加点击事件, 事件出发时向/insert地址发出异步的post请求,把双向绑定的数据提交给服务器, 响应后弹出添加完成 并返回首页
    • 创建ProductController,添加insert方法处理/insert请求, 创建Product实体类,在参数列表处声明 用来接收参数, 不要忘记使用@RequestBody注解, 在方法中调用Mapper的insert方法
    • 创建ProductMapper, 里面添加增删改查四个方法(写法和上一个版本的写法一样)
  • 商品列表步骤:

前后端分离

请添加图片描述
请添加图片描述

为什么需要前后端分离?

  • 如果不使用前后端分离设计的话 后端程序员需要准备两套Controller服务于不同的前端(浏览器和手机),这样的话后端的重复性工作量比较大,所以通过前后端分离的方式可以让后端一套Controller服务于任何前端, 这样能够提高后端程序员的开发效率

为什么以后不再使用同步请求?

  • 因为前后端分离后, 浏览器端获取页面需要单独发请求获取,请求到页面后再次发出请求获取数据,把得到的数据再展示到页面中, 这就是一个非常典型的页面局部刷新的需求,只有通过异步请求才能实现页面的局部刷新, 同步请求是无法实现的,所以以后工作中只要是前后端分离 就必须使用异步请求.

注册成功!

登录成功!

用户名不存在!

密码错误!

tom:18:男&jerry:20:女

JSON

  • JSON是一种轻量级的数据交换格式
  • 客户端和服务器之间进行复杂的数据传输时, 如果每次传输都自己定义传输格式的话太影响开发效率, JSON是一种通用的数据交换格式,使用JSON可以大大提高开发效率
[{"name":"tom","age":18,"gender":"男"},
{"name":"jerry","age":20,"gender":"女"}]

话太影响开发效率, JSON是一种通用的数据交换格式,使用JSON可以大大提高开发效率

[{"name":"tom","age":18,"gender":"男"},
{"name":"jerry","age":20,"gender":"女"}]

请添加图片描述

POJO

  • pojo是简单的Java对象, 是entity实体类、值对象VO和数据传输对象DTO的总称
  • entity实体类: 通常实体类的属性和表字段是一一对应的
  • VO ValueObject值对象: 从数据库里面查询出来的数据 通过值对象对其进行封装
  • DTO DataTransferObject数据传输对象: 客户端给服务器传输多个参数时,通过DTO进行封装

会话对象Session

  • 服务器会针对每一个客户端在内存中创建一个会话对象, 这个会话对象供同一个客户端的多次请求共享使用, 保存在里面的数据可以给同一个客户端的每一次请求使用.

  • 相关方法:

    • session.setAttribute(“key”,value); 往会话对象中保存数据
    • session.getAttribute(“key”); 从会话对象中获取数据
    • session.removeAttribute(“key”); 从会话对象中删除数据

如何记住登录状态

  1. 客户端登录成功时, 把当前登录的用户对象保存到会话对象里面
  2. 任何客户端显示首页时都发请求 从会话对象中获取登录成功时保存的用户对象, 如果登录过可以得到用户对象, 如果没有登录过则得到的是个null, 此时就可以通过判断是否拿到了用户对象 来决定当前客户端有没有登录过

后端的MVC

  • 将实现一个业务功能的所有代码划分为三部分(包含前端)
  • 前端MVC: 是将实现前端业务功能的代码划分为三部分(不包含后端)
  • M: Model 模型,指数据模式, 对应的是工程中Mapper相关代码
  • V: View 视图, 对应的是工程中前端页面相关代码
  • C: Controller控制器, 对应的是工程中Controller相关代码

会话管理Cookie

  • 客户端和服务器之间进行数据传输,遵循的是HTTP协议, 此协议是无状态协议(一次请求对应一次响应)响应完之后断开连接, 服务器是无法跟踪客户端的请求的, 通过Cookie技术可一个在客户端第一次请求服务器时服务器给客户端创建一个标识, 之后客户端每次发请求时都会带上这个标识 这样的话服务器就可以识别此客户端了(类似于打孔式的会员卡), 但是由于Cookie的形式数据是保存在客户端的, 存在被篡改的风险, 通过Session可以解决此问题, 因为Session的数据是保存在服务器的(类似于银行卡).

请添加图片描述
请添加图片描述

  • 通过会话管理技术可以保存服务器和客户端之间的数据(比如让客户端记住用户名和密码,让服务器记住当前客户端的登录状态), 数据库保存的是用户的数据

  • Cookie和Session对比

    • Cookie: 数据保存在客户端(类似打孔式的会员卡)
      • 保存时间: 默认保存在浏览器的内存中, 当前浏览器关闭时数据会清除,可以设置任意保存时间,设置时间后数据会保存到磁盘中, 时间到了之后自动清除
      • 数据类型: 只能保存字符串类型的数据
      • 数据量: 由于cookie的数据需要每次发请求时保存在请求头里面,所以数据量只能保存几k的数据
      • 应用场景: 需要长时间保存的客户端数据,比如:记住用户名和密码
    • Session: 数据保存在服务器(类似银行卡)
      • 保存时间: 数据保存在服务器内存中,默认保存半个小时,可以修改时间,但不推荐.(因为服务器只有一个所有客户端的数据都保存在这一个服务器里面这样服务器保存时间太久的话压力太大)
      • 数据类型: 可以保存任意对象类型
      • 数据量: 没有数据大小的限制,但是不建议保存太大的数据(因为服务器只有一个所有客户端的数据都保存在这一个服务器里面这样服务内存器压力太大)
      • 应用场景: 对安全性要求较高的,但是不需要保存时间太久的数据, 比如记住客户端的登录状态

通过Cookie实现记住用户名和密码功能

  1. 在login.html页面添加多选框记住用户名和密码
    请添加图片描述

  2. 在登录成功时创建Cookie对象把用户名和密码保存到Cookie里面 下发给客户端

请添加图片描述

请添加图片描述

  1. 在login.html页面中 从cookie里面把用户名和密码取出 并赋值给和页面进行绑定的变量

过滤器Filter

请添加图片描述

  • 使用过滤器可以让客户端请求到资源之前或之后 经过过滤器, 这样可以把请求多个资源时执行的相同的代码写在过滤器里面, 这样只需要写一次,起到了代码复用的作用

  • 如何使用过滤器:

    • 创建Filter.java类文件

    • 在XXXAplication.java 类文件中添加 组件扫描注解
      请添加图片描述

    • 在过滤器中书写以下代码:

      package cn.tedu.coolshark.filter;import cn.tedu.coolshark.pojo.vo.UserVO;import javax.servlet.*;
      import javax.servlet.annotation.*;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import javax.servlet.http.HttpSession;
      import java.io.IOException;@WebFilter(filterName = "MyFilter",urlPatterns = {"/insertProduct.html","/insertBanner.html","/admin.html","/product/delete"})
      public class MyFilter implements Filter {//过滤器初始化方法public void init(FilterConfig config) throws ServletException {}//过滤器销毁时执行的方法public void destroy() {}//请求资源之前和之后执行的方法@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {//因为要用到子类类型中的方法 所以进行类型强转HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse res = (HttpServletResponse) response;//从请求对象中获取当前客户端对应的会话对象HttpSession session = req.getSession();//从会话对象中获取登录成功时保存的用户对象UserVO user = (UserVO) session.getAttribute("user");if (user!=null){//登录过  放行允许客户端请求资源chain.doFilter(request, response); //请求资源}else{//未登录 禁止请求资源 并显示登录页面res.sendRedirect("/login.html");}}
      }
      
  • urlPatterns的配置方式:

    • 精确匹配: /insertBanner.html /insertProduct.html /product/delete
    • 后缀匹配: *.jpg *.html *.xxxx
    • 路径匹配: /user/* /product/*
    • 全部匹配: /* 匹配网站中所有资源

timstamp时间类型

  • 如果数据库表中的某条数据发生改变时,不管改变的是哪一个字段 这个timestamp 类型的数据 会自动修改成当前的系统时间

  • 关闭timestamp类型的自动更新功能

    use cs;

    alter table product change created created timestamp not null default current_timestamp;

  • 打开timestamp类型的自动更新功能

    alter table product change created created timestamp not null default current_timestamp on update current_timestamp;

当表字段的名和VO中的属性名不一致时的解决方案:

  1. 查询数据时通过别名的方式解决(不能复用)

  2. 如果不一致仅仅是因为命名规范不一致的情况下, 在application.properties里面添加以下配置即可解决

    mybatis.configuration.map-underscore-to-camel-case=true
    
  3. 通过resultMap手动映射的方式解决(可以复用)

请添加图片描述

相关文章:

第三阶段04-同步请求和异步请求,get/post,Josn,pojo,Session/Cookie,过滤器Filter

文章目录同步请求和异步请求客户端如何发出异步请求自定义模板代码Get和Post请求异步版本的注册和登录商品管理系统(异步版本)商品列表步骤:前后端分离为什么需要前后端分离?为什么以后不再使用同步请求?JSONPOJO会话对象Session如何记住登录状态后端的MVC会话管理Cookie通过…...

Spark学习:spark相似算子解析

spark算子 一、Map、Flatmap和MapPartition二、repartition和coalesce三、reduceByKey和groupByKey四、collect、take和first一、Map、Flatmap和MapPartition 算子作用map接收一个高阶函数f,对每个算子进行f操作flatmap接收一个高阶函数f,对每个元素进行f操作,形成一个大的集合…...

MySQL操作数据表-----------创建数据表(一)

在MySQL中创建数据库完成后&#xff0c;需要使用USE 数据库名的形式指定进行操作的数据库&#xff0c;然后再去执行创建数据表的SQL语句&#xff0c;也可以直接使用数据库名.数据表名的形式创建数据表。 1.创建空数据表 语法格式&#xff1a;CREATE TABLE [IF EXISTS] 表名 &…...

Java “框架 = 注解 + 反射 + 设计模式” 之 注解详解

Java ”框架 注解 反射 设计模式“ 之 注解详解 每博一文案 刹那间我真想令时光停住&#xff0c;好让我回顾自己&#xff0c;回顾失去的年华&#xff0c;缅怀哪个穿一身短小的连衣裙 和瘦窄的短衫的小女孩。让我追悔少年时代&#xff0c;我心灵的愚钝无知&#xff0c;它轻易…...

特斯拉4D雷达方案首次曝光!高阶智驾市场比拼安全冗余

随着L2级智能驾驶进入普及阶段&#xff0c;L3/L4级赛道正在成为各家车企的下一个竞争焦点。背后的最大难题&#xff0c;就是如何在成本可控的前提下&#xff0c;保证足够的安全。 高工智能汽车研究院监测数据显示&#xff0c;2022年度中国市场&#xff08;不含进出口&#xff…...

Echarts 每个柱子一种渐变色的象形柱状图

第023个点击查看专栏目录本示例是解决每个柱状图的每一个柱子都呈现一种渐变色&#xff0c;每个柱子的颜色都不同。这里同时采用了象形的柱状图效果。 文章目录示例效果示例源代码&#xff08;共125行&#xff09;相关资料参考专栏介绍示例效果 示例源代码&#xff08;共125行&…...

叠氮试剂79598-53-1,6-Azidohexanoic Acid,6-叠氮基己酸,末端羧酸可与伯胺基反应

●中文名&#xff1a;6-叠氮基己酸●英文名&#xff1a;6-Azidohexanoic Acid&#xff0c;6-Azidohexanoic COOH●外观以及性质&#xff1a;西安凯新生物科技有限公司供应的6-Azidohexanoic Acid浅黄色或者无色油状&#xff0c;叠氮化物可使用铜催化的Click化学与末端炔烃共轭&…...

Nginx网站服务——编译安装、基于授权和客户端访问控制

文章目录一、Nginx概述1.1、Nginx的特点1.2、Nginx编译安装1.3、Nginx运行控制1.4、Nginx和Apache的区别二、编译安装Nginx服务的操作步骤2.1、关闭防火墙&#xff0c;将安装nginx所需软件包传到/opt目录下2.2、安装依赖包2.3、创建运行用户、组&#xff08;Nginx 服务程序默认…...

Spring Boot 版本升级2.2.11.RELEASE至2.7.4

2.2.11.RELEASE > 2.7.4项目更新spring-boot-starter-parent 主依赖&#xff0c;导致项目跑不起了日志也没有输出有用信息&#xff0c;自己查看源码调试启动入口打断点&#xff0c;一步步进入方法定位项目停止代码我的项目执行到SpringApplication.class 的152行代码会停止项…...

OpenShift 4 - 使用辅助安装器安装单节点 OpenShift

文章目录单节点 OpenShift 和 OpenShift 辅助安装器单节点 OpenShiftOpenShift 辅助安装器使用辅助安装器安装单节点 OpenShift本文使用的安装环境准备环境在宿主机上安装 KVM 环境创建 SSH 证书根据集群配置&#xff0c;用辅助安装器生成 Discovery ISO用 Discovery ISO 启动 …...

Allegro如何快速锁定整板测试点操作指导

Allegro如何快速锁定整板测试点操作指导 在做PCB设计的时候,会需要给整板添加测试点,用于飞针测试,如下图 在测试点添加好之后,文件输出之前需要把测试点全部锁定,避免因为测试点模具开好,测试点被移动的情况出现 如果逐个锁定Via,容易遗漏 Allegro支持快速锁定整板测…...

系统分析师---知识产权标准化思维导图

保护范围以及对象&#xff08;3星&#xff09; 著作权法&#xff1a;不用申请&#xff0c;作品完整即保护绘画摄影作品&#xff0c;原件持有人只是所有权与展览权&#xff0c;著作权归原作者 专利法&#xff1a;专利权需要申请商标法&#xff1a;商标权需要申请反不正当竞争法…...

HiEV洞察 | 特斯拉HW4.0再爆猛料,高精定位、雷达均有变动

作者 | 查理斯 编辑 | 王博特斯拉 HW4.0 消息传出后&#xff0c;有人爆料说在硬件层面发生了巨大变化&#xff0c;引发行业轰动。大家都在猜测HW4.0 具体做了哪些改动。 2月16日&#xff0c;Twitter用户greentheonly爆出HW4.0的主板拆解照片。2月18日又爆出毫米波雷达的拆解照片…...

潜伏的 Linux Rootkit:Syslogk

Rootkit 是非常危险的恶意软件&#xff0c;一旦侵入就很难被发现。开发 Rootkit 通常更加困难&#xff0c;很多攻击者都倾向于重用开源项目。 Adore-Ng 是一个相对较老的、开源的 Linux 内核 Rootkit&#xff0c;最初针对内核 2.x 版本开发&#xff0c;但目前已更新为针对内核…...

JVM总结

1. 内存结构 线程私有区 程序计算器 作用&#xff1a;是一块较小的内存空间&#xff0c;存储的是当前线程所执行的字节码文件的序号特点&#xff1a;线程私有&#xff0c;不会出现内存空间溢出 虚拟机栈 虚拟机栈是管理JAVA方法执行的内存模型&#xff0c;每个方法执行时都…...

AOF:redis宕机,如何避免数据丢失

由于redis是基于内存的数据库&#xff0c;一旦宕机&#xff0c;数据就会丢失?如何解决&#xff1f; 目前&#xff0c;Redis 的持久化主要有两大机制&#xff0c;即 AOF&#xff08;Append Only File&#xff09;日志和 RDB&#xff08;Redis DataBase&#xff09; 快照。 AO…...

LC-3—MIO、MMIO、Caller Save、Callee Save

LC-3—MMIO、Caller Save、Callee SaveMMIOCaller Save、Callee Save举个例子MMIO MMIO&#xff08;Memory Mapped I/O&#xff09;是一种在系统内存中映射I/O端口的技术&#xff0c;它允许设备直接访问内存中的特定地址&#xff0c;从而实现I/O操作。MMIO技术可以提高I/O操作…...

SQL注入报错注入之floor()报错注入原理分析

简介 对于SQL注入的报错注入通常有三个函数需要我们掌握&#xff1a; extractValue(xml_frag, xpath_expr)updateXML(xml_target, xpath_expr,new_xml)floor() 对于extractValue和updateXML函数来说比较好理解&#xff0c;就不做解释了&#xff0c;这里只对floor函数的报错注…...

2023CS双非保研985经验分享(南大、华科、中科大科学岛、国防科大、西交、中南、深圳大学、北邮、中科院等)

前言&#xff1a; 2022保研以来&#xff0c;因为自己的双非背景&#xff0c;要与985、211的排名靠前的计科大佬竞争&#xff0c;不自信、焦虑无时无刻的包围着我&#xff1b;所幸&#xff0c;一路以受到了许多学长、学姐耐心的帮助&#xff0c;也有很多保研的同学一路互相支撑。…...

Shell中的IFS

IFS是shell的内置变量&#xff0c;IFS是一个字符串&#xff0c;里面的每一个字符都会用来作为分隔符进行单词分割。 IFS变量只在当前shell起作用。 一、对$*的影响 先做参数替换把$*替换成参数列表。相当于args[] 然后下面分两种情况&#xff1a; &#xff08;1&#xff09…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...