nodejs-0
岗位:nodejs后端 面试官是一个在澳大利亚的老哥,他前端后端都会,面试过程挺舒服的,像是聊家常。
面试官分享: https://serverfault.com/questions/832790/sticky-sessions-with-nginx-proxy
问题:
- 你用nestjs,项目结构是怎样的?你怎么设计代码?
- 用什么反代理?
当时没反应过来,后面才意识到就是用nginx去代理服务器上后端服务程序
- Redis缓存的形式是怎样的?
以哈希值的形式存储
- 如何做鉴权?
基于角色的访问控 制(Role-Based Access Control,RBAC):此方法于用户的角色来进行访问控制。服务端根据用户的角色决定其是否有权限执某些操作。通过在数据库或配置文件中存储用户角色和与其关联的权限,服端可以根据用户的身份验证信息来判断用户是否有权访问某个接口。
Token-Based 身份验证:在该方法中,用户在登录成功后会获得一个特定的令牌(Token),该令牌包含了一些用户识别信息。在每次请求时,用户需要在请求头或参数中携带这个令牌,服务端通过验证令牌的合法性来确定用户的身份和权限。常见的 Token 机制包括 JSON Web Token(JWT)和 OAuth。
统一身份认证(Single Sign-On,SSO):在分布式系统中,SSO 是一种常见的鉴权方式。SSO 允许用户只需登录一次就可以获取对多个关联应用程序或系统的访问权限。用户的认证信息在登录成功后被共享和信任,各个关联系统可以通过验证这些认证信息来确保用户身份和权限。
IP 限制和黑名单:服务端可以通过 IP 地址限制来限制某些接口只允许来自特定 IP 范围的请求访问。同时,也可以通过维护一个黑名单来拦截某些恶意请求。
API 密钥:对于某些需要提供给第三方使用的接口,服务端可以为每个第三方分配一个 API 密钥,并在请求中要求该密钥进行验证。只有通过验证的 API 密钥才能获得访问权限。
- 带状态的服务是怎么保持状态的?(怎么管理会话Session)
会话管理:服务通过会话(Session)来跟踪用户的状态。每当用户进行登录或认
证时,会话会被创建并与用户相关联。服务使用唯一的会话标识来识别用户,并将
用户的状态信息存储在会话中。会话可以存储在服务端的内存中或者持久存储中,
如数据库或缓存中。每次请求到达服务端时,会话标识会随请求一起传递,服务端
可以根据会话标识还原用户的状态。
分布式缓存:服务可以使用分布式缓存来存储和管理状态。在分布式环境中,多个
服务实例可以共享相同的缓存,以确保状态的一致性。常见的分布式缓存解决方案
包括 Redis 和 Memcached。服务将用户的状态数据存储在缓存中,并在需要时
进行读取和更新。
数据库存储:服务可以将用户的状态信息存储在数据库中。数据库作为持久化存储
可以确保状态的持久性和可靠性。每当用户进行操作时,服务会将状态信息写入数
据库,并在需要时从数据库中读取状态信息。
状态同步和共享:在分布式环境中,多个服务实例可能会同时提供相同的服务,为
了保持状态的一致性,这些实例需要通过共享状态来保持同步。常见的方法包括使
用分布式锁、事件订阅和发布、发布/订阅模式等。