1.2 Java全栈开发前端+后端(全栈工程师进阶之路)-前置课程JavaScript,看这一篇就够了

news2025/2/25 4:01:08

上一章我们讲了HTML的知识,那么我们现在要来学习,JavaScript

那么首先我们要知道JavaScript写在哪里。

JavaScript核心语法

js书写的位置

1、写在页面中的script标签下

只有在代码与页面有强关联的情况下才会写在页面里

2、写在指定的js文件下通过外链进行引入

1、变量Variable

var num = 10
var myAge = 18
var num1 = 20
var num2 = 30

格式:
var 变量名 = 值
变量名:英文+数字

2、数据类型

var myNum = 10 // number 数值类型
var myStr = '文本' // string 字符串类型
var myName = "无" // string 字符串类型
var myBool = true // false boolean 布尔类型
var myNull = null // 用于清空变量内容,表示空
var myUn // undefined 容器的默认值
console.log(myNum) // 控制台输出
console.log(myUn) // 控制台输出

3、运算符

// 数值 计算
var sum = 1 - 2 * 3 % 4
console.log(sum)

// 字符串操作
var resultStr = '你好' + 'JavaScript'
console.log(resultStr)

// 比较
var isTrue = 2 > 3
console.log(isTrue)

console.log(2 === '2')

4、语句Statement

 // if (false) { //不会操作, 一般不用
if (2 > 1) { // 使用比较
    consle.log('我会执行')
}

// 无论如何会有一种情况执行
// if ... else适用于两个区块的处理

if (true) { // 当判断值为true 显示我不会执行 为false 显示我会执行
    consle.log('我不会执行')
} else {
    consle.log('我会执行')
}

// 多个情况
// 适用于多个区块的处理

if (false) {
    consle.log(1)
} else if (false) {
    consle.log(2)
} else if (true) {
    consle.log(3)
} else {
    consle.log(4)
}

// for 循环语句
// 用于简化重复操作

for (var i = 0; i < 10; i++ ) {
    console.log(i) // 循环9次
}

// 1-100整数
for (var i = 1; i <= 100; i++) {
    console.log(i)
}

// sum求和
var sum = 0
for (var i = 1; i <= 100; i++) {
    sum = sum + i
   // sum += i 简写
}
console.log(sum)

// for 与 if 结合使用演示
// 计算1到100间的偶数和
var sum = 0
for (var i = 1; i <= 100; i++) {
    if ( i % 2 === 0) {
        sum += i
    }
}
console.log(sum)

//奇数检测求奇数
var sum = 0
for (var i = 1; i <= 100; i++) {
    if ( i % 2 !== 0) {
        sum += i
    }
}
console.log(sum)

5、函数Function

 function getSum () {
     console.log('开始了')
     var sum = 0
     for (var i = 0; i <= 100; i++) {
         sum += i
     }
     return sum // return作用:设置返回值,结束函数
     // 在往下写就没有意义了
     console.log('结束了')
     // 函数 内外是隔离的
 }
 getSum() // 调用函数 格式:函数名+()  这样是执行了但是看不到数值
 
 var sum = getSum()
 console.log(sum)
 // 函数内声明的变量无法被外界访问,所以需要使用返回值
 
 
 // 函数调用时可以传入不同参数值,来参与函数的代码执行
 
  function getSum (start, end) {
     console.log('开始了')
     var sum = 0
     for (var i = start; i <= end; i++) {
         sum += i
     }
     return sum 
 }
 getSum() // 调用函数 格式:函数名+()  这样是执行了但是看不到数值
 
 var result1= getSum(1, 100)
 console.log(result1)
 
 var result2= getSum(200, 300)
 console.log(result2)
 
 
 // 复合使用
 
 function getSumWithCondition (start, end, fn) {
    var sum = 0
    for (var i = start; i <= end; i++) {
        sum += i
    }
    return sum
}

 var result = getSumWithCondition(50, 100, function (n) {
    if (n % 2 !== 0) {
        return true
    }
    return false
})

console.log(result)

6、数组Array

// 数组
var myArr = [10, 25, 35, 45, 55] 
console.log(myArr.length)
console.log(myArr[0])
console.log(myArr[1])
console.log(myArr)

myArr.push(100)
myArr.unshift(200)
console.log(myArr)

for (var i = 0; i < myArr.length; i++) {
    sum += myArr[i]
    console.log(i, myArr[i])
}
console.log(sum)

myArr.forEach(function (item, index) {
    console.log(item, index)
})

7、对象Object

无序的存储方式

var obj = {
    name: '我要',
    age: 18
}
console.log(obj)
console.log(obj.name)
console.log(obj['name'])

// 遍历
for (var k in obj) {
    console.log(k, obj[k])
}

DOM&Timer

DOM和BOM

DOM:文档对象模型

BOM:浏览器对象模型

1、元素操作DOM Element

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>示例</title>
</head>
<body>
    <div id="block">测试</div>
    <p class="text">默认内容</p>
    <p class="text">默认内容</p>
    <p class="text">默认内容</p>
    <p class="text">默认内容</p>
    <p class="text">默认内容</p>

    <div id="container">
        <p>默认内容</p>
        <p class="item">默认内容</p>
        <p>默认内容</p>
        <p>默认内容</p>
        <p>默认内容</p>
    </div>
    <script>
        // 获取标签
        var block = document.getElementById('block')
        console.log(block)

        // 修改文本内容
        block.textContent = '你好'

        //获取多个标签内容
        // var contents = document.getElementsByTagName('p')
        var contents = document.querySelectorAll('.text')
        var contents = document.querySelectorAll('#container p')
        console.log(contents)
        //使用索引对内容进行操作
        contents[0].textContent = '第N个P'
        // 统一修改
        for (var i = 0; i < contents.length; i++) {
            contents[i].textContent = '新的内容'
        }
        //创建一个数组代替后端返回的数据
        var textArr = [
        '你好',
        '再次',
        '再见'
        ]
        for (var i = 0; i < contents.length; i++) {
            contents[i].textContent = textArr[i]
        }
        // 元素获取
        // 1、根据ID获取
        // 2、根据标签名取

        // querySelectorAll按照选择器进行元素获取的处理方式
        document.querySelectorAll('.text')

        // querySelector只能获取选择器匹配到的第一个元素,用来做单一的获取
        var secondItem = document.querySelector('.item')
        secondItem.textContent =  '替罪的羊'
        // 获取前一个同级元素
        secondItem.previousElementSibling.textContent = '划水的鱼'
        // 获取后一个同级元素
        secondItem.nextElementSibling.textContent = '装饭的桶'

        //获取父元素
        var container = secondItem.parentNode
        console.log(container)
        container.textContent = '新内容'
        //获取内部元素
        var items = container.children
        console.log(items)
        
    </script>
</body>
</html>

2、样式处理Style

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>示例</title>
</head>
<style>
    *{
        margin: 0;
        padding: 0;
    }

    body {
        margin: 10px;
    }
    div{
        width: 100px;
        height: 100px;
        border: 1px dashed #ccc;
        margin-bottom: 10px;
    }

    .changeStyle {
        width: 80px;
        height: 80px;
        background-color: tomato;
    }
</style>
<body>
    <div dir="block">默认内容</div>
    <script>
        var block = document.querySelector('#block')
        block.style.wdith = '80px'
        block.style.height = '80px'
        block.style.backgroundColor = 'tomato'

        //className方式
        block.className = 'changeStyle'

    </script>
</body>
</html>

3、文本处理Content

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>示例</title>
</head>
<style>
    *{
        margin: 0;
        padding: 0;
    }

    body {
        margin: 10px;
    }
    div{
        width: 100px;
        height: 100px;
        border: 1px dashed #ccc;
        margin-bottom: 10px;
    }

    .changeStyle {
        width: 80px;
        height: 80px;
        background-color: tomato;
    }

    .bold-text {
        font-size: 20px;
        font-weight: 700;
    }
</style>
<body>
    <div dir="block">默认内容</div>
    <script>
        var block = document.querySelector('#block')

        // 普通文本
        block.textContent = '普通内容<span class="bold-text">加粗的文本</span>'
        // 普通文本和标签文本的生成
        block.innerHTML = '普通内容<span class="bold-text">加粗的文本</span>'

    </script>
</body>
</html>

4、事件处理Event

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>示例</title>
</head>

<body>
    <div dir="block">默认内容</div>
    <!-- 轮播图 -->
    <ul id="carousel">
        <li class="active" >1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
    <button id="prev">上一张</button>
    <button id="next">下一张</button>
    <script>
        var block = document.querySelector('#block')
        // 事件处理
        // onclick表示交互方式是什么?onclick点击
        // block表示要进行操作的标签
        block.onclick = function (){
            alert('suprise!')
        }
    
        //新的弹窗提醒,避免覆盖,开发中常用
        block.addEventListener('click', function ()  {
            alert('6')
        })
        block.addEventListener('click', function ()  {
            alert('66')
        })
        block.addEventListener('click', function ()  {
            alert('666')
        })
        // 轮播图元素的获取
        var carousel = document.querySelector('#carousel')
        var items = carousel.children
        console.log(items)
        // 按钮
        var prevBtn = document.querySelector('#prevBtn')
        var nextBtn = document.querySelector('#nextBtn')
    
        //上一张按钮
        var index = 0
        nextBtn.addEventListener('click', function () {
            items[index].className = ''
            if (index === items.length + 1) {
                index = +1
            }
            index--
            items[index].className = 'active'
        })
    
        //下一张按钮
        var index = 0
        nextBtn.addEventListener('click', function () {
            items[index].className = ''
            if (index === items.length - 1) {
                index = -1
            }
            index++
            items[index].className = 'active'
        })
    </script>
</body>
<style>
    *{
        margin: 0;
        padding: 0;
    }

    body {
        margin: 10px;
    }
    div{
        width: 100px;
        height: 100px;
        border: 1px dashed #ccc;
        margin-bottom: 10px;
    }

    .changeStyle {
        width: 80px;
        height: 80px;
        background-color: tomato;
    }

    .bold-text {
        font-size: 20px;
        font-weight: 700;
    }
    #carousel li {
        width: 200px;
        line-height: 200px;
        position: absolute;
        text-align: center;
        text-shadow: 0 0 5px #000;
        font-size: 35px;
        color: #fff;
        opacity: 0;
        transition: opacity 1s;
    }
    #carousel li:nth-child(1){
        background-color: gold;
    }
    #carousel li:nth-child(2){
        background-color: brown;
    }
    #carousel li:nth-child(3){
        background-color: grey;
    }
    #carousel li:nth-child(4){
        background-color: orange;
    }
    #carousel li.active {
        opacity: 1;
    }
</style>
</html>

5、定时器Timer

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
</head>

<body>
    <!-- 轮播图 -->
    <ul id="carousel">
        <li class="active" >1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>

    </ul>
    <div class="btu">
        <button id="prev">上一张</button>
        <button id="next">下一张</button>
    </div>

    <script>
        // 按钮
        var prevBtn = document.querySelector('#prevBtn')
        var nextBtn = document.querySelector('#nextBtn')
        // 定时器
        // 延时定时器
        setTimeout(function (){
            console.log('suprise')
        }, 2000) 
        // 间隔执行定时器
        setInterval(function (){
            console.log('间隔2s输出1次')
        }, 2000) 
        //停止
        var timer =  setInterval(function (){
            console.log('间隔2s输出1次')
        }, 2000) 
        //经过6s后停止
        setTimeout(function (){
            clearInterval(timer)
        }, 6000) 
        //轮播图自动播放
        setInterval(function (){
            items[index].className = ''
            if (index === items.length - 1) {
                index = -1
            }
            index++
            items[index].className = 'active'
        }, 1500)
    </script>
</body>

<style>
    
       #carousel li {
        width: 200px;
        line-height: 200px;
        position: absolute;
        text-align: center;
        text-shadow: 0 0 5px #000;
        font-size: 35px;
        color: #fff;
        /* opacity: 0; */
        transition: opacity 1s;
    }
    #carousel li:nth-child(1){
        background-color: gold;
    }
    #carousel li:nth-child(2){
        background-color: brown;
    }
    #carousel li:nth-child(3){
        background-color: grey;
    }
    #carousel li:nth-child(4){
        background-color: orange;
    }
    #carousel li.active {
        opacity: 1;
    }
    #btu{
        width: 300px;
        height: 300px;
    }
</style>
</html>

 

ES6-1语法

1、变量和常量

// 变量声明
let count = 0
count++
// {} 作用域
{
    // 变量
    let count = 0
    count++

    // 常量,一般用于服务端api调用
    const BASE_URL = 'http://localhost:9090/api'

}
// 调用需要在作用域中进行调用,作用域外无法调用

2、模板字符串

// 模板字符串
const str1 = 'abc'
const str2 = "efg"
//新语法 可以使用反引号再使用${str1} 引入外部变量
const str3 = `hij${str1}`
// 也可以通过换行来进行处理
const str4 =`kln${str2}
    这也是字符串的内容
`
console.log(str1)
console.log(str2)
console.log(str3)
console.log(str4)

3、解构赋值

// 适用于数组和对象的解构赋值
// 普通情况下使用需要修改某一个值
const arr = [1, 2, 3]
const v1 = arr[0]
const v2 = arr[1]
// 适用于数组的解构赋值
const [a, b, c] = [1, 2, 3]
console.log(a, b, c)
// 适用于对象的解构赋值 普通
const obj = {
    username: '大佬',
    age: 18,
    gender: '男'
}
// 适用于对象的解构赋值 解构
// 可以使用 原有变量名: 自定义变量名 进行变量名的自定义
// 变量如果太多我们可以使用 ...变量名 获取剩余的其他属性 
// 注 ...otherInfo 只能放在最后位置
const {username, age: userAge, ...otherInfo} = {
    username: '大佬',
    age: 18,
    gender: '男',
    category: 'user'
}
//调用时只需要加上 otherInfo 变量名即可
console.log(username, userAge, otherInfo)

4、数组和对象的扩展

4.1、扩展运算符

// 4、数组和对象的扩展
// 4.1扩展运算符
// ...在 赋值符号 = 前面写表示解构赋值功能 
// ...在 赋值符号 = 后面写表示一个普通的扩展运算符
const arr1 = [1, 2, 3]
const arr2 = [4, 5, 6]
// ...arr1 作用是将arr1元素的所有键给展开 并填充该位置
const arr3 = [100, ...arr1, ...arr2, 10, 20, 30]
// console.log(arr3)

// 对象也可以使用
const obj1 = {
    a: 1
}

const obj2 = {
    b: 2
}

const obj3 = {
    name:'大佬',
    ...obj1,
    ...obj2

}
console.log(obj3)

4.2、数组的方法 Array.from()

// 4.2 数组的方法 Array.from()
// Array.from()可以将伪数组转换为真实数组
function fn () {
    // console.log(arguments)
    // arguments.push(1) // 会报错
    Array.from(arguments).forEach(function (item){
        console.log(item)
    })
}
fn(1, 2, 3, 4)

4.3、 对象的方法 Object.assign()

// 4.3 对象的方法 Object.assign()
// 浅拷贝
const objA = {
    name: '大佬',
    age: 18
}
// 两个数据完全一样的对象
const objB = Object.assign({}, objA)
// objB.name = 'a'
console.log(objA, objB)

// 功能合并

const objC = {
    gender: '男'
}
const objD = Object.assign({}, objA, objC)
console.log(objA, objC, objD)

5、Class类

// 5、Class 语法糖 更像面向对象语言
class A {
    // 构造方法
    constructor (name, age) {
        this.name = name
        this.age = age
    }
    // 自定义方法
    intruduce (){
        console.log(`我是${this.name}, 我${this.age}了`)
    }

}
const a1 = new A ('大佬', 18)
console.log(a1)
a1.intruduce()

// 继承
class B extends A {
    constructor (name, age, gender) {
        super(name, age)
        this.gender = gender
    }
    // 子类方法设置
    sayHello () {
        console.log('你好我是' + this.name)
    }
}

// 创建B类的实例

const b1 = new B ('莉莉', 19, '女')
console.log(b1)
b1.sayHello()
b1.intruduce()

6、箭头函数

// 6、箭头函数

// 匿名函数
const getSum1 = function (n) {
    return n + 3
}
// 匿名函数的简写
const getSum2 = n => n + 3
console.log(getSum2(10))

const getSum3 = (n1, n2) => n1 + n2
console.log(getSum3(10, 20))

// 使用other获取剩余所有的实参 ...other必须放最后
const getSum4 = (n1, n2, ...other) => console.log(n1, n2, other)
console.log(getSum4(10, 20, 30, 100, 200, 500))

// 函数体
const getResult = arr => {
    // 求和
    let sum = 0
    arr.forEach(item => sum += item)
    return sum
}
console.log(getResult([1, 2, 3, 4, 5]))

ES6-2语法

1、Promise异步处理

const p1 = new Promise ((resolve, reject) => {
    // resolve('任务1:成功得到的数据')
    reject('任务1:失败得到的数据')
})
// console.log(p1)
// then表示接下来
p1.then(data => {
    console.log(data)
    return new Promise((resolve, reject) => {
        resolve('任务2:成功得到的数据')
        // reject('任务2:失败得到的数据')
    })
}, err => {
    console.log('任务1:失败了')
    throw new Error('任务1:失败')
})
// 用来接收和处理上一个then的内容
.then(data => {
    console.log(data)
}, err => {
    console.log('任务2:失败了')
})
// 错误处理
// .catch(err => {
//     console.log(err)
// })

// 格式如下 可以结合上面的内容看
// p1.then().then().then().then().then().catch()

1.1、Async await

// Async 基于Promise异步操作的简化功能,不能完全取代
// 需要搭配await使用

//1. 准备一个返回promise对象的函数
function asyncTask() {
    return new Promise((resolve, reject) => {
        // 假装有一些关键代码...
        const isSuccess = true
        if (isSuccess) {
            resolve('任务2:...成功的处理结果')
        } else {
            reject('任务2:...失败的处理结果')
        }
    })
}
//2、为使用await的函数添加async
async function main() {
    console.log('任务1')
    const data = await asyncTask()
    console.log(data)
    console.log('任务3')
    await asyncTask()
    await asyncTask()
    await asyncTask()
}
main()

2、Proxy代理

<body>
    <div id="container">默认内容</div>
    <script src="main.js"></script>
</body>


// 2、Proxy 代理对象
Object.defineProperty() // 做属性定义
const obj = { name: '莉莉', age: 18 }
// console.log(obj.name)
// obj.name = 'abc'
// console.log(obj)
const container = document.getElementById('container')
container.textContent = obj, name
obj.name = 'abc'
container.textContent = obj.name

// 语法
const obj = { name: '李希', age: 18 }
const container = document.getElementById('container')
container.textContent = obj.name
// Proxy类
const p1 = new Proxy(obj, {
    // 获取方法
    // target:数据对象,
    // property:属性名, 
    // receiver当前使用的实例名 没啥用
    get(target, property, receiver) {
        return obj[property]
    },
    // 设置方法
    // value:你要修改成什么值
    set(target, property, value, receiver) {
        obj[property] = value
        container.textContent = obj.name
    }
})

console.log(p1.name)
p1.age = 21
p1.name = 'jack'

Object.defineProperty()

3、Module模块

    <script src="main.js" type="module"></script>
    
    // 3、Module模块
// ESM:在浏览器里使用javascript
// ComminJS在Node.js中使用

//ESM
import moduleA from './a'
import moduleB from './b'
import { aTitle, aFn } from './a'
import { bTitle, bFn as bFunction } from './b'
// 可以使用as来定义别名

console.log(moduleA)
console.log(moduleB)
console.log(aTitle, aFn, bTitle, bFunction)

// ComminJS
const moduleA = require('./c')
console.log(moduleA)
a.js
// export导出
export const aTitle = 'a模块'
export function aFn () {
    console.log('a模块')
}

export default {
    name: 'a模块'
}



b.js
// export导出
export const aTitle = 'b模块'
export function bFn () {
    console.log('b模块')
}

export default {
    name: 'b模块'
}



c.js
module.exports = {
    a: 1,
    b: 2,
    c: 3
}

exports.a = 1
exports.b = 2
exports.c = 3


index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="container">默认内容</div>
    <script src="main.js" type="module"></script>
</body>
</html>

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

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

相关文章

Oracle程序常驻程序内存优化【数据库实例优化系列二】

Oracle系统参数调整【数据库实例优化系列一】-CSDN博客 Oracle数据库中有一个软件包 dbms_shared_pool,它可以keep和unkeep,将用户经常使用的程序,比如存储过程、函数、序列、触发器、游标以及java source等数据库对象,长期保存在这一块区域。这些程序可以常驻这个区域(s…

【全开源】餐饮点餐系统小程序源码独立部署/上线/维护/更新_博纳软云

餐饮点餐系统小程序源码 基于ThinkPHPFastAdminUniApp开发的餐饮点餐系统&#xff0c;主要应用于餐饮&#xff0c;例如早餐、面馆、快餐、零食小吃等快捷扫码点餐需求&#xff0c;标准版本仅支持先付款后就餐模式&#xff0c;高级版本支持先付后就餐和先就餐后付费两种模式 餐…

【linuxC语言】fcntl和ioctl函数

文章目录 前言一、功能介绍二、具体使用2.1 fcntl函数2.2 ioctl函数 三、拓展&#xff1a;填写arg总结 前言 在Linux系统编程中&#xff0c;经常会涉及到对文件描述符、套接字以及设备的控制操作。fcntl和ioctl函数就是用来进行这些控制操作的两个重要的系统调用。它们提供了对…

系统评估和优化——Datawhale笔记

评估优化生成部分 在前面的章节中&#xff0c;我们讲到了如何评估一个基于 RAG 框架的大模型应用的整体性能。通过针对性构造验证集&#xff0c;可以采用多种方法从多个维度对系统性能进行评估。但是&#xff0c;评估的目的是为了更好地优化应用效果&#xff0c;要优化应用性能…

Creo Assembly “Save As“时,为什么关联的Drawing无法Save As

问题描述&#xff1a; Creo Assembly 进行“另存为”&#xff0c;勾选了“Copy Drawings”。但操作结果是&#xff0c;该Assembly相关联的Drawing没有被“另存为”。 原因分析&#xff1a; 查看Workspace&#xff0c;发现该Assembly a.asm相关联的Drawing为b.drw&#xff0…

与Apollo共创生态:Apollo 7周年大会带给我的启发和心得

Apollo 7周年大会 前不久的Apollo 7周年大会&#xff0c;吸引到我这个对自动驾驶有着浓厚兴趣的开发者&#xff0c;真的精彩&#xff0c;受益匪浅。Apollo 7周年大会展示了Apollo在自动驾驶领域的创新成果&#xff0c;探讨自动驾驶技术的未来发展趋势&#xff0c;并推动自动驾…

【好书推荐8】《智能供应链:预测算法理论与实战》

【好书推荐8】《智能供应链&#xff1a;预测算法理论与实战》 写在最前面编辑推荐内容简介作者简介目录精彩书摘前言/序言我为什么要写这本书这本书能带给你什么 致谢 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴…

想开发一款带有视频通话/共享屏幕功能的产品?那WebRTC是你必须要知道的!

作为一名技术爱好者&#xff0c;我总是对各种协议、各种功能感兴趣&#xff0c;两周前我想为我的开源项目ChatCraft集成视频通话功能&#xff0c;我就开始了对应技术的研究&#xff0c;然后我盯上了WebRTC。在这个研究过程中&#xff0c;我恶补了大量有关WebRTC的知识&#xff…

8.机器学习-十大算法之一朴素贝叶斯(Naive Bayes)算法原理讲解

8.机器学习-十大算法之一朴素贝叶斯&#xff08;Naive Bayes&#xff09;算法原理讲解 一摘要二个人简介三朴素贝叶斯算法简介朴素贝叶斯算法概念贝叶斯方法朴素贝叶斯算法贝叶斯公式 四贝叶斯算法的核心思想&#xff1a;利用贝叶斯定理进行分类五优缺点优点缺点 六朴素贝叶斯原…

从浏览器输入url到页面加载(八)你的web网站有几台服务器?

你有没有想过一个问题&#xff0c;做为一名前端开发&#xff0c;你的网站上线后&#xff0c;准备了几台服务器&#xff1f;前端静态资源用了几台&#xff0c;你调接口的那个后端部署了几台&#xff1f; 目录 1 没接触过这个问题很正常 2 当访问量上升的时候 2.1 提升带宽 …

计算机科学与技术就业方向和前景怎么样

计算机科学与技术专业的就业方向极为广泛&#xff0c;方向可以是软件开发与工程、网络与信息安全、数据科学与大数据分析等&#xff0c;几乎渗透到现代社会的每一个角落。以下是上大学网 &#xff08;www.sdaxue.com)对计算机科学与技术专业一些主要的就业方向及其前景分析&…

GitLab(史上最全GitLab安装使用文章!!!)

GitLab 是一个基于网络的Git仓库管理工具&#xff0c;是开源的。基本每个公司都会有属于自己公司内部的GitLab 官方网站&#xff1a;https://about.gitlab.com/ GitLab文档&#xff1a;https://docs.gitlab.cn/jh/install/requirements.html 安装 所需配置 这里采用Cento…

PHP源码_最新Ai对话系统网站源码 ChatGPT+搭建教程+前后端

基于ChatGPT开发的一个人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人类一样来聊天交流&#xff0c;甚至能完成撰写邮件、视频脚本、文案、翻译、代码&#xff0c;写论…

Cloudflare防火墙其他WAF设置

其他WAF设置 缓存设置 缓存设置好也可以帮助我们抵挡巨量的CC攻击。有些CC是很多IP随即攻击一个地址&#xff0c;如果我们的安全策略没有拦截到攻击。但是我们设置了缓存&#xff0c;那这些请求则会在CloudFlare边缘节点直接将缓存内容返回给请求。也达到了抗攻击的效果。 缓…

13.4.1 实验1:配置VTP

1、使用目的 通过本实验可以掌握 VTP三种模式的区别。VTP工作原理。VTP的配置和调试方法 2、实验拓扑 配置VTP的实验拓扑如下图所示 3、实验拓扑 3.1、实验准备 通过命令 delete nash:van.dat和erasestartup-config把3台交换机的配置清除干净&#xff0c;重启交换机&#…

基于深度学习的3D目标检测与跟踪

目标检测和跟踪对于自动驾驶来说是至关重要和基础的任务&#xff0c;旨在从场景中识别和定位出那些预定义类别的对象。在所有形式的自动驾驶数据中&#xff0c;3D点云学习引起了越来越多的关注。目前&#xff0c;有许多用于3D目标检测的深度学习方法。然而&#xff0c;鉴于点云…

MySQL数据库——事务操作-begin-commit-rollback

schooldb库——utf8字符集——utf8_general_ci排序规则 先创建库&#xff0c;再去使用下列的DDL语句。 DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,createDate datetime DEFAULT NULL COMMENT 创建时间,modifyDate datetime DEFAULT NULL …

stm32单片机开发一、中断之外部中断实验

stm32单片机的外部中断和定时器中断、ADC中断等都由stm32的内核中的NVIC模块控制&#xff0c;stm32的中断有很多中&#xff0c;比如供电不足中断&#xff0c;当供电不足时&#xff0c;会产生的一种中断&#xff0c;这么多中断如果都接在CPU上&#xff0c;或者说CPU去处理&#…

【LAMMPS学习】八、基础知识(5.2)粒度模型

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

蓝网科技临床浏览系统 deleteStudy SQL注入漏洞复现(CVE-2024-4257)

0x01 产品简介 蓝网科技临床浏览系统是一个专门用于医疗行业的软件系统,主要用于医生、护士和其他医疗专业人员在临床工作中进行信息浏览、查询和管理。 0x02 漏洞概述 蓝网科技临床浏览系统 deleteStudy接口处SQL注入漏洞,未经身份验证的恶意攻击者利用 SQL 注入漏洞获取…