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

4.Web安全——JavaScript基础

一、JavaScript是什么?

  • JavaScript 是一种高级的、解释型的编程语言,广泛应用于网页开发和各种软件应用程序中。

二、为什么要学习JavaScript

XSS(跨站脚本攻击)防范

  • XSS 是一种常见的 Web 安全漏洞,攻击者将恶意脚本(通常是 JavaScript)注入到目标网站中。通过学习 JavaScript,安全人员能够深入理解攻击者是如何构造恶意脚本的。例如,反射型 XSS 可能会利用网站对用户输入参数处理不当,将用户输入的含有 JavaScript 代码的内容直接在页面中输出,从而执行恶意代码。
  • 了解 JavaScript 的语法和特性,可以帮助安全人员识别可能导致 XSS 漏洞的代码模式。比如,在使用document.write()等函数输出用户输入内容时,如果没有进行适当的编码或过滤,就很容易引发 XSS 攻击。

CSRF(跨站请求伪造)攻击理解与防御

  • 虽然 CSRF 主要是利用用户在被攻击网站的登录状态,但 JavaScript 在其中也起到辅助理解的作用。在某些复杂的 CSRF 场景中,攻击者可能会利用 JavaScript 来自动发起伪造请求。
  • 掌握 JavaScript 能够更好地理解攻击者如何利用脚本隐藏攻击意图,比如通过动态创建标签并自动提交来发起伪造请求。并且可以帮助安全人员编写防御代码,如在服务器端验证请求来源和添加 CSRF 令牌等机制。

三、JavaScript基础

1.嵌入方式

1.内嵌式

  • 理论上js可以写在任何第一个地方 但是一般写在head标签里或者 body下
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>内联 JavaScript 示例 - 页面头部脚本</title><!-- 在HTML的<head>标签内嵌入JavaScript代码 --><script>// 定义一个函数,用于显示警告框function showAlert() {alert('欢迎来到内嵌式 JavaScript 示例页面!');}</script>
</head>
<body><h1>这是一个包含内嵌式 JavaScript 的页面</h1><button onclick="showAlert()">点击我弹出警告框</button><!-- 在HTML的<body>标签内也可以继续嵌入JavaScript代码 --><script>// 获取页面中的某个元素(这里以获取第一个段落元素为例)const paragraph = document.getElementsByTagName('p')[0];// 修改段落元素的文本内容paragraph.textContent = '这段文本已被 JavaScript 修改。';</script><p>初始文本内容。</p>
</body>
</html>

2.外链式

  • 首先新建一个文件类型为.js的文件,然后在该文件中写js语句,通过script标签对引入到html
    html:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>外链式 JavaScript 示例</title><!-- 使用script标签引入外部的JavaScript文件,src属性指定文件路径 --><script src="main.js"></script>
</head>
<body><h1>外链式 JavaScript 演示页面</h1><button onclick="toggleVisibility()">点击切换元素显示状态</button><div id="myElement" style="display: none;">这是一个可以被切换显示状态的元素。</div>
</body>
</html>

JavaScript:

// 定义一个函数,用于对给定数组进行求和操作
function sumArray(arr) {let sum = 0;for (let num of arr) {sum += num;}return sum;
}
// 定义一个函数,用于在页面中展示数组元素和求和结果
function displayArrayInfo() {const myArray = [1, 2, 3, 4, 5];const sum = sumArray(myArray);const resultDiv = document.createElement('div');resultDiv.textContent = `数组 [${myArray}] 的元素之和为:${sum}`;document.body.appendChild(resultDiv);
}

3.行内式

  • 直接书写在标签身上,是一个简写的事件,所以又称之为事件属性。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>行内式 JavaScript 示例 - 处理用户输入</title>
</head>
<body><h1>行内式 JavaScript 互动演示页面</h1><input type="text" id="userInput" placeholder="请输入内容"><button onclick="if (document.getElementById('userInput').value === '') { alert('您还未输入任何内容哦!'); } else { alert('您输入的内容是:' + document.getElementById('userInput').value); }">点击查看输入情况</button>
</body>
</html>

4.变量

1.变量的定义与声明
  • 在 JavaScript 中,变量是用于存储数据的容器。可以使用var、let和const关键字来声明变量。
  • var关键字:这是 JavaScript 中最早用于声明变量的方式。例如:var age;,这里声明了一个名为age的变量。var声明的变量会被提升(hoisting)到函数作用域的顶部。这意味着变量可以在声明之前被访问,但其值是undefined。例如:
console.log(age); // 输出undefined
var age = 25;
  • let关键字:let是 ES6(ECMAScript 2015)引入的新的变量声明方式。与var不同,let声明的变量不存在变量提升。例如:
console.log(name); // 报错:ReferenceError: name is not defined
let name = 'John';
  • const关键字:用于声明常量。一旦用const声明了一个变量,就不能再重新赋值。例如:
const PI = 3.14159;
PI = 3.14; // 报错:TypeError: Assignment to constant variable.
  • 不过需要注意的是,const声明的对象或数组,其内部的属性或元素是可以被修改的。例如:
const myArray = [1, 2, 3];
myArray.push(4); // 这是可以的,因为没有重新赋值整个数组
console.log(myArray); // 输出[1,2,3,4]
2.变量的命名规则和规范
  • 规则:
  • 变量名必须以字母(a - z或A - Z)、下划线(_)或美元符号($)开头。
    变量名可以包含数字(0 - 9),但不能以数字开头。
  • 变量名不能是 JavaScript 中的保留关键字(如if、else、for、while等),不过可以包含保留关键字作为变量名的一部分。
  • 规范:
  • 通常采用小驼峰命名法(camelCase),即第一个单词小写,后面的单词首字母大写。例如:firstName、userAge。
  • 变量名应该具有描述性,能够清楚地表达变量所存储的数据的含义。
3.变量的数据类型和初始化
  • 数据类型:JavaScript 是一种动态类型语言,变量可以存储多种数据类型的值,包括数字(Number)、字符串(String)、布尔值(Boolean)、对象(Object)、数组(Array)、函数(Function)、null和undefined。
  • 初始化:变量在声明时可以同时进行初始化,赋予初始值。例如:
    数字类型:let temperature = 25;
    字符串类型:let greeting = ‘Hello, World!’;
    布尔类型:let isStudent = true;
    对象类型:let person = {name: ‘Alice’, age: 30};
    数组类型:let fruits = [‘apple’, ‘banana’, ‘cherry’];
    函数类型:let addNumbers = function(x, y) {return x + y;};
4.变量的作用域
  • 全局作用域:在函数外部声明的变量具有全局作用域,在整个 JavaScript 代码中都可以访问(在浏览器环境中,全局变量会成为window对象的属性)。例如:
var globalVariable = 'I am global';
function myFunction() {console.log(globalVariable);
}
myFunction(); // 输出I am global
  • 函数作用域:用var或let声明的变量在函数内部有函数作用域。var声明的变量在整个函数内都可以访问,而let声明的变量在其声明后的代码块中可以访问。例如:
function anotherFunction() {var innerVar = 'I am inside with var';let innerLet = 'I am inside with let';console.log(innerVar);console.log(innerLet);
}
anotherFunction();
console.log(innerVar); // 报错:ReferenceError: innerVar is not defined
console.log(innerLet); // 报错:ReferenceError: innerLet is not defined

5.数据类型

  • 数值型:number(凡是数字都是数值型,不区分整数和小数)
    字符串:string(凡是引号包裹起来的内容全部都是字符串)
    布尔:boolean(true、false)
    对象类型:object(特殊取值null)
    未定义型:undefined
    对象类型 数组 字典
1.判断类型
  • var a = “iamstring.”;
    • 这里使用 var 关键字声明了一个变量 a,并将其初始化为一个字符串值 “iamstring.”。在 JavaScript 中,字符串是一种基本数据类型,用于存储文本数据。
  • var b = 222;
    • 通过 var 声明变量 b,并赋值为数字 222。数字类型(Number)用于表示数值,可以是整数、小数等,在 JavaScript 中也是常见的基本数据类型之一。
  • var c= [1,2,3];
    • 声明变量 c 并初始化为一个数组。数组是一种复合数据类型(在 typeof 操作返回结果中归为 object 类型),它可以存储多个值,这里数组 c 中包含了三个数字元素 1、2 和 3。
  • var d = new Date();
    • 使用 new 关键字创建了一个 Date 类型的对象,并赋值给变量 d。Date 对象用于处理日期和时间相关的操作,在 JavaScript 中,对象类型(Object)是一种复杂的数据结构,它可以包含多个属性和方法,这里 Date 对象就有很多用于获取年、月、日、时、分、秒等的方法,由于它属于对象类型,所以 typeof 操作对其返回 object。
  • var e = function(){alert(111);};
    • 声明变量 e 并赋值为一个匿名函数。函数在 JavaScript 中是一等公民,可以像其他数据类型一样被赋值给变量、作为参数传递给其他函数或者作为函数的返回值等,在 typeof 操作时,返回 function 类型来标识它是函数。
  • var f = function(){this.name=“22”;};
    • 同样是声明变量 f 并赋值为一个匿名函数,只不过这个函数内部使用了 this 关键字,用于在函数执行时设置对象的属性(在不同的调用方式下 this 的指向会有所不同),和变量 e 一样,typeof 操作对其返回 function 类型。
  • alert(typeof a) ------------> string
    • typeof 是 JavaScript 中的操作符,用于判断给定变量的数据类型。当对变量 a(其值为字符串 “iamstring.”)使用 typeof 操作符时,按照 JavaScript 的类型判断规则,会准确返回 string,表明它是字符串类型的数据。
  • alert(typeof b) ------------> number
    • 对于变量 b,其值为数字 222,typeof 操作符正确判断并返回 number,标识它属于数字类型。
  • alert(typeof c) ------------> object
    • 尽管数组在概念上是一种特殊的数据结构,但在 JavaScript 中,typeof 操作符对数组进行判断时返回 object,因为从底层实现角度看,数组也是基于对象的一种形式,通过对象的属性来存储和访问各个元素。
  • alert(typeof d) ------------> object
    • 如前面所述,Date 类型的对象在经过 typeof 操作时,同样返回 object,这是符合 JavaScript 对于对象类型判断的常规结果的。
  • alert(typeof e) ------------> function
    • 当对存储函数的变量 e 使用 typeof 操作符时,会返回 function,清晰地表明该变量存储的是函数类型的数据,方便在代码中根据类型来进行不同的逻辑处理,比如判断是否是函数从而决定是否调用它等。
  • alert(typeof f) ------------> function
    • 同理,变量 f 存储的也是函数,所以 typeof 操作返回 function,用于区分它与其他类型的数据,比如数字、字符串、对象等。
2.数字类型
  • 只有一种数字类型,数字 可以是小数 ,也可以的整数
  • 以0开头 默认使用8进制来表示我的这个数字
  • 以0x开头 默认使用16进制来表述我的这个数字
  • 如果以-开头 默认以负数
  • 如果我带有e:以科学计数法来解析我的这个数字
  • parseInt(…) 将某值转换成数字,不成功则NaN
  • parseFloat(…) 将某值转换成浮点数,不成功则NaN
  • 特殊值:
  • NaN,非数字。可使用 isNaN(num) 来判断。
  • Infinity,无穷大。可使用 isFinite(num) 来判断。
3.字符类型
  • 只有一种数字类型,数字 可以是小数 ,也可以的整数
  • 以0开头 默认使用8进制来表示我的这个数字
  • 以0x开头 默认使用16进制来表述我的这个数字
  • 如果以-开头 默认以负数
  • 如果我带有e:以科学计数法来解析我的这个数字
  • parseInt(…) 将某值转换成数字,不成功则NaN
  • parseFloat(…) 将某值转换成浮点数,不成功则NaN
  • 特殊值:
  • NaN,非数字。可使用 isNaN(num) 来判断。
  • Infinity,无穷大。可使用 isFinite(num) 来判断。
  • obj.length 长度

obj.trim() 移除空白
obj.trimLeft()
obj.trimRight)
obj.charAt(n) 返回字符串中的第n个字符
obj.concat(value, …) 拼接
obj.indexOf(substring,start) 子序列位置
obj.lastIndexOf(substring,start) 子序列位置
obj.substring(from, to) 根据索引获取子序列
obj.slice(
, end) 切片
obj.toLowerCase() 大写
obj.toUpperCase() 小写
obj.split(delimiter, limit) 分割
obj.search(regexp) 从头开始匹配,返回匹配成功的第一个位置(g无效)
obj.match(regexp) 全局搜索,如果正则中有g表示找到全部,否则只找到第一个。
obj.replace(regexp, replacement) 替换,正则中有g则替换所有,否则只替换第一个匹配项

6.函数

1.JavaScript 函数语法
  • JavaScript 函数通过 function 关键词进行定义,其后是函数名和括号 ()。
  • 函数名可包含字母、数字、下划线和美元符号(规则与变量名相同)。
  • 圆括号可包括由逗号分隔的参数:
    var x = myFunction(7, 8); // 调用函数,返回值被赋值给 x
  • function myFunction(a, b) {
    return a * b; // 函数返回 a 和 b 的乘积
    }
2.普通函数
// 定义一个函数,用于在控制台打印一条简单的问候语
function sayHello() {console.log("Hello!");
}
// 调用函数
sayHello();
3.匿名函数
// 将匿名函数赋值给变量add,该函数用于计算两个数的和
let add = function (num1, num2) {return num1 + num2;
};
// 使用变量add调用匿名函数,并将结果存储在变量result中
const result = add(5, 3);
console.log("两数之和为:", result);
4.自执行函数
// 这是一个简单的自执行函数,函数定义后立即执行,在函数内部可以定义变量、执行操作等
(function () {var message = "这是自执行函数内部的消息";console.log(message);
})();

7.字典

1.基本概念
  • 对象作为字典:JavaScript 中的对象是一组无序的键 - 值对。键(key)是字符串(或者可以转换为字符串的 Symbol 类型),值(value)可以是任意数据类型,包括基本数据类型(如数字、字符串、布尔值等)和复杂数据类型(如数组、对象等)。这和字典的概念很相似,其中键就相当于字典中的词条,值相当于词条的解释。
  • 创建字典对象
    • 可以使用对象字面量来创建一个简单的字典,例如:
    •   let myDictionary = {"key1": "value1","key2": 2,"key3": true};
      
    • 这里创建了一个名为myDictionary的对象,它有三个键 - 值对。“key1"对应的值是"value1”,"key2"对应的值是数字2,"key3"对应的值是布尔值true。
  • 访问字典中的值
    • 通过键来访问值。例如,要访问myDictionary中"key1"对应的值,可以使用以下方式:
    •   let value = myDictionary["key1"];console.log(value); // 输出 "value1"
      
    • 另外,还可以使用点(.)语法来访问,但这种方式要求键是合法的标识符(不能包含特殊字符,如空格、连字符等)。例如,如果键是key2,可以写成myDictionary.key2。不过,对于不符合标识符规则的键,就必须使用方括号([])语法。
2.字典的操作
1.添加键-值对
  • 可以通过直接赋值的方式添加新的键-值对。例如:
myDictionary["key4"] = "new value";
  • 现在myDictionary就有了一个新的键 - 值对"key4": “new value”。
2.修改值
  • 要修改字典中某个键对应的值,只需重新赋值即可。例如,修改"key2"对应的值:
myDictionary["key2"] = 3;
  • 此时myDictionary中的"key2"的值就从2变成了3。
3.删除键-值对
  • 可以使用delete关键字来删除键-值对。例如:
delete myDictionary["key3"];
  • 执行这个操作后,myDictionary中就不再有"key3"这个键和对应的true值了。
3.遍历字典
  • 使用for…in循环
    • for…in循环可以用来遍历对象的可枚举性(在字典中就是键)。例如:
    •   for (let key in myDictionary) {console.log(key + ": " + myDictionary[key]);}
      
    • 这个循环会依次输出字典中的每个键 - 值对。在每次迭代中,key变量会被赋值为当前的键,然后通过myDictionary[key]可以访问到对应的值。
4.使用 ES6 的Map对象作为字典(进阶用法)
  • Map对象简介
    • Map是 ES6 引入的一种新的数据结构,它和普通对象类似,也是用于存储键 - 值对。但Map对象的键可以是任意数据类型(包括对象、函数等),而不像普通对象的键只能是字符串(或 Symbol)。
  • 创建Map对象
    • 可以使用new关键词来创建Map对象。例如:
    •   let myMap = new Map();myMap.set("key1", "value1");myMap.set(2, "value2");myMap.set({name: "John"}, "value3");
      
    • 这里先创建了一个Map对象myMap,然后通过set方法添加了三个键 - 值对。注意其中一个键是一个对象{name: “John”}。
  • 访问Map中的值
    • 使用get方法来访问Map中的值。例如:
let value = myMap.get("key1");
console.log(value); // 输出 "value1"
  • 操作Map对象的方法
    • has方法用于检查Map中是否存在某个键。例如:
    •   console.log(myMap.has("key1")); // 输出 true
      
    • delete方法用于删除Map中的键 - 值对。例如:
    •   myMap.delete(2);
      
    • size属性可以获取Map中键 - 值对的数量。例如:
    •    console.log(myMap.size); 		
      

8.时间

  • Date 对象
  • var myDate = new Date();
  • myDate.getYear(); //获取当前年份(2位)
  • myDate.getFullYear(); //获取完整的年份(4位,1970-???)
  • myDate.getMonth(); //获取当前月份(0-11,0代表1月) 所以获 取当前月份是 myDate.getMonth()+1;
  • myDate.getDate(); //获取当前日(1-31)
  • myDate.getDay(); //获取当前星期X(0-6,0代表星期天)
  • myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数)
  • myDate.getHours(); //获取当前小时数(0-23)
  • myDate.getMinutes(); //获取当前分钟数(0-59)
  • myDate.getSeconds(); //获取当前秒数(0-59)
  • myDate.getMilliseconds(); //获取当前毫秒数(0-999)
  • myDate.toLocaleDateString(); //获取当前日期
  • var mytime = myDate.toLocaleTimeString(); //获取当前时间
  • myDate.toLocaleString( ); //获取日期与时间
  • 加一天
  • var dateTime = new Date();
  • dateTime=dateTime.setDate(dateTime.getDate()+1);
  • dateTime=new Date(dateTime);
  • dateTime=dateTime.setDate(dateTime.getDate()+1)

四、总结

本文介绍了JavaScript基础理论,及其用法,提供了相当多的JavaScript示例,下篇文章将讲解的是简单的使用HTML,CSS,JS搭建博客网站,可以订阅我的专栏,一起学习网络安全技术。

相关文章:

4.Web安全——JavaScript基础

一、JavaScript是什么&#xff1f; JavaScript 是一种高级的、解释型的编程语言&#xff0c;广泛应用于网页开发和各种软件应用程序中。 二、为什么要学习JavaScript XSS&#xff08;跨站脚本攻击&#xff09;防范 XSS 是一种常见的 Web 安全漏洞&#xff0c;攻击者将恶意脚…...

mysql删除无用用户

1、删除不用的账户 (1) 查看当前已存在账户 mysql> select user,host,password from mysql.user; 或下面的命令 #mysql> sELECT DISTINCT CONCAT(User: ,user,,host,;) AS query FROM mysql.user; --------------------------------------- | query …...

2025元旦源码免费送

我们常常在当下感到时间慢&#xff0c;觉得未来遥远&#xff0c;但一旦回头看&#xff0c;时间已经悄然流逝。对于未来&#xff0c;尽管如此&#xff0c;也应该保持一种从容的态度&#xff0c;相信未来仍有许多可能性等待着我们。 免费获取源码。 更多内容敬请期待。如有需要可…...

静态库封装之ComFile类

ComFile.h /* author:EricsT data:20241024 version:V1.0 history:author data version contentEricsT 20241024 V1.0 新增ComFile类[common、FILE以及stream部分] */#pragma once#include <string> #include <fstream> using namespace std;class ComFile { publi…...

概率论与数理统计

概率论占比更多&#xff0c;三分之二左右 数理统计会少一些 事件之间的概率 ab互斥&#xff0c;不是ab独立 古典概型吃高中基础&#xff0c;考的不会很多 条件概率公式&#xff0c;要记 公式不要全记&#xff0c;很多有名称的公式是通过基础公式转换而来的 目的在于解决一…...

鸿蒙HarmonyOS开发:基于Swiper组件和自定义指示器实现多图片进度条轮播功能

文章目录 一、概述1、场景介绍2、技术选型 二、实现方案1、图片区域实现2、底部导航点设计3、手动切换 三、所有代码1、设置沉浸式2、外层Tabs效果3、ImageSwiper组件 四、效果展示 一、概述 在短视频平台上&#xff0c;经常可以见到多图片合集。它的特点是&#xff1a;由多张…...

django --递归查询评论

表数据 树状结构 action(methods(GET, ), detailFalse) def get_info_pinglun(self, request, *args, **kwargs) -> Response:根据评论id查所有回复params wenxian_pinglun_id --> 评论id;wenxian_pinglun_id self.request.GET.get(wenxian_pinglun_id)results se…...

kafka怎么保证顺序消费?

kafka怎么保证顺序消费&#xff1f; 1. 分区内的顺序保证2. 并发消费3. 实现顺序消费的策略4. 注意事项 kafka创建 topic 的时候没有指定分区数量&#xff0c;那么默认只会有一个分区。如果你想要创建一个具有多个分区的 topic&#xff0c;你可以在创建 topic 的命令中指定 --p…...

springboot原生socket通讯教程

需求背景 最近需要对接一些硬件设备,他们选择了socket通讯,并且使用的是私有化协议加密通讯。这种情况下适合原生的socket加解密解析,不适合NettySocket,这在开发中增加了难度。所有的代码都要手动去敲。如果你的只想通过socket传输一些数据,而且都是json的数据,例如聊天…...

革新排版机产线:一体式IO模块引领自动化高效控制新时代

在瞬息万变的制造业浪潮中&#xff0c;自动化与智能化已成为推动产业升级的关键力量。特别是在印刷行业&#xff0c;排版机的效率与精度直接关系到产品的质量与市场竞争力。近年来&#xff0c;随着技术的不断革新&#xff0c;明达技术MR20一体式IO模块凭借其高度集成、灵活配置…...

《深度学习梯度消失问题:原因与解决之道》

在深度学习的训练过程中&#xff0c;梯度消失是一个常见且棘手的问题&#xff0c;它会严重影响模型的训练效果和性能。以下是对该问题的原因分析与解决办法。 梯度消失问题的原因 首先是激活函数选择不当。像Sigmoid和Tanh这类传统激活函数&#xff0c;在输入值较大或较小时&…...

IP-MS常见问题(一)

用于IP-MS实验的样品&#xff0c;需要多少样品量&#xff1f; 建议使用约2107数量的细胞&#xff08;约5 mg蛋白&#xff09;进行IP实验。 其他类型的IP起始样品&#xff0c;如组织、细菌等可根据蛋白含量进行换算。 经过IP实验步骤或纯化富集的蛋白通常不超过10 μg&#xf…...

四种线程池的创建及任务提交

1. 线程池概述 1.1 线程池的定义 线程池是管理和控制线程使用的一种手段。它通过提前创建一定数量的线程&#xff0c;并将任务提交给这些线程执行&#xff0c;来实现资源的合理分配和任务的高效处理。 关键点&#xff1a; 线程复用&#xff1a;线程池在任务执行完毕后&#…...

【优选算法】查找总价格为目标值的两个商品

链接&#xff1a;LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;利用单调性&#xff0c;使用双指针算法解决问题 1.先从小到大排序 2. sum > t : right--; sum < t : left; sum t : return class Solution {public…...

从零开始学架构——互联网架构的演进

1 技术演进 1.1 技术演进的动力 对于新技术&#xff0c;我们应该站在行业的角度上思考&#xff0c;哪些技术我们要采取&#xff0c;哪些技术我们不能用&#xff0c;投入成本过大会不会导致满盘皆输&#xff1f;市场、技术、管理三者组成的业务发展铁三角&#xff0c;任何一个…...

Linux 系统常见问题

SSH问题 SSH连接服务器时报错&#xff1a; ssh_exchange_identification: read: Connection reset by peer 报错信息&#xff1a; ssh_exchange_identification: read: Connection reset by peer可以通过ssh -p root -v查看连接时详情 解决方法&#xff1a; vi /etc/host…...

工厂模式与抽象工厂模式在Unity中的实际应用案例

一、实验目的 实践工厂模式和抽象工厂模式的实际应用。 创建一个小型的游戏场景&#xff0c;通过应用这些设计模式提升游戏的趣味性和可扩展性。 掌握在复杂场景中管理和使用不同类型的对象。 比较在实际游戏开发中不同设计模式的实际效果和应用场景。 学习如何进行简单的性…...

AI定义汽车/跨域融合/整车智能,汽车智能化2.0时代新机会来了

汽车智能化2.0&#xff0c;产业正在发生深度变革。 一方面&#xff0c;AI大模型开始在多个域同步赋能智能汽车&#xff0c;从智能座舱到智能驾驶&#xff0c;再到底盘域&#xff0c;AI大模型正在快速推动汽车变革为超级智能体&#xff0c;AI定义汽车时代开始来临。 另一方面&…...

QT----------多媒体

实现思路 多媒体模块功能概述&#xff1a; QT 的多媒体模块提供了丰富的功能&#xff0c;包括音频播放、录制、视频播放和摄像头操作等。 播放音频&#xff1a; 使用 QMediaPlayer 播放完整的音频文件。使用 QSoundEffect 播放简短的音效文件。 录制音频&#xff1a; 使用 QMe…...

[ubuntu-22.04]ubuntu不识别rtl8153 usb转网口

问题描述 ubuntu22.04插入rtl8153 usb转网口不识别 解决方案 安装依赖包 sudo apt-get install libelf-dev build-essential linux-headers-uname -r sudo apt-get install gcc-12 下载源码 Realtek USB FE / GBE / 2.5G / 5G Ethernet Family Controller Softwarehttps:/…...

洛谷P1525 [NOIP2010 提高组] 关押罪犯(种子并查集基础)

题目链接:P1525 [NOIP2010 提高组] 关押罪犯 - 洛谷 | 计算机科学教育新生态 题目难度:普及+/提高 题目描述: S 城现有两座监狱,一共关押着 N 名罪犯,编号分别为 1∼N,有m对罪犯,每对之间有仇恨值,问如何分配罪犯使得现 Z 市长要看到其中最大的矛盾值最小。 输入格…...

Android笔试面试题AI答之Android基础(11)

Android入门请看《Android应用开发项目式教程》&#xff0c;视频、源码、答疑&#xff0c;手把手教 文章目录 1.Android的权限有哪些&#xff1f;**1. 普通权限****常见普通权限** **2. 危险权限****权限分组****常见危险权限组及权限** **3. 特殊权限****常见特殊权限** **4. …...

【智行安全】基于Synaptics SL1680的AI疲劳驾驶检测方案

随著车载技术的快速进步&#xff0c;驾驶安全越来越受到重视&#xff0c;而疲劳驾驶是造成交通事故的重要原因之一。传统的驾驶监控技术因精度不足或反应迟缓&#xff0c;无法满足实时监测需求。因此&#xff0c;结合人工智能技术的疲劳驾驶检测系统成为行业新方向&#xff0c;…...

多分类的损失函数

在多分类任务中,常用的损失函数能够衡量模型输出的类别分布与目标类别之间的差异,帮助模型学习更准确的分类能力。以下是多分类任务中常用的损失函数: 1. 交叉熵损失(Cross-Entropy Loss) 公式: CrossEntropyLoss = − 1 N ∑ i =...

探索数据之美,Plotly引领可视化新风尚

在数据如潮的今天&#xff0c;如何精准捕捉信息的脉搏&#xff0c;让数据说话&#xff1f;Plotly&#xff0c;这款强大的数据可视化工具&#xff0c;正以其卓越的性能和丰富的功能&#xff0c;成为数据分析师、科学家及工程师们的得力助手。 Plotly不仅仅是一个绘图库&#xf…...

青少年编程与数学 02-006 前端开发框架VUE 02课题、创建工程

青少年编程与数学 02-006 前端开发框架VUE 02课题、创建工程 一、开发环境&#xff08;一&#xff09;WebStorm安装WebStorm配置WebStorm安装中文语言包安装 Translation插件 &#xff08;二&#xff09;Node.jsWindows系统安装Node.jsLinux系统安装Node.jsNode.js与Vue.js的关…...

高并发场景下的秒杀系统架构设计与实现

引言 秒杀系统是一种高并发场景的典型应用&#xff0c;广泛存在于电商平台、抢票系统和促销活动中。秒杀活动的特点是短时间内吸引大量用户同时访问并尝试抢购商品&#xff0c;这对系统的高并发处理能力、稳定性和用户体验提出了极高的要求。 在秒杀系统中&#xff0c;常见的…...

局域网中单台交换机VLAN应用

网络拓扑 其中交换机接口类型都为access接口。 Ethernet 0/0/1 VLAN ID为10 Ethernet 0/0/2 VLAN ID为10 Ethernet 0/0/5 VLAN ID为20 Ethernet 0/0/6 VLAN ID为20 Host-1 ip为192.168.64.11/24 Host-2 ip为192.168.64.12/24 Host-3 ip为192.168.64.21/24 Host-4 ip为192.168…...

UNI-APP_i18n国际化引入

官方文档&#xff1a;https://uniapp.dcloud.net.cn/tutorial/i18n.html vue2中使用 1. 新建文件 locale/index.js import en from ./en.json import zhHans from ./zh-Hans.json import zhHant from ./zh-Hant.json const messages {en,zh-Hans: zhHans,zh-Hant: zhHant }…...

纯血鸿蒙ArkUI选项卡布局详解

当页面信息较多的时候&#xff0c;为了让用户能够聚焦于当前显示的内容&#xff0c;需要对页面的内容进行分类&#xff0c;提高页面空间利用率。Tabs组件可以在一个页面内实现快速的视图内容切换&#xff0c;一方面提升查找信息的效率&#xff0c;另一方面精简用户单词获取到的…...

从0开始的opencv之旅(1)cv::Mat的使用

目录 Mat 存储方法 创建一个指定像素方式的图像。 尽管我们完全可以把cv::Mat当作一个黑盒&#xff0c;但是笔者的建议是仍然要深入理解和学习cv::Mat自身的构造逻辑和存储原理&#xff0c;这样在查找问题&#xff0c;或者是遇到一些奇奇怪怪的图像显示问题的时候能够快速的想…...

uniapp 微信小程序开发使用高德地图、腾讯地图

一、高德地图 1.注册高德地图开放平台账号 &#xff08;1&#xff09;创建应用 这个key 第3步骤&#xff0c;配置到项目中locationGps.js 2.下载高德地图微信小程序插件 &#xff08;1&#xff09;下载地址 高德地图API | 微信小程序插件 &#xff08;2&#xff09;引入项目…...

Activation Functions

Chapter4&#xff1a;Activation Functions 声明&#xff1a;本篇博客笔记来源于《Neural Networks from scratch in Python》&#xff0c;作者的youtube 其实关于神经网络的入门博主已经写过几篇了&#xff0c;这里就不再赘述&#xff0c;附上链接。 1.一文窥见神经网络 2.神经…...

【TextIn—智能文档解析与DocFlow票据AI自动化处理:赋能企业文档数字化管理与数据治理的双重利器】

TextIn—智能文档解析与票据AI自动化处理&#xff1a;赋能企业文档数字化管理与数据治理的双重利器 ​ 在数据驱动的时代&#xff0c;企业面临的挑战不仅在于海量数据的整理和响应速度的提高&#xff0c;更在于如何有效管理和利用这些日益增长的海量信息。尤其是在信息日趋多样…...

Quartus In-System Sources and Probes Editor 的使用说明

文章目录 前言使用说明参考资料 前言 Quartus 提供了 In-System Sources and Probes Editor 调试工具&#xff0c;通过 JTAG 接口使用该工具可以驱动和采样内部节点的逻辑值。即通过 Sources 功能来驱动 FPGA 内部信号&#xff0c;通过 Probes 功能来探测内部节点的逻辑值。在…...

【视觉SLAM:八、后端Ⅱ】

视觉SLAM后端的核心任务是估计相机的轨迹和场景的三维结构&#xff0c;这需要解决非线性优化问题。为了保证效率和精度&#xff0c;后端主要依赖以下两种方法&#xff1a;滑动窗口法&#xff08;基于局部优化的策略&#xff09;和位姿图优化&#xff08;基于全局优化的策略&…...

【大模型实战篇】LLaMA Factory微调ChatGLM-4-9B模型

1. 背景介绍 虽然现在大模型微调的文章很多&#xff0c;但纸上得来终觉浅&#xff0c;大模型微调的体感还是需要自己亲自上手实操过&#xff0c;才能有一些自己的感悟和直觉。这次我们选择使用llama_factory来微调chatglm-4-9B大模型。 之前微调我们是用两块3090GPU显卡&…...

多个DataV遍历生成

DataV是数据可视化工具 与Echart类似 相对Echart图标边框 装饰可选官网DataV 安装 npm install kjgl77/datav-vue3main.ts import DataVVue3 from kjgl77/datav-vue3 app.use(DataVVue3)多个DataV遍历生成 Vue3viteDataV为例:<template><div w50rem h25rem flex&qu…...

【JavaWeb后端学习笔记】MySQL的常用函数(字符串函数,数值函数,日期函数,流程函数)

MySQL函数 1、字符串函数2、数值函数3、日期函数4、流程函数 1、字符串函数 函数说明concat(s1, s2, …, sn)字符串拼接&#xff0c;将 s1, s2, …, sn 拼接成一个字符串lower(str)将字符串 str 全部转为小写upper(str)将字符串 str 全部转为大写lpad(str, n, pad)左填充&…...

开源AI智能名片2+1链动模式O2O商城小程序在流量留存与转化中的深度应用与优化策略

摘要 在数字化时代&#xff0c;企业面临的市场竞争日益激烈&#xff0c;传统的营销手段已难以满足当前市场的多样化需求。开源AI智能名片21链动模式O2O商城小程序作为一种创新的数字化营销工具&#xff0c;凭借其开源特性、AI智能名片功能、21链动模式以及O2O商城小程序的优势…...

API多并发识别、C#文字识别

在当今数字化转型的浪潮中&#xff0c;信息处理的速度和准确性成为了企业在市场中立足的关键因素之一。特别是在大数据时代&#xff0c;海量的信息需要被快速、精确的解析和利用&#xff0c;因此&#xff0c;这正是文字识别技术大放异彩的舞台。翔云平台针对市场需求&#xff0…...

JVM和异常

Java 虚拟机&#xff08;Java Virtual Machine&#xff0c;简称 JVM&#xff09; 概述 JVM 是运行 Java 字节码的虚拟计算机&#xff0c;它是 Java 程序能够实现 “一次编写&#xff0c;到处运行&#xff08;Write Once, Run Anywhere&#xff09;” 特性的关键所在。Java 程…...

设计模式 创建型 单例模式(Singleton Pattern)与 常见技术框架应用 解析

单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;旨在确保某个类在应用程序的生命周期内只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。这种设计模式在需要控制资源访问、避免频繁创建和销毁对象的场景中尤为有用。 一、核心…...

idea( 2022.3.2)打包报错总结

一 报错 class lombok.javac.apt.LombokProcessor (in unnamed module 0x4fe64d23) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing …...

基于SpringBoot在线竞拍平台系统功能实现十一

## 一、前言介绍&#xff1a;1.1 项目摘要 随着网络技术的飞速发展和电子商务的普及&#xff0c;竞拍系统作为一种新型的在线交易方式&#xff0c;已经逐渐深入到人们的日常生活中。传统的拍卖活动需要耗费大量的人力、物力和时间&#xff0c;从组织拍卖、宣传、报名、竞拍到成…...

kubernetes学习-Service

kubernetes学习-Service 1. Service说明2. 功能3.Service类型3.1 NodePort3.1.1 创建web-service.yaml3.1.2 创建web-pod.yaml3.1.3 部署3.1.4 验证 3.2 ClusterIP3.2.1 创建web-clusterIp-service.yaml3.2.2 创建web-clusterIp-pod.yaml3.2.3 部署3.2.4 验证 3.3 LoadBalancer…...

【bluedroid】A2dp Source播放流程源码分析(4)

接上集分析:【bluedroid】A2dp Source播放流程源码分析(3)-CSDN博客 蓝牙和AUDIO之间的接口 蓝牙和audio之间的通信是通过socket,管理socket中的文件是UIPC,UIPC管理两条socket。 A2DP_CTRL_PATH /data/misc/bluedroid/.a2dp_ctrl A2DP_DATA_PATH /data/misc/bluedroid…...

vue3基础,小白从入门到精通

目录 一、vue.js 简述 二、 下载 vue.esm-browser.js 这个模块文件 三、创建第一个Vue程序 3.1创建代码过程 四、v-on 五、循环遍历(v-for) 六、判断语法(v-if和v-show) 6.1节点的动态属性v-bind 6.2 用v-bind实现CSS样式绑定 一、vue.js 简述 Vue 3 是一款流行的 J…...

Go 如何优雅退出进程

优雅退出设计步骤 在 Go 项目中&#xff0c;设计优雅退出&#xff08;Graceful Shutdown&#xff09;时&#xff0c;通常需要确保在收到退出信号时&#xff0c;程序能够安全地清理资源并优雅地退出。以下是常见的优雅退出设计步骤&#xff1a; 步骤 1&#xff1a;创建 contex…...

#Vue3篇: 无感刷新token的原理JSESSIONID无感刷新和JWT接口刷新

基于这个后端是怎么更新token的 为了理解后端是如何更新 Token 的&#xff0c;我们需要考虑一个典型的基于 Token 的身份验证流程&#xff0c;特别是涉及 JSESSIONID 和自定义 Token&#xff08;如 JWT, JSON Web Token&#xff09;的情况。 下面我将介绍两种常见的更新 Token …...