site logo

Keep doing what you want, never give up.

招聘会
文章配图

大厂面试 - 贝壳:JWT是什么?

JWT(JSON Web Token)是一种用于在网络环境中进行安全信息传递的开放标准 完整的JWT由三部分组成,其结构可以表示为xxxxxx.yyyyyy.zzzzzz格式。 头部(Header): 通常包含令牌的类型和加密算法; 载荷(Papload): 包含自定义的数据如用户信息,权限等; 签名(Signature): 作用是用来验证消息的完整性和真实性,防止消息被篡改; JWT是无状态的,服务器不需要为其保存会话信息,从而减轻了服务器的存储压力,但同时也意味着一旦泄露任何请求都会被允许,而常用的解决方法是给JWT设置不固定的过期时间,强制客户端过期重新获取。 JWT另一个特点是,一旦生成后在其过期前都不可再修改其有效期。 它的主要应用场景包括用户身份验证和授权,用户在登录成功后获取JWT后,后续的所有请求都需要携带该JWT向服务器请求资源,服务器则可以根据这个JWT来验证用户的有效性。
文章配图

大厂面试 - 贝壳:MySQL索引的最左前缀原则

1、MySQL索引的最左前缀原则是什么意思?如果有查询条件为 a > 1 and b = 1 and c = 1,请问这个查询能命中MySQL索引吗? 索引的最左前缀原则是指查询语句要使用索引的条件需要满足从关联索引的最左侧开始且需要连续匹配。 比如,如果创建联合索引的顺序是(a, b, c)则上面的查询条件就可以命中索引,但如果创建y索引的顺序是(b,a, c)或者其他顺序,则上面的查询语句则无法使用索引。 2、使用explain工具分析慢查询的时候需要关注哪些信息? 首先关注“type”项,如改项显示为“ALL”则意味着查询使用了全标扫描,这是最差的情况,必须进行优化。如果改项的值为“index”或“range”等则相对较好。 还要注意“row”这项,它代表预计扫描的行数,如果改值较大,即使查询使用到了索引也需要进行优化。 此外,“possible_keys”和“key”这两项也非常重要,前者表示可能使用到的索引,后者表示查询实际使用的索引。如果改项值为空则意味着未使用索引,需要立即优化。
文章配图

MongoDB聚合查询aggregate之group分组

MongoDB中并没有类似MySQL关系型数据库中Left Join这种连表查询,但是它提供了一个称为aggregate的聚合管道查询语法来让我们实现类似MySQL那样的关联查询。其大致思路就是将多个查询语句按顺序逐一执行,然后汇总结果。 假设我们有两个集合,一个用户集合用来存放用户信息名字叫user,另外一个集合名叫photo用来存放用户的照片信息。 用户集合user ------------------------- | uid | name | |-----------|-----------| | 100000 | A | | 100001 | B | | 100002 | C | ------------------------- 照片集合photo ----------------------------- | uid | photo | |-----------|---------------| | 100000 | A的照片一 | | 100001 | B的照片一 | | 100000 | A的照片二 | | 100002 | C的照片一 | ----------------------------- 现在的需求是查出user表中所有用户的照片集合,相同用户的照片需要合并在一个数组中: 查询结果 ------------------------------------------------- | uid | name | photo | |-----------|---------------|-------------------| | 100000 | A | A的照片一,A的照片二 | | 100001 | B | B的照片一 | | 100002 | C | C的照片一 | ------------------------------------------------- 这时我们就可以联合aggregate语句的$lookup、$unwind、 $project以及$group语法得出想要的结果,查询语句如下: