<audio id="audio" title="95 | 程序员面试攻略：实力才是王中王" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/bc/e0/bc7aef138f4ae3a9b003053c9c14f6e0.mp3"></audio>

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

对于后端程序员来说，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里做个程序员，我觉得未来能上到中高层的机会不会多。

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

# 最重要的事

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

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

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

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

# 小结

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

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

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

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

- [面试前的准备](https://time.geekbang.org/column/article/13067)
- [面试中的技巧](https://time.geekbang.org/column/article/13069)
- [面试风格](https://time.geekbang.org/column/article/13191)
- [实力才是王中王](https://time.geekbang.org/column/article/13192)
