@
backfrw 我也不是啥前辈,工作也才 1 年多,也是准备从成都往北京跳的。
我回答你的问题:
1 我定义的知识体系,就是你从事的这个领域,你能从头到尾的理解整个流程。能把各个层的东西融汇贯通并加以扩展。举个例子:做 web 后端开发(这里含领域知识,比如支付,直播,搜索),以浏览器为分界线,
http 层面要懂(各种 header,code 的意义和使用,以及遇到问题能否判定是这个层出了问题)
接着 tcp 要懂(遇到网络异常能否判定是不是传输层面出问题了,比如服务器 timewait 状态很多导致链接失败是怎么回事?),可以写个 io 多路复用的程序可以吗(比如用 netty 写个多线程异步调用的 client 去做某些业务能做到吗?)
负载均衡怎么做的?(了解 nginx 原理吗,具体怎么配置?需要自己写第三方的负载均衡模块吗?)
然后框架原理,比如你用某个框架,从它 parse 出 http 包开始,到你的 controller 层是怎么个情况,出 bug 了能定位问题吗?能直接看源码找到问题吗?
然后到框架的 orm 大概是什么原理,怎么映射到后端的数据库,如果需要支持某个 database 但是你这个框架又没有合适的开源组件,能自己搞定吗?数据库客户端的链接池特点是什么,对开发的影响。各种 filter/hook 是怎么实现的,怎么应用?出问题能定位吗?
然后到数据层面,先是缓存,redis 的基本原理要懂,如果有周期性的卡顿能通过日志分析出原因吗(这里还考验逻辑推理能力),主从有什么坑,集群原理,有什么坑。最关键的,怎么针对业务涉及一套合适的 cache 体系(这个挺难,没实战积累感觉和经验很难做到),还需要对各种命令的复杂度有所了解(这也附带要求理解内部数据结构)
然后到 db,这种一般源码太复杂了(比如 mysql innodb ),所以看看文章了解基本原理,比如 insert 并发怎么导致了一个死锁?(要求对 mysql 加锁机制非常熟悉,这个还需要去查资料) update 语句会锁哪些地方(反过来思考索引)查询怎么走索引( selectivity 怎么样?),排序 /分组怎么走索引(能利用索引的两种优化机制吗?)自带分区表能不能业务中用上,有哪些坑?应该怎么分表(冷热数据对缓存友好,但是有可能业务中不方便带分区参数) column 类型的选择,text/blob 的存储模型(影响取数据),int,mediumint,smallint,bigint 可以选哪个?各种参数(如果走阿里云一般默认的就很好了)主从,集群有什么坑?(这个我目前也不懂)出问题了怎么迅速恢复数据(至少恢复大致数据然后靠应用层逻辑校对)
你搞统计还得设计一手好 sql,数据量大了就要上各种大数据工具。
再有 cdn,具体的 api 熟悉吗,上传不同类型数据有什么坑(比如有些上传了不是马上见效),怎么加速?
还有应用内,项目用的什么 rpc,原理了解吗(网络,线程模型,编解码,重试,负载均衡),有哪些功能,需要自己 hack 能做到稳定可用吗?各种中间件( mq,log,proxy 了解吗?我也不了解哈哈)
语言,best practice 了解吗?(知道这样做的原因吗?,知道这样做的场景吗?)各种内置的数据结构原理了解吗?并发呢?(各种并发模型,这个我也不太懂)各种坑就不说了。调优也是有可能的。
然后就是算法和数据结构,这个往往涉及到一些比较复杂的业务(硬骨头)时候可能用到,比如让你做成给产品可配置化的界面,让它们设定任意树状结构的统计分类,你怎么弄?现在需求改了,你需要合并两颗树(相同路径合并,同时有复杂的业务条件限制),怎么弄?
数据量太大,能不能搞个 bitmap 代替 set ?放 redis 还是直接放内存里面( db 做持久化?)
有时候可能需要来个桶排序你能想到吗?如果需要在内存里面做可持久化的数据结构怎么弄?比如 bk 树,avl 树 /rb 树 /skiplist (现在有 redis 可以替代了),怎么序列化?(自带的序列化机制原理?慢吗?可以优化吗?开源的原理?性能够用吗?)
万一需要动态规划 /搜索算法来算个最优解(这个往往出现在游戏里面,或者一些调度问题)能想到吗?字符串匹配怎么做?能针对业务优化吗?(往往内存放不下)
最后也是很重要的领域知识,这个只有去对应的项目才能积累了(直播,支付,ai 底层平台开发,中间件开发等等)
还有系统架构能力,这个挺吃天赋和经验的,我也不懂,只能多反思自己的代码,多看看别人的设计,多想想能不能迁移 /抄袭这些设计。
逻辑思维能力,这个感觉比较难提升,但是通过熟悉业务和领域知识应该可以一定程度弥补
以上就是近几年(初级到中级)自己进步的思路,但是具体来做,肯定还是业务优先,先把业务搞熟悉,做到按时按质量交付,然后考虑怎么写更好,然后就有机会做更核心的,理论实践结合,下班可以花时间自己造轮子玩玩。