ES6 新特性,优势和用法?

news2025/2/25 0:56:56

ES6 新特性,优势和用法?

ES6(ECMAScript 2015)引入了许多新特性,这些特性让 JavaScript 变得更加强大、简洁和易于使用。下面为你详细介绍一些常见的 ES6 新特性、它们的优势以及用法。

1. 块级作用域:letconst

特性介绍

在 ES6 之前,JavaScript 只有全局作用域和函数作用域,使用 var 声明变量时可能会导致变量提升和作用域混乱的问题。letconst 用于声明块级作用域的变量,let 声明的变量可以重新赋值,而 const 声明的常量一旦赋值就不能再重新赋值(对于引用类型,虽然不能重新赋值,但可以修改其内部属性)。

优势
  • 避免变量提升带来的问题,使代码逻辑更加清晰。
  • 防止变量在不期望的作用域内被修改。
代码示例
// 使用 var 声明变量,存在变量提升问题
function varExample() {
    if (true) {
        var x = 10;
    }
    console.log(x); // 输出 10,因为 var 声明的变量会提升到函数作用域顶部
}
varExample();

// 使用 let 声明变量,具有块级作用域
function letExample() {
    if (true) {
        let y = 20;
    }
    // console.log(y); // 报错,y 只在 if 块级作用域内有效
}
letExample();

// 使用 const 声明常量
function constExample() {
    const PI = 3.14;
    // PI = 3.1415; // 报错,常量不能重新赋值

    const obj = { name: 'John' };
    obj.name = 'Jane'; // 可以修改引用类型的内部属性
    console.log(obj.name); // 输出 Jane
}
constExample();

2. 箭头函数

特性介绍

箭头函数是 ES6 中引入的一种简洁的函数定义方式,它使用箭头 => 来定义函数。箭头函数没有自己的 thisargumentssupernew.target,它的 this 值继承自外层函数。

优势
  • 语法简洁,减少代码量。
  • 解决了 this 指向问题,避免了使用 that = this.bind(this) 等方式。
代码示例
// 传统函数定义
function add(a, b) {
    return a + b;
}
console.log(add(3, 5)); // 输出 8

// 箭头函数定义
const addArrow = (a, b) => a + b;
console.log(addArrow(3, 5)); // 输出 8

// 箭头函数的 this 指向问题
const person = {
    name: 'John',
    sayHello: function() {
        // 传统函数的 this 指向 person 对象
        console.log(`Hello, my name is ${this.name}`);
        setTimeout(function() {
            // 这里的 this 指向全局对象(在浏览器中是 window)
            console.log(`After 1 second, my name is ${this.name}`);
        }, 1000);
    },
    sayHelloArrow: function() {
        console.log(`Hello, my name is ${this.name}`);
        setTimeout(() => {
            // 箭头函数的 this 继承自外层函数,即 person 对象
            console.log(`After 1 second, my name is ${this.name}`);
        }, 1000);
    }
};
person.sayHello();
person.sayHelloArrow();

3. 模板字符串

特性介绍

模板字符串使用反引号()来定义字符串,可以在字符串中嵌入表达式,使用 ${}` 语法。

优势
  • 字符串拼接更加简洁直观,避免了使用 + 号进行拼接的繁琐。
  • 可以保留换行和缩进,使代码更易读。
代码示例
const name = 'John';
const age = 30;

// 传统字符串拼接
const message1 = 'My name is ' + name + ' and I am ' + age + ' years old.';
console.log(message1);

// 使用模板字符串
const message2 = `My name is ${name} and I am ${age} years old.`;
console.log(message2);

// 保留换行和缩进
const multiLineMessage = `
    This is a multi-line message.
    It can have multiple lines
    and preserve indentation.
`;
console.log(multiLineMessage);

4. 解构赋值

特性介绍

解构赋值允许你从数组或对象中提取值,并赋值给变量。

优势
  • 代码更加简洁,避免了手动访问数组元素或对象属性的繁琐。
  • 可以方便地交换变量的值。
代码示例
// 数组解构赋值
const numbers = [1, 2, 3];
const [a, b, c] = numbers;
console.log(a); // 输出 1
console.log(b); // 输出 2
console.log(c); // 输出 3

// 交换变量的值
let x = 10;
let y = 20;
[x, y] = [y, x];
console.log(x); // 输出 20
console.log(y); // 输出 10

// 对象解构赋值
const personObj = { firstName: 'John', lastName: 'Doe', age: 30 };
const { firstName, lastName, age } = personObj;
console.log(firstName); // 输出 John
console.log(lastName); // 输出 Doe
console.log(age); // 输出 30

// 重命名变量
const { firstName: givenName, lastName: familyName } = personObj;
console.log(givenName); // 输出 John
console.log(familyName); // 输出 Doe

5. 类和继承

特性介绍

ES6 引入了 class 关键字,用于定义类,以及 extends 关键字,用于实现类的继承。类是一种面向对象的编程概念,使 JavaScript 更符合传统的面向对象语言的风格。

优势
  • 代码结构更加清晰,提高了代码的可维护性和可扩展性。
  • 使 JavaScript 更易于理解和使用面向对象的编程范式。
代码示例
// 定义一个类
class Animal {
    constructor(name) {
        this.name = name;
    }
    speak() {
        console.log(`${this.name} makes a sound.`);
    }
}

// 定义一个子类,继承自 Animal 类
class Dog extends Animal {
    constructor(name) {
        super(name); // 调用父类的构造函数
    }
    speak() {
        console.log(`${this.name} barks.`);
    }
}

const animal = new Animal('Generic Animal');
animal.speak(); // 输出 Generic Animal makes a sound.

const dog = new Dog('Buddy');
dog.speak(); // 输出 Buddy barks.

6. Promise 对象

特性介绍

Promise 是一种处理异步操作的对象,它有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。可以使用 then 方法处理成功的结果,使用 catch 方法处理失败的结果。

优势
  • 解决了回调地狱问题,使异步代码更加清晰和易于维护。
  • 提供了统一的异步操作处理方式。
代码示例
// 创建一个 Promise 对象
const promise = new Promise((resolve, reject) => {
    setTimeout(() => {
        const success = true;
        if (success) {
            resolve('Operation succeeded');
        } else {
            reject('Operation failed');
        }
    }, 1000);
});

// 处理 Promise 的结果
promise
  .then((result) => {
        console.log(result); // 输出 Operation succeeded
    })
  .catch((error) => {
        console.error(error);
    });

7. 模块化:importexport

特性介绍

ES6 引入了模块化的概念,使用 export 关键字导出模块中的变量、函数或类,使用 import 关键字导入其他模块中的内容。

优势
  • 提高了代码的可维护性和可复用性,将代码拆分成多个模块,每个模块负责单一的功能。
  • 避免了全局命名冲突。
代码示例

模块文件 math.js

// 导出变量
export const PI = 3.14;

// 导出函数
export function add(a, b) {
    return a + b;
}

// 导出类
export class Calculator {
    constructor() {}
    multiply(a, b) {
        return a * b;
    }
}

主文件 main.js

// 导入模块中的内容
import { PI, add, Calculator } from './math.js';

console.log(PI); // 输出 3.14
console.log(add(3, 5)); // 输出 8

const calculator = new Calculator();
console.log(calculator.multiply(3, 5)); // 输出 15

以上这些 ES6 新特性让 JavaScript 编程更加高效、简洁和强大,在现代 JavaScript 开发中被广泛使用。

如何在项目中使用ES6的新特性?

前端项目使用 ES6 新特性

简单网页直接使用

如果你只是做一个简单的网页,不涉及复杂的项目构建,就可以直接在 HTML 文件里用 ES6 新特性。不过要注意,有些老版本的浏览器可能不支持这些新特性哦。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>ES6 简单使用</title>
</head>

<body>
    <!-- 这里用 type="module" 告诉浏览器这是个 ES6 模块 -->
    <script type="module">
        // 用箭头函数定义一个简单的函数,它用来拼接问候语
        const sayHello = (name) => `你好,${name}`;
        // 调用这个函数,把结果打印到控制台
        console.log(sayHello('张三'));

        // 定义一个对象,包含姓名和年龄
        const person = {
            name: '李四',
            age: 25
        };
        // 用解构赋值把对象里的属性取出来,赋值给同名变量
        const { name, age } = person;
        // 把取出的属性信息打印到控制台
        console.log(`${name} 今年 ${age} 岁了。`);
    </script>
</body>

</html>
使用构建工具(Webpack + Babel)

对于大型的前端项目,为了让代码能在各种浏览器正常运行,还能优化代码,我们通常会用构建工具。这里以 Webpack 和 Babel 为例。

步骤 1:创建项目并初始化
先创建一个新的文件夹当作项目目录,然后在这个目录下打开命令行工具,运行 npm init -y 命令,它会快速帮你生成一个 package.json 文件,这个文件记录着项目的各种信息和依赖。

步骤 2:安装必要的依赖
在命令行里运行下面的命令,安装 Webpack、Webpack 命令行工具、Babel 加载器、Babel 核心和 Babel 预设环境。

npm install webpack webpack-cli babel-loader @babel/core @babel/preset-env --save-dev

步骤 3:配置 Babel
在项目根目录下创建一个 .babelrc 文件,把下面的内容复制进去:

{
    // 告诉 Babel 用 @babel/preset-env 这个预设来转换代码
    "presets": ["@babel/preset-env"]
}

步骤 4:配置 Webpack
在项目根目录下创建一个 webpack.config.js 文件,内容如下:

const path = require('path');

module.exports = {
    // 项目的入口文件,Webpack 从这里开始打包
    entry: './src/index.js',
    output: {
        // 打包后文件的输出目录
        path: path.resolve(__dirname, 'dist'),
        // 打包后文件的名称
        filename: 'bundle.js'
    },
    module: {
        rules: [
            {
                // 匹配所有以 .js 结尾的文件
                test: /\.js$/,
                // 排除 node_modules 目录下的文件
                exclude: /node_modules/,
                use: {
                    // 使用 babel-loader 来处理 .js 文件
                    loader: 'babel-loader'
                }
            }
        ]
    }
};

步骤 5:编写 ES6 代码
在项目里创建一个 src 文件夹,在里面创建 index.js 文件,用 ES6 特性写代码:

// 定义一个类,代表动物
class Animal {
    // 构造函数,用来初始化对象的属性
    constructor(name) {
        this.name = name;
    }
    // 定义一个方法,让动物发出声音
    speak() {
        console.log(`${this.name} 发出了声音。`);
    }
}

// 创建一个 Animal 类的实例
const dog = new Animal('小狗');
// 调用实例的 speak 方法
dog.speak();

步骤 6:打包项目
package.json 文件里添加一个打包脚本,像这样:

{
    "scripts": {
        "build": "webpack"
    }
}

然后在命令行里运行 npm run build 命令,Webpack 就会把 src 目录下的代码打包成 dist 目录下的 bundle.js 文件。

步骤 7:在 HTML 里引入打包后的文件
dist 目录下创建一个 index.html 文件,把打包后的 bundle.js 文件引入进去:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Webpack 打包后的页面</title>
</head>

<body>
    <!-- 引入打包后的 JavaScript 文件 -->
    <script src="bundle.js"></script>
</body>

</html>

Node.js 项目使用 ES6 新特性

Node.js 高版本直接支持 ES6 模块

从 Node.js 13.2.0 版本开始,Node.js 原生支持 ES6 模块了。有两种方式可以用:

方式一:用 .mjs 文件扩展名
把文件扩展名改成 .mjs,就能直接在文件里用 ES6 模块语法啦。

// math.mjs
// 导出一个函数,用来做加法
export const add = (a, b) => a + b;

// main.mjs
// 从 math.mjs 文件里导入 add 函数
import { add } from './math.mjs';
// 调用 add 函数,把结果打印到控制台
console.log(add(3, 5));

然后在命令行里运行 node main.mjs 命令。

方式二:在 package.json 里设置 type: "module"
package.json 文件里加上 "type": "module",这样 .js 文件也能使用 ES6 模块语法了。

{
    "name": "node-es6-project",
    "version": "1.0.0",
    "type": "module",
    "scripts": {
        "start": "node main.js"
    }
}
// math.js
// 导出一个函数,用来做乘法
export const multiply = (a, b) => a * b;

// main.js
// 从 math.js 文件里导入 multiply 函数
import { multiply } from './math.js';
// 调用 multiply 函数,把结果打印到控制台
console.log(multiply(3, 5));

接着在命令行里运行 npm start 命令。

用 Babel 转换代码(兼容旧版本 Node.js)

要是你得兼容旧版本的 Node.js,就可以用 Babel 来转换代码。

步骤 1:创建项目并初始化
同样先创建项目目录,在目录下运行 npm init -y 命令初始化 package.json 文件。

步骤 2:安装依赖
在命令行里运行下面的命令,安装 Babel 相关的依赖:

npm install @babel/core @babel/cli @babel/preset-env --save-dev

步骤 3:配置 Babel
在项目根目录下创建 .babelrc 文件,内容和前面前端项目里的一样:

{
    "presets": ["@babel/preset-env"]
}

步骤 4:编写 ES6 代码
src 目录下创建 index.js 文件,用 ES6 特性写代码:

// 定义一个异步函数,模拟获取数据
async function fetchData() {
    // 返回一个 Promise 对象,1 秒后返回数据
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve('数据获取成功');
        }, 1000);
    });
}

// 立即执行的异步函数
(async () => {
    // 等待 fetchData 函数执行完,把结果赋值给 data 变量
    const data = await fetchData();
    // 把获取到的数据打印到控制台
    console.log(data);
})();

步骤 5:转换代码
package.json 文件里添加转换脚本:

{
    "scripts": {
        "build": "babel src --out-dir dist"
    }
}

然后在命令行里运行 npm run build 命令,Babel 会把 src 目录下的代码转换后放到 dist 目录里。

步骤 6:运行转换后的代码
在命令行里运行 node dist/index.js 命令,就能看到转换后的代码正常运行啦。

在 Node.js 项目中,如何使用 ES6 的新特性?

在 Node.js 项目里使用 ES6(ES2015)新特性可以让代码更简洁、高效且易于维护。下面从几个方面详细介绍如何在 Node.js 项目中使用 ES6 新特性。

1. 开启 ES6 支持

Node.js 默认支持大部分 ES6 特性,但在早期版本里,对于一些特性可能需要额外配置。现在 Node.js 较新的版本(如 v14 及以上)已经很好地支持了 ES6 特性。不过,如果要使用 ES6 的模块系统(importexport),需要做些额外设置。

使用 .mjs 文件扩展名

把文件扩展名改为 .mjs,Node.js 会自动将其视为 ES6 模块。

// 示例文件:math.mjs
// 定义一个函数,用于计算两个数的和
export function add(a, b) {
    return a + b;
}

// 示例文件:main.mjs
// 从 math.mjs 模块中导入 add 函数
import { add } from './math.mjs';

// 调用 add 函数
const result = add(3, 5);
console.log(result); 

在命令行中运行 node main.mjs,就能看到输出结果。

package.json 中配置

package.json 文件里添加 "type": "module",这样 .js 文件也能使用 ES6 模块语法。

{
    "name": "my-node-project",
    "type": "module",
    "version": "1.0.0"
}

然后就可以在 .js 文件里使用 importexport 了。

2. 常用 ES6 特性示例

箭头函数

箭头函数是 ES6 中简洁定义函数的方式,它没有自己的 thisargumentssupernew.target,适合用于简单的回调函数。

// 传统函数定义
function square(x) {
    return x * x;
}

// 箭头函数定义
const squareArrow = (x) => x * x;

console.log(square(4)); 
console.log(squareArrow(4)); 
模板字符串

模板字符串可以让字符串拼接更方便,支持换行和嵌入表达式。

const name = '张三';
const age = 25;

// 传统字符串拼接
const message1 = '你好,我叫' + name + ',今年' + age + '岁。';

// 模板字符串拼接
const message2 = `你好,我叫 ${name},今年 ${age} 岁。`;

console.log(message1);
console.log(message2);
解构赋值

解构赋值可以方便地从数组或对象中提取值并赋给变量。

// 数组解构
const numbers = [1, 2, 3];
const [a, b, c] = numbers;
console.log(a); 
console.log(b); 
console.log(c); 

// 对象解构
const person = {
    firstName: '李四',
    lastName: '王五',
    age: 30
};
const { firstName, lastName, age } = person;
console.log(firstName); 
console.log(lastName); 
console.log(age); 
letconst

letconst 是 ES6 中用于声明变量的关键字,let 有块级作用域,const 用于声明常量,一旦赋值就不能再重新赋值。

// let 示例
function testLet() {
    if (true) {
        let x = 10;
        console.log(x); 
    }
    // 这里访问不到 x,因为 x 有块级作用域
    // console.log(x); 
}
testLet();

// const 示例
const PI = 3.14159;
// 下面这行代码会报错,因为 PI 是常量,不能重新赋值
// PI = 3.14; 
类和继承

ES6 引入了 class 关键字,让 JavaScript 有了更像传统面向对象语言的类和继承机制。

// 定义一个基类
class Animal {
    constructor(name) {
        this.name = name;
    }

    speak() {
        console.log(`${this.name} 发出声音`);
    }
}

// 定义一个子类,继承自 Animal 类
class Dog extends Animal {
    speak() {
        console.log(`${this.name} 汪汪叫`);
    }
}

const myDog = new Dog('旺财');
myDog.speak(); 

通过这些方法,你可以在 Node.js 项目中充分利用 ES6 的新特性,提升开发效率和代码质量。

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

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

相关文章

简说spring 的设计模式

spring 的设计模式&#xff08;23种…) &#xff08;面试题&#xff09;说说BeanFactory和FactoryBean的实现原理和区别&#xff1f; spring 中你还知道哪些设计模式&#xff1f;&#xff1f; 1.简单工厂模式 实质&#xff1a; 由一个工厂类根据传入的参数&#xff0c;动态决…

【 Avalonia UI 语言国际化 I18n】图文结合教学,保姆级教学,语言国际化就是这么简单(.Net C#)

完整项目地址 github : https://github.com/Crazy-GrowUp/AvaloniaI18nTest/tree/master gitee :https://gitee.com/jack_of_disco/avalonia-i18n-test 0.项目新建 Properties 文件夹 对应的项目配置文件里面就会增加 <Folder Include"Properties\" /> 1.项…

Spring Boot 日志管理(官网文档解读)

摘要 本篇文章详细介绍了SpringBoot 日志管理相关的内容&#xff0c;文章主要参考官网文章的描述内容&#xff0c;并在其基础上进行一定的总结和拓展&#xff0c;以方便学习Spring Boot 的小伙伴能快速掌握Spring Boot 日志管理相关的内容。 日志实现方式 Sping Boot 的日志管…

【玩转 Postman 接口测试与开发2_020】(完结篇)DIY 实战:随书示例 API 项目本地部署保姆级搭建教程(含完整调试过程)

《API Testing and Development with Postman》最新第二版封面 文章目录 最新版《Postman 接口测试与开发实战》示例 API 项目本地部署保姆级搭建教程1 前言2 准备工作3 具体部署3.1 将项目 Fork 到自己名下3.2 创建虚拟环境并安装依赖3.3 初始运行与项目调试 4 示例项目的用法…

网络运维学习笔记 021 HCIA-Datacom新增知识点02 SDN与NFV概述

SDN与NFV概述 经典IP网络是一个分布式的、对等控制的网络。 每台网络设备存在独立的数据平面、控制平面和管理平面。 设备的控制平面对等的交互路由协议&#xff0c;然后独立的生成数据平面指导报文转发。 它的优势在于设备与协议解耦&#xff0c;厂家间的兼容性较好且故障场景…

【Linux】多线程 -> 线程同步与基于BlockingQueue的生产者消费者模型

线程同步 条件变量 当一个线程互斥地访问某个变量时&#xff0c;它可能发现在其它线程改变状态之前&#xff0c;它什么也做不了。 例如&#xff1a;一个线程访问队列时&#xff0c;发现队列为空&#xff0c;它只能等待&#xff0c;直到其它线程将一个节点添加到队列中。这…

Docker Mysql 数据迁移

查看启动命令目录映射 查看容器名称 docker ps查看容器的启动命令 docker inspect mysql8.0 |grep CreateCommand -A 20如下图所示:我这边是把/var/lib/mysql 目录映射到我宿主机的/mnt/mysql/data目录下,而且我的数量比较大使用方法1的话时间比较久,所以我采用方法2 如果没…

四步彻底卸载IDEA!!!

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 大家好&#xff0c;我们今天来学习四步彻底卸载IDEA&#xff01;&#xff01;&#xff01; 首先我要提醒各位 如果你想删除 IDEA 相关&#xf…

HTTP实验(ENSP模拟器实现)

HTTP概述 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;&#xff0c;设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。 HTTP定义了多种请求方法&#xff0c;常用的包括&#xff1a; GET&#xff1a;请求资源。 POST&…

【网络安全】常见的web攻击

1、SQL注入攻击 定义&#xff1a; 攻击者在HTTP请求中注入恶意的SQL代码&#xff0c;当服务器利用参数构建SQL语句的时候&#xff0c;恶意的SQL代码被一起构建,并在数据库中执行。 示例&#xff1a; 用户登录&#xff1a; 输入用户名xx&#xff0c; 密码 or 1 …

登录-05.JWT令牌-介绍

一.JWT令牌 JWT令牌是一种简洁的、自包含的格式&#xff0c;用于在通讯双方之间以json数据格式安全的传输数据。说白了&#xff0c;JWT令牌就是将json格式的数据进行封装&#xff0c;从而实现安全传输。 所谓简洁&#xff0c;就是指JWT令牌就是一个简单的字符串。 所谓自包含…

K8S下redis哨兵集群使用secret隐藏configmap内明文密码方案详解

#作者&#xff1a;朱雷 文章目录 一、背景环境及方案说明1.1、环境说明1.2、方案一&#xff1a;使用配置文件设置密码1.3、方案二&#xff1a;使用args 的命令行传参设置密码 二、redis secret configmap deployment参考2.1 创建secret-redis.yaml参考2.2 修改configmap配置参…

Spring框架基本使用(Maven详解)

前言&#xff1a; 当我们创建项目的时候&#xff0c;第一步少不了搭建环境的相关准备工作。 那么如果想让我们的项目做起来方便快捷&#xff0c;应该引入更多的管理工具&#xff0c;帮我们管理。 Maven的出现帮我们大大解决了管理的难题&#xff01;&#xff01; Maven&#xf…

鸿蒙NEXT应用App测试-专项测试(DevEco Testing)

注意&#xff1a;大家记得先学通用测试在学专项测试 鸿蒙NEXT应用App测试-通用测试-CSDN博客 注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注…

Rocky8 源码安装 HAProxy

HAProxy 是一款开源的高性能 负载均衡器 和 反向代理 软件&#xff0c;专注于处理高并发流量分发&#xff0c;广泛应用于企业级架构中提升服务的可用性、扩展性和安全性。 一、HAProxy 简介 1.1.HAProxy 是什么&#xff1f; 本质&#xff1a; 基于 C 语言开发 的轻量级工具&a…

【从0做项目】Java文档搜索引擎(9)烧脑终章!

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 文章导读 零&#xff1a;项目结果展示 一&#xff1a;导入 二&#xff1a;问题引入 1&#xff1a;情…

Linux 第二次脚本作业

1、需求&#xff1a;判断192.168.1.0/24网络中&#xff0c;当前在线的ip有哪些&#xff0c;并编写脚本打印出来。 2、设计一个 Shell 程序&#xff0c;在/userdata 目录下建立50个目录&#xff0c;即 user1~user50&#xff0c;并设置每个目录的权限&#xff0c;其中其他用户的权…

mysql的源码包安装

安装方式一&#xff1a;&#xff08;编译好的直接安装&#xff09; 1.添加一块10G的硬盘&#xff0c;给root逻辑卷扩容 &#xff08;下面安装方式二有&#xff0c;一模一样的装就行&#xff0c;我就不写了&#xff0c;再写的话篇幅就太长了&#xff09; 2.下载编译好的源码包…

#渗透测试#批量漏洞挖掘#畅捷通T+远程命令执行漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 一、漏洞概况 二、攻击特征 三、应急处置…

【2024 CSDN博客之星】大学四年,我如何在CSDN实现学业与事业的“双逆袭”?

前言&#xff1a; Hello大家好&#xff0c;我是Dream。不知不觉2024年已经过去&#xff0c;自己也马上迈入23岁&#xff0c;感慨时间飞快&#xff0c;从19岁刚入大学加入CSDN&#xff0c;到现在大学毕业已经整整四年了。CSDN陪伴我走过了最青涩的四年大学时光&#xff0c;在这里…