编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()

据说,2022 年算法岗遇冷,BAT 暑期实习甚至收不到简历,Java 反而爆炸。
难道,Java 的春天(映射 Spring 全家桶)又要来了吗?作为 Java 领域的优质创作者(见下图),又可以在 CSDN 横着走了吗?
编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()
文章图片

如何看待 2022 年秋招 Java 后端开发岗一片红海?这不仅让我想起脉脉上的一段话——来自某文豪。
编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()
文章图片

划重点:
有后选后,无后选前
无后无前,算法也甜
条件允许,无脑后端
前途无量,预定高管
这里的后,Java 后端敢称第二,没人敢称第一。为什么我敢这么肯定呢?从 4 个方面来说吧。
1)就业岗位多,薪资水平够给力,Java 后端开发的需求量每年都很大。截个图给你感受下。
编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()
文章图片

不要误会,只有阿里有 Java 岗,腾讯和字节没有 Java 岗,真的!起薪 30 万以上,稍微努力点,50 万年薪,再使劲卷一卷,100 到手。
2)Java 的生态虽然说不上完美,但毕竟已经发展了 20 多年,有大量成熟的框架可以用,稳定、可靠、易上手。
3)高版本的 Java 引入了很多时髦的新特性,比如说 Lambda、函数式编程、Stream 流等等这些,Java 在与时俱进,没有停下来脚步,Java 17 马上就要来了,应该还会有一些令人眼前一亮的新特性。
4)Java 的学习资料丰富,只有你想不到的,没有你找不到的,无论是 GitHub,还是网上的在线教程,体系非常完整。
我花了一个月的时间,把近十年来读过的一系列计算机经典书籍(戳一戳))(偏 Java 后端方向,)全部都整理出来了,给你瞧瞧,可以说是包罗万象,应有尽有(入门→工具→框架→数据库→并发编程→底层→性能优化→设计模式→操作系统→计算机网络→数据结构与算法→面试→架构→管理)。
对打算从算法岗转 Java 后端开发岗的同学应该帮助很大。
---------学习 Java 的建议-----------
(认真看,记得点赞收藏,以后不迷路)
建议大家看看我这幅思维导图,帮学弟拿到过携程的实习 offer:

我可不是口说无凭,上证据。
编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()
文章图片

为了给同学们一个更实质性的参考,我把大厂面试中考察的重点列举了一下。
编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()
文章图片

操作系统、计算机网络、数据结构与算法,这些肯定是要学的,还有 Java 的核心知识点,以及一些框架原理,否则根本就进不了大厂。
重申一下我学习计算机的观点,我想这会对你快速建立起自己的知识体系很有帮助!并且,你应该按照我这个观点从大一就开始实践起来!
如果你要学习物理,我推荐你顺着物理的发展史学习,先学习牛顿的经典物理,再学习热力学、电磁学,然后学习相对论、量子力学这些彻底推翻经典物理的,最后学习电动力学这种硬核的。
整个学习过程,是自底向上的。但是学计算机,这样行不通。
先学习电路,然后学习冯诺依曼结构,造一台计算机?接着再学习如何用汇编写个 mini os?接着学习如何写一个简易版的编译器?最后再学习高级编程语言,比如说 Java、Python?
显然这样是行不通的!计算机的学习最好是自顶向下。
什么是顶?我想一门高级的编程语言就是,比如说 Java!
当你学习到 Java 并发编程中的“原子性”、“同步”、“异步”、“进程”、“内存分配”这些概念的时候,你自然而然会产生很多疑问,然后就会去学习计算机组成原理、操作系统,然后你的一系列问题就会逐渐被解决。
当你发现,用 Java 实现某个业务需求时,人家的算法实现比你快得多,你自然会好奇,为什么会这样?然后你发现人家用的数据结构和你的不同,然后你就会去学习数据结构,接着了解一些高效的算法,比如动态规划等。
一、Java 语言 可以先看看我整理的这份 GitHub 上星标 115k+ 的 Java 教程,里面涵盖了 Java 所有的知识点,包括 Java 语法、Java 集合框架、Java IO、Java 并发编程和 Java 虚拟机,内容不多,只讲重点。
编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()
文章图片

然后到 B 站上看看尚硅谷或者动力节点的视频课。
动力节点:https://www.bilibili.com/video/BV1Rx411876f
尚硅谷:https://www.bilibili.com/video/BV1Kb411W75N
二、操作系统 操作系统是计算机系统中负责管理各种软硬件资源的核心系统软件,为应用软件运行提供良好的环境。清华大学操作系统课-学堂在线这门课程以主流操作系统为实例,以教学操作系统 ucore 为实验环境,讲授操作系统的概念、基本原理和实现技术,是一门非常值得推荐的视频课。
编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()
文章图片

书籍的话,推荐《操作系统概念》 (“龙书”)和 《现代操作系统》 ,是操作系统领域的经典书籍。学完操作系统,你要能回答这些问题:

  • 进程与线程简单介绍,区别,以及进程间通信方式,线程同步方式
  • 用户态和内核态
  • 内存管理:分页分段,虚拟内存,空闲地址管理方法
  • 死锁:死锁的必要条件,死锁的检测与恢复,死锁的预防,死锁的避免
三、计算机网络 B 站上的这个计算机网络微课堂视频课非常不错,强烈推荐。
编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()
文章图片

学完计算机网络,你要能回答以下这些问题:
  • 七层结构,简单介绍一下每一层。
  • 输入 URL 后,将发生什么?这个问题会涉及到很大一部分的计算机网络基础。
  • HTTP 和 HTTPS,DNS 解析
  • TCP、UDP、拥塞控制、三次握手、四次挥手、滑动窗口
  • IP 和 ARP 协议
四、数据结构与算法 有算法基础的同学,这部分是最不怕的。国内最看重算法题的公司当属字节了,想去字节的同学一定要记得刷算法题。
我这里有一份美团大佬的 LeetCode 刷题笔记,纯 Java 版的,给你瞧一下内容。

我花了不少时间整理成 PDF了,对算法薄弱和需要提高算法的同学很有帮助:刷完 300 道 LeetCode 题后,我膨胀到要飘起来了!纯正 Java 版
再说一下我的刷题心得:从易到难,一遍一遍地刷,尽量使用自己熟悉的编程语言,比如说 Java 程序员尽量用 Java 来解题,这样刷题的幸福感也会提升很大一截。
如果不是天赋异禀,不要怕,一开始就是抄题,先把别人的解题思路照着敲出来。刷的题多了,尽量控制一下刷题的时间,掐个点,不能让自己一直想、一直写下去,如果半个小时没有解出来,就果断放弃,去背别人的答案,不要觉得不好意思,等到真的熟了,再去想自己的解题思路。
可以按照下面这个类型来刷就可以了。
数组-> 链表-> 哈希表->字符串->栈->队列->树->回溯->贪心->动态规划->图
五、补充部分
瞧瞧我读过的这些书吧!
编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()
文章图片

Java 后端开发需要掌握的知识并不算多,除了 Java 核心语法、Java 并发编程、Java 虚拟机,还有就是 Spring 系列框架,以及一些数据库知识,计算机必读经典书单(偏 Java 后端方向)
Java 并发编程和 Java 虚拟机是面试中的核心,我把一些题目列出来,你可以拿来自测。
  • 并行和并发有什么区别?
  • 线程和进程的区别?
  • 守护线程是什么?
  • 创建线程有哪几种方式?
  • 说一下 runnable 和 callable 有什么区别?
  • 线程有哪些状态?
  • sleep() 和 wait() 有什么区别?
  • notify()和 notifyAll()有什么区别?
  • 线程的 run()和 start()有什么区别?
  • 创建线程池有哪几种方式?
  • 线程池都有哪些状态?
  • 线程池中 submit()和 execute()方法有什么区别?
  • 在 java 程序中怎么保证多线程的运行安全?
  • 多线程中 synchronized 锁升级的原理是什么?
  • 什么是死锁?
  • 怎么防止死锁?
  • ThreadLocal 是什么?有哪些使用场景?
  • 说一下 synchronized 底层实现原理?
  • synchronized 和 volatile 的区别是什么?
  • synchronized 和 Lock 有什么区别?
  • synchronized 和 ReentrantLock 区别是什么?
  • 说一下 atomic 的原理?
  • Java 内存模型(JMM)、重排序与 happens-before 原则了解吗?
  • AQS了解么?原理?AQS 常用组件:Semaphore (信号量)、CountDownLatch (倒计时器) CyclicBarrier(循环栅栏)
  • ReentrantLock 、 ReentrantReadWriteLock
  • CAS 了解么?原理?
  • 说一下 JVM 的主要组成部分?及其作用?
  • 说一下 JVM 运行时数据区?
  • 什么是双亲委派模型?
  • 说一下类装载的执行过程?
  • 怎么判断对象是否可以被回收?
  • 说一下 JVM 有哪些垃圾回收算法?
  • 说一下 JVM 有哪些垃圾回收器?
  • 详细介绍一下 CMS 垃圾回收器?
  • 新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?
  • 简述分代垃圾回收器是怎么工作的?
  • 说一下 JVM 调优的工具?
  • 常用的 JVM 调优的参数都有哪些?
  • Java 之所以流行,很重要的一部分原因就是拥有 Spring(春天)系列框架这个大杀器,包括 SSM(Spring+SpringMVC+MyBatis)、Spring Boot、Spring Cloud。
不过,说一千道一万,Spring 的核心就两个概念:AOP、IoC。
AOP(Aspect-Oriented Programming),也就是面向切面编程,能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。
IoC(Inverse of Control),也就是控制反转,是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。DI(Dependency Injection),也就是依赖注入,原来叫 IoC,能让人更加直观和清晰地理解其背后所代表的含义。
Spring 怎么学?可以到 B 站上看一下江南一点雨的视频教程。
编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()
文章图片

先学习 SSM,再学习 Spring Boot。Spring Boot 的出现,并不意味着 Spring 和 SpringMVC 已经过时了,从设计目的上来说,Spring Boot 只是实现了 Spring 的自动装配,降低了项目搭建的难度。
从技术角度来说,Spring Boot 的底层依然是 Spring 的核心机制,也就是 AOP 和 IoC,Spring Boot 只是一个承载者。在我看来,学习 Spring 的正确路径应该是 Spring -> Servlet -> Spring MVC -> Spring Boot。
会了 Spring,基本上就具备一个 CRUD 的基本素质了。剩下的,就是通过计算机基础知识来提升自己在工作中的不可替代性,很多时候,性能的提升,要求的就是你在计算机组成原理、操作系统、计算机网络、数据结构与算法方面的功底了!
关于数据库这块。SQL 语法需要准备一下,有的面试会让你根据场景写出 SQL。MySQL 和 Redis 是面试中常问的两个数据库,这里推荐看《MySQL 技术内幕 innodb 存储引擎》和 《Redis 设计与实现》。
  • 索引:B+ tree索引、哈希索引、全文索引、覆盖索引等
  • 存储引擎简单介绍,如 InnoDB, MyISAM
  • 主从复制
  • 事务特性简单介绍
常用的几种设计模式必须得清楚,比如:
编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()
文章图片

我认为设计模式是初中级程序员迈向高级程序员的必经之路。有不少程序员,前期冲劲十足,但后继乏力,都是吃了设计模式的亏。在工作的前几年,大部分程序员都处于熟悉编程语言的阶段,也就是处于“技”的阶段,随后就要进入“术”的阶段了。在编程领域,“术”的典型代表就是“设计模式”。
你可能听说过,学习设计模式非常的重要,那么为什么这么重要呢,设计模式到底是什么?打个比喻学编程就像学武功一样。武功要练得很牛逼,有两样东西不能丢。第一,是内功;第二,是武功秘籍。内功对应到编程就是我们编程基础能力,那编程的设计模式就可以想象成武术中的武功秘籍。
推荐小傅哥的重学 Java 设计模式,持续霸榜 GitHubTrending。
不得不说,算法岗确实卷,没有研究生以上的学历,很难入算法岗的门槛,Java 后端开发岗就不同了,不管你是不是 985、211 毕业的,只要你能具备基本的素质,就能胜任对应的工作。当然了,Java 现在也是非常卷了。好的一点是,Java 的岗位多,需求量大!
这个世界上只有两种语言,一种是经常被骂的,一种是从来没有人用的——来自 C++ 之父。
编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()
文章图片

而 Java,显然是经常被骂的那一种。这里骂显然不是一个贬义词,而是一个褒义词。
根据 JetBrains 2020 年给出的数据分析显示, 全世界大约有 520 万名专业开发者使用 Java 作为主要语言。详情参照:JetBrains 2020 Java调查报告
其中,中国和韩国使用 Java 的比例最高,分别为 51% 和 50%。
编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()
文章图片

有一个很有意思的数据,Reddit(相当于国外版贴吧)上讨论最多的主题是:现在学习 Java 语言是一个好的选择吗?(Is Java a good language to learn today?)
编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()
文章图片

这意味着什么?
意味着 Java YYDS!

当然了,Java 后端开发岗这条道路并不好走,不仅要学习很多新技术、新框架,还要及时补充必要的计算机基础知识,底子硬的同时还要学会拥抱变化。
但同时,大家要知道,Java 是一门面向对象的编程语言,凭借着简单性、健壮性、安全性、可移植性、多线程并发等等优势,迅速地占领了市场。
大型网站的后端,比如淘宝、京东都主要使用的 Java。
大型的企业级应用,比如大型企业管理系统,CRM 系统,ERP系统也都用 Java 开发。
还有像移动、联通、电信、网通这些大型企业,还有金融相关的大型企业,比如银行、证券,都与 Java 息息相关。
不夸张的说,学 Java,总能找到合适的工作岗位!学习的过程,就好像登山一样,大概有 80% 的人在这个过程中会掉队。那么请相信我,只要目标明确,努力加上坚持,再加上一点点好运气,你就能登顶!
我劝你在找工作之前刷一波面试题,做到有备而战,知彼知己,百战不殆。可以看一下 GitHub 上星标 100k+ 的这份面试攻略,这才是 Java 程序员应该学的东西。
衷心的希望,大家能在学习 Java 的这条路上快乐一些,纯粹一些,少听少看一些那些焦虑文,什么 35 岁,什么学历歧视,沉下心来,多学习一点知识,让自己变强一点,比什么都好!一家之言,必然有不尽善尽美的地方,但只要能对大家的学习有些许帮助,我也就很满足了!
【编程技术|震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗()】我是二哥呀,大家记得收藏点赞呀!笔芯!

    推荐阅读