2023/8/17总结

news2024/9/23 7:20:42

项目完善:

算法推荐

item-CF

算法推荐我主要写的是协同过滤算法,然后协同过滤算法分成俩种——

  • 基于用户的  user-CF 
  • 基于物品的    item-CF

因为害怕用户冷启动,和数据量的原因 我选择了 item-CF

主要思路是——根据用户的点赞列表,来找到点赞的相应的文章,通过这些文章去找到 相似度高的物品,然后进行推荐,如果数据不够,我会把浏览量最多的数据给顶上去。

下面是一个demo

数据库对应的数据:(点赞列表的数据)

 

因此可以看到会推荐三条数据。 

Vue

vue是是一个用于构建用户界面的渐进式框架

  • {{ }}是插值表达式
  • 使用的数据必须要存在
  • 支持的是表达式,不能写JavaScript的关键字如 if for
  • 不能在标签的属性里面使用

Vue指令

vue会根据不同的指令针对标签实现不同的功能

都是带有v-前缀的特殊标签属性

v-html  相当一innerHTML

v-show 控制元素显示隐藏   v-show后接的是表达式,为true是显示,例如:v-show=“true”  代表显示,false代表隐藏  本质上是通过css的dispaly来控制显示隐藏

v-if 控制元素显示隐藏(条件渲染) v-if也是接表达式,根据表达式的值来进行控制显示隐藏   这个是通过创建和删除元素来控制元素

v-else 后面不接表达式

v-else if 接表达式

v-on  这个是处理监听事件

v-on:事件名:="内联语句"

v-on:事件名称=“methods中的函数名称”

也可以直接写@事件名称=“”

v-bind:动态的设置html的标签属性,比如说src ur title  语法:v-bind:属性名称=“表达式”

可以直接写成   :属性=“表达式”

v-for:基于数据循坏,多次渲染整个元素  语法:v-for="{item,index} in 数组"

v-for里面的key的作用: 给元素添加的唯一标识,便于vue进行列表项的正确排序复用(如果没有设置key,那么删除元素,是把最后一个删除,并且把数据往前面移动)

key的值只能是字符串或者数字类型 

key的值必须是具有唯一性

v-model:  给表单元素使用 双向数据绑定  可以快速获取或者设置 表单元素内容  语法:v-model="变量"

案列:

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body
        {
            background: #eee;
        }
        .box
        {
            margin:50px auto;
            background: #fff;
            width: 500px;

        }
        .header
        {
            display: flex;
            margin:0 auto;
            box-sizing: border-box;
        }
        .header .inputTask
        {
            width: 70%;
            padding-left: 20px;
            margin-top:10px;
            margin-bottom: 10px;
            margin-left: 50px;
            height: 40px;
            box-sizing: border-box;
            border-bottom-left-radius: 20px;
            border-top-left-radius: 20px;
            border: 2px solid #609dbf;
            font-size: 16px;
            outline: none;
        }
        .header .addTask
        {
            width: 30%;
            margin-right: 50px;
            margin-top:10px;
            height: 40px;
            box-sizing: border-box;
            border: none;
            outline: none;
            color:#fff;
            font-size: 16px;
            background: #609dbf;
            border-bottom-right-radius: 20px;
            border-top-right-radius: 20px;
        }
        li
        {
            list-style: none;
        }
        .taskLi
        {
            margin-left: 20px;
            padding-bottom: 10px;
        }
        .taskLi
        {
            margin-top:20px;
            display: flex;
            margin-right:50px;
            border-bottom:2px solid #eee;
        }
        .taskLi .numLi
        {

        }
        .taskContent
        {
            flex:1;
            margin-left: 20px;
        }
        .delTask
        {
            display: none;
        }
        .taskLi:hover .delTask
        {
            display: block;
        }
        .total
        {
            display: flex;
            height: 50px;
            line-height: 40px;
            font-size: 14px;
            color:#666;
        }
        .totalNum
        {
            flex:1;
            margin-left: 55px;
        }
        .delAllTask
        {
            margin-right:50px;
        }
    </style>
</head>
<body>
<div id="app">
    <div class="box">
        <div class="header">
            <input v-model="content" type="text" class="inputTask" placeholder="请输入任务">
            <button class="addTask" @click="addNewTask">添加任务</button>
        </div>
        <div class="footer">
            <ul>
                <li class="taskLi" v-for="(item,index) in list" :key="item.id">
                    <span class="numLi">{{ index + 1 }}</span>
                    <span class="taskContent">{{ item.name }}</span>
                    <button class="delTask" @click="delTask(item.id)">x</button>
                </li>

            </ul>
            <div class="total" v-show="list.length!=0">
                <span class="totalNum">合计&nbsp;&nbsp;:&nbsp;&nbsp;{{ list.length }}</span>
                <span class="delAllTask" @click="delAllTask">清空任务</span>
            </div>
        </div>
    </div>
</div>

<script src="js/vue.js"></script>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            content:"",
            list:[
                { id:1,name:"开心" },
                { id:2,name:"吃饭" },
                { id:3,name:"看电影" },
                { id:4,name:"睡觉" }
            ]
        },
        methods:{
            addNewTask()
            {
                if(this.content.trim()==='')
                {
                    this.content='';
                    return 0;
                }
                this.list.unshift({id:+new Date(),name:this.content})
                this.content=""
            },
            delTask(id)
            {
                this.list=this.list.filter(item => item.id!==id)
            },
            delAllTask()
            {
                this.list=[]
            }
        }
    })
</script>
</body>
</html>

指令修饰符

通过  “ . ”  指明一些指令后缀,不同  后缀 封装了 不同的处理操作 

按键修饰符

@keyup.enter 就是键盘回车监听事件

v-model修饰符

@v-model.trim  去除首尾空格

事件修饰符号

@事件名.stop  阻止冒泡

@事件名.prevent  阻止默认行为

v-bind 对于1样式控制的增强

  • 操作class  语法   :class="对象/数组"

对象: 键就是类名  值是布尔值  如果值为true 有这个类,否则没有

数组:数组中所有的类,都会添加到盒子上,本质是一个class列表

案列:

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .nav
        {
            margin:20px auto;
            width: 600px;

            background: #eee;
        }
        .nav ul
        {
            display: flex;
            padding:0px;
        }
        li
        {
            list-style: none;
            padding:20px 20px;
            font-weight: bold;
        }
        .active
        {
            background: #609dbf;
            color:#fff;
        }
    </style>
</head>
<body>
<div id="app">
    <div class="nav">
        <ul>
            <li v-for="(item,index) in list" @click="activeIndex=index" :class="{active:activeIndex==index}">{{ item }}</li>
        </ul>
    </div>
</div>

<script src="js/vue.js"></script>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            activeIndex:0,
            list:[
                'lzy','helios','ares','king'
            ]
        },
        methods:{

        }
    })
</script>
</body>
</html>
  • 操作style

语法    :style="样式对象"

 案列:

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .bigBox
        {
            box-sizing: border-box;
            margin:40px auto;
            width: 400px;
            height: 40px;
            padding: 5px;
            background: black;
            border-radius: 20px;
        }
        .bigBox .smallBox
        {

            background: aqua;
            height: 30px;
            width: 390px;
            border-radius: 20px;
            transition: all 1s;
        }
        .percent
        {
            margin:0 auto;
            width: 60px;
        }
        .button
        {
            width: 250px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
<div id="app">
    <div class="bigBox">
        <div class="smallBox" :style="{width:percent+'%'}">

        </div>

    </div>
    <div class="percent">{{percent}}%</div>
    <div class="button">
        <button @click="changePercent(0)">0%</button>
        <button @click="changePercent(25)">25%</button>
        <button @click="changePercent(50)">50%</button>
        <button @click="changePercent(75)">75%</button>
        <button @click="changePercent(100)">100%</button>
    </div>

</div>

<script src="js/vue.js"></script>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            percent:0
        },
        methods:{
            changePercent(num)
            {
                this.percent=num;
            }
        }
    })
</script>
</body>
</html>

 计算属性

基于现有的数据,计算出来的新属性,依赖的数据变化,自动重新计算

语法:声明在computed配置项中,一个计算属性对应一个函数  使用起来和普通属性一样使用  也是{{  }}

案列:

 

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        table,th,td
        {
            border:1px solid black;
        }
        table
        {
            margin:20px auto;
        }
        th,td
        {
            padding: 5px 20px;
        }
        h3
        {
            width: 180px;
            margin: 0 auto;
        }
        h3 span
        {
            position: absolute;
            transform: translateX(-30px);
            transform: translateY(-10px);
            background: red;
            border-radius: 50%;
            width: 20px;
            height: 20px;
            line-height: 20px;
            text-align: center;
            color: #fff;
        }
    </style>
</head>
<body>
<div id="app">
    <h3>lzy的购物清单 🛒<span>{{totalSize}}</span></h3>
    <table>
        <thead>
            <th>名称</th>
            <th>数量</th>
        </thead>
        <tbody>
            <tr v-for="(item,index) in list" :key="index">
                <td>{{item.name}}</td>
                <td>{{item.num}}</td>
            </tr>

            <tr>
                <td>总计</td>
                <td>{{totalSize}}</td>
            </tr>
        </tbody>
    </table>
</div>

<script src="js/vue.js"></script>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            percent:0,
            list:[
                {name:"太阳",num:1},
                {name:"月亮",num:1},
                {name:"星星",num:7}
            ]
        },
        methods:{

        },
        computed:{
            totalSize()
            {
                return this.list.reduce((sum,item)=>sum+item.num,0);
            }
        }
    })
</script>
</body>
</html>

 计算属性和method的区别是 计算属性是由缓存的,method方法是会一直执行

计算属性默认的简写,是只能读取访问,不能修改的

如果需要修改,需要写计算属性的完整写法

computed:{

        计算属性名称:{

                get()

                {}

                set(修改的值)

                {代码逻辑}

}
}

案列

代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #app
        {
            width: 300px;
            height: 300px;
            margin: 0 auto;
        }
        input
        {
            margin-left: 10px;
            width: 50px;
            margin-bottom: 20px;
            border-radius: 5px;
        }
    </style>
</head>
<body>
<div id="app">
    姓:<input type="text" v-model="firstName"> + 名:<input type="text" v-model="lastName"> = <span>{{name}}</span>
    <br>
    <button @click="changeName">改名卡</button>
</div>

<script src="js/vue.js"></script>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            firstName:'',
            lastName:''
        },
        methods:{
            changeName()
            {
                this.name='lzy'
            }
        },
        computed:{
            name:{
                get()
                {
                    return this.firstName+this.lastName;
                },
                set(value)
                {
                    this.firstName=value.slice(0,1);
                    this.lastName=value.slice(1)
                }
            }
        }
    })
</script>
</body>
</html>

 

案列:

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>

        th
        {
            background: skyblue;
            height: 40px;
        }
        td
        {
            background: #eee;
            height: 40px;
        }
        th,td
        {
            padding: 0 20px;
        }
        table
        {
            margin: 0 auto;
        }
        .Fail
        {
            color:red;
        }
        .dealDel span
        {
            text-decoration-line: underline;
            font-style:italic;
            color:deepskyblue;
        }
        form
        {
            width: 300px;
            margin: 0 auto;
        }
        form input
        {
            margin-bottom: 10px;
            height: 30px;
            padding-left: 10px;

        }
        button
        {
            padding: 5px 20px;
            background: blue;
            outline: none;
            border: 0;
            color: #fff;

        }
    </style>
</head>
<body>
<div id="app">
    <table>
        <thead>
            <th>编号</th>
            <th>科目</th>
            <th>成绩</th>
            <th>操作</th>
        </thead>
        <tbody v-if="list.length > 0">
            <tr v-for="(item,index) in list">
                <td>{{ index+1 }}</td>
                <td>{{ item.subject }}</td>
                <td :class="{Fail:item.score<60}">{{item.score}}</td>
                <td class="dealDel">
                    <span @click="delOne(index)">删除</span>
                </td>
            </tr>
        </tbody>
        <tbody v-else>
            <tr>
                <td colspan="4" style="text-align: center;">
                    暂无数据
                </td>
            </tr>
        </tbody>
        <tr>
            <td colspan="4">
                总分:<span>{{ sum }}</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                平均分:<span>{{ average }}</span>
            </td>
        </tr>
    </table>
    <br>
    <form action="">
        科目:<input type="text" v-model.trim="subject" placeholder="请输入科目">
        <br>
        成绩:<input type="text" v-model="score" placeholder="请输入成绩">
        <br>
        <button type="button" class="ensure" @click="addNew">确认</button>
    </form>
</div>

<script src="js/vue.js"></script>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            list:[
                {subject:'语文',score:46},
                {subject:'数学',score:80},
                {subject:'英语',score:60}
            ],
            subject:'',
            score:''
        },
        methods:{
            delOne(i)
            {
                this.list=this.list.filter((item,index)=>index!=i);
            },
            addNew()
            {
                this.list.push({subject:this.subject,score:+this.score})
                this.score=''
                this.subject=''
            }
        },
        computed:{
            sum(){
                return this.list.reduce((sum,item)=>sum+=item.score,0);
            },
            average(){
                if(this.list.length>0)
                    return this.sum/this.list.length*100/100;
                else return 0
            }

        }
    })
</script>
</body>
</html>

 

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

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

相关文章

grep命令的用法

文章目录 前言一、使用说明二、应用举例 前言 grep 命令用于查找文件里符合条件的字符串。 一、使用说明 -r: 如果需要搜索目录中的文件内容, 需要进行递归操作, 必须指定该参数 -i: 对应要搜索的关键字, 忽略字符大小写的差别 -n: 在显示符合样式的那一行之前&#xff0c;标…

Linux操作系统--常用指令(压缩和解压缩类)

(1).gzip/gunzip 压缩 功能:进行文件的压缩和解压缩 语法: gzip 文件 压缩文件,只能将文件压缩为*.gz 文件 gunzip 文件.gz 解压缩文件命令 使用注意事项: -1:只能压缩文件不能压缩目录 -2:不保留原来的文件,也就是直接把源文件压缩覆盖替换掉 -3:同时多个文件会产…

【附安装包】Python-3.9.5安装教程

软件下载 软件&#xff1a;Python版本&#xff1a;3.9.5语言&#xff1a;英文大小&#xff1a;26.9M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.5GHz 内存2G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.baidu.com/…

性能测试指标拟定参考

性能测试指标 要点一&#xff1a;获取用户数信息 1&#xff09;调查系统当前和未来使用的用户数 系统用户数本系统目前注册的用户数&#xff0c;注册用户数并不代表他会每天并且无时无刻的使用着。 在线用户数同时在线对系统进行操作的用户数量&#xff08;相当于混合场景&a…

Android Mvvm设计模式的详解与实战教程

一、介绍 在开发设计模式中&#xff0c;模式经历了多次迭代&#xff0c;从MVC到MVP&#xff0c;再到如今的MVVM。发现的过程其实很简单&#xff0c;就是为了项目更好的管理。 设计模式严格来说属于软件工程的范畴&#xff0c;但是如今在各大面试中或者开发中&#xff0c;设计模…

PyCharm软件安装包分享

目录 一、软件简介 二、软件下载 一、软件简介 PyCharm是一种集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门为Python开发者设计。它是由捷克软件公司JetBrains开发的&#xff0c;为Python开发人员提供了高效、易用和功能丰富的工具集。 以下是PyCharm软件的主要…

强化学习在游戏AI中的应用与挑战

文章目录 1. 强化学习简介2. 强化学习在游戏AI中的应用2.1 游戏智能体训练2.2 游戏AI决策2.3 游戏测试和优化 3. 强化学习在游戏AI中的挑战3.1 探索与利用的平衡3.2 多样性的应对 4. 解决方法与展望4.1 深度强化学习4.2 奖励设计和函数逼近 5. 总结 &#x1f389;欢迎来到AIGC人…

常用的Selenium基础使用模板和简单封装

前言 近来又用上了 Selneium &#xff0c;因为反复用到&#xff0c;所以在这里将一些常用的方法封装起来&#xff0c;方便后续的使用。 在这篇文章中&#xff0c;我们将探讨 Selenium 的基础模板和基础封装&#xff0c;以便更好地理解 Selenium 的使用方法。 在Selenium的使…

【杂谈分享】关于我去HVV当猴子这件事——HVV日记

目录 前言 序幕 开局 入世 破妄 终章 前言 今年第一次参加HVV行动。去当蓝队专家&#xff08;cai niao&#xff09;。大概是六月末&#xff0c;领导说今年的HVV派我去参加。毕竟是第一次参加&#xff0c;因此虽然可能就没办法放假了&#xff0c;而且也没有额外工资&…

python基础教程:re模块用法详解

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 一、正则表达式的特殊字符介绍 正则表达式 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程&#xff0c;尽在下方&#xff0c;赶紧点击了解吧~ 素材、视频教程、完整代码、插件安装教程我都准备好了&a…

【Linux】进程状态|僵尸进程|孤儿进程

前言 本文继续深入讲解进程内容——进程状态。 一个进程包含有多种状态&#xff0c;有运行状态&#xff0c;阻塞状态&#xff0c;挂起状态&#xff0c;僵尸状态&#xff0c;死亡状态等等&#xff0c;其中&#xff0c;阻塞状态还包含深度睡眠和浅度睡眠状态。 个人主页&#xff…

SQL Server软件安装包分享

目录 一、软件简介 二、软件下载 一、软件简介 SQL Server是一种关系型数据库管理系统&#xff0c;由美国微软公司开发。它被设计用于存储、管理和查询数据&#xff0c;被广泛应用于企业级应用、数据仓库和电子商务等场景。 以下是SQL Server软件的主要特点和功能&#xff1…

STM32 BOOT 启动配置 ISP升级 介绍

启动配置 在STM32F10xxx里&#xff0c;可以通过BOOT[1:0]引脚选择三种不同启动模式。 启动模式选择引脚启动模式说明BOOT1BOOT0X0主闪存存储器主闪存存储器被选为启动区域01系统存储器系统存储器被选为启动区域11内置SRAM内置SRAM被选为启动区域 在系统复位后&#xff0c; S…

java八股文面试[多线程]——有几种创建线程的方式

this逃逸问题&#xff1a;构造器中启动线程。 面试题&#xff1a; 用Thread和Runable创建线程的差别 一、Runnable和Thread的区别 继承性&#xff1a;Thread是一个类&#xff0c;因此如果继承Thread类&#xff0c;子类就不能再继承其他的类了&#xff0c;而实现Runnable接口…

JavaFX 加载 fxml 文件

JavaFX 加载 fxml 文件主要有两种方式&#xff0c;第一种方式通过 FXMLLoader 类直接加载 fxml 文件&#xff0c;简单直接&#xff0c;但是有些控件目前还不知道该如何获取&#xff0c;所以只能显示&#xff0c;目前无法处理。第二种方式较为复杂&#xff0c;但是可以使用与 fx…

mysql 逻辑架构

连接层 客户端和服务器建立连接&#xff0c;客户端发送sql 到 服务器端 服务层 引擎层 查看现有的 存储引擎 show engines&#xff1b; 存储层

电子器件系列56:ltc1799(定时器)

定时IC芯片是一种具有定时功能的集成电路&#xff0c;常用于计时、时钟、频率合成等应用。以下是一些常见的定时IC芯片&#xff1a; 1. 555定时器芯片&#xff1a;最常见的定时IC芯片之一&#xff0c;可用于产生各种定时信号和脉冲。 2. 556双555定时器芯片&#xff1a;由两个5…

OLED透明屏曲面技术:创新突破引领显示行业未来

OLED透明屏曲面技术作为一项重要的显示技术创新&#xff0c;正在成为显示行业的焦点&#xff0c;其引人注目的优势和广泛应用领域使其备受关注。 本文将详细介绍OLED透明屏曲面技术的优势、应用领域以及市场前景&#xff0c;同时展望其未来的发展趋势&#xff0c;以期带给读者…

数据工厂调研及结果展示

数据工厂 一、背景 在开发自测、测试迭代测试、产品验收的过程中&#xff0c;都需要各种各样的前置数据&#xff0c;大致分为如下几类&#xff1a; 账号&#xff08;实名、权益等级、注册等&#xff09; 货源&#xff08;优货、急走、相似、一手、普通货源等&#xff09; …