论坛首页 Java企业应用论坛

华为面试,就一个问题,月薪2.5w

浏览 15641 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2015-12-09  
没错面试就一个问题,能搞定就上,不能搞定就滚蛋。

问题如下,我已经滚蛋。

多级对多级的授权问题。

举一个例子:电脑里面有很多文件夹,文件夹自然有层级关系(不超过16级),公司里面有很多人,很多部门,类似于也有多层级关系。

关键点:
1. 对文件夹进行授权,可以授权给个人,也可以授权给部门。
2. 个人权限覆盖部门权限。
3. 要求授权能在3秒之内完成。
4. 要求搜索文件时自动判定权限,只展示给个人有权限的文件。大数据情况下(文件和文件夹>3000w,2000<人数<20000,部门<2000)下能够在3秒钟出结果。
5. 不限制硬件。

我的答案:

提供了两种常规思路,都被否定。

1. 授权时将文件夹(因为只对文件夹授权)和对应的部门对应的人统统写入数据库。写入(a*b条数据) 不满足第三个要求。被否。

2. 只写入对应关系(a*1),不满足3s搜索。被否。

注:a 代表a目录和a以下的的所有目录。b代表b部门和已下的所有人。

   发表时间:2015-12-09  
谁能解我心中遗憾????????
0 请登录后投票
   发表时间:2015-12-09  
BTree
0 请登录后投票
   发表时间:2015-12-09  
建立两个数据表
  部门权限(部门ID, URI ) 一个部门可以有多个权限
  个人权限 (用户ID , URI)  一个用户可以有多个权限

假设用户(UA=174)有独立权限
/f1/f11/*
/f3/*
写入数据库:
个人权限 ( 174 , "/f1/f11/*")
个人权限 ( 174 , "/f3/*")
1ms完成授权

用户所有部门(DA=204)有权限
/f1/f14/*
/f3/*
写入数据库:
部门权限 (204 , "/f1/f14/*")
部门权限 (204 , "/f3/*")
1ms完成授权


用户搜索文件,先查找部门权限有权限的文件夹URI,然后查询个独立权限的URI , 合并有包含关系或相同的 URI,
那么可以得出用户所有权限为
/f1/f11/*
/f1/f14/*
/f3/*
搜索文件耗时不随系统总文件数大量增加,对个人文件的搜索影响微小,实际耗时仅与该用户已授权文件总数成正比




 
0 请登录后投票
   发表时间:2015-12-10  
部门表 
(DID等等)
人员表
(UID等等)
部门人员关系表
(RID,DID,UID等等)
部门人员授权表
(RID,permission_code,文件夹路径等等)
permission_code 采用十进制,类似于Linux权限行使
00-无权限,01 读权限,11写权限
0101==》5(代表部门和个人都有读权限)

那么授权的时候,就可以根据实际情况进行与或运算了

授权一次SQL搞定,查询也可以一次SQL搞定。

个人想法,仅供参考。
0 请登录后投票
   发表时间:2015-12-10  
某个面试者成功解答了这个问题,然而依然滚蛋了,然后面试官拿着答案屁颠屁颠跑去领导说,瞧我把这个难题给解决了!yes!
0 请登录后投票
   发表时间:2015-12-10  
二进制权限控制   具体自己 百度
0 请登录后投票
   发表时间:2015-12-10  
初级程序员,看LDAP能否实现
0 请登录后投票
   发表时间:2015-12-10  
设计表如下,想怎么查就怎么查:
机构表
人员机构表
人员
人员文件夹表
文件夹表
机构文件夹表
0 请登录后投票
   发表时间:2015-12-10   最后修改:2015-12-10
用redis存,建几张表:以人为KEY的权限数据、以部门为KEY的权限数据、部门,人员对应关系。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics