程序员:搞Java年薪40W是什么水平?我:也就这样(滑稽)

2023-11-05 15:30

本文主要是介绍程序员:搞Java年薪40W是什么水平?我:也就这样(滑稽),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

按照一贯的尿性,脱离了剂量谈毒性都是耍流氓,年薪这种事,脱离了地域城市谈多少钱也是耍流氓。我有个同事,最近去了腾讯,职级为8级,从他那里获得的信息是,在深圳,8级可以拿到将近50W,而在非北上广深的城市,即使也是在腾讯,8级一般拿到是30W左右,相比在深圳,基本上要打个6、7折。

所以年薪40W在不同的城市,要求的水平就不一样,在成都、西安、武汉这些新一线城市,年薪40W,到了北上广深差不多可以拿70W。反过来在北上广深拿40W,去新一线城市,差不多拿26W左右。

柿子当然是捡软的捏,我们看看在北上广深拿40W大概需要什么样的技术水平。国内目前以Java技术栈为主的公司有阿里、美团、京东等等,我们从中选择一家,看看年薪40W的要求是什么,就能明白要求的技术水平。

按照网上流传的互联网公司薪酬表格,年薪40W,相当于阿里的P6,资深工程师的水平。

阿里的P6的要求是什么?从阿里的社招官网我们可以很容易的查到:

职位详情 - 阿里巴巴集团招聘

抛开第5和第6条,我们仔细分析下岗位要求中的技术条目。

首先要求JAVA基础扎实,这里面包括熟练掌握数据结构、多线程编程,掌握常用的设计模式;熟悉JVM,包括内存模型、类加载机制以及性能优化。

数据结构是个老生常谈的东西了, 这是程序员的基本功,不限于Java程序员。只不过为什么要考察数据结构和算法,很多人其实并不知道,用知乎上一位大牛的说法:

  1. 程序员这个群体也是有金字塔结构的。如果连基本的算法和数据结构都不会,基本上就比较底层,底层就意味着低薪酬。
  2. 没有扎实的算法和数据结构基础,很难及时发现问题并提出独到的见解。
  3. 技术栈日新月异,如何快速适应新技术和新环境?要求程序员必须具有以不变应万变的的计算机思维、算法思维和逻辑思维能力。

对于年薪40W来说,数据结构和算法仅仅掌握数组、链表、栈、队列,基本的排序和查找肯定是不够的,如何计算算法的复杂度,图论,动态规划等等还是需要掌握的,除此之外必要的刷题和面试前对常见大厂算法面试题的突击,无疑在面试中可以大大的加分。

多线程编程,也就是我们常说的并发编程,只会用线程池和JUC下的并发工具类,不能算基础扎实。 至少应该包括但不限于通晓CAS的原理和问题,阅读过JUC中诸如AbstractQueuedSynchronizer之类的源码,明白Java内存模型JMM和相关的并发安全问题,对synchronized和volatile的底层实现有一定的涉猎等等,才够得上对多线程编程基础扎实。

设计模式和JVM,虽然是两个完全不同的知识,但是对于年薪40W来讲,却有一定的相似性。 什么相似性?两者都是仅仅记住概念和理论是远远不够的,一定要有实际的经验。

  • 例如JVM,岗位上面的要求是“熟悉JVM,包括内存模型、类加载机制以及性能优化”,类加载机制和相关联的双亲委派模型的概念半天就记住
  • JVM性能优化也无非就是那几条原则,比如尽可能减少FULLGC的次数,缩短每次GC的时长等等
  • 但是具体在生产环境中应该如何做呢?通过阅读GC日志能发现JVM哪些可以调整的地方?项目中内存泄漏问题怎么排查?内存占用过高怎么解决?

再看第二条,精通spring mvc、orm框架(ibatis或hibernate),熟悉前端开发(js、html、css)。在现在前后端分离的大趋势下,对Java程序员来说,前端的知识不会要求特别高,一般来说能看懂就差不多了。 而对各种开源框架,知道或者用过里面的常用注解,能写出一个完整的SSM程序就算精通了?我想,在IT职场待过一年以上的人,都会有一个共同的答案,不是!什么是对开源框架的精通?必然包括阅读过框架的源码,对底层的原理和机制非常熟悉,出了问题,能快速定位到具体的原因和位置; 或者接触了一个从未用过的公司内部框架后,能够从已知的开源框架原理和机制里得到的知识迅速地推断、掌握这个陌生的框架。

第三条,“熟悉常见的中间件、分布式解决方案及其原理:分布式缓存、SOA、消息中间件,负载均衡、连接池等;”,虽然只有一句话,包含的信息量却很大。

  • 首先,常见的中间件包括的东西是很多的,Redis、Zookeeper、Dubbo、以Kafak或RcketMQ为代表的消息中间件、MongoDB、分库分表相关的数据库中间件、Nginx等等。
  • 其次,只知道这些中间件的用法,层次显然不够拿年薪40W。继续往高层次前进,仅以Redis为例,它的两种持久化方式,从原理的角度再结合自己的业务哪种更适合?在分布式架构下常见的可用性,伸缩性问题,在我们使用Redis的过程中怎么解决?其他的各种中间件当然都各有各的原理需要掌握。

第四条,“具有一定的项目规划和决策能力,善于捕捉业务需求、架构设计中存在的问题,并给出有效的解决措施和方法;”,很明显,指明了需要架构设计经验和解决相关问题的能力,这条和前面的第三条是密切关联的,没有第三条作为基础,架构设计经验和解决相关问题的能力都是无根之水,无本之木。

  1. 比如分库分表后的唯一性ID,根据业务情况,是Redis自动生成、雪花算法还是Mysql提前序列表更适合我们?
  2. 分库分表后的分布式事务,应该选择哪种解决方案?柔性事务还是TCC?
  3. 按照业务的发展趋势用标准的分布式还是转向微服务?
  4. 海量订单数据如何存储和检索?
  5. 超卖、秒杀等高并发场景怎么设计?

上述的这些,都是在业务和架构设计中都有可能遇到的问题,能不能给出有效的解决措施和方法,这些都是年薪40W甚至更高应该达到的水平。

总的来说,掌握的技术越精通,越全面薪资越高。经过总结和细化,下面的思维导图中的技能掌握了,年薪40W就问题不大了:

具体的提升架构进阶路线图点赞支持一下。

温馨提示:若图片不清晰可以通过上面领取方式查看原图

相信这份路线图对于你系统进阶以及准备 Java 方向的面试都很有帮助!正如作者说的那样,这是一份:涵盖大部分 Java 程序员所需要掌握的核心知识的 Java 学习+面试指南!

说明:收集内容过多,限于篇幅,本文只做部分内容的目录展示。由于机制,不能带外部链接,在线版和离线版点击下面卡片加入即可来免费获取完整版解析文档或在线链接进行学习,有需要的话点赞支持一下。

Java程序员所需要掌握的核心知识的 Java 学习+面试指南

1. Java基础知识面试题

2. Dubbo面试题

3. Java异常面试题

4. Java虚拟机(JVM)面试题

5. Java集合容器面试题

6. Linux面试题

7. MyBatis面试题

8. MySQL数据库面试题

9. Netty面试题

10. Redis面试题

11. Spring面试题

12. Spring Boot面试题

13. Spring Cloud面试题

14. Spring MVC面试题

15. Tomcat面试题

16. ZooKeeper面试题

17. 并发编程面试题

18. 消息中间件MQ与RabbitMQ面试题

面试攻略

1. 面试前的准备

2. 面试中的技巧

这篇关于程序员:搞Java年薪40W是什么水平?我:也就这样(滑稽)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/350772

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S