一、缓存 1.1 缓存穿透 1.1.1 定义 缓存穿透是指用户查询不存在的数据,mysql中查不到数据无法写入redis,导致每次查询都会落在mysql上 1.1.2 解决方案 1.1.2.1 缓存空数据 缓存空数据,数据库查询结果为空,任然把这个空结果缓存至redis {key:'查询条件',value:null} 优点:简单 缺点:消耗内存,redis和数据库可能出现数据不一致(第一次查询数据库中没有数据,在redis缓存了一个null值,然后新增了数据到数据库,此时数据库和redis中数据就不一致了,需要手动更新数据库数据到redis,增加了数据维护的复杂性) 1.1.2.2 布隆过滤器 参考布隆过滤器 - 问尤龙の时光 (wenyoulong.com) 1.1.3 代码示例 有如下接口方法,根据用户ID查询用户信息,用户id随便编一个都行 /** * 根据ID获取的用户,用于测试缓存穿透 * @param userId 用户IO * @return 用户信息 */ @GetMapping("/getById/{userId}") public String getById(@..... redis常见问题 待分类
一、基本概念 1.1 定义 树时n(n>=0)个节点的有限集。n=0时称为空树。 非空树具有以下特性: 有且仅有一个称为根的节点; 当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1,T2...Tn,其中每个集合本身又是一棵树,称为根的子树。 树作为一种逻辑结构,具有以下特点: 树的根节点没有前驱,除根节点以外的其他节点有且只有一个前驱; 树中所有节点可以有0或者多个后继; n个节点的树中有n-1条边。 1.2 基本术语 从节点A->K的唯一路径上的任意节点,称为K的祖先,B为K的祖先,K为B的子孙,E是K的双亲,K为E的孩子。有相同双亲的节点称为兄弟,K和L是兄弟 树中一个节点的孩子个数称为该节点的度,树中节点最大的度数,称为树的度。如节点B度为2,节点D度为3 度大于0的节点称为分支节点,度为0的节点称为叶子节点 节点的深度、高度和层次 节点的层次从根节点开始定义,逐级向下递增 双亲在同一层的节点称为堂兄弟,如K、L、M互为堂兄弟 节点的深度是从根节点开始自顶向下累加的 节点的高度是从叶子节点开始自底向上累加的 树的高度是树中节点的最大层数 路径..... 数据结构学习笔记--树与二叉树 待分类
一、数制与编码 1.1 进位计数制及其相互转换 1.1.1 进位计数值 1.1.2 进制转换 1.1.2.1 任意进制与十进制 任意进制---->十进制 eg:十进制-->二进制 整数位 小数位 1.1.2.2 二进制、四进制、八进制、十六进制 1.1.3 真值与机器数 真值为带符号数,机器数为该真值在计算机中的二进制数 1.2 BCD码 1.2.1 8421码 1.2.2 余3码 1.2.3 2421码 小于5得数字第一位都为0,大于5得数字第一位都为1 1.3 ASCII码 计算机组成原理--数据的表示和运算 待分类
聚合操作 聚合操作由管道和流构成。 聚合操作通过流来处理数据而不是通过集合,流是数据元素的序列,而集合是数据存储的数据结构,流通过管道携带来自源(如集合)得数据,管道是一系列操作,聚合操作接受lambda表达式作为参数。 管道 管道是一系列的聚合操作,包含以下 组件 源:可以是集合,数组,构造函数,输入输出通道 0个或者多个中间操作:部分中间操作会生成一个新的流,如filter 终端操作:终端操作会返回一个非流结果,如原始类型、集合或者没有返回值(如forEach) 流 流是元素序列 流不是存储数元素的数据结构,流通过管道从源携带值 聚合操作和迭代器的区别 聚合操作没有next方法 聚合操作更方便将问题划分为子问题,同时将结果组合到子问题中 聚合操作不直接处理集合中的元素,而是处理流中的元素 聚合操作支持将行为作为参数,如lambda表达式 流的常用操作 流的创建 java.util.stream.Stream public static Stream of(T... values) 产生一个元素为给定值的流 public static Stream empty() 创建空的流 pub.... Java基础--聚合操作 待分类