【复习 自用】JavaScript知识汇总(基础版)

news2024/9/20 20:48:41

注:之前学过JavaScript,本贴仅用于复习(自用),建议没基础的朋友先学基础。会混入typescript!

更新中~~~~~~~~~~

  • 对象.属性和对象[‘属性’]的区别:总的来说没啥区别,但是,
    !!!如果需要用变量来定义对象的属性=》用对象[‘属性’],而不是对象.变量
//  判断一个字符串 'abcoefoxyozzopp' 中出现次数最多的字符,并统计其次数。
        // o.a = 1
        // o.b = 1
        // o.c = 1
        // o.o = 4
        // 核心算法:利用 charAt() 遍历这个字符串
        // 把每个字符都存储给对象, 如果对象没有该属性,就为1,如果存在了就 +1
        // 遍历对象,得到最大值和该字符
        var str = "abcoefoxyozzopp";
        var o = {};
        for (var i = 0; i < str.length; i++) {
            var chars = str.charAt(i); // chars 是 字符串的每一个字符
            if (o[chars]) {
                // o[chars] 得到的是属性值
                o[chars]++;
            } else {
                o[chars] = 1;
            }
        }
        console.log(o);
        // 2. 遍历对象
        var max = 0;
        var ch = "";
        for (var k in o) {
            // k 得到是 属性名
            // o[k] 得到的是属性值
            if (o[k] > max) {
                max = o[k];
                ch = k;
            }
        }
        console.log(max);
        console.log("最多的字符是" + ch);
  • prompt(info); 浏览看弹出输入框,用户可以输入
  • === 全等 要求值和数据类型都一致
    eg: 37=== ‘37’ =>false 37==‘37’ =>true
  • 数组转换为字符串
var arr = ['red', 'green', 'blue', 'pink'];
var str = '';
var separator = '|';
for (var i = 0; i < arr.length; i++) {
   str += arr[i] + separator;
}
console.log(str);
// red|green|blue|pink
  • 通过修改 length 长度新增数组元素(声明变量未给值,默认值就是 undefined)
  • 通过修改数组索引新增数组元素
var arr = ['red', 'green', 'blue', 'pink'];
arr[4] = 'hotpink';
console.log(arr);
  • 删除指定元素
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var newArr = [];   // 空数组的默认的长度为 0 
// 定义一个变量 i 用来计算新数组的索引号
for (var i = 0; i < arr.length; i++) {
    // 找出大于 10 的数
    if (arr[i] != 0) {
        // 给新数组
        // 每次存入一个值,newArr长度都会 +1  
        newArr[newArr.length] = arr[i];
    }
}
console.log(newArr);
  • 将数组 [2, 0, 6, 1, 77, 0, 52, 0, 25, 7] 中大于等于 10 的元素选出来,放入新数组
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
    if (arr[i] >= 10) {
        // 给新数组
        newArr[newArr.length] = arr[i];
    }
}
console.log(newArr);
  • 形参实参个数不匹配:形参大于实参=》未匹配到数值的形参定义为undefined 实参大于形参=》只取形参个数
  • 泛型约束
function prop<T, K extends keyof T>(obj: T, key: K) {
    //定义了类型T
    //并使用extends关键字继承了object类型的子类型
    //然后使用keyof操作符获取T类型的所有键(返回值为联合类型)
    //利用extends的约束 k类型必须为keyof T联合类型的子类型
    return obj[key]
}
  • arguments展示形式是一个伪数组,因此可以进行遍历。
    ①:具有 length 属性
    ②:按索引方式储存数据
    ③:不具有数组的 push , pop 等方法
  • arguments:arguments 对象中存储了传递的所有实参,展示形式是一个伪数组,因此可以进行遍历。
//javascript中
// 函数声明
function fn() {
    console.log(arguments);  //里面存储了所有传递过来的实参
    console.log(arrguments.length); // 3
    console.log(arrguments[2]); // 3
}

// 函数调用
fn(1,2,3);
//typescript中
//数组传参
function Arr(...args:any):void{
    console.log(arguments) //arguments是所有参数的集合
    let arr:IArguments = arguments
}
Arr(4,5,6)
//其中 IArguments 是 TypeScript 中定义好了的类型,它实际上就是:
interface IArguments {
    [index: number]: any;
    length: number;
    callee: Function;
    }
  • 匿名函数
// 这是函数表达式写法,匿名函数后面跟分号结束
var fn = function(){...};

// 调用的方式,函数调用必须写到函数体下面
fn();
  • 在es6前没有块级作用域
  • 变量预解析(变量提升):变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升
console.log(num);  // 结果是多少?
var num = 10;   
// undefined

//相当于执行了以下代码
var num;		// 变量声明提升到当前作用域最上面
console.log(num);
num = 10;		// 变量的赋值不会提升

  • 函数预解析(函数提升):函数的声明会被提升到当前作用域的最上面,但是不会调用函数。
	fn();				//11
function fn() {
    console.log('11');
}

练习:

// 练习2
var num = 10;
function fn(){
    console.log(num);		//undefined
    var num = 20;
    console.log(num);		//20
}
fn();
// 最终结果是 undefined 20
//上述代码相当于执行了以下操作
var num;
function fn(){
    var num;
    console.log(num);
    num = 20;
    console.log(num);
}
num = 10;
fn();
// 练习3
var a = 18;
f1();

function f1() {
    var b = 9;
    console.log(a);
    console.log(b);
    var a = '123';
}
//上述代码相当于执行了以下操作
var a;
function f1() {
    var b;
    var a
    b = 9;
    console.log(a);	//undefined
    console.log(b);	//9
    a = '123';
}
a = 18;
f1();
// 练习4
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
    var a = b = c = 9;
    // 相当于 var a = 9; b = 9;c = 9;  b和c的前面没有var声明,当全局变量看
    // 集体声明 var a = 9,b = 9,c = 9;
    console.log(a);
    console.log(b);
    console.log(c);
}
//上述代码相当于执行了以下操作
function f1() {
    var a;
    a = b = c = 9;
    console.log(a);	//9
    console.log(b);	//9
    console.log(c);	//9
}
f1();
console.log(c);	//9
console.log(b);	//9
console.log(a);	//报错 a是局部变量
  • 利用 new Object 创建对象
var obj = new Object(); //创建了一个空的对象
obj.name = '张三丰';
obj.age = 18;
obj.sex = '男';
obj.sayHi = function() {
    console.log('hi~');
}

//1.我们是利用等号赋值的方法添加对象
//2.每个属性和方法之间用分号结束
console.log(obj.name);
console.log(obj['sex']);
obj.sayHi();
  • 利用构造函数创建对象
//1. 构造函数名字首字母要大写
//2. 构造函数不需要return就可以返回结果
//3. 调用构造函数必须使用 new
//4. 我们只要new Star() 调用函数就创建了一个对象
//5. 我们的属性和方法前面必须加this
function Star(uname,age,sex) {
    this.name = uname;
    this.age = age;
    this.sex = sex;
    this.sing = function(sang){
        console.log(sang);
    }
}
var ldh = new Star('刘德华',18,'男');
console.log(typeof ldh) // object对象,调用函数返回的是对象

console.log(ldh.name);
console.log(ldh['sex']);
ldh.sing('冰雨');
//把冰雨传给了sang

var zxy = new Star('张学友',19,'男');
  • 遍历对象的属性:for…in 语句用于对数组或者对象的属性进行循环操作
for(变量 in 对象名字){
    // 在此执行代码
}
  • Math对象
// Math数学对象,不是一个构造函数,所以我们不需要new 来调用,而是直接使用里面的属性和方法即可

Math.PI		 			// 圆周率
Math.floor() 	 		// 向下取整
Math.ceil()             // 向上取整
Math.round()            // 四舍五入版 就近取整   注意 -3.5   结果是  -3 
Math.abs()		 		// 绝对值
Math.max()/Math.min()	// 求最大和最小值 

eg:猜数字游戏

//猜数字
function randomNum(min: number, max: number) {
    return Math.floor((Math.random() * (max - min + 1) + min));
}

let data = randomNum(1, 10);
let inPut: number = 1;
while (true) {
    inPut = prompt('请输入1~10之间的一个整数');
    if (data > inPut) {
        alert('数字小了');
    }
    if (data < inPut) {
        alert('数字大了')
    }
    else {
        alert('猜对了');
        break;
    }
}
  • Date()方法
    得到获取日期指定的部分,手动得到特殊格式
var date = new Date();
console.log(date.getFullYear()); // 返回当前日期的年 2023
console.log(date.getMonth() + 1);  //返回的月份小一个月 记得月份 +1
console.log(date.getDate); //返回的是几号
console.log(date.getDay());  //周一返回1 周6返回六 周日返回0


// 写一个 2023年 1月 18日 星期三
var date = new Date(); 
var year =  date.getFullYear();
var month = date.getMonth() + 1;
var dates = date.getDate();
console.log('今天是' + year +'年' + month + '月' + dates +'日' );

// 封装一个函数返回当前的时分秒 格式 08:08:08
function getTimer() {
    var time = new Date();
    var h = time.getHours();
    h = h < 10 ? '0' + h : h;
    var m = time.getMinutes();
    m = m < 10 ? '0' + m : m;
    var s = time.getSeconds();
    s = s < 10 ? '0' + s : s;
    return h + ':' + m + ':' + s;
}
console.log(getTimer());

获得日期的总的毫秒形式

// 获取Date总的毫秒数 不是当前时间的毫秒数 而是距离1970年1月1号过了多少毫秒数

// 实例化Date对象
var date = new Date();

// 1 .通过 valueOf()  getTime() 用于获取对象的原始值
console.log(date.valueOf());  //得到现在时间距离1970.1.1总的毫秒数
console.log(date.getTime());

// 2.简单的写法
var date1 = +new Date();  // +new Date()返回的就是总的毫秒数,
console.log(date1);

// 3. HTML5中提供的方法 获得总的毫秒数 有兼容性问题
console.log(Date.now());

倒计时案例

function countDown(time) {
    var nowTime = +new Date(); //没有参数,返回的是当前时间总的毫秒数
    var inputTime = +new Date(time); // 有参数,返回的是用户输入时间的总毫秒数
    var times = (inputTime - nowTime) / 1000; //times就是剩余时间的总的秒数

    var d = parseInt(times / 60 / 60 / 24); //天数
    d < 10 ? '0' + d : d;
    var h = parseInt(times / 60 / 60 % 24); //小时
    h < 10 ? '0' + h : h;
    var m = parseInt(times / 60 % 60); //分
    m < 10 ? '0' + m : m;
    var s = parseInt(times % 60); //秒
    s < 10 ? '0' + s : s;
    return d + '天' + h + '时' + m + '分' + s + '秒';
}
console.log(countDown('2020-11-09 18:29:00'));
var date = new Date;
console.log(date); //现在时间
  • 检测是否为数组:
  1. instanceof 运算符,可以判断一个对象是否属于某种类型
  2. Array.isArray() 用于判断一个对象是否为数组,isArray() 是 HTML5 中提供的方法
var arr = [1, 23];
var obj = {};
console.log(arr instanceof Array); // true
console.log(obj instanceof Array); // false
console.log(Array.isArray(arr));   // true
console.log(Array.isArray(obj));   // false
  • 添加/删除数组元素
// 1.push() 在我们数组的末尾,添加一个或者多个数组元素 push 推
var arr = [1, 2, 3];
arr.push(4, '秦晓');
console.log(arr);
console.log(arr.push(4, '秦晓'));
console.log(arr);
// push 完毕之后,返回结果是新数组的长度


// 2. unshift 在我们数组的开头 添加一个或者多个数组元素
arr.unshift('red');
console.log(arr);

// pop() 它可以删除数组的最后一个元素,一次只能删除一个元素
arr.pop(); //不加参数
// shift() 它可以删除数组的第一个元素,一次只能删除一个元素
arr.shift(); //不加参数
  • 数组排序
// 1.翻转数组
var arr = ['pink','red','blue'];
arr.reverse();
console.log(arr);

// 2.数组排序(冒泡排序)
var arr1 = [3,4,7,1];
arr1.sort();
console.log(arr1);

// 对于双位数
var arr = [1,64,9,61];
arr.sort(function(a,b) {
     return b - a;  //降序的排列
     return a - b; //升序
 	}
 )
  • 数组索引
//返回数组元素索引号方法 indexOf(数组元素)  作用就是返回该数组元素的索引号
//它只发返回第一个满足条件的索引号
//如果找不到元素,则返回-1
var arr = ['red','green','blue','pink','blue'];
console.log(arr.indexOf('blue'));  // 2

console.log(arr.lastIndexOf('blue')); // 4
  • 数组去重
    数组 . indexof ( 数组 [ 数组元素 ] )
    =》如果返回-1说明新数组里面没有该元素
    =》如果返回数字 该数字就是该元素在数组的索引
// 封装一个去重的函数 unique 独一无二的
function unique(arr) {
    var newArr = [];
    for (var i = 0; i < arr.length; i++) {
        if (newArr.indexOf(arr[i]) === -1) {
            newArr.push(arr[i]);
        }
    }
    return newArr;
}
var demo = unique(['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b']);
console.log(demo);
  • 数组转化成字符串
  1. tostring() 把数组转换成字符串,逗号分隔每一项
  2. join(‘分隔符’) 方法用于把数组中的所有元素转换成为一个字符串
  3. concat() 连接多个数组 返回一个新的数组
  4. splice() 数组删除splice(第几个开始要删除的个数)返回被截取项目的新数组
  5. slice() 数组截取slice(begin,end) 返回被删除项目的新数组,这个会影响原数组
  • 基本包装类型:基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。JavaScript 还提供了三个特殊的引用类型:String、Number和 Boolean。
var str = 'andy';
console.log(str.length);

// 1.生成临时变量,把简单类型包装为复杂数据类型
var temp = new String('andy');
// 2.赋值给我们声明的字符变量
str = temp;
// 3.销毁临时变量
temp = null;
  • 字符串的不可变:指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间。
var str = 'abc';
str = 'hello';
// 当重新给 str 赋值的时候,常量'abc'不会被修改,依然在内存中
// 重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
// 由于字符串的不可变,在大量拼接字符串的时候会有效率问题
var str = '';
for(var i = 0; i < 10000;  i++){
    str += i;
}
console.log(str);
// 这个结果需要花费大量时间来显示,因为需要不断的开辟新的空间
  • 根据字符返回位置:字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串
//  查找字符串 “abcoefoxyozzopp” 中所有o出现的位置以及次数
//先查找第一个o出现的位置,然后,只要 indexOf返回的结果不是 -1 就继续往后查找,
//因为 indexOf 只能查找到第一个,所以后面的查找,一定是当前索引加1,从而继续查找

var str = "oabcoefoxyozzopp";
var index = str.indexOf('o');
var num = 0;
// console.log(index);
while (index !== -1) {
    console.log(index);
    num++;
    index = str.indexOf('o', index + 1);
}
console.log('o出现的次数是: ' + num);
  • 根据位置返回字符
    在这里插入图片描述
  • 字符串操作方法
    在这里插入图片描述
  • replace()方法:replace(被替换的字符,要替换为的字符串)
<script>
    // 1. 替换字符 replace('被替换的字符', '替换为的字符')  它只会替换第一个字符
    var str = 'andyandy';
    console.log(str.replace('a', 'b'));
    // 有一个字符串 'abcoefoxyozzopp'  要求把里面所有的 o 替换为 *
    var str1 = 'abcoefoxyozzopp';
    while (str1.indexOf('o') !== -1) {
        str1 = str1.replace('o', '*');
    }
    console.log(str1);
</script>
  • split()方法:split() 方法用于切分字符串,它可以将字符串切分为数组。在切分完毕之后,返回的是一个新数组。
  • 复杂类型传参
<script>
    // 复杂数据类型传参
    function Person(name) {
        this.name = name;
    }

    function f1(x) { // x = p
        console.log(x.name); // 2. 这个输出什么 ?  刘德华   
        x.name = "张学友";
        console.log(x.name); // 3. 这个输出什么 ?   张学友
    }
    var p = new Person("刘德华");
    console.log(p.name); // 1. 这个输出什么 ?   刘德华 
    f1(p);
    console.log(p.name); // 4. 这个输出什么 ?   张学友
</script>

参考资料

  • https://blog.csdn.net/Augenstern_QXL/article/details/119250137
  • https://www.bilibili.com/video/BV1Sy4y1C7ha/?vd_source=8c0b9dc47f516c774fd7562538579fc5

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

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

相关文章

办公必备的快捷键,轻松助你键步如飞

作为职场人&#xff0c;你不会只会用Ctrl C和Ctrl V吧&#xff1f;掌握更多的办公快捷键&#xff0c;可以大大提高工作效率&#xff01;今天教大家几个好用的快捷键&#xff01;现在收收藏起来吧&#xff01;快捷键一&#xff1a;winL&#xff08;锁屏&#xff09; 电脑锁屏可以…

【NI Multisim 14.0虚拟仪器设计——放置虚拟仪器仪表(功率表)】

目录 序言 &#x1f34d;放置虚拟仪器仪表 &#x1f349;功率表 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设计者方便、快捷地使用虚拟元器件和仪器、仪表进行电路设计和仿真。 首先启动NI Multisim 14.0&#xff0c;打开如图所示的启动界面&#x…

opencv的图像基本操作_2

import cv2 #图像BGRimport numpy as npimport matplotlib.pyplot as plt #Matplotlib是RGB腐蚀操作kernel np.ones((3,3), np.uint8) #选择3*3卷积核&#xff0c;3*3括起来&#xff0c;(3,3)erosion cv2.erode(img, kernel, iterations 1) #erode腐蚀函数&#xff0c; iter…

【LeetCode】生命游戏 [M](矩阵)

289. 生命游戏 - 力扣&#xff08;LeetCode&#xff09; 一、题目 根据 百度百科 &#xff0c; 生命游戏 &#xff0c;简称为 生命 &#xff0c;是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 给定一个包含 m n 个格子的面板&#xff0c;每一个格子都可以看成是一个…

2023年mybatis常见面试题10道

1. MyBatis是什么&#xff1f;Mybatis 是一个半 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它内部封装了 JDBC&#xff0c;开发时只需要关注 SQL 语句本身&#xff0c;不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生…

Hyper-V三种虚拟网络类型的理解

Windows 10除家庭版之外都内置了Hyper-V&#xff0c;但是Win10系统上Hyper-V虚拟网络的设置方法却与之前版本的Hyper-V有些不同&#xff0c;最近在折腾了无数遍之后&#xff0c;总算有些心得&#xff1a;先说说虚拟网络的三种类型。Hyper-v支持外部、内部、专用三种网络&#x…

蓝桥杯STM32G431RBT6学习——定时器中断

蓝桥杯STM32G431RBT6学习——定时器中断 前言 从网络上的资料来看&#xff0c;蓝桥杯嵌入式好像并不考外部中断&#xff08;毕竟通常只是个按键应用&#xff09;&#xff0c;因此跳过进行定时器的学习。 STM32单片机的定时器通常分为高级定时器、通用定时器、基本定时器三种&…

111、【树与二叉树】leetcode ——669. 修剪二叉搜索树:递归法(C++版本)

题目描述 解题思路 本题的关键是用好递归这个结构&#xff0c;用好每次他向下的遍历和返回的值。每一次递归时&#xff0c;相当于解决与之前相同的问题&#xff0c;因此先按某一种类子问题进行讨论&#xff08;仅有三个结点的满二叉树&#xff09;&#xff0c;当递归的方式向下…

二本学历5年经验的程序员,出去面试被碾压~

目录 1、从一个求职案例引入2 、学历差距&#xff1a;面试官的第一印象3、公司背景差距&#xff1a;你的人生名片4、技术差距&#xff1a;硬核能力的欠缺5、架构能力的差距6、面试结果的分析 这篇文章&#xff0c;聊一个很多人感兴趣的话题&#xff0c;小公司的Java工程师和大…

计网必会:HTPP详解、cookie、缓存

文章目录应用层协议Web和HTTPHTTP 概述采用非持续连接的HTTPRTT 往返时间的定义**三次握手过程**采用持续连接的HTTPHTTP到底采用哪个&#xff1f;HTTP 的报文格式请求报文功效格式响应报文状态码格式Cookie什么是cookieWeb缓存在学习的过程很多人都遇到了HTTP和Cookie&#xf…

【matplotlib】19.基本用法

#【matplotlib】19.基本用法 2021.1.19 画figure图基本方法。参考&#xff1a; https://m.runoob.com/matplotlib/matplotlib-pyplot.html https://mofanpy.com/tutorials/data-manipulation/plt/figure matplotlib 是python的画图包 19.1 基础使用 plot图&#xff0c;就是以…

JavaEE2-Spring核心与设计思想

目录 1.Spring是什么&#xff1f; 2.容器是什么&#xff1f; 3.IoC是什么&#xff1f; 3.1.传统程序开发 3.2.控制反转式程序开发 3.3.对比总结规律 4.理解Spring IoC 4.1.将对象(Bean)存入到容器(Spring)&#xff1b; 4.2.从容器中取出对象。 5.DI概念说明 1.Spring…

LINUX---进程

目录相关概念1.什么是程序&#xff0c;什么是进程&#xff0c;有什么区别2.如何查看系统中有哪些进程3.进程标识符4.父进程&#xff0c;子进程5.C程序的存储空间是如何分配的创建进程函数forkvforkfork创建进程:vfork创建进程&#xff1a;进程退出正常退出&#xff1a;异常退出…

在XXX中找到了XXX的副本,但是当前代码与XXX中内置的版本不同【几种解决方案】

Microsoft VS警告类似如图所示&#xff1a; 然后发现编译编写好的代码无法打断点。定义的变量无法获取。 方案一&#xff1a; 把提示的该文件备份在其他文件夹一份&#xff0c;然后在项目中删除该文件。再把备份的文件放到该项目中。然后再编译。 方案二&#xff08;参考该博客…

Udev设备管理器

udev 引入 在2.4内核中 引入了 devfs&#xff0c;他支持设备节点的动态创建。devfs提供了在内存中的文件系统中创建设备节点的能力。设备驱动程序能够自主的管理自己的设备文件。而命名节点的任务还是落到了设备驱动程序头上。但是&#xff0c;设备命名策略是可管理的&#xf…

【设计模式】结构型模式·适配器模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 写作不易&#xff0c;如果您觉得写的不错&#xff0c;欢迎给博主来一波点赞、收藏~让博主更有动力吧&#xff01; 一. 概述 将一个类的接口转换成客户希望的另外一个接口&#xff0c;使得原本接口不兼容而不能一…

分布式搜索引擎--Elasticsearch

1.1 相关术语 和mysql类比 索引&#xff1a;数据库&#xff0c;database&#xff0c;6.0以后变化&#xff0c;对应表 类型&#xff1a;table&#xff0c;6.0以后变化&#xff0c;废弃 文档&#xff1a;一张表里的一行 字段&#xff1a;一个属性就是一个字段 和分布式相关 集群…

NLP学习笔记(六) Transformer简明介绍

大家好&#xff0c;我是半虹&#xff0c;这篇文章来讲 Transformer\text{Transformer}Transformer&#xff0c;想要获取更多相关文章&#xff0c;欢迎关注 自然语言处理 专栏 在之前的两篇文章中&#xff0c;我们介绍过序列到序列模型以及注意力机制在序列到序列模型中的应用 …

Linux开启Docker远程访问并设置安全访问(证书密钥),附一份小白一键设置脚本哦!

前言 喜欢折腾慢慢看&#xff0c;不喜欢折腾直接跳到小简下文的一键脚本那里&#xff0c;两分钟搞好。 我的博客&#xff1a;https://blog.ideaopen.cn 我的公众号&#xff1a;小简聊开发 开启远程访问 编辑docker.service文件 vi /usr/lib/systemd/system/docker.service # …

Python FastAPI 框架 操作Mysql数据库 增删改查

2 比 1 更容易理解&#xff0c;可以先看2&#xff08;单文件级别&#xff09; 1、FastAPI 框架 操作Mysql数据库(项目多文件级别) FastAPI 可以使用任何您想要的关系型数据库。 在这里&#xff0c;让我们看一个使用着SQLAlchemy的示例。 您可以很容易地将SQLAlchemy支持任何…