95 | 程序员面试攻略:实力才是王中王

你好,我是陈皓,网名左耳朵耗子。

之前的《程序员练级攻略》系列文章,对于面试成功与否是非常重要的,但是因为内容太多,所以,你可能会迷失。这里,我再补充一下相关的知识。

对于后端程序员来说,C、C++和Java是一定要学好的,TCP网络和Linux系统编程也是需要学好的。《练级攻略》中那些资料如果你能全部吃透和掌握的话(也就是“编程语言”和“系统知识”这两个章节),那么,中国的所有公司你都可以进,包括BAT,职位可以面到一级的高级工程师。年薪至少30万左右。

如果你要更为底层的话,那么需要掌握高手篇中的“Linux系统、内存和网络”、“异步I/O”、“Lock-Free”,以及“Java的底层知识”,把里面的那些资料都看懂学透,那么,你可以面过年薪50万的职位。这是没有问题的。

如果你要往架构师方面发展,一方面你需要有足够多的经验,以及相关的项目实施经验,这需要在相当的大公司里做过相应的项目和架构。再辅助以高手篇中的分布式架构的三篇:入门、经典图书和论文、工程设计,以及微服务和容器化这些内容,我保证你至少可以拿到年薪60万以上的工作。

前端的东西如果要学习好的话,并不难。攻略中也有三篇和前端相关的文章,那三篇文章学习个3-5年,你也是一个非常厉害的前端工程师了,能找到30万- 50万的工作应该没什么问题。只不过,如果你还想更好的话,你需要走两个方向,一个是设计(不是软件设计,而是UI/UX设计),另一个是后端架构技术。

你一定要明白,真正解决用户的问题的不是前端技术,而且是后端的业务逻辑和数据计算。前端并不是计算机的本质,计算机提升社会运作效率并不是靠前端完成的,而是靠自动化来完成的,前端只是辅助。

另外,如果你今天还在做支持性的工作,那么你要赶快转到有产出性的工作上去,不然的话,你未来也危险了。比如像测试、运维、项目管理等,这些都是支持性的工作。我个人建议你转到开发工作上,比如开发测试工具,开发运维系统和工具,开发项目管理软件……只有到了开发上,你才会有更好的发展空间。

多唠叨一句,学习不要图快,要学会找到掌握知识的方法,而不是死记硬背。学习要细嚼慢咽,一天吃不成个胖子。

面试的训练

对面试来说,比较好的训练就是要经常出去面试,所以还是应该隔三岔五就出去面试一下的。一方面可以攒攒经验值,可以训练一下自己的语言表达能力和应对各种问题的回答。另一方面更重要,可以了解一下目前市场的需求(技术、技能和业务),同时了解一下自己的身价。

我记得以前我在一家公司埋头干了4年不问外界的事。有一天,被朋友推荐到某公司,去面了一把。那家公司问我要多少钱,我说,8千一个月。对方说,你要少了,你这样的能力,市场价至少一万五了(我在当时所在的公司才拿6千)。所以,我开始更新简历,面了好些公司,发现我的薪资、岗位以及我的能力,果然与市场价严重不匹配……

你之所以会紧张,会不知所措,会感到不适,会觉得难,大多数情况下是因为你不熟悉这个环境,你对这个环境还很陌生。只要你面得多了,你就会熟悉这个环境,你也就能驾轻就熟了。“老司机”之所以能成为“老司机”,还不是因为经常跟女孩子聊天交谈,时间长了,就成老司机了。

另外,对于语言组织的训练,除了多多与人交流,还有就是你平时需要多看多写,喜欢看书和写作的人通常在语言表达能力方面也不会差,而反之则通常会比较差。所以,写blog,表达自己的想法是很重要的。

跳槽和升职

有人说,跳槽是升职加薪最好的手段,这么说也有一定道理,因为只有用人单位在竞争你,你的职位和薪资才能提得上去。如果你想靠公司的良心,这是比较难的,除非你非常非常出色。很多人都是会以跳槽来作为升职或加薪的手段的。

我认为,对于一个人来说,适当的跳槽还是很有必要的。有些时候,在一个地方做得再好,也要出去看看外面的世界是什么样的。一方面,有了对比后,你才会更明白自己要什么,另一方面,想把握趋势和行业动态,也需要你跳槽。只是跳槽不宜太频繁,最好不要低于两年换一次,而且最好承前启后,不要有太多的过渡。

如果你想在一家公司内从普通员工升职到公司高管这个可能还是有点难的,所以,通过跳槽的方式来达到这一目标还是可能的。但是,这需要一定的策略。比如,你需要先去世界顶尖公司,在里面做到高级技术人员的级别,甚至可能你先要去读书深造。总之,你需要先进入国外一流公司(比如微软),然后,在里面升1或2级,然后可以跳到另一家相当的公司(比如谷歌或亚马逊)。

此时,你的简历会非常亮眼了,只要你的级别是高级程序员(对应于亚马逊的SDE3),你会成为国内各大公司追捧的人才,你回国到BAT这样的公司里做个高级管理人员是没有任何问题的。然而,如果你一开始不是去这些顶尖公司,而是直接到BAT里做个程序员,我觉得未来能上到中高层的机会不会多。

总之,如果你决定在职场大展宏图的话,那么在年轻的时候,让自己的简历变得越漂亮越好。最好是先去国外,然后在需要职业成长的时候,被国内公司重金请回来,会比直接在国内的公司里发展要好一些。这是我个人觉得比较好的方式。

最重要的事

程序员面试中,最重要的事还是自己技术方面的能力,国内会注重你的项目经验,国外会注重你的基础知识、项目经验、解题思路,以及软件设计能力。所以,要努力提高自己的这些技术技能和见解。

在《程序员练级攻略》这一系列文章中,除了一个大型的地图,以及很多技术的学习资料和资源外,我也给出了很多公司的最佳实践和解题思路。就算你没有实际工作经验,通过思考和研究这些前人的经验,站在巨人的肩膀上,会为你开启更大的舞台。当你去到这些大公司后,就可以把你学习到的这些知识立马用上。

当然,计算机软件开发是一件动手能力很强的事,所以,你需要不断地动手。好在这个世界有开源项目,加入开源项目会比加入一个公司的门槛要低得多。你完全可以到开源项目中攒经验,这可能会比在工作中攒到的经验更多。

总之,我想说的是,要应付并通过面试并不难,但是,千万不要应付你的人生,你学技术不是用来面试的,它至少来说是你谋生的技能,要尊重自己的谋生技能,说不定,哪天你还要用这些技能造福社会、改变世界的。

小结

总结一下今天的内容。《程序员练级攻略》系列文章,对于面试成功与否是非常重要的,但内容太多,所以在本文一开始,我总结概述了其中的重点内容,方便你能提纲挈领地掌握关键知识点。

随后,我强调要想取得良好的面试效果,也是需要多加练习的,隔三岔五就出去面试一下,积累面试经验的同时,也了解一下市场行情。然后探讨一个有些敏感的话题“跳槽和加薪”,我认为,先去国外,然后在需要职业成长的时候,被国内公司重金请回来,会比直接在国内的公司里发展要好一些。

最后分享的是程序员面试过程中最重要的事:技术能力,国内会注重你的项目经验,国外会注重你的基础知识、项目经验、解题思路,以及软件设计能力。所以,要努力提高自己的技术技能和见解。但是你要记住,学技术不是用来面试的,它只是你谋生的技能,要尊重自己的谋生技能。

下面是《程序员面试攻略》系列文章的目录。

精选留言

  • 沐风

    2018-08-26 11:23:18

    作为一个33的人想要从攻略的零基础学起
  • 铁憨憨

    2018-08-23 09:02:54

    老师今天干货很足,说到心坎上了,很有转后端的冲动,嘻嘻
    作者回复

    我个人的真实观点是--编程是不分前后端的!我只这句话的上下是刺激下前端,鼓励前端学后端,而不是用node吃遍天……😜😜😘😂

    2018-08-24 00:00:02

  • Trree

    2018-08-23 08:41:42

    已经工作三年的工程师,在一般的互联网公司,出国难度太大了。首先英语要过关,算法等基础知识要下重功夫学习,任重而道远啊。
    作者回复

    相信我不难的。首先在意识上别怕。

    2018-08-24 00:00:50

  • 2018-09-24 23:38:02

    学技术不是用来面试的,它只是你谋生的技能,要尊重自己的谋生技能。一一说的好
  • 小悟

    2018-08-23 08:05:23

    还是外来的和尚会念经啊,所以本地和尚也只能是和尚
  • 欧阳

    2018-08-23 08:20:24

    恰巧是bat程序员,看来没希望冲高管咯。
    作者回复

    看看你们公司的高管是怎么来的?分析分析,看看比例高的是哪种?是业绩好升上去的,还是初始团队,是提拨的,还是外面请的……

    2018-08-24 00:03:33

  • 我是辉

    2018-08-23 07:13:59

    哈哈,头排位置定下了,今天内容不多,有总结性
  • 小薛薛

    2018-08-23 08:35:12

    感觉自己丧失了一种静下来的能力,急功近利。。唉
  • 2018-08-23 08:07:57

    你好,关于前端的两个方向中的后端架构,这个是否跟系统架构师或者后端架构师冲突了,或者老师说的是大前端(全栈)?并且以后端为基础来深刻前端架构设计?
    作者回复

    把自己变成后端架构师不好么?

    2018-08-26 12:27:19

  • 郭新鹏

    2018-09-06 20:09:48

    工作三年,小公司1年,大公司(500人研发)2年。
    同事都走的差不多了,也想着跳槽涨涨薪水。薪水比市场低30%左右。

    但是之前听耗子叔的分享,在一家公司干了七八年。长技术才是最根本的,经理也讲频繁换工作不太好。

    但是想找Google Facebook 微软等公司的工作。
  • SEAN

    2018-08-23 08:04:03

    作为华人 美国一线企业的中层也不是那么好混的了,而中低层的在BAT已经不怎么值钱了……
  • 刘強

    2018-08-27 11:03:50

    我记得,在ruby元编程这本书中,最后大师说,没有什么元编程,有的只是编程而已。对于前端和后端也是如此,没什么本质区别,只有一件事,编程。
  • 2018-08-23 09:12:45

    也就是“编程语言”和“系统知识”这两个章节
    为什么没有提到理论学科 相对来说优先级不高吗
    作者回复

    面试官都不一定吃透了……面试官好动手的……嘿嘿

    2018-08-23 23:59:30

  • 王宁

    2018-08-23 08:11:21

    老司机的干货,666
  • suhui

    2018-08-30 12:46:31

    耗子叔能说下有多个offer的情况下如何选择的问题吗?内部有熟人还好说,网络上的找到的公司介绍感觉都没有那么客观要么赞要么黑,还请耗子叔说下您的看法。
    作者回复

    我在知乎上有个回答,可能能回答你的问题。https://www.zhihu.com/question/55397210/answer/144568646

    2018-08-30 15:44:59

  • 浩秦

    2018-08-23 08:02:40

    梦想就在面前,加油💪
  • 程序员小跃

    2019-12-17 16:59:11

    我是从Android到Java后端的,也切身体会到这个转变对自己的帮助。以前Android等接口的时代过去了,自己后端会的话,完全可以一起调试完,然后把更好的程序提供给前端,这样还能省去沟通问题,真的是很方便。

    不过,每个人都有自己的方式,也都有自己的职业道路,现在公司里很多都是专职岗位,所以,把自己擅长的事情做好,再去考虑其他进阶的事情。现有一,再有二。
  • 雪驹

    2018-08-26 14:18:50

    耗子哥,对于中间件要学到什么地步才算熟。非得把源码读完才算吗?
  • data

    2018-08-23 08:16:14

    老师说完结了……感觉看不够嘿嘿
  • 迷宫中的将军

    2021-01-27 15:50:51

    复杂的是业务逻辑,感觉和前端后端没有关系。
    我觉得不能因为后端技术涉及的知识面广,更难理解,而觉得前端不重要。