WEB APIs day4 (2)

news2024/11/17 3:56:23

三、M端事件

在这里插入图片描述在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>M端事件</title>
    <style>
        div {
            width: 300px;
            height: 300px;
            background-color: pink;
        }
    </style>
</head>

<body>
    <div></div>
    <script>
        // 只有移动端才有效果
        const div = document.querySelector('div')
        // 1. 触摸
        div.addEventListener('touchstart', function () {
            console.log('开始触摸了')
        })
        // 2. 离开
        div.addEventListener('touchend', function () {
            console.log('离开了')
        })
        // 3. 移动
        div.addEventListener('touchmove', function () {
            console.log('移动')
        })
    </script>
</body>

</html>

四、JS插件

在M端做轮播图非常麻烦,为了节省事件,我们一般都是用的JS插件去完成
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
然后直接在demos 里面打开序号30 的就可以了
在这里插入图片描述在这里插入图片描述
样式复制完就复制结构,然后再复制js
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>移动端轮播图</title>
    <link rel="stylesheet" href="./css/swiper.min.css">
    <style>
        .box {
            position: relative;
            width: 800px;
            height: 300px;
            background-color: pink;
            margin: 100px auto;
        }


        html,
        body {
            position: relative;
            height: 100%;
        }

        body {
            background: #eee;
            font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
            font-size: 14px;
            color: #000;
            margin: 0;
            padding: 0;
        }

        .swiper {
            /* 让它不超出 */
            overflow: hidden;
            width: 100%;
            height: 100%;
        }

        .swiper-slide {
            text-align: center;
            font-size: 18px;
            background: #fff;

            /* Center slide text vertically */
            display: -webkit-box;
            display: -ms-flexbox;
            display: -webkit-flex;
            display: flex;
            -webkit-box-pack: center;
            -ms-flex-pack: center;
            -webkit-justify-content: center;
            justify-content: center;
            -webkit-box-align: center;
            -ms-flex-align: center;
            -webkit-align-items: center;
            align-items: center;
        }

        .swiper-slide img {
            display: block;
            width: 100%;
            height: 100%;
            object-fit: cover;
        }
    </style>
</head>

<body>
    <div class="box">
        <!-- 结构一定要放到box里面去因为我们轮播图就要box这么大 -->
        <!-- Swiper -->
        <div class="swiper mySwiper">
            <div class="swiper-wrapper">
                <div class="swiper-slide">Slide 1</div>
                <div class="swiper-slide">Slide 2</div>
                <div class="swiper-slide">Slide 3</div>
                <div class="swiper-slide">Slide 4</div>
                <div class="swiper-slide">Slide 5</div>
                <div class="swiper-slide">Slide 6</div>
                <div class="swiper-slide">Slide 7</div>
                <div class="swiper-slide">Slide 8</div>
                <div class="swiper-slide">Slide 9</div>
            </div>
            <div class="swiper-pagination"></div>
        </div>
    </div>
    <!-- 引入js -->
    <script src="./js/swiper.min.js"></script>
    <!-- 调用js -->
    <!-- Initialize Swiper -->
    <script>
        // new swiper 实例化
        var swiper = new Swiper(".mySwiper", {
            // 小圆点
            pagination: {
                el: ".swiper-pagination",
            },
            // 自动播放
            autoplay: {
                delay: 1000,//1秒切换一次
                disableOnInteraction: false,   //鼠标点击 触摸之后,自动继续播放
            },
            // 可以键盘控制swiper
            keyboard: {
                enabled: true,
                onlyInViewport: true,
            },
        });
    </script>
    <!-- 我们想要给它添加一个自动播放效果 -->
</body>

</html>

游乐园案例

第一步引入,一定要将min.js,min.css放在游乐园(FC)的目录下,不能乱放。在这里插入图片描述
复制过来的css代码就不放index.css里面了,直接放在这里,如果要放也是放在less里面,index.css是通过less来写的。把结构复制粘贴到banner盒子里面去。js一定要放在引用的swiper下面,因为这样才能实例化。
小圆点是可以改变掉的,我们可以直接覆盖掉前面的。
在这里插入图片描述
发现选中的小圆点颜色也被覆盖掉了。在这里插入图片描述
滑动最后一张轮播图的时候发现有回弹效果

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>游乐园移动端</title>
  <!-- 引入favicon图标 -->
  <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
  <!-- 引入字体图标 -->
  <link rel="stylesheet" href="./lib/iconfont/iconfont.css">
  <!-- 引入index.css -->
  <link rel="stylesheet" href="./css/index.css">
  <link rel="stylesheet" href="./css/swiper.min.css">
  <style>
    /* 复制过来的css代码就不放index.css里面了,直接放在这里,如果要放也是放在less里面,index.css是通过less来写的 */
    html,
    body {
      position: relative;
      height: 100%;
    }

    body {
      background: #eee;
      font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
      font-size: 14px;
      color: #000;
      margin: 0;
      padding: 0;
    }

    .swiper-container {
      width: 100%;
      height: 100%;
    }

    .swiper-slide {
      text-align: center;
      font-size: 18px;
      background: #fff;

      /* Center slide text vertically */
      display: -webkit-box;
      display: -ms-flexbox;
      display: -webkit-flex;
      display: flex;
      -webkit-box-pack: center;
      -ms-flex-pack: center;
      -webkit-justify-content: center;
      justify-content: center;
      -webkit-box-align: center;
      -ms-flex-align: center;
      -webkit-align-items: center;
      align-items: center;
    }

    /* 小圆点是可以改变掉的,我们可以直接覆盖掉前面的 */
    .swiper-pagination-bullet {
      background: #fff;
      opacity: .8;
    }

    /* 发现高亮也被覆盖掉了 */
    .swiper-pagination-bullet-active {
      background: pink;
    }
  </style>
</head>

<body>
  <!-- 页面主体部分 -->
  <div class="main">
    <!-- 轮播图模块 -->
    <div class="banner">
      <!-- <ul>
        <li>
          <a href="#">
            <img src="./uploads/banner_1.png" alt="">
          </a>
        </li>
      </ul> -->
      <!-- 轮播图模块 -->
      <!-- Swiper -->
      <div class="swiper-container">
        <div class="swiper-wrapper">
          <div class="swiper-slide">
            <!-- 这个已经给我们做了定制,有几张图片就会给我们生成几个小圆点,跟bootstrap不一样,bootstrap的小圆点要跟着一起改变 -->
            <a href="#"><img src="./uploads/banner_1.png" alt=""></a>
          </div>
          <div class="swiper-slide">
            <a href="#"><img src="./uploads/banner_1.png" alt=""></a>
          </div>
          <div class="swiper-slide">
            <a href="#"><img src="./uploads/banner_1.png" alt=""></a>
          </div>
          <div class="swiper-slide">
            <a href="#"><img src="./uploads/banner_1.png" alt=""></a>
          </div>
          <div class="swiper-slide">
            <a href="#"><img src="./uploads/banner_1.png" alt=""></a>
          </div>
        </div>
        <!-- Add Pagination -->
        <div class="swiper-pagination"></div>
      </div>
    </div>
    <!-- 标题模块 -->
    <div class="title">
      <h4>乐园活动</h4>
    </div>

    <!-- 活动项目模块 -->
    <div class="item">
      <!-- 图片模块 -->
      <div class="pic">
        <!-- 图片 -->
        <a href="#">
          <img src="./uploads/item_2.png" alt="">
        </a>
        <!-- 进行模块 -->
        <div class="status">
          进行中
        </div>
        <!-- 收藏 -->
        <div class="collect">
          <i class="iconfont icon-shoucang1"></i>
        </div>
      </div>

      <!-- 信息模块 -->
      <div class="info">
        <h5>疯狂的红包 不一样的撕名牌 大型家庭亲子户外活动</h5>
        <div class="rest">
          <span>
            <i class="iconfont icon-qizhi"></i>
            200人报名
          </span>
          <span>
            <i class="iconfont icon-shizhong"></i>
            本周六开始</span>
        </div>
      </div>
    </div>

    <!-- 活动项目模块 -->
    <div class="item">
      <!-- 图片模块 -->
      <div class="pic">
        <!-- 图片 -->
        <a href="#">
          <img src="./uploads/item_2.png" alt="">
        </a>
        <!-- 进行模块 -->
        <div class="status">
          进行中
        </div>
        <!-- 收藏 -->
        <div class="collect">
          <i class="iconfont icon-shoucang1"></i>
        </div>
      </div>

      <!-- 信息模块 -->
      <div class="info">
        <h5>疯狂的红包 不一样的撕名牌 大型家庭亲子户外活动</h5>
        <div class="rest">
          <span>
            <i class="iconfont icon-qizhi"></i>
            200人报名
          </span>
          <span>
            <i class="iconfont icon-shizhong"></i>
            本周六开始</span>
        </div>
      </div>
    </div>
    <!-- 活动项目模块 -->
    <div class="item">
      <!-- 图片模块 -->
      <div class="pic">
        <!-- 图片 -->
        <a href="#">
          <img src="./uploads/item_2.png" alt="">
        </a>
        <!-- 进行模块 -->
        <div class="status">
          进行中
        </div>
        <!-- 收藏 -->
        <div class="collect">
          <i class="iconfont icon-shoucang1"></i>
        </div>
      </div>

      <!-- 信息模块 -->
      <div class="info">
        <h5>疯狂的红包 不一样的撕名牌 大型家庭亲子户外活动</h5>
        <div class="rest">
          <span>
            <i class="iconfont icon-qizhi"></i>
            200人报名
          </span>
          <span>
            <i class="iconfont icon-shizhong"></i>
            本周六开始</span>
        </div>
      </div>
    </div>
    <!-- 活动项目模块 -->
    <div class="item">
      <!-- 图片模块 -->
      <div class="pic">
        <!-- 图片 -->
        <a href="#">
          <img src="./uploads/item_2.png" alt="">
        </a>
        <!-- 进行模块 -->
        <div class="status">
          进行中
        </div>
        <!-- 收藏 -->
        <div class="collect">
          <i class="iconfont icon-shoucang1"></i>
        </div>
      </div>

      <!-- 信息模块 -->
      <div class="info">
        <h5>疯狂的红包 不一样的撕名牌 大型家庭亲子户外活动</h5>
        <div class="rest">
          <span>
            <i class="iconfont icon-qizhi"></i>
            200人报名
          </span>
          <span>
            <i class="iconfont icon-shizhong"></i>
            本周六开始</span>
        </div>
      </div>
    </div>
  </div>
  <!-- 底部盒子 -->
  <footer class="toolbar">
    <a href="#" class="active">
      <i class="iconfont icon-index-copy"></i>
      <span>首页</span>
    </a>
    <a href="#">
      <i class="iconfont icon-youhuiquan"></i>
      <span>卡卷</span>
    </a>
    <a href="#">
      <i class="iconfont icon-index-copy"></i>
      <span>首页</span>
    </a>
  </footer>

  <!-- 引入js文件 -->
  <script src="./js/flexible.js"></script>
  <script src="./js/swiper.min.js"></script>
  <!-- Initialize Swiper -->
  <script>
    var swiper = new Swiper('.swiper-container', {
      pagination: {
        el: '.swiper-pagination',
      },
      autoplay: {
        delay: 3000,//3秒切换一次
      },
    });
  </script>
</body>

</html>

五、综合案例

在这里插入图片描述在这里插入图片描述
这个案例主要练习的是对数据的操作,虽然频繁地去渲染会耗费性能,但是这种开发我们最后都不是用的dom去开发,而是vue,它就没有这种性能问题。
在这里插入图片描述在这里插入图片描述
tbody.appendChild(tr) 因为它是后追加,所以它是数组原来有几条数据,就把几条数据渲染出来,再在原来的基础上往上面放,就会出现下面重复渲染之前的数据的情况。为了解决这样的问题,我们应该把tbody里面的数据清空之后再渲染数据。
在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
删除不是删除的dom元素,而是数组里面的数据。有可能数据很多,所以考虑用事件委托来做,就不用把所有的小a获取过来了。td,tr都很多,再往上找所以事件委托给tbody,tbody只有一个

在这里插入图片描述在这里插入图片描述在这里插入图片描述
非空判断:
表单你想要拿数据,必须要有name,这5个表单的特点是就它们有name,其他的标签都没有name属性。
把所有带有name属性的表单获取过来,是一个数组。然后我们挨个遍历,只要有一个它的value值为空,我们就返回错误,中断这次录入。
中断的关键字是return。因为我们的submit是在一个函数里面的,return是退出函数,一退出函数就不再执行了,所以它退出的是函数。
别一点击就开始判断了,按道理一点击应该先阻止默认行为再进行判断。只要几个表单有一个的值为空都不让通过。
写在创建对象的前面,阻止默认行为的后面。
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <title>学生信息管理</title>
  <link rel="stylesheet" href="css/index.css" />
</head>

<body>
  <h1>新增学员</h1>
  <form class="info" autocomplete="off">
    姓名:<input type="text" class="uname" name="uname" />
    年龄:<input type="text" class="age" name="age" />
    性别:
    <select name="gender" class="gender">
      <option value=""></option>
      <option value=""></option>
    </select>
    薪资:<input type="text" class="salary" name="salary" />
    就业城市:<select name="city" class="city">
      <option value="北京">北京</option>
      <option value="上海">上海</option>
      <option value="广州">广州</option>
      <option value="深圳">深圳</option>
      <option value="曹县">曹县</option>
    </select>
    <button class="add">录入</button>
  </form>

  <h1>就业榜</h1>
  <table>
    <thead>
      <tr>
        <th>学号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>性别</th>
        <th>薪资</th>
        <th>就业城市</th>
        <th>操作</th>
      </tr>
    </thead>
    <!-- 追加是爸爸追加孩子  追加行就是追加给tbody -->
    <tbody>
      <!-- 
        <tr>
          <td>1001</td>
          <td>欧阳霸天</td>
          <td>19</td>
          <td>男</td>
          <td>15000</td>
          <td>上海</td>
          <td>
            <a href="javascript:">删除</a>
          </td>
        </tr> 
        -->
    </tbody>
  </table>
  <script>
    // 获取元素
    const uname = document.querySelector('.uname')
    const age = document.querySelector('.age')
    const gender = document.querySelector('.gender')
    const salary = document.querySelector('.salary')
    const city = document.querySelector('.city')
    // 获取tbody元素  标签不需要加.
    const tbody = document.querySelector('tbody')
    // 声明一个空的数组, 增加和删除都是对这个数组进行操作
    const arr = []

    // 1. 录入模块
    // 1.1 表单提交事件
    const info = document.querySelector('.info')
    // 是提交事件而不是点击事件
    // 表单有两个按钮,一个提交按钮,一个重置按钮 submit reset
    info.addEventListener('submit', function (e) {
      // 当点击录入之后,会默认跳转,显示不了打印的内容
      // 阻止默认行为  不跳转
      e.preventDefault()
      // console.log(11)

      // 非空判断
      // 这里进行表单验证 如果不通过,直接中断,不需要添加数据
      // 获取所有带有name属性的元素
      const items = document.querySelectorAll('[name]')
      // 一点击就开始遍历循环
      for (let i = 0; i < items.length; i++) {
        if (items[i].value === '') {
          return alert('输入内容不能为空')
        }
      }


      // 点击录入之后我们就可以拿到这些值,拿到值之后就可以把它以对象的形式存到数组里面去
      // 创建新的对象
      const obj = {
        // 序号与数组的长度有关
        stuId: arr.length + 1,
        // 第一个uname指的是属性名,第二个uname指的是表单的值,刚好两者的名字一样而已
        uname: uname.value,
        age: age.value,
        gender: gender.value,
        salary: salary.value,
        city: city.value
      }
      // console.log(obj)
      // 追加到数组里面
      arr.push(obj)
      // console.log(arr)
      // 输入完点录入之后表单上面还是有数据,正常情况下我们要清空
      // 清空表单
      // info就是表单,表单就是它自己
      // 表单也有提交事件,它有个事件叫做重置(value都为空的方式太麻烦了stuId,uname...都要设置为空)
      this.reset()
      // 函数不调用,自己不执行
      // 调用渲染函数
      render()
    })


    // 数组添加一条要渲染,删除一条要渲染,相同的代码我们可以选择封装函数 
    // 2. 渲染函数 因为增加和删除都需要渲染
    function render() {
      // 为解决这个bug,应该先清空tbody以前的行,再把最新数组里面的数据渲染完毕 
      // 代码从上往下执行,每次都能清空tbody之后再渲染
      tbody.innerHTML = ''
      // 渲染的第一步是把数组拿过来,看看有几条数据就可以渲染了
      // 遍历arr数组
      for (let i = 0; i < arr.length; i++) {
        // 生成 tr  tr不能为空
        // 不能是querySelector 因为页面中没有行,行是生成的
        const tr = document.createElement('tr')
        // 这个a是通过for循环遍历出来的,在生成这个标签的时候连着自定义属性一块儿写上
        // 循环是从上往下去遍历,第一次索引号是0,0我们生成第一条数据,所以它的索引号就是 i
        tr.innerHTML = `
          <td>${arr[i].stuId}</td>
          <td>${arr[i].uname}</td>
          <td>${arr[i].age}</td>
          <td>${arr[i].gender}</td>
          <td>${arr[i].salary}</td>
          <td>${arr[i].city}</td>
          <td>
            <a href="javascript:" data-id=${i}>删除</a>
          </td>
        `

        // 追加元素  父元素.appendChild(子元素)
        tbody.appendChild(tr)   //因为它是后追加,所以它是数组原来有几条数据,就把几条数据渲染出来,再在原来的基础上往上面放
      }
    }


    // 3. 删除操作
    // 3.1 事件委托  tbody
    tbody.addEventListener('click', function (e) {
      // 给a绑定一个自定义属性,绑定它的序号,然后拿到0,1,在数组里面删掉即可
      // a链接的自定义属性,以前我们是手动一个一个添的,其实真正开发中是生成的
      // tbody里面的元素有很多,有tr,td,等,我们点a
      if (e.target.tagName === 'A') {
        // alert(11)
        // 当我点完a之后要拿到当前元素的自定义属性  data-id
        // console.log(e.target.dataset.id)
        // 删除arr 数组里面对应的数据
        arr.splice(e.target.dataset.id, 1)
        console.log(arr)
        // 不管是添加还是删除,数组都发生变化了,要重新渲染, 渲染函数之后,重新执行遍历,遍历的时候少了一条,所以在页面追加的时候就少追加一条
        // 重新渲染
        render()
      }
    })

  </script>
</body>

</html>

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

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

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

相关文章

数据安全:DataSecurity Plus

随着数字化时代的来临&#xff0c;数据成为了企业和个人生活中不可或缺的一部分。然而&#xff0c;数据的增长和广泛应用也带来了许多安全挑战。数据泄露、黑客攻击和恶意软件成为了威胁数据安全的主要因素。在这个充满风险的环境中&#xff0c;DataSecurity Plus作为一种强大的…

计算机二级Python基本操作题-序号42

1. 根据斐波那契数列的定义&#xff0c;F(0)0&#xff0c;F(1)1&#xff0c;F(n)F(n-1)F(n-2)(n>2)&#xff0c;输出不大于50的序列元素。 例如&#xff1a;屏幕输出示例为&#xff1a; 0&#xff0c;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;…&#xff08;略…

docker部署vue项目

材料&#xff1a; 1.打包好的vue的dist文件夹 2.docker环境 运行环境结构图&#xff1a; dist&#xff1a;打包的项目 default.conf: nginx的配置文件 gzip on; #开启或关闭gzip on off gzip_disable "msie6"; gzip_buffers 4 16k; gzip_comp_level 8; gzip_typ…

Nuclei漏洞扫描工具

Nuclei漏洞扫描工具&#xff1a; Nuclei 是一款基于YAML语法模板的开发的定制化快速漏洞扫描器。它使用Go语言开发&#xff0c;具有很强的可配置性、可扩展性和易用性。 提供 TCP、DNS、HTTP、FILE 等各类协议的扫描&#xff0c;通过强大且灵活的模板&#xff0c;可以使用 Nucl…

电商运营的方法

1、以后干,不如现在干 1.1 做代理,搞研发 1.2 自建店铺,去看其他店铺的设计样板 1.3 记住网店挣钱三要点:装修,物流,产品资源 1.4 记住你的职责,让别人明白怎么做,仔细看资料,搞清楚细节 2、如何打开机器人 3.设置自动回复 Ctrl + tab 4.如何做基础销量,做一个刷…

查看8080端口会不会被占用

相关命令 查看8080端口会不会被占用 netstat -ano | findstr 8080 查看 终止占用端口xxx的进程 taskkill /f /pid xxx 具体步骤 第一步&#xff1a;点击起始菜单&#xff08;或是通过winR快捷键&#xff09;&#xff0c;在输入框中输入cmd&#xff0c;点击确定&#x…

十七章:FickleNet:使用随机推理进行弱监督和半监督语义图像分割

0.摘要 弱监督语义图像分割的主要障碍在于从粗糙的图像级注释中获取像素级信息的难度。大多数基于图像级注释的方法使用从分类器获得的定位地图&#xff0c;但这些地图仅关注对象的小区别部分&#xff0c;不捕捉精确的边界。FickleNet探索由通用深度神经网络创建的特征图上的各…

环境搭建-Ubuntu20.04.6系统TensorFlow BenchMark的GPU测试

1. 下载Ubuntu20.04.6镜像 登录阿里云官方镜像站&#xff1a;阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 2. 测试环境 Server OS&#xff1a;Ubuntu 20.04.6 LTS Kernel: Linux 5.4.0-155-generic x86-64 Docker Version&#xff1a;24.0.5, build ced0996 docker-com…

MSP432自主开发笔记5:IIC通信移植与驱动AT24Cxx存储芯片

今日学习移植MSP432的IIC总线协议&#xff0c;并用此驱动AT24C02芯片实现写入以及读取的功能&#xff0c;然后实现打印开机复位次数的效果。 文章贴出测试工程&#xff0c;测试截图&#xff0c;测试代码~ 其实是实在看不懂MSP432有关于FLASH存储操作相关的英文手册与例程&…

怎么学习Java并发编程相关技术? - 易智编译EaseEditing

学习Java并发编程可以通过多种方式进行&#xff0c;包括但不限于以下几种&#xff1a; 在线教程和学习平台&#xff1a; 网上有许多免费和付费的Java并发编程教程和学习平台&#xff0c;如Coursera、Udemy、edX、Codecademy等。这些平台提供结构化的课程和练习&#xff0c;适…

Goby 漏洞发布|Metabase JDBC 远程代码执行漏洞(CVE-2023-38646)

漏洞名称&#xff1a;Metabase JDBC 远程代码执行漏洞&#xff08;CVE-2023-38646&#xff09; English Name&#xff1a;Metabase JDBC Remote Code Execution Vulnerability (CVE-2023-38646) CVSS core: 9.8 影响资产数&#xff1a;66604 漏洞描述&#xff1a; Metabas…

初识计算机系统

计算机系统是由硬件和系统软件组成的&#xff0c;它们共同工作来运行应用程序。虽然系统的具体实现方式随着时间不断变化&#xff0c;但是系统内在的概念却没有改变。所有计算机系统都有相似的硬件和软件组件&#xff0c;它们又执行着相似的功能。 一、信息就是位上下文 我们通…

Python基础入门教程(上)

目录 一、你好Python 1.1、Python安装 win版 Linux版 1.2、第一个Python程序 二、Python基本语法 2.1、字面量 2.2、注释 2.3、变量 2.4、数据类型 type()函数 字符串类型的不同定义方式 2.5、数据类型转换 ​编辑 2.6、标识符 2.7、运算符 2.8、字符串扩展 …

教育机构视频播放时观看行为分析有哪些应用?

教育机构视频播放时观看行为分析有哪些应用&#xff1f; 观看行为分析 观看行为分析是指我们平台基于视频大数据分析&#xff0c;能够以秒为粒度展示观众如何观看您的视频。 视频观看热力图是单次观看行为的图形化表示&#xff0c;我们平台云点播视频的每一次播放&#xff0…

脚手架 --- command框架<一>

版本&#xff1a;6.0.0 假设脚手架名称&#xff1a;big-cat-cli 实例化 const commander require(commander) const program new commander.Command()program 基本信息配置 program.name(Object.keys(pkg.bin)[0]) // 赋值name, 显示在useage 前部分.usage(<command>…

产品开发八大模块交流︱奇瑞新能源汽车产品开发院院长荣升格

奇瑞新能源汽车股份有限公司研发中心/产品开发院院长荣升格先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;产品开发八大模块交流。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; VUCA时代…

树和二叉树 --- 数据结构

目录 1.树的概念及结构 1.1树的概念 1.2树的表示 1.3树在实际生活中的运用 2.二叉树的概念及结构 2.1概念 2.2特殊的二叉树 2.3二叉树的性质 2.4二叉树的存储结构 1.树的概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n (n>0)个有限结点组成…

路由策略(重发布)

要求&#xff1a; 1、使用双点双向重发布 2、所有路由器进行最佳选路 3、存在备份路径&#xff0c;不得出现环路&#xff0c;和路由回馈 1.更改设备名称配置接口IP地址 R1 <Huawei>system-view [Huawei]sysname R1 [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEt…

Elasticsearch 整合springboot-Elasticsearch文章二

文章目录 官网版本组件版本说明实现代码地址pom.xmlapplication.ymlRepositoryVisitLog模型定义controller使用测试http请求结果kibana结果ID外传 官网 https://www.elastic.co/cn/ 版本 https://docs.spring.io/spring-data/elasticsearch/docs/4.4.10/reference/html/ 我们…

[SSM]GoF之代理模式

目录 十四、GoF之代理模式 14.1对代理模式的理解 14.2静态代理 14.3动态代理 14.3.1JDK动态代理 14.3.2CGLIB动态代理 十四、GoF之代理模式 14.1对代理模式的理解 场景&#xff1a;拍电影的时候&#xff0c;替身演员去代理演员完成表演。这就是一个代理模式。 演员为什…