没错面试就一个问题,能搞定就上,不能搞定就滚蛋。
问题如下,我已经滚蛋。
多级对多级的授权问题。
举一个例子:电脑里面有很多文件夹,文件夹自然有层级关系(不超过16级),公司里面有很多人,很多部门,类似于也有多层级关系。
关键点:
1. 对文件夹进行授权,可以授权给个人,也可以授权给部门。
2. 个人权限覆盖部门权限。
3. 要求授权能在3秒之内完成。
4. 要求搜索文件时自动判定权限,只展示给个人有权限的文件。大数据情况下(文件和文件夹>3000w,2000<人数<20000,部门<2000)下能够在3秒钟出结果。
5. 不限制硬件。
我的答案:
提供了两种常规思路,都被否定。
1. 授权时将文件夹(因为只对文件夹授权)和对应的部门对应的人统统写入数据库。写入(a*b条数据) 不满足第三个要求。被否。
2. 只写入对应关系(a*1),不满足3s搜索。被否。
注:a 代表a目录和a以下的的所有目录。b代表b部门和已下的所有人。
原帖 http://www.iteye.com/topic/1142575
看上去很厉害的样子。
给所有文件和文件夹唯一ID,建立文件系统索引树,项目值包括 子文件,子文件夹,当前ID
建立2个权限表,硬件条件足够可使用建立内存索引,部门权限,个人权限,包含ID和文件树路径
反正这个题目重点还是索引。。最大的索引情况就是在内存中建立3个索引树,对外提供一个查询接口,参数为路径描述(从权限中获得),返回一个目录子树,其实人家题目已经说了不限制硬件条件了。各种索引优化方式都上就得了。
我就说下思路吧
1. 授权时将文件夹(因为只对文件夹授权)和对应的部门对应的人统统写入数据库。写入(a*b条数据) 不满足第三个要求。被否。
这个肯定是错的,这样写的话,再好的数据库服务器也得挂。
2. 只写入对应关系(a*1),不满足3s搜索。被否。
这个其实也没办法保证满足第3点要求,至于能不能满足3S搜索,关键点不在权限的写入。
写入权限,最好就是只写一条数据,写a条数据都是不太好的。
3、搜索3S这个要求要达到的话,我目前考虑的就是数据表要设计好。
要在数据库中有一个文件夹的对应树数据表。
这个题目如果我出的话,我只是要考你的知识面和思考能力。所以答1肯定不行,答2的话稍微好点,当然也是不行的。
至于真正的答案,反而没那么重要了。
我的解决方案:
1、首先不考虑查询用时,先解决问题,再说性能优化的事情
2、标准的权限管理:用户-->角色-->资源
3、其中,用户-->用户组,角色-->角色组,资源-->资源组,都是树形结构
4、资源可以直接赋给角色,也可以赋给用户,用户的优先级较高
对应于那个帖子里的问题:
1、部门可以看做用户组也可以看做角色,为了性能,可以忽略角色的存在
2、文件、文件夹无非就是资源的一种特殊形态
3、整个结构,没有什么特别的地方。或许,性能有问题,但,逻辑关系就这些,仅此而已