前端基础面试题·第三篇——JavaScript(其一)

news2024/9/17 4:18:32

1.JavaScript数据类型与运算符

数据类型
原始数据类型:
1.Number
2.String
3.Boolean
4.undefined
5.null
6.Symbol
7.bigint

复杂数据类型:
1.Function
2.非函数:
Array: 数组
Object: 对象
Date: 日期
RegExp: 正则
Map: 映射
Set: 集合
WeakMap: 弱映射
WeakSet: 弱集合
FormData: 表单数据

判断数据类型
1.typeof 运算符 ⼀般⽤来 判断基本数据类型 ,如:string,number,boolean,symbol,bigint(es10新
增⼀种基本数据类型bigint),undefined等。返回数据类型的字符串形式
typeof ⽬前能返回string,number,boolean,symbol,bigint,unfined,object,function这⼋种判断类型,但是注意 null 返回的是 Object。

为什么typeof null 是 Object?
因为在JavaScript中,不同的对象都是使⽤⼆进制存储的,如果⼆进制前三位都是0的话,系统会判断为是Object类型,⽽null的⼆进制全是0,⾃然也就判断为Object
扩展:
000 对象 - object
1 整型 - int
010 双精度类型 - double
100字符串 - strig
110布尔类型 - boolean
1000 Symbol类型
1001 bigint类型

2.instanceof 运算符⽤于判断对象的具体类型,⽐如判断⼀个变量是否是数组类型,⽤typeof是不行的,因为typeof返回的是
object,⽽instanceof可以,因为instanceof可以精准判断对象的具体类型

    //⼿写实现
function myInstance(L, R) { //L代表instanceof左边,R代表右边
 var RP = R.prototype
 var LP = L.__proto__
 while (true) {
 if (LP == null) {
 return false
 }
 if (LP == RP) {
 return true
 }
 LP = LP.__proto__
 }
}
console.log(myInstance({}, Object));

3.constructor 属性
与 instanceof 相似,但是对于 instanceof 只能再检测引⽤类型, ⽽ constructor 还可以检测基本类型,因为
constructor是原型对象的属性指向构造函数。

  • null 和 undefined是⽆效的对象,因此是不会有 constructor 存在的,所以⽆法根据 constructor 来判
    断。
  • JS对象的 constructor 是不稳定的,这个主要体现在⾃定义对象上,当开发者重写prototype 后,原有
    的 constructor 会丢失,constructor 会默认为Object
  • 类继承的也会出错,因为 Object 被覆盖了,检测结果就不对了

4.对象原型链判断:Object.prototype.toString.call(这个是判断类型最准的⽅法)
toString 是Object 原型对象上的⼀个⽅法,该⽅法默认返回其调⽤者的具体类型,更严格的讲,是 toString运⾏时this指向的对象类型, 返回的类型格式为[object,xxx],xxx是具体的数据类型 ,其中包括:String,Number,Boolean,undefined,null,Function,Date,Array,RegExp,Error,HTMLDocument… 基本上所有对象的类型都可以通过这个⽅法获取到。

2.undefined 和 undeclared 的区别

Undeclared(未声明) : 当尝试访问尚未使⽤ var、let 或 const 声明的变量时会发⽣这种情况。
Undefined(未定义) : 它发⽣在使⽤ var、let 或 const 声明变量但未赋值时。
在 JavaScript 中,两者很容易被混为⼀谈typeof 对 undefined 和 undeclared 的 都返回 “undefined”。

3.数组

  • 数组的创建方式:
    var arr = new Array(1, 2);
    var arr = [1, 2];
  • 数组的常用方法:
Array.from() // 浅拷⻉
从类数组对象或者可迭代对象中创建⼀个新的数组实例。 Array.from还可以接受第⼆个参数,作⽤类似于数组的
map⽅法,⽤来对每个元素进⾏处理,将处理后的值放⼊返回的数组。
Array.of() // 创建数组
根据⼀组参数来创建新的数组实例,⽀持任意的参数数量和类型,没有参数时返回 [],当参数只有⼀个的时候,实
际上是指定数组的⻓度。
Array.prototype.concat() // 连接数组
将传⼊的数组或非数组值与原数组合并,返回⼀个新数组,不影响原数组。
copyWithin(target,start,end)
将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。
target(必需):从该位置开始替换数据。如果为负值,表示倒数。
start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示从末尾开始计算。
end(可选):到该位置前停⽌读取数据,默认等于数组⻓度。如果为负值,表示从末尾开始计算。
find() 
⽤于找出第⼀个符合条件的数组成员
参数是⼀个回调函数,接受三个参数依次为当前的值、当前的位置和原数组
findIndex()
findIndex返回第⼀个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1
find和findIndex这两个⽅法都可以接受第⼆个参数,⽤来绑定回调函数的this对象
fill()
还可以接受第⼆个和第三个参数,⽤于指定填充的起始位置和结束位置.
注意,如果填充的类型为对象,则是浅拷⻉.
push() pop() shift() unshift() 
splice(index,howmay,item1,.....,itemX)
index : 必需。添加/删除项⽬位置,使⽤负数可从数组结尾处规定位置。
howmany :必需。要删除项⽬数量。如果设置为 0,则不会删除项⽬。
item1, ..., itemX: 可选。向数组添加新项⽬。
concat()
concat⽅法⽤于连接两个或多个数组。该⽅法将返回⼀个新数组,不影响原数组。
slice()
创建⼀个包含原有数组中⼀个或多个元素的新数组
reduce()
reduce() ⽅法不会改变原始数组。
filter()
将所有元素进⾏判断,将满⾜条件的元素作为⼀个新的数组返回
some()
将所有元素进⾏判断返回⼀个布尔值,如果存在元素都满⾜判断条件,则返回 true,若所有元素都不满⾜判断条
件,则返回 falseevery()
将所有元素进⾏判断返回⼀个布尔值,如果所有元素都满⾜判断条件,则返回 true,否则为 falsejoin()
将数组中的所有元素转换⼀个字符串。
flat()
将数组展平,返回⼀个新数组,原数组不改变。
flatMap()
将数组中的每个元素都执行⼀个提供的函数,该函数返回⼀个新数组。
indexof()
返回数组中第一个符合条件的元素的索引,如果不存在,则返回-1includes()
返回一个布尔值,表示数组中是否包含给定的元素。
forEach()
遍历数组,将数组中的每个元素执行⼀个提供的函数。
map()
将数组中的每个元素都执行⼀个提供的函数,返回由每次函数调⽤结果组成的新数组。
reverse()
将数组中的元素顺序反转。
sort()
对数组中的元素进⾏排序。
toString()
将数组中的元素转换⼀个字符串。

4.数组去重

1.indexOf,filter

    const arr = [1,2,3,2,3,4]
    const newArr = arr.filter((item,index) => {
        if(arr.indexOf(item) === index) {
            return true 
        } else {
            return false
        }
    })

2.Set

    const set = new Set(arr)
    const newArr = [...set]

3.Map

    const map = new Map()
    arr.forEach(item => {
        if(!map.has(item) {
            map.set(item,true)
        })
    })
    const newArr = [...map.keys()]

4.forEach,includes

    const arr = [1,2,3,4,3,4,5]
    const newArr = []
    arr.forEach(item => {
        if(!newArr.includes(item)) {
            newArr.push(item)
        }
    })

5.reduce

    const newArr = arr.reduce((pre,i) => {
        if(pre.indexOf(i) === - 1) {
            pre.push(i)
        }
    },[])

6.暴力算法

    const arr = [1,3,2,3,2,3,2,3,]
    const newArr = []
    for(let i = 0 ; i < arr.length;i++) {
        for(let j = 0;j < i;j++) {
         if(arr[i] !== arr[j]) {
                newArr.push(arr[i])
            } else {
                break
            }
        }
    }

5.数组拍平

1.flat
flat()⽅法⽤于将数组展平,返回⼀个新数组,原数组不改变。需要传入一个参数,这个参数表示要展平的层数

    const arr = [1,2,[3,4,[5,6]]]
    const newArr = arr.flat(Infinity)

2.toString + replace + split

    const arr = [1,2,[3,4,[5,6]]]
    const newArr = arr.toString().replace(/(\[|\])/g,'').split(',')

3.toString + replace + JSON.parse

    const arr = [1,2,[3,4,[5,6]]]
    const newArr = JSON.parse('[' + arr.toString().replace(/(\[|\])/g,'') + ']')

4.递归

    const arr = [1,2,[3,4,[5,6]]]
    const newArr = []
    const fn = (arr) => {
        for(let i = 0;i < arr.length;i++) {
            if(Array.isArray(arr[i])) {
                fn(arr[i])
            } else {
                newArr.push(arr[i])
            }
        }
    }
    fn(arr)

5.扩张运算符

    const arr = [1,2,[3,4,[5,6]]]
    const newArr = [].concat(...arr)

6.ES6新增的数组方法

1.find // 找到符合条件的第一个元素
2.findIndex // 找到符合条件的第一个元素索引
3.includes // 判断数组中是否包含某个元素
4.flat // 数组拍平
5.flatMap // 数组拍平,并且可以指定回调函数
6.Array.at(index) // 返回指定索引的元素
7.Array.from(arrayLike) // 将伪数组或可遍历对象转换为真数组
8.Array.of(element0, element1, …) // 创建一个新的数组实例,并填充元素
9.Array.copyWithin(target, start = 0, end = this.length) // 从数组中拷贝元素到当前数组
10.Array.fill(value, start = 0, end = this.length) // 用指定的值填充数组
11.Array.entries() // 返回一个包含数组中每个索引的键值对的遍历器对象
12.Array.keys() // 返回一个包含数组中每个索引的键的遍历器对象
13.Array.values() // 返回一个包含数组中每个索引的值的遍历器对象
14.Array.sort(compareFunction) // 对数组中的元素进行排序

7.arguments

1.arguments是⼀个类数组对象,它包含函数调⽤时传⼊的参数。
这个对象存在于使用function声明的函数作用域中,并且只存在于函数内部。
这是一个类数组对象,可以进行遍历啊,也可以使使用下标获取元素含有callee,length属性
2.转为数组

    const arr = Array.from(arguments)
    const arr = [...arguments]
    Array.prototype.slice.call(argument) 
    // Array.prototype.slice这个方法可以在传入一个类数组对象,该函数会调用类属组上的length属性进行遍历截取,因此在后两个参数中不传值则会将整个类数组都复制一遍,生成一个数组返回

3.扩展运算符

    const arr = [...arguments]
    const arr = [...arguments.callee]   

8.对象

1.遍历对象
可以使用hasOwnProperty 函数来判断对象一个属性是不是存在与对象那个之中
对象也可以使用[]语法访问某一个属性

    for(let key in obj) {} // 使用for...in 运算可以遍历对象的可枚举属性,包括对象继承的属性
    Object.keys(obj) // 这个方法可以返回对象中的所有可枚举(不包括继承属性)属性组成的一个数组
    Object.getOwnPropertyNames(obj) // 这个方法可以返回对象中所有的属性,包括不可枚举的属性
    Object.getOwnPropertySymbols(obj) // 这个方法可以返回对象中所有的Symbol属性组成的数组
    Reflect.ownKeys(obj) // 这个方法可以返回对象中所有的属性,包括不可枚举的属性和Symbol属性
    Object.entries(obj) // 这个方法可以返回对象中所有可枚举的属性组成的数组
    Object.values(obj) // 这个方法可以返回对象中所有可枚举的属性值组成的数组
    Object.fromEntries(obj) // 这个方法可以将一个键值对组成的数组转换为对象

9.for…in 和 for…of

1.for…in // 遍历对象的可枚举属性,包括对象继承的属性(专门为遍历对象而构建)

2.for…of // 遍历数组,字符串,Map,Set,arguments等可迭代对象

10.原型与原型链

1.原型
每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。当这个函数作为构造函数创建实例时,该实例的内部[[Prototype]]指针被赋值为构造函数的prototype属性。这样构造函数的原型对象就和实例产生联系,实力就可以调用构造函数原型对象上的属性与方法。例如Array数组实例的绝大多数api都是来自Array.prototype原型对象。prototype有⼀个默认的constructor属性,⽤于记录实例由哪个构造函数创建.constructor,每⼀个原型都有⼀个constructor属性指向关联的构造函数.
2.原型链
每个实例对象都有一个内部属性[[Prototype]],指向构造函数的原型对象。这个原型对象也有一个自己的原型对象[[Prototype]],层层向上直到Object.特殊的 Function 对象,Function 的 proto 指向的是⾃身的 prototype。
⼀切对象都是继承⾃Object对象,Object 对象直接继承根源对象null。
⼀切的函数对象(包括 Object 对象),都是继承⾃ Function 对象。
Object 对象直接继承⾃ Function 对象。
Function对象的proto会指向⾃⼰的原型对象,最终还是继承⾃Object对象。

43.javaScript中的继承方式

1.原型链继承
由于原型链的存在,可以手动修改一个对象的原型,达到继承的目的。这样一来这个对象的原型对象上的属性与方法可以被该对象使用,近似的实现了两个对象之间的继承关系

    // 父对象构造函数
    function Person(name) {}
    Person.prototype.name = 'zhangsan'
    Person.prototype.say = function() {}
    // 子对象构造函数
    function Student(name) {}
    Student.prototype = new Person()
    const student = new Student()
    student.name // zhangsan 实现两个对象之间的继承关系
优点:
  1. 原型链继承是JavaScript中实现继承的主要方式,也是最常用的继承方式。
  2. 原型链继承可以共享父对象的原型属性和方法,避免了重复创建对象。
  3. 原型链继承可以实现多继承,即一个子对象可以同时继承多个父对象。
缺点:
  1. 原型链继承的缺点是子对象共享父对象的原型属性和方法,如果父对象的原型属性是一个引用类型,那么子对象修改这个属性,会影响到其他子对象。
  2. 原型链继承的缺点是子对象无法向父对象传递参数,因为子对象的原型是父对象的一个实例,父对象的构造函数在创建子对象的原型时,子对象无法向父对象的构造函数传递参数。
  3. 原型链继承的缺点是子对象无法继承父对象的构造函数,因为子对象的原型是父对象的一个实例。

2.借用构造函数继承
通过利用javascript中的this关键字,在构造函数中调用父构造函数,并且指定父构造函数this指向为当前作用域this,即可以将父构造函数中添加属性与方法的操作在子构造函数中执行一遍,从而间接实现了继承。

    // 父构造函数
    function Parent (name) {
        this.name = name
        this.say = function () {}
    }
    // 子构造函数
    function Child (name) {

        Parent.call(this, name)
    }
    const child = new Child("zhangsan")
    child.name // zhangsan 

优点:
  1. 借用构造函数继承可以向子对象传递参数,解决了原型链继承的缺点。
  2. 借用构造函数继承可以实现多继承,即一个子对象可以同时继承多个父对象。
缺点:
  1. ⽅法都在构造函数中 定义,每次创建实例都会创建⼀遍⽅法

3.组合继承
组合继承是JavaScript中实现继承的主要方式,也是最常用的继承方式。
组合继承通过原型链继承父对象的属性和方法,通过借用构造函数继承父对象的方法。

    // 父构造函数
    function Parent (name) {
        this.name = name
        this.say = function () {}
    }
    // 子构造函数
    function Child (name) {
        Parent.call(this, name)
    }
    Child.prototype = new Parent()
    const child = new Child("zhangsan")
    child.name // zhangsan 
优点:
  1. 组合继承可以共享父对象的原型属性和方法,避免了重复创建对象。
  2. 组合继承可以实现多继承,即一个子对象可以同时继承多个父对象。
  3. 组合继承可以向子对象传递参数,解决了原型链继承的缺点。
缺点:
  1. 组合继承的缺点是子对象的原型是父对象的一个实例,父对象的构造函数在创建子对象的原型时,子对象无法继承父对象的构造函数。

4.Class继承
ES6中新增的Class语法糖,通过extends关键字实现继承。

    class Parent {
        constructor(name) {
            this.name = name
        }
        say() {}
    }
    class Child extends Parent {
        constructor(name) {
            super(name)
        }
    }
    const child = new Child("zhangsan")
    child.name // zhangsan 
优点:
  1. Class继承可以共享父对象的原型属性和方法,避免了重复创建对象。
  2. Class继承可以实现多继承,即一个子对象可以同时继承多个父对象。
  3. Class继承可以向子对象传递参数,解决了原型链继承的缺点。
缺点:
  1. Class继承的缺点是子对象的原型是父对象的一个实例,父对象的构造函数在创建子对象的原型时,子对象无法继承父对象的构造函数。

44.new操作符创建一个对象的过程

1.创建一个空对象
new操作符使用会创建一个空对象,并且将这个空对象的原型指向构造函数的prototype属性。
2.修改this指向
3.调用构造函数
4.返回对象

手写一个new操作符

    function newOperator(func,...args) {
        // 1.创建新对象
        const obj = {}
        // 2.将新对象的原型指向构造函数的prototype属性
        obj.__proto__ = func.prototype
        // 3.修改this指向并调用构造函数
        const res = func.apply(obj,args)
        // 4.返回新对象
        return typeof res === 'object' ? res : obj
    }

45.instanceof 操作符

原理: instanceof操作符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上。原理是判断构造函数的prototype属性是否出现在对象的原型链上
手写一个instanceof操作符

    function instanceOf(left,right) {
        // 循环判断构造函数是否出现在对象的原型链上
        while(left !== null) {
            if(left.__proto__ === right.prototype) {
                return true
            }
            left = left.__proto__
        }
        return false
    }

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

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

相关文章

铁路订票系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;车次信息管理&#xff0c;基础数据管理&#xff0c;论坛管理&#xff0c;通知公告管理&#xff0c;用户管理&#xff0c;轮播图信息 微信端账号功能包括&#xff1a;系统首页&a…

【linux学习指南】Linux编译器 gcc和g++使用

文章目录 &#x1f4dd;前言&#x1f320; gcc如何完成&#x1f309;预处理(进行宏替换) &#x1f320;编译&#xff08;生成汇编&#xff09;&#x1f309;汇编&#xff08;生成机器可识别代码&#xff09; &#x1f320;链接&#xff08;生成可执行文件或库文件&#xff09;&…

变压器制造5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

变压器制造5G智能工厂工业物联数字孪生平台&#xff0c;推进制造业数字化转型。作为传统制造业的重要组成部分&#xff0c;变压器制造行业也不例外地踏上了数字化转型的快车道。而变压器制造5G智能工厂物联数字孪生平台的出现&#xff0c;更是为这一进程注入了强大的动力&#…

内卷时代无人机培训机构如何做大做强

在当今社会&#xff0c;随着科技的飞速发展&#xff0c;“内卷”一词频繁被提及&#xff0c;反映了各行业竞争日益激烈的现象。对于无人机培训行业而言&#xff0c;如何在这样的时代背景下脱颖而出&#xff0c;实现做大做强的目标&#xff0c;成为每个培训机构必须深思的问题。…

自学C语言-11

** 第3篇 高级应用 ** 第11章 结构体和共用体 迄今为止,我们在程序中用到的都是基本数据类型。但实际开发中,有时简单的变量类型无法满足程序中各种复杂的数据要求,因此C语言还提供了构造类型。构造类型数据是由基本类型数据按照一定规则组成的。 本章致力于使读者了解结…

【Nginx系列】Nginx中rewrite模块

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

《战锤40K:星际战士2》超越《黑神话》 登Steam热销榜首

《使命召唤&#xff1a;黑色行动6》将登陆 PC Game Pass看来确实影响了销量&#xff0c;因为这次在 Steam 上它的预购并没有占领 Steam 热销榜单之首。这次霸榜的则是即将推出的《战锤40K&#xff1a;星际战士2》。 根据 SteamDB 显示&#xff0c;这部将于9 月 10 日发售的游戏…

LabVIEW中Request Deallocation 功能

此功能会在包含该功能的 VI 运行之后释放未使用的内存。 该功能仅适用于高级性能优化。在某些情况下&#xff0c;释放未使用的内存可以提高性能。然而&#xff0c;过于频繁地释放内存可能导致 LabVIEW 反复重新分配空间&#xff0c;而不是重用已有的内存分配。如果您的 VI 分配…

rocky linux 9部署zabbix6

安装rocky9 阿里巴巴开源镜像站http://mirrors.aliyun.com 1、Rocky 2、初始化 防火墙 systemctl stop firewalld systemctl disable filewalld 或者 systemctl disable firewalld --now 3、selinux vi /etc/selinux/config 配置源sed -e s|^mirrorlist|#mirrorlist|g \-e s|^#…

24程序员转行,首选为什么是它?

今天文章的主人公暂且称他为 A 君。不过 A 君有点特别&#xff0c;非科班&#xff0c;工作 10 年后才转行 iOS 程序员。今年 36 岁&#xff0c;目前在某行业头部企业任职前端负责人&#xff0c;管理 40 人的前端团队。 废话不多说&#xff0c;我们开始 A 君&#xff08;为了描…

包机制,javadoc生成文档,用户交互scanner

包机制 在建包时com.kuang直接建线性一条龙的文件只会显示一个外层包&#xff0c;当再建一个包时才会显示出两个包。 import com.kuang.base 导入包的时候在后面加入星号就能把包全导进来 javadoc生成文档 public class Doc {String name;/*** * param name* return* throw…

Python可视化集大成之作 - Seaborn 介绍

我今天要介绍一款让你在数据可视化中游刃有余的利器——Seaborn包。作为Python数据可视化库中的一员&#xff0c;Seaborn不仅美观易用&#xff0c;而且功能丰富&#xff0c;是生物信息学中数据探索的好帮手。 为什么选择Seaborn&#xff1f; 1. 美观简洁 Seaborn的默认主题和颜…

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中&#xff0c;不同电脑的配置和操作系统&#xff08;如Win11与Win7&#xff09;可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行&#xff0c;需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下&a…

PMP–一、二、三模–分类–变更–技巧–敏捷变更

文章目录 技巧高频考点分析&#xff08;一、过程&#xff1b;二、人员&#xff09;一、过程&#xff1a;1.1 变更管理&#xff1a;1.1.1 瀑布型变更&#xff08;一次交付、尽量限制、确定性需求 &#xff1e;风险储备&#xff09;1.1.2 敏捷型变更&#xff08;多次交付、拥抱变…

mybatis框架基础以及自定义插件开发

文章目录 框架概览框架预览MyBatis框架的核心组件MyBatis框架的工作原理MyBatis框架的配置MyBatis框架的最佳实践 自定义插件开发1. 添加依赖2. 创建插件类3. 配置插件4. 启动类中注册插件5. 测试插件 参考文献 框架概览 MyBatis是一个优秀的持久层框架&#xff0c;它支持自定…

多个vue项目部署到nginx服务器

文章目录 需求一、项目打包1.vue.config.js2.request.js文件3.打包 二、nginx配置 需求 同一个域名安装多个vue项目。 比如&#xff1a;域名为 https://domain.com 后缀。那么通过不同的后缀就能去访问不同的项目地址。 https://domain.com&#xff0c;不加任何后缀&#x…

OBItools:Linux下的DNA条形码分析神器

在生物信息学领域&#xff0c;DNA条形码分析是一种非常常见的研究方法&#xff0c;用于物种鉴定、生态学和进化生物学研究。今天要介绍的工具就是专为此设计的——OBItools。这个工具集专门用于处理生态学和进化生物学中的DNA条形码数据&#xff0c;在Linux环境下运行。无论你是…

linux下进行lvm分区及扩容

目录 LVM存储管理介绍 lvm磁盘扩容有两种方式 创建lvm磁盘 1. 首先先加入第一块儿新的磁盘 2. 对新磁盘 /dev/sdb 进行分区 通过LVM命令创建新卷 1. 创建物理卷 2.创建卷组 并将物理卷加入其中 3. 创建逻辑卷并分配大小 4.格式化刚刚创建的硬盘 5. 挂载磁盘 扩容lvm…

《Web性能权威指南》-网络技术概览-读书笔记

注&#xff1a;TCP/IP等知识牵涉面太广&#xff0c;且不说本文&#xff0c;哪怕是原书&#xff0c;限于篇幅&#xff0c;很多知识点都是大致介绍下。如果想深入理解&#xff0c;需要更一步Google相关页面资料。 延迟与带宽 WPO&#xff0c;Web Performance Optimization&…

基于苹果Vision Pro的AI NeRF方案:MetalSplatter

随着苹果Vision Pro的发布,混合现实(Mixed Reality, MR)技术迎来了一个新的发展阶段。为了充分利用Vision Pro的潜力,一款名为MetalSplatter的Swift/Metal库应运而生,它允许开发者在Vision Pro上以全立体的方式体验捕捉内容。本文将详细介绍MetalSplatter的特点及其如何为…