刘大,您好。面试的时候面试官经常会问: (1)你们的用户量是多少,项目的QPS是多少,TPS是多少,接口的数据量大概有多大; (2)生产线上的部署情况是否了解,怎么做的前后分离,如何做的集群等。 像这些问题普通开发要怎么去弄清楚呢,比如QPS、TPS、接口数据量这些怎么测出来呢?还有像第二个问题项目架构这些,现在前后分离,系统的架构,比如网关、微服务集群、数据库集群这些普通开发根本接触不到,也看不到那些架构的文档,有专门的人来弄,很是烦恼,像这些问题要怎么解决呢?
一
如果这个项目已经运行多年,一个普通开发想把这些东西搞清楚确实不容易。
我在《这个游戏太难了,我花了15年还没有通关》这篇文章有过这么一句话,可能大家一扫而过,没注意:
“不满足于当前的工作,开始学会从全局,从端到端看待系统,思考问题。”
在平时的工作中就不能把自己定位为一个普通开发人员,只关注自己的一亩三分地,要经常站在比你更高一层,甚至高两层的岗位去思考问题。
如果做到这一点, 这些问题的答案在平时的工作和沟通中应该已经搞定了,找工作面试时那是信手拈来。
那在平时工作中到底怎么去获取这些数据呢?
用户量,QPS 这些数据,生成环境的部署情况,架构师对这些东西肯定门儿清;网关,服务器集群这些东西运维的人肯定也知道, 直接去问行不行?
可能有这么几种情况:
1. 你和他们很熟,人家耐心细致地给你做了解答。
2. 和他们不熟,但是人家为人很好,耐心细致地做了解答。
3. 和他们不熟,人家可能会敷衍你,介绍一点儿皮毛。
第一种情形当然是最好的,第二种发生的可能性不太高,第三种可能性最高,这时候该怎么办?
此时程序员软技能的重要性就体现出来了,之前我在星球画过一个图,叫程序员的铁三角,可以在精华区看到。
你和公司负责系统设计的人有没有建立连接?关系怎么样?比如在老大的会议上有没有认真倾听,主动参与讨论,提出让人印象深刻的问题?有没有在高级技术人员面前分享过技术? 有没有认真地分析项目存在的问题,并且向老大提出切实可行的建议?
有没有和搞运维扯上关系?假设生产环境出了问题,你帮着做了调查, 难道没有顺势多聊聊生产环境的情况?
这些都是建立连接的机会,要抓住。
不要怕,一定要主动, 大家都是人,只要能展示出主动学习的意愿,深入思考的习惯,那些高层的人以及相关的同事会对你印象深刻,并且乐意帮忙的。其实一个人教会了别人一些东西,得到了别人赞赏和尊敬,是有不小的成就感的。
二
有人可能会觉得不屑:这是不是在搞关系,巴结领导?
我给大家讲个小故事。
五六年前,我在一个项目做架构师,组里来了一个90后,经常跑来问各种各样的问题,中午吃饭要跟着我,吃完饭去散步也会跟着我,有时候我确实觉得他有点烦,缠着我问得太多了,于是我告诉他很多问题自己先找下文档,研究一下再问。
这个小伙子是个极端的例子,但是我觉得他挺上进的,从他的提问中我能看出一个新人加入项目面临的问题和困惑,这也是以后应该改进的地方。他对新技术也很热衷,吃饭时和我讨论起来,也会让我学到新的东西。
与此相反,有些人就是经常趴在那里干活,按部就班,一声不吭,反而让我觉得他没什么想法,没什么追求,其实他是有追求,只是没有表达出来,或者只能通过一些偶然的事件上让我认识到他的想法和意愿 -- 这对技术人员来说是吃亏的。
这么说似乎有点残酷,但现实就是如此。在大公司,有完善的上下级沟通制度,上级可以定期地通过一对一会议的方式了解你的想法,给你规划未来的发展。中小公司可能就缺乏这种机制,如果你不主动,不能把自己展示出来,发展的路径就受限了。
三
和领导建立连接,这只是非常初级的一步, 只是一味地去搞好关系,也许一时有所收获,长久肯定得不偿失。
如果这个领导就喜欢那些搞关系的人,那这个部门也没有呆下去的必要了。
关键的步骤是你能给领导、给部门带来价值,这才是职业发展的真正动力。想想看,你提出的想法,开发的工具,做出的项目和产品,能给领导和部门增光,你的进步能不快吗?还需要刻意去搞好关系吗?
如果运气不错,再碰上一个能把蛋糕做大,提供很多上升机会的好领导,你的职业生涯想不起飞都很难啊。到这个时候,你就变成那个掌握用户量、QPS等数据,设计网关、集群的人了。
总结一下:做一个主动的程序员,和同级、上级建立良好的连接,与此同时,想办法给部门、给公司带来价值。