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

Three.js入门-材质详解,构建视觉真实感的核心

Three.js 材质详解:构建视觉真实感的核心

Three.js 是一个强大的 3D JavaScript 库,它为开发者提供了丰富的工具来创建和渲染逼真的三维场景。在这些工具中,材质是一个非常重要的组成部分。材质定义了物体表面的外观特性,例如颜色、光泽、透明度、纹理等。本文将深入探讨 Three.js 中的材质,帮助你全面了解如何通过材质增强你的 3D 场景。

一、什么是材质?

材质是一个对象,用于定义 3D 模型表面的视觉属性。它控制了光线与模型表面的交互方式。材质可以模拟多种真实世界的表面特性,例如金属的反光、木材的纹理或玻璃的透明度。

在 Three.js 中,材质通常与几何体(Geometry)和网格(Mesh)结合使用,最终形成可见的 3D 对象。

二、Three.js 中的材质分类

Three.js 提供了多种材质,每种材质都适用于特定的渲染需求。以下是一些常见的材质:

1. MeshBasicMaterial

MeshBasicMaterial 是最简单的材质,它不受光照影响,颜色和纹理直接显示在物体表面。这种材质非常适合显示纯色物体或简单的图案,例如 2D 精灵。

const material = new THREE.MeshBasicMaterial({color: 0xff0000, // 红色
});
const cube = new THREE.Mesh(geometry, material);

在这里插入图片描述

适用场景:

  • 无需光照的简单场景
  • UI 元素、标记等

2. MeshStandardMaterial

MeshStandardMaterial 是基于物理的材质,支持金属度和粗糙度参数,用于创建高度真实的效果。它需要环境光照或直接光源才能展现其完整的效果。

const material = new THREE.MeshStandardMaterial({color: 0x00ff00, // 绿色metalness: 0.5, // 金属度roughness: 0.2, // 粗糙度
});
const sphere = new THREE.Mesh(geometry, material);

在这里插入图片描述

适用场景:

  • 物理上真实的渲染
  • 现代游戏或高质量的场景

3. MeshLambertMaterial

MeshLambertMaterial 是一种受光照影响的材质,基于 Lambert 漫反射模型。它的计算成本较低,但不支持高光反射效果。

const material = new THREE.MeshLambertMaterial({color: 0x0000ff, // 蓝色
});
const sphere = new THREE.Mesh(geometry, material);

在这里插入图片描述

适用场景:

  • 简单的光照效果
  • 对性能要求较高的应用

4. MeshPhongMaterial

MeshPhongMaterial 是一种支持高光反射的材质,基于 Phong 着色模型。它可以产生更复杂的光影效果,例如镜面反射。

const material = new THREE.MeshPhongMaterial({color: 0xffff00, // 黄色shininess: 100, // 高光强度
});
const sphere = new THREE.Mesh(geometry, material);

在这里插入图片描述

适用场景:

  • 需要镜面反射的物体(如金属或水面)

5. MeshPhysicalMaterial

MeshPhysicalMaterialMeshStandardMaterial 的扩展,增加了更多物理属性,例如透明度和清晰度。适合渲染玻璃或液体等复杂材料。

const material = new THREE.MeshPhysicalMaterial({color: 0xffffff, // 白色transmission: 0.9, // 透光性roughness: 0.1, // 粗糙度
});
const sphere = new THREE.Mesh(geometry, material);

在这里插入图片描述

适用场景:

  • 高精度的 PBR 渲染
  • 透明或半透明物体

6. PointsMaterial

PointsMaterial 用于渲染点云(Point Cloud),定义点的大小和颜色。

// 创建粒子几何体const particlesGeometry = new THREE.BufferGeometry();const particlesCount = 5000;const positions = new Float32Array(particlesCount * 3); // 每个粒子有x、y、z三个坐标for (let i = 0; i < particlesCount * 3; i++) {positions[i] = (Math.random() - 0.5) * 10; // 生成随机位置
}particlesGeometry.setAttribute("position",new THREE.BufferAttribute(positions, 3)
);// 创建 PointsMaterial 材质const particlesMaterial = new THREE.PointsMaterial({color: 0xffffff, // 白色size: 0.05, // 粒子大小
});// 创建粒子系统const particles = new THREE.Points(particlesGeometry, particlesMaterial);scene.add(particles);

在这里插入图片描述

适用场景:

  • 粒子系统
  • 点云渲染

7. LineBasicMaterial

LineBasicMaterial 用于渲染线条,颜色可以定义,但不受光照影响。

const material = new THREE.LineBasicMaterial({color: 0x00ffff, // 青色
});
const line = new THREE.Line(geometry, material);

在这里插入图片描述

适用场景:

  • 网格线
  • 简单几何边框

8. ShaderMaterial

ShaderMaterial 允许开发者使用自定义的 GLSL 着色器,提供最大的灵活性。通过它,可以实现独特的视觉效果。

const material = new THREE.ShaderMaterial({vertexShader: `void main() {gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);}`,fragmentShader: `void main() {gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); // 红色}`,
});

在这里插入图片描述

适用场景:

  • 高度定制的渲染需求
  • 非传统材质效果

三、材质的关键属性

每种材质都有一些通用属性,以下是常见的关键属性:

1. 颜色(color)

材质的基本颜色,使用十六进制值或 Color 对象。

material.color.set(0xff0000); // 设置为红色;

2. 透明度(opacity 和 transparent)

控制材质是否透明及其透明度。

material.transparent = true;
material.opacity = 0.5; // 半透明

3. 纹理(map)

为材质添加纹理。纹理可以用作颜色贴图、法线贴图、环境贴图等。

const texture = new THREE.TextureLoader().load("path/to/texture.jpg");
material.map = texture;

4. 法线贴图(normalMap)

增加表面细节的纹理,使光影效果更加真实。

material.normalMap = new THREE.TextureLoader().load("path/to/normalMap.jpg");

5. 环境光遮蔽(aoMap)

通过遮挡阴影的纹理增强物体的立体感。


四、材质的高级用法

1. 动态更改材质

你可以在运行时动态修改材质的属性,创造交互效果。

mesh.material.color.set(0x00ff00); // 修改颜色 mesh.material.wireframe = true;   // 启用线框模式

2. 多重材质

一个物体可以使用多种材质,例如为几何体的不同面设置不同的材质。

const materials = [new THREE.MeshBasicMaterial({ color: 0xff0000 }),new THREE.MeshBasicMaterial({ color: 0x00ff00 }),
];
const cube = new THREE.Mesh(geometry, materials);

五、性能优化建议

  1. 减少材质数量:尽量复用材质,避免创建过多的材质实例。
  2. 使用纹理压缩:通过压缩纹理减少显存占用。
  3. 降低分辨率:对于次要物体,使用低分辨率纹理。
  4. 简化光照计算:在性能敏感的应用中,选择 MeshBasicMaterialMeshLambertMaterial

六、总结

Three.js 提供的丰富材质库使得开发者可以创建各种逼真的效果。从简单的 MeshBasicMaterial 到高度自定义的 ShaderMaterial,材质为 3D 场景的构建提供了无限可能。在开发过程中,了解不同材质的特性,合理选择和优化材质,可以显著提升渲染效率和视觉效果。

通过对材质的深刻理解,你将能够充分发挥 Three.js 的潜力,创造令人惊叹的三维体验。

相关文章:

Three.js入门-材质详解,构建视觉真实感的核心

Three.js 材质详解&#xff1a;构建视觉真实感的核心 Three.js 是一个强大的 3D JavaScript 库&#xff0c;它为开发者提供了丰富的工具来创建和渲染逼真的三维场景。在这些工具中&#xff0c;材质是一个非常重要的组成部分。材质定义了物体表面的外观特性&#xff0c;例如颜色…...

GitHub、Google等镜像加速地址收集

GitHub、Google等镜像加速地址收集 摘要 本文用于收集GitHub、Google等镜像/加速地址。 GitHub GitHub加速地址一览 fastgithub Https://www.fastgithub.com/&#xff08;推荐&#xff09; 站源地址缓存github.comwww.fastgithub.com无raw.githubusercontent.com无github.gi…...

五、网络层:控制平面,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

目录 一、导论 二、路由选择算法 2.1 路由&#xff08;route&#xff09;的概念 2.2 网络的图抽象 2.2.1 边和路由的代价 2.2.2 最优化原则 2.3 路由的原则 2.4 路由选择算法的分类 2.5 link state 算法 2.5.1 LS路由工作过程 2.5.2 链路状态路由选择&#xff08;lin…...

Fix the “The repository no longer has a Release file” error on Ubuntu 23.04

背景信息 在Ubuntu 23.04操作系统上执行apt-get update命令更新操作系统时&#xff0c;得到以下错误 登录后复制 # apt-get update Ign:1 http://mirrors.aliyun.com/ubuntu lunar InRelease Ign:2 http://mirrors.aliyun.com/ubuntu lunar-updates InRelease Ign:3 http://mir…...

开源 AI 智能名片 S2B2C 商城小程序对私域流量运营的全方位助力

在当今竞争激烈的商业环境中&#xff0c;私域流量运营已成为企业实现可持续发展和提升竞争力的关键策略之一。开源 AI 智能名片 S2B2C 商城小程序凭借其独特的功能与特性&#xff0c;从多个维度为私域流量运营提供了强有力的支持与推动&#xff0c;以下将详细阐述其在各个方面的…...

Java Exception解决方法

Java中的Exception是所有异常的基类&#xff0c;它指的是程序在执行过程中发生的非严重错误&#xff0c;比如空指针异常、数组越界异常等。 为了解决Java中的Exception&#xff0c;从以下步骤进行排查解决&#xff1a; 阅读错误信息&#xff1a;查看异常的完整堆栈跟踪信息&a…...

HCIA-Access V2.5_2_2_2网络通信基础_IP编址与路由

网络层数据封装 首先IP地址封装在网络层&#xff0c;它用于标识一台网络设备&#xff0c;其中IP地址分为两个部分&#xff0c;网络地址和主机地址&#xff0c;通过我们采用点分十进制的形式进行表示。 IP地址分类 对IP地址而言&#xff0c;它细分为五类&#xff0c;A,B,C,D,E,…...

JeecgBoot passwordChange 任意用户密码重置漏洞复现

0x01 产品简介 Jeecg Boot是一个企业级低代码开发平台,基于前后端分离的架构,融合了SpringBoot、SpringCloud、Ant Design、Vue、Mybatis-plus、Shiro、JWT等多种主流技术,旨在帮助企业快速构建各种应用系统,提高开发效率,降低开发成本。采用最新主流的前后分离框架,使得…...

7-8 整型关键字的散列映射

给定一系列整型关键字和素数 p&#xff0c;用除留余数法定义的散列函数 H(key)key%p 将关键字映射到长度为 p 的散列表中。用线性探测法解决冲突。 输入格式: 输入第一行首先给出两个正整数 n&#xff08;≤1000&#xff09;和 p&#xff08;≥n 的最小素数&#xff09;&…...

谷粒商城—分布式高级①.md

1. ELASTICSEARCH 1、安装elastic search dokcer中安装elastic search (1)下载ealastic search和kibana docker pull elasticsearch:7.6.2 docker pull kibana:7.6.2(2)配置 mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data echo "h…...

MySQL SQL语句性能优化

MySQL SQL语句性能优化指南 一、查询设计优化1. 避免 SELECT *2. 使用 WHERE 进行条件过滤3. 避免在索引列上使用函数和表达式4. 使用 LIMIT 限制返回行数5. 避免使用子查询6. 优化 JOIN 操作7. 避免全表扫描 二、索引优化1. 使用合适的索引2. 覆盖索引3. 索引选择性4. 多列索引…...

【潜意识Java】期末考试可能考的选择题(附带答案解析)

目录 选择题一&#xff1a;Java 数据类型 选择题二&#xff1a;Java 控制结构 选择题三&#xff1a;面向对象编程 选择题四&#xff1a;Java 集合框架 选择题五&#xff1a;Java 异常处理 选择题六&#xff1a;Java 方法 选择题七&#xff1a;Java 流程控制 选择题八&a…...

修炼之道 --- 其一

序言 大家对面试中的面经八股文是怎样的看法呢&#xff0c;从他的名字 八股文 就可以看出来大家可能并不喜欢他&#xff0c;八股文一般是 死板、浮于表面、不重实际 的特点。但是&#xff0c;我们需要通过辩证的角度来看待一个事情&#xff0c;不能单方面来定性&#xff01;  …...

【前端】HTML

目录 一、HTML结构 1.1 HTML标签1.2 HTML文件基本结构1.3 快速生成框架 二、HTML常见标签 2.1 注释标签 !-- –2.2 标题标签 h1到h62.3 段落标签 p2.4 换行标签 br2.5 格式化标签2.6 图片标签 img2.7 超链接标签 a 三、表格标签 3.1 常用标签3.2 合并单元格 四、列表标签五、表…...

LabVIEW实现GPS通信

目录 1、GPS通信原理 2、硬件环境部署 3、程序架构 4、前面板设计 5、程序框图设计 6、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联网系…...

【Python 小课堂】第 2 课 Python 基础知识:语句、常量、变量和注释

第 2 课 基础知识&#xff1a;语句、常量/变量和注释 By Yichen Li 2024/12/14 一、内容简介 在本次课中&#xff0c;介绍Python语句、常量/变量以及代码注释的基本概念&#xff0c;一些详细的概念、扩展及用法等细节&#xff0c;留至后续介绍。 二、Python语句 一般来说&…...

基于STM32设计的工地扬尘与噪音实时监测系统(网页)

一、前言 当前项目使用的相关软件工具、传感器源代码工程已经上传到网盘&#xff08;实时更新项目内容&#xff09;&#xff1a;https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?fromfrom_copylink 1.1 项目开发背景 近年来&#xff0c;随着城市化进程的…...

LLM之RAG实战(五十)| FastAPI:构建基于LLM的WEB接口界面

FastAPI是WEB UI接口&#xff0c;随着LLM的蓬勃发展&#xff0c;FastAPI的生态也迎来了新的机遇。本文将围绕FastAPI、OpenAI的API以及FastCRUD&#xff0c;来创建一个个性化的电子邮件写作助手&#xff0c;以展示如何结合这些技术来构建强大的应用程序。 下面我们开始分步骤操…...

JavaScript 中的 Map方法

JavaScript 中的 Map方法 在 JavaScript 中&#xff0c;Map 是一种用于存储键值对的数据结构&#xff0c;相较于传统的对象&#xff08;Object&#xff09;&#xff0c;Map 提供了更高效的键值对操作方式适合处理需要频繁操作键值对的场景。 1. 创建 Map const map new Map…...

img引入svg如何修改颜色

方法1&#xff1a;通过css中filter:drop-shadow 首先需要一个容纳图标的父盒子(下方实例中的.svg-img)&#xff0c;通过css造一个图标的‘影子’&#xff08;.svg-color中的drop-shadow&#xff09;&#xff0c;然后设置‘影子’的颜色&#xff0c;再把图标本体移出父盒子&…...

自然语言处理基础及应用场景

自然语言处理定义 让计算机理解人所说的文本 语音 Imitation Game 图灵测试 行为主义 鸭子理论 自然语言处理的基本任务 词性标注&#xff1a;区分每个词名词、动词、形容词等词性命名实体的识别&#xff1a;名词的具体指代是哪一类事物共指消解&#xff1a;代词指代的是前面…...

构建centos docker基础镜像

1、介绍 比较老的版本docker镜像&#xff0c;不太好找&#xff0c;可以尝试自己构建 各版本构建基础镜像方法不太一样&#xff0c;方式也不同&#xff0c;自己尝试&#xff0c;本文只介绍了我自己的尝试 2、构建centos5.11 docker镜像 准备iso文件 &#xff08;1&#xff09;安…...

etcd命令大全

默认安装自带etcdctl 命令行客户端&#xff0c;分两个版本ETCDCTL_API2和ETCDCTL_API3&#xff0c;两个版本不一样&#xff0c;操作的数据也不相容。 本文以v3 为例。 使用之前需要先设置&#xff1a;export ETCDCTL_API3。 1 etcd查询集群节点列表及状态 标准输出&#xff1…...

Go有限状态机实现和实战

Go有限状态机实现和实战 有限状态机 什么是状态机 有限状态机&#xff08;Finite State Machine, FSM&#xff09;是一种用于建模系统行为的计算模型&#xff0c;它包含有限数量的状态&#xff0c;并通过事件或条件实现状态之间的转换。FSM的状态数量是有限的&#xff0c;因此称…...

使用torch模拟 BMM int8量化计算。

使用torch模型BMM int8计算。 模拟&#xff1a;BMM->softmax->BMM 计算流程 import torch import numpy as np torch.manual_seed(777) def int8_quantize_per_token(x: torch.Tensor, axis: int -1, attnsFalse):if x.dtype ! torch.float32:x x.type(torch.float32)…...

vue3的watch一次性监听多个值用法

vue3的watch一次性监听多个值 1、监听单个值 watch(() > route.params.keyword, (newValue, oldValue) > {console.log(监听值变化, newVal, oldVal)state.a newValue});2、监听多个值 watch(() > [route.params.id, route.params.keyword], (newValue, oldValue) &g…...

【one-api和ollama结合使用】

将Ollama接入one-api one-api是一个开源AI中间件服务&#xff0c;可以聚合各家大模型API&#xff0c;比如OpenAI、ChatGLM、文心一言等&#xff0c;聚合后提供统一的OpenAI调用方法。举个例子&#xff1a;ChatGLM和文心一言的API调用方法并不相同&#xff0c;one-api可以对其进…...

Oracle PDB的开启和关闭

[生产环境关闭与开启Oracle PDB] 【运维场景】 在运维Oracle PDB的时候经常要开启和关闭PDB&#xff0c;对关闭和开启PDB的操作要非常熟悉。 【操作方法】 1. PDB的打开与关闭 关闭和开启DB的时候要看DB的警告日志&#xff0c;日志位置&#xff08;在Oracle用户下查看&…...

十一、动态构建UI元素

装饰器Builder 装饰器BuilderParam <font style"color:rgba(0, 0, 0, 0.9);">BuilderParam</font> 该装饰器用于声明任意UI描述的一个元素&#xff0c;类似slot占位符。 链接 简而言之&#xff1a;就是自定义组件允许外部传递 UI // SonCom 的实现略…...

智能时代的基石:神经网络

智能时代的基石&#xff1a;神经网络 第一节&#xff1a;神经网络简介 课程目标 本节课程旨在全面介绍神经网络的基本概念、结构以及其在历史发展中的重要里程碑。通过深入理解神经网络的工作原理和演变过程&#xff0c;学员将能够掌握神经网络在现实世界中的多种应用&#…...

VScode配置GIT

在Visual Studio Code&#xff08;VSCode&#xff09;中检测不到已安装的Git可以通过以下步骤来解决‌&#xff1a; ‌确认Git是否正确安装‌&#xff1a;首先&#xff0c;确保在计算机上正确安装了Git。可以通过打开命令行窗口并输入git --version来检查是否能够显示Git的版本…...

【CSS】css 如何实现固定宽高比

今天和同事讨论这个问题&#xff0c;一时间还想不到了&#xff0c;于是学习了下&#xff0c;就顺便当个记录吧 要在CSS中实现固定宽高比&#xff0c;有两种主要的方法可以选择。一种是使用新的aspect-ratio属性&#xff0c;另一种是利用padding技巧。随着现代浏览器对aspect-ra…...

使用webrtc-streamer查看实时监控

摄像头配置&#xff08;海康摄像头为例&#xff09; 摄像头视频编码应改成H264格式 webrtc-streamer下载 webrtc-streamer下载地址 下载后解压出来双击运行&#xff0c;端口默认8000 VUE2项目引入文件 在项目静态文件“public”中需引入两个js文件“webrtcstreamer.js”与“…...

ansible部署nginx:1个简单的playbook脚本

文章目录 hosts--ventoryroles执行命令 使用ansible向3台centos7服务器上安装nginx hosts–ventory [rootstand playhook1]# cat /root/HOSTS # /root/HOSTS [webservers] 192.168.196.111 ansible_ssh_passpassword 192.168.196.112 ansible_ssh_passpassword 192.168.196.1…...

Ubuntu安装Gitlab详细图文教程

1、环境准备 1.1、Ubuntu环境 Ubuntu24.04Sever版安装教程 1.2、更新系统 sudo apt update -y sudo apt-get update sudo apt-get upgrade 2、安装Nginx 2.1 安装nginx # 安装 apt install nginx -y 2.2 修改nginx配置⽂件 # 修改nginx配置 vim /etc/nginx/si…...

前端面试准备问题2

1.防抖和节流分别是什么&#xff0c;应用场景 防抖&#xff1a;在事件被触发后&#xff0c;只有在指定的延迟时间内没有再次触发&#xff0c;才执行事件处理函数。 在我的理解中&#xff0c;简单的说就是在一个指定的时间内&#xff0c;仅触发一次&#xff0c;如果有多次重复触…...

uni-app之web-view组件 postMessage 通信【跨端开发系列】

&#x1f517; uniapp 跨端开发系列文章&#xff1a;&#x1f380;&#x1f380;&#x1f380; uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…...

IntelliJ IDEA 使用技巧与插件推荐

目录 常用使用技巧 1. 使用快捷键提升开发效率 2. 多光标编辑 3. 代码自动补全 4. 使用 Find Action 快速执行操作 5. 集成版本控制系统&#xff08;VCS&#xff09; 6. 快速查看代码文档 推荐插件 1. Lombok Plugin 2. Rainbow Brackets 3. Key Promoter X 4. Chec…...

zookeeper基础命令详解

zookeeper基础命令详解目录 文章目录 zookeeper基础命令详解目录一、列出所有基础命令 一、列出所有基础命令 先启动一个zookeeper客户端连接zookeeper&#xff0c;如果还没有启动zookeeper集群的参考本文启动之后再做后续操作。 https://blog.csdn.net/weixin_42924400/artic…...

2025周易算命网站搭建详细方法+源码选择php环境的配置

以下是一个详细的搭建教程&#xff0c;包括网站分类、环境配置、程序设计和功能实现。 1. 环境准备 1.1 服务器选择 操作系统: Linux&#xff08;推荐使用Ubuntu或CentOS&#xff09;Web服务器: Nginx数据库: MySQLPHP版本: 7.4.x&#xff08;确保小于8.0&#xff09; 1.2 安…...

16:00面试,16:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…...

《杨辉三角》

题目描述 给出 n(1≤n≤20)n(1≤n≤20)&#xff0c;输出杨辉三角的前 nn 行。 如果你不知道什么是杨辉三角&#xff0c;可以观察样例找找规律。 输入格式 无 输出格式 无 输入输出样例 输入 #1复制 6 输出 #1复制 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 C语言…...

2024年03月中国电子学会青少年软件编程(Python)等级考试试卷(五级)答案 + 解析

青少年软件编程(Python)等级考试试卷(五级) 分数:100 题数:38 一、单选题(共25题,共50分) 1. 以下代码的输出结果是?( ) nums = list(range(100, 201)) print...

【游戏设计原理】7 - 加德纳的多元智能理论

虽然多元智能理论是对认知方式的分类&#xff0c;但它也可以为游戏设计提供丰富的思路和策略&#xff0c;帮助设计师创建更具吸引力、包容性和多样性的游戏。通过理解不同玩家的认知方式和优势&#xff0c;我们可以更精准地设计游戏的元素和玩法&#xff0c;使其能够吸引广泛的…...

Jackson @JsonProperty 注解

1. 概述 Jackson 是一个流行的Java库&#xff0c;用于将Java对象转换为JSON格式以及从JSON反序列化回Java对象。一种常见的需求是在序列化为JSON或从JSON反序列化时自定义字段的命名。Jackson 的 JsonProperty 注解正好满足了这一需求。 JsonProperty 注解概览 JsonProperty…...

【数据结构——栈与队列】链栈的基本运算(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;编写一个程序实现链栈的基本运算。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 初始化栈、销毁栈、判断栈是否为空、进栈、出栈、取栈…...

数据库乐观锁和悲观锁、redis分布式锁使用场景

前言 最近发现我们同事&#xff0c;但凡需要加锁的地方都用的是分布式锁。而且我们的后台系统&#xff0c;并没有什么并发量&#xff0c;而且还是单体应用。我真的有点怀疑我的同事不太清楚数据乐观锁、悲观锁和redis分布式的使用场景。 请今天就说一下各种锁的应用场景吧。 …...

React的状态管理库-Redux

核心思想&#xff1a;单一数据源、状态是只读的、以及使用纯函数更新状态。 组成部分 Store&#xff08;存储&#xff09; 应用的唯一状态容器&#xff0c;存储整个应用的状态树,使用 createStore() 创建。 getState()&#xff1a;获取当前状态。dispatch(action)&#xff…...

《自制编译器》--青木峰郎 -读书笔记 编译hello

在该书刚开始编译hello.cb时就遇到了问题。 本人用的是wsl&#xff0c;环境如下&#xff0c; 由于是64位&#xff0c;因此根据书中的提示&#xff0c;从git上下载了64位的cb编译器 cbc-64bit 问题一: 通过如下命令编译时,总是报错。 cbc -Wa,"--32" -Wl,"-…...

XSS(跨站攻击)

XSS漏洞&#xff08;跨站脚本&#xff09; 1.XSS 漏洞简介 ​ XSS又叫CSS&#xff08;Cross Site Script&#xff09;跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中Web里面的Script代码会被执行&#xff0c;从…...