vue学习31~39(列表过滤+列表排序+vue检测data中的数据+收集表单数据+过滤器)

news2024/11/25 11:01:49

1.14 列表过滤

<!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>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
        <!-- 遍历数组 -->
        <h2>人员列表</h2>
        <input type="text" placeholder="请输入名字" v-model="keyWord">
        <ul>
            <li v-for="(p, index) of filPersons" :key="index">
                {{p.name}}-{{p.age}}-{{p.sex}}
            </li>
        </ul>
    </div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false;

    // 用watch实现
    new Vue({
        el: '#root',
        data: {
            keyWord: '',
            persons: [
                {id: '001', name: '马冬梅', age: 18, sex: '女'},
                {id: '002', name: '周冬雨', age: 19, sex: '女'},
                {id: '003', name: '周杰伦', age: 20, sex: '男'},
                {id: '004', name: '温兆伦', age: 21, sex: '男'},
            ],
            filPersons: []
        },
        watch: {
             keyWord: {
                immediate: true,
                handler(val) {
                    this.filPersons = this.persons.filter((p) => {
                        return p.name.indexOf(val) !== -1;
                    }) 
                }
             }
        }
    })

    // 用computed实现
    new Vue({
        el: '#root',
        data: {
            keyWord: '',
            persons: [
                {id: '001', name: '马冬梅', age: 18, sex: '女'},
                {id: '002', name: '周冬雨', age: 19, sex: '女'},
                {id: '003', name: '周杰伦', age: 20, sex: '男'},
                {id: '004', name: '温兆伦', age: 21, sex: '男'},
            ],
        },
        computed: {
            filPersons() {
                return this.persons.filter((p) => {
                    return p.name.indexOf(this.keyWord) !== -1;
                })
            }
        }
    })
</script>
</html>

1.15 列表排序

<!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>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
        <!-- 遍历数组 -->
        <h2>人员列表</h2>
        <input type="text" placeholder="请输入名字" v-model="keyWord">
        <button @click="sortType = 2">年龄升序</button>
        <button @click="sortType = 1">年龄降序</button>
        <button @click="sortType = 0">原顺序</button>
        <ul>
            <li v-for="(p, index) of filPersons" :key="p.id`">
                {{p.name}}-{{p.age}}-{{p.sex}}
            </li>
        </ul>
    </div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false;

    // 用computed实现
    new Vue({
        el: '#root',
        data: {
            keyWord: '',
            sortType: 0, // 0原顺序 1降序 2升序
            persons: [
                {id: '001', name: '马冬梅', age: 30, sex: '女'},
                {id: '002', name: '周冬雨', age: 25, sex: '女'},
                {id: '003', name: '周杰伦', age: 20, sex: '男'},
                {id: '004', name: '温兆伦', age: 21, sex: '男'},
            ],
        },
        computed: {
            filPersons() {
                const arr = this.persons.filter((p) => {
                    return p.name.indexOf(this.keyWord) !== -1;
                })
                // 判断一下是否排序
                if (this.sortType) {
                    arr.sort((p1, p2) => {
                        return this.sortType === 1 ? p2.age - p1.age : p1.age - p2.age;
                    })
                }
                return arr;
            }
        }
    })
</script>
</html>

1.16 vue 监测data 中的 数据

先来个案例引入一下:

<!-- 准备好一个容器-->
<div id="root">
    <h2>人员列表</h2>
    <button @click="updateMei">更新马冬梅的信息</button>
    <ul>
        <li v-for="(p,index) of persons" :key="p.id">
            {{p.name}}-{{p.age}}-{{p.sex}}
        </li>
    </ul> 
</div>

<script type="text/javascript">
    Vue.config.productionTip = false

    const vm = new Vue({
        el:'#root',
        data:{
            persons:[
                {id:'001',name:'马冬梅',age:30,sex:'女'},
                {id:'002',name:'周冬雨',age:31,sex:'女'},
                {id:'003',name:'周杰伦',age:18,sex:'男'},
                {id:'004',name:'温兆伦',age:19,sex:'男'}
            ]
        },
        methods: {
            updateMei(){
                // this.persons[0].name = '马老师' //奏效
                // this.persons[0].age = 50 //奏效
                // this.persons[0].sex = '男' //奏效
                this.persons[0] = {id:'001',name:'马老师',age:50,sex:'男'} //不奏效
                // this.persons.splice(0,1,{id:'001',name:'马老师',age:50,sex:'男'})
            }
        }
    }) 

</script>

点击更新马冬梅的信息,马冬梅的数据并没有发生改变。

在这里插入图片描述

我们来看看控制台:
在这里插入图片描述

控制台上的数据发生了改变,说明,这个更改的数据并没有被 Vue 监测到。

所以我们来研究一下 Vue 监测的原理。

我们先研究 Vue 如何监测 对象里的数据

代码

<!-- 准备好一个容器-->
<div id="root">
    <h2>学校名称:{{name}}</h2>
    <h2>学校地址:{{address}}</h2>
</div>

<script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

    const vm = new Vue({
        el:'#root',
        data:{
            name: 'yaya',
            address: '北京',
            student:{
                name:'tom',
                age:{
                    rAge:40,
                    sAge:29,
                },
                friends:[
                    {name:'jerry',age:35}
                ]
            }
        }
    })
</script>

在这里插入图片描述

讲一下解析模板后面的操作—>调用 set 方法时,就会去解析模板----->生成新的虚拟 DOM----->新旧DOM 对比 -----> 更新页面

模拟一下 vue 中的 数据监测

<script type="text/javascript" >

    let data = {
        name:'尚硅谷',
        address:'北京',
    }

    //创建一个监视的实例对象,用于监视data中属性的变化
    const obs = new Observer(data)		
    console.log(obs)	

    //准备一个vm实例对象
    let vm = {}
    vm._data = data = obs

    function Observer(obj){
        //汇总对象中所有的属性形成一个数组
        const keys = Object.keys(obj)
        //遍历
        keys.forEach((k) => {
            Object.defineProperty(this, k, {
                get() {
                    return obj[k]
                },
                set(val) {
                    console.log(`${k}被改了,我要去解析模板,生成虚拟DOM.....我要开始忙了`)
                    obj[k] = val
                }
            })
        })
    }
</script>

在这里插入图片描述

Vue.set 的使用

Vue.set(target,propertyName/index,value) 或

vm.$set(target,propertyName/index,value)

用法

向响应式对象中添加一个 property,并确保这个新 property 同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新 property,因为 Vue 无法探测普通的新增 property (比如 vm.myObject.newProperty = 'hi')

代码

<!-- 准备好一个容器-->
<div id="root">
    <h1>学生信息</h1>
    <button @click="addSex">添加性别属性,默认值:男</button> <br/>
</div>

<script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

    const vm = new Vue({
        el:'#root',
        data:{
            student:{
                name:'tom',
                age:18,
                hobby:['抽烟','喝酒','烫头'],
                friends:[
                    {name:'jerry',age:35},
                    {name:'tony',age:36}
                ]
            }
        },
        methods: {
            addSex(){
                // Vue.set(this.student,'sex','男')
                this.$set(this.student,'sex','男')
            }
        }
    })
</script>

Vue.set() 或 vm.$set 有缺陷:

注意对象不能是Vue实例,或者Vue实例的根数据对象,即 vm 和 _data

看完了 vue 监测对象中的数据,再来看看 vue 如何监测 数组里的数据

先写个代码案例

<!-- 准备好一个容器-->
<div id="root">
    <h2>爱好</h2>
    <ul>
        <li v-for="(h,index) in student.hobby" :key="index">
            {{h}}
        </li>
    </ul>
    <h2>朋友们</h2>
    <ul>
        <li v-for="(f,index) in student.friends" :key="index">
            {{f.name}}--{{f.age}}
        </li>
    </ul>
</div>

<script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

    const vm = new Vue({
        el:'#root',
        data:
            student:{
                name:'tom',
                age:{
                    rAge:40,
                    sAge:29,
                },
                hobby:['抽烟','喝酒','烫头'],
                friends:[
                    {name:'jerry',age:35},
                    {name:'tony',age:36}
                ]
            }
        },
    })
</script>

在这里插入图片描述

所以我们通过 vm._data.student.hobby[0] = ‘aaa’ // 不奏效

vue 监测在数组那没有 getter 和 setter,所以监测不到数据的更改,也不会引起页面的更新

在这里插入图片描述

既然 vue 在对数组无法通过 getter 和 setter 进行数据监视,那 vue 到底如何监视数组数据的变化呢?

vue对数组的监测是通过 包装数组上常用的用于修改数组的方法来实现的。

vue官网的解释:

在这里插入图片描述

总结:

<!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>总结Vue数据监测</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
        <h1>学生信息</h1>

        <button @click="student.age++;">年龄+1岁</button><br>
        <button @click="addSex">添加性比属性,默认值:男</button><br>
        <button @click="student.sex='未知'">修改性别</button><br>
        <button @click="addFriend">在列表首位添加一个朋友</button><br>
        <button @click="updateFirstFriendName">修改第一个朋友的名字为:张三</button><br>
        <button @click="addHobby">添加一个爱好</button><br>
        <button @click="updateFirstHobby">修改第一个爱好为:开车</button>
        <button @click="removeSmoke">过滤掉爱好中的抽烟</button>

        <h3>姓名:{{student.name}}</h3>
        <h3>年龄:{{student.age}}</h3>
        <h3 v-if="student.sex">性别:{{student.sex}}</h3>
        <h3>爱好</h3>
        <ul>
            <li v-for="(h, index) in student.hobby" :key = "index">
                {{h}}
            </li>
        </ul>
        <h2>朋友们</h2>
        <ul>
            <li v-for="(f, index) in student.friends" :key = "index">
                {{f.name}}--{{f.age}}
            </li>
        </ul>
    </div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false;

    const vm = new Vue({
        el: '#root',
        data: {
            student: {
                name: 'tom',
                age: 18,
                hobby: ['抽烟', '喝酒', '烫头'],
                friends: [
                    {name: 'jerry', age: 35},
                    {name: 'tony', age: 36},
                ]
            }
        },
        methods: {
            addSex() {
                // Vue.set(this.student, 'sex', '男');
                this.$set(this.student, 'sex', '男');
            },
            addFriend() {
                this.student.friends.unshift({name: 'jack', age: 70});
            },
            updateFirstFriendName() {
                this.student.friends[0].name = '张三';
                // this.student.friends[0].age = 5;
            },
            addHobby() {
                this.student.hobby.push('学习');
            },
            updateFirstHobby() {
                // this.student.hobby.splice(0, 1, '开车');
                // Vue.set(this.student.hobby, 0, '开车');
                this.$set(this.student.hobby, 0, '开车');
            },
            removeSmoke() {
                this.student.hobby = this.student.hobby.filter((h) => {
                    return h !== '抽烟';
                })
            }
        }
    })
</script>
</html>

Vue监视数据的原理:

  • vue会监视data中所有层次的数据

  • 如何监测对象中的数据?

    通过setter实现监视,且要在new Vue时就传入要监测的数据。

    • 对象中后追加的属性,Vue默认不做响应式处理

    • 如需给后添加的属性做响应式,请使用如下API:

      Vue.set(target,propertyName/index,value) 或

      vm.$set(target,propertyName/index,value)

  • 如何监测数组中的数据?

    通过包裹数组更新元素的方法实现,本质就是做了两件事:

    • 调用原生对应的方法对数组进行更新
    • 重新解析模板,进而更新页面
  • 在Vue修改数组中的某个元素一定要用如下方法:

    • 使用这些API:push()、pop()、shift()、unshift()、splice()、sort()、reverse()
    • Vue.set() 或 vm.$set()

特别注意:Vue.set() 和 vm.$set() 不能给vm 或 vm的根数据对象 添加属性!!!

1.17 收集表单数据

若:<input type=“text”/>,则v-model收集的是value值,用户输入的就是value值。

<!-- 准备好一个容器-->
<div id="root">
    <form @submit.prevent="demo">
        账号:<input type="text" v-model.trim="userInfo.account"> <br/><br/>
        密码:<input type="password" v-model="userInfo.password"> <br/><br/>
        年龄:<input type="number" v-model.number="userInfo.age"> <br/><br/>
        <button>提交</button>
    </form>
</div>

<script type="text/javascript">
    Vue.config.productionTip = false

    new Vue({
        el:'#root',
        data:{
            userInfo:{
                account:'',
                password:'',
                age:18,
            }
        },
        methods: {
            demo(){
                console.log(JSON.stringify(this.userInfo))
            }
        }
    })
</script>

若:<input type=“radio”/>,则v-model收集的是value值,且要给标签配置value值。

<!-- 准备好一个容器-->
<div id="root">
    <form @submit.prevent="demo">
        性别:
        男<input type="radio" name="sex" v-model="userInfo.sex" value="male"><input type="radio" name="sex" v-model="userInfo.sex" value="female">
    </form>
</div>

<script type="text/javascript">
    Vue.config.productionTip = false

    new Vue({
        el:'#root',
        data:{
            userInfo:{
                sex:'female'
            }
        },
        methods: {
            demo(){
                console.log(JSON.stringify(this.userInfo))
            }
        }
    })
</script>

若:<input type=“checkbox”/>

  • 没有配置input的value属性,那么收集的就是checked(勾选 or 未勾选,是布尔值)
  • 配置input的value属性:
    • v-model的初始值是非数组,那么收集的就是checked(勾选 or 未勾选,是布尔值)
    • v-model的初始值是数组,那么收集的的就是value组成的数组
<!-- 准备好一个容器-->
<div id="root">
    <form @submit.prevent="demo">
        爱好:
        学习<input type="checkbox" v-model="userInfo.hobby" value="study">
        打游戏<input type="checkbox" v-model="userInfo.hobby" value="game">
        吃饭<input type="checkbox" v-model="userInfo.hobby" value="eat">
        <br/><br/>
        所属校区
        <select v-model="userInfo.city">
            <option value="">请选择校区</option>
            <option value="beijing">北京</option>
            <option value="shanghai">上海</option>
            <option value="shenzhen">深圳</option>
            <option value="wuhan">武汉</option>
        </select>
        <br/><br/>
        其他信息:
        <textarea v-model.lazy="userInfo.other"></textarea> <br/><br/>
        <input type="checkbox" v-model="userInfo.agree">阅读并接受<a href="http://www.atguigu.com">《用户协议》</a>
        <button>提交</button>
    </form>
</div>

<script type="text/javascript">
    Vue.config.productionTip = false

    new Vue({
        el:'#root',
        data:{
            userInfo:{
                hobby:[],
                city:'beijing',
                other:'',
                agree:''
            }
        },
        methods: {
            demo(){
                console.log(JSON.stringify(this.userInfo))
            }
        }
    })
</script>

在这里插入图片描述

备注:v-model的三个修饰符:

lazy:失去焦点再收集数据

number:输入字符串转为有效的数字

trim:输入首尾空格过滤

1.18 过滤器(非重点)

定义:对要显示的数据进行特定格式化后再显示(适用于一些简单逻辑的处理)。

语法:

  • 注册过滤器:Vue.filter(name,callback) 或 new Vue{filters:{}}
  • 使用过滤器:{{ xxx | 过滤器名}} 或 v-bind:属性 = “xxx | 过滤器名”
<!-- 准备好一个容器-->
<div id="root">
    <h2>显示格式化后的时间</h2>
    <!-- 计算属性实现 -->
    <h3>现在是:{{ fmtTime }}</h3>
    <!-- methods实现 -->
    <h3>现在是:{{ getFmtTime() }}</h3>
    <!-- 过滤器实现 -->
    <h3>现在是:{{time | timeFormater}}</h3>
    <!-- 过滤器实现(传参) -->
    <h3>现在是:{{time | timeFormater('YYYY_MM_DD') | mySlice}}</h3>
    <h3 :x="msg | mySlice">尚硅谷</h3>
</div>

<script type="text/javascript">
    Vue.config.productionTip = false
    //全局过滤器
    Vue.filter('mySlice',function(value){
        return value.slice(0,4)
    })

    new Vue({
        el:'#root',
        data:{
            time:1621561377603, //时间戳
            msg:'你好,尚硅谷'
        },
        computed: {
            fmtTime(){
                return dayjs(this.time).format('YYYY年MM月DD日 HH:mm:ss')
            }
        },
        methods: {
            getFmtTime(){
                return dayjs(this.time).format('YYYY年MM月DD日 HH:mm:ss')
            }
        },
        //局部过滤器
        filters:{
            timeFormater(value, str='YYYY年MM月DD日 HH:mm:ss'){
                // console.log('@',value)
                return dayjs(value).format(str)
            }
        }
    })
</script>

备注:

1.过滤器也可以接收额外参数、多个过滤器也可以串联

2.并没有改变原本的数据, 是产生新的对应的数据

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

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

相关文章

VM虚拟机三种网络配置详解(桥接、NAT、仅主机)

在学习网络配置之前&#xff0c;需要搞明白有关于网络的一些基本概念&#xff0c;什么是ip&#xff0c;子网掩码&#xff0c;网段&#xff0c;网关&#xff1f;这里只做最简单的解释&#xff0c;实际上远远不止这些。 网络名词 ip 在现实生活中&#xff0c;这么大的一个中国…

bootstrap标签和导航条件组件学习(七)

标签和导航条件组件 这里的标签是不能切换的&#xff0c;它是静态的&#xff0c;在JavaScrapt插件里面是是可以切换页面的 需要配合插件 加选中状态&#xff1a; 它是自适应屏幕宽度&#xff1a; 胶囊式标签下拉菜单&#xff1a; 复制代码放到页面中&#xff1a; div 的class…

KubeEdge设备接入的mqtt调试

kubeedge的设备接入是用mqtt进行转接的。但是如果遇到一些问题需要排查问题时&#xff0c;希望可以查看终端发的mqtt消息。 目前 mosquitto 没有看到有进行消息查看的机制&#xff08;也可能我不知道&#xff09; EMQ可以进行消息查看。 1.安装EMQ 快速开始 | EMQX 5.0 文…

数据存储——声音存储

声音数字化一、声音的采样&#xff08;一&#xff09;信号分类1.模拟信号2. 数字信号&#xff08;二&#xff09;存储1、采样2.量化3.编码1.数字音频的技术指标2.未经压缩的数字音频的数据量&#xff08;字节&#xff08;8bit&#xff09;&#xff09;总结 声音的数字化过程一、…

[附源码]SSM计算机毕业设计校园一卡通管理信息系统台JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

zabbix监控Nginx

目录 一、环境准备 二、部署Nginx被监控端 三、自定义Nginx监控key 四、给目标主机创建监控项 一、环境准备 搭建zabbix基础环境 zabbix基础环境部署参照&#xff1a;zabbix基础环境部署_桂安俊kylinOS的博客-CSDN博客 以下实验部署均基于上述环境 二、部署Nginx被监控端…

芯片级解密YMTC NAND Xtacking 3.0技术

长江存储YMTC自从2016年成立以来&#xff0c;一直在吸引外界的关注。作为NAND国产厂商&#xff0c;被寄予厚望。在2018年FMS闪存峰会发布了Xtacking 1.0的NAND架构&#xff0c;凭借该技术荣获了“最具创新初创闪存企业”。 在2019年又发布了Xtacking 2.0的NAND架构。根据官网介…

xss-labs/level8

单单从界面上看 只剩下一个输出点了 但是界面毕竟就是界面 而源代码才是更深层的东西 通过源代码我们看得出来 有两个输出点 第一处是经过htmlspecialchars转义之后然后插入 第二处则是对关键字进行了下划线插入操作 我们试试看构造如下 " onclickjavascript:alert(…

Qt(Python+Qt)QMainWindow的splitDockWidget方法将QDockWidget停靠窗分割排列

主窗口的splitDockWidget方法用于将一个停靠窗占据的空间分割成两部分&#xff0c;原有停靠窗放置在第一部分的区域&#xff0c;另一个停靠窗放置在第二部分的区域。调用语法&#xff1a; splitDockWidget( QDockWidget first, QDockWidget second, Qt.Orientation orientatio…

疫情下就业形势怎样?存在抗衰行业吗?

三年的疫情下&#xff0c;全球各国的经济都受到了重要影响。特别是今年以来&#xff0c;国际形势复杂严峻&#xff0c;国内疫情点、面频发&#xff0c;对经济运行的冲击和影响加大。 这一场持续三年的疫情&#xff0c;给很多正常人的工作和生活都带来了不确定性&#xff0c;也给…

转扩!寻找G2022次列车“旅客”

各位求职朋友大家好&#xff0c;欢迎乘坐G2022次列车 本次列车为6节编组&#xff0c;由上海开往北京&#xff0c;途径宁波、重庆 本次列车乘务组全体工作人员为您提供全方位福利待遇 上车地址&#xff1a;上海擎创信息技术有限公司 - 社会招聘 (eoitek.com) 如您还需其他帮助…

架构体系-黑马学习2:-业务幂等性技术架构体系(1)

25min 以下涉及到的都是一人操作时候&#xff0c;多次点击造成的并发&#xff0c;对幂等性问题的影响。 大多适用场景&#xff0c;都是单表。没有兼顾数据库分库分表分区场景。 幂等性定义&#xff1a;无论对某一个资源操作了多少次&#xff0c;其影响都应该是相同的。换句话…

Kepserver EX6配置opc ua服务端 以及客户端

一.Kepserver EX6下载 链接&#xff1a;https://pan.baidu.com/s/1zNr-J0vmBdu9qmI1GtXxrw 提取码&#xff1a;wqcl 二.Kepserver EX6安装 点击安装包》选择“简体中文语言包”》一直默认下一步就可以直到结束安装 下载包中有破解补丁的详细使用说明这里就不多做说明了 下面…

《联邦学习实战—杨强》之使用Python从零开始实现一个简单的横向联邦学习模型

文章目录前言环境准备完整代码配置文件(conf.json)获取数据集(datasets.py)获取PyTorch中自带深度学习网络预训练模型(models.py)客户端(client.py)服务端(server.py)main.py运行知识点补充argparse基本用法tensor.copy_()[Python dict() 函数](https://www.runoob.com/python/…

Redis——》数据类型:zset(有序集合)

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Redis——》数据类型&#xff1a;zset&#xff08;有序集合&#xff09;一、…

基于SpringBoot的在线点餐系统【附源码】

功能模块设计 技术概要 前端技术&#xff1a;JQuery&#xff0c;Thymeleaf&#xff0c; CSS 后端技术&#xff1a;SpringBoot&#xff0c;SpringMVC&#xff0c;mybaits 数据库&#xff1a;mysql 主要功能 首页实现 主页也是网址的入口处,一般包括了:LOGO、导航、Banner、…

C指针之初始化(三)

一、引言 C/C语言中引入了指针&#xff0c;使得程序能够直接访问内存地址&#xff0c;使得很多复杂的操作变得简单&#xff0c;同时也提高了程序的运行效率。指针即是地址&#xff0c;但是地址却是通过指针变量来存储的。因此我们通常所说的指针在很多时候说的都是指针变量。指…

AzkabanExecutorServer自动注册分析

启动AzkabanExecutorServer发现会自动注册&#xff0c;但是active默认为0&#xff0c;需要修改为1&#xff0c;否则 SELECT id, host, port, active FROM executors where activetrue查询不到记录&#xff0c;导致 AzkabanWebServer启动时候还是失败。 因此azkaban的正确启动…

MySQL的行锁和表锁

锁是计算机协调多个进程或纯线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所在有数据库必须解决的一个问题&am…

复现黑客在后门中藏匿后门

PHP实现在后门中藏匿后门 在攻击渗透的时候会传入shell后门方便进行远控。其中的后门包括多种类型&#xff0c;大马是功能最全的直接提供了可视化的界面方便攻击者进行提权、扫描、上传等一系列的操作。 但有很多hacker不讲武德&#xff0c;在写好的大马中藏入自己的后门&…