引子
2021/01/27 多云

我参加了富途社招面试(视频面试), 期望方向是后端开发
一不小心又是一年过去了, 2020 年真是平凡又不平凡的一年, 在历史上每逢庚子年必不寻常
武汉肺炎, 国际金融恐慌, 中印边境冲突, blm 运动, 中国南方水灾, …
万幸的是, 我和我的朋友们, 亲人们, 平安的熬过了这一年, 做好准备迎接更艰难的辛丑年
本次因为是投的社招岗位, 按照惯例还是把职位介绍贴出来供大家围观:

整体感受
挺年轻一小伙, 而且长得特别像我一个朋友, 故整体感受是比较亲切的(自我感觉良好)
面试
流程
因为是逛论坛发现的招聘, 应该是直接加了一个研发侧的童鞋帮忙直接内推的
所以投完过了几天就来电话约面试了, 流程这块没什么槽点
值得一提的是本次面试没有自我介绍的环节, 开门见山的直接你问我答了, 属实不错
技术细节
首先是社招官方套话, 问目前工作情况, 工作内容, 背书似的应答之
然后开始问几个准备好的面试题

在问第一题的时候面试官疑似有些绷不住了, 可能他看过我以前写的面经, 经常吐槽这种题, 但还是把题目抛给我了
只能表示理解, 毕竟这也是例行公事, 中华文化博大精深, 传承下来的不就是这些八股文的东西么
林林总总的回答了一通, 针对后面的偶现 502 问题, 我稍微回答了一下 cdn 和本身流量大扛不住这两个方向
如何确认原因我直接回答的看日志, 追问如何看日志, 看什么日志, 没答上, 面试官很好心的指点我是用 fpm 的 slowlog

说实话能看到这种题我是很欣慰的, 也算是问到我的老本行上面了, 简单答了几点:
- 验证码
- 图片
- 短信
- reCAPTCHA
- 用户行为判断
- 浏览轨迹
- 行为特征
然后面试官发现我说的这些点完全没办法为他展开追问, 遂补充了一个最常见的 ip 限流, 然后开始展开问怎么实现
我回答要按照实际情况具体判断, 如果是一个基础建设完善的项目可能去负载均衡上面配置一下就可以了
如果是一个新项目, 用框架提供的 rate limit
功能实现也可以
然后面试官追问手写要怎么弄, 回答用缓存服务, 以 ip 作为 key 实现一个计数器
追问有没有其他方法, 肯定有阿只是我不会 ¯\(ツ)/¯

这题没什么槽点, 纯基本功题目, 我说句题外话, 拿这种题跟纯数据结构算法题相比我更倾向于这种题
虽然都是所谓的基本功, 但是这种题目上下文明确, 需求明确, 使用场景合理, 便于更好的做出合适的解答, 而不是单纯的背题
回到题目中, 我直接就是一个 inner join
完事, 然后索引因为我不是很确定就答了一个 uid 索引
然后怎么确认用了什么索引回答的是 explain
, 追问 explain
返回的数据需要关注哪些信息, 没答上
为了挽尊我扯了一个实际环境的实现, 我认为这种类似排行榜的功能实际上对性能要求不会很高, 因为这些数据通常都是缓存一定时间的
这个世界上几乎没有实时更新数据的排行榜, 大多都是 10 分钟甚至 1 小时更新一次数据, 所以性能在这个场景反而不是最需要考虑的
然后面试官也回击我, 说也可以把数量冗余到 user
表, 打了个平手

这题刚发给我面试官就开始抢答了说一个递归就行了, 那行吧, 掏出 IDE 整了一个函数递归实现, 这题就这么快速过了(存在感最低的题)

说实话一眼看到这题就认出来了, 我当年还没毕业走校招的时候, 面试富途就是这道题, 没想到三年过去了还是这道题(关键是我还是不会
其实是不太理解这题的实际场景, 我还是要学习一个, 毕竟 too young
稍微答了一下, 把这些规则定义在一个数组里面然后循环这个数组去计算, 好在面试官也没有太过调难, 就这么过了
最后一道题是直接给的文字描述
求2个有序数组的交集, 第一个数组长度 n, 第二个数组长度 m
1 3 5 7 9
1 3 4 5 6
好家伙算法或许会迟到但绝不会缺席, 不幸中的万幸是, 前面几题答的都算还行, 毕竟第一印象最重要了
简单答了下爆破的解法, 然后尝试用 set 但是面试官不买账, 就不了了之了
之后就是一些口头的问题了:
- 容器跟控制反转
- b+tree (没答上) 哈希 (简单答了下), 追问碰撞怎么解决 (链表)
- fpm 跟 nginx 通讯的几种方式, 优缺点
- https 的加密是对称还是非对称(这题明显就是挖好坑等我跳的, 正确答案是既使用了对称(加密消息体)又使用了非对称(加密对称 key))
- 想不起来了想起来再补 =. =
后记
- 汀桑和憨豆的视频聊天
- 本来准备要50k,结果没唬住,滑了
- 这不是我雨哥吗?
- 依赖注入和控制反转明显不是一回事
- 依赖注入是实现控制反转的技术手段
- 老子比他帅十倍
- 有一说一,我觉得你面挂了