JavaScript面向对象笔记(4)

一、正则表达式

1.正则表达式概述

Regular Expression:是用于匹配字符串组合的模式,再javaScript中,正则表达式也是对象。

正则表达式通常被用来检索、替换某个模式(规则)的文本。例如:表单校验,用户名只能输入英文字母、数字或下划线。昵称输入框中可以匹配中文。

此外正则表达式还可以替换一些敏感词。或者从字符串中获取我们想要特定部分(字符串内容提取)等。

其它语言也有正则表达式,本阶段我们主要利用的是javaS次日普通的正则表达式进行表单验证。

2.正则表达式特点

  • 灵活性、逻辑性和功能性非常的强
  • 可以迅速地用极简单的方式达到字符串的复杂控制
  • 对于刚接触的人来说,上手也是比较容易

3.正则表达式再js中的使用

3.1 正则表达式的创建

在javaScript中,可以通过两种方式创建正则表达式

方式一
var reg = new RegExp(正则表达式)
方式二

利用字面量的方式创建正则表达式

var reg = /正则表达式/
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>01正则表达式的创建方式</title>
</head>
<body><script>//1.利用RegExp对象来创建正则表达式var reg1 = new RegExp(/123/);console.log(reg1);//2.利用字面量的方式创建正则表达式var reg2 = /123/console.log(reg2);//3. 在正则表达式中有一个test方法可以用来检测字符串是否符合正则表达式console.log(reg1.test(123));console.log(reg1.test('abc'));</script>
</body>
</html>

3.2 正则表达式中的特殊字符

3.2.1 正则表达式的组成

MDN文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_expressions

正则表达式中的边界符(位置符),用来提示字符所在的位置,主要有两个位置符

边界符说明
^表示匹配行首的文本(以谁开始)
$表示匹配行尾的文本(以谁结束)

如果上面的两个在一起,表示必须是精确匹配

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>02边界符</title>
</head>
<body><script>//正则表达式里面不需要加引号,不管是hi数字型还是字符串型//  /abc/  表达的意思是含有abc这个字符串都返回truevar reg = /abc/;  console.log(reg.test('abc'));   //trueconsole.log(reg.test('abcd'));  //trueconsole.log(reg.test('aabcd')); //true//^表示匹配行首的文本(以谁开始)var reg1 = /^abc/console.log(reg1.test('abc'));   //trueconsole.log(reg1.test('abcd'));  //trueconsole.log(reg1.test('aabcd')); //false//$表示匹配行尾的文本(以谁结束)var reg1 = /abc$/console.log(reg1.test('abc'));   //trueconsole.log(reg1.test('abcd'));  //falseconsole.log(reg1.test('aabcd')); //falseconsole.log(reg1.test('aabc')); //true</script>
</body>
</html>

3.3 字符串类

字符串雷柏哦是有一系列字符可以选择,只要匹配其中的一个就可以了,所有可供选择的字符都放在方括号内

3.3.1 [] 方括号

表示一系列字符可供选择,只要匹配其中的一个就可以了

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>03方括号</title>
</head>
<body><script>// var reg = /abc/  只要包含abc就可以了// 字符类: [] 表示有一系列字符可供选择,只要匹配其中的一个就可以了返回truevar reg = /[abc]/console.log(reg.test('admin')); //trueconsole.log(reg.test('baby')); //trueconsole.log(reg.test('color')); //trueconsole.log(reg.test('red')); //falseconsole.log('==========================================');// 三选一, 开始字符是三选一,结束的字符也是三选一 // 如果加了^ 和  $ 则限制了待校验的字符串的长度var reg1 = /^[abc]$/console.log(reg1.test('aa')); //falseconsole.log(reg1.test('a'));    //trueconsole.log(reg1.test('b'));//trueconsole.log(reg1.test('c'));//trueconsole.log(reg1.test('abc'));//falseconsole.log('==========================================');// 26个英文字母任何一个就可以用 a-z A-Z  0-9var reg2 = /^[a-z]$/console.log(reg2.test('a'));  //trueconsole.log(reg2.test('B'));  //falseconsole.log(reg2.test(8));      //falseconsole.log(reg2.test('-'));    //falseconsole.log(reg2.test(' '));    //falseconsole.log(reg2.test('!'));    //falseconsole.log('==========================================');//字符串组合var reg3 = /^[a-zA-Z0-9_-]$/console.log(reg3.test('a'));  //trueconsole.log(reg3.test('B'));  //trueconsole.log(reg3.test(8));      //trueconsole.log(reg3.test('-'));    //trueconsole.log(reg3.test(' '));    //falseconsole.log(reg3.test('!'));    //falseconsole.log('==========================================');//如果括号中出现了多个^,表示取反的意思,千万不要和边界符 ^混淆var reg4 = /^[^a-zA-Z0-9_-]$/console.log(reg4.test('a'));  //falseconsole.log(reg4.test('B'));  //falseconsole.log(reg4.test(8));      //falseconsole.log(reg4.test('-'));    //falseconsole.log(reg4.test(' '));    //trueconsole.log(reg4.test('!'));    //true</script>
</body>
</html>

3.4 量词符

两次赴用来设定某个模式出现的次数

量词说明
*重复0次或者是多次
+重复1次或更多次
?重复0次或1次
{n}重复n次
{n,}重复n次或n次以上
{n,m}重复n次到m次
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>04量词</title>
</head>
<body><script>//量词作用:用来确定某个模式出现的次数// var reg = /^a$/;// console.log(reg.test('a'));// console.log(reg.test('aa'));//1. *  相当于 >= 0   (可以出现0次或者是多次)// var reg = /^a*$/;// console.log(reg.test('a'));         //true// console.log(reg.test('aa'));        //true// console.log(reg.test('aaaaaa'));    //true// console.log(reg.test(''));          //true//2. + 相当于 >= 1 (可以出现1次或者是很多次)// var reg = /^a+$/;// console.log(reg.test('a'));         //true// console.log(reg.test('aa'));        //true// console.log(reg.test('aaaaaa'));    //true// console.log(reg.test(''));          //false//3.  ?  相当于  0 || 1//var reg = /^a?$/;// console.log(reg.test('a'));         //true// console.log(reg.test('aa'));        //false// console.log(reg.test('aaaaaa'));    //false// console.log(reg.test(''));          //true//4. {n}  就表示重复n次// var reg = /^a{3}$/;      //必须重复3次// console.log(reg.test('a'));         //false// console.log(reg.test('aa'));        //false// console.log(reg.test('aaa'));        //true// console.log(reg.test('aaaaaa'));    //false// console.log(reg.test(''));          //false//5. {n,}  相当于 >= n 表示重复次数是n次或更多次// var reg = /^a{3,}$/;      //必须重复3次或以上// console.log(reg.test('a'));         //false// console.log(reg.test('aa'));        //false// console.log(reg.test('aaa'));        //true// console.log(reg.test('aaaaaa'));    //true// console.log(reg.test(''));          //false//6. {n,m}  表达式大于等于n,并且小于或等于mvar reg = /^a{3,6}$/;      //必须重复6次到6次console.log(reg.test('a'));         //falseconsole.log(reg.test('aa'));        //falseconsole.log(reg.test('aaa'));        //trueconsole.log(reg.test('aaaaaa'));    //trueconsole.log(reg.test('aaaaaaaaa'));    //falseconsole.log(reg.test(''));          //false</script>
</body>
</html>

3.5 用户名校验

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>05用户户名校验</title><style>span{color: #aaa;font-size: 14px;}.right {color:green;}.wrong {color:red;}</style>
</head>
<body><input type="text" class="username"><span>请输入用户名</span><script>//正则表达式:只能是字母(大小写)数字或下划线,重复次数为6次到16次var reg = /^[a-zA-Z0-9_]{6,16}$/;//1.获取用户输入的用户名var username = document.querySelector('.username');var span = document.querySelector('span');//输入完后,失去焦点(blur)触发事件username.onblur = function(){if(this.value == ''){span.className = ''span.innerHTML = '请输入用户名'return false;}if(reg.test(this.value)){span.className = 'right'span.innerHTML = '用户名格式输入正确'} else {span.className = 'wrong'span.innerHTML = '用户名格式输入错误'}}</script>
</body>
</html>

3.6 括号总结

  • 大括号:量词符,表示重复次数
  • 中括号:字符集合,匹配方括号中的任意一个字符
  • 小括号:表示优先级

工具大全[https://www.jyshare.com/]

<!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><script>//小括号表示优先级var reg = /^(abc){3}$/ // 表示abc重复3次console.log(reg.test('abc'));console.log(reg.test('abcabcabc'));console.log(reg.test('abccc'));</script>
</body>
</html>

3.7 预定义类

预定义类指的是某些常见的模式的简写方式

预定义类说明
\d匹配 0-9 之间的任意一个数字,相当于[0-9]
\D匹配 0-9 之外的字符,相当于[^0-9]
\w匹配任意的字母,数字和下划线,相当于[a-zA-Z0-9_]
\W匹配除了任意的字母,数字和下划线,相当于[^a-zA-Z0-9_]
\s匹配空格(包含了换行符、制表符、空格符等等)相当于[\t\r\n\v\f]
\S除了匹配空格(包含了换行符、制表符、空格符等等)相当于[^\t\r\n\v\f]

座机号校验

<!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><script>//小括号表示优先级// var reg = /^(abc){3}$/ // 表示abc重复3次// console.log(reg.test('abc'));// console.log(reg.test('abcabcabc'));// console.log(reg.test('abccc'));//校验座机号:全国的做记号有两种格式://1)010-12345678//2)0710-1234567//var reg = /^[0-9]{3}-[0-9]{8}|[0-9]{4}-[0-9]{7}$///var reg = /^\d{3}-\d{8}|\d{4}-\d{7}$/var reg = /^(\d{3}-\d{8})|(\d{4}-\d{7})$///var reg = /^\d{3,4}-\d{7,8}$/console.log(reg.test('0710-8237789'));console.log(reg.test('0710-12345678'));console.log(reg.test('027-83891595'));</script>
</body>
</html>

3.8.表单校验案例

window.onload = function(){var tel = document.querySelector('#tel'); //手机号var qq = document.querySelector('#qq'); //qq号var nc = document.querySelector('#nc'); //昵称var msg = document.querySelector('#msg'); //短信验证码var pwd = document.querySelector('#pwd'); //登录密码var surepwd = document.querySelector('#surepwd'); //确认密码var regtel = /^1[3456789]\d{9}$/ //手机号正则表达式var regqq = /^[1-9]\d{3,}$/ //qq正则表达式var regnc = /^[\u4e00-\u9fa5]{2,8}$/ //昵称var regmsg = /^\d{4}$/ //短信验证码var regpwd = /^\w{6,11}$/ //密码regex(tel,regtel); //手机号校验regex(qq,regqq); //qq号校验regex(nc,regnc); //昵称校验regex(msg,regmsg); //验证码校验regex(pwd,regpwd); //密码校验// 表单校验函数function regex(ele,reg){ele.onblur = function(){if(reg.test(this.value)){this.nextElementSibling.className = 'success'this.nextElementSibling.innerHTML = '<i class="success_icon"></i>恭喜您输入正确'}else{this.nextElementSibling.className = 'error'this.nextElementSibling.innerHTML = '<i class="error_icon"></i>格式不正确,请重新输入'}}}surepwd.onblur = function(){if(regpwd.test(pwd.value) == false){ //密码校验不通过pwd.nextElementSibling.className = 'error'pwd.nextElementSibling.innerHTML = '<i class="error_icon"></i>格式不正确,请重新输入'pwd.focus();return false;}if(this.value == pwd.value){this.nextElementSibling.className = 'success'this.nextElementSibling.innerHTML = '<i class="success_icon"></i>恭喜您输入正确'}else{this.nextElementSibling.className = 'error'this.nextElementSibling.innerHTML = '<i class="error_icon"></i>格式不正确,请重新输入'}}}

3.9 正则替换replace

replace方法可以实现替换字符串操作,用来替换的参数可以是一个字符串或者是一个正则表达式

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>09replace</title>
</head>
<body><script>// var str = 'pink和redpink';// //replace对str这个字符串是没有做修改的// var newStr = str.replace('pink','blue');// console.log(newStr);// //等同于此处的pin可以写在正则表达式里// var newStr2 = str.replace(/pink/,'blue');// console.log(newStr2);//全部替换 var str = 'abcabc';var newStr = str.replace(/a/g,'哈哈');console.log(newStr);//忽略大小写 ivar str2 = 'abcAbc';var newStr2 = str.replace(/a/gi,'哈哈');console.log(newStr2);</script>
</body>
</html>

4.10 过滤敏感词汇

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>10过滤敏感词汇</title>
</head>
<body><textarea name="" id="message"></textarea><button>提交</button><div></div><script>var btn = document.querySelector('button');var message = document.querySelector('#message');var div = document.querySelector('div');btn.onclick = function(){div.innerHTML = message.value.replace(/蔡徐坤|鸡哥/g,'**');}</script>
</body>
</html>

二、ES6入门

1.什么是ES6

ES的全称是:ECMAScript,它是ECMA国际标准化组织制定的一项脚本语言的标准规范

2015年6月:ES2015

2016年6月:ES2016

2017年6月:ES2017

2018年6月:ES2018

2.为什么要学习ES6

每一次标准的诞生都意味着语言的完善,功能的加强。javaScript语言本身也有一些不令人满意的地方。

  • 变量提升特性增加了程序运行时的不可预测性。
  • 语法过于松散,实现相同的功能,不同的人可能会写出不同的代码

3.ES6 新增的语法

3.1 let

es6中新增的用于声明变量的关键字.

let声明的变量只在所处的块级有效
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>11let</title>
</head>
<body><script>//ES6中:如果一个变量用let声明,那么它只在所处的块级中有效if(true){let a = 10;}function fn(){}for(let i = 0; i <= 10; i++){}console.log(i);console.log(a);</script>
</body>
</html>

**注意:**使用let关键字声明的变量才具有块级作用域,使用var声明的变量不具备块级作用域特性

不存在变量提升
//不存在变量提升
console.log(a);
let a = 20;
暂时性死区

利用let声明变量会绑定这个块级作用域,不会受到外界的影响

var temp = 123;
if(true){let temp;temp = 'abc';
}
经典面试题
var arr = [];
for(var i = 0; i < 2; i++){arr[i] = function(){console.log(i);}
}arr[0]();
arr[1]();

在这里插入图片描述

关键是变量i是全局的,函数执行时候输出是全局作用域下的i的值

let arr = [];
for(let i = 0; i < 2; i++){arr[i] = function(){console.log(i);}
}arr[0]();
arr[1]();

在这里插入图片描述

关键点就在于每次循环都会产生一个块级作用域,每个块级作用于下的变量都是不同的,函数执行时输出的都是自己上一级(循环产生的块级作用域)下的i的值

小结

  • let关键字就是用来声明变量的
  • 使用let关键字声明的变量具有块级作用域
  • 在一个大括号中使用let关键字声明的变量才具有块级作用域,var关键字声明的变量不具备块级作用域
  • 防止循环变量变成全局变量,可以使用let声明变量
  • 使用let官架子声明的变量没有变量提升
  • 使用let关键字声明的变量具有暂时死区特性

3.2 const

声明常量,常量就是(内存地址)不能变化的量

具有块级作用域
if(true){const a = 10;   
}
console.log(a); //a is not defined
声明的时候必须赋值
const PI;  //Missing initializer in const declaration
常量赋值后,值不能被修改
const PI = 3.14;
PI = 100; //Assignment to constant variable
小结
  • const声明的变量是一个常量(值不能被修改)
  • 既然是常量就不能重新再赋值,如果是基本数据类型,不能更改值。如果是复杂数据类型,不能更改地址值。
  • 声明const的时候必须要给定值

3.3 let、const和var的区别

varletconst
函数级作用域块级作用域块级作用域
变量提升不存在变量提升不存在变量提升
值可以修改值可以修改值不可更改

4.解构赋值

ES6中允许从数组中提取值,按照对一个位置,对变量赋值,对象也可以实现解构

4.1 数组解构

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>14数组解构</title>
</head>
<body><script>let [a,b,c,d] = [1,2,3];console.log(a);console.log(b);console.log(c);console.log(d); //undefined  //如果解构不成功,变量的值就是undefined</script>
</body>
</html>

4.2 对象解构

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>15.对象解构</title>
</head>
<body><script>let person = {name:'张三',age:20,gender:'男'}//对象解构 - 这种写法要求解构出来的变量名必须和属性名一致let {name,age,gender} = person;console.log(name);console.log(age);console.log(gender);//对象解构 - 可以解构出来的变量名和属性名不一样 (myname,myage,sex都属于别名)let {name:myname,age:myage,gender:sex} = personconsole.log(myname);console.log(myage);console.log(sex);</script>
</body>
</html>

小结

  • 解构赋值就是把数据结构分解,然后给变量进行赋值
  • 如果解构不成功,变量跟数值个数不匹配的时候,变量的值为undefined
  • 数组解构用中括号包裹,对象解构用花括号包裹,多个变量之间用逗号分隔
  • 利用解构赋值能够让我们方便的去取对昂中的属性和方法
15.对象解构 ```

小结

  • 解构赋值就是把数据结构分解,然后给变量进行赋值
  • 如果解构不成功,变量跟数值个数不匹配的时候,变量的值为undefined
  • 数组解构用中括号包裹,对象解构用花括号包裹,多个变量之间用逗号分隔
  • 利用解构赋值能够让我们方便的去取对昂中的属性和方法

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

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

相关文章

20241112-Pycharm使用托管的Anaconda的Jupyter Notebook

Pycharm使用托管的Anaconda的Jupyter Notebook 要求 不要每次使用 Pycharm 运行 Jupyter 文件时都要手动打开 Anaconda 的 Jupyter Notebook 正文 pycharm中配置好会自动安装的&#xff0c;有的要自己配置 Pycharm中配置 文件 ——> 设置 ——> 语言和框架……&am…

vscode - 设置 Python 版本

在使用 vscode 编码 Python 时&#xff0c;选择合适的 Python 版本。 解决方法 使用快捷键 CtrlShiftP 打开命令窗口: 选择 “Python: Select Interpreter”&#xff0c;弹窗显示现有的 Python 版本: 回车选择需要的Python 版本即可。

【量化交易笔记】14.模拟盘效果

说明 距离上一篇的量化文章有一段时间&#xff0c;应小伙伴要求&#xff0c;继续写下去&#xff0c;我思考了一下&#xff0c;内容有很多&#xff0c;绝大多数是研究的过程&#xff0c;并且走的是弯路&#xff0c;分享了怕影响大伙&#xff0c;之前因为行情不好&#xff0c;研…

git rebase --continue解冲突操作

git rebase --continue解冲突操作 如果只是执行了 git rebase 命令&#xff0c;那么git会输出一下“错误”提示&#xff1a; There is no tracking information for the current branch. Please specify which branch you want to rebase against. See git-rebase(1) for detai…

nodejs express 框架使用

1. 准备环境 Nodejs 版本 v18.12.1, yarn 版本 1.22.21 2. 初始化项目 创建项目目录 express_demo01&#xff0c;进入目录&#xff0c;执行命令 npm init -y 生成 package.json 文件 圈起来的那一行修改为上图所示。使用 npm run dev 即可启动项目。 安装express 和 body-p…

Axure网络短剧APP端原型图,竖屏微剧视频模版40页

作品概况 页面数量&#xff1a;共 40 页 使用软件&#xff1a;Axure RP 9 及以上&#xff0c;非软件无源码 适用领域&#xff1a;短剧、微短剧、竖屏视频 作品特色 本作品为网络短剧APP的Axure原型设计图&#xff0c;定位属于免费短剧软件&#xff0c;类似红果短剧、河马剧场…

普通用户切换到 root 用户不需要输入密码配置(Ubuntu20)

在 Ubuntu 系统中&#xff0c;允许一个普通用户切换到 root 用户而不需要输入密码&#xff0c;可以通过以下步骤配置 sudo 设置来实现。 步骤&#xff1a; 打开 sudoers 文件进行编辑&#xff1a; 在终端中&#xff0c;输入以下命令来编辑 sudoers 文件&#xff1a; sudo visu…

程序设计方法与实践-变治法

变换之美 变治法就是基于变换的思路&#xff0c;进而使原问题的求解变得简单的一种技术。 变治法一般有三种类型&#xff1a; 实例化简&#xff1a;将问题变换为同问题&#xff0c;但换成更为简单、更易求解的实例。改变表现&#xff1a;变化为同实例的不同形式&#xff0c;…

11.12机器学习_特征工程

四 特征工程 1 特征工程概念 特征工程:就是对特征进行相关的处理 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。 …

【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-成绩排序ABCDE

CL13 成绩排序(50 分) 分别给出代号为 A、B、C、D、E 的五名同学的跳远成绩&#xff1a;请按照成绩从高到低&#xff0c;将五名同学的代号输出。输入&#xff1a; 输入五个不相同的正整数&#xff08;不超过 100&#xff09;&#xff1a; 表示五名同学的成绩&#xff0c;相邻…

Spring整合Redis

前言 在Spring项目中整合Redis&#xff0c;能显著提升数据缓存、分布式锁、会话管理等操作的效率。Jedis作为轻量级的Java Redis客户端&#xff0c;搭配Spring Data Redis模块&#xff0c;能够简化Redis的连接和数据操作&#xff0c;实现更高性能的读写与灵活的缓存管理。本文…

低空载功耗,高能源利用率 BDA5-20W BOSHIDA DCDC

低空载功耗&#xff0c;高能源利用率 BDA5-20W BOSHIDA DCDC BDA5-20W系列产品具有以下特点&#xff1a;宽输入电压范围&#xff08;4:1&#xff09;&#xff0c;可以适应多种输入电压条件&#xff1b;高效率&#xff0c;能够达到88%以上&#xff0c;节能环保&#xff1b;空载功…

Lucene 和 Elasticsearch 中更好的二进制量化 (BBQ)

作者&#xff1a;来自 Elastic Benjamin Trent Lucene 和 Elasticsearch 中更好的二进制量化 (BBQ)。 嵌入模型输出 float32 向量&#xff0c;通常对于高效处理和实际应用来说太大。Elasticsearch 支持 int8 标量量化&#xff0c;以减小向量大小&#xff0c;同时保持性能。其他…

深入探索R语言在机器学习中的应用与实践

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

windows下git和TortoiseGit(小乌龟)和putty安装配置对github进行操作

本次安装版本如下&#xff1a; 1&#xff0c;先下载安装tortoiseGit一路下载安装即可一直到在桌面上右键可以看到有git的选项出现为止&#xff0c;注意在第一步的时候选择使用putty还是ssh建立网络连接决定后面的步骤&#xff0c;本次以选择putty为例。 2&#xff0c;安装git&a…

【数据结构 | C++】小明的账单

小明的账单 背景 Special for beginners 描述 小明在一次聚会中&#xff0c;不慎遗失了自己的钱包&#xff0c;在接下来的日子&#xff0c;面对小明的将是一系列的补卡手续和堆积的账单。 在小明的百般恳求下&#xff0c;老板最终同意延缓账单的支付时间。可老板又提出&#…

深入FastAPI:路径参数、查询参数及其检校

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年11月学习赛的FastAPI学习总结文档&#xff1b;本文主要讲解路径参数、查询参数及其检校机制。&#x1f495;&#x1f495;&#x1f60a; 介绍 F…

图数据库 | 5、图数据库三大组件之一 之 图计算 (下)

书接上文&#xff1a;图数据库 | 4、图数据库三大组件之一 ——图计算 &#xff08;上&#xff09;-CSDN博客 结合计算效率来评估与设计图计算所需的数据结构。 存储低效性或许是相邻矩阵或关联矩阵等数据结构的最大缺点&#xff0c;尽管它有着O(1)的访问时间复杂度。例如通过…

由播客转向个人定制的音频频道(1)平台搭建

项目的背景 最近开始听喜马拉雅播客的内容&#xff0c;但是发现许多不方便的地方。 休息的时候收听喜马拉雅&#xff0c;但是还需要不断地选择喜马拉雅的内容&#xff0c;比较麻烦&#xff0c;而且黑灯操作反而伤眼睛。 喜马拉雅为代表的播客平台都是VOD 形式的&#xff0…

被抛弃的八股文之keep-alive

还记得在我毕业面试时&#xff0c;经常看到碰到的面试题中都有着TCP中的keep-alive和Http中的keep-alive有什么区别。但是现在的八股文中已经再也见不到了&#xff08;燕子&#xff0c;我们还会再见吗&#xff09; 话说回来&#xff0c;这两个不同的协议中&#xff0c;keep-ali…