irpas技术客

Shipper面经_J.MSh

大大的周 5278

文章参考 知乎文章 简书文章 知乎文章–微服务gateway介绍 知乎文章–gateway实现鉴权和分发 什么是tcc 知乎讨论–怎么理解tcc 掘金文章–kafka怎么不丢消息 kafka怎么不丢消息 知乎文–kafka怎么不丢消息

目录标题 一面项目介绍编程题mysql innodb存储引擎,如果不使用自增主键,而是自定义的值比如一些字符串之类的,会有什么问题?当时的回答事后翻阅资料 建立索引建表有什么需要关注的点?当时的回答 有个组合索引(a,b,c),查询条件是 where a= xxx and b > xxx and c ==xx 问是否用到索引?当时的回答事后翻阅资料为什么只使用到了部分组合索引? 聊聊http 相关的cssrf 网络安全相关的东西?假如用户a的 cookie 被 用户b劫持,服务端怎么防范这种跨站攻击?当时的回答事后翻阅资料 https 是怎么保证连接是安全的?当时的回答事后翻阅资料 有没有使用过消息队列?是在什么场景使用的?当时的回答 订阅kafka消息之后,是怎么保证不丢消息?当时的回答事后翻阅资料 怎么保证业务使用消息队列的时候数据状态是一致的?比如说我的消息队列下发成功了,但是我的业务消费失败了,怎么保证数据状态的一致性?当时的回答事后翻阅资料 php composer 有使用过吗?有自己写一些包吗?怎么去设计实现一个api网关,他包含哪些功能?当时回答事后翻阅资料

一面 项目介绍

这边聊的是一个春节活动扩容流量激增的一个业务背景下的一个方案实现。

编程题

自己实现php array_merge_recursive 函数

mysql innodb存储引擎,如果不使用自增主键,而是自定义的值比如一些字符串之类的,会有什么问题? 当时的回答

聊到了innodb的索引,然后谈到了聚簇索引和非聚簇索引,然后是innodb 的底层实现是 b+树,b+树的结构还有好处等等,最后回到自增主键,因为当时其实没有思路,然后说到紫这个主键用到的地方,聊到了mvcc的 6字节raw_id。最后面试官提醒了一下b+树的结构,想到了如果不是自增ID做主键的话,那么在b+树增加节点的时候,可能会导致树分裂,涉及到页分裂这样的复杂操作会耗费性能

事后翻阅资料

嗯确实是因为b+树的结构。自增主键是指在自增列上定义的主键。自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,索引也更紧凑。

建立索引建表有什么需要关注的点? 当时的回答 根据业务需求出发,从sql 语句找出最经常查询的条件作为索引当然如果是 文本类型 不建议建立索引有个注意点 mysql innnodb 提供了两种时间类型进行存储,一个是 DATETIME 一个是 TIMESTAMP ,timestamp 时间戳,存储从格林威治时间至今的秒数,最大存储到2038年,datetime 是有格式的时间,也是秒级最合适才是最好的,比如学生证号,这种肯定是正整数,那么我就使用unsigned int 来存储。 有个组合索引(a,b,c),查询条件是 where a= xxx and b > xxx and c ==xx 问是否用到索引? 当时的回答

使用到了部分的组合索引 a,b

事后翻阅资料 为什么只使用到了部分组合索引? 聊聊http 相关的cssrf 网络安全相关的东西? 假如用户a的 cookie 被 用户b劫持,服务端怎么防范这种跨站攻击? 当时的回答 谈到了cookie 和session 的区别,而session 更加安全的点也是不容易被劫持。但是被反驳,sessionId 如果被劫持呢?按照最小权限原则,让可供外网访问的文件是有限的,类似linux文件系统的用户权限设置失效时间,让损失减小 事后翻阅资料

csrf是什么

文章里也有介绍防范的方法:

检查http Referer字段添加校验token 其实对于第2点token 这个,如果也被劫持了呢? https 是怎么保证连接是安全的? 当时的回答

我记得是有安全认证这个机制,有第三方背书来保证我的连接是有效的,然后突然想到,有些签名算法是可以保证数据不被篡改比如md5.

事后翻阅资料

参考https是怎么保证连接安全的 https,ca相关介绍

读后理解 通过 公私钥等加密方法 防止数据被篡改,而ca 是算法的统一认证标准

有没有使用过消息队列?是在什么场景使用的? 当时的回答

有,我们主要是在发送日志这块业务上使用消息队列,主要是通过消息队列进行削峰,解藕。

订阅kafka消息之后,是怎么保证不丢消息? 当时的回答

我们在接受kafka消息的时候,会有个确认机制,我们会调用函数告诉kafka我们成功处理完成了,这样kafka 的偏移量才会加加。

事后翻阅资料

参考: 掘金文章–kafka怎么不丢消息 kafka怎么不丢消息 知乎文–kafka怎么不丢消息

怎么保证业务使用消息队列的时候数据状态是一致的?比如说我的消息队列下发成功了,但是我的业务消费失败了,怎么保证数据状态的一致性? 当时的回答

之前的项目有使用tcc来保证这种业务场景的数据一致性。主要是将整个业务流程划分成几个环节,每个环节都需要考虑如果下个环节如果失败之后的处理。

事后翻阅资料

参考: 什么是tcc 知乎讨论–怎么理解tcc

php composer 有使用过吗?有自己写一些包吗? 怎么去设计实现一个api网关,他包含哪些功能? 当时回答 首先需要可以根据业务需求,动态掉配其他服务中台的能力。这个是基本的业务能力需要做安全认证熔断限流 事后翻阅资料

参考 知乎文章–微服务gateway介绍 知乎文章–gateway实现鉴权和分发

业务掉配分发能力用户鉴权等安全认证能力熔断限流服务降级能力统一对外接口,接入方便


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Shipper面经 #b #C #查询条件是 #where #a