Notion的题库不大,很多题目在某论坛都能找到,但是大部分人发面经从来不发解答,甚至连题目都不发全,我在这里把一些题目的详细解答都写出来,希望对大家有帮助。
这个帖子我来写一道关于Page Permission管理的题目。
题目
Notion的一个Workspace里有一系列的页面(page), 每个页面有一组权限(permissions),还可以有一个父页面。用TypeScript定义的数据结构如下
type Page = {
parent: Page | undefined
permissions: Permission[]
}
权限有两种,一种是单个用户的,另一种是用户组的。如果是用户组权限,那么所有在这个用户组里的用户都有相同的权限。
如果一个页面的没有包含某个用户的权限设置,那么它会继承这个用户在父页面的权限。
如果一个页面的没有包含某个用户的权限设置,但是这个用户在页面包含的用户组权限里,那么这个用户组的权限会覆盖所有父页面关于这个用户的权限。
有一个帮助函数,已经实现好了,本质上就是判断一系列用户组里权限最高的那个。优先级从高到低依次是Edit, Comment, View.
getMostPermissiveRole(roles: PermissionRole[]): PermissionRole
第一部分是写一个函数,给出一个用户和一个页面,计算这个用户最高的权限。
function calculateRoleForUser(userId: string, page: Page): PermissionRole {
// TODO: Not implemented yet.
return "view"
}
第二部分是写一个函数,给出一个页面,返回所有可以查阅(view)这个页面的用户。
function getUserIdsThatCanViewPage(page: Page): Array<string> {
// TODO: Not implemented
return []
}
讨论
这题并不难,主要的挑战是需要自己给出测试样例,尽可能覆盖更多的输入。另外有很多边界情况需要跟面试官讨论清楚,不要盲目开始写代码。我会在评论区一楼给出一个参考的实现。