day17JS-Cookle、webStorage和Promise

news2024/9/28 15:33:32

1. 什么是Cookle

在网页中需要向当前电脑中存储一些数据,通过cookie可以存储。

Cookie :是一种由服务器发送到用户浏览器并保存在用户计算机上的小型文本文件,用于识别用户身份跟踪用户活动保存用户设置等。它通常包括名称、值、域名、路径、过期时间等字段

其它相关的概念:

  1. 程序运行在电脑上或者手机上,都叫做客户端或者服务端
  2. 客户端是用户显示使用的程序。
  3. 服务端是数据存储和操作的程序,为客户端提供数据的保障。
  4. 运行在插件或者其他程序中程序(runtime运行时)。

2. Cookle的使用方法

2.1 设置Cookle

document.cookie = "key=value";

注意!!!

如果key相同时就会覆盖上面key。

    <script>
        // 设置改变cookie
        document.cookie = "key=value";
        document.cookie = "name=xietian";
        // 如果key相同时就会覆盖上面
        document.cookie = "name=zhansang";
        document.cookie = "age=20";
        console.log(document.cookie);//key=value; name=zhansang; age=20
    </script>

2.2 获取Cookle

   <script>
        // 设置改变cookie
        document.cookie = "key=value"
        document.cookie = "name=xietian"
        // 如果key相同时就会覆盖上面
        document.cookie = "name=zhansang"
        document.cookie = "age=20"
        // 获取cookie, //key=value; name=zhansang; age=20
        function getCookie() {
            //split(";") ---> key=value name=zhansang age=20
            // 索引               0          1           2
            return document.cookie.split(";").reduce((value, item) => {
                //value是{},item是每一项的值
                //{key=value,name=zhansang,age=20}
                //split("=")---> [key,value] [name,zhansang] [age,20]
                var arr1 = item.trim().split("=")
                try {
                    value[arr1[0]] = JSON.parse(arr1[1]); //{key:value,name:zhansang,age:20}
                } catch (e) {
                    value[arr1[0]] = arr1[1];
                }
                return value;
            }, {})
        }
        var obj = getCookie();
        console.log(obj);
    </script>

 2.3 删除Cookle

js不能直接删除Cookle

1. 直接关闭浏览器。window需要再进程杀掉谷歌。

2. 点击浏览器中清除所有会话按钮。

3. 浏览器 --->设置 ---> 隐私和安全。

4. 设置Cookle的存活时长。谷歌浏览器禁止超过1年以上的存储。

知识点补充:

date.toUTCString(); :所有UTC都是国际时间格林尼治时间,将时间转换为格林尼治时间字符串。

var date=new Date();
date.setFullYear( 2099 );
//所有UTC都是国际时间格林尼治时间将时间转换为格林尼治时间字符串//谷歌浏览器禁止超过1年以上的存储
document.cookie="name=xietian;expires="+date.toUTCString();

3. Cookie的类型

       1. 会话Cookie(Session Cookies):这种类型的Cookie在浏览器关闭后就会被删除,主要用于保存用户的会话信息。由于它们不会在用户的计算机上长期保存,因此相对较为安全

        2. 持久Cookie(Persistent Cookies):与会话Cookie不同,持久Cookie会在用户的计算机上长期保存直到其过期时间到达被用户手动删除。这种类型的Cookie常用于保存用户的登录状态、个性化设置等信息

       3. 安全Cookie(Secure Cookies):安全Cookie只能通过HTTPS协议传输不能通过未加密的HTTP协议传输。这增加了Cookie在传输过程中的安全性。

       4. HttpOnly Cookie:HttpOnly是一个标志属性,用于防止JavaScript代码访问特定的Cookie。当设置了HttpOnly属性的Cookie被创建后,它将无法通过客户端脚本(如JavaScript)进行访问。这有助于减少跨站脚本攻击(XSS)的风险。

4. Cookle的特点

1、cookie的数据不能存储较大的数据(4-5K)。

2、cookie的数据会跟随访问服务端自动往返于客户端和服务端之间

3、cookie必须在使用web服务的情况下才可以使用

4、cookie存储是根据域名来存储不同域名之间不能相互访问

5、在前端发送请求到另一跨域地址中,也不会携带cookie跨域是只要么ip地址不同,要么端口号不同。

6、cookie是有时效性默认情况下cookie是关闭浏览器就销毁;cookie在浏览器中如果禁止cookie也不能存储cookie;浏览器可以随时销毁cookie,cookie可以通过设置保存时长来让cookie长期存储。

补充知识:

变量名.toUTCString(); :所有代UTC都是国际时间(格林尼治时间, 将时间转换为格林尼治时间字符串。

    <script>
        var date = new Date();
        date.setFullYear(2099);
        document.cookie = "name=xietian;expires=" + date.toUTCString();
    </script>

7、cookie存储按照路径存储的,每个路径下有自身的存储空间,相互之间方位。子级路径可以调用父级路径中cookie,但是父级路径无法调用子级路径中cookie,可以通过Path=设置路径让对应cookie存储在不同的级别上

5. Cookle的作用

       1. 会话管理:Cookie最初也是最主要的作用就是用于会话管理。当用户登录一个网站时,服务器会生成一个包含会话ID的Cookie并发送给浏览器,浏览器将这个Cookie保存在本地。此后,每次用户发送请求时,浏览器都会自动将这个Cookie发送给服务器,服务器通过会话ID识别用户身份,从而保持用户的登录状态。

       2. 个性化设置:Cookie还可以用来保存用户的个性化设置,如主题、语言、字体大小等。这样,当用户再次访问网站时,网站可以根据Cookie中的信息为用户提供更加个性化的体验。

        3. 购物车功能:在电子商务网站中,Cookie经常被用来实现购物车功能。当用户将商品添加到购物车时,这些信息会被保存在Cookie中。这样,即使用户关闭了浏览器或换了一台电脑,只要Cookie还在,购物车中的商品信息就不会丢失。

       4. 跟踪用户行为:网站可以使用Cookie跟踪用户在网站上的行为,如访问了哪些页面、停留了多长时间、点击了哪些链接等。这些数据对于网站优化、广告投放等都非常有价值。

        5. 第三方Cookie与广告定向:除了网站自己设置的Cookie外,还有一些第三方Cookie,它们通常由广告商或数据分析公司设置。这些Cookie可以用来跟踪用户在多个网站上的行为,从而为用户提供更加精准的广告定向服务。然而,这种跨站跟踪的行为也引发了关于隐私保护的争议。

6. Cookle可以做什么?

1、token(令牌)

       情况1:网页登录时发送用户名和密码给服务端,服务端会把用户名和密码加密后,得到字符串通过setCookie的方式设置会访问的客户端浏览器,在对应客户端浏览器中存储cookie中token内容,当刷新页面,或者重新打开网站时,因为cookie自动携带发送给服务端特性,这时候token就会发送给服务端,服务端对token解密。md5除外,md5不能解码。

       情况2 :或者将用户名和token发送给服务端,服务端去数据查询当前用户名的密码,然后根据指定的方式重新获取到token,然后比对发送来的toekn和服务端token是否一致来确定是否自动登录。

2、广告精准投放

3、临时存储当前用户对应的数据。

7. webStorage

webStorage分两类localStorage本地存储(长期存储)sessionStorage会话存储

localStorage可以看为一个对象,要存的key作为对象的属性就是这个结果

7.1 设置localStorage

设置方法一:localStorage.属性名 = "属性值";

设置方法二:localStorage.setItem("属性名", "属性值");

    <script>
        localStorage.name = "xietian";
        localStorage.age = 20;

        localStorage.setItem("sex", "男")
    </script>

7.2 获取localStorage

获取方法一:localStorage.属性名;

获取方法二:localStorage.getItem("属性名");

    <script>
        localStorage.name = "xietian";
        localStorage.age = 20;

        localStorage.setItem("sex", "男")


        // 获取
        console.log(localStorage.age);
        console.log(localStorage.getItem("name"));
        console.log(localStorage.getItem("sex"));
    </script>

7.3 删除localStorage

删除方法一:delete localStorage.属性名;

删除方法二:localStorage.removeItem("属性名");

    <script>
        delete localStorage.name;
        localStorage.removeItem("name");
    </script>

7.4 清空localStorage

localStorage.clear();

    <script>
        localStorage.clear();
        console.log(localStorage.length);
    </script>

8. Cookle和webStorage的区别

相同点cookie和webStorage只能存储字符串的内容,如果不是字符串需要先转换为字符串存储。

区别

1、LocalStorage是长期存储不会自动删除,可以通过浏览器删除,也可以手动删除, sessionStorage是会话级存储,如果关闭网页就是丢失,cookie也是会话级,当设置时效就会有时效性存储。

2、webStorage的存储比较大4-5M,cookie只有4-5K存储。

3、LocalStorage存储不区分路径sessionStorage即是同路径同页面不同的窗口打开数据不共享cookie根据不同路径存储

4、webStorage不会跟随发送通信发送给服务器,cookie会自动在前后端往返。

5、LocalStorage是可以侦听storage事件但只能针对window侦听。当跨页面设置storage时,另一个页面将会收到LocalStorage被改变的事件内容

这个页面:

    <script>
        window.addEventListener("storage", storageHandler);
        function storageHandler(e) {
            console.log(e);
        }
    </script>

 另一个页面:

<script>
    localStorage.num = 100;
</script>

6、LocalStorage可以用于大量数据的存储,比如部分js和css可以存储,用的时候可以直接调用不需要下载对应js和css

    <script>
        var script = document.createElement("script");
        script.innerHTML = localStorage.lodash;
        document.body.appendChild(script);

        console.log(_.chunk([1, 2, 3, 4, 5, 6], 3));
    </script>

9. 什么是Promise 

        Promise 是现代 JavaScript 中异步编程的基础。它是一个由异步函数返回的对象,可以指示操作当前所处的状态。在 Promise 返回给调用者的时候,操作往往还没有完成,但 Promise 对象提供了方法来处理操作最终的成功或失败。

使用方式:

    <script>
        var p = new Promise(function (resolve, reject) {
            // resolve();
            reject();
        })
    </script>

注意!!!

  1. 这个 resolvereject 两个回调函数名
  2. 在Promise中执行了resolve就不会执行reject执行reject就不会resolve。只执行其中一个回调函数。
  3. resolve reject 都可以传参且仅能传一个参数

10. Promise 实例对象的方法

  1. then() :最多接受两个参数(可以写两个函数),用于 Promise 兑现和拒绝情况的回调函数。它立即返回一个等效的 Promise 对象,允许你链接到其他 Promise 方法,从而实现链式调用。
  2. catch():用于在 Promise 链进行错误处理,因为它总是会返回一个 Promise,所以它可以和 then() 方法一样被链式调用。

当执行了Promise中resolve就会执行then中函数。

当执行了Promise中reject就会执行catch中函数。

      p.then(function(){

      }).catch(function(){

      })
<sceipt>
      // resolve和reject都可以传参,且仅能传一个参数
      new Promise(function(resolve,reject){
          resolve(1);
      }).then(function(n){
          console.log(n);
      })
</sceipt>

案例1: 

      setTimeout(function(){
          console.log("红灯");
      },1000)
      setTimeout(function(){
          console.log("黄灯");
      },2000)
      setTimeout(function(){
          console.log("绿灯");
      },3000)

案例2:

   setTimeout(fn1,1000);

      function fn1(){
          console.log("红灯");
          setTimeout(fn2,2000);
      }
      function fn2(){
          console.log("黄灯");
          setTimeout(fn3,3000);
      }
      function fn3(){
          console.log("绿灯");

      }

案例3:

        function showLight(light, time) {
          return new Promise(function (resolve, reject) {
            setTimeout(function () {
              console.log(light);
              resolve();
            }, time);
          });
        }

        //链式调用
        showLight("红灯",1000)
        .then(function(){
          // 在then 中return一个Promise
          return showLight("黄灯",2000)
        }).then(function(){
          return showLight("绿灯",3000)
        }).then(function(){
          console.log("执行完成")
        })

 Promise写法格式:

  写法一:
    function fn(){
          return new Promise(function(resolve,reject){
              setTimeout(function(){
                  // resolve();
                  reject();
              },1000)
          })
      }

      fn().then(function(){
          console.log("resolve");
      }).catch(function(){
          console.log("reject");
      })

--------------------------------------------------------------
 写法二:
     function fn(){
          return new Promise(function(resolve,reject){
              setTimeout(function(){
                  // resolve();
                  reject();
              },1000)
          })
      }

      //then可以写两个函数
      fn().then(function(){
          // resolve执行
      },function(){
          // reject执行
      })

10.1 resolvereject的传参

     // 传参
       function fn(a){
          return new Promise(function(resolve,reject){
              setTimeout(function(){
                  if(a>0){
                      resolve("aaa");
                  }else{
                      reject("bbb")
                  }
              },1000)
          })
      }

      fn(-2).then(function(value){
          console.log(value);
      }).catch(function(reason){
          console.log(reason);
      })

 10.2 then中关于return的问题

1. 如果在then中没有return一个Promise,则类似默认return一个Promise.resolve();。

 function fn(a){
          return new Promise(function(resolve,reject){
              setTimeout(function(){
                  if(a>0){
                      resolve("aa")
                  }else{
                      reject();
                  }
              },1000)
          })
      }

      fn(1).then(function(value){
          console.log(value);
          // 如果在then中没有return一个Promise,则类似默认return一个Promise.resolve();
          //类似默认如下:
          // return new Promise(function(resolve){
          //     resolve();
          // })
      }).then(function(value){
          console.log(value);
      })

2.如果resolve执行时传参是Promise,相当于在执行了里面Promise后把里面resolve1的结果,传递外面resolve,然后再传递给then。


      new Promise(function(resolve,reject){
          // 如果resolve执行时传参是Promise,相当于在执行了里面Promise后把里面resolve1的结果,传递外面resolve,
          // 然后再传递给then
          resolve(new Promise(function(resolve1,reject1){
              resolve1(1)
          }))
      }).then(function(value){
          console.log(value);
      })

案例:链式调用预加载问题

      function loadImage(src){
          return new Promise(function(resolve,reject){
              var img=new Image();
              img.src=src;
             img.addEventListener("load",()=>{
                  resolve(img);
             },{once:true})
          })
      }

      var arr=[];
      loadImage("./img/img_39.JPG")
      .then(function(img){
          arr.push(img);
          return loadImage("./img/img_40.JPG")
      }).then(function(img){
          arr.push(img);
          return loadImage("./img/img_41.JPG")
      }).then(function(img){
          arr.push(img);
          return loadImage("./img/img_42.JPG")
      }).then(function(img){
          arr.push(img);
          return loadImage("./img/img_43.JPG")
      }).then(function(img){
          arr.push(img);
          console.log(arr);
      })

10.3 Promise的状态机

      状态机运行原理: 刚开始的时候状态是pending,当执行resolve时,判断状态是不是pending,如果当前状态不是pending,就不会执行resolve函数了。如果是pending就会执行resolve函数,并且重新修改当前的状态为fulfilled,再次执行resolve,当前状态已经是fulfilled,所以不会执行resolve了。如果执行reject,当前状态是pending状态,就会执行resolve,并且将状态修改为rejected,如果当前状态不是pending状态,就不会再次执行reject。

  • 待定pending):初始状态,既没有被兑现,也没有被拒绝。
  • 已兑现fulfilled):意味着操作成功完成。当执行了resolve后就会触发状态改变为fulfilled。
  • 已拒绝rejected):意味着操作失败。当执行了reject后就会触发状态改变为rejected。

当我们在Promise中执行reject,但是没有设置then中第二个回调函数或者没有设置catch,就会报错

报错案例:

  var p=new Promise(function(resolve,reject){
          resolve()
      })

      console.log(p);

1. 只能在then和catchreturn的Promise才能被下一个then收到

2. finally回调函数中return Promise不会向下面的then去传递

案例:

      function loadImage(src) {
        return new Promise(function (resolve, reject) {
          var img = new Image();
          img.src = src;
          img.onload=function(){
            resolve(img)
          }
          img.onerror=function(){
            reject(src);
          }
        });
      }

      var arr=[]
      loadImage("./img/img_31.JPG")
      .then(function(img){
        arr.push(img);
    
      }).catch(function(src){
      
      }).finally(function(){
        console.log("aaa");
        // 只能在then和catch中return的Promise才能被下一个then收到
        // finally回调函数中return Promise不会向下面的then去传递
        return loadImage("./img/img_39.JPG")
      }).then(function(img){
        console.log("bbb");
        arr.push(img);
        console.log(arr);
      })

11. Promise的静态方法

1. all() :同时异步多个Promise,并且返回resolve结果的列表。将所有需要Promise的对象放在数组中,然后把数组放在all里面,当then执行时,就会把每个Promise中resolve()传参的结果放在一个数组中传出。如果有一个出错,就会执行catch,不会执行then,必须保证所有Promise都会执行resolve

案例1:

    function loadImage(src) {
        return new Promise(function (resolve, reject) {
          var img = new Image();
          img.src = src;
          img.onload=function(){
            resolve(img)
          }
          img.onerror=function(){
            reject(src);
          }
        });
      }

    // all
    // 同时异步多个Promise,并且返回resolve结果的列表
    //   将所有需要Promise的对象放在数组中,然后把数组放在all里面,then执行时,就会把每个Promise中
    // resolve()传参的结果放在一个数组中,传出
    let arr=Array(5).fill(1).map((item,index)=>loadImage(`./img/img_${39+index}.JPG`));

    Promise.all(arr).then(function(list){
        console.log(list);
    })

 案例2:

    function loadImage(src) {
        return new Promise(function (resolve, reject) {
          var img = new Image();
          img.src = src;
          img.onload=function(){
            resolve(img)
          }
          img.onerror=function(){
            reject(src);
          }
        });
      }
    let arr=Array(5).fill(1).map((item,index)=>loadImage(`./img/img_${38+index}.JPG`));

    // 如果有一个出错,就会执行catch,不会执行then,必须保证所有Promise都会执行resolve
    Promise.all(arr).then(function(list){
        console.log(list);
    }).catch(function(e){
        console.log(e);
    })

2. allSettled() :同时异步执行多个promise在执行失败后仍然执行then,返回的内容中也是一个数组,数组中的内容是一个对象,对象中都有status值如果是"fulfilled"就是成功,如果是rejected就是失败的。如果成功,value就是返回的结果,如果失败,reason就是错误的结果。

 案例:

    function loadImage(src) {
        return new Promise(function (resolve, reject) {
          var img = new Image();
          img.src = src;
          img.onload=function(){
            resolve(img)
          }
          img.onerror=function(){
            reject(src);
          }
        });
      }
   let arr=Array(5).fill(1).map((item,index)=>loadImage(`./img/img_${38+index}.JPG`));

    Promise.allSettled(arr).then(function(list){
        // console.log(list);
        list=list.reduce(function(value,item){
            if(item.status==="fulfilled") value.push(item.value);
            return value;
        },[])
        console.log(list);
       
    })

3. race() :赛跑。同时对多个异步Promise执行,谁先执行完成resolve,就返回这个resolve的结果。如果有一个调用reject不会调用then。

    function loadImage(src) {
        return new Promise(function (resolve, reject) {
          var img = new Image();
          img.src = src;
          img.onload=function(){
            resolve(img)
          }
          img.onerror=function(){
            reject(src);
          }
        });
      }
    let arr=Array(5).fill(1).map((item,index)=>loadImage(`./img/img_${38+index}.JPG`));
    Promise.race(arr).then(function(img){
        console.log(img);
    })

4. any() :任意。同时对多个异步Promise执行,谁先执行完成resolve,就返回这个resolve的结果。 即是有reject,也会执行then。

    function loadImage(src) {
        return new Promise(function (resolve, reject) {
          var img = new Image();
          img.src = src;
          img.onload=function(){
            resolve(img)
          }
          img.onerror=function(){
            reject(src);
          }
        });
      }
   let arr=Array(5).fill(1).map((item,index)=>loadImage(`./img/img_${38+index}.JPG`));
    Promise.any(arr).then(function(img){
        console.log(img);
    })

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

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

相关文章

云服务器+docker:还在为项目上线苦恼?一文包你解决(保姆级教程,图文并茂,万字起步!!!)

目录 Blue留言机&#xff1a; 学习视频以及参考资料 &#xff1a; 1、学习之前的必备操作&#xff1a; 第一步&#xff1a;购买服务器 选择一台免费的云服务器&#xff08;包白嫖的&#xff09; 配置服务器的一点说明&#xff1a; 查看自己是否购买成功&#xff1a; 第…

解决UOS开发截图时电脑滴滴声

在使用import命令截图时&#xff0c;电脑会伴随滴滴声&#xff0c;影响程序使用体验&#xff0c;使用 sudo rmmod pscpkr 即可解决滴滴声&#xff0c;这个命令每次开机&#xff0c;重新运行程序时都需输入&#xff0c;因此需要在脚本文件中自动执行&#xff0c;但是sudo命令需…

Tomcat8版本以上配置自定义400错误页面

问题&#xff1a;当请求URL包含特殊字符时&#xff0c;Tomcat会自动拦截并返回400状态码页面&#xff0c;暴露了tomcat的版本信息&#xff0c;这是很严重的安全漏洞。 java.lang.IllegalArgumentException: 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义 解…

Kafka【六】Linux下安装Kafka(Zookeeper)集群

Kafka从早期的消息传输系统转型为开源分布式事件流处理平台系统&#xff0c;所以很多核心组件&#xff0c;核心操作都是基于分布式多节点的。本文这里采用三台虚拟机模拟真实物理主机搭建Zookeeper集群和kafka集群。 VMware可以使用户在一台计算机上同时运行多个操作系统&…

符合全真彩的简单完美正方形

符合全真彩的简单完美正方形&#xff0c;像素&#xff1a;4096x4096、颜色&#xff1a;16,777,216。 原图可透过 https://linxinglu.com/art/#245.png 访问 &#xff0c;除了分辨率 4096x4096&#xff0c;也就是 16777216 像素&#xff0c;颜色数量也恰好是 16777216&#xff0…

静态字段和静态方法

1. 静态字段 1. 用static修饰的字段。 2. 实例字段在每个实例中有自己的独立”空间“&#xff0c;静态字段只有共享”空间“&#xff0c;所有实例共享该字段。 3. 使用”类名.静态字段“调用静态字段&#xff0c;静态字段不属于实例&#xff0c;是类class本身的…

四川财谷通抖音小店创新引领新风尚

在数字化浪潮的推动下&#xff0c;电商行业蓬勃发展&#xff0c;抖音小店作为新兴的电商平台&#xff0c;凭借其独特的社交属性和便捷的购物体验&#xff0c;迅速赢得了广大消费者的青睐。在众多抖音小店中&#xff0c;四川财谷通抖音小店以其精准定位、高质量内容、一站式服务…

iLogtail 开源两周年:社区使用调查报告

作者&#xff1a;玄飏 iLogtail 作为阿里云开源的可观测数据采集器&#xff0c;以其高效、灵活和可扩展的特性&#xff0c;在可观测采集、处理与分析领域受到了广泛的关注与应用。在 iLogtail 两周年之际&#xff0c;我们对 iLogtail 开源社区进行了一次使用调研&#xff0c;旨…

http连接处理(最新版)

分析http类及请求接收 基础 epoll epoll_create函数 #include <sys/epoll.h> int epoll_create(int size) 创建一个指示epoll内核事件表的文件描述符&#xff0c;该描述符将用作其他epoll系统调用的第一个参数&#xff0c;size不起作用。 epoll_ctl函数 #include …

程序设计—房屋租赁系统 项目源码31279

摘 要 在当今社会&#xff0c;随着城市化进程的不断加速&#xff0c;房屋租赁市场的需求日益增长。然而&#xff0c;传统的房屋租赁方式存在信息不对称、租房过程繁琐等问题&#xff0c;因此需要建立一套高效、便捷的房屋租赁系统来满足用户的需求。通过深入研究房屋租赁市场的…

华为 HCIP-Datacom H12-821 题库 (8)

有需要题库的可以看主页置顶 V群仅进行学习交流 1.在 DHCP 运行过程中&#xff0c;如果客户端 IP 地址在相约过去 87.5%还没有完成续约的话&#xff0c;客户将发送什么报文进行再次续约&#xff1f; A、DHCP discover 广播报文 B、DHCP release 单播报文 C、DHCP request 广播…

探索MongoDB的Python之钥:pymongo的魔力

文章目录 探索MongoDB的Python之钥&#xff1a;pymongo的魔力背景&#xff1a;为什么选择pymongo&#xff1f;简介&#xff1a;pymongo是什么&#xff1f;安装&#xff1a;如何将pymongo纳入你的项目&#xff1f;基础用法&#xff1a;五个核心函数介绍1. 连接到MongoDB2. 选择数…

基于数字孪生搭建的智慧地铁站管理平台

数字孪生技术是指通过数学模型和实时数据同步反映实体系统运行状态的数字复制品建模。在智慧地铁站管理中&#xff0c;数字孪生技术的应用使得地铁站的运营管理更加高效、智能化&#xff0c;并提升了安全性和服务质量。以下是古河云科技小编整理的数字孪生搭建的智慧地铁站管理…

【学习笔记】Kylin-Desktop-V10-SP1 麒麟系统知识1——常用软件的基本操作

一、前期准备 成功安装麒麟系统&#xff08;本次实验的安装的系统是&#xff1a;Kylin-Desktop-V10-SP1&#xff09; &#xff09; 二、学习内容 提示&#xff1a;学习麒麟Kylin-Desktop-V10-SP1系统自带软件的基本操作&#xff0c;包括开始菜单、设置、归档管理器、文件管理器…

hive on spark 合并小文件

最近在做用户画像相关的数据开发&#xff0c;在hive中做行转列的过程中&#xff0c;每个标签即tag在写入hive表时&#xff0c;有大量的小文件生成&#xff0c;通过增加参数解决了小文件过多的问题&#xff0c;但是在完成特殊要求--&#xff08;因后续需要同步ck&#xff0c;ck也…

英伟达RTX 50系显卡功耗曝光:5090比上代激增33%、性能比4090高70%,爆料来自于kopite7kimi。

在科技爱好者翘首以盼的9月4日&#xff0c;一则来自国际知名媒体的深度报道犹如一枚重磅炸弹&#xff0c;在显卡领域掀起了轩然大波。据该报道透露&#xff0c;英伟达正紧锣密鼓地筹备其下一代旗舰级显卡——RTX 5090&#xff0c;其功耗之巨&#xff0c;直接跃升至前所未有的60…

如何让wave波形信号不显示全路径

Modesim仿真如何让wave信号不显示全路径 问题说明 在使用modesim仿真时&#xff0c;需要利用modesim的wave界面显示调试信号的波形&#xff0c;默认情况下wave栏的左边是显示抓捕信号的全路径的&#xff0c;如下图所示: 这种情况下&#xff0c;区分信号比较麻烦&#xff0c;如…

ArkUI-动画

ArkUI-动画 系统能力属性动画显式动画 关键帧动画转场动画路径动画粒子动画 资源调用GIF动画帧动画 三方库LottieSVG 提升动画的流畅度使用renderGroup概述使用约束 系统能力 属性动画 通过更改组件的属性值实现渐变过渡效果&#xff0c;例如缩放、旋转、平移等。支持的属性包…

解决el-table中使用el-input无法聚焦问题

在el-table中点击单元格时使用el-input或其他表单组件编辑单条数据。会出现聚焦不上的问题&#xff0c;需要手动点击才能够聚焦。究其原因是因为点击单元格时页面已自动聚焦到单元格&#xff0c;此时无法自动聚焦到对应的表单&#xff0c;需要手动设置。 <template><e…

微积分-积分应用5.2(体积)

在尝试找到一个固体的体积时&#xff0c;我们面对的问题与寻找面积时相同。我们对体积的概念有直观的理解&#xff0c;但我们必须通过使用微积分来精确定义体积。 我们从一种简单类型的固体——称为柱体&#xff08;或更准确地说&#xff0c;直柱体&#xff09;——开始。如图…