java后端工程师+AI大模型进修ing(研一版‖day58)

今日总结

  • java随笔录------redis过期策略和删除策略
  • AI随探录------构建训练集
  • 代码随想录------回溯---组合总和

目录

今日总结

详细内容

java随笔录

Redis缓存

1、Redis缓存---数据过期策略(假如redis的key过期之后,会立即删除吗)

2、Redis缓存---数据淘汰策略(假如redis的内存不够用时,此时向reids添加新的key,那么内存的数据删除策略是什么样子的)

AI随探录

代码随想录

回溯---组合总和


详细内容

java随笔录

Redis缓存

1、Redis缓存---数据过期策略(假如redis的key过期之后,会立即删除吗)

答:Redis对数据设置数据的有效时间,数据过期以后,就需要将数据从内存中删除掉。可以按照不同的规则进行删除,这种删除规则就被称之为数据的删除策略(数据过期策略)。
1、惰性删除
设置该key过期时间后,我们不去管它,当需要该key时,我们在检查其是否过期,如果过期,我们就删掉它,反之返回该key
优点:对CPU友好,只会在使用该key时才会进行过期检查,对于很多用不到的key不用浪费时间进行过期检查
缺点:对内存不友好,如果一个key已经过期,但是一直没有使用,那么该key就会一直存在内存中,内存永远不会释放
2、定期删除
每隔一段时间,我们就对一些key进行检查,删除里面过期的key(从一定数量的数据库中取出一定数量的随机key进行检查,并删除其中的过期key)。
优点:可以通过限制删除操作执行的时长和频率来减少删除操作对CPU的影响。另外定期删除,也能有效释放过期键占用的内存。
缺点:难以确定删除操作执行的时长和频率。
Reids的过期删除策略:惰性删除+定期删除 两种策略进行配合使用

2、Redis缓存---数据淘汰策略(假如redis的内存不够用时,此时向reids添加新的key,那么内存的数据删除策略是什么样子的)

答:以下八种策略。

使用建议:
1.优先使用allkeys-Iru策略。充分利用LRU算法的优势,把最近最常访问的数据留在缓存中。如果业务有明显的冷热数据区分,建议使用。
2.如果业务中数据访问频率差别不大,没有明显冷热数据区分,建议使用allkeys-random,随机选择淘汰。
3.如果业务中有置顶的需求,可以使用volatile-Iru策略,同时置顶数据不设置过期时间,这些数据就一直不被删除,会淘汰其他设置过期时间的数据。
4.如果业务中有短时高频访问的数据,可以使用allkeys-lfu或volatile-Ifu策略。

AI随探录

python 复制代码
import jieba
import pandas as pd
from gensim.models.fasttext_inner import word2_index
from sklearn.model_selection import train_test_split
from sympy.codegen.fnodes import cmplx
from tqdm import tqdm

import config

def process():
    print("开始处理数据")
    #读取文件
    df = pd.read_json(config.RAW_DATA_DIR / "synthesized_.jsonl", lines=True,orient='records').sample(frac=0.1)

    # 提取句子
    sentences = []
    for dialog in df['dialog']:
        for sentence in dialog:
            sentences.append(sentence.split(':')[1])
    print(f'句子总数:{len(sentences)}')


    #划分数据集
    train_sentences, test_sentences = train_test_split(sentences,test_size=0.2)

    #构建词表
    vocab_set = set()
    for sentence in tqdm(train_sentences,desc="构建词表"):
        vocab_set.update(jieba.lcut(sentence))

    vocab_list = ['<unk>'] + list(vocab_set)
    print(f'词表大小:{len(vocab_list)}')

    #保存词表
    with open(config.MODELS_DIR / 'vocab.txt', 'w' , encoding='utf-8') as f:
        f.write('\n'.join(vocab_list))

    #构建训练集
    word2_index = {word: index for index, word in enumerate(vocab_list)}
    index_train_sentences =  [[word2_index.get(token,0 ) for token in jieba.lcut(sentence)] for sentence in train_sentences]

    print("数据处理完成")

if __name__ == '__main__':
    process()

代码随想录

回溯---组合总和

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。

candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。

对于给定的输入,保证和为 target 的不同组合数少于 150 个。

示例 1:

复制代码
输入:candidates = [2,3,6,7], target = 7
输出:[[2,2,3],[7]]
解释:
2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。
7 也是一个候选, 7 = 7 。
仅有这两种组合。

示例 2:

复制代码
输入: candidates = [2,3,5], target = 8
输出: [[2,2,2,2],[2,3,3],[3,5]]

示例 3:

复制代码
输入: candidates = [2], target = 1
输出: []

提示:

  • 1 <= candidates.length <= 30
  • 2 <= candidates[i] <= 40
  • candidates 的所有元素 互不相同
  • 1 <= target <= 40
java 复制代码
class Solution {
    List<List<Integer>> result = new ArrayList<>();
    List<Integer> input = new LinkedList<>();
    private void back(int[] candidates, int target, int indexstart, int sum) {
        if(sum > target) {
            return;
        }
        if(sum == target) {
            result.add(new ArrayList<>(input));
            return;
        }
        for(int i = indexstart; i < candidates.length; i++) {
            if (sum + candidates[i] > target) break;
            input.add(candidates[i]);
            sum += candidates[i];
            back(candidates,target,i,sum);
            sum -= candidates[i];
            input.removeLast();
            }
        }
    
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        int sum=0;
        Arrays.sort(candidates);
        back(candidates,target,0,sum);
        return result;
    }
}
相关推荐
初恋叫萱萱3 分钟前
构建高性能生成式AI应用:基于Rust Axum与蓝耘DeepSeek-V3.2大模型服务的全栈开发实战
开发语言·人工智能·rust
cyforkk1 小时前
12、Java 基础硬核复习:集合框架(数据容器)的核心逻辑与面试考点
java·开发语言·面试
我材不敲代码5 小时前
Python实现打包贪吃蛇游戏
开发语言·python·游戏
身如柳絮随风扬6 小时前
Java中的CAS机制详解
java·开发语言
韩立学长7 小时前
【开题答辩实录分享】以《基于Python的大学超市仓储信息管理系统的设计与实现》为例进行选题答辩实录分享
开发语言·python
风筝在晴天搁浅7 小时前
hot100 78.子集
java·算法
froginwe118 小时前
Scala 循环
开发语言
m0_706653238 小时前
C++编译期数组操作
开发语言·c++·算法
故事和你918 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
Bruk.Liu8 小时前
(LangChain实战2):LangChain消息(message)的使用
开发语言·langchain