自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 权限管理模型学习

一、RBACRBAC模型概述 RBAC(Role-BasedAccessControl)基于角色访问控制,将权限的过程抽象概括为Who对What进行How访问操作,由Who,What,How构成访问权限三元组 Who:权限的主体,使用者 What:权限针对的对象 How:具体的权限,操作 RBAC模型组成 有三个组成部分,用户,角色,权限 User:用户,每个用户用唯一UID标识,并授予不同的角色 Role:角色,不同角色具有不...

2022-03-07 09:43:21 689

原创 第四周学习总结

场景建模需要建模场景 根据人员在机构里的角色,判断是否允许访问某个接口 判断某个人对班级的基础信息、学生是否有查看/修改的权限 判断某个人对班级的作业/资料是否有查看/修改的权限 判断某个人是否有查看所有人作业提交的权限 判断某个人是否有给作业评分的权限 判断某个人是否有对课程的教师、基础信息、资料、作业查看/修改的权限 具体建模 根据人员在机构里的角色,判断是否允许访问某个接口 分析 需要根据具体角色,然后来判断

2022-03-07 09:39:53 114

原创 第三周学习总结

目标任务 抽象权限校验的主要流程 将权限校验的完成场景进行总结,定义一套标准的权限校验流程 使用时序图来说明其他系统是以怎样的顺序和我们的系统进行交互的 casbin数据存储 了解casbin如何对策略、匹配规则等进行持久化 基于GRPC提供服务 了解grpc 基于权限校验流程定义proto文件,将接口提供出来 抽象权限校验的主要流程权限校验流程1、建模与提交模型客户根据实...

2022-03-07 09:35:59 168

原创 第二周学习总结

任务目的 建模场景并用代码实现 建模总结 管理员创建课程,并向课程中添加老师,老师对该课程具有管理权限 老师A对课程B具有权限C,可以采用ACL模型 对应策略配置p=user_id,course_id,act 对应请求信息r=user_id,course_id,act 对应匹配策略m=p.user_id==r.user_id&&r.course_id==p.course_id&...

2022-03-07 09:35:19 112

原创 第一周学习总结

ABAC相关概念及特点概念 abac是基于属性进行权限判断,通过对用户的属性,资源的属性和环境的属性来动态的进行判断该用户是否对该资源拥有某种操作权限 abac由请求者、被访问客体、具体的操作和环境条件组成,每种元素都是由属性来进行描述 特点 优点 abac模型能够实现更加细粒度的权限管理,在一个场景中,可以通过修改属性信息或者因为环境属性的改变以达到更加细粒度的权限管理 缺点 当匹配规则较多,较为复杂的时候,会影响性能 基于cas

2022-03-07 09:34:22 84

原创 Go语言入门学习

Go语言基础学习以及学习过程中参考的资料(资料的内容可能有重复,都是互相结合着看的) 了解了Go语言基本语法(变量,if,for,switch,基本数据类型,数组,字符串,接口,切片,映射,指针,结构体,包导入和一些关键字的使用),了解GO中的并发,了解了Goroutine协程、Channel通道的概念和用法 Go指南 Go语言编程系列 Go学习笔记 Go中的Channel Go中的C...

2022-03-07 09:31:57 94

原创 Casbin学习笔记

Casbin学习

2022-03-07 09:30:37 1572

原创 MySQL

MySQL关系数据库设计理论函数依赖记A->B为A能决定B,当A确定了,B也就能唯一确定了,此时就是B函数依赖A,多对一可行完全函数依赖,B依赖于集合A中所有的属性,一旦A中少了某个属性,A就不能唯一确定B了部分函数依赖,与完全函数依赖相对,B只依赖于A集合中的某些属性传递函数依赖,只B依赖与A,C依赖于B,则称C传递函数依赖A,此时C和A的关系就是传递函数依赖三大范式第一范式每列的属性不可再分,当然这个是看实际情况,比如年月日,如果觉得没必要再分,就可以认为满足第一范式,如

2022-03-02 16:25:49 401

原创 leetcode算法——二分查找

二分查找单纯的二分查找系列基本思路就是单纯的二分查找,但要注意可能存在的变形情况74. 搜索二维矩阵https://leetcode-cn.com/problems/search-a-2d-matrix/class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int m = matrix.size();

2022-03-02 14:33:06 410

原创 Java基础

Java基础1、Java概述1.1 Java虚拟机——JVMJVM(Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的运行环境,是Java 最具吸引力的特性之一。我们编写的Java代码,都运行在 JVM之上。跨平台:任何软件的运行,都必须要运行在操作系统之上,而我们用Java编写的软件可以运行在任何的操作系统上,这个特性称为Java语言的跨平台特性。该特性是由JVM实现的,我们编写的程序运行在JVM上,而JVM运行在

2022-02-18 21:48:50 495

原创 Go语言基础学习

Go基础1、包1.1 概述每个Go程序都是由包构成的每个.go都要属于一个包程序从main包开始1.2 导入包通过import关键字来导入包自定义的包从go.mod文件所在的那个目录算起导入多个包用()括起来导入包可以指定别名import test "Go-basic/testpakage"后面再使用的时候就用test.*即可若在报名前用一个.,表示直接导入到该代码中,后面使用的时候直接使用变量名,无需使用包名.变量名import . "

2022-02-18 21:38:17 114

原创 强化学习作业

本次实验使用了Dueling DQN来优化了,下面主要更改是utils_model.py中神经网络的结构,以下是更改后代码import torchimport torch.nn as nnimport torch.nn.functional as Fclass Dueling_DQN(nn.Module): def __init__(self, action_dim, device): super(Dueling_DQN, self).__init__() .

2021-11-13 17:30:16 2686

原创 Ubuntu 20.04 /mnt/hgfs/下不显示共享文件夹的处理办法

一、解决不显示共享文件夹apt-get install open-vm-toolssudo vmhgfs-fuse .host:/ /mnt/hgfs但重启之后会失效,需要重新执行vmhgfs-fuse .host:/ /mnt/hgfs二、解决重启后共享文件夹失效sudo vim /etc/fstab在最后添加一行:.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other 0 0以后重启都会自动挂载。...

2021-10-06 19:37:51 10929 7

原创 33. 搜索旋转排序数组

33. 搜索旋转排序数组题目搜索旋转排序数组方法思路二分法先找到一段有序的(可能左边,可能右边,或者两边都有序)然后判断target在不在这段有序数组范围之中在其中,就二分该段数组不在,就二分另一段数组代码class Solution {public: int search(vector<int>& nums, int target) { int ans = -1; int l = 0; int r = n

2021-09-19 10:37:58 42

原创 121. 买卖股票的最佳时机

121. 买卖股票的最佳时机题目买卖股票的最佳时机方法思路贪心一直记录一个当前的最小价格,出现价格高的记录此时卖出获得的利润,保存最大的利润代码class Solution {public: int maxProfit(vector<int>& prices) { int maxV = 0; int minPrice = prices[0]; for (int i = 1; i < prices.size

2021-09-19 09:33:54 43

原创 102. 二叉树的层序遍历

102. 二叉树的层序遍历题目二叉树的层序遍历题目方法题解迭代很常见,这里使用递归方法实现记录下结点所在的层数即可具体见代码代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr

2021-09-19 09:26:03 52

原创 21. 合并两个有序链表

21. 合并两个有序链表题目合并两个有序链表题目方法思路递归或迭代注意递归写法代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * Li

2021-09-18 11:04:18 43

原创 53. 最大子序和

53. 最大子序和题目最大子序和题目变式:返回数组(也就是需要记录最大子序的起始位置)方法思路贪心思想记f(i)为以i位置元素结尾的最大子序和那么f(i) = max{f(i - 1) + nums[i], nums[i]}变式见代码只需要记录子序和的位置代码class Solution {public: int maxSubArray(vector<int>& nums) { // sum记录以i - 1为结尾的最大子序和

2021-09-18 10:55:51 50

原创 141. 环形链表

141. 环形链表题目环形链表题目方法思路快慢指针代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool hasCycle(ListNode *head) {

2021-09-18 10:15:59 50

原创 1. 两数之和

1. 两数之和题目两数之和题目方法思路hashMap哈希表中存数组中的数到索引的映射关系代码class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> hashMap; hashMap[nums[0]] = 0; vector<int> a

2021-09-17 13:35:56 50

原创 15. 三数之和

15. 三数之和题目三数之和题目方法思路排序+三指针+去重代码class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { if (nums.size() <= 1) return {}; vector<vector<int>> ans; // 排序 sort(

2021-09-17 13:24:04 55

原创 912. 排序数组(快排实现)

912. 排序数组(快排实现)题目排序数组方法思路快排随机定义标志代码class Solution {public: void swap(vector<int>& nums, int i, int j) { int t = nums[i]; nums[i] = nums[j]; nums[j] = t; } void randF(vector<int>& nums, int

2021-09-17 11:57:10 42

原创 25. K 个一组翻转链表

25. K 个一组翻转链表题目K 个一组翻转链表题目变式:不足k个也反转,见代码注释方法思路单链表反转的综合运用具体看代码注释代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), n

2021-09-17 11:28:59 37

原创 215. 数组中的第K个最大元素

215. 数组中的第K个最大元素题目215. 数组中的第K个最大元素题目变式题:找出n个元素的无序数组中的中位数,此时k为n / 2方法思路堆(手写)先将前k个数建立一个k个大小的小根堆然后从k位置依次遍历,将堆顶的数替换为较大的数加入到堆中,维持k个元素的小根堆当遍历完后,堆顶元素就为数组中第k个最大的数因为此时堆中保存着整个数组最大的k个数,又是小根堆,所以堆顶即为所求代码class Solution {public: // 交换数 void swap(vec

2021-09-16 13:05:40 37

原创 146. LRU 缓存机制

146. LRU 缓存机制题目146. LRU 缓存机制方法思路双向链表+hashMaphashMap中保存key->node的映射关系链表结点中需要保存key,value和前后指针需要定义虚拟头节点和尾结点,方便插入和删除将当使用一个结点时,需要将该节点加入头部,需要删除时,删除尾部的结点并且删除hashMap中的映射关系,就实现了LRU的机制代码// 双链表结点定义struct Node { // 用来记录key,当删除双链表尾部时,可以通过key删除哈希表中

2021-09-16 12:09:46 86

原创 3. 无重复字符的最长子串

3. 无重复字符的最长子串题目3. 无重复字符的最长子串题目方法思路1. 滑动窗口+hashMaphashMap记录元素和位置的对应信息滑动窗口的右指针不断向右侧扩展hashMap记录区间[l, r)中元素的位置信息如果r扩展时某个元素出现过(在hashMap中存在)并且它的位置在[l, r)中,说明出现重复情况此时需要更新l到出现重复的元素的下一个位置,并且更新该元素的位置为r,还需要判断最大值2. 滑动窗口+桶通过建立一个128大小的数组来存储字符和位置的对应关系代码

2021-09-16 11:57:10 46

原创 206. 反转链表

206. 反转链表题目206. 反转链表题目方法思路递归版 记录子链表的尾结点 将head结点放在尾结点后面代码迭代版/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x)

2021-09-16 10:16:26 45

原创 5. 最长回文子串

5. 最长回文子串题目给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成算法思路中心扩散法进行求解定义一个中心位置p,分别向

2021-09-15 18:00:36 40

原创 297. 二叉树的序列化与反序列化

297. 二叉树的序列化与反序列化基本思路序列化: 通过对二叉树进行搜索(深搜或者广搜)来进行序列化 使用先序遍历来实现序列 当遇到nullptr,将"null"加入序列 并且每个结点之间要用一定的符号进行分隔,这里使用"," 方便后面的反序列化反序列化 先将序列以","分隔成单个元素,用vector<string>来存储 通过先序遍历来建树代码实现/** * Definition for a binary

2021-09-15 10:43:54 56

原创 ubuntu下su: Authentication failure的解决办法

ubuntu下su: Authentication failure的解决办法问题su root后出现Authentication failure解决重新设置一下密码$ sudo passwd rootEnter new UNIX password: Retype new UNIX password: passwd: password updated successfully补充su - root和su root区别共同点:都是获得root权限su root::su root 则

2021-09-14 11:14:58 646

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除