4.15学习(相向双指针,缓存预热,定时任务)

对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。

输入格式:
输入在一行中给出长度不超过1000的非空字符串。

输出格式:
在一行中输出最长对称子串的长度。

输入样例:
Is PAT&TAP symmetric?
输出样例:
11

思路:使用相向双指针,定义一个K从前往后遍历,i=k
i从前往后移动
j从后往前移动,
如果s[i]s[j],那么从i到j可能是一个对称子串,我们让i++,j--不断匹配直到ij(该字串字符数为奇数)或者i>j(该字串字符数为偶数)。
如果s[i]!=s[j]则继续移动j直到i==j,说明没有找到与s[i]相等的后缀。我们让k++,重复上面的操作。

点击查看代码
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int i,j;
        int maxLength = 0;
        for(int k=0;k<s.length();k++) {
            i=k;
            for(j=s.length()-1;j>=0;j--) {
                int length=0;
                while(i<j&&s.charAt(i)==s.charAt(j)) {
                    i++;
                    j--;
                    length+=2;
                }
                if(i==j){//该子串为奇数个
                    length+=1;
                    maxLength=Math.max(maxLength,length);
                } else if (i>j) {//该子串为偶数个
                    maxLength=Math.max(maxLength,length);
                }
            }
        }
        System.out.println(maxLength);
    }
}

Jedis独立于spring操作redis的客户端
redisson:分布式操作redis的java客户端,可以像使用集合一样操作redis
lettuce:高阶操作redis的java客户端 异步,连接池
连接池的概念

Redis存储的数据结构(面试考,5种)
String字符串 name:"wcy"
List集合 name:["wcy","cjj","cyx","wcy"]
Set name:["wcy","cjj"]
Zset name:{wcy-1,cjj-2} 在添加进来的元素后面加一个分数
Hash nameAge:{"wcy":1,"cjj":2}

设计主页缓存
设计缓存的key: systemId.moduleId.funcId.userId
key: systemId:moduleId:funcId:userId
中间的分隔符不要和systemId、moduleId、funcId、userId中的值冲突,比如systemId为partner:backend
所以设计为partner:user:recommend:userId
使用数据库查询时间大概为170ms,使用缓存后为17ms,速度提高了10倍
记得设置过期时间,如果不设置当redis内存满了,就会执行自己的淘汰策略

缓存预热
第一个用户访问的时候是查询数据库,访问速度很慢
优点:解决用户首次访问速度很忙
缺点:需要进行设计,增加开发成本
预热的时机需要确定,否则可能导致拿到的数据不对或者太老
需要占用空间,比如redis有4g,上线的时候平均使用3g,但是如果预热的时候需要2g,2+3>4,直接超出内存了。
怎么缓存预热
1.定时触发
2.模拟触发(手动触发)

实现:
用定时任务,每天刷新所有用户的推荐列表
注意点:
缓存预热的意义:
1.主页是用来展示用户的,新增的用户很少,但是用户数量多,即使隔一天展示新用户影响也不会很大。
2.预热占用的空间不能太大
3.预热的周期:每天一次

定时任务
1.spring sheduler(springboot整合)
2.Quartz(独立于spring存在的定时任务框架)
3.XXL-JOB分布式任务调度平台(界面+sdk)

posted @ 2025-04-15 21:01  虾11  阅读(10)  评论(0)    收藏  举报