前言:十月才总结,拖延症真的很严重。哈哈。主要是对 3 月到 9 月的一个总结,以及对未来的思考。
做了什么和收获了什么
实习
2021 年 01月 - 2021 年 06 月
- Grafana 监控大盘自动生成脚本
- 链路监控系统
开发了一个针对电商的链路监控系统,底层使用 MySQL 存实体,使用图数据库存实体间的关系。按天去同步电商链路数 据(包括电商所有服务,链路图,强弱依赖等数据),在 Web 端展示给业务和压测的同学。
主要功能:
- 创建链路,用户可以选择入口服务和方法创建链路。
- 查看链路,在 Web 端上渲染这个链路,链路图的每一 个点拥有服务和方法的两个属性。
- 监控,点击链路的点和边,能够跳转 Grafana 的页面看实时监控。
- 导出强弱依赖, 用户可以导出根节点到下游所有节点强弱依赖。
- 链路导出,用户可以选择多个链路进行合并,生成压测的场景链路,导入 字节内部的压测平台。
主要技术难点:
- 使用缓存优先,过期数据兜底,异步回源的缓存策略优化大链路图的查询速度。
- 使用 dfs + 强弱依赖 状态转移表分析入口到所有子节点的强弱依赖。
- 静态分析强弱依赖工具(未完成)
实习主要收获:
- 技术上
1. 掌握 Grafana 的使用
2. 掌握图数据库 Gremlin 的使用
3. 了解 Go 语言本身的指针分析应该怎么写,参考 Go Guru:https://docs.google.com/document/d/1_Y9xCEMj5S-7rv2ooHpZNH15JgRT5iM742gJkw5LtmQ/edit
4. 了解监控、链路、强弱依赖、缓存相关知识
5. 了解并发链表怎么实现 - 思想上
1. 懂得「痛点」多么的重要
2. 懂得「与人好好沟通」多么的重要
3. 懂得「追求极致」多么的重要
4. 懂得「主动」多么的重要
个人项目
- 支持分片的分布式 KV 数据库
项目介绍:
这是 MIT 6.824 的课程设计。根据 Raft 论文,实现 Raft 算法,成功运行测试脚本 3000 次,没有出现日志不一致的问题。根据实现的 Raft 库,实现一个一个客户端一次只能有一个操作(Get、Put、Append)的支持分片的 KV 数据 库。
主要项目难点:
- 实现 Raft 算法(包括选举,日志复制,日志快照)。
- 实现分片的迁移。
- 实现当一个组失去一个分片时,这个分片的清理。
- 实现处理配置更改期间的同时处理客户端请求,不会因为配置更改不去处理没有迁移的分片。
个人项目主要收获:
- 技术上:
- 学习 MapReduce、Raft 相关的实现,对于分布式存储有了入门的理解
秋招
秋招投的公司不多:
-
阿里,对象存储,面试没挂,笔试测评太低挂了,
-
腾讯,对象存储,二面挂,
- 针对我的网盘系统问了特别特别多,也给我整自闭了。
- 被 ieg 捞过一次,二面问了我一个系统设计题:「Tiny URL」。我没接触过,这个问题直接给我整自闭了。让我对自己产生了巨大的怀疑。我配做技术吗?让我自闭了好多好多天。
-
拼多多,,hr 面之后挂
-
字节,基础架构,offer
-
虾皮,基础架构,offer
-
美团,对象存储,offer
其他
- 上了一个健身课:9.4 ~ 10.12。瘦了一点。之后会有一个总结。
- 开车上了高速。
看看上次做的规划有什么没做到
上次规划- 6.824 做完了
- 也学了一些相关的知识,但是缺少训练,没有在字节把那个项目做出来
- 减肥,我之前真的瘦到了 80 以下,但是他妈的,暑假回来这几个月又胖了现在 83.8
一些思考
要写思考了,对我迷茫的九月说再见。
做技术,我配吗?
九月除了健身就是在家打游戏。尤其是在腾讯问的我那个系统设计问题的时候:Tiny URL
。
我复习的时候我没看过系统设计的问题,我回答的真的很烂。很烂很烂。我心中有了一个大大的疑问?做技术,我配吗?连个系统设计的问题都搞不清楚?
大概是这样一个问题:
- 如何设计一个 Tiny URL 系统?
- 在同一秒,如果上千的同一个地址要求映射,几千个用户同时映射 baidu.com,你这个系统会发生什么?每个返回的都不同吗?
- 你需要几个 KV 存储去保存?仅仅保存 A -> baidu.com 吗?要不要保存 baidu.com -> A?。
- 如果返回短地址是相同的。比如 baidu.com 映射成 A,那么在之后的 baidu.com 映射的时候,也返回 A 吗?那就意味着你在生成新的映射的时候还要查一遍数据库,看之前是否有同一个映射。那怎么减少这种开销呢?
- 生成 A 的算法有哪几种?
- 如果是 hash 的话怎么解决碰撞问题?
- 如果用雪花算法的话,怎么解决时间回拨的问题?
害,反正回答的很差。挂掉也是意料之中的事情。
但是回到最初的问题:做技术,我配吗?
我理解做技术就是做基础架构:把底层封装成简单好用的接口,给上层的业务同学去使用。底层比如有:存储,调度。简单来说就是更贴近计算机。
我喜欢计算机的底层原理,虽然没有去读硕士、博士去做研究,但我真的挺喜欢计算机的。我喜欢做系统。
所以不论配不配,我还有机会做下去,那就做下去。纯粹一点,每天进步一 bit。
至于面试失败,我更觉得是自己钻研的不够深入的问题。学习分布式系统还有很长的路要走。与各位朋友共勉。
技术重要还是痛点重要?
在上半年的学习过程中,一个重要的词语出现在我的生活中:痛点。
无论是在实习的过程中还是在日常刷知乎的过程中,我都看到了一个观点:痛点比技术重要。
尤大也是这么说的:
怎么才能有尤雨溪一半强,该怎么学习? - 尤雨溪的回答 - 知乎 https://www.zhihu.com/question/456527668/answer/1858291784
所以之后我要多问问自己:到底有哪些痛点?
焦虑怎么办?
害,焦虑我感觉更多的是来自同辈的压力吧。比如谁谁谁拿了比你更好的 offer。又比如谁谁谁去了更好的学校读书。等等等。
其实自己也不是很差,也能活下去,但是同辈真的太优秀了。
所以焦虑的第一个办法就是:少比较。
多发现自己的问题。多跟自己比较。每天进步一 bit 就是胜利。
第二个办法就是:多向他们学习。
俞敏洪在他的书里面也提到了:他从不嫉妒比他优秀的人,经常会像他们学习。
焦虑的第二个原因就是:嫌弃自己进步的不够快。
李笑来也在他的书里面写了:
做正确的事情,慢点就慢点吧。
我觉得也很有道理,慢点就慢点吧。和诸位朋友一起共勉。
如何提升技术?
计算机世界是公平的,谁花的时间越长,代码写的越多就越牛逼。
我感觉就是四个多:
- 多想痛点
- 多看
- 多设计
- 多写
自己的问题
说了这么多,现在自己主要有以下的问题:
没有做到很靠谱
https://mp.weixin.qq.com/s/9N5DJO5uHot8KCF-FWiNdg。这里有一篇文章写的非常好,我发现自己还是没有做到很靠谱。
专注度不够
不能很专心的做一件事情。脑子里会蹦出各种各样的想法。想去做。但是我已经想到了一个很好的解决办法。
对于分布式系统研究还是不够
技术上的问题,除了四多也没有其他的办法了。
按照唐杰:https://www.zhihu.com/zvideo/1293899524998754304。说的
- 我先从一个比较小的分布式系统开始。做深做透,写本科论文。
- 去实习,思考公司痛点,在导师的帮助下解决这一个痛点。
- 主动思考痛点,主动去设计如何解决这一个痛点。
- 带着别人从一开始走一遍。
接下来的规划
针对自己的问题,做一些规划。
- 从 2021.10.10 开始说的每一句话都要谨慎,少吹牛。不想做的事情直接拒绝,有风险不能做到的事情一定要谨慎再答应,答应的事一定要做到。如有违反捐款min(月收入的百分之十,可用资产的百分之十)。十分特殊的情况下除外。
- 每周开始做一次专注度训练,训练的内容就是只干一件事:读书,写代码,读论文,写文章等等等不能干其他无关的事情。每次训练的时间累加十分钟,从半个小时开始,最高不超过三个小时。下次写总结的时候要看完程度。
- 10 月 - 11 月做完 cmu 15445。
- 减肥,到明年三月维持到 78 公斤,这个必须做到。
- 重新开始写博客,一周两篇。
- 做 Tiny URL 系统设计,代码实现,完成毕业论文。
网友评论