我是2014年毕业的,到现在已经工作6年了,现在年薪已经超过40W了。所以我回答这个问题,应该算是比较有发言权,可以代表一部分人的情况。据我所知,达到40W年薪有两种可能:一种是应届生拿到大厂(BAT)的SPOffer,另一种是工作年限更长(三年以上)年)。第一种情况,拿到SPOffer的人只是少数,不然怎么能叫SPOffer。拿到SPOffer的前提一定是你非常非常优秀,而且有可能毕业于好学校。我是中山大学硕士毕业的同学。几年前,我拿到了华为的SPOffer,月薪18K。算上5个月年终,年薪30W左右。所以应届生拿到40W的年薪还是挺难的,而且还需要好运气。第二种情况是和楼主一样,工作年限更长,一路升级打怪,年薪逐渐涨到40万。下面说说达到40W应该达到什么水平。之前写过一篇文章:浅谈阿里面试的三个层次(https://mp.weixin.qq.com/s/lMkaBQaHHCHaLsFPz4UQew)。在这篇文章中,我把阿里面试应聘者的能力分为三个层次:基础知识、项目经验、项目深度。基础知识可以拿人40W年薪,Java基础知识一定要熟悉。对于Java开发岗位,这些知识点包括但不限于:集合HashMap的原理,Hashtable和ConcurrentHashMap的区别?Java线程池核心属性及处理流程Java并发包传递原理、Synchronized关键字、锁线程生命周期JVM类加载机制JVM内存模型JVM生成及垃圾回收机制SpringBean容器生命周期SpringAOP原理Dubbo请求流程和原理数据库SQL优化、数据库索引、索引原理……看到这么多知识点,一下子惊呆了。什么时候才能看到这么多?但是后来我想通了。其实你不需要什么都懂,但是你需要了解大部分的知识点,而且在大部分的知识点中,你需要对其中的一些知识点理解的很深。达到这个水平,基本就可以通过考试了。关于这块知识,我们其实需要把它系统化,形成自己的知识体系。去年工作五周年之际,写了一篇文章梳理自己目前的知识体系:谈谈我的知识体系。这篇文章基本上总结了我年薪40W掌握了哪些知识点。可能不是很深入,但是大部分都用过,有一定的了解。这块的基础知识,至少需要掌握的是:集合源码并发集合源码并发包源码阻塞队列源码线程池源码JVM原理基本上就是这些东西,面试的时候一定要问。回答不出来就别说年薪40W了,连30W的机会都没有。项目经验如果你掌握了以上基础知识,但是没有很好的项目经验,大概率拿不到40W的年薪。这里所说的好看的项目经验,是指具有高复杂度和一定并发量的系统开发设计经验。复杂度高,可以简单理解为项目中消息队列、缓存、微服务的使用,这些是最基础的。复杂一点,可以用netty、ElasticSearch、Canal、Otter等,越复杂越能在一定程度上说明你的技术实力。除了使用这些比较复杂的框架之外,你还需要知道为什么要使用这些框架,它们解决了什么问题,应用在哪些场景中,它们的优缺点是什么。如果你只是在项目里打酱油,从来没有用过框架,也不知道为什么要用,那么这个项目对你来说是没有意义的。比如我做了一个“会员信息搜索重构项目”,使用ElasticSearch+Canal实现了千万级别的实时搜索。另一个项目是IM即时通讯的开发改造,使用RocketMQ+Netty来实现。如果你有过这样的项目经历,能够清楚地理解项目涉及的框架和技术,那你就可以认为你的项目经历没有问题。项目深度如果你有以上的项目经验,你对整个项目的了解基本是全面的,应用层面的问题基本不会困扰你。但是,在“项目思维深度”的考核中,不仅仅是应用层面的问题。或者以我做过的一个搜索项目为例,其中开源框架Canal暂时没有实现集群功能,所以面试官问:这个项目如何改造实现Canal的集群功能?这时候,你会发现自己很迷茫,因为你从来没有想过这个问题。你所有的工作都在思考如何使用开源框架,而没有进一步思考这些开源框架好不好,还有哪些地方可以改进。所以,这个层面考核的是你对开源框架的思考深度,这些框架好不好,什么好,什么不好,还有哪些可以改进。“项目思维深度”的考核也发生在第三轮和第四轮技??术面试中。在这个层面上,你不仅需要对项目本身有足够深入的了解,还要跳出项目本身,去思考开源框架本身的问题。综上所述,在我的理解中,一个年薪40W的人,应该能够独立完成一个复杂系统的设计,并作为核心开发团队,带领团队完成系统的落地和交付。在我公司,我们有高级工程师(P5)和高级工程师(P6)。他们之间的一个重要区别是他们是否可以独立完成一个复杂的项目。如果你能独立完成一个复杂的项目,那么你就有资格升级到P6,而我们公司的P6薪资可以达到年薪40万。如果只是P5,那么大概也就25万-30万吧。但要成为P6,不仅要能够独立完成复杂的项目,还需要你在沟通能力、表达能力、项目管理等方面达到一定的水平。