三分钟深入了解threejs的常见面试知识点

前序

由于金九银十准备到了。而且自己也有threejs的项目,但是threejs的面试知识点了解的比较少,然后就去学习了一些面试常见知识点,以备不时之需,用于记录的同时也可以通过了解这些知识点同时也能提高对threejs更多的认知。虽然没什么代码,但是里面的知识点还是挺多有助于帮助自己巩固知识和面试的时候怎么流畅的去表达这些知识点。

基础知识

Three.js 是什么,以及它的主要用途是什么?

Three.js 是一个基于 WebGL 的 JavaScript 3D 渲染库,用于创建和渲染交互式的三维图形应用程序,如游戏、模拟和可视化。

请解释 Three.js 的基本架构和组件。

Three.js 架构包括场景(Scene)、相机(Camera)、渲染器(Renderer)、材质(Material)和几何体(Geometry)。这些组件协同工作以创建和渲染三维场景。

如何在网页中引入 Three.js 库?

你可以通过在 HTML 文件中添加 <script> 标签引入 Three.js 库,或使用 npm 或 yarn 安装 Three.js 并将其导入到你的 JavaScript 项目中。

Three.js 中的场景(Scene)、相机(Camera)和渲染器(Renderer)是什么,它们的作用是什么?

  • 场景是 Three.js 中包含所有三维对象的容器。
  • 相机定义了观察场景的视点和投影方式。
  • 渲染器将场景和相机的内容绘制到画布上,以呈现最终的图像。

请解释什么是材质(Material)和几何体(Geometry)以及它们在 Three.js 中的作用。

  • 材质定义了物体的外观和如何反射光线。
  • 几何体定义了物体的形状和结构。

如何创建一个简单的 Three.js 场景?

创建场景、相机和渲染器,然后将相机添加到场景中。创建几何体和材质,将它们组合成网格,然后将网格添加到场景中。最后,使用渲染器将场景渲染到画布上。

Three.js 中的光源类型有哪些,它们之间有什么区别?

  1. AmbientLight(环境光)

    • THREE.AmbientLight 类表示环境光。它是一种均匀分布的光,不具有特定的方向和位置。环境光对场景中的所有物体都产生相同的光照效果,不会产生阴影。它用于模拟全局光照,使场景中的物体不会完全黑暗。
  2. DirectionalLight(平行光)

    • THREE.DirectionalLight 类表示平行光,也称为太阳光。它具有平行的光线,可以模拟太阳光照射。平行光有方向,但不会随距离衰减,因此在场景中的物体上产生相似的阴影效果。通常用于模拟日光。
  3. PointLight(点光源)

    • THREE.PointLight 类表示点光源,它发射光线向各个方向辐射。点光源通常位于场景中的某个位置,可以产生逐渐减弱的光照效果,类似于灯泡的光。点光源会在场景中创建类似球形的光照区域,可以产生柔和的阴影。
  4. SpotLight(聚光灯)

    • THREE.SpotLight 类表示聚光灯,它发射锥形的光束,类似于手电筒的光束。聚光灯有位置和方向,可以模拟聚光效果。你可以调整聚光灯的光锥角度和范围。它也可以产生阴影。
  5. HemisphereLight(半球光)

    • THREE.HemisphereLight 类表示半球光,它模拟来自天空和地面的光线。半球光用于模拟室外场景,通常与环境贴图一起使用。它可以产生柔和的全局光照,但不会产生硬阴影。
  6. RectAreaLight(矩形区域光)

    • THREE.RectAreaLight 类表示矩形区域光,它是一种矩形形状的光源,可以用于模拟发光的平面。它通常用于模拟屏幕或窗户上的发光区域。

这些不同类型的光源用于模拟各种光照效果,根据场景的需要选择合适的光源类型非常重要。注意,不同的光源类型在性能上有差异,因此要根据场景的复杂性和性能需求来选择光源类型。此外,还可以组合多种光源类型来实现更复杂的光照效果。

如何加载和显示 3D 模型文件(例如 .obj、.fbx、.gltf)?

你可以使用 Three.js 的加载器(Loader)来加载不同格式的模型文件,然后创建网格并将其添加到场景中。

Three.js 中如何实现交互性,例如鼠标点击或拖动对象?

什么是纹理(Texture),如何在 Three.js 中应用纹理?

纹理是一种图像,可应用于材质以改变物体的外观。在 Three.js 中,你可以使用 THREE.Texture 类加载和应用纹理。

如何实现相机控制和场景导航?

Three.js 提供了多种相机控制器(例如 OrbitControls、FlyControls),你可以将其添加到你的相机上,以实现用户控制相机的旋转、缩放和平移,从而导航场景。

Three.js 中如何实现动画,包括基于时间的动画和骨骼动画?

你可以使用 requestAnimationFrameThree.js 的动画循环来创建基于时间的动画。骨骼动画则涉及骨骼和动画混合器,用于控制模型的骨骼动作。

什么是渲染循环(Render Loop)?如何优化渲染性能?

渲染循环是一个持续的循环,用于更新和渲染 Three.js 场景。为了优化性能,可以使用 Frustum Culling、LOD 和合并几何体等技术来减少不必要的渲染操作。

Three.js 中的后期处理效果是什么,如何应用它们?

后期处理效果是在渲染场景后应用的图像效果,如模糊、色彩校正等。你可以使用 THREE.EffectComposer 来添加和配置后期处理效果。

如何在 Three.js 中实现阴影效果?

Three.js 支持阴影投射和接收。要启用阴影,你需要设置光源为投射阴影,并为接收阴影的物体设置 castShadowreceiveShadow 属性。

Three.js 中的物理引擎有哪些,如何集成它们?

Three.js 可以与物理引擎集成,例如 Cannon.js 或 Ammo.js。你需要加载物理引擎库,并将模型的物理属性和碰撞体积配置正确。

什么是 WebGL,它与 Three.js 之间的关系是什么?

WebGL 是一种用于在浏览器中渲染 2D 和 3D 图形的低级 JavaScript API。Three.js 则是建立在 WebGL 之上的高级库,简化了在 WebGL 上进行三维图形编程的复杂性。

什么是网格(Mesh),如何创建和修改网格对象?

网格是几何体和材质的结合体,它决定了一个物体的形状和外观。你可以通过创建一个 THREE.Mesh 实例来创建网格,然后可以修改网格的属性来调整它的外观和行为。

Three.js 中的坐标系是怎样的,如何进行坐标变换?

Three.js 使用右手坐标系,其中 x 轴指向右侧,y 轴指向上方,z 轴指向观察者。你可以使用矩阵变换来进行坐标变换,例如平移、旋转和缩放。

如何实现对象的运动和变换,例如平移、旋转和缩放?

你可以使用对象的变换属性,如 positionrotationscale,来实现对象的平移、旋转和缩放。这些属性允许你在三维空间中调整对象的位置、方向和大小。

什么是 raycasting,如何在 Three.js 中使用它?

Raycasting 是用于检测光线与场景中对象的交点的技术。在 Three.js 中,你可以使用 THREE.Raycaster 类来执行 raycasting 操作,以确定鼠标点击的物体或光线与物体的交点。

请解释 Three.js 中的物体层级(Object Hierarchy)是如何工作的。

物体层级是 Three.js 中对象的父子关系。通过将一个对象添加为另一个对象的子对象,你可以构建复杂的层次结构,使得对象之间可以继承和共享变换等属性。

如何处理和加载不同格式的纹理映射(Texture Mapping)?

Three.js 支持多种纹理映射,包括颜色纹理、法线纹理、置换纹理等。你可以使用 THREE.TextureLoader 类来加载这些纹理,并将它们应用于材质。

Three.js 中如何创建自定义着色器和材质?

你可以使用 THREE.ShaderMaterial 类来创建自定义着色器和材质。这允许你编写自己的顶点着色器和片段着色器,以实现高度定制化的渲染效果。

什么是法线贴图(Normal Mapping)和环境贴图(Environment Mapping)?

法线贴图是一种用于模拟高细节表面的技术,环境贴图则模拟了物体周围的环境光照。这些技术可以增加渲染物体的细节和真实感。

如何实现渐变背景或天空盒(Skybox)?

渐变背景可以通过设置场景的背景颜色实现,而天空盒则需要加载一个立方体贴图作为背景。你可以使用 THREE.CubeTextureLoader 来加载天空盒贴图。

Three.js 中如何实现粒子系统(Particle System)?

你可以使用 THREE.PointsTHREE.Sprite 来创建粒子系统。这些对象可以表示成千上万的小粒子,并使用自定义材质和纹理来呈现。

什么是卡通渲染(Toon Shading),如何实现它?

卡通渲染是一种图像渲染风格,通常用于模拟卡通或手绘风格的渲染。在 Three.js 中,你可以通过编写自定义的着色器来实现卡通渲染效果,例如通过使用阶梯化的光照来模拟阴影。

如何在 Three.js 中处理不同的设备和屏幕尺寸(响应式设计)?

响应式设计可以通过监听窗口大小变化,并根据不同的屏幕尺寸和设备类型来调整渲染参数、相机视锥体(Frustum)和UI布局等方面进行处理。

请解释 WebGL 渲染流水线(Rendering Pipeline)

WebGL 渲染流水线是一系列的步骤,用于将三维场景转化为最终的图像。这包括几何处理、光照计算、着色器执行和像素绘制等过程

Three.js 中的事件处理是如何工作的,如何处理用户输入?

Three.js 提供了鼠标和触摸事件监听器,你可以使用它们来捕捉用户的输入,例如点击、拖动和缩放等操作。通过事件处理,你可以实现交互性。

Three.js 中的 post-processing 效果是如何实现的?

后期处理效果是通过创建一个后期处理通道(Post-processing Pass)并将其添加到渲染循环中来实现的。这些通道可以应用各种效果,例如模糊、颜色校正和光照效果。

如何创建一个可嵌入到网页中的 Three.js 应用程序?

模型导入器用于加载外部 3D 模型文件到 Three.js 中。Three.js 支持多种模型导入器,如 THREE.OBJLoaderTHREE.FBXLoaderTHREE.GLTFLoader

你可以创建一个 HTML 文件,引入 Three.js 库和你的 JavaScript 代码,然后在 HTML 中创建一个画布(Canvas)元素,将 Three.js 渲染器连接到该画布上。

什么是模型导入器(Model Loader)?Three.js 中有哪些常用的模型导入器?

模型导入器用于加载外部 3D 模型文件到 Three.js 中。Three.js 支持多种模型导入器,如 THREE.OBJLoaderTHREE.FBXLoaderTHREE.GLTFLoader

如何实现阻尼效果(Damping)以平滑对象的运动?

  • 阻尼效果可以通过逐渐减少物体的速度来实现。在 Three.js 中,你可以使用线性插值(Lerp)或指数衰减来实现阻尼效果。

Three.js 中的对象克隆(Clone)和实例化(Instance)有什么区别?

克隆是创建一个对象的完全副本,而实例化是创建一个共享几何体和材质的新对象。克隆对象具有独立的属性,而实例化对象与原始对象共享属性,更适合大规模渲染。

Three.js 中如何实现自定义的精确碰撞检测?

  1. 创建几何体:你需要创建用于检测碰撞的几何体。这可以是简单的形状,如立方体(BoxGeometry)或球体(SphereGeometry),或者是自定义的几何体。

  2. 创建物体:将几何体包装在物体(Mesh)中,同时为物体创建一个材质,以便渲染或进行其他操作。

  3. 更新物体位置:在每个渲染循环中,确保更新物体的位置和变换,以反映物体的当前状态。

  4. 碰撞检测:执行碰撞检测的关键步骤。这通常涉及两个几何体之间的交叉检测,以确定它们是否相交。以下是一些常见的碰撞检测方法:

    • 边界框碰撞检测:这是最简单的碰撞检测方法,它涉及比较两个物体的边界框(Bounding Boxes)是否相交。你可以使用 Box3 类来表示边界框,并使用 intersectsBox() 方法来检测碰撞。
    • 球体碰撞检测:如果你的物体是球体或包含球体的几何体,你可以使用球体碰撞检测,使用 Sphere 类和 intersectsSphere() 方法。
    • 射线碰撞检测:这是一种更精确的方法,允许你发射射线并检测射线是否与物体相交。你可以使用 Raycaster 类来执行射线碰撞检测。
  5. 处理碰撞:一旦检测到碰撞,你可以执行相应的操作,例如停止物体的运动、改变物体的属性等。

下面是一个简单的示例,演示了基于射线碰撞检测的碰撞处理:

// 创建一个射线
const raycaster = new THREE.Raycaster();
const intersection = new THREE.Vector3();// 在渲染循环中更新射线的位置
function updateRaycasterPosition() {// 更新射线的起点,例如相机位置raycaster.ray.origin.copy(camera.position);// 更新射线的方向,例如鼠标点击位置raycaster.ray.direction.set(0, 0, -1).applyQuaternion(camera.quaternion);
}// 在碰撞检测的函数中
function checkCollision() {// 更新射线的位置updateRaycasterPosition();// 检测射线与物体的交点const intersects = raycaster.intersectObjects(objectsToCheck);if (intersects.length > 0) {// 发生碰撞,执行处理逻辑const hitObject = intersects[0].object;console.log("Collision with object: ", hitObject);// 这里可以执行碰撞后的操作}
}// 在渲染循环中调用碰撞检测函数
function animate() {// 更新场景和相机// ...// 执行碰撞检测checkCollision();// 渲染场景renderer.render(scene, camera);// 继续下一帧动画requestAnimationFrame(animate);
}

使用 Raycaster 类来发射射线,然后检测射线与场景中的对象是否相交。如果相交,我们可以执行相应的碰撞处理逻辑。请注意,你需要在渲染循环中不断更新射线的位置,以保持碰撞检测的准确性。

如何在 Three.js 中创建自定义几何体(Custom Geometry)?

创建几何体的顶点和面:自定义几何体的第一步是定义其顶点和面。你需要创建一个顶点数组和一个面(三角形)数组,以描述几何体的形状。每个面由三个顶点组成。

const geometry = new THREE.Geometry();// 添加顶点
const vertex1 = new THREE.Vector3(0, 0, 0);
const vertex2 = new THREE.Vector3(1, 0, 0);
const vertex3 = new THREE.Vector3(0, 1, 0);
geometry.vertices.push(vertex1, vertex2, vertex3);// 添加面
const face = new THREE.Face3(0, 1, 2);
geometry.faces.push(face);

计算法向量:为了让渲染器知道如何着色几何体,需要计算每个面的法向量(法线)。法向量用于光照计算和阴影渲染。你可以使用 computeFaceNormals() 方法计算法向量。

geometry.computeFaceNormals();

创建材质:为了给自定义几何体赋予外观,你需要创建一个材质。材质定义了几何体的颜色、纹理、光照和材质属性。

const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });

创建 Mesh 对象:将自定义几何体和材质包装在 Mesh 对象中,以便将其添加到场景中并进行渲染。

const customMesh = new THREE.Mesh(geometry, material);
scene.add(customMesh);

渲染场景:在渲染循环中,确保你的自定义几何体被渲染到画布上。

function animate() {// 更新场景和相机// ...// 渲染场景renderer.render(scene, camera);// 继续下一帧动画requestAnimationFrame(animate);
}// 启动渲染循环
animate();

创建了一个自定义几何体并将其添加到 Three.js 场景中。你可以根据需要自定义几何体的形状和材质,以满足项目的要求。

优化

什么是 LOD(Level of Detail),如何在 Three.js 中使用它?

LOD 是一种用于优化性能的技术,它根据物体距离相机的远近来加载不同级别的细节。在 Three.js 中,你可以使用 THREE.LOD 类来实现 LOD 效果。

请分享一个你在 Three.js 中的项目经验,描述你如何解决其中的挑战。

举例子:怎么去优化你的项目性能,总所周知,模型对浏览器很耗费性能,例如我是通过gltf-pipeline技术去压缩模型进行一个优化

Three.js 中的性能优化技巧有哪些?

  1. 合并几何体(Geometry Merge) :如果你有多个相似的物体,可以将它们的几何体合并成一个,以减少渲染调用的数量。这可以通过 BufferGeometry 来实现。
  2. 使用纹理集合(Texture Atlas) :将多个小纹理图像合并成一个大的纹理图集,减少纹理切换和内存占用。
  3. 减少光源数量:光源是渲染成本较高的因素之一。尽量减少不必要的光源,使用平行光或环境光来模拟光照效果。
  4. 使用 LOD(Level of Detail) :LOD 技术根据物体距离相机的远近,加载不同级别的细节模型。这有助于减少物体的多边形数量。
  5. 开启硬件加速:确保浏览器启用了硬件加速,以充分利用 GPU 渲染。
  6. 使用 Web Workers:将一些计算密集型任务放在 Web Workers 中,以防止阻塞主线程。
  7. 使用 Occlusion Culling:当物体被遮挡时,不需要渲染它们。使用视锥体剔除和遮挡剔除技术来提高渲染效率。
  8. 纹理压缩:使用纹理压缩格式,如 DXT、ETC 或 PVRTC,以减少纹理内存占用。
  9. 移动端优化:在移动设备上,要特别小心性能。使用适当的分辨率、减少光源和阴影,以提高性能。
  10. 事件处理的最小化:不要在每一帧都附加事件监听器,只在需要时附加。事件处理可能会引入性能开销。
  11. 使用 requestAnimationFrame:使用 requestAnimationFrame 来控制渲染循环,以确保在性能允许的情况下渲染。
  12. 使用外部模型格式:如果可能的话,使用 GLTF 格式的模型,因为它是 Three.js 中性能较高的模型格式。
  13. 内存管理:当你不再需要物体或纹理时,记得手动释放它们的内存资源,以避免内存泄漏。
  14. 渲染器设置:在创建渲染器时,选择合适的渲染器设置,如 antialiasing(抗锯齿)和 shadows(阴影),以平衡性能和图形质量。
  15. 使用 GPU 功能:尽量使用 GPU 进行计算,例如使用着色器来执行复杂的渲染操作。
  16. 避免频繁的渲染大小变化:频繁改变渲染画布的大小可能会导致性能下降,尽量避免这种情况。
  17. 压缩和合并着色器:将着色器代码压缩和合并,以减少 HTTP 请求和提高加载速度。
  18. 定期检查性能:使用浏览器的性能分析工具(例如 Chrome 的开发者工具)来检查性能瓶颈,并优化应用。
  19. 控制粒子数量:如果你使用粒子系统,确保粒子数量不会过多,以避免性能下降。
  20. 测试不同设备:在不同设备和浏览器上测试你的应用,以确保它在各种环境中都能正常运行。

工具

有没有使用过 Three.js 的拓展库或插件,例如 Cannon.js、Tween.js 等?

Three.js 生态系统有许多有用的拓展库和插件,例如 Cannon.js 用于物理模拟,Tween.js 用于动画。你可以根据项目需求来集成这些库。

Three.js 中的虚拟现实(VR)和增强现实(AR)有哪些库和工具支持?

Three.js 可以与 WebXR API 集成,用于创建虚拟现实和增强现实应用。此外,还有一些第三方库,如 A-Frame,用于更轻松地创建 VR 和 AR 内容。

什么是物理引擎插件,如何在 Three.js 中使用它们?

物理引擎插件用于模拟物理行为,如碰撞、重力等。在 Three.js 中,你可以使用像 Cannon.js、Ammo.js 或 AmmoPlus 这样的物理引擎库,将其集成到你的项目中以实现物理模拟。

实现场景

Three.js 中的粒子系统是如何工作的,有哪些应用场景?

粒子系统是通过大量的小粒子来模拟效果,如火花、雨、雪等。在 Three.js 中,你可以使用 THREE.PointsTHREE.Sprite 来创建粒子系统。

如何实现镜面反射和折射效果?

镜面反射和折射效果通常通过使用立方体贴图和反射向量来实现。Three.js 提供了 THREE.CubeCamera 来捕获环境贴图,以实现镜面反射。

Three.js 中如何实现立体声音效果?

Three.js 支持音频处理,你可以使用 THREE.AudioListenerTHREE.PositionalAudio 等来实现立体声音效果,根据音源位置和听众位置来计算音频效果。

如何在 Three.js 中加载和播放视频?

你可以使用 HTML5 <video> 元素或 Three.js 的 THREE.VideoTexture 类来加载和播放视频,然后将视频纹理应用到材质上。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Druid配置类、Dubbo配置类、Captcha配置类、Redis配置类、RestTemplate配置类

DruidConfig配置类package com.xdclass.app.config;import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.springframework.beans.factory.annotation.V…

Nodejs+Typescript+Eslint+Prettier+Husky项目构建

NodejsTypescriptEslintPrettierHusky项目构建 准备工作初始化项目Eslint安装和配置Prettier安装和配置在Eslint中使用Prettier插件Husky安装和配置修改tsconfig.json启用表示src目录 修改package.json设置vscode调试 仓库地址 准备工作 确保已经安装了git以及Node.js和npm&a…

docker高级(redis集群三主三从)

1. 新建6个docker容器redis实例 docker run -d --name redis-node-1 --net host --privilegedtrue -v /redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381docker run -d --name redis-node-2 --net host --privilegedtrue -v /…

在 Windows 下使用 conda 的一些注意点

之前一直使用 MacOS 或者 Ubuntu 作为开发环境&#xff0c;最近因为某些特殊原因需要转为使用 Window 作为开发环境。遇到的第一个问题就是不同开发工具的多环境管理。本文是关于 Windows 下使用 conda 的一些记录&#xff0c;关于如何在 Linux 做多环境管理&#xff0c;可以参…

Linux驱动开发:技术、实践与Linux的历史

一、引言 Linux&#xff0c;这个开源的操作系统&#xff0c;已经在全球范围内赢得了开发者和企业的广泛支持。它的强大之处在于其内核以及无数的驱动程序&#xff0c;这些驱动程序使得各种硬件设备可以在Linux操作系统上运行。本篇文章将深入探讨Linux驱动开发&#xff0c;包括…

JVM 访问对象的两种方式

Java 程序会通过栈上的 reference 数据来操作堆上的具体对象。由于 reference 类型在《Java 虚拟机规范》里面只规定了它是一个指向对象的引用&#xff0c;并没有定义这个引用应该通过什么方式去定位、访问到堆中对象的具体位置&#xff0c;所以对象访问方式也是由虚拟机实现而…

酒店资产如何管理提升资产利用效率

酒店资产管理系统是一种专门为酒店行业设计的管理软件&#xff0c;可以帮助酒店实现资产的全生命周期管理。一个好的酒店资产管理系统应该具备以下功能&#xff1a;  资产登记&#xff1a;可以对酒店的各种资产进行登记&#xff0c;包括房间、家具、设备等&#xff0c;记录资…

EasyExcel+POI制作带有有效性校验及下拉联动的Excel模板

文章目录 1.背景2.实现功能的Excel特性2.1.特性介绍2.2.下拉框联动2.3.单元格自动匹配Id2.4.错误提示 3.代码实现3.1.基础流程代码3.2.名称管理器配置3.3.有效性配置3.4.函数填充3.5.其他补充 4.总结 1.背景 最近在做一个CRM系统的人员销售目标导入的相关需求&#xff0c;需要…

初试Eureka注册中心

Eureka是spring cloud中的一个负责服务注册与发现的组件。遵循着CAP理论中的A(可用性)P(分区容错性)。一个Eureka中分为eureka server和eureka client。其中eureka server是作为服务的注册与发现中心。 搭建eureka服务 引入eureka依赖 引入SpringCloud为eureka提供的starter依…

Day48|leetcode 198.打家劫舍、213.打家劫舍II、打家劫舍|||

leetcode 198.打家劫舍 题目链接&#xff1a;198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 视频链接&#xff1a;动态规划&#xff0c;偷不偷这个房间呢&#xff1f;| LeetCode&#xff1a;198.打家劫舍_哔哩哔哩_bilibili 题目概述 你是一个专业的小偷&#xff0c;…

最小化安装移动云大云操作系统--BCLinux-for-Euler-22.10-everything-x86_64-230316版

CentOS 结束技术支持&#xff0c;转为RHEL的前置stream版本后&#xff0c;国内开源Linux服务器OS生态转向了开源龙蜥和开源欧拉两大开源社区&#xff0c;对应衍生出了一系列商用Linux服务器系统。BCLinux-for-Euler-22.10是中国移动基于开源欧拉操作系统22.03社区版本深度定制的…

【微服务】06-安全问题

文章目录 1.反跨站请求伪造1.1 攻击过程1.2 攻击核心1.3 如何防御1.4 使用AntiforgeryToken机制来防御用到的类 2. 防开发重定向共计2.1 攻击过程2.2 攻击核心2.3 防范措施 3.防跨站脚本3.1 攻击过程3.2 防范措施 4.跨域请求4.1 同源与跨域4.2 CORS过程4.2 CORS是什么4.3 CORS请…

perl send HTTP Request

perl send HTTP Request 使用Perl进行发送HttP请求 use LWP::UserAgent; use HTTP::Request; use HTTP::Headers; use JSON::PP;my $test_url "htttp://127.0.0.1:8080/update/";sub sendHttp{my $user_agent LWP::UserAgent->new(timeout>60);my ($url, $…

<C++> SSE指令集

SSE指令集 include库 #include <mmintrin.h> //MMX #include <xmmintrin.h> //SSE(include mmintrin.h) #include <emmintrin.h> //SSE2(include xmmintrin.h) #include <pmmintrin.h> //SSE3(include emmintrin.h) #include <tmmintrin.h> /…

Android安卓增加应用读写权限

Android安卓增加读写权限 当在你的 Android 应用中需要访问设备上的敏感数据、执行危险操作或与设备资源交互时&#xff0c;你需要在应用清单文件中声明权限&#xff0c;以及在运行时请求并处理这些权限。以下是详细的说明&#xff1a; 1. 在清单文件中声明权限&#xff1a; …

Python 各种格式文件转换

Python 各种格式文件转换 txt文本文件csv文件xml文件html文件json文件yaml文件properties文件ini/cfg文件xml文件 一、CSV 写入csv文件 import csv villains [[Doctor, No],[Rosa, Klebb],[Mister, Big],[Auric, Goldfinger],[Ernst, Blofeld] ] with open(villains, wt) …

Zabbix 5.0 媒体介质 邮箱配置例子

QQ企业邮箱 参考&#xff1a;zabbix 腾讯企业邮箱配置图_harveymomo的博客-CSDN博客

Linux下的系统编程——vim/gcc编辑(二)

前言&#xff1a; 在Linux操作系统之中有很多使用的工具&#xff0c;我们可以用vim来进行程序的编写&#xff0c;然后用gcc来生成可执行文件&#xff0c;最终运行程序。下面就让我们一起了解一下vim和gcc吧 目录 一、vim编辑 1.vim的三种工作模式 2.基本操作之跳转字符 &a…

代理模式之静态代理

代理模式是一种常见的设计模式&#xff0c;它允许一个对象&#xff08;代理对象&#xff09;代表另一个对象&#xff08;真实对象&#xff09;进行操作。在软件开发中&#xff0c;代理模式被广泛应用于各种场景&#xff0c;例如网络请求的代理、权限控制的代理等。 静态代理是…

无法正常访问服务器

网络原因&#xff0c;本地网络&#xff1a;解决办法&#xff1a;检查本地网络是否正常&#xff0c;访问外网是否流畅。机房网络&#xff1a;通过路由追踪查看是否中间有 节点不通&#xff0c;确定是线路出现丢包。 远程连接&#xff0c;检查远程连接是否启用以及远程计算机上的…