Shiro官方文档笔记
1. 核心架构1. 核心流程 1. Subject指需要认证的用户信息实体,subject 需要通过 securityManager 指定 Realm 来查询是否存在改用户信息和给用户进行授权的操作 2. SecurityManagershiro 体系的核心。协调内部安全组件。如:Realm 等。 3. Realm通过查询特定的数据源:数据库、LDAP 等。来对 Subject 进行认证和授权操作。 2. 核心架构[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FMppfyoU-1624680171088)(https://i.loli.net/2021/06/25/tADiGzO3lZpfrYW.png)] 1. Authenticator 认证器对 Subject 中的信息进行认证。通过将 Subject 的信息传入 Realm 查询指定数据源来进行认证判断。当用户尝试登录时,执行认证器。 2. AuthenticationStrategy 认证策略器如果配置了多个多个 Realm,则通过认证策略器来决定认证成功和认证失败的情况。 3. Author ...
LeetCode-求二叉树的最大深度
题目详情题目链接:二叉树的最大深度 一、解题思路通过递归的方式,不断遍历其树的每一个节点。然后判断当前节点是否为空,不为空高度加 1,同时遍历当前节点的子节点,然后比较左右两节点的高度,返回最大的节点高度。反之则直接返回上一节点的高度。 二、解题步骤1.详细步骤 判断当前节点是否为空 如果为空,直接返回上一节点的高度 反之高度加 1 ,并执行下一步 继续递归调用该函数,将其节点设置为当前节点,同时高度设置为当前节点的高度。并设置变量用于获取函数的返回值。 比较左右两个节点函数返回值,取其最大值。 2. 代码代码如下: 12345678910111213141516171819class Solution { public int maxDepth(TreeNode root) { return maxHeight(root,0); } public int maxHeight(TreeNode root,int height){ if(root!=null){ h ...
LeetCode-汉明距离
题目描述 一、解题思路这里有两种解题思路 1. 位运算法位运算如果你不了解的话,可以看下第二种解题思路。但是整体代码有点冗余,而且效率也不高。^的运算规则二进制位中各个位上数就是相同为 0,不同为 1。&的运算规则是都为 1 时结果为 1,反之全为 0。|的运算规则是只要有 1 结果为 1,反之为 0。>>当前数二级制向右移一位,同时最高位根据数的正负来补 0 或 1<< 当前数二进制向左移一位,同时最低位补 0。 位运算法 将两个数^运算 判断运算结果中 1 的个数。即为两个数二进制中各个位的值不同的个数 这里有两种计算 1 个数的方法 2.1.1 将运算结果按 2 求余,如果为 1 就个数加 1。反之就忽略 2.1.2 将运算结果右移一位。并重复上述步骤 32 次。 2.2.1 将运算结果和运算结果-1 进行&运算,然后将值返回作为新的运算结果。1 的个数加 1。 2.2.2 直到运算结果为 0 时跳出循环 2. 暴力破解法 将上述两个数将其二进制位分别放入到不同的 List 容器中 判断两个容器的长度,将长度较大的容器作为遍历次数 ...
LeetCode之合并二叉树
合并二叉树1. 题目 2. 解题思路采用递归和后序遍历的方式来同时遍历两棵树。遍历的同时,一定要判断两颗树的当前节点是否为空。然后创建一个新的节点,节点值为两个节点之和。遍历完成后即可得到合并后的树。 3. 解题步骤 判断当前两颗树的节点全为空,如果为空则返回空。 反之有以下三种 可能两个节点都不为空 左节点为空,右节点不为空 右节点为空,左节点不为空 采取以下措施 当为第一种情况时 ,创建一个新的节点,节点值为左右节点值的和,之后遍历左右节点 当为第二种情况时 ,创建一个新的节点,节点值为右节点值,之后遍历右节点. 当为第三种情况时 ,创建一个新的节点,节点值为左节点值,之后遍历左节点。 返回创建的新的节点。 4. 代码1234567891011121314151617181920212223class Solution { public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { if(t1==null&&t2==null){ r ...
LeetCode将有序数组转化为二叉搜索树
一、将有序数组转化为二叉搜索树题目详情链接:有序数组转二叉树 二、使用步骤1.解题思路将当前数组的中间值用于创建当前的节点,然后中间值左边的数,分为一个新的子数组,这里我们暂且叫左子数组,将右边的分为右子数组。将左子数组放入当前节点的左子树。右子树组,放入当前节点的右子树。重复上述步骤即可。 2.解题步骤 创建一个新的节点节点值为数组的中位值 。 判断当前子数组大小是否为 1。 如果为 1,则直接返回该节点。 反之执行第三步。 判断当前数组的 (中间值得索引-1)>=0, 就是判断当前节点是否存在左子树。 如果大于0,创建一个新的数组命名为左子数组,值为当前数组的中间值左边的所有数值。然后将将左子数组传入当前函数执行。 反之,则表明数组越界。直接执行第四步 判断当前数组的**(中间值的索引是+1)<=当前数组的长度** ,就是判断当前节点是否存在右子树。 如果小于的话,创建一个新的数组命名为右子数组,值为当前数组的中间值右边的所有数值。然后将将右子数组传入当前函数执行。 反之,执行第五步 返回当前节点。 代码123456789101112131 ...




