How to get a monthly salary of more than 20K for Java developers in Beijing, Shanghai and Guangzhou? What do you need to know?

Some people answered that this can only be obtained by engineers of large enterprises or Internet companies. Maybe yes, it is unlikely that small companies or non-Internet companies who get 20,000 are code farmers, and they should have been transferred to management. There are also regional issues, which are not within my scope of consideration, because other than Beijing, Shanghai, Guangzhou, Shenzhen and Hangzhou, it is difficult to reach other places.

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

Some people mentioned that this level is more than 2w. In fact, the salary is related to the interview performance and other comprehensive levels. For example, if you are 985, top10, or a graduate degree, you may also know a little about node and big data, etc., or The ability to express is strong, and hitting the interviewer's pain point will add points.


If you reach the level I said, the starting salary is 2w, and there are other excellent performances that will add points on this basis. But pure JAVA treatment is more consistent. And SSH is really not something I want to hack. 2w-level interviews rarely ask about SSH knowledge. If you want to ask, you also ask about the architecture level and design patterns. For example, how mybatis manages sessions and caches. What are the design patterns you are familiar with in spring, and how do you understand and apply them.


First of all, a monthly salary of 20,000 is too common in BAT, generally for senior engineers and senior engineers. In Ali it is around p6~p7, in Baidu it is around t5, Tencent is around t2-3, JD.com is around t3-1, Meituan is around p6, I don’t know about others. This level is their main code farmer level, with a lot of overtime, and can solve most problems, but the overall system architecture ability and the ability to deeply analyze bottlenecks still need to be cultivated.


1. The skill tree that must be mastered


First, the foundation


For example, if you have an in-depth understanding of collection classes, concurrent packages, IO/NIO, JVM, memory model, generics, exceptions, reflection, etc., it is best to read the source code to understand the underlying design.


For example, the general interview will ask about ConcurrentHashMap, CopyOnWrite, thread pool, CAS, AQS, virtual machine optimization and other knowledge points, because these are absolutely important to Internet enterprises. And most people can't pass this level, and they make a fuss and say that these are useless, why do they have to interview.


For example, when using the thread pool, because the unbounded queue is used, the inner layer will soar when the remote service is abnormal. How to solve it? If you don't even know the thread pool, how can you play? For another example, due to the misunderstanding of ThreadLocal, the use of it for thread safety control has resulted in failure to achieve true thread safety. Therefore, as a JAVA programmer with 20,000 yuan, it is necessary to have this foundation.


Second, you need to have a comprehensive knowledge of Internet technology


Starting from the bottom, you must at least have an in-depth knowledge of mysql, redis, mongodb, nginx, tomcat, rpc, jms, etc. You have to ask how much you need to know, and I can give you a big one. First of all, for MySQL, you need to know the common parameter settings, how to choose the storage engine, and also need to know the common indexing engine and know how to choose.


Know how to design tables, how to optimize SQL, and how to tune according to the execution plan. For advanced ones, you need to do the design and optimization of sub-databases and sub-tables. Generally, the databases of Internet companies are separated from reading and writing, and they are also split vertically and horizontally, so there is also an element of experience in this. Then redis and mongodb all need to understand the principle and need to adjust the parameters, and nginx and tomcat are almost required for JAVA Internet. In fact, it is related to Alibaba's technology stack selection.


As for rpc-related things, there are many network protocols, serialization technologies, SOA, etc., you must have a deep understanding. Now the widely used rpc framework is dubbo in China, and you can search by yourself. As for the JMS-related at least you need to understand the principle. Generally speaking, those who are not specialized in developing middleware systems and support systems do not need to understand too many details. The main ones commonly used by domestic enterprises are activeMQ and kafka. What you can say to me has been researched more deeply. Ali p7 is not too big of a problem. Of course, this also depends on your interview performance in terms of architecture ability.


Third, programming ability, programming idea, algorithm ability, architecture ability


First of all, I think the requirements of 2W programmers on the algorithm are still relatively low, and the most advanced ones are red-black trees, but the basic algorithms for sorting and querying are good. Programming thinking is a must. If you ask you about AOP and IOC, you should at least be clear. Design patterns do not say that each of them has been used, but you can understand a few.


编程能力这个我觉得不好去评价,但是拿一个2000W用户根据姓名年龄排序这种题目也能信手拈来。最后就是架构能力,这种不是说要你设计个多牛逼多高并发的系统,起码让你做一个秒杀系统,防重请求的设计能快速搞定而没有坑吧。


这以上就是我说得2w水准,如果你运气好,面试表现好,3w+也有可能哦(ಡωಡ)。


二、名企招聘要求分析


来来来,我们上招聘网站实际找几个月薪超过2w的JD来看下。


1、阿里巴巴


640?wx_fmt=jpeg


分析:


1. “NIO”->老老实实研究一下netty的源码和原理,保证他问不倒你;“类加载原理”->老生常谈了,记得一个delegate,一个classloader如何造成内存泄漏就行;“动态代理、CGLIB”->肯定是问你如何生成proxy类,两者有啥异同。找几篇博客来看看就行。


另外,我估计很大程度是需要你结合spring来回答,因此还是看看spring的aop吧;“GC的原理”->这个就厉害了,GC有好多种,到底是哪种的原理啊?但是以我身为一名老年程序猿来告诉你,好好看一下CMS GC和G1 GC就行。CMS答好了肯定是OK的,G1纯粹是锦上添花,给面试官留个追求技术的印象吧;


“JVM内存模型”->JVM怎么还有内存模型?是Java语言的内存模型吧?没什么好说的,看Java语言规范吧;“性能优化手段”->胡侃吧,朝着怎么改进锁,怎么异步,怎么利用缓存,怎么选择合适的GC算法,怎么调整Hotspot VM的各generation比例,blabla(此处应有呕吐的表情,这种问题最烦了,你要是底气足,顶一句“具体问题具体分析”,我敬你是一条汉子)


2. “了解并发基础变成最优”->看不懂,感觉是废话,不管。并发这种东西,好好看一下java.util.concurrent包里的类。


3. “具备开发实战技能,可以熟练使用Eclipse、Idea、熟悉常见的调试方法及技巧、ant/svn/maven,有疑难杂症的排查经验”->工作一段时间都会吧?ant和svn完全不够酷,看得出来要么阿里的人比较守旧(或者懒),要么阿里的技术很老土。


4. blabla


总结一下,阿里的要求总体比美团低,但是给的工资比美团高(仅限这两个JD的比较!特地加粗)。那么问题来了,到底是美团装逼,高要求招人,低要求做事;还是阿里sb,低要求招人,高标准给工资?当然还有一个可能,就是贴这个JD的hr是sb。总的来说,能拿到美团的offer,肯定能拿到阿里的offer。因此优质骚年应该以美团的标准来要求自己(认真脸)。


2、美团


640?wx_fmt=jpeg


分析:


1. 计算机专业基本功和写代码能力是废话,太主观。我们先放着,一会再回来review。


2. “熟练掌握 Java 及面向对象设计开发”=>工作一年以上;“对部分 Java 技术有深入研究”=>熟练IO的各种姿势,或者研究过Java内存模型,有此二者在手,面试官绝对对你刮目相看;“研究过优秀开源软件的源码并有心得”=>去Github找找几个star多的项目来看吧,推荐netty,不要多,一个就好。


3. “了解 SOA 架构理念、实现技术;熟悉常见设计模式”=>维基百科欢迎你,看看就行了;“熟练掌握 Spring、myBatis 等框架”=>过一遍源码吧。


4. “熟练掌握 MySQL 应用开发、数据库原理和常用性能优化和扩展技术”=>买本mysql的书来看(认真脸);“NoSQL,Queue 的原理、使用场景以及限制”=>好好看看redis就行。


5. “http 协议 搜索引擎”=>维基百科;“缓存”=>Google Guava cache,memcached,redis;“jvm 调优”=>掌握jvm参数(认真脸);“序列化”=>Google protocol buffer;“nio”=>netty;“RPC 调用框架”=>dubbo(垃圾)


6. "xxx优先"=>有最好,没有就算了


7. 美团应该不会2b到考逻辑题或者脑经急转弯,所以这里肯定是结合你做过的项目来说。一般都会问,1⃣️项目架构,问什么选择这个不选择那个;2⃣️碰到的最有挑战/最复杂/最blabla的问题是什么,怎么解决的。


8. “高度的创业心和投入度”=>不一定要天天加班,但是碰到问题或者项目紧急的时候要加班,面试的时候要表现 出这个态度,哈哈;“技术,业务,blabla”=>不能死关注技术,一定要结合业务来回答面试问题。


好了,再回到第一条,“计算机专业基本功和写代码能力”,我们可以综合一下(根据分析2~8),美团要求的可以是一个:(注意“可以”,你这么做了“可以”获得美团面试官的肯定,假如面试官真的是根据这份JD来要求你的话)。


1. 对Java语言本身,我们掌握一下内存模型,看一点并发相关的东西(java.util.concurrent包里的类都看一遍),找几篇博客看下weak/soft/phantom reference是什么意思就行啦;


2. 对于JVM,看看书,理解一下Hotspot的常见结构啊名词啊啥的,记几个重要的参数,足以应付面试官了;


3. 熟读netty源码;


4. 略读Spring源码,重点理解关键概念(AOP面试官很爱问的哦);


5. 在维基百科上过一过JD里提到的一些名词;


6. 买本mysql的书看看,高性能mysql那本书就很好;


7. redis或memcached哪个用的多就多看看相关博客。都没用过?建议你看redis。


8. 好好包装一下你做过的最nb的项目,准备几个技术难点和解决方法,记住一定要结合业务哦。(什么?没有?没有不会编吗?怎么编?往分布式和高并发方向编会吗?不会?那你不适合互联网。)


9. 多工作几年!


你看,也不是很难嘛。如果上面的几点你都做到了,还拿不到2w的美团高级JAVA开发工程师的offer,那美团肯定是冻结了headcount。我认识的好多远远达不到上面需求的人都在美团呢。


PS:面试官问你算法的话,一定要装作特别自信的说:“啊(第二声),算法?一般工作当中不需要自己手写算法吧?一方面是常用的算法,比如排序,查询,都有现成的代码来用;


另一方面真需要手写算法的问题一般都是面向特定需求的问题,或者要求效率特别高的地方。这些地方可以结合真正的需求来做。”当然常见的算法的伪代码还是要会写的哦。如果面试官问你红黑树,哈哈,那赶紧跑路。不是谷歌脸书也不是面试算法程序猿的公司问你红黑树,这公司一定是在装逼。


三、月入2W的决定条件


月薪2万的Java程序员属于中级程序员。就是技术稍好一点,还做不到架构师级别的。一般来说,我给人开2万的薪水主要取决于以下几个方面。


1.能否独立完成项目,以及完成过哪些项目,至少是6+项目。


项目经验多了,对于需求的理解能力也会好很多。


2.对于自己所做项目用的技术框架,是否足够清楚,能否回答出来是如何选型的。


并不要求现在能够去做架构的选型,但是一定要了解自己原有项目的架构体系。


3.是否对行业技术的现状有足够多的了解,是否有主动学习的表现。


这是看一个人的视野开阔程度,15K的程序员我不要求这些。20K的程序员必须要读一些主流的体系,哪怕说出来几个名词都可以。


4.处理过的最大的数据量是多少,有没有超过千万级的流水。处理过的最大的并发数是多少,TPS能到达多少。


5.是否了解分布式和缓存,RPC框架用过哪些,缓存的失效策略怎么处理。


6.是否能够快速的解决线上的故障,是否熟悉Bug和线上Bug的紧急修复流程。


7. Are you familiar with project tools, such as Jenkins, Nexus, Confluence, wiki, git, svn and other commonly used things in projects.


8. Do you have any knowledge of performance tuning and how much you know about the GC algorithm?


In fact, it should be the other way around, how much is the candidate worth?


In addition, it is not said that all are satisfied. Rather, at least a few items must be satisfied. The more conditions you meet, the higher the salary range that can be given. To sum up, to achieve a monthly salary of 20,000, you need to master the following skills:


1. Have a solid Java programming foundation, be familiar with various design patterns, and have good programming skills.

2. Familiar with the entire software development process and specifications.

3. Proficient in Spring/Struts/Ibatis and mainstream development frameworks.

4. Familiar with databases, such as Mysql, oracle, etc., and have a deep understanding of database things.

5. Be good at using open source frameworks, interpret the source code, and master the implementation principles.

6.1-5 years of development experience.

7. Strong academic ability, good at summarizing and thinking.


The above are only the basic skills for Java development positions with a monthly salary of 20k. Other skills are required for different businesses, such as search business, and Lucene, ElasticSearch and other technologies.

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326878194&siteId=291194637