2022/11/27一周总结

news2024/11/28 20:37:24

项目

redis

安装以及启动

  1.  切换到redis根目录运行cmd,先启动服务端

redis-server.exe

 2.输入redis-cli并回车(redis-cli是客户端程序)如图正常提示进入,并显示正确端口号,则表示服务已经启动。

基本知识

数据类型

  • String: 字符串
  • Hash: 散列
  • List: 列表
  • Set: 集合
  • Sorted Set: 有序集合

每种数据类型,分别有对应的操作。

缓存

缓存:数据交换的缓冲区,cache,临时存储数据的地方,性能较高。它有好处,但是要付出一定的成本。

缓存更新策略

主动更新策略 

  • 由缓存的调用者,在更新数据库的同时更新缓存
  • 缓存和数据库整合为一个服务,由服务来维护一致性。调用者调用该服务,无需关心缓存一致性的问题
  • 调用者只操作缓存,由其他线程异步的将数据持久化到数据库,保持最终一致

       删除缓存

缓存穿透:客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库

缓存穿透解决方案:

  • 缓存空对象

优点:实现简单,维护方便

缺点:消耗内存,原因:一直往redis存储null,解决:设置null的TTL

          可能会造成不一致,原因:当刚往redis存入null时,该值有一个值存入到数据库,解决:缩短TTL时间

  • 布隆过滤

原理:它实际上是一个很长的二进制向量和一系列随机映射函数。主要通过0 1判断一个元素是否在一个集合中。

优点:节省空间

缺点:判断不一定准确

缓存雪崩:同一时段大量的缓存key同时失效或者redis服务器宕机,导致大量请求达到数据库

缓存雪崩解决方案:

  • 缩短TTL时间
  • redis集群

缓存击穿(热点key问题):一个被高并发访问并且缓存重建业务较复杂的key失效了,给数据库带来很大压力。

缓存击穿解决方案:

  • 互斥锁(性能比较差)

  • 逻辑过期(性能较好)

前后端响应的代码进行统一

前面对于每种请求都设置了对应的响应码,现在改成了基本的一个成功、一个失败,如果有业务需要多个的话,就根据业务再进行增加。

public interface ResultCode {
    Integer SUCCESS = 20000; //成功
    Integer ERROR = 20001; //失败
    Integer ERROR_SEND_CODE = 20002;//发生验证码失败
}

 响应拦截器

axios.interceptors.response.use(success=>{
  if(success.status&&success.status==200){
    if(success.data.code==2000){
      ElMessage.error({message:success.data.message});
      return;
    }
    if(success.data.message){
      ElMessage.success({message:success.data.message});
    }
  }
  return success.data;
}, error=>{//接口访问不到
  if(error.response.code==504||error.response.code==404){
    ElMessage.error({message:'网络忙'})
  }else if(error.message.code==403){
    ElMessage.error({message:'权限不足'})
  }else if(error.message.code==401){
    ElMessage.error({message:'尚未登录,请登录'})
    router.replace('/login');
  }else{
    if(error.response.data.message){
      ElMessage.error({message:error.response.data.message})
    }else{
      ElMessage.error({message:'未知错误'})
    }
  }
  return;
})

封装发送axios请求的方法

export const postRequest=(url,params)=>{
  return axios({
    method:'post',
    url:url,
    data:params
  })
}

登录注册功能

花了比较长的时间解决报500错误,一开始以为是前端路由问题,最后发现是后端数据库的一个字段类型设置错误。

刷题

11.27

题目来源于2022年蓝桥杯JavaB组,测一下自己用C和Java写题目的差别,事实证明还是C熟悉一点,后面得多练习Java写题目,还有注意格式。

格式:

  • 不要使用package语句
  • 主类名称为Main

[蓝桥杯2022初赛Java B组] 字符统计

题目描述

给定一个只包含大写字母的字符串S ,请你输出其中出现次数最多的字母。
如果有多个字母均出现了最多次,按字母表顺序依次输出所有这些字母。

输入格式

一个只包含大写字母的字符串S。
对于100% 的评测用例,1≤|S|≤10^6。

输出格式

若干个大写字母,代表答案。

输入样例 

BABBACAC

输出样例

AB

 思路

遍历字符串,将每个字符串的次数存到数组中,i=s[i]-'A',题目说了只有大写字母,这样的话,比用hashmap做输出更方便,要按字典序输出

代码实现

import java.util.Scanner;

// [蓝桥杯2022初赛] 字符统计
// 样例 BABBACAC
public class CharacterCount {
	public static void main(String[] args) {
		int[] count=new int[26];//共26个大写字母
		for(int i=0;i<26;i++) {//初始化
			count[i]=0;
		}
		Scanner scanner=new Scanner(System.in);
		String s=scanner.next();
		int max=0;
		for(int i=0;i<s.length();i++) {
			char t=s.charAt(i);
			count[t-'A']++;
			if(count[t-'A']>max) {
				max=count[t-'A'];
			}
		}
		for(int i=0;i<26;i++) {
			if(count[i]==max) {
				System.out.print((char)(i + (int)'A'));
			}
		}
	}
}

平均播放进度大于60%的视频类别_牛客题霸_牛客网

 思路

按标签tag分组,降序排列

难点在于用到多个函数,所以就讲一下这些函数的用处

  • concat函数用于将两个字符串连接为一个字符串
  • 在mysql中可使用SUBSTRING_INDEX()函数来截取指定字符或字符串的内容;

    语法:SUBSTRING_INDEX(str,delim,count)

    str是要进行截取的字符串;delim是指定的分割字符或字符串;count是delim在对应str内容中出现的次数,count为正数表示从左至右截取n次之前的所有内容,为负数表示从右至左截取n次之前的内容;

  • round函数就是保留小数的位数

  • avg函数就是求平均值

  • TIMESTAMPDIFF函数,语法 TIMESTAMPDIFF(unit,begin,end);

  • unit参数是确定(end-begin)的结果的单位,表示为整数。 以下是有效单位:MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR

代码实现

select tag,
concat(round(avg(if(TIMESTAMPDIFF(SECOND, start_time, end_time)<duration,TIMESTAMPDIFF(SECOND, start_time, end_time)/duration,1)*100),2),'%') avg_play_progress 
from tb_user_video_log a 
inner join tb_video_info b 
on a.video_id=b.video_id 
group by tag 
having substring_index(avg_play_progress,'%',1) > 60
order by avg_play_progress desc

各个视频的平均完播率_牛客题霸_牛客网

思路

和上面一题一样,也是用到了多个函数,但是相较于上题还是比较简单。

sum(if(表达式,1,0)这样可以计算表达式成立的记录有多少条。

year(时间)获得时间的年份。

代码实现

select a.video_id,
round(sum(if(timestampdiff(second.start_time,end_time)>=duration,1,0))/count(*),3) avg_comp_play_rate
from tb_user_video_log a 
inner join tb_video_info b 
on a.video_id=b.video_id 
where year(start_time)='2021'
group by b.video_id 
order by avg_comp_play_rate desc

 近一个月发布的视频中热度最高的top3视频_牛客题霸_牛客网

 思路

难点在于计算热度,也就是计算近一个月无播放的天数。

over()函数又叫做开窗函数,是指在对一些明细数据进行聚合操作时,通过over()函数,对明细数据再次进行分组,然后聚合。

DATE_SUB() 函数从日期减去指定的时间间隔。语法DATE_SUB(date,INTERVAL expr type),

date 参数是合法的日期表达式。expr 参数是要添加的时间间隔,type 参数有很多种类。

 代码实现

select a.video_id,
round((100*sum(if(timestampdiff(second,start_time,end_time)>=duration,1,0))/count(*)+5*sum(if_like)
+3*sum(if(comment_id is null,0,1))
+2*sum(if_retweet))/(datediff(max(max(end_time)) over(), max(end_time))+1),0) hot_index 
from tb_user_video_log a 
inner join tb_video_info b 
on a.video_id=b.video_id
where release_time >= date_sub((select max(end_time) from tb_user_video_log), interval 29 day)
group by b.video_id 
order by hot_index desc 
limit 3

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

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

相关文章

算法提升:图的Dijkstra(迪杰斯特拉)算法

目录 概念 思路 代码 概念 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的&#xff0c;因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法&#xff0c;解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始&#xf…

【Hack The Box】linux练习-- Ophiuchi

HTB 学习笔记 【Hack The Box】linux练习-- Ophiuchi &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月27日&#x1f334; &#x1…

MySQL的执行计划explain

select_type&#xff1a;表示的查询类型 SIMPLE&#xff1a;表示查询语句不包含子查询和union;PRIMARY&#xff1a;表示此查询是最外层的查询&#xff1b;UNION: 表示此查询是UNION的第二个或后续的查询&#xff1b;DEPENDENT UNION&#xff1a;表示此查询是UNION的第二个或后续…

ARM Developer Keil MDK 5.X Crack

ARM Developer Keil MDK是面向各种STM32微控制器产品的全面软件开发解决方案&#xff0c;提供创建、编译和调试嵌入式应用程序时所需的一切资源。MDK包括真正的Arm编译器和易于使用的Keil uVision IDE/调试器&#xff0c;可与STM32CubeMX和软件包连接。MDK还提供各种专业的中间…

Faster R-CNN详解

Faster R-CNN Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。使用VGG16作为网络的backbone&#xff0c;推理速度在GPU上达到5fps(包括候选区域的生成)&#xff0c;准确率也有进一步的提升。在2015年的ILSVRC以及COCO竞赛中获得多个项目的第一名。 Faster R-CNN算…

Easyrecovery2022硬盘磁盘U盘免费数据恢复软件

EasyRcovery的软件支持因各种原因损坏或误删的文件&#xff0c;文档&#xff0c;照片&#xff0c;视频&#xff0c;音频&#xff0c;电子邮件等等类型的数据它都可以恢复。同时&#xff0c;这款软件不仅仅支持u盘的数据恢复&#xff0c;移动硬盘&#xff0c;磁盘&#xff0c;sd…

【POJ No. 3067】 公路交叉数 Japan

【POJ No. 3067】 公路交叉数 Japan 北大 OJ 题目地址 【题意】 东海岸有N 个城市&#xff0c;西海岸有M 个城市&#xff08;N ≤1000&#xff0c;M ≤1000&#xff09;&#xff0c;将建成K 条高速公路。每个海岸的城市从北到南编号为1, 2, ……每条高速公路都是直线&#xf…

计算机网络---TCP流量控制和拥塞控制

&#xff08;一&#xff09; TCP 流量控制 TCP提供流量控制服务来消除发送方&#xff08;发送速率太快&#xff09;使接收方缓存区溢出的可能性&#xff0c;因此 流量控制是一个速度匹配服务&#xff08;让发送方慢一点&#xff0c;要让接收方来得及接收&#xff0c;实现匹配发…

Qt编写物联网管理平台(支持win/linux/mac/嵌入式linux/modbus等)

一、前言 这个物联网综合管理平台前后迭代了五年&#xff0c;一点一滴慢慢积累起来&#xff0c;从最开始的只有modbus串口协议解析以及简单的表格显示数据&#xff0c;慢慢的逐渐增加了tcp_rtu支持&#xff0c;用户管理模块&#xff0c;地图监控模块&#xff0c;而后为了拓展性…

消息队列 RabbitMQ入门:Linux(Docker)中安装和卸载RabbitMQ服务

文章目录前言一、Linux中安装RabbitMQ下载Erlang下载RabbitMQ进入Linux进行安装启动RabbitMQ二、RabbitMQ Web管理页面安装RabbitMQ Web管理页面访问管理页面三、使用Docker安装RabbitMQ安装Docker安装启动RabbitMQ访问管理页面四、Linux卸载RabbitMQ相关卸载RabbitMQ卸载Erlan…

第41讲:MySQL内置的QL性能分析工具

文章目录1.SQL性能分析的概念2.分析数据库中SQL的执行频率3.数据库中的慢查询日志3.1.开启慢查询日志功能3.2.模拟慢SQL查询观察日志内容4.Profile查看SQL每个阶段的耗时4.1.开启Profile操作4.2.随便执行一些查询语句4.3.查询执行SQL的耗时4.4.查询某一条SQL每个阶段的耗时4.5.…

【ASM】字节码操作 工具类与常用类 InstructionAdapter 介绍

文章目录 1.概述1.1 为什么会有 InstructionAdapter类?2. InstructionAdapter2.1 class info2.2 fields2.3 构造方法2.4 methods3.示例3.1预期目标4.总结1.概述 在上一节:【ASM】字节码操作 工具类与常用类 AnalyzerAdapter 工作原理 我们学习了AnalyzerAdapter类的工作原理…

【OpenCV 例程 300篇】246. 特征检测之ORB算法

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】246. 特征检测之ORB算法 特征检测与匹配是计算机视觉的基本任务&#xff0c;包括检测、描述和匹配三个相互关联的步骤。广泛应用于目标检测、图像检索、视频跟踪和三维重建等诸多领域。 6.9.1 ORB 算…

【Hack The Box】linux练习-- SneakyMailer

HTB 学习笔记 【Hack The Box】linux练习-- SneakyMailer &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月23日&#x1f334; &…

函数调用在嵌入式架构设计中的应用

函数调用很好理解&#xff0c;即使刚学没多久的朋友也知道函数调用是怎么实现的&#xff0c;即调用一个已经封装好的函数&#xff0c;实现某个特定的功能。 把一个或者多个功能通过函数的方式封装起来&#xff0c;对外只提供一个简单的函数接口&#xff0c;然后在其他地方调用即…

SpringCloud - Config分布式配置中心

文章目录一.概述1. 分布式系统面临的配置问题2. 什么是配置中心3. 配置中心怎么用4. 配置中心能做什么二.Config服务端配置与测试1. 搭建1.1 在github上创建一个springcloud_config的新仓库1.2 获得新仓库的地址&#xff1a;1.3 本地硬盘目录上新建git仓库并clone1.4 创建文件1…

设置一个不能被继承的类

小屋杂谈&#xff0c;记录日常 方法1&#xff1a; 如果想让这个类不能被继承&#xff0c;可以把这个类的构造函数设置成私有&#xff0c;这样子类去继承他构造就会报错&#xff0c;这样的话这个类就是不能被继承的&#xff0c;如果需要用这个类的对象的话&#xff0c;在基类里…

机器学习中的交叉熵

文章目录一、背景二、概率论基础知识三、熵≈信息熵&#xff08;应用领域不同&#xff09;、相对熵KL散度、交叉熵、softmax、sigmoid、交叉熵损失图像分割如何理解CrossEntropyLoss()参考资料一、背景 学习机器学习过程中&#xff0c;总是会遇到交叉熵这个名词。通过交叉熵损…

SpringBoot整合knife4j

1.1 Swagger 前后端分离开发&#xff1a;前端和后端分开进行开发&#xff0c;2个项目&#xff0c;一个是前端项目&#xff0c;一个是后端项目 目前基本上很多小项目都是前后端分离&#xff0c;除了后台管理系统 前后端分离开发&#xff0c;前端(app、小程序、智能硬件等)怎么…

栈(C语言实现)

文章目录&#xff1a;1.栈的概念2.栈的结构3.接口实现3.1初始化栈3.2判断栈是否为空3.3压栈&#xff08;入栈&#xff09;3.4出栈3.5查看栈顶元素3.6统计栈内元素个数3.7销毁栈1.栈的概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操…