无法无天!2022 年秋招 Java 岗竟然爆了!

沉默王二

共 6337字,需浏览 13分钟

 · 2021-07-18

大家好,我是二哥呀!

据说,2022 年算法岗遇冷,BAT 暑期实习甚至收不到简历,Java 反而爆炸。

简直无法无天!

难道,Java 的春天(映射 Spring)要来了?作为 Java 领域的优质创作者(见下图),二哥是不是可以横着走了?

那二哥是如何看待 2022 年秋招 Java 后端开发岗一片红海的呢?这不仅让我想起脉脉上的一段话——来自某文豪。

划重点:

有后选后,无后选前

无后无前,算法也甜

条件允许,无脑后端

前途无量,预定高管

作为一名略微有点名气的文字创作者,二哥对这段行文真的是佩服得五体投地——高手在脉脉啊!

这里的“后”,如果 Java 后端敢称第二,那没有其他编程语言敢称第一了!

为什么我敢这么肯定,从 4 个方面来说吧(对不起,我要开吹了,拿小板凳坐好了)。

第一,就业岗位多,薪资水平够给力,Java 后端开发的需求量每年都很大

前几天和字节的一个朋友聊天,问起薪资,他给我分享了一张图,给大家看下。

我看到字节的另外一个朋友阿秀在知乎上也用了这张图,那就可以确定——真实有效了。

也就是说,大厂的起薪都在 30 万以上,稍微努力点,50 万到手,再使劲卷一卷,100 万到手。

退一万步说,不是所有人都能去一线互联网大厂,毕竟是少数。那去一些创业团队或者中小厂应该也能拿到不错的薪资。

就拿培训机构动力节点(打钱)在知乎上晒出来的薪资数据来看吧。

虽然不是很清晰,但放大后能看得出来,Java 学员的月薪也在 15k 左右。

把真假抛开。毕竟拿 5k 月薪的学员也有,找不到工作的也有,但肯定没法贴出来,但既然动力节点敢贴出来,至少能作为参照。

对于培训机构,也不能一杆子打死,对吧?培训出来的学员,也有学得好的呀,在一线城市拿到 15k 左右的薪水肯定是有的。

我认识一个朋友,他在西安的一家培训中心做讲师,他就给我讲,他们收的学员本身在学校的成绩就不错,只是缺乏系统的知识体系,到他们这培训后很多都能去大厂,就业率达到了 95% 以上。

昨天在 Guide 哥公号文章下面就有读者留言说,看尚硅谷宋红康老师的视频入的门,现在在阿里工作了。

第二,Java 的生态虽然说不上尽善尽美,但毕竟已经发展了 20 多年了,有大量成熟的框架可以用,稳定、可靠、易上手

打开 GitHub,看一下 Java 的 Topic,可以看到大量耳熟能详的车轮子。

都是一些能极大提高生产力的好家伙。

第三,Java 本身也在与时俱进,虽然 Java 7 差一点难产,但自从被 Oracle 这个眼里只有钱的巨头收购后,版本一直有条不紊的在更新

Java 8 引入了重量级的 Lambda 表达式、函数式编程、Stream 流等等。马上下一个长期支持的版本 Java 17 在 9 月份就要推出了。虽然大多数线上的项目都还停留在 Java 8 这个成熟稳定的版本,但对于新版本,我个人还是非常期待的,有新版本的推出,就意味着 Java 的生命力很旺盛。

如果一门编程语言一直停留在某一个版本,不积极地更新和维护,那么很快就会消失在人们的视野中。

第四,Java 的学习资料丰富,只有你想不到,没有你找不到的。

无论是开源项目,还是在线教程,以及经典的书籍和视频,Java 在这方面一直都是佼佼者。

------学习 Java 的建议-------

认真看哦,记得点赞收藏,最后能置顶,对你构建整个 Java 知识体系会很有帮助

建议大家看看我这幅思维导图,帮学弟拿到过携程的实习 Offer:

参考 Hollis 的成神之路

为了给大家一个更实质性的参考,我把重点学习的内容列举了一下。

重申一下我学习计算机的观点,我想这会对大家快速建立起自己的知识体系很有帮助!

如果你要学习物理,我推荐你顺着物理的发展史学习,先学习牛顿的经典物理,再学习热力学、电磁学,然后学习相对论、量子力学这些彻底推翻经典物理的,最后学习电动力学这种硬核的。

整个学习过程,是自底向上的。但是学计算机,这样行不通。

先学习电路,然后学习冯诺依曼结构,造一台计算机?接着再学习如何用汇编写个 mini os?接着学习如何写一个简易版的编译器?最后再学习高级编程语言,比如说 Java、Python?

显然这样是行不通的!计算机的学习最好是自顶向下。

什么是顶?我想一门高级的编程语言就是,比如说 Java!

当你学习到 Java 并发编程中的“原子性”、“同步”、“异步”、“进程”、“内存分配”这些概念的时候,你自然而然会产生很多疑问,然后就会去学习计算机组成原理、操作系统,然后你的一系列问题就会逐渐被解决。

当你发现,用 Java 实现某个业务需求时,人家的算法实现比你快得多,你自然会好奇,为什么会这样?然后你发现人家用的数据结构和你的不同,然后你就会去学习数据结构,接着了解一些高效的算法,比如动态规划等。

一、Java 语言基础

初学者可以看看二哥的《教妹学Java专栏》,目前已经更新到 45 讲,在线阅读地址也同步更新了。

地址:https://itwanger.gitee.io/tech-sister-learn-java/#/

有一些基础的的可以看看这份 Java 教程。

出自 CS-Notes 的 Java 部分。

CS-Notes:GitHub 上星标 135k,涵盖了技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计,以及 Java 编程语言。

地址:https://github.com/CyC2018/CS-Notes

如果是初学者,接下来可以去看看尚硅谷、动力节点或者其他培训机构在 B 站上开源的教学视频,去搜 Java 就对了。

(咦,看到了翁恺教授和 Schelley 小姐姐,好评必须给啊)

有一说一,Java 的学习资源真的多,我再顺带给大家推荐一个。

JavaGuide:GitHub 上星标 108k,一份涵盖大部分 Java 程序员所需要掌握的核心知识。

地址:https://github.com/Snailclimb/JavaGuide

关于 Java 语言的基础部分,Java 并发编程和 Java 虚拟机是面试中的核心,我把一些题目列出来,大家可以拿来自测。

二、开发框架

可能很多大佬对开发框架嗤之以鼻,感觉学这个没多大用处,提升不了你的技术功底。但是呢,如果你想做练手项目,没有开发框架的帮助,很难。

Java 之所以流行,很重要的一部分原因就是拥有 Spring 系列框架这个大杀器,包括 SSM(Spring+SpringMVC+MyBatis)、Spring Boot、Spring Cloud。

我们只是不应该停留在只会用的层面上,要懂背后的原理。说一千道一万,Spring 的核心就两个概念:AOP、IoC。

AOP(Aspect-Oriented Programming),也就是面向切面编程,能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。

IoC(Inverse of Control),也就是控制反转,是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。

Spring 怎么学?可以到 B 站上看一下江南一点雨的视频教程。

先学习 SSM,再学习 Spring Boot。Spring Boot 的出现,并不意味着 Spring 和 SpringMVC 已经过时了,从设计目的上来说,Spring Boot 只是实现了 Spring 的自动装配,降低了项目搭建的难度。

从技术角度来说,Spring Boot 的底层依然是 Spring 的核心机制,也就是 AOP 和 IoC,Spring Boot 只是一个承载者。在我看来,学习 Spring 的正确路径应该是 Spring -> Servlet -> Spring MVC -> Spring Boot。

顺带给大家推荐一个练手项目吧。

mall:GitHub 上星标 51k,一套成熟的电商系统,非常适合拿来作为练手项目。

地址:https://github.com/macrozheng/mall

三、数据库

增删改查,增删改查,要想做一名只会 CRUD 的程序员,数据库这块是逃不掉的。不过,这篇就不重点说了,推荐一些资源给大家。

小破站上的三个视频。

SQL:https://www.bilibili.com/video/BV1UE41147KC

MySQL:https://www.bilibili.com/video/BV12b411K7Zu

Redis:https://www.bilibili.com/video/BV1S54y1R7SB

四本书。

  • 《SQL 必知必会》
  • 《高性能 MySQL》
  • 《MySQL 技术内幕-InnoDB 存储引擎》
  • 《Redis 深入历险核心原理与应用实战》

四、计算机组成原理

开局一张图。

来自于极客时间上的《计算机组成原理》专栏

计算机组成原理也是我最近一直在补的一门课,发现还是挺有意思的。

大家都知道,计算机是由 CPU、内存、输入输出(IO)设备,这些硬件组成的,但我们程序员,往往从事的是软件开发的工作, 怎么才能让软件最大限度的压榨硬件呢?

学了计算机组成原理,就会学到编译原理了、操作系统了,这些硬核的计算机基础知识,然后对学习 Java 的并发编程和 Java 虚拟机也会有很大的帮助。

我最近刷了一遍北京大学的《计算机组成》公开课,讲师为陆俊林博士,在线地址:

https://www.coursera.org/learn/jisuanji-zucheng

还有两本书,《计算机是怎样跑起来的》和《程序是怎样跑起来的》。

北京大学的这门公开课一共也就 10 多个小时,所以不用花太多时间就能搞明白。

两本书都不厚,属于浓缩精简版的,配有大量的图文。相比较来说,我觉得《程序是怎样跑起来的》比《计算机是怎样跑起来的》读起来更容易上手一些。

就说一点吧。涉及到金融计算时,为什么不能直接使用浮点数?

这背后的原因就是,计算机存储的是二进制,而二进制是无法精确地表示浮点数的。但二进制可以精确地表示整数。

所以实际的工作当中,一般会用整数来表示金额,比如说 1.11 元,会乘以 100,用 111 来表示,返回给用户的时候再除以 100,免得在计算的过程中丢失精度。

我之前对接微信支付的时候,发现接口里面就用的整数,一开始当然是只管用不管为什么的,后来看了《程序是怎样跑起来的》这本书的第二章和第三章,哦,原来如此呀!

五、操作系统和计算机网络

操作系统是计算机系统中负责管理各种软硬件资源的核心系统软件,为应用软件运行提供良好的环境。

计算机网络,几乎是很多大厂面试必问的内容,什么 TCP/IP 三次握手,四次挥手,TCP 和 UDP 区别,HTTP 协议了等等。

输入 URL 后,将发生什么?这个问题会涉及到很多计算机网络的基础知识。

关于这两门课,先给大家推荐两个视频教程。

清华大学的操作系统课,在享学课堂上可以看。

地址:https://www.xuetangx.com/course/THU08091000267/5883104?channel=learn_title

湖科大教书匠在 B 站上公开的《计算机网络微课堂》评价很高。

地址:https://www.bilibili.com/video/BV1c4411d7jb

六、设计模式

简单来分析一下代码写得烂的原因哈。

其一,可能是刚入门,代码写得少,如果满打满算只写过一两千行代码,是不可能写出多优雅的代码的。

其二,可能不懂设计模式,设计模式是软件设计中常见问题的典型解决方案,它们就像能根据需求进行调整的预制蓝图, 可用于解决代码中反复出现的设计问题,如果不懂设计模式的话,遇到这些问题就只能抓瞎了。

这么说吧,设计模式玩得炉火纯青,写出的代码就更优雅,阅读起来也会更加舒服,可维护性、可扩展性就更强。

设计模式的学习,推荐一本书——小傅哥的《重学 Java 设计模式》。

一个网站,地址:https://refactoring.guru

七、数据结构与算法

我有好几个号主朋友,都是搞算法的。讲真,算法岗的薪资是真的香,但岗位也是真的卷。

Java 卷吧,岗位相对较多,算法卷吧,岗位又没有 Java 这么多,要求反而会更高。应聘难度差不多已经从诸神黄昏到人间地狱模式了。

我这么说,可不是劝退算法岗哈,只是说如果你要竞聘算法岗的话,就需要付出更多的努力,当然回报也是相当给力的。

随着互联网的发展,涌入计算机专业的人越来越多,卷是很自然的一件事情,所以完全没有必要抗拒。

以前,你去投小厂的 Java 岗,可能会用 Spring 框架就可以了;现在呢,要求肯定提高了,考你一两道算法题,你会不会?

在我看来,卷不一定是什么坏事,多学一学,对自身的成长也是有好处的。

计算机科学所赋予人们的最大能量在于对常见算法和数据结构的熟悉。此外,这也可以训练一个人对于各种问题的解决能力,有助于其他领域的学习。

书籍的话,推荐《算法 4》。

至于练习,推荐到 LeetCode 或者牛客网上刷题吧,上面的问题往往有趣且带有良好的解法和讨论。此外,在竞争日益激烈的软件行业,这些问题可以帮助你评估自己应对技术面试中常见问题的能力。

我的心得就是简单粗暴:从易到难,一遍一遍地刷,尽量使用自己熟悉的编程语言,比如说 Java 程序员尽量用 Java 来解题,这样刷题的幸福感也会提升很大一截。

如果不是天赋异禀,不要怕,一开始就是抄题,先把别人的解题思路照着敲出来。刷的题多了,尽量控制一下刷题的时间,掐个点,不能让自己一直想、一直写下去,如果半个小时没有解出来,就果断放弃,去背别人的答案,不要觉得不好意思,等到真的熟了,再去想自己的解题思路。

-----人工分割线-----

这个世界上只有两种语言,一种是经常被骂的,一种是从来没有人用的——来自 C++ 之父。

Java,显然是经常被骂的那一种。这里的骂显然不是一个贬义词,而是一个褒义词。

有一个很有意思的数据,Reddit(相当于国外版贴吧)上讨论最多的主题是:现在学习 Java 语言是一个好的选择吗?(Is Java a good language to learn today?)

这意味着什么?

意味着 Java YYDS!学 Java 永远都不晚,要么你已经开始了,要么现在开始。

用一张图了概括下 Java 吧。

当然了,Java 后端开发岗这条道路并不好走,不仅要学习很多新技术、新框架,还要及时补充必要的计算机基础知识,底子硬的同时还要学会拥抱变化。

但不夸张的说,学 Java,总能找到合适的工作岗位!

学习的过程,就好像登山一样,大概有 80% 的人在这个过程中会掉队。那么请相信我,只要目标明确,努力加上坚持,再加上一点点好运气,你就能登顶!

衷心的希望,大家能在学习 Java 的这条路上快乐一些,纯粹一些,少听少看一些那些焦虑文,什么 35 岁,什么学历歧视,沉下心来,多学习一点知识,让自己变强一点,比什么都好!

一家之言,必然有不尽善尽美的地方,但只要能对大家的学习有些许帮助,我也就很满足了!

我是二哥呀!我们下期见~

浏览 10
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报