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

住房和城乡建设部网站村镇建设/武汉全网推广

住房和城乡建设部网站村镇建设,武汉全网推广,app制作教程步骤和方法,企业网站的建设流程目录 前置知识 原型对象 prototype和__proto__的区别 原型链概念 原型链的继承 原型 链污染 原型链污染原理 javascript中可能会存在原型链污染的危险函数 原型链污染的实际应用 JavaScript中可以触发弹窗的函数 前置知识 原型对象 在JavaScript中,每个函…

目录

        前置知识

原型对象

prototype和__proto__的区别

原型链概念

原型链的继承

原型 链污染

原型链污染原理

javascript中可能会存在原型链污染的危险函数

原型链污染的实际应用

JavaScript中可以触发弹窗的函数


前置知识

原型对象

在JavaScript中,每个函数都有一个特殊的属性prototype,它指向一个对象,这个对象就是所谓的原型对象。原型对象是一个普通的JavaScript对象,它包含着一些属性和方法,这些属性和方法可以被该函数的所有实例共享。

当使用new操作符来创建一个实例对象时,实例对象会继承它所属的构造函数的原型对象中的属性和方法。实例对象可以通过原型链访问原型对象中的属性和方法。如果实例对象需要访问的属性或方法在自身上找不到,它就会沿着原型链向上查找,直到找到为止。

以下是一个简单的示例,演示了如何使用原型对象:

// 定义一个构造函数
function Person(name, age) {this.name = name;this.age = age;
}
​
// 在原型对象上定义一个方法
Person.prototype.sayHello = function() {console.log('Hello, my name is ' + this.name + ' and I am ' + this.age + ' years old.');
};
​
// 创建两个实例对象
var person1 = new Person('Alice', 25);
var person2 = new Person('Bob', 30);
​
// 调用实例对象上的方法
person1.sayHello(); // Hello, my name is Alice and I am 25 years old.
person2.sayHello(); // Hello, my name is Bob and I am 30 years old.
​
// 查看实例对象的原型
console.log(person1.__proto__ === Person.prototype); // true
console.log(person2.__proto__ === Person.prototype); // true
​
// 查看原型对象的构造函数
console.log(Person.prototype.constructor === Person); // true

prototype和__proto__的区别

在 JavaScript 中,每个对象都有一个 __proto__ 属性,它指向该对象的原型。原型是一个对象,也可以有自己的原型,这样就形成了一个原型链。同时,每个函数也有一个 prototype 属性,它是一个对象,当该函数作为构造函数创建实例时,实例对象的 __proto__ 属性会指向该构造函数的 prototype 属性,这样就可以实现属性和方法的继承。

下面是 prototype__proto__ 的区别:

  1. prototype 属性是函数所独有的,而 __proto__ 属性是每个对象都有的。

  2. prototype 属性指向一个对象,它是用来存储属性和方法,这些属性和方法可以被该函数的实例对象所继承。而 __proto__ 属性指向该对象的原型,它是用来实现对象之间的继承。

下面是一些示例代码,可以帮助理解 prototype__proto__

// 定义一个构造函数
function Person(name, age) {this.name = name;this.age = age;
}
​
// 在 Person 的原型上定义一个方法
Person.prototype.sayHello = function() {console.log('Hello, my name is ' + this.name + '.');
}
​
// 创建一个 Person 实例对象
var person = new Person('Alice', 20);
​
// 输出实例对象的属性和方法
console.log(person.name);  // "Alice"
console.log(person.age);   // 20
person.sayHello();         // "Hello, my name is Alice."
​
// 输出 Person 和实例对象的 __proto__ 属性
console.log(Person.__proto__);     // [Function]
console.log(person.__proto__);    // Person { sayHello: [Function] }
​
// 输出 Person 和实例对象的 prototype 属性
console.log(Person.prototype);    // Person { sayHello: [Function] }
console.log(person.prototype);   // undefined

从上面的示例代码可以看出,prototype 属性被用于在函数的原型上定义方法和属性,而 __proto__ 属性被用于实现实例对象和构造函数之间的继承关系。

原型链概念

当创建一个 JavaScript 对象时,它都会有一个原型对象(也称为“proto”)。可以通过该对象来访问该对象的属性和方法。如果该对象本身没有定义某个属性或方法,那么 JavaScript 会在原型对象中查找,如果还没有找到,会继续查找原型对象的原型对象,直到找到 Object 的原型对象为止。

以下是一个简单的例子来演示原型链的概念:

// 定义一个构造函数
function Person(name, age) {this.name = name;this.age = age;
}
​
// 在构造函数的原型对象上定义一个方法
Person.prototype.sayHello = function() {console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};
​
// 创建一个 Person 实例
const person1 = new Person('Alice', 25);
​
// 调用该实例的 sayHello 方法
person1.sayHello(); // 输出:Hello, my name is Alice and I am 25 years old.
​
// 查看该实例的原型对象
console.log(person1.__proto__); // 输出:{ sayHello: [Function] }
​
// 查看该实例的原型对象的原型对象
console.log(person1.__proto__.__proto__); // 输出:{ constructor: [Function: Object], ... }

在上面的例子中,定义了一个 Person 构造函数,该构造函数有两个属性 nameage,并在构造函数的原型对象上定义了一个方法 sayHello。然后,创建了一个 person1 实例,并调用了该实例的 sayHello 方法。当调用 person1.sayHello() 时,JavaScript 在该实例对象中查找该方法,但是它发现该对象本身没有定义该方法,因此它会查找该对象的原型对象,即 Person.prototype,在该原型对象中找到了该方法并执行。这就是原型链的概念。

原型链的继承

基于原型链的继承:

// 定义一个父类
function Animal(name) {this.name = name;
}
​
Animal.prototype.sayName = function() {console.log(this.name);
};
​
// 定义一个子类
function Dog(name, breed) {this.breed = breed;Animal.call(this, name); // 调用父类的构造函数来初始化属性
}
​
// 设置子类的原型继承自父类
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
​
// 子类可以使用父类的方法和属性
var dog = new Dog('Tommy', 'Golden Retriever');
dog.sayName(); // "Tommy"
console.log(dog.breed); // "Golden Retriever"

基于对象的继承:

// 定义一个父对象
var animal = {name: '',sayName: function() {console.log(this.name);}
};
​
// 定义一个子对象
var dog = Object.create(animal);
dog.breed = '';
​
// 子对象可以使用父对象的方法和属性
dog.name = 'Tommy';
dog.breed = 'Golden Retriever';
dog.sayName(); // "Tommy"
console.log(dog.breed); // "Golden Retriever"

原型链污染

当在 JavaScript 中使用不可信的数据时,可能会导致原型链污染问题。以下是一个示例代码,演示了如何利用原型链污染来执行恶意代码:

// 从不受信任的数据创建一个 JavaScript 对象
const user = JSON.parse('{"__proto__": {"isAdmin": true}}');
​
// 恶意代码:修改所有对象的 toString 方法,以便执行任意的 JavaScript 代码
Object.prototype.toString = function() {if (this.isAdmin) {// 恶意代码:执行任意的 JavaScript 代码console.log('恶意代码:您的计算机已被攻陷!');// 恶意代码:发送您的敏感数据到黑客服务器console.log('恶意代码:正在发送您的银行卡信息和密码到黑客服务器!');}// 恶意代码:调用 toString 原始实现return '[object Object]';
};
​
// 在不知情的情况下,调用 toString 方法
console.log(user.toString()); // 输出:恶意代码:您的计算机已被攻陷! 恶意代码:正在发送您的银行卡信息和密码到黑客服务器! [object Object]

在上面的代码中,从一个不可信的数据源(例如一个恶意网站)解析出一个 JavaScript 对象 user,其中该对象的 __proto__ 属性被设置为一个新的原型对象,该原型对象有一个 isAdmin 属性,值为 true。接下来,在 Object.prototype 上修改了 toString 方法,以便执行任意的 JavaScript 代码。最后,调用 user.toString() 方法,JavaScript 沿着原型链查找该方法,并在 user 对象的原型对象中找到了它,导致恶意代码被执行。

因此,原型链污染是一种严重的安全问题,可能会导致代码执行任意的 JavaScript 代码。

原型链污染原理

在 JavaScript 中,每个对象都有一个原型对象,当访问一个对象的属性时,JavaScript 会沿着该对象的原型链向上查找,直到找到该属性或者到达原型链的顶端为止。原型链污染是指攻击者通过修改对象的原型链来实现对代码的攻击。

下面是一个简单的示例,演示了原型链污染的基本原理:

// 定义一个基础对象,包含一个 getName 方法
const baseObj = {
 getName: function() {
   return 'I am a base object';
  }
};

// 定义一个恶意对象,通过原型链污染修改了 getName 方法
const maliciousObj = {
 getName: function() {
   return 'I am a malicious object';
  }
};
maliciousObj.__proto__ = baseObj; // 修改原型对象为 baseObj

// 创建一个普通的对象,并访问 getName 方法
const normalObj = {};
console.log(normalObj.getName()); // 输出:Uncaught TypeError: normalObj.getName is not a function

// 修改 normalObj 对象的原型为 maliciousObj
Object.setPrototypeOf(normalObj, maliciousObj);

// 此时再次访问 getName 方法,输出被污染的内容
console.log(normalObj.getName()); // 输出:I am a malicious object

在上面的示例中,定义了一个基础对象 baseObj,它包含一个 getName 方法,该方法返回一个固定的字符串。接下来,定义了一个恶意对象 maliciousObj,该对象同样包含一个 getName 方法,但它返回的字符串不同,并且将 __proto__ 属性设置为 base

Obj 对象,从而使 maliciousObj 对象的原型指向了 baseObj。接下来,创建了一个普通的对象 normalObj,该对象在原型链上并没有定义 getName 方法。然后,使用 Object.setPrototypeOf 方法将 normalObj 的原型设置为 maliciousObj,从而在 normalObj 对象上成功实现了原型链污染。最后,调用 normalObj.getName() 方法时,JavaScript 沿着 normalObj 对象的原型链查找到了 maliciousObj 对象,并返回了被污染的 getName 方法的内容。

javascript中可能会存在原型链污染的危险函数

merge 函数:

当使用 merge 函数合并两个对象时,如果这两个对象都有相同的属性,那么 merge 函数会将目标对象中的属性值替换为源对象中的属性值。然而,如果这些属性的值是对象或者数组,那么 merge 函数并不会复制它们的值,而是将它们的引用复制给了目标对象。这样,如果修改目标对象中的这些属性,那么源对象中的这些属性也会被修改,进而污染了原型链。

下面是一个示例代码,它展示了如何使用 merge 函数修改全局作用域中的对象,从而污染了原型链:

// 定义一个全局变量
var globalObj = {};
​
// 在 globalObj 的原型上定义一个属性
Object.prototype.globalProp = 'global property';
​
// 合并一个带有属性的对象到全局变量中
_.merge(globalObj, {myProp: 'my property'
});
​
// 修改全局变量中的属性
globalObj.globalProp = 'modified global property';
​
// 输出全局变量中的属性和原型链上的属性
console.log(globalObj.myProp);      // "my property"
console.log(globalObj.globalProp);  // "modified global property"
​
// 创建一个对象并继承自全局变量
var obj = Object.create(globalObj);
​
// 输出继承自全局变量的对象的属性和原型链上的属性
console.log(obj.myProp);            // "my property"
console.log(obj.globalProp);        // "modified global property"

从上面的示例代码可以看出,由于 merge 函数修改了全局变量中的属性,因此继承自全局变量的对象也受到了污染。

clone函数:

在JavaScript中,对象可以被复制或克隆,有时候需要将一个对象的属性和方法复制到另一个对象中。通常会使用一些函数库提供的clone函数来实现对象的复制,但是有些clone函数实现方式可能会造成原型链污染的风险。

原型链污染的风险在于,攻击者可以通过污染原型对象,从而控制对象的行为并进行恶意操作。

下面是一个clone函数的示例,它使用了Object.assign函数来实现对象的复制:

function cloneObject(source) {return Object.assign({}, source);
}

这个cloneObject函数实现了对象的复制,它接受一个源对象source作为参数,然后返回一个新的对象,新对象的属性和方法与源对象相同。但是这个cloneObject函数存在原型链污染的风险,因为Object.assign函数会复制源对象的原型对象中的属性和方法。

下面是一个利用这个cloneObject函数进行原型链污染的示例代码:

// 定义一个原型对象
var myPrototype = {sayHello: function() {console.log('Hello!');}
};// 创建一个空对象
var myObject = {};// 使用cloneObject函数复制myPrototype对象到myObject中
cloneObject(myObject, myPrototype);// 调用myObject上的sayHello方法
myObject.sayHello(); // Hello!

在这个示例代码中,定义了一个原型对象myPrototype,它包含一个方法sayHello。然后创建一个空对象myObject,并使用cloneObject函数将myPrototype对象复制到myObject中。由于cloneObject函数使用了Object.assign函数,因此myObject的原型对象被设置为了myPrototypemyObject现在可以访问原型对象中的方法sayHello。因此,调用myObject.sayHello()时,就会执行myPrototype中的sayHello方法。

Object.assign 函数:

Object.assign是一个常用的函数,用于将多个源对象的属性和方法合并到目标对象中。然而,Object.assign也可能会导致原型链污染的问题。

Object.assign的原理是遍历源对象的所有可枚举属性,然后将它们赋值给目标对象。如果源对象的属性是一个引用类型(如对象、数组等),则会将引用复制到目标对象中,这可能会造成原型链污染的风险。

// 定义一个全局变量
var globalObj = {};// 在 globalObj 的原型上定义一个属性
Object.prototype.globalProp = 'global property';// 使用 Object.assign 合并一个带有属性的对象到全局变量中
Object.assign(globalObj, {myProp: 'my property'
});// 修改全局变量中的属性
globalObj.globalProp = 'modified global property';// 输出全局变量中的属性和原型链上的属性
console.log(globalObj.myProp);      // "my property"
console.log(globalObj.globalProp);  // "modified global property"// 创建一个对象并继承自全局变量
var obj = Object.create(globalObj);// 输出继承自全局变量的对象的属性和原型链上的属性
console.log(obj.myProp);            // "my property"
console.log(obj.globalProp);        // "modified global property"·

下面是一个使用Object.assign函数导致原型链污染的示例代码:

// 定义一个原型对象
var myPrototype = {sayHello: function() {console.log('Hello!');}
};// 创建一个空对象
var myObject = {};// 使用Object.assign函数将myPrototype对象合并到myObject中
Object.assign(myObject, myPrototype);// 调用myObject上的sayHello方法
myObject.sayHello(); // Hello!

在这个示例代码中,定义了一个原型对象myPrototype,它包含一个方法sayHello。然后创建一个空对象myObject,并使用Object.assign函数将myPrototype对象合并到myObject中。由于Object.assign函数会将myPrototype对象中的属性和方法复制到myObject中,因此myObject的原型对象被设置为了myPrototypemyObject现在可以访问原型对象中的方法sayHello。因此,调用myObject.sayHello()时,就会执行myPrototype中的sayHello方法。

Object.create函数:

Object.create是一个用于创建新对象的函数,它可以使用现有对象作为新对象的原型。

// 定义一个全局变量
var globalObj = {};// 在 globalObj 的原型上定义一个属性
Object.prototype.globalProp = 'global property';// 使用 Object.create 创建一个带有属性的对象并继承自全局变量
var obj = Object.create(globalObj, {myProp: {value: 'my property'}
});// 修改全局变量中的属性
globalObj.globalProp = 'modified global property';// 输出继承自全局变量的对象的属性和原型链上的属性
console.log(obj.myProp);            // "my property"
console.log(obj.globalProp);        // "modified global property"

如果原型对象存在恶意代码,那么新对象也会受到影响,从而导致原型链污染的问题。

下面是一个使用Object.create函数导致原型链污染的示例代码:

// 定义一个原型对象
var myPrototype = {sayHello: function() {console.log('Hello!');}
};// 使用Object.create函数创建一个新对象,并将myPrototype作为它的原型
var myObject = Object.create(myPrototype);// 调用myObject上的sayHello方法
myObject.sayHello(); // Hello!

在这个示例代码中,定义了一个原型对象myPrototype,它包含一个方法sayHello。然后使用Object.create函数创建了一个新对象myObject,并将myPrototype作为它的原型。由于myObject的原型对象被设置为了myPrototypemyObject现在可以访问原型对象中的方法sayHello。因此,调用myObject.sayHello()时,就会执行myPrototype中的sayHello方法。

eval函数:

eval函数是一个全局函数,它将传入的字符串作为 JavaScript 代码进行解析和执行。

// 定义一个全局变量
var globalVar = 'global variable';// 使用 eval 函数创建一个函数并在其中访问全局变量
eval('function myFunc() { console.log(globalVar); }');// 修改全局变量的值
globalVar = 'modified global variable';// 调用刚才创建的函数
myFunc();  // "modified global variable"

由于eval函数具有执行任意代码的能力,因此它也可能导致原型链污染的问题。

eval函数中,如果执行的代码中包含了对__proto__属性的操作,那么就会导致原型链污染。例如,下面的示例代码演示了如何使用eval函数向一个对象的原型对象中添加一个属性:

var myObject = {};
var code = "this.__proto__.myProperty = 'Hello World';"; // 向原型对象添加属性eval(code); // 执行代码console.log(myObject.myProperty); // Hello World

在这个示例代码中,定义了一个空对象myObject,然后使用字符串形式的代码向它的原型对象中添加了一个属性myProperty。将这个字符串代码传递给eval函数,并执行它。由于eval函数会将字符串代码作为 JavaScript 代码进行解析和执行,因此会向myObject的原型对象中添加一个属性myProperty。最后,输出myObject.myProperty的值,可以看到它已经被设置为了'Hello World'

原型链污染的实际应用

示例代码:

// 定义一个常量对象
const MY_CONST = {name: "My Const"
};// 定义一个 merge 函数,用于合并对象
function merge(target, source) {for (let key in source) {if (source.hasOwnProperty(key)) {target[key] = source[key];}}
}// 使用 merge 函数合并对象
merge({}, JSON.parse('{"__proto__": {"isAdmin": true}}'));// 检查 MY_CONST 是否被污染
console.log(MY_CONST.isAdmin); // true

在这个示例中,首先定义了一个常量对象MY_CONST,然后定义了一个merge函数,用于合并两个对象。接着,使用JSON.parse函数解析了一个包含__proto__属性的 JSON 字符串,并将它作为参数传递给merge函数。由于merge函数中没有对参数进行类型检查或者属性白名单过滤,因此这个函数可能会合并任意对象的属性,包括它们的原型对象中的属性。

在这个示例中,由于恶意 JSON 字符串中包含了__proto__属性,因此它会将一个具有isAdmin属性的对象添加到MY_CONST对象的原型对象中。这样,就可以通过MY_CONST.isAdmin属性访问到这个恶意对象中的属性值了,这就是原型链污染的问题。

JavaScript中可以触发弹窗的函数

  1. alert() 函数可以在浏览器中弹出一个警告框,用于向用户显示一条消息。示例代码如下:

    alert('Hello, world!');
  2. confirm() 函数可以在浏览器中弹出一个确认框,用于向用户显示一条消息并询问用户是否继续操作。示例代码如下:

    if (confirm('Are you sure you want to delete this item?')) {// 用户点击了确认按钮,执行删除操作
    } else {// 用户点击了取消按钮,不执行删除操作
    }
  3. prompt() 函数可以在浏览器中弹出一个对话框,用于向用户显示一条消息并询问用户输入内容。示例代码如下:

    let name = prompt('What is your name?');
    if (name) {alert('Hello, ' + name + '!');
    } else {alert('Please enter your name.');
    }

加群交流

相关文章:

原型链污染

目录 前置知识 原型对象 prototype和__proto__的区别 原型链概念 原型链的继承 原型 链污染 原型链污染原理 javascript中可能会存在原型链污染的危险函数 原型链污染的实际应用 JavaScript中可以触发弹窗的函数 前置知识 原型对象 在JavaScript中,每个函…...

ClickHouse详解

一、概念ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。OLAP场景的关键特征绝大多数是读请求数据以相当大的批次(> 1000行)更新,而不是单行更新;或者根本没有更新。已添加到数据库的数据不能修改。对于读取,从数据库中提取相当多的…...

02_Docker 安装

02_Docker 安装 文章目录02_Docker 安装2.1 安装 Docker 的先决条件2.2 在 Ubuntu 和 Debain 中安装 Docker2.2.1 检查前提条件1. 内核2.检查 Device Manager2.2 安装 DockerDocker 支持非常多的Linux平台,包括Ubuntu和RHEL,除此之外,Docker还…...

K8S集群将Docker切换到Containerd

文章目录1. 开启节点维护1.1 将节点设置成不可调度1.2 驱逐节点上的 Pod1.3 停止相关服务2. 升级到 containerd2.1 安装 containerd2.2 调整 containerd 配置2.3 修改 kubelet 启动配置参数3. 重启节点服务4. 验证升级后的节点5. 容器管理工具5.1 容器管理命令行工具对比5.2 cr…...

Kubernetes03:kubernetes 功能和架构

2.1 概述 Kubernetes 是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过 Kubernetes 能够进行应用的自动化部署和扩缩容。在 Kubernetes 中,会将组成应用的容 器组合成一个逻辑单元以更易管理和发现。Kubernetes 积累了作为 Google 生产环…...

LabVIEW中CPU和内存使用情况在NI分布式系统管理器中不可见

LabVIEW中CPU和内存使用情况在NI分布式系统管理器中不可见想使用NI分布式系统管理器监测网络连接实时控制器的CPU和内存使用情况。从左侧窗口的树中选择了感兴趣的实时目标,然后通过选择视图自动视图来确保启用自动查看。希望看到CPU/内存选项卡,但它有显…...

buu [NPUCTF2020]Classical Cipher 1

题目描述: 题目分析: 首先输入密码 {gsv_pvb_rh_zgyzhs} 后,得到:可以得知密码是错误的,再看看密码 {gsv_pvb_rh_zgyzhs} ,排列无序,那么尝试用凯撒与栅栏解密,发现还是解不出&…...

分享96个HTML体育竞技模板,总有一款适合您

分享96个HTML体育竞技模板,总有一款适合您 96个HTML体育竞技模板下载链接:https://pan.baidu.com/s/1k2vJUlbd2Boduuqqa0EWMA?pwdj8ji 提取码:j8ji Python采集代码下载链接:采集代码.zip - 蓝奏云 北京奥运火炬PSD模板 奥运…...

Python pandas「原有或者新建」Excel中「追加新或者新建」sheet

1.pandas原有Excel中追加新sheet 使用Pandas库,我们可以轻松将数据追加到现有的Excel工作簿中的新工作表中。以下是追加新工作表的简单步骤: 读取现有的Excel文件 使用Pandas库中的read_excel()函数读取现有的Excel文件。指定Excel文件的路径和文件名&a…...

程序员必备的软技能- CPU“没有灵魂的躯体”

引言 先引用一段比较有意思的论述: 现实中每个人是由两部分构成,灵魂和躯体,灵魂依附于躯体游走于世间,现实中我们面对的每个人其实面对的是其灵魂而非肉体,肉体不过是表象而已。 灵魂本性乃一恶物,寄生于…...

基于微信小程序的青少年生理健康知识小助手

基于微信小程序的青少年生理健康知识小助手 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目…...

【scl】博图程序的导入和导出

导入或者导出博图文件的方法(也叫移植文件) 目录 前言 ​编辑 ​编辑 前言 本篇文章主要写一下关于博图文件的导入和导出,具体要怎么样才能将写好的程序或者块移植到其他地方,下面我们一起来看! 一、程序块的导入和导…...

【C语言】指针进阶

目录 一、字符指针 二、指针数组 三、数组指针 四、数组指针的使用 五、函数指针数组 六、指向函数指针数组的指针 七、回调函数 我们知道了指针的概念: 1. 指针就是个变量,用来存放地址,地址唯一标识一块内存空间。 2. 指针的大小是…...

18:CTK 总结篇(FAQ)

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 经过了几个月的艰苦奋战,终于到了最后一节啦,是不是和我一样,心里有点儿小激动! 回顾之前的章节,从初级 -> 进阶 -> 高级,我们针对 CTK 做了详细的分类讲解。希望通过这些知识,大家能对模块化…...

概论_第7章_参数估计_真题__求置信区间

真题 2014.10 第30题 测量某物体的质量9次, 测得平均值 x‾15.4\overline x 15.4x15.4 g, 已知测量数据 XXX ~ N(μ,0.09)N(\mu, 0.09)N(μ,0.09) (1) 求该物体质量的置信度为0.95 的置信区间; (2)为了使置信度为0.95 的置信区间…...

Go 1.21的2个语言变化

语言行为变化 Go 1.20已经于今年2月份发布,Go 1.21也不远了,我们来先堵为快,看看Go 1.21版本里几个有趣的变化。 文末附送2道面试题。 panic(nil) func main() {defer func() {print(recover() nil)}()panic(nil) }大家先想一想这段代码…...

Mysql(一)架构、存储引擎、数据结构

目录一、mysql架构二、存储引擎三、数据类型一、mysql架构 与其它数据库相比,MySQL的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离,可…...

php 项目网站怎么实现负载均衡?

负载均衡是一种通过分担请求以保证系统可用性和稳定性的技术。在 PHP 项目网站中,可以使用以下几种方法实现负载均衡:软件负载均衡:使用软件如 HAProxy、Nginx 等实现负载均衡,将请求转发到多个后端服务器上。硬件负载均衡&#x…...

win11+pytorch1.7.0+python3.8(也可以是python3.7)+cuda11.0

win11pytorch1.7.0python3.8cuda11.0写在最前面一. 软件配备二. 创建虚拟环境2.1 创建环境名称,并选择‘y’2.2.进入虚拟环境三. 安装pytorch四. 安装虚拟环境下的notebook4.1 安装ipykernel,并选择‘y’,直至安装完成4.2 将环境名注册到note…...

基于jeecgboot的flowable流程设计器的几个bug修复

因为今天在用任务监听器的时候,出现几个bug,所以一并修复与处理。 一、建立任务监听器后,删除不了 主要有两个原因,一个是点击删除没反应,实际上是弹出框跑到后面去了,说明还是z-index问题,调整…...

SAP MM 配置变式物料

创建一个变式物料大概需要经过一下几个阶段; 1、创建物料主数据(MM01); 2、创建特性值(CT04); 3、创建变量类(CL02); 4、创建配置文件(CU41&a…...

Quartz与SpringBoot 搞定任务调度

一、Quartz简介 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java…...

SciencePlots绘图

简介 使用Python作为核心开发工具的机器学习和深度学习研究者自然会希望使用Matplotlib进行科研图表的绘制,但是Matplotlib默认的样式并不适合科研论文的出版,而SciencePlots就是为此定制的一系列科研绘图样式库,可以绘制很合适科研图表。 …...

【Spark分布式内存计算框架——Spark SQL】12. External DataSource(下)rdbms 数据

6.7 rdbms 数据 回顾在SparkCore中读取MySQL表的数据通过JdbcRDD来读取的,在SparkSQL模块中提供对应接口,提供三种方式读取数据: 方式一:单分区模式 方式二:多分区模式,可以设置列的名称,作为…...

【React】React入门--更改状态、属性、表单的非受控组件和受控组件

🎀个人主页:努力学习前端知识的小羊 感谢你们的支持:收藏🎄 点赞🍬 加关注🪐 文章目录setState属性(props)属性vs状态非受控组件受控组件setState this.state是纯js对象,在vue中,dat…...

0216-0218复习:继承

目录 继承 一、基本介绍 二、示意图 三、基本语法 四、入门案例 父类 子类1 子类2 main方法 五、继承细节 第一条 第二条 第三条 第四条 ​编辑 第五条 第六条 第七条 第八条 第九条 第十条 六、继承本质 七、练习题 第三题 继承 一、基本介绍 继承可以…...

【数据库】HNU数据库系统期末考试复习重点

前言 今天刚结束考试,考的范围基本没有超过这套重点内容,觉得整理的这份资料还算比较有用,遂睡前整理了下分享给大家,希望能帮到要准备数据库期末又时间紧张的学弟学妹~ 文章参考: 1.课程老师发《数据库期末考试复习…...

SCI论文写作常见连词及适用情况

And:用于连接同类或相似的词、短语或句子,表达并列关系。Moreover:用于连接两个相似或相关的想法,表达附加的信息或思想。Furthermore:用于连接两个相似或相关的想法,表达更进一步的信息或思想。In additio…...

Spring中的数据校验--进阶

分组校验 场景描述 在实际开发中经常会遇到这种情况:添加用户时,id是由后端生成的,不需要校验id是否为空,但是修改用户时就需要校验id是否为空。如果在接收参数的User实体类的id属性上添加NotNull,显然无法实现。这时…...

多种方法解决谷歌(chrome)、edge、火狐等浏览器F12打不开调试页面或调试模式(面板)的问题。

文章目录1. 文章引言2. 解决问题3. 解决该问题的其他方法1. 文章引言 不论是前端开发者,还是后端开发者,我们在调试web项目时,偶尔弹出相关错误。 此时,我们需要打开浏览器的调试模式,如下图所示: 通过浏…...