JS基础知识学习笔记全

news2024/11/15 18:34:19

JS基础知识学习笔记全

一、引入方式

1、内部脚本

(一般定义在body下面会改善执行速度)

<body>
    
</body>
 <!-- 内部脚本 -->
 <script>
    /* 打开页面警告框显示的内容 */
    alert('helloJS');
 </script>

image-20240721144637265

2、外部脚本

外部专门新建一个.js文件,里面只存放js代码,没有外部的script标签,文件中内容如下

/* 打开页面警告框显示的内容 */
alert('helloJS');

html文件中想要引入这个js代码就通过如下代码引用

<script src="../js/demo.js"></script>

src="../js/demo.js"里面的url值为.js文件在文件夹里的相对路径,…/代表跳到上一级目录
!!

二、JS基础语法

1、书写语法

1)区分大小写
2)每行结尾分号可有可无(建议写)
3)注释(同java)

单行://
多行:/* */

4){}表示代码块(同java)

if(count==3){
    alert(count);
}
5)输出语句(3种)

01window.alert("01helloJS");//浏览器弹出警告框

image-20240721150543444

02document.write("02helloJS");//直接在浏览器的页面中展示

image-20240721150605827

03console.log("03helloJS");//在浏览器的控制台展示

打开浏览器页面->右键->检查->点击console

image-20240721150703706

2、变量

JS是弱类型的语言,变量是可以存储不同类型的值的

命名规则同java

/* var定义变量 */
var a=20;
a="张三";
alert(a);
特点:
1)作用域比较大,属于全局变量
2)可以重复初始化定义,即重复声明(而java不能)
var a=20;
var a=40;//重复声明
alert(a);

let关键字声明局部变量,且不能重复声明(类似java声明变量)

const声明常量,不可再改变

3、数据类型、运算符、流程控制语句

3.1数据类型
原始类型(基本数据类型)
number(整数、小数、NAN(Not a Number))
string(单双引号均可)
boolean(false true)
null(对象为空)
undefined(当声明的变量未初始化,该变量的默认值为undefined)

使用typeof 变量可以获得该变量的变量类型

alert(typeof 3);//-->number
alert(typeof "a");//-->string
alert(typeof true);//-->boolean
alert(typeof null);//对象为空-->object
var a;
alert(typeof a);//-->undefined
引用类型(对象)
3.2运算符

基本运算符同Java

名称运算符
算术运算符+ - * / % ++ –
赋值运算符= += -= *= %=
比较运算符> < >= <= != == ===
逻辑运算符&& || !
三元运算符条件表达式?true_value : false_value

=======与==

==会进行类型转换,===不会进行类型转换

var a=7;
alert(a=='7');//true '=='先进行类型转换为整数再比较
alert(a==='10');//false '==='发现两边类型不同,直接返回false
类型转换
1)将字符串字面值转换为数字,若不是数字则转换为NaN(Not a Number)

alert(parseInt("12"));

image-20240721154935019

alert(parseInt("12AS"));js从左到右一个一个转换,前面12是数字就转换为数字,后面不是数字就停止转换所以最后显示12

image-20240721155209011

alert(parseInt("A12"));第一个A就不是数字,直接转换为NaN

image-20240721155417817

2)将其他类型转换为boolean类型
数据类型falsetrue
number0 ,NAN其他
string“”(空字符串)其他
null和undefined均转为false
/* 
转为false的在浏览器的弹窗页面是不会显示的,只有值为true的才会显示
*/
/* 01数字number类型 */
if(0){
    alert("0转为false");
}
if(NaN){
    alert("NaN(Not a Number)转为false");
}
if(-12344){
    alert("除了0和NaN其他转转为true")
}
/* 02字符串string类型 */
if(""){
    alert("空字符串转为false");
}
/* 03 null和undefined全转为false*/
if(null){
    alert("null转为false");
}
if(undefined){
    alert("undefined转为false");}
3.3流程控制语句(同java)

if...else

switch

for

while

do...while

三、JS函数

定义语法(JavaScript是弱类型语言,形式参数不需要类型,也不需要定义方法返回值)

//定义语法01
function functionName(参数1,参数2..){
    //要执行的代码
}
//定义一个加法函数
function add(a,b){
    return a+b;
} 
//调用函数
var a=4;
var b=5;
var result=add(a,b);
alert(result);

image-20240721161855541

//定义语法02
var functionName=function(参数1,参数2){
    //要执行的代码
}
//add类型举例
var add = function(a,b){
    return a + b;
}
var result=add(12,32);
alert(result);

运算结果如下

image-20240721163010129

JS函数调用可以传递任意个数的参数(后面的参数即使传递了,实际上没有接收,不影响计算前面的结果)

四、JS对象

1、Array

1.1定义
//方法1
var arr=new Array(1,2,3,4);
//方法2
var arr1=[1,2,3,4];//java中是{},不要混淆
1.2访问
var arr=new Array(1,2,3,4);
/* 数组访问,输出到浏览器控制台 */
console.log(arr[0]);
console.log(arr[1]);

image-20240721164108430

1.3特点

js当中的数组类似于java当中的集合:长度可变,类型可变

1.3.1长度可变
var arr=new Array(1,2,3,4);
/* 定义一个数组元素的值 */
arr[10]=90;
console.log(arr[10]);//数组长度可变,可成功赋值
/* 未定义的变量值默认为undefined */
console.log(arr[9]);
console.log(arr[8]);

image-20240721164701209

1.3.2类型可变
var arr=new Array(1,2,3,4);
/* 定义一个数组元素的值 */
arr[5]="A";
arr[6]=true;
arr[7]=null;
arr[8]=undefined;

console.log(arr);//直接控制台输出这整个数组

image-20240721165308317

1.4属性
属性描述
length设置/返回数组中元素数量
var arr=[1,2,3,4];
for (let i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}
1.5方法
方法描述
forEach()遍历数组中每个有值的元素,并调用一次传入的函数
push()新元素添加到数组尾部,返回新长度(+1)
splice()从数组中删除元素
1.5.1 forEach()
var arr=[1,2,3,4];
arr[7]=12;//这样的话arr[4],arr[5],arr[6]均为undefined,不会被forEach遍历(!!arr从0开始计数arr[0]==1,arr[1]==2)
arr.forEach(function(e){
    console.log(e);
})

等价于(用箭头函数表示如下)

arr.forEach((e)=>{
    console.log(e);
})

image-20240721170427410

1.5.2 push()
var arr=[1,2,3,4];
arr.push("a",2,1.3);//添加元素到数组尾部
console.log(arr);

image-20240721171034278

1.5.3splice()

删除元素

var arr=[1,2,3,4];
/* 从arr[2]==3开始删,删两个,即删除了3和4 */
arr.splice(2,2);//splice(start,deleteCount)
console.log(arr);

image-20240721171353897

2、String

2.1定义
//方法01
var str01=new String("helloStr01");
//方法02 单引号双引号都可以
var str021="helloStr021";
var str022='helloStr022';
2.2属性
属性描述
length字符串长度
var str="hello 123";
console.log(str.length);

image-20240721172527666

2.3方法
方法描述
charAt()返回指定位置的字符
indexOf()检索字符串
trim()去除字符串两边的空格,并返回一个新的字符串
substring()提取字符串中的一小段字符
2.3.1 charAt(i)
var str="hello 123";
console.log(str.charAt(1));

image-20240721172801803

2.3.2 indexOf(“”)

检索字符串(以字符串开头的第一个字符所在位置为准)

var str="hello 123";
console.log(str.indexOf("ll"));//不要忘了加""

image-20240721173109673

2.3.3 trim()
var str="    hello 123   ";
var s=str.trim();
console.log(s);
console.log(s[0]);

image-20240721173504815

2.3.4 substring(start,end)

开始索引,结束索引 含头不含尾

var str="hello 123";
//!!含头不含尾 要想截取到l需要取尾部值为str.charAt(4)=='0'
console.log(str.substring(0,4));

image-20240721174103272

3、JSON

JS自定义对象
var user={
    //属性名:属性值
    name:"赵小花",
    age:18,
    gender:"女",
    //函数名称:function(形参列表){}
    eat:function(){
        alert("开饭喽")
    }

}
console.log(user.name);
console.log(user.age);
console.log(user.gender);
console.log(user.eat());

eat:function(){ alert("开饭喽") }可以简化为 eat(){ alert("开饭喽") }

image-20240721174631988

3.1定义

JSON(JavaScript Object Notation)就是JavaScript对象标记法书写的文本

JSON中所有的属性名都要用""双引号括起来(这是和JS自定义对象的语法的第一个区别)

JSON是一个文本,为变量赋值一个JSON格式的字符串–>{}外面还要套一层’'将JSON格式的文本转换为字符串((这是和JS自定义对象的语法的第二个区别))

var userStr='{
    //"属性名":属性值
    "name":"赵小花",
    "age":18,
    "gender":"女",
    "addr":["北京","上海","天津"]
    //对象,在{}中表示
}'//{}外面还要套一层''将JSON格式的文本转换为字符串传递给userStr变量

前后端请求响应一般使用JSON作为数据载体

3.2JSON字符串转换为JS对象

var o=JSON.parse(userStr)

alert(o.name)(可以用调用对象属性的方法操作o)

3.3JS对象转换为JSON字符串

var str=JSON.stringify(user)

alert(str)(直接显示字符串的JSON值)

4、BOM(浏览器对象模型)

BOM(Browser Object Model)浏览器对象模型,允许JS与浏览器对话,JS将浏览器的各个组成部分封装成对象

对象名称
Window浏览器窗口对象
Screen屏幕对象
Location地址栏对象
History历史记录对象(<- ->)
Navigator浏览器对象(浏览器的版本、应用名称、内核)
4.1 Window
4.1.1获取

window.属性

4.1.2属性
01history

window.history.获取history对象(window.可省略)

image-20240721195015011

02location
03navigator
4.1.3方法
01 alert()

弹出警告框

/* 获取 */
window.alert("Hello BOM");

image-20240721200758987

02 confirm() 展示对话框(确认or取消 -->删除某个信息)
//01对话框 确认true 取消false
var flag=window.confirm("您确认删除该记录吗?");//confirm返回值为boolean类型,确认就返回true,取消就返回false

image-20240721200658595

03 setInterval() 指定周期(ms)调用函数or计算表达式

interval 间隙 间隔

//02定时器setInterval
var count=0;
setInterval(function(){
    count++
    console.log("定时器执行了"+count);
},2000);//每搁2000ms==2s执行一次function函数

image-20240721200609484

04 setTimeout() 指定时间到达后调用函数or计算表达式

延迟指定时间执行一次

setTimeout(function(){
    alert("你看见我的时候浏览器已经打开3000ms了");
},3000)

image-20240721201228312

4.2 Location
4.2.1获取

window.location.属性 orlocation.属性(因为window可以省略)

4.2.2 属性
href:设置或者返回完整的url
//href 设置或返回浏览器地址栏的url
alert(location.href)//显示当前地址栏的地址
location.href="http://www.baidu.com"//关闭警示框后 浏览器自动跳转到赋值后的地址

image-20240721202128402

点击确定后,跳转到赋值的网址

image-20240721202212125

5、DOM(文档对象模型)

将标记语言的各个组成部分封装成对应的对象
是W3C(万维网联盟)的标准,定义了访问.html和.xml文档的标准

5.1Core DOM 所有文档类型的标准模型
01Document 整个文档对象(整个html文档封装成一个对象)
02Element 元素对象(将每个html标签都封装成一个元素对象)
03Attribute 标签属性
04Text 标签之间的文本对象
05Coment 注释对象
5.2 XML DOM 文档的标准模型(Core DOM的子集)
5.3 HTML DOM HTML文档的标准类型(Core DOM的扩充)

将所有的html标签都各自封装成一个单独的对象

获取html对象->调用该元素对象的属性方法—>改变元素内容

5.3.1获取元素对象

获取元素对象->通过document对象获取->通过windows对象获取document对象

<body>
    <img od="light1" src="../img/off.gif" alt=""> 
</body>
01 根据id获取,返回单个Element对象
/* 获取Element元素对象的函数 */
//01 根据==id==获取,返回单个Element对象
var light1=document.getElementById('light1');
alert(light1);

image-20240721211117323

<body>
   <div>小红厂</div><br>
   <div>小白厂</div><br>
</body>
02 根据标签名称获取,返回Element对象数组
//02 根据==标签名称==获取,返回Element对象数组
var divs=document.getElementsByTagName('div');
for (let i = 0; i< divs.length; i++) {
  alert(divs[i]);
    }

001 获取第一个div对象

image-20240721212534934

002获取第二个div对象

image-20240721212554143

003显示出文本小红厂和小白厂(返回的是一个数组)

image-20240721212658723

03 根据name属性值获取,返回数组
<body>
  <input type="checkbox" name="hobby">跑步
  <input type="checkbox" name="hobby">睡觉
  <input type="checkbox" name="hobby">刷手机
  <input type="checkbox" name="hobby">唱歌
</body>
//03 根据name属性值获取,返回数组
var hobbys=document.getElementsByName('hobby');
for (let i = 0; i < hobbys.length; i++) {
   alert(hobbys[i]);//同上02也是警示框依次显示各个对象然后出来html页面的复选框
    
}

image-20240721213434511

04 根据class属性值获取,返回数组
<body>
 <div class="cls">小紫厂</div>
 <div class="cls">小蓝厂</div>
</body>
//04 根据class属性值获取,返回数组
var clases=document.getElementsByClassName('cls');
for (let i = 0; i < clses.length; i++) {
    alert(clses[i]);
}
5.3.2查询参考手册–>调用该元素对象的属性方法
改变文本内容
<body>
 <div class="cls">小紫厂</div>
 <div class="cls">小蓝厂</div>
</body>
var clases=document.getElementsByClassName('cls');
var div1=clases[0];//获得了第一个元素
/* innerHTML  设置或者返回元素的内容 */
div1.innerHTML="我现在变了一个值我现在不是小紫厂而是紫蘑菇了哟"

image-20240721214844796

5.4 DOM案例练习

原始html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DOM案例练习</title>
    
</head>
<body>
    <img id=i1 src="../img/off.gif" alt="">
 <div class="cls">小紫厂</div>
 <div class="cls">小蓝厂</div>
 <input type="checkbox" name="hobby">跑步
 <input type="checkbox" name="hobby">睡觉
 <input type="checkbox" name="hobby">刷手机
 <input type="checkbox" name="hobby">唱歌
</body>
<script src="../js/demo.js">
  
</script>
</html>

原始浏览器页面效果

image-20240721220432512

利用DOM操纵元素变成下面的效果(灯泡颜色是两张不同的图片)

image-20240721220519004

答案如下,用到的JS

//01改变i1的src属性
var i1=document.getElementById('i1');
i1.src="../img/on.gif";
//02 改变div文本内容
var clses=document.getElementsByClassName('cls');
for (let i = 0; i < clses.length; i++) {
    const element = clses[i]
    element.innerHTML+="  <font color=red>very good</font>";
}
//03使得所有的复选框都处于被选中的状态
var hobbys=document.getElementsByName('hobby');
for (let i = 0; i < hobbys.length; i++) {
    const element = hobbys[i];
    element.checked=true;
    
}

五、JS事件监听

事件:发生在html元素上的事情

常见事件如下:
01 按钮被点击
02 鼠标移动到元素上
03 按下键盘按钮

事件监听 JS在事件被侦测到时执行代码

1、事件绑定

方法1:通过html标签中的事件属性进行绑定

<body>
    <input type="button" onclick="on()" value="按钮">
</body>
<script 
src="../js/demo.js">
  
</script>
function on(){
    alert("我被点击啦!")
}

方法2:通过DOM元素属性绑定

<body>
    <input type="button" id="btn" value="按钮">
</body>
<script 
src="../js/demo.js">
</script>
var btn=document.getElementById('btn');
btn.onclick=function(){
    alert("我被点击啦!")
}

2、常见事件

事件名说明
onclick鼠标单击事件
onblur元素失去焦点
onfocus元素获得焦点
onload某个页面或者图像被完成加载
onsubmit当表单提交(登录页面信息提交时)时触发该事件
onkeydown当某个键的键盘被按下
onmouseover鼠标被移动到某个元素上(常用)
onmouseout鼠标从某个元素移开
onload
<body onload="load()">  //在body标签上加上onload事件,一旦body包裹的页面或者图片加载完成,就执行load()方法
</body>
//onload 当元素包裹的页面或者图片加载完成后
function load(){
    console.log("页面加载完成...");
}

image-20240721224401789

onclick
<input type="button" onclick="click1()">
//onclick 当鼠标点击时
function click1(){
    console.log("我被点击啦!");
}

image-20240721224851300

onfocus
    <input type="text" name="username" onfocus="focus1()">
//onfocus 当获得焦点(输入框内光标闪动)
function focus1(){
    console.log("获得焦点~");
}

image-20240721225348560

onblur
    <input type="text" name="username" onblur="blur1()" >
//onblur 失去焦点
function blur1(){
    console.log("失去焦点···");
}

image-20240721225625281

onkeydown
    <input type="text" name="username" onkeydown="keydown1()">
//onkeydown 当键盘被按下
function keydown1(){
    console.log("键盘被按下了");
}

image-20240721225936943

onmouseover&onmouseout

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DOM案例练习</title>
    
</head>
<body onload="load()">
   <table width="800px" border="solid" cellspacing="0" align="center" onmouseover="mouseover1()" onmouseout="mouseout1()">
    <tr>
        <th>水果</th>
        <th>价格/个</th>
    </tr>
    <tr>
        <td>葡萄</td>
        <td>10r</td>
    </tr>
    <tr>
        <td>桃子</td>
        <td>1.3r</td>
    </tr>
   </table>
    
</body>
<script 
src="../js/demo.js">
</script>
</html>
//onmouseover
function mouseover1(){
    console.log("鼠标移入");
}
//onmouseout
function mouseout1(){
    console.log("鼠标移出");
}

image-20240721230856658

onsubmit

当表单被提交就会触发这个事件,表单一旦提交页面就会被重新加载,就不能再用kog检查是否触发事件,应该用alert

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DOM案例练习</title>
    
</head>
<body onload="load()">
<form action="" onsubmit="submit1()">
    <input id="b1" type="submit" value="提交">
</form>
    
</body>
<script 
src="../js/demo.js">
</script>
</html>
//onsubmit
function submit1(){
alert("表单被提交");
}

image-20240721231703996

3、案例

文件夹结构如下

image-20240721234020467

原始html页面打开浏览器效果如下

image-20240721234120126

要实现效果

1)点击点亮灯泡变亮,点击熄灭灯泡熄灭

2)点击文本框XIXIXILUCKY变成小写xixixilucky

3)点击全选则三个复选框全部选中,点击反选三个复选框全部取消选中

实现代码如下

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>
    <img id="i1" src="../img/off.gif" alt=""><br>
    <input id="b1" type="button" value="点亮" onclick="c1()">
    <input id="b2" type="button" value="熄灭" onclick="c2()"><br><br>
    <input id="t1" type="text" value="XIXIXILUCKY" onblur="b1()" onfocus="b2()"><br><br>
    <input type="checkbox" name="hobby">电影
    <input type="checkbox" name="hobby">旅游
    <input type="checkbox" name="hobby">游戏<br>
    <input id="b3" type="button" value="全选" onclick="x1()">
    <input id="b4" type="button" value="反选" onclick="x2()">

</body>
<script src="../js/demo.js"></script>
</html>

demo.js如下

var i1=document.getElementById('i1')
//点亮
function c1(){
    i1.src="../img/on.gif"
}
//熄灭
function c2(){
    i1.src="../img/off.gif"
}
var t1=document.getElementById('t1')
//失焦
function b1(){
    t1.value=t1.value.toLowerCase()
}
//聚焦
function b2(){
    t1.value=t1.value.toUpperCase()
}
var hobbies=document.getElementsByName('hobby')
function x1(){
    for (let i = 0; i < hobbies.length; i++) {
        const element = hobbies[i];
        element.checked=true;
    }
}
function x2(){
    for (let i = 0; i < hobbies.length; i++) {
        const element = hobbies[i];
        element.checked=false;
    }
}

跟练视频

type=“button” value=“熄灭” οnclick=“c2()”>





电影
旅游
游戏


```

demo.js如下

var i1=document.getElementById('i1')
//点亮
function c1(){
    i1.src="../img/on.gif"
}
//熄灭
function c2(){
    i1.src="../img/off.gif"
}
var t1=document.getElementById('t1')
//失焦
function b1(){
    t1.value=t1.value.toLowerCase()
}
//聚焦
function b2(){
    t1.value=t1.value.toUpperCase()
}
var hobbies=document.getElementsByName('hobby')
function x1(){
    for (let i = 0; i < hobbies.length; i++) {
        const element = hobbies[i];
        element.checked=true;
    }
}
function x2(){
    for (let i = 0; i < hobbies.length; i++) {
        const element = hobbies[i];
        element.checked=false;
    }
}

跟练视频

【黑马程序员JavaWeb开发教程,实现javaweb企业开发全流程(涵盖Spring+MyBatis+SpringMVC+SpringBoot等)】https://www.bilibili.com/video/BV1m84y1w7Tb?p=27&vd_source=d37e5d90380fc98bc085eb27052f0d0b

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

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

相关文章

Redis-主从模式

目录 前言 一.主从节点介绍 二.配置redis主从结构 二.主从复制 四.拓扑结构 五.数据同步 全量复制&#xff08;Full Sync Replication&#xff09; 局部复制&#xff08;Partial Replication&#xff09; Redis的学习专栏&#xff1a;http://t.csdnimg.cn/a8cvV 前言 …

H3CNE(vlan与子接口技术)

目录 10.1 vlan间通信技术 示例一&#xff08;多臂路由&#xff09;&#xff1a; 10.2 子接口技术 示例二&#xff08;子接口技术&#xff09;&#xff1a; 10.3 vlannif接口技术 10.3.1 三层交换机与VLANNIF技术 示例三VLANNIF配置&#xff08;将交换机当成路由器使用&…

鸿蒙仓颉语言【cryptocj 库】RC2、 RC4 、AES对称加密算法

2 提供RC2、 RC4 、AES对称加密算法 前置条件&#xff1a;NA 场景&#xff1a; 支持对称加密算法。 约束&#xff1a;RC2密钥长度一般16字节&#xff0c;加密块长度8字节&#xff1b;AES加密块长度16字节 性能&#xff1a; 支持版本几何性能持平 可靠性&#xff1a; NA …

pytest:4种方法实现 - 重复执行用例 - 展示迭代次数

简介&#xff1a;在软件测试中&#xff0c;我们经常需要重复执行测试用例&#xff0c;以确保代码的稳定性和可靠性。在本文中&#xff0c;我们将介绍四种方法来实现重复执行测试用例&#xff0c;并显示当前迭代次数和剩余执行次数。这些方法将帮助你更好地追踪测试执行过程&…

3.多租户调研1

https://gitee.com/xiaoqiangBUG/hello-ruoyi-cloud.git 1.mybatis plus 的插件 TenantLineInnerInterceptor 是 MyBatis Plus 框架中的一个拦截器&#xff0c;它用于实现多租户系统的数据隔离。在多租户应用中&#xff0c;不同的租户应该只能访问到自己的数据&#xff0c;而…

URL过滤、DNS过滤和内容过滤的总结

目录 URL过滤 URL和URI URL -- 统一资源定位符 URI --- 统一资源的标识符 URL和URI之间的区别 URL过滤的方式 HTTP协议获取URL的方式 HTTP协议做控制管理的流程 HTTPS协议做控制管理的流程 1&#xff0c;配置SSL的解密功能 2&#xff0c;直接针对加密流量进行过滤 例…

javaEE-03-cookie与session

文章目录 Cookie创建Cookie获取Cookie更新CookieCookie 生命控制Cookie 有效路径 Session 会话创建和获取sessionSession 域数据的存取Session 生命周期控制浏览器和 Session 之间关联 Cookie Cookie 是服务器通知客户端保存键值对的一种技术,客户端有了 Cookie 后&#xff0c…

深入解析 GPT-4o mini:强大功能与创新应用

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

品牌故事线:如何在活动策划中保持品牌信息的连贯性?

在活动运营中保持品牌一致性和传达清晰的品牌信息&#xff0c;是确保活动成功并提升品牌形象的关键。 以下是一些具体的方法和建议。 码字不易&#xff0c;如果回答对你有所帮助&#xff0c;请不吝给一个三连哦&#xff01; 一、明确品牌定位与核心价值 首先&#xff0c;需…

一起刷C语言菜鸟教程100题(27-35)

先说明这个虽然菜鸟教程也有答案&#xff0c;但是这个专栏的博客是自己过手写了一遍&#xff0c;有自己的理解&#xff0c;有些习题自己是变化了一些&#xff0c;更适合练手&#xff0c;也会写的更普遍一些~ 今天我们一起继续刷题&#xff0c;链接放在这里供大家自行使用 C 语…

小红书(社招二面)算法原题

萝卜快跑涨价 距离我们上次谈 萝卜快跑 不足半月&#xff0c;萝卜快跑迎来了不少"反转"。 先是被曝远程后台有人操控&#xff0c;真实日成本超 400&#xff1a; 最近还被不少网友吐槽&#xff1a;萝卜快跑涨价了&#xff0c;如今价格和网约车持平。 据不少博主实测&a…

如何在 Windows 上安装并配置 VNC 远程连接树莓派,并结合Cpolar实现公网远程访问

目录 ⛳️推荐 前言 1. 使用 Raspberry Pi Imager 安装 Raspberry Pi OS 2. Windows安装VNC远程树莓派 3. 使用VNC Viewer公网远程访问树莓派 3.1 安装Cpolar步骤 3.2 配置固定的公网地址 3.3 VNC远程连接测试 4. 固定远程连接公网地址 4.1 固定TCP地址测试 ⛳️推荐…

FastAPI(六十九)实战开发《在线课程学习系统》接口开发--修改密码

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 之前我们分享了FastAPI&#xff08;六十八&#xff09;实战开发《在线课程学习系统》接口开发--用户 个人信息接口开发。这次我们去分享实战开发《在线…

【Linux操作系统】:进程间通信

目录 进程间通信介绍 1、进程间通信的概念 2、进程间通信的目的 3、进程间通信的本质 4、进程间通信的分类 管道 匿名管道 匿名管道的原理 pipe函数 创建匿名管道 管道的四种情况和五种特性 命名管道 使用命令创建命名管道 创建一个命名管道 命名管道的打开规则 …

Lc60---1189. “气球” 的最大数量(排序)---Java版

1.题目 2.思路 (1)用字典的方法,ballon,这个单词里面每个字母&#xff0c;需要的个数 (2)再创一个字典的方法统计&#xff0c;输入的字符串的字母的个数 (3)计算能拼凑出多少个“ballon" (4)代码解释 for (char c : text.toCharArray()) {count.put(c, count.getOrDefau…

【C++ —— AVL树】

C —— AVL树 AVL树的概念AVL树节点的定义AVL树的插入向上调整旋转左单旋右单旋左右双旋右左双旋 AVL树的高度AVL树的验证总结&#xff1a;代码 AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素…

在QT中使用多线程并发服务器(C++)

什么是多线程并发服务器&#xff1f;在QT里如何使用多线程并发服务器呢&#xff1f; 多线程并发服务器是一种网络服务器设计&#xff0c;它能够同时处理多个客户端的请求。在多线程服务器中&#xff0c;主线程负责监听和接受来自客户端的连接请求&#xff0c;每当有一个新的连…

DNS服务器的搭建

1、DNS服务器端软件 DNS 的域名解析都是 udp/53 . 主从之间的数据传输默认使 ⽤tcp/53 DNS服务器端软件&#xff1a; Bind是⼀款开放源码的DNS服务器软件&#xff0c;Bind由美国加州⼤学Berkeley&#xff08;伯克 利&#xff09;分校开发和维护的&#xff0c;全名为Berkele…

美容院如何提高门店销售业绩?博弈美业收银系统分享五大策略

美容院要如何增加门店业绩&#xff1f;各位老板可以考虑以下几个方面的策略&#xff1a; 一、品牌宣传和营销&#xff1a; • 制定全面的营销计划&#xff0c;包括线上和线下宣传。可以利用社交媒体、网站、本地广告等多种渠道提升品牌知名度。 • 开展促销活动吸引新客户&a…

PYTHON学习笔记(七、python数据结构--集合)

目录 &#xff08;4&#xff09;set集合 1、集合的创建方式 1&#xff09;使用{ }直接创建集合 2&#xff09;使用内置函数set( )创建集合 3&#xff09;使用“ 集合生成式 ”生成集合 2、集合的访问方式 1&#xff09;使用for循环遍历 3、集合的修改操作 4、集合的…