【JavaWeb】异步请求——AJAX

目录

  • Ajax(Asynchronous JavaScript and XML)
    • 优点
    • 传统Web与Ajax的差异
    • Ajax工作流程
    • Ajax 经典应用场景
    • XMLHttpRequest
      • 常用方法
      • 事件
      • 常用属性
    • ajax: GET请求和POST请求的区别
  • 传统Ajax实现
    • 传统方式实现Ajax的不足
  • $.ajax()
    • 语法
    • 常用属性参数
    • 常用函数参数
  • Ajax的其他方法
    • $.get()
      • 语法
    • $.post()
      • 语法
    • $.getJson()
      • 语法
    • .load() [了解]
  • JSON(JavaScript Object Notation)
    • JSON的优点
    • 定义JSON对象
    • 定义JSON数组
    • JSON使用综合案例
  • 在Ajax中使用JSON数据格式
  • FastJSON
    • 入口类:com.alibaba.fastjson.JSON
    • 枚举类型 SerializerFeature 定义了多种序列化属性
      • 代码示例
  • 基于表单数据的Ajax请求
    • .serializeArray()
      • 检测一组表单元素中的有效控件
      • 将有效控件序列化为JSON对象数组
    • $.param()
    • 代码示例

Ajax(Asynchronous JavaScript and XML)

  • 使用JavaScript 和 XML实现的异步刷新技术
  • Ajax不是新的编程语言,而是一种使用现有标准的新方法
  • Ajax是一种在无需重新加载整个网页的情况下,能够与服务器交换数据并更新部分网页的技术
  • Ajax最大的优点是页面无刷新,用户的体验非常好。并且使用异步方式与服务器通信,具有更加迅速的响应能力

优点

  • 我们可以使用Ajax进行无刷新,无刷新是指不刷新整个页面,只刷新局部。
  • 无刷新的好处: 只更新部分页面,有效利用带宽,提高用户体验
    • 只更新部分页面,有效利用带宽
    • 提供连续的用户体验
    • 提供类似C/S的交互效果,
    • 操作更方便

传统Web与Ajax的差异

差异说明
发送请求方式不同传统Web 浏览器发送同步请求
Ajax技术 异步引擎对象发送请求
服务器响应不同传统Web 响应内容是一个完整页面
Ajax技术 响应内容只是需要的数据
客户端处理方式不同传统Web 需等待服务器响应完成并重新加载整个页面后用户才能进行操作
Ajax技术 可以动态更新页面中的部分内容,不影响用户在页面进行其他操作

Ajax工作流程

在这里插入图片描述

Ajax 经典应用场景

  • 搜索引擎根据用户输入关键字,自动提示检索关键字
  • 动态加载数据,按需取得数据【树形菜单、联动菜单…】
  • 改善用户体验。【输入内容前提示、带进度条文件上传…】
  • 电子商务应用。 【购物车、邮件订阅…】
  • 访问第三方服务。【访问搜索服务、rss 阅读器】
  • 页面局部刷新

XMLHttpRequest

  • 整个Ajax技术的核心
  • 提供异步发送请求的能力

常用方法

方 法说 明
open( String method, String url, boolean async, String user, String password )创建一个新的HTTP请求
send( String data )发送请求到服务器端
abort( )取消当前请求
setRequestHeader( String header, String value )设置请求的某个HTTP头信息
getResponseHeader( String header )获取响应的指定HTTP头信息
getAllResponseHeader( )获取响应的所有HTTP头信息

事件

  • onreadystatechange:指定回调函数

常用属性

  • readyState:XMLHttpRequest的状态信息
就绪状态码说 明
0XMLHttpRequest对象未完成初始化
1XMLHttpRequest对象开始发送请求
2XMLHttpRequest对象的请求发送完成
3XMLHttpRequest对象开始读取响应
4XMLHttpRequest对象读取响应结束
  • status:HTTP的状态码
状态码说 明
200服务器正确返回响应
404请求的资源不存在
500服务器内部错误
403没有访问权限
……
  • statusText:返回当前请求的响应状态
  • responseText:以文本形式获得响应的内容
  • responseXML:将XML格式的响应内容解析成DOM对象

ajax: GET请求和POST请求的区别

步 骤请求方式实 现 代 码
初始化组件GETxmlHttpRequest.open( “GET”, url, true );
初始化组件POSTxmlHttpRequest.open( “POST”, url, true );
xmlHttpRequest.setRequestHeader( “Content-Type”,“application/x-www-form-urlencoded” );
发送请求GETxmlHttpRequest.send( null );
发送请求POSTxmlHttpRequest.send(“key=xxx&type=12&year=20124” );

传统Ajax实现

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
	function validate() {
		var name = $("#name").val();
		if (name == null || name == "") {
			$("#nameDiv").html("用户名不能为空!");
		} else {
			//1.创建XMLHttpRequest对象
			xmlHttpRequest = createXmlHttpRequest();
			//2.设置回调函数
			xmlHttpRequest.onreadystatechange = callBack;
			//3.初始化XMLHttpRequest组件
			var url = "userServlet?name=" + name;//服务器端URL地址,name为用户名文本框获取的值
			xmlHttpRequest.open("GET", url, true);
			//4.发送请求
			xmlHttpRequest.send(null);
			/* 使用POST方式发送请求
			var url = "userServlet";//服务器端URL地址
			xmlHttpRequest.open("POST", url, true);
			xmlHttpRequest.setRequestHeader("Content-Type",
					"application/x-www-form-urlencoded");
			var data = "name=" + name;//需要发送的数据信息,name为用户名文本框获取的值
			xmlHttpRequest.send(data);
            */
			//Ajax 回调函数
			function callBack() {
				if (xmlHttpRequest.readyState == 4
						&& xmlHttpRequest.status == 200) {
					var data = xmlHttpRequest.responseText;
					if (data == "true") {
						$("#nameDiv").html("用户名已被使用!");
					} else {
						$("#nameDiv").html("用户名可以使用!");
					}
				}
			}//end of callBack()
		}
	}//end of validate()

	/*
	 *创建XMLHttpRequest对象
	 */
	function createXmlHttpRequest() {
		if (window.XMLHttpRequest) {//返回值为true时说明是新版本IE或其他浏览器
			return new XMLHttpRequest();
		} else {//返回值为false时说明是老版本IE浏览器(IE5和IE6)
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
</script>
</head>
<body>
	<form action="" id="form1">
		<table>
			<tr>
				<td>用 户 名:</td>
				<td><input type="text" name="name" id="name"
					onblur="validate();" />&nbsp;<font color="#c00fff">*</font></td>
				<td>
					<div id="nameDiv" style="display: inline"></div></td>
			</tr>
		</table>
	</form>
</body>
</html>

传统方式实现Ajax的不足

  1. 步骤繁琐
  2. 方法、属性、常用值较多不好记忆
  3. 处理复杂结构的响应数据(如XML格式)比较烦琐
  4. 浏览器兼容问题

jQuery将Ajax相关操作都进行了封装

$.ajax()

语法

$.ajax( [settings] );

$.ajax( {
      "url"      :  "url",      	// 要提交的URL路径
      "type"     :  "get",        	// 发送请求的方式
      "data"     :  data,         	// 要发送到服务器的数据
      "dataType" :  "text",           	// 指定传输的数据格式
      "success"  :  function(result) {  // 请求成功后要执行的代码
	   },
      "error"    :  function() {  	// 请求失败后要执行的代码
	   }
} );

常用属性参数

参 数类 型说 明
urlString发送请求的地址,默认为当前页地址
typeString请求方式,默认为GET
dataPlainObject或 String或Array发送到服务器的数据
dataTypeString预期服务器返回的数据类型,包括:XML、HTML、Script、JSON、JSONP、text
timeoutNumber设置请求超时时间
globalBoolean表示是否触发全局Ajax事件,默认为true

常用函数参数

参 数类 型说 明
beforeSendFunction ( jqXHR jqxhr,PlainObject settings )发送请求前调用的函数
successFunction( 任意类型 result,String textStatus, jqXHR jqxhr )请求成功后调用的函数
参数result:可选,由服务器返回的数据
errorFunction ( jqXHR jqxhr, String textStatus, String errorThrown)请求失败时调用的函数
completeFunction ( jqXHR jqxhr,String textStatus )请求完成后(无论成功还是失败)调用的函数
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
	$("#name").blur(function() {
		var name = this.value;
		if (name == null || name == "") {
			$("#nameDiv").html("用户名不能为空!");
		} else {
			$.ajax({
                "url"       : "userServlet",   //要提交的URL路径
                "type"      : "GET",           //发送请求的方式
                "data"      : "name="+name,    //要发送到服务器的数据
                "dataType"  : "text",          //指定返回的数据格式
                "success"   : callBack,        //响应成功后要执行的代码
                "error"     : function() {     //请求失败后要执行的代码
                    alert("用户名验证时出现错误,请稍后再试或与管理员联系!");
                }
            });

			//响应成功时的回调函数
			function callBack(data) {
				if (data == "true") {
					$("#nameDiv").html("用户名已被使用!");
				} else {
					$("#nameDiv").html("用户名可以使用!");
				}
			}//end of callBack()
		}
	});//end of blur()
});
</script>
</head>
<body>
	<form action="" id="form1">
		<table>
			<tr>
				<td>用 户 名:</td>
				<td><input type="text" name="name" id="name" />&nbsp;<font color="#c00fff">*</font></td>
				<td>
					<div id="nameDiv" style="display: inline"></div></td>
			</tr>
		</table>
	</form>
</body>
</html>

后台servlet:

	public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String name = request.getParameter("name");
        boolean used = false;
        if("ajax".equals(name)){
            used = true;
        }else{
            used = false;
        }
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.print(used);
        out.flush();
        out.close();
    }

Ajax的其他方法

$.get()

语法

$.get( url [, data] [, success] [, dataType] );

$.get( url, data, function( result ) {
	// 省略将服务器返回的数据显示到页面的代码
} );

以上代码等价于

$.ajax( {
	"url"           : url,
	"data"        : data,
	"type"        : "get",
	"success" : function( result ) {
		   // 省略代码
	      }
} );

$.post()

语法

$.post( url [, data] [, success] [, dataType] );

$.post( url, data, function( result ) {
	// 省略将服务器返回的数据显示到页面的代码
} );

以上代码等价于

$.ajax( {
	"url"           : url,
	"data"        : data,
	"type"        : "post",
	"success" : function( result ) {
		   // 省略代码
	      }
} );

$.getJson()

语法

$.getJSON( url [, data] [, success] );

$.getJSON( url, data, function( result ) {
	// 省略将服务器返回的数据显示到页面的代码
} );

以上代码等价于

$.ajax( {
	"url"            : url,
	"data"         : data,
	"type"         : "get",
	"dataType" : "json",
	"success"   : function( result ) {
		   // 省略代码
	      }
} );

.load() [了解]

  • 返回HTML内容并设置到元素中
  • 不是全局函数
  • 匿名的回调函数
  • 默认使用GET方式

JSON(JavaScript Object Notation)

  • 一种轻量级的数据交换格式
  • 采用独立于语言的文本格式
  • 通常用于在客户端和服务器之间传递数据

JSON的优点

  • 轻量级交互语言
  • 结构简单
  • 易于解析

定义JSON对象

var JSON对象 = { “name” : value, “name” : value, …… };

var person = { "name" : "张三",   "age" : 30,  "spouse" : null };

定义JSON数组

var JSON数组 = [ value, value, …… ];

var countryArray = [ "中国",  "美国",  "俄罗斯" ];
var personArray = [ { "name":"张三",  "age":30 },{ "name":"李四",  "age":40 } ];

JSON使用综合案例

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
	//1、定义JSON格式的user对象,并在div中输出
	var user = {
		"id" : 1,
		"name" : "张三",
		"pwd" : "000"
	};
	$("#objectDiv").append("ID:" + user.id + "<br>")
	               .append("用户名:" + user.name + "<br>")
	               .append("密码:" + user.pwd + "<br>");
	//2、定义JSON格式的字符串数组,并在ul和select中输出
	var ary = [ "中", "美", "俄" ];
	var $ary = $(ary);
	var $ul = $("#arrayUl"); // 展示数据的ul元素
	var $sel = $("#arraySel"); // 展示数据的select元素
	$ary.each(function() { $ul.append("<li>"+this+"</li>"); });
	$ary.each(function(i) {
	   $sel.append("<option value='"+(i+1)+"'>"+this+"</option>");
    });
	//3、定义JSON格式的user对象数组,并使用<table>输出
	var userArray = [ {
		"id" : 2,
		"name" : "admin",
		"pwd" : "123"
	}, {
		"id" : 3,
		"name" : "詹姆斯",
		"pwd" : "11111"
	}, {
		"id" : 4,
		"name" : "梅西",
		"pwd" : "6666"
	} ];
	var $table = $("<table border='1'></table>").append(
	       "<tr><td>ID</td><td>用户名</td><td>密码</td></tr>");
	$(userArray).each(function() {
	   $table.append("<tr><td>" + this.id + "</td><td>"
                    + this.name + "</td><td>"
                    + this.pwd + "</td></tr>");
	});
	$("#objectArrayDiv").append($table);

});
</script>
</head>
<body>
一、JSON格式的user对象:<div id="objectDiv"></div><br>
二、JSON格式的字符串数组:&nbsp;&nbsp;<select id="arraySel"></select>
<ul id="arrayUl"></ul>
三、JSON格式的user对象数组:<div id="objectArrayDiv"></div>
</body>
</html>

在Ajax中使用JSON数据格式

jQuery(document).ready(function($) {
	function initNews() {//使用Ajax技术获取新闻列表数据
		$.ajax({
			"url"		: "../util/news",
			"type"		: "GET",
			"data"		: "opr=list",
			"dataType"	: "json",
			"success"	: processNewsList
		});
	}
	function processNewsList(data) {//展示新闻列表
		var $newsList = $("#opt_area>ul");
		for (var i = 0; i < data.length;) {
			$newsList.append("<li>" + data[i].ntitle + "<span> 作者:"
				+ data[i].nauthor + " &#160;&#160;&#160;&#160; "
				+ "<a href='#'>修改</a> &#160;&#160;&#160;&#160; "
				+ "<a href='#' οnclick='return clickdel()'>删除</a>" 
				+ "</span></li>");
			if ((++i) % 5 == 0) {
				$newsList.append("<li class='space'></li>");
			}
		}
	}
	initNews();//执行新闻列表初始化工作
});

后台servlet代码:

List<News> list = newsService.findAllNews();
News news = null;
StringBuffer newsJSON = new StringBuffer("[");
for (int i = 0;;) {
	news = list.get(i);
  newsJSON.append("{\"nid\":" + news.getNid() + ",");
  newsJSON.append("\"ntitle\":\""
      + news.getNtitle().replace("\"", "&quot;") + "\",");
  newsJSON.append("\"nauthor\":\""
      + news.getNauthor().replace("\"", "&quot;") + "\"}");
  if ((++i) == list.size()) {
      break;
  } else {
      newsJSON.append(",");
  }
}
newsJSON.append("]");
out.print(newsJSON);
out.flush();
out.close();

FastJSON

  • 随着JSON的广泛使用,在服务器端生成JSON字符串成了一件麻烦的工作,效率低且易出错
  • FastJSON:一个性能很好的、Java实现的JSON解析器和生成器
    • 将Java对象序列化成JSON字符串
    • 将JSON字符串反序列化得到Java对象
  • 官网:https://github.com/alibaba/fastjson/releases

入口类:com.alibaba.fastjson.JSON

方 法说 明
public static String toJSONString ( Object object )将Java对象序列化成JSON字符串
public static String toJSONString (Object object, boolean prettyFormat )prettyFormat为true时生成带格式的JSON字符串
public static String toJSONString ( Object object, SerializerFeature… features )可以通过参数features指定更多序列化规则
public static String toJSONStringWithDateFormat (Object object, String dateFormat, SerializerFeature… features )可以通过参数dateFormat指定日期类型的输出格式

枚举类型 SerializerFeature 定义了多种序列化属性

枚 举 值说 明
QuoteFieldNames为字段名加双引号,默认即使用
WriteMapNullValue输出值为null的字段,默认不输出
WriteNullListAsEmpty将值为null的List字段输出为[ ]
WriteNullStringAsEmpty将值为null的String字段输出为“”
WriteNullNumberAsZero将值为null的数值字段输出为0
WriteNullBooleanAsFalse将值为null的Boolean字段输出为false
SkipTransientField忽略transient字段,默认即忽略
PrettyFormat格式化JSON字符串,默认不格式化
// 包含值为 null 的字段,数值为 null  输出0,String 为 null 输出“”
String  strJSON = JSON.toJSONString ( javaObject,
                                     SerializerFeature.WriteMapNullValue,
                                     SerializerFeature.WriteNullNumberAsZero,
                                     SerializerFeature.WriteNullStringAsEmpty );

代码示例

List<News> list = newsService.findAllNews();
String newsJSON = JSON.toJSONStringWithDateFormat(list,
out.print(newsJSON);
out.flush();
out.close();

基于表单数据的Ajax请求

  • 需要发送表单数据时,提取表单元素的值并构造成合适的数据格式是件很烦琐的事。
  • 使用jQuery提供的方法简化处理
    • .serializeArray()
    • $.param()

.serializeArray()

检测一组表单元素中的有效控件

  • 没有被禁用
  • 必须有name属性
  • 选中的checkbox或radio
  • 触发提交事件的submit按钮
  • file元素不会被序列化

将有效控件序列化为JSON对象数组

  • 包含name和value两个属性

$.param()

将由. serializeArray()生成的对象数组序列化成请求字符串的形式
在这里插入图片描述

jQuery还提供了.serialize()方法。.serialize()内部使用$.param()对.serializeArray()做了一个简单包装。不需要中间环节时,可以更简便地完成表单数据的序列化

代码示例

jQuery(document).ready(function($) {
	function initNews() {//使用Ajax技术获取新闻列表数据
		$.getJSON("../util/news", "opr=list", processNewsList);
	}
	function processNewsList(data) {//展示新闻列表
		var $newsList = $("#opt_area>ul").empty();
		for (var i = 0; i < data.length;) {
			$newsList.append("<li>" + data[i].ntitle + "<span> 作者:"
					+ data[i].nauthor + " &#160;&#160;&#160;&#160; "
					+ "<a href='#'>修改</a> &#160;&#160;&#160;&#160; "
					+ "<a href='#' οnclick='return clickdel()'>删除</a>" 
					+ "</span></li>");
			if ((++i) % 5 == 0) {
				$newsList.append("<li class='space'></li>");
			}
		}
	}
	/*
	function initNews() {//使用Ajax技术获取新闻列表数据
		$("#opt_area>ul").load("../util/news", "opr=listHtml");
	}
	*/
	initNews();//执行新闻列表初始化工作
	function initTopics() {//使用Ajax技术获取主题列表数据
		$.getJSON("../util/topics", "opr=list", processTopicsList);
	}
	function processTopicsList(data) {//展示主题列表
		var $topicsList = $("#opt_area>ul").empty();
		for (var i = 0; i < data.length; ++i) {
			$topicsList.append("<li> &#160;&#160;&#160;&#160; "
					+ data[i].tname + " &#160;&#160;&#160;&#160; "
					+ "<a href='../newspages/topic_modify.jsp?tid="
					+ data[i].tid + "&tname=" + data[i].tname + "'>修改</a>"
					+ " &#160;&#160;&#160;&#160; <a href='../util/topics?opr=del&tid="
					+ data[i].tid + "'>删除</a> </li>");
		}
	}
	/*
	function initTopics() {//使用Ajax技术获取主题列表数据
		$("#opt_area>ul").load("../util/topics", "opr=listHtml");
	}
	*/
	var $leftLinks = $("#opt_list a"); // 获取页面左侧功能链接
	$leftLinks.eq(3).click(initTopics);
	$leftLinks.eq(1).click(initNews);
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/555277.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode题解】2007. 从双倍数组中还原原数组

文章目录 [2007. 从双倍数组中还原原数组](https://leetcode.cn/problems/find-original-array-from-doubled-array/)思路&#xff1a;代码&#xff1a; 2007. 从双倍数组中还原原数组 思路&#xff1a; 首先&#xff0c;对输入的 changed 数组进行排序&#xff0c;以便后续操…

隐式/动态游标的创建与使用

目录 将 emp 数据表中部门 10 的员工工资增加 100 元&#xff0c;然后使用隐式游标的 %ROWCOUNT 属性输出涉及的员工数量 动态游标的定义 声明游标变量 打开游标变量 检索游标变量 关闭游标变量 定义动态游标&#xff0c;输出 emp 中部门 10 的所有员工的工号和姓名 Orac…

LeetCode-热题100:102. 二叉树的层序遍历

题目描述 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a; root [3,9,20,null,null,15,7] 输出&#xff1a; [[3],[9,20],[15,7]] 示例 2&am…

数据结构之排序了如指掌(二)

目录 题外话 正题 选择排序 选择排序思路 选择排序代码详解 选择排序复杂度 双向选择排序 双向选择排序思路 双向选择排序代码详解 堆排序 堆排序思路 堆排序代码详解 堆排序复杂度 冒泡排序 冒泡排序思路 冒泡排序代码详解 冒泡排序复杂度 小结 题外话 今天…

供应链投毒预警 | 开源供应链投毒202403月报发布啦!(含投毒案例分析)

悬镜供应链安全情报中心通过持续监测全网主流开源软件仓库&#xff0c;结合程序动静态分析方式对潜在风险的开源组件包进行动态跟踪和捕获&#xff0c;能够第一时间捕获开源组件仓库中的恶意投毒攻击。在2024年3月份&#xff0c;悬镜供应链安全情报中心在NPM官方仓库&#xff0…

2024华中杯A题完整1-3问py代码+完整思路16页+后续参考论文

A题太阳能路灯光伏板朝向问题 &#xff08;完整版资料文末获取&#xff09; 第1小问&#xff1a;计算每月15日的太阳直射强度和总能量 1. 理解太阳直射辐射和光伏板的关系**&#xff1a;光伏板接收太阳辐射并转化为电能&#xff0c;直射辐射对光伏板的效率影响最大。 2. 收集…

MES给制造业带来看得见的效益

作为连接生产控制系统和企业管理系统的纽带&#xff0c;MES为企业提供实时生产数据&#xff0c;帮助企业进行更加明智的决策&#xff0c;并实时调整生产管理&#xff0c;最终降低运营成本、提高运营利润和资产利用率、保证生产安全与合规。 MES主要功能包括工艺技术管理、生产…

面试题:一个 URL 在浏览器被输入到页面展现的过程中发生了什么

文章目录 前言一、回答二、深入追问 前言 这是一段~ 经典的旋律 ~&#xff0c;不好意思串台了&#xff0c;哈哈&#xff0c;这是一个经典的面试题&#xff1a;一个URL从浏览器到页面的过程中发生了什么&#xff0c;那么今天就带大家九浅一深来研究一下 觉得不错的同学可以加我…

波士顿动力抛弃液压机器人Atlas,推出全新电动化机器人,动作超灵活

本周&#xff0c;机器人科技巨头波士顿动力宣布液压Atlas退役&#xff0c;并推出了下一代产品——专为实际应用而设计的全电动Atlas机器人&#xff0c;这也意味着人形机器人迈出了商业化的第一步。 Atlas——人形机器人鼻祖 Atlas&#xff08;阿特拉斯&#xff09;这个名字最…

CTFHUB-技能树-Web前置技能-文件上传(前端验证—文件头检查)

CTFHUB-技能树-Web前置技能-文件上传&#xff08;前端验证—文件头检查&#xff09; 文章目录 CTFHUB-技能树-Web前置技能-文件上传&#xff08;前端验证—文件头检查&#xff09;前端验证—文件头检查题目解析 各种文件头标志 前端验证—文件头检查 题目考的是&#xff1a;pn…

【笔试强训】DFS、优先队列、滑动窗口笔试题目!

文章目录 1. 单词搜索2. 除 2 操作3. dd 爱框框 1. 单词搜索 题目链接 解题思路&#xff1a; DFS (深度优先遍历)&#xff0c;用一个 pos 记录要匹配单词 word 的位置&#xff0c;每次与 pos 进行匹配判断&#xff08;这样做的好处是不用把答案存下来&#xff09; 注意细节…

深入解析Nacos配置中心的动态配置更新技术

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在微服务架构中&#xff0c;配置管理变得尤为关键。Nacos&#xff0c;作为一个开源的、易于使用的、功能丰富的平台&#xff0c;为…

electron的webview和内嵌网页如何通信

在 Electron 的世界里&#xff0c;webview 标签相当于一个小盒子&#xff0c;里面可以装一个完整的网页&#xff0c;就像一个迷你浏览器。当你想和这个小盒子里的内容说话时&#xff08;也就是进行通信&#xff09;&#xff0c;这里有几个方法可以帮你做到&#xff1a; 这里只写…

轻量化模块整理,即插即用

轻量化模块整理&#xff0c;即插即用&#xff08;持续更新&#xff09; 整理一些轻量化的结构&#xff0c;作为知识储备&#xff0c;可以用到后续的项目和研究中 Mobilenetv3 深度可分离卷积 MobileNetV3 是一个轻量级的深度学习模型&#xff0c;专为移动和边缘设备上的高效…

conda配置多版本python

安装conda 以下任选下载 Anaconda Miniconda 配置conda环境变量 比如windows&#xff0c;在配置我的电脑中的环境变量&#xff0c;在系统变量的Path中新增下面内容 需要根据实际目录进行更改 D:\soft\miniconda3 D:\soft\miniconda3\Scripts D:\soft\miniconda3\Library\bi…

windows与linux双系统下,为linux系统/boot独立分区扩容

问题 安装ubuntu系统时&#xff0c;采用手动分区&#xff1a; 1. /boot &#xff1a;一般分配1G&#xff0c;电脑空间大可以分配4G 2. / &#xff1a;分配150-200G&#xff0c;类似windows C盘&#xff0c;存放系统环境&#xff1a;如ROS&#xff0c;python等 3. swap :…

PE文件(一)PE结构概述

PE结构简述 Windows操作系统是只能运行以内存4D 5A开头&#xff0c;翻译是MZ的可执行文件&#xff0c;也叫做PE结构文件&#xff0c;是以exe&#xff0c;.sys&#xff0c;.dll等等作为后缀的文件。而不同的操作系统能运行的可执行文件都是各自特有的&#xff0c;比如Linux可运…

图与图搜索算法

图搜索算法是一个非常重要的概念&#xff0c;它是计算机科学中图论和算法设计的基础部分。在开始讨论图搜索算法之前&#xff0c;我们需要先理解什么是图以及图的基本结构。 什么是图&#xff1f; 图&#xff08;Graph&#xff09;是一种非线性数据结构&#xff0c;它由一组点…

算法训练营第25天回溯(分割)

回溯算法&#xff08;分割&#xff09; 131.分割回文串 力扣题目链接(opens new window) 题目 给定一个字符串 s&#xff0c;将 s 分割成一些子串&#xff0c;使每个子串都是回文串。 返回 s 所有可能的分割方案。 示例: 输入: “aab” 输出: [ [“aa”,“b”], [“a”,“…

3D模型查看器开发实战【WebGL】

本文介绍如何从头开发一个包含3D 模型查看器的页面 - 尽管它非常简单&#xff0c;但你将学习的步骤也应该有助于构建其他类型的 Web 应用程序。 在自己的网站或博客里展示3D模型更简单的方式是使用NSDT 3DConvert提供的在线服务&#xff0c;无需任何开发工作&#xff0c;5分钟…