数据结构实验大作业(将之前预测ACM获奖的模型搬到Vue和django上)

news2024/12/23 15:21:04

目录

前言

成品展示(UI写的确实有点糊弄,太懒了不想弄了)

Vue部分

App.vue(中间感觉还行,不算难看)

 result组件:

路由:

Django部分

 view

functionset(自己建的)


前言

本来一开始没想弄这个

我一开始想弄爬虫取爬携程的网站然后做一个全国机场的最短路

为什么想弄这个呢,因为去年这个时候一个学长跟我说他们同学弄了个北京市的各个位置的最短路,但他们弄的是虚拟数据,我就想着能不能用爬虫弄点真实数据来做一个类似的,就决定用django和vue+爬虫弄一个全国机场的最短路

但是!!

携程这个网站反爬太猛了,普通爬虫肯定是弄不下来的

我曾尝试过用selenium驱动浏览器来爬数据

这样是可以爬下来,但爬取每一对机场的信息就要3,4s左右

全国200多个机场,n方暴力出一张邻接矩阵就要好一两天的时间

我之后也曾想过只保留top30城市的机场,这样爬倒是能爬出来,但感觉太low了,没啥意思

就弃掉了

附上半成品-爬虫代码

(好像最后还给我ip封了,想用的加个代理池啥的)

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

base1='https://flights.ctrip.com/online/list/oneway-'
base2='-'
base3='?depdate='
base4='&cabin=y_s_c_f&adult=1&child=0&infant=0'
city ={
    '北京': 'bjs', '澳门': 'mfm',  '长春': 'cgq', '重庆': 'ckg', '长沙': 'csx',
    '成都': 'ctu', '大连': 'dlc', '大庆': 'dqa', '福州': 'foc', '广州': 'can',
    '桂林': 'kwl',  '合肥': 'hfe', '杭州': 'hgh','哈尔滨': 'hrb',
    '佳木斯': 'jmu','锦州': 'jnz', '济南': 'tna', '昆明': 'kmg',
    '兰州': 'lhw', '洛阳': 'lya', '连云港': 'lyg','南昌': 'khn','宁波': 'ngb', '南京': 'nkg','秦皇岛': 'bpe',
    '泉州': 'jjn', '青岛': 'tao', '上海': 'sha', '沈阳': 'she',  '石家庄': 'sjw','三亚': 'syx',
    '深圳': 'szx','天津': 'tsn', '太原': 'tyn', '乌鲁木齐': 'urc', '威海': 'weh','武汉': 'wuh',
    '香港': 'hkg', '西安': 'sia', '咸阳': 'sia', '厦门': 'xmn', '郑州': 'cgo',
}
citynum={'北京': 0, '澳门': 1, '长春': 2, '重庆': 3, '长沙': 4, '成都': 5, '大连': 6, '大庆': 7,
         '福州': 8, '广州': 9, '桂林': 10, '合肥': 11, '杭州': 12, '哈尔滨': 13, '佳木斯': 14,
         '锦州': 15, '济南': 16, '昆明': 17, '兰州': 18, '洛阳': 19, '连云港': 20, '南昌': 21, '宁波': 22,
         '南京': 23, '秦皇岛': 24, '泉州': 25, '青岛': 26, '上海': 27, '沈阳': 28, '石家庄': 29, '三亚': 30,
         '深圳': 31, '天津': 32, '太原': 33, '乌鲁木齐': 34, '威海': 35, '武汉': 36, '香港': 37, '西安': 38,
         '咸阳': 39, '厦门': 40, '郑州': 41
}

numcity={0: '北京', 1: '澳门', 2: '长春', 3: '重庆', 4: '长沙', 5: '成都', 6: '大连', 7: '大庆', 8: '福州',
         9: '广州', 10: '桂林', 11: '合肥', 12: '杭州', 13: '哈尔滨', 14: '佳木斯', 15: '锦州', 16: '济南',
         17: '昆明', 18: '兰州', 19: '洛阳', 20: '连云港', 21: '南昌', 22: '宁波', 23: '南京', 24: '秦皇岛',
         25: '泉州', 26: '青岛', 27: '上海', 28: '沈阳', 29: '石家庄', 30: '三亚', 31: '深圳', 32: '天津',
         33: '太原', 34: '乌鲁木齐', 35: '威海', 36: '武汉', 37: '香港', 38: '西安', 39: '咸阳', 40: '厦门',
         41: '郑州'
}


import time
def calw(star,fina,data):
    try:
        url=base1+city[star]+base2+city[fina]+base3+data+base4
        path=r'C:\Program Files\Google\Chrome\Application\chrome.exe'

        chrom_options = Options()
        chrom_options.add_argument('--headless')
        chrom_options.add_argument(
            'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.46')
        chrom_options.add_argument('--disable-gpu')
        chrom_options.binary_location = path

        driver = webdriver.Chrome(options=chrom_options)
        driver.get(url)
        time.sleep(3.3)
        lower=driver.find_elements_by_xpath('//div[@class="tabs-content"]//div')
        tim=data.split('-')
        tim=tim[1]+'-'+tim[2]
        for item in range(len(lower)):
            if tim in lower[item].get_attribute('textContent'):
                res=""
                for i in lower[item+1].get_attribute('textContent'):
                    if i in '1234567890':
                        res=res+i
                try:
                    return int(res)
                except:
                    return 998244353
        return 998244353
    except:
        return 998244353
ans=[]
for s1 in city:
    tmp = []
    ans.append(tmp)
import pandas as pd
ans=pd.DataFrame(ans)
ans.to_csv('12-17.csv', index=False)

于是怎么在这么短的时间内中途改题还能做一个老师和我都满意的大作业呢

将目标转向上周刚结了的python课大作业

大致设想是这样的

将原来训练弄好的model持久化

丢到django里 

前端获取用户buctoj和codeforcesid

然后传到后端,后端取爬取信息

丢model里,跑出数据

在返回给前端

前端利用返回的数据展示结果(就是套了个皮)

原理大概如下图

成品展示(UI写的确实有点糊弄,太懒了不想弄了)

Vue部分

App.vue(中间感觉还行,不算难看)

<script>
import axios from 'axios'

export default {
  data(){
    return{
      studentsum:"",
      codeforcesid:"",
    }
  },
  methods:{
    gotoback(){
      const obj={studentsum:this.studentsum,codeforcesid:this.codeforcesid}
      axios.post(
        '/deal/',
        obj
      ).then(response=>{
        // this.studentsum=""
        // this.codeforcesid=""
        if(response.data!=-1){
          this.$router.push({path:"/result",query:{score:response.data}})
        }
        else{
          alert("学号或cfid有误")
        }
      }).catch(error=>{
        console.log(error)
      })
    },
    onSubmit(){
      return false
    }
  } 
  
}
</script>

<template>
  <div class="container">
    <div class="drop">
      <div class="content">
        <h2>算 法 竞 赛 获 奖 预 测</h2>
        <form autocomplete="off" @submit.prevent="onSubmit">
          <div class="inputBox">
            <input type="text" v-model="studentsum" placeholder="学号">
          </div>
          <div class="inputBox">
            <input type="text" v-model="codeforcesid" placeholder="Codeforces ID">
          </div>
          <router-view></router-view>
          <div class="inputBox">
            <input type="submit" value="查询" @click="gotoback" @keyup.enter="gotoback">
          </div>
        </form>
      </div>
      <a href="#" class="btns signup"></a>
    </div>
    <a href="#" class="btns"></a>
    <a href="#" class="btns signup"></a>
  </div>
</template>

<style>

*{
  margin: 0;
  padding: 0;
  font-family: 'Poppins', sans-serif;
}
body{
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
  background-color: #dcdee4;
}
.container{
  position: relative;
  justify-content: center;
  align-items: center;
  left: -80px;
}

.container .drop{
  position: relative;
  width: 390px;
  height: 430px;
  box-shadow: inset 20px 20px 20px rgba(0, 0, 0, .05),
              25px 35px 20px rgba(0, 0, 0, .05),
              25px 30px 30px rgba(0, 0, 0, .05),
              inset -20px -20px 25px rgba(255, 255, 255, 0.9);
  transition: 0.5s ease-in-out;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 52% 48% 33% 67% / 38% 45% 55% 62%;
}

.container .drop:hover{
  border-radius: 50%;
}

.container .drop::before{
  content: '';
  position: absolute;
  top:50px;
  left: 85px;
  width: 35px;
  height: 35px;
  border-radius: 50%;
  background-color: #fff;
  opacity: 0.9;
}
.container .drop::after{
  content: '';
  position: absolute;
  top:90px;
  left: 110px;
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background-color: #fff;
  opacity: 0.9;
}

.container .drop .content{
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  align-items: center;
  flex-direction: column;
  text-align: center;
  padding: 40px;
  gap: 15px;
}

.container .drop .content h2{
  position: relative;
  color: #333;
  font-size: 1.5em;
}
.container .drop .content form {
  display: flex;
  flex-direction: column;
  gap: 20px;
  justify-content: center;
  align-items: center;
}
.container .drop .content form .inputBox{
  position: relative;
  width: 225px;
  box-shadow: inset 2px 5px 10px rgba(0, 0, 0, .1),
  inset -2px -5px 10px rgba(255, 255, 255, 1),
  15px 15px 10px rgba(0, 0, 0, .05),
  15px 10px 15px rgba(0, 0, 0, .05);
  border-radius: 25px;
}

.container .drop .content form .inputBox::before{
  content: '';
  position: absolute;
  top: 8px;
  left: 50%;
  transform: translateX(-50%);
  width: 75%;
  height: 4px;
  background-color: rgba(255, 255, 255, 0.5);
  border-radius: 5px;
}

.container .drop .content form .inputBox input{
  border: none;
  outline: none;
  background-color: transparent;
  width: 100%;
  font-size: 1em;
  padding: 10px 15px;
}
.container .drop .content form .inputBox input[type="submit"] {
  color: #fff;
  text-transform: uppercase;
  cursor: pointer;
  letter-spacing: 0.1em;
  font-weight: 500;

}
.container .drop .content form .inputBox:last-child {
  width: 120px;
  background-color: #ff0f5b;
  box-shadow: inset 2px 5px 10px rgba(0, 0, 0, .1),
  15px 15px 10px rgba(0, 0, 0, .05),
  15px 10px 15px rgba(0, 0, 0, .05);
  transition: 0.5s;
}
.container .drop .content form .inputBox:last-child:hover{
  width: 150px;
}

.btns{
  position: absolute;
  width: 120px;
  height: 120px;
  right: -120px;
  bottom: 0;
  background-color:#c61dff;
  display: flex;
  justify-content: center;
  align-items: center;
  cursor: pointer;
  text-decoration: none;
  color: #fff;
  line-height: 1.2em;
  letter-spacing: 0.1em;
  font-size: 0.8em;
  transition: 0.25s;
  text-align: center;
  box-shadow: inset 10px 10px 10px rgba(190, 1, 254, .05),
  15px 25px 10px rgba(190, 1, 254, .1),
  15px 20px 20px rgba(190, 1, 254, .1),
  inset -10px -10px 15px rgba(255, 255, 255, 0.5);
  border-radius: 44% 56% 65% 35% / 57% 58% 42% 43%;
}

.btns:hover{
  border-radius: 50%;
}
.btns::before{
  content: '';
  position: absolute;
  top:15px;
  left: 30px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background-color: #fff;
  opacity: 0.45;
}

.btns.signup{
  bottom: 150px;
  right: -140px;
  width: 80px;
  height: 80px;
  border-radius: 49% 51% 52% 48% / 63% 59% 41% 37%;
  background-color: #01b4ff;
   box-shadow: inset 10px 10px 10px rgba(1, 180, 255, .05),
  15px 25px 10px rgba(1, 180, 255, .1),
  15px 20px 20px rgba(1, 180, 255, .1),
  inset -10px -10px 15px rgba(255, 255, 255, 0.5);
}
.btns.signup::before{
  left: 20%;
  width: 15px;
  height: 15px;

}
.btns:hover{
  border-radius: 50%;
}

</style>

 result组件:

<template>
    
    <div class="result"><h5>Orz</h5>
        您将很有机会获得{{map(Number(String(this.$route.query.score)[0]))}}</div>
    <div  class="result"><h5>Orz</h5>
    同时,您还有百分之{{(0.8*Number(String(Number(this.$route.query.score).toFixed(2)).slice(-2))+10).toFixed(2)}}的概率获得{{map(1+Number(String(this.$route.query.score)[0]))}}</div>
</template>

<script>
export default {
  methods:{
    map(num){
        if(num==1 || num==0){
            return "蓝桥杯省三等奖"
        }
        else if(num==2){
            return "蓝桥杯省级二等奖/天梯赛国家三等奖"
        }
        else if(num==3){
            return "xcpc区域赛铜奖/蓝桥杯国家级奖项"
        }
        else if(num==4){
            return "xcpc区域赛银奖"
        }
        else{
            return "xcpc区域赛金奖"
        }
    }
  } 
}
</script>
<style>

.result h5{
font-size:xx-small;
border-radius: 30px;
margin: 1px;
background-color: #e1e2e2;
height: 8px;

width: 240px;
}

.result{
border-radius: 30px;
font-size:xx-small;
width: 250px;
height: 45px;
margin: 0px auto;
border:1px solid rgba(255, 255, 255, 0.5);
background-color: rgba(255, 255, 255, 0.5);
}
    
</style>


路由:

import ResultIndex from '../pages/ResultIndex'
import { createRouter,createWebHashHistory } from 'vue-router'

const routes=[
    {path:'/result',component:ResultIndex},
]

const router=createRouter({
    history: createWebHashHistory(),
    routes,
})

export default router

Django部分

 view

import json

from django.shortcuts import render,HttpResponse,redirect

from myApp import fuctionset
# Create your views here.

def deal(request):
    if request.method=="POST":
        try:
            data=json.loads(request.body)
            arr=fuctionset.crawl(data['codeforcesid'],data['studentsum'])
            print(arr)
            y=fuctionset.predict(arr)
            print(y)
            return HttpResponse(y)
        except:
            return HttpResponse(-1)
    return HttpResponse(-1)

functionset(自己建的)

import requests
from lxml import etree
import pandas as pd
def get_content(name):
    url = 'https://codeforces.com/profile/'+str(name)
    headers = {
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53'
    }
    request = requests.get(url=url,headers=headers)
    request.encoding = 'utf-8'
    content = request.text
    content = etree.HTML(content)
    return content
def get_max_score(content):
    color_set = ['gray', 'green', 'cyan', 'blue', 'violet', 'orange', 'red', 'legendary']
    for color in color_set[::-1]:
        targetstr = "//span[@class=\"user-" + str(color) + "\"]/text()"
        maxscore_result = content.xpath(targetstr)
        if len(maxscore_result) == 4:
            maxscore_result = maxscore_result[3]
            return int(maxscore_result)
        elif len(maxscore_result) == 2:
            maxscore_result = maxscore_result[1]
            return int(maxscore_result)
    return 0
def get_solve_problem(content):
    solve_result = content.xpath('//div[@class="_UserActivityFrame_counterValue"]/text()')
    solve_result = solve_result[0]
    solve_result = solve_result.split(' ')[0]
    return int(solve_result)
def get_age_time(content):
    time_result = content.xpath('//span[@class="format-humantime"]/text()')
    time_result = time_result[-1].split(' ')
    if time_result[1] == 'months':
        time_result = int(time_result[0]) * 4 * 7
    elif time_result[1] == 'years':
        time_result = int(time_result[0]) * 12 * 4 * 7
    elif time_result[1] == 'week':
        time_result = int(time_result[0]) * 7
    else:
        time_result = int(time_result[0])
    return int(time_result)
def crawl_buct(name):
    url = 'https://buctcoder.com/userinfo.php?user='+str(name)
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53',
        'Cookie': 'Hm_lvt_bfecd9dd681e05b42e4a227c42453c15=1669591415,1669735400; resolveIDs=0; order_dir_list_by=1A; lastlang=6; PHPSESSID=p28q7m7bkn07c69oq7nvivuigj'
    }
    request = requests.get(url=url,headers=headers)
    request.encoding = 'utf-8'
    content = request.text
    content = etree.HTML(content)
    solve_result = content.xpath('//div[@class="extra content"]/a/text()')
    try:
        solve_result = solve_result[0].split(" ")[1]
        return int(solve_result)
    except:
        return 0
def crawl(name,studentnum):
    res=[]
    content=get_content(name)
    cfrating=(get_max_score(content))
    res.append((cfrating-565)/(2409-565))
    cfsolve=(get_solve_problem(content))
    res.append(cfsolve/1714)
    tmp=get_age_time(content)
    tmp=(tmp-112)/(2688-112)
    res.append(tmp)
    buctsolve=(crawl_buct(studentnum))
    res.append(buctsolve/1088)
    res.append(tmp)
    ans=[]
    ans.append(res)
    return ans
import joblib
import pandas as pd
def predict(arr):
    model1 = joblib.load(filename="myApp/XGB.pkl")
    df = pd.DataFrame(arr, columns=["cf_max_rating", "cf_solve", "cf_time", "buct_solve", "cf_real_time"])
    y = model1.predict(df)
    return y

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

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

相关文章

Java岗最全面试攻略,吃透这些技术栈Offer拿到手软

前言 我分享的这份 Java 后端开发面试总结包含了 JavaOOP、Java 集合容器、Java 异常、并发编程、Java 反射、Java 序列化、JVM、Redis、Spring MVC、MyBatis、MySQL 数据库、消息中间件 MQ、Dubbo、Linux、ZooKeeper、 分布式 &数据结构与算法等 25 个专题技术点&#xff…

重学React之高阶函数(Higher Order Function)

高阶函数(Higher Order Function) “把函数传给一个函数,返回另一个函数”,就是高阶函数。 高阶函数是一个常见的函数,它接受其他函数作为参数,然后返回一个函数。听起来很绕,但是这是个很常见的模式,比如有一个ajax函数,可以传一个callback作为处理函数,然后调用的地…

设计模式原则 - 里氏替换原则(四)

一 背景&#xff1a; 里氏替换原则是针对继承的。介绍前先聊聊继承性的特点 继承优势 提高代码的复用性&#xff08;每个子类有拥有父类的属性和方法&#xff09;提高代码的可扩展性 继承劣势 继承是侵入性的&#xff08;只要继承&#xff0c;就必须拥有父类的属性和方法&…

Linux中的Chrony时间同步服务

目录 一、时间同步 1.概念 2.时间同步在运维工作中的作用 3.时间同步完成方法 &#xff08;1&#xff09;NTP时间服务&#xff08;centos 6 &#xff09; &#xff08;2&#xff09;Chrony时间服务 二、Chrony时间服务 1.Chrony介绍 2.Chrony的优点 三、Chrony安装 …

linux基础学习-基本命令

基本命令 拷贝和移动 tree[目录名]&#xff1a;以树状图列出文件目录结构 -d&#xff1a;只显示目录cp 源文件 目标文件&#xff1a;复制文件或者目录 -f&#xff1a;已存在的目标文件直接覆盖&#xff0c;不会提示-i&#xff1a;覆盖文件前提示-r&#xff1a;若给出的源文件是…

SQLMAP高级用法

目录 前言 一、语法 1.利用google浏览器进行批量扫描 2.针对http请求头进行扫描 3.写入shell的几种方法 4.挂代理的方式 二、演示 1.批量扫描谷歌代理 2.http请求ua扫描 3.写入shell&#xff08;一&#xff09; 4.写入shell&#xff08;二&#xff09; 三、小结 前…

[附源码]计算机毕业设计Python的花店售卖系统的设计与实现(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

Windows与网络基础 | 管理_NTFS_注册表... | 系统性学习 | 无知的我费曼笔记

无知的我正在复盘Windows与网络基础 该笔记特点是 重新整理了涉及资料的一些语言描述、排版而使用了自己的描述对一些地方做了补充说明。比如解释专有名词、类比说明、对比说明、注意事项提升了总结归纳性。尽可能在每个知识点上都使用一句话 || 关键词概括更注重在实际上怎么…

【毕业设计_课程设计】在线免费小说微信小程序的设计与实现(源码+论文)

文章目录0 项目说明1 系统介绍1.1 业务层面1.2 产品层面1.3 技术层面2 项目运行3 项目截图3.1 小程序3.2 后台管理系统3.3 论文概览4 项目源码0 项目说明 在线免费小说微信小程序的设计与实现 提示&#xff1a;适合用于课程设计或毕业设计&#xff0c;工作量达标&#xff0c;…

word页码如何设置为章节加页码,例如第一章第一页1-1、第二章第一页2-1

由于用到word页码分章节页码的形式&#xff0c;从网上查了一下&#xff0c;质量真的很差&#xff0c;没有一篇文章讲清楚的&#xff0c;有的所答非所问&#xff0c;一怒之下&#xff0c;利用几个小时的时间解决问题并写下这篇文章&#xff0c;以供大家学习参考&#xff01;&…

如何多台OAK设备同时RTSP推流?

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…

世界杯结束了,但盼盼的“世界杯”才刚刚开始

体育的魅力是什么&#xff1f; 有人说体育的魅力在于感染力&#xff0c;在于惊险时刻带来的心跳反应。也有人说&#xff0c;体育的魅力源自于——体育不止于体育本身。所谓体育&#xff0c;实则更像是一卷不会完卷的英雄史诗&#xff0c;记录着无数运动员的高光时刻也承载着数…

grafana监控oceanbase-obagent部署

1.Install ob-deploy in obd server(obdserver can be a ocp server) (1)download newest version of ob-deploy and obagent,upload them to /soft directory oceanbase-community-stable-el-7-x86_64安装包下载_开源镜像站-阿里云 (2) install obdeploy rpm -ivh ob-deplo…

LinkedHashMap源码解析

LinkedHashMap源码解析 简介 LinkedHashMap 继承于 HashMap&#xff0c;其内部的 Entry 多了两个前驱、后继指针&#xff0c;内部额外维护了一个双向链表&#xff0c;能保证元素按插入的顺序访问&#xff0c;也能以访问顺序访问&#xff0c;可以用来实现 LRU 缓存策略。 Lin…

linux造so及调用

1.so的代码 2.gcc -O -c -fPIC -o testso.o so.c 3.gcc -shared -o testso.so testso.o 4.so可以看到了。 5.拷贝到系统内&#xff0c;然后同时ldconfig更新下。 6.调用的c代码 7.编译&#xff0c;连接。 8.可以看到执行的结果了。 ######################################…

分布式光伏运维平台具体有哪些功能?

安科瑞 华楠 综合看板 1、显示所有光伏电站的数量&#xff0c;装机容量&#xff0c;实时发电功率。 2、累计日、月、年发电量及发电收益。 3、累计社会效益。 4、柱状图展示月发电量 电站状态 1、电站状态展示当前光伏电站发电功率&#xff0c;补贴电价&#xff0c;峰值功…

2022游戏安全行业峰会举办,生态共建护航游戏产业

游戏的外挂、黑产、盗版等问题&#xff0c;一直是运营过程中面临的重要难题。这些安全问题&#xff0c;轻则给游戏的收入和口碑带来损伤&#xff0c;重则可以摧毁一款游戏。因此&#xff0c;近年来越来越多的游戏厂商不断加大对游戏安全的投入&#xff0c;为游戏建造铜墙铁壁。…

说说Vue响应式系统中的Watcher和Dep的关系-面试进阶

引言 在这里我先提出两个问题&#xff08;文章末尾会进行解答&#xff09;&#xff1a; 在Vue的数据响应系统中&#xff0c;Dep和Watcher各自分担什么任务&#xff1f;Vue的数据响应系统的核心是Object.defineproperty一定是最好的吗&#xff1f;有什么弊端和漏洞吗&#xff…

【毕业设计_课程设计】基于Android的二维码扫描库

文章目录0 项目说明1 实现功能2 使用方式3 项目工程0 项目说明 基于Android的二维码扫描库 提示&#xff1a;适合用于课程设计或毕业设计&#xff0c;工作量达标&#xff0c;源码开放 1 实现功能 可打开默认二维码扫描页面支持对图片Bitmap的扫描功能支持对UI的定制化操作支…

Problem C: 算法9-9~9-12:平衡二叉树的基本操作

Problem Description 平衡二叉树又称AVL树&#xff0c;它是一种具有平衡因子的特殊二叉排序树。平衡二叉树或者是一棵空树&#xff0c;或者是具有以下几条性质的二叉树&#xff1a; 1. 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根节点的值&#xf…