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

JavaScript学习教程,从入门到精通,JavaScript 运算符及语法知识点详解(8)

JavaScript 运算符及语法知识点详解

一、JavaScript 运算符

1. 算术运算符

用于执行数学运算:

  • + 加法
  • - 减法
  • * 乘法
  • / 除法
  • % 取模(余数)
  • ++ 递增
  • -- 递减
  • ** 幂运算(ES6)
let a = 10, b = 3;
console.log(a + b);  // 13
console.log(a - b);  // 7
console.log(a * b);  // 30
console.log(a / b);  // 3.333...
console.log(a % b);  // 1
console.log(a++);    // 10 (先返回后加)
console.log(++a);    // 12 (先加后返回)
console.log(a ** b); // 1728 (12的3次方)

2. 赋值运算符

用于给变量赋值:

  • = 简单赋值
  • += 加后赋值
  • -= 减后赋值
  • *= 乘后赋值
  • /= 除后赋值
  • %= 取模后赋值
  • **= 幂运算后赋值
let x = 5;
x += 3;  // 等同于 x = x + 3 → 8
x -= 2;  // 等同于 x = x - 2 → 6
x *= 4;  // 等同于 x = x * 4 → 24
x /= 3;  // 等同于 x = x / 3 → 8
x %= 5;  // 等同于 x = x % 5 → 3
x **= 2; // 等同于 x = x ** 2 → 9

3. 比较运算符

用于比较值:

  • == 等于(值相等)
  • === 严格等于(值和类型都相等)
  • != 不等于
  • !== 严格不等于
  • > 大于
  • < 小于
  • >= 大于等于
  • <= 小于等于
console.log(5 == '5');   // true (类型转换)
console.log(5 === '5');  // false
console.log(5 != '5');   // false
console.log(5 !== '5');  // true
console.log(5 > 3);      // true
console.log(5 < 3);      // false

4. 条件(三元)运算符

condition ? expr1 : expr2 - 如果条件为真则执行expr1,否则执行expr2

let age = 20;
let status = (age >= 18) ? '成人' : '未成年';
console.log(status);  // 成人

5. 布尔(逻辑)运算符

  • && 逻辑与
  • || 逻辑或
  • ! 逻辑非
let hasLicense = true, hasCar = false;
console.log(hasLicense && hasCar);  // false
console.log(hasLicense || hasCar);  // true
console.log(!hasLicense);           // false

6. 位运算符

对二进制位进行操作:

  • &
  • |
  • ~
  • ^ 异或
  • << 左移
  • >> 右移
  • >>> 无符号右移
let num1 = 5;    // 0101
let num2 = 3;    // 0011
console.log(num1 & num2);  // 0001 → 1
console.log(num1 | num2);  // 0111 → 7
console.log(~num1);        // 1010 → -6
console.log(num1 ^ num2);  // 0110 → 6
console.log(num1 << 1);    // 1010 → 10
console.log(num1 >> 1);    // 0010 → 2

7. 运算符优先级

运算符按优先级从高到低执行,同级别从左到右:

优先级运算符
() 括号
++ -- 后置递增/减
! ~ 逻辑非/位非
+ - 一元加减
++ -- 前置递增/减
** 幂运算
* / % 乘除模
+ - 加减
<< >> >>> 位移
< <= > >= 比较
== != === !== 等值
& 位与
^ 位异或
`
&& 逻辑与
`
?: 条件运算符
= 赋值
let result = 5 + 3 * 2 ** 2;  // 3*4=12 → 5+12=17
console.log(result);  // 17

二、案例代码:计算立方体的体积

/*** 计算立方体体积的函数* @param {number} length - 立方体的长度* @param {number} width - 立方体的宽度* @param {number} height - 立方体的高度* @returns {number} 立方体的体积*/
function calculateCubeVolume(length, width, height) {// 使用算术运算符*计算体积let volume = length * width * height;// 返回计算结果return volume;
}// 使用赋值运算符定义立方体尺寸
let cubeLength = 5;
let cubeWidth = 4;
let cubeHeight = 3;// 调用函数计算体积
let cubeVolume = calculateCubeVolume(cubeLength, cubeWidth, cubeHeight);// 使用比较运算符验证输入是否有效
if (cubeLength > 0 && cubeWidth > 0 && cubeHeight > 0) {// 使用字符串连接运算符+输出结果console.log("立方体的尺寸: 长" + cubeLength + ", 宽" + cubeWidth + ", 高" + cubeHeight);console.log("立方体的体积是: " + cubeVolume);// 使用条件运算符判断立方体大小let sizeCategory = cubeVolume > 50 ? "大" : "小";console.log("这是一个" + sizeCategory + "型立方体");// 使用位运算符示例(虽然不太适用于此场景)let roundedVolume = cubeVolume & ~1; // 向下舍入到最近的偶数console.log("向下舍入到最近的偶数: " + roundedVolume);
} else {console.log("错误: 所有尺寸必须大于0");
}// 运算符优先级示例
let complexCalculation = (cubeLength + cubeWidth) * cubeHeight ** 2 / 4;
console.log("复杂计算结果: " + complexCalculation);
// 解释: 先计算指数(cubeHeight ** 2 = 9), 然后加法(5+4=9), 
// 然后乘法(9*9=81), 最后除法(81/4=20.25)

代码说明:

  1. 函数定义:使用function关键字定义计算立方体体积的函数
  2. 算术运算符:使用*计算三个维度的乘积
  3. 赋值运算符:使用=为变量赋值
  4. 比较运算符:使用>检查输入是否有效
  5. 逻辑运算符:使用&&确保所有尺寸都大于0
  6. 条件运算符:使用?:根据体积大小分类
  7. 位运算符:使用&~进行位运算示例
  8. 运算符优先级:演示了复杂表达式中的运算顺序

三、案例代码

下面我将提供5个实际开发中常见的案例,每个案例都会充分利用不同的JavaScript运算符。

案例1:电商网站购物车计算

/*** 计算购物车总价和折扣* @param {Array} cartItems - 购物车商品数组* @param {string} promoCode - 优惠码* @returns {Object} 包含总价、折扣和应付金额的对象*/
function calculateCartTotal(cartItems, promoCode) {// 使用算术运算符计算商品小计let subtotal = cartItems.reduce((sum, item) => sum + (item.price * item.quantity), 0);// 使用比较运算符验证优惠码let discount = 0;if (promoCode === 'SAVE20' && subtotal >= 100) {// 使用赋值运算符应用折扣discount = subtotal * 0.2;} else if (promoCode === 'SAVE10') {discount = subtotal * 0.1;}// 使用条件运算符确定是否免运费const shippingFee = subtotal > 50 ? 0 : 5.99;// 计算总价(使用算术运算符)const total = subtotal - discount + shippingFee;return {subtotal: +subtotal.toFixed(2),  // 使用一元+运算符转换为数字discount: +discount.toFixed(2),shippingFee,total: +total.toFixed(2)};
}// 测试数据
const cart = [{ name: '无线耳机', price: 99.99, quantity: 1 },{ name: '手机壳', price: 15.50, quantity: 2 },{ name: '充电器', price: 29.99, quantity: 1 }
];// 计算不同优惠码情况
console.log('使用SAVE20优惠码:', calculateCartTotal(cart, 'SAVE20'));
console.log('使用SAVE10优惠码:', calculateCartTotal(cart, 'SAVE10'));
console.log('无优惠码:', calculateCartTotal(cart, ''));

案例2:游戏角色状态管理

class GameCharacter {constructor(name, health, strength, agility) {this.name = name;this.maxHealth = health;this.health = health;  // 当前生命值this.strength = strength;this.agility = agility;this.isAlive = true;this.skills = [];}// 使用算术运算符计算伤害attack(target) {if (!this.isAlive || !target.isAlive) return false;// 使用位运算符生成随机因子const critChance = this.agility & 0xF; // 取低4位作为暴击率const isCritical = Math.random() * 100 < critChance;// 使用条件运算符确定伤害值let damage = this.strength + (isCritical ? this.strength >> 1 : 0);// 使用比较运算符验证目标是否存活target.takeDamage(damage);return { damage, isCritical };}// 使用赋值运算符减少生命值takeDamage(amount) {this.health -= amount;// 使用逻辑运算符检查角色状态this.isAlive = this.health > 0;if (!this.isAlive) {console.log(`${this.name}已被击败!`);}}// 使用算术运算符恢复生命值heal(amount) {// 使用比较运算符确保不超过最大生命值this.health = Math.min(this.health + amount, this.maxHealth);console.log(`${this.name}恢复了${amount}点生命值`);}// 使用条件运算符添加技能learnSkill(skill) {this.skills.includes(skill) ? console.log(`${this.name}已经学会了${skill}`): (this.skills.push(skill), console.log(`${this.name}学会了新技能: ${skill}`));}
}// 创建角色
const hero = new GameCharacter('英雄', 100, 15, 12);
const monster = new GameCharacter('怪物', 80, 12, 8);// 战斗模拟
while (hero.isAlive && monster.isAlive) {const attackResult = hero.attack(monster);if (attackResult) {console.log(`${hero.name}${monster.name}造成了${attackResult.damage}点伤害${attackResult.isCritical ? '(暴击!)' : ''}`);}if (monster.isAlive) {monster.attack(hero);}
}

案例3:表单验证工具

/*** 表单验证工具类*/
class FormValidator {constructor(formId) {this.form = document.getElementById(formId);this.errors = [];}// 使用比较运算符验证必填字段validateRequired(fieldName, message) {const field = this.form[fieldName];if (!field || !field.value.trim()) {this.errors.push(message || `${fieldName}是必填字段`);return false;}return true;}// 使用算术运算符验证数字范围validateNumberRange(fieldName, min, max, message) {const field = this.form[fieldName];if (!field) return false;const value = +field.value;  // 使用一元+运算符转换为数字if (isNaN(value) || value < min || value > max) {this.errors.push(message || `${fieldName}必须在${min}${max}之间`);return false;}return true;}// 使用比较运算符验证邮箱格式validateEmail(fieldName, message) {const field = this.form[fieldName];if (!field) return false;const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;if (!emailRegex.test(field.value)) {this.errors.push(message || '请输入有效的邮箱地址');return false;}return true;}// 使用比较运算符验证密码匹配validatePasswordMatch(passwordField, confirmField, message) {const password = this.form[passwordField];const confirm = this.form[confirmField];if (!password || !confirm || password.value !== confirm.value) {this.errors.push(message || '两次输入的密码不匹配');return false;}return true;}// 使用逻辑运算符组合验证结果validate() {this.errors = [];// 验证用户名this.validateRequired('username', '请输入用户名');// 验证邮箱this.validateRequired('email');this.validateEmail('email');// 验证年龄this.validateRequired('age');this.validateNumberRange('age', 18, 100, '年龄必须在18到100岁之间');// 验证密码this.validateRequired('password', '请输入密码');this.validateRequired('confirmPassword', '请确认密码');this.validatePasswordMatch('password', 'confirmPassword');// 使用位运算符检查错误数量return this.errors.length === 0;}getErrors() {return this.errors;}
}// 使用示例
document.getElementById('myForm').addEventListener('submit', function(e) {e.preventDefault();const validator = new FormValidator('myForm');if (validator.validate()) {alert('表单验证通过,即将提交!');// 提交表单...} else {alert('请修正以下错误:\n' + validator.getErrors().join('\n'));}
});

案例4:温度转换工具

/*** 温度转换工具*/
class TemperatureConverter {// 使用算术运算符进行温度转换static celsiusToFahrenheit(celsius) {return (celsius * 9/5) + 32;}static fahrenheitToCelsius(fahrenheit) {return (fahrenheit - 32) * 5/9;}// 使用比较运算符验证输入static isValidTemperature(temp, scale) {switch(scale.toUpperCase()) {case 'C':return temp >= -273.15;  // 绝对零度case 'F':return temp >= -459.67;  // 绝对零度(华氏)default:return false;}}// 使用条件运算符选择转换方法static convert(temp, fromScale, toScale) {if (!this.isValidTemperature(temp, fromScale)) {throw new Error('无效的温度值');}fromScale = fromScale.toUpperCase();toScale = toScale.toUpperCase();if (fromScale === toScale) {return temp;}return fromScale === 'C' ? this.celsiusToFahrenheit(temp): this.fahrenheitToCelsius(temp);}// 使用位运算符生成随机温度(演示用途)static getRandomTemp(scale) {const random = Math.random() * 100 | 0;  // 使用位或取整return scale.toUpperCase() === 'C' ? random : this.celsiusToFahrenheit(random);}
}// 使用示例
const currentTempC = 25;
const currentTempF = TemperatureConverter.celsiusToFahrenheit(currentTempC);
console.log(`${currentTempC}°C = ${currentTempF.toFixed(1)}°F`);const testTemp = 98.6;
console.log(`${testTemp}°F = ${TemperatureConverter.fahrenheitToCelsius(testTemp).toFixed(1)}°C`);// 随机温度生成
const randomCTemp = TemperatureConverter.getRandomTemp('C');
const randomFTemp = TemperatureConverter.getRandomTemp('F');
console.log(`随机温度: ${randomCTemp}°C / ${randomFTemp}°F`);// 边界测试
try {console.log(TemperatureConverter.convert(-300, 'C', 'F'));
} catch (e) {console.error(e.message);  // 无效的温度值
}

案例5:DOM元素动画控制器

class ElementAnimator {constructor(elementId) {this.element = document.getElementById(elementId);this.animationId = null;this.isAnimating = false;this.position = 0;this.speed = 5;this.direction = 1;  // 1 for right, -1 for left}// 使用算术运算符更新位置updatePosition() {// 使用赋值运算符更新位置this.position += this.speed * this.direction;// 使用比较运算符检查边界const maxPosition = window.innerWidth - this.element.offsetWidth;if (this.position >= maxPosition || this.position <= 0) {// 使用位运算符取反方向(演示用途)this.direction = ~this.direction + 1;  // 等同于 this.direction *= -1}// 使用条件运算符设置样式this.element.style.transform = `translateX(${this.position}px)`;}// 使用逻辑运算符控制动画状态start() {if (this.isAnimating) return;this.isAnimating = true;const animate = () => {this.updatePosition();this.animationId = requestAnimationFrame(animate);};animate();}stop() {if (!this.isAnimating) return;cancelAnimationFrame(this.animationId);this.isAnimating = false;}// 使用算术运算符调整速度increaseSpeed() {this.speed = Math.min(this.speed + 1, 20);  // 最大速度20}decreaseSpeed() {this.speed = Math.max(this.speed - 1, 1);  // 最小速度1}// 使用条件运算符切换方向toggleDirection() {this.direction *= -1;}
}// 使用示例
const animator = new ElementAnimator('animatedElement');document.getElementById('startBtn').addEventListener('click', () => {animator.start();
});document.getElementById('stopBtn').addEventListener('click', () => {animator.stop();
});document.getElementById('speedUpBtn').addEventListener('click', () => {animator.increaseSpeed();
});document.getElementById('slowDownBtn').addEventListener('click', () => {animator.decreaseSpeed();
});document.getElementById('toggleDirBtn').addEventListener('click', () => {animator.toggleDirection();
});// 键盘控制(使用位运算符检测按键组合)
document.addEventListener('keydown', (e) => {// 使用位掩码检查Ctrl键(演示用途)const ctrlPressed = e.ctrlKey;switch(e.key) {case 'ArrowRight':if (ctrlPressed) animator.increaseSpeed();else if (animator.direction !== 1) animator.toggleDirection();break;case 'ArrowLeft':if (ctrlPressed) animator.decreaseSpeed();else if (animator.direction !== -1) animator.toggleDirection();break;case ' ':animator.isAnimating ? animator.stop() : animator.start();break;}
});

这些案例涵盖了JavaScript运算符在实际开发中的多种应用场景,包括:

  1. 电商计算(算术、比较、条件运算符)
  2. 游戏开发(位、逻辑、赋值运算符)
  3. 表单验证(比较、逻辑运算符)
  4. 工具类开发(算术、比较、条件运算符)
  5. DOM操作和动画(赋值、算术、位运算符)

相关文章:

JavaScript学习教程,从入门到精通,JavaScript 运算符及语法知识点详解(8)

JavaScript 运算符及语法知识点详解 一、JavaScript 运算符 1. 算术运算符 用于执行数学运算&#xff1a; 加法- 减法* 乘法/ 除法% 取模&#xff08;余数&#xff09; 递增-- 递减** 幂运算&#xff08;ES6&#xff09; let a 10, b 3; console.log(a b); // 13 conso…...

聊聊Spring AI的ETL Pipeline

序 本文主要研究一下Spring AI的ETL Pipeline DocumentReader org/springframework/ai/document/DocumentReader.java public interface DocumentReader extends Supplier<List<Document>> {default List<Document> read() {return get();}}有TextReader…...

spark架构和RDD相关概念

运行架构&#xff1a; Spark采用master - slave结构&#xff0c;Driver作为master负责作业任务调度&#xff0c;Executor作为slave负责实际执行任务。 核心组件 Driver&#xff1a;执行Spark任务的main方法&#xff0c;将用户程序转化为作业&#xff0c;在Executor间调度任务&…...

Cloud Kernel SIG 季度动态:发布ANCK 6.6-003版本,支持一测多证

Cloud Kernel SIG&#xff08;Special Interest Group&#xff09;&#xff1a;支撑龙蜥内核版本的研发、发布和服务&#xff0c;提供生产可用的高性价比内核产品。 01 SIG 整体进展 发布 ANCK 6.6-003 版本。 一测多证流程建立。 OOT 驱动基线更新。 海光平台适配进展更新…...

【11】数据结构之基于线性表的查找算法

目录标题 平均查找长度ASL(Average Search Length)顺序表查找法折半查找法索引顺序查找法 平均查找长度ASL(Average Search Length) 定义&#xff1a;为确定元素在列表中的位置&#xff0c;需要和给定值进行比较的关键字个数的期望值&#xff0c;称之为查找算法成功时的平均查…...

铼赛智能Edge mini斩获2025法国设计大奖 | 重新定义数字化齿科美学

铼赛智能&#xff08;RAYSHAPE&#xff09;革命性新品——椅旁3D打印机Edge mini荣获2025年法国设计奖&#xff08;FRENCH DESIGN AWARDS&#xff0c;简称FDA&#xff09;产品设计类大奖。作为全球工业设计领域最具影响力的奖项之一&#xff0c;这一殊荣不仅是对产品极简美学的…...

成为一种国家战略范畴的新基建的智慧园区开源了

智慧园区场景视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用户只需在界…...

Codeforces Round 1016 (Div. 3)题解

题目地址 https://codeforces.com/contest/2093 锐评 在所有题意都理解正确的情况下&#xff0c;整体难度不算太难。但是偏偏存在F这么恶心的题意&#xff0c;样例都不带解释一下的&#xff0c;根本看不懂题。D题也恶心&#xff0c;在于递归过程的拆分&#xff0c;需要点数学…...

安全理念和安全产品发展史

从安全理念的发展历史来看,技术与产品的演进始终围绕 “威胁对抗” 与 “业务适配” 两大核心展开。以下从七个关键阶段解析安全技术与产品的发展脉络,并结合最新实践与未来趋势提供深度洞察: 一、密码学奠基阶段(1970s 前) 安全理念:以 “信息保密” 为核心,防御手段…...

【深度学习】Downstream Model:预训练模型的下游应用与微调技术

Downstream Model&#xff1a;预训练模型的下游应用与微调技术 文章目录 Downstream Model&#xff1a;预训练模型的下游应用与微调技术1 什么是Downstream Model&#xff08;下游模型&#xff09;2 预训练模型与下游任务的关系3 微调技术与迁移学习微调的必要性高效迁移学习参…...

每日算法-250409

这是我今天的算法学习记录。 2187. 完成旅途的最少时间 题目描述 思路 二分查找 解题过程 为什么可以使用二分查找&#xff1f; 问题的关键在于寻找一个最小的时间 t&#xff0c;使得在时间 t 内所有公交车完成的总旅途次数 sum 大于等于 totalTrips。 我们可以观察到时间的单…...

【CSS 选择器组合规则详解】

基础选择器组合 空格&#xff1a;后代选择器 > 直接子元素选择器 . 类选择器 : 伪类选择器 多类选择器 .class1.class2 &#xff1a;多类组合 .class1 .class2 &#xff1a;类的所有后代 .class1 > .class2 &#xff1a;类的子元素特殊选择器 :nth-child() :nth-of-…...

手机静态ip地址怎么获取?方法与解析‌

而在某些特定情境下&#xff0c;我们可能需要为手机设置一个静态IP地址。本文将详细介绍手机静态IP地址详解及获取方法 一、什么是静态IP地址&#xff1f; 静态IP&#xff1a;由用户手动设置的固定IP地址&#xff0c;不会因网络重启或设备重连而改变。 动态IP&#xff1a;由路…...

NumPy对二维矩阵中的每个元素进行加减乘除和对数运算

使用NumPy对二维矩阵中的每个元素进行加减乘除和对数运算的方法如下&#xff1a; 1. 加减乘除运算 对每个元素进行标量运算&#xff0c;可直接使用算术运算符。 示例代码&#xff1a; import numpy as nparr np.array([[1, 2], [3, 4]])# 加法 result_add arr 5 print(&…...

基于C8051F340单片机的精确定时1S的C程序

一、前言 C8051F340单片的定时器2 是一个 16 位的计数器/定时器&#xff0c;由两个 8 位的 SFR 组成&#xff1a;TMR2L&#xff08;低字节&#xff09;和TMR2H&#xff08;高字节&#xff09;。定时器 2 可以工作在 16 位自动重装载方式、8 位自动重装载方式&#xff08;两个 …...

提升Windows安全的一些措施

由简单到复杂&#xff0c;仅供参考 一、杀毒软件&#xff1a; 1、杀毒能力&#xff1a; https://haokan.hao123.com/v?vid3883775443252827335&pdhaokan_share 2、使用注意&#xff1a; 一台主机只安装一个杀毒软件就可以了 杀毒软件会误报&#xff0c;造成正常文件…...

中科岩创基坑自动化监测解决方案

1.行业现状 城市基坑开挖具有施工风险高、施工难度大等特点。由于地下土体性质、荷载条件、施工环境的复杂性&#xff0c;单根据地质勘察资料和室内土工试验参数来确定设计和施工方案&#xff0c;往往含有许多不确定因素&#xff0c;对在施工过程中引发的土体性状、环境、邻近建…...

Elasticsearch 系列专题 - 第二篇:数据建模与索引管理

在掌握了 Elasticsearch 的基本概念和操作后,本篇将重点介绍如何设计和管理索引,以及如何高效地导入和维护数据。这对于构建一个高效、可扩展的搜索系统至关重要。 1. 索引设计 1.1 如何选择合适的索引结构 索引是 Elasticsearch 的核心,设计时需考虑以下因素: 数据用途:…...

解决缓存穿透的布隆过滤器与布谷鸟过滤器:谁更适合你的应用场景?

目录 一、布隆过滤器&#xff1a;高效的空间节省者 1.1 布隆过滤器是什么&#xff1f; 1.2 工作原理 1.3 优点 1.4 缺点 1.5 适用场景 二、布谷鸟过滤器&#xff1a;解决删除难题的创新者 2.1 布谷鸟过滤器是什么&#xff1f; 2.2 工作原理 2.3 优点 2.4 缺点 2.5 适用场景 三、…...

OpenHarmony子系统开发 - 调测工具(一)

OpenHarmony子系统开发 - 调测工具&#xff08;一&#xff09; 一、bytrace使用指导 简介 bytrace是开发人员用于追踪进程轨迹、分析性能的一种工具&#xff0c;主要对内核ftrace进行了封装和扩展&#xff0c;来支持用户态的打点。通过该工具可以打开想要查看的用户态和内核l…...

Qt中的鼠标事件

1.鼠标进入事件和鼠标离开事件 1.1添加新文件 1.2ui界面 拖出一个Label控件&#xff0c;修改frameShape为Box&#xff0c;使边框更明显 1.3代码实现 #ifndef MYLABEL_H #define MYLABEL_H#include <QLabel>class myLabel : public QLabel {Q_OBJECT public:explicit m…...

MySQL JOIN详解:INNER JOIN与LEFT JOIN的选择与应用

在数据库查询中&#xff0c;JOIN操作是最常用也最重要的操作之一。不同的JOIN类型会导致完全不同的查询结果&#xff0c;正确选择JOIN类型是编写高效、准确SQL查询的关键。本文将深入探讨INNER JOIN和LEFT JOIN的区别、应用场景以及常见问题。 一、JOIN基础概念 1. 什么是JOI…...

Flink 反压下的 TCP 流控制

1. 什么是 Flink 反压和 TCP 流控制&#xff1f; 反压&#xff08;Backpressure&#xff09;是什么&#xff1f; 反压是分布式流处理系统中一种自我调节机制。当下游处理数据的速度跟不上上游发送数据的速度时&#xff0c;反压会让上游放慢发送速度&#xff0c;以避免系统过载…...

山东大学软件学院项目实训开发日志(7)之测试前后端本地部署

基于队长搭建的springbootvue框架&#xff0c;在本地进行测试搭建。 在运行后端过程中&#xff0c;出现下图错误&#xff1a; 查找后发现这个问题出现在 Maven 项目的 pom.xml 文件中&#xff0c;显示找不到一些依赖项。所以在此进行最简单的重新加载项目得以解决&#xff0c;…...

YOLOv11训练中精准率召回率与mAP@0.5的动态变化分析

目标检测模型的训练过程涉及多个关键性能指标和损失函数的变化&#xff0c;这些数据能够直观反映模型的收敛速度、最终精度以及改进效果。本文旨在通过绘制YOLOv11模型在训练过程中的精准率&#xff08;Precision&#xff09;、召回率&#xff08;Recall&#xff09;、mAP0.5 、…...

Windows下ElasticSearch8.x的安装步骤

下载ElasticSearch&#xff1a;https://www.elastic.co/downloads/elasticsearch &#xff08;我下载的是目前最新版8.17.4&#xff09;解压ElasticSearch 进入到ElasticSearch的bin目录下双击elasticsearch.bat 弹出控制台并开始执行&#xff0c;在这一步会输出初始账号和密码…...

Leetcode hot100 (day 8,9)

爬楼梯 做法一&#xff1a;小斐波那契数列&#xff0c;只要注意记忆化递归即可 class Solution { public:int dp[50];int climbStairs(int n) {if(dp[n])return dp[n];if(n2){return dp[2]2;}if(n1){return dp[1]1;}//if(dp[n])return dp[n];return dp[n]climbStairs(n-1)clim…...

LinuxSocket套接字编程

1.介绍函数使用 1.创建套接字 int socket(int domain, int type, int protocol); domain&#xff1a;指定协议族&#xff0c;如AF_INET&#xff08;IPv4&#xff09;或AF_INET6&#xff08;IPv6&#xff09;。 type&#xff1a;指定套接字类型&#xff0c;如SOCK_DGRAM&#…...

青少年编程考试 CCF GESP Python五级认证真题 2025年3月

Python 五级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 A A A B D B A D A D C A A D B 1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 链表不具备的特点是( )。 A. 可随机访问任何一个元素 B. 插入、删除操作不需要移动元素 C…...

Java-对比两组对象找出发生变化的字段工具-支持枚举映射-支持时间-支持显示对应字段中文描述-嵌套list等场景

实体字段比较器&#xff08;对比两组对象找出发生变化的字段工具类开发&#xff09; 支持枚举映射 支持时间 支持显示对应字段中文描述 支持嵌套list等场景 下载地址&#xff1a; Java-对比两组对象找出发生变化的字段工具-支持枚举映射-支持时间-支持显示对应字段中文描述-嵌…...

电影舆情分析可视化平台管理端实现

电影舆情分析可视化平台管理端实现 系统概述 本系统的用户主要有三类&#xff0c;游客、普通用户以及电影从业人员。 面向游客和普通用户的是电影网站&#xff0c;系统提供一个便捷的平台&#xff0c;供普通用户搜索和了解电影的基本信息&#xff0c;支持电影预告片播放&…...

【Linux】进程信号(下)

在上一篇中&#xff0c;我们详细探讨了信号的预备知识和产生方式&#xff08;如硬件异常、终端输入、kill命令、系统调用等&#xff09;及其背后的操作系统行为。信号作为进程间异步通信的核心机制&#xff0c;其生命周期远不止“产生”这一环节——信号的保存与处理才是实现可…...

华为数字芯片机考2025合集2已校正

单选 1. 题目内容 关于亚稳态的描述错误的是&#xff08; &#xff09;。 1. 解题步骤 1.1 理解亚稳态&#xff08;Metastability&#xff09;的核心特性 亚稳态是指触发器无法在指定时间内稳定输出有效逻辑电平&#xff08;0或1&#xff09;的状态&#xff0c;其关键特点…...

【大模型微调】如何解决llamaFactory微调效果与vllm部署效果不一致如何解决

以下个人没整理太全 一、生成式语言模型的对话模板介绍 使用Qwen/Qwen1.5-0.5B-Chat训练 对话模板不一样。回答的内容就会不一样。 我们可以看到例如qwen模型的tokenizer_config.json文件&#xff0c;就可以看到对话模板&#xff0c;一般同系列的模型&#xff0c;模板基本都…...

基于视觉语言模型的机器人实时探索系统!ClipRover:移动机器人零样本视觉语言探索和目标发现

作者&#xff1a;Yuxuan Zhang 1 ^{1} 1, Adnan Abdullah 2 ^{2} 2, Sanjeev J. Koppal 3 ^{3} 3, and Md Jahidul Islam 4 ^{4} 4单位&#xff1a; 2 , 4 ^{2,4} 2,4佛罗里达大学电气与计算机工程系RoboPI实验室&#xff0c; 1 , 3 ^{1,3} 1,3佛罗里达大学电气与计算机工程系F…...

Java常用工具算法-6--秘钥托管云服务AWS KMS

前言&#xff1a; 之前我们介绍了一些常用的加密算法&#xff08;如&#xff1a;对称加密AES&#xff0c;非对称加密RSA&#xff0c;ECC等&#xff09;&#xff0c;不论是哪一种都需要涉及到秘钥的管理。通常的做法都是把秘钥放到配置文件中进行配置&#xff0c;但是对于一些高…...

Shell脚本的学习

编写脚本文件 定义以开头&#xff1a;#!/bin/bash #!用来声明脚本由什么shell解释&#xff0c;否则使用默认shel 第一步&#xff1a;编写脚本文件 #!/bin/bash #注释 echo "这是输出" 第二步&#xff1a;加上执行权限&#xff1a;chmod x 脚本文件名.sh 第三步&…...

Java——pdf增加水印

文章目录 前言方式一 itextpdf项目依赖引入编写PDF添加水印工具类测试效果展示 方式二 pdfbox依赖引入编写实现类效果展示 扩展1、将inputstream流信息添加水印并导出zip2、部署出现找不到指定字体文件 资料参考 前言 近期为了知识库文件导出&#xff0c;文件数据安全处理&…...

Redis过期key处理、内存淘汰策略与缓存一致性策略实践方案

在现代的高性能应用开发中&#xff0c;Redis作为一款极为热门的内存数据库&#xff0c;其快速的读写性能和丰富的数据结构使其在缓存、消息队列等诸多领域得到了广泛应用。然而&#xff0c;在实际使用过程中&#xff0c;处理好Redis过期key、选择合适的内存淘汰策略以及确保缓存…...

深入 C++ 线程库:从创建到同步的探索之旅

C在<thread>中定义了C线程库. 创建多线程 #include <iostream> #include <thread> using namespace std; void show(int id, int count) { //线程函数for (int i 0; i < count; i) {cout << "id:" << id << ",值:&qu…...

LangChain使用大语言模型构建强大的应用程序

LangChain简介 LangChain是一个强大的框架&#xff0c;旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口&#xff0c;可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#xff…...

程序化广告行业(72/89):Tag Manager系统代码操作与行业发展剖析

程序化广告行业&#xff08;72/89&#xff09;&#xff1a;Tag Manager系统代码操作与行业发展剖析 大家好&#xff01;在技术领域不断探索的过程中&#xff0c;我深刻体会到知识共享的重要性。写这篇博客&#xff0c;就是希望能和大家一起深入了解程序化广告行业&#xff0c;…...

数据结构实验3.3:求解迷宫路径问题

文章目录 一&#xff0c;问题描述二&#xff0c;基本要求三&#xff0c;算法分析&#xff08;一&#xff09;整体思路&#xff08;二&#xff09;详细步骤1. 输入迷宫大小并生成迷宫2. 定义走步规则3. 深度优先搜索&#xff08;DFS&#xff09;4. 输出结果 &#xff08;三&…...

基于SpringBoot的线上历史馆藏系统【附源码】

基于SpringBoot的线上历史馆藏系统&#xff08;源码L文说明文档&#xff09; 4 系统设计 系统在设计的过程中&#xff0c;必然要遵循一定的原则才可以&#xff0c;胡乱设计是不可取的。首先用户在使用过程中&#xff0c;能够直观感受到功能操作的便利性&#xff0c;符合…...

Mybatis的springboot项目使用

删除数据 & 占位符 一般常用占位符进行数据库操作&#xff0c;也就是预编译sql。 在UserMapper中定义删除接口 /** 根据id删除用户*/ Delete("delete from user where id #{id}") void deleteById(Integer id);若想要获取返回值&#xff0c;声明为Integer (s…...

网站集群批量管理-Ansible剧本与变量

复盘内容&#xff1a;链接指北 查看ansible命令文档 ansible-doc -s systemd一、剧本 何为剧本: playbook 文件,用于长久保存并且实现批量管理,维护,部署的文件. 类似于脚本存放命令和变量 剧本yaml格式,yaml格式的文件:空格,冒号. 剧本未来我们批量管理,运维必会的内容. …...

HOW - React Developer Tools 调试器

目录 React Developer Tools使用Components 功能特性1. 查看和编辑 props/state/hooks2. 查找组件3. 检查组件树4. 打印组件信息5. 检查子组件 Profiler 功能特性Commit ChartFlame Chart 火焰图Ranked Chart 排名图 why-did-you-render 参考文档&#xff1a; React调试利器&a…...

Spring Cloud Alibaba微服务治理实战:Nacos+Sentinel深度解析

一、引言 在微服务架构中&#xff0c;服务发现、配置管理、流量控制是保障系统稳定性的核心问题。Spring Cloud Netflix 生态曾主导微服务解决方案&#xff0c;但其部分组件&#xff08;如 Eureka、Hystrix&#xff09;已进入维护模式。 Spring Cloud Alibaba 凭借 高性能、轻…...

《AI换脸时代的攻防暗战:从技术滥用走向可信未来》

技术迭代图谱 过去五年里&#xff0c;Deepfake技术经历了飞速迭代&#xff0c;从最初的萌芽到如今的广泛应用和对抗措施形成。2017年前后&#xff0c;利用深度学习进行人脸换装的技术首次在社区中出现。一位Reddit网友昵称“deepfakes”&#xff0c;将名人面孔替换到色情影片上…...

25/4/9 算法笔记 DBGAN+强化学习+迁移学习实现青光眼图像去模糊1

整体实验介绍 实验主要是结合DBGAN对抗网络强化学习增强迁移学习增强实现青光眼图像去模糊。今天则是先完成了DBGAN板块模型的训练。 实验背景介绍 青光眼的主要特征有&#xff1a; 视盘形态与杯盘比CDR&#xff1a;青光眼患者主要表现为视杯扩大&#xff0c;盘沿变窄。 视…...