大家好,又见面了,我是你们的朋友全栈君。
据说,2022 年算法岗遇冷,BAT 暑期实习甚至收不到简历,Java 反而爆炸。
难道,Java 的春天(映射 Spring 全家桶)又要来了吗?作为 Java 领域的优质创作者(见下图),又可以在 CSDN 横着走了吗?
如何看待 2022 年秋招 Java 后端开发岗一片红海?这不仅让我想起脉脉上的一段话——来自某文豪。
划重点:
有后选后,无后选前
无后无前,算法也甜
条件允许,无脑后端
前途无量,预定高管
这里的后,Java 后端敢称第二,没人敢称第一。为什么我敢这么肯定呢?从 4 个方面来说吧。
1)就业岗位多,薪资水平够给力,Java 后端开发的需求量每年都很大。截个图给你感受下。
不要误会,只有阿里有 Java 岗,腾讯和字节没有 Java 岗,真的!起薪 30 万以上,稍微努力点,50 万年薪,再使劲卷一卷,100 到手。
2)Java 的生态虽然说不上完美,但毕竟已经发展了 20 多年,有大量成熟的框架可以用,稳定、可靠、易上手。
3)高版本的 Java 引入了很多时髦的新特性,比如说 Lambda、函数式编程、Stream 流等等这些,Java 在与时俱进,没有停下来脚步,Java 17 马上就要来了,应该还会有一些令人眼前一亮的新特性。
4)Java 的学习资料丰富,只有你想不到的,没有你找不到的,无论是 GitHub,还是网上的在线教程,体系非常完整。
我花了一个月的时间,把近十年来读过的一系列计算机经典书籍(戳一戳))(偏 Java 后端方向,)全部都整理出来了,给你瞧瞧,可以说是包罗万象,应有尽有(入门→工具→框架→数据库→并发编程→底层→性能优化→设计模式→操作系统→计算机网络→数据结构与算法→面试→架构→管理)。
对打算从算法岗转 Java 后端开发岗的同学应该帮助很大。
———学习 Java 的建议———–
(认真看,记得点赞收藏,以后不迷路)
建议大家看看我这幅思维导图,帮学弟拿到过携程的实习 offer:
我可不是口说无凭,上证据。
为了给同学们一个更实质性的参考,我把大厂面试中考察的重点列举了一下。
操作系统、计算机网络、数据结构与算法,这些肯定是要学的,还有 Java 的核心知识点,以及一些框架原理,否则根本就进不了大厂。
重申一下我学习计算机的观点,我想这会对你快速建立起自己的知识体系很有帮助!并且,你应该按照我这个观点从大一就开始实践起来!
如果你要学习物理,我推荐你顺着物理的发展史学习,先学习牛顿的经典物理,再学习热力学、电磁学,然后学习相对论、量子力学这些彻底推翻经典物理的,最后学习电动力学这种硬核的。
整个学习过程,是自底向上的。但是学计算机,这样行不通。
先学习电路,然后学习冯诺依曼结构,造一台计算机?接着再学习如何用汇编写个 mini os?接着学习如何写一个简易版的编译器?最后再学习高级编程语言,比如说 Java、Python?
显然这样是行不通的!计算机的学习最好是自顶向下。
什么是顶?我想一门高级的编程语言就是,比如说 Java!
当你学习到 Java 并发编程中的“原子性”、“同步”、“异步”、“进程”、“内存分配”这些概念的时候,你自然而然会产生很多疑问,然后就会去学习计算机组成原理、操作系统,然后你的一系列问题就会逐渐被解决。
当你发现,用 Java 实现某个业务需求时,人家的算法实现比你快得多,你自然会好奇,为什么会这样?然后你发现人家用的数据结构和你的不同,然后你就会去学习数据结构,接着了解一些高效的算法,比如动态规划等。
一、Java 语言
可以先看看我整理的这份 GitHub 上星标 115k+ 的 Java 教程,里面涵盖了 Java 所有的知识点,包括 Java 语法、Java 集合框架、Java IO、Java 并发编程和 Java 虚拟机,内容不多,只讲重点。
然后到 B 站上看看尚硅谷或者动力节点的视频课。
动力节点:https://www.bilibili.com/video/BV1Rx411876f
尚硅谷:https://www.bilibili.com/video/BV1Kb411W75N
二、操作系统
操作系统是计算机系统中负责管理各种软硬件资源的核心系统软件,为应用软件运行提供良好的环境。清华大学操作系统课-学堂在线这门课程以主流操作系统为实例,以教学操作系统 ucore 为实验环境,讲授操作系统的概念、基本原理和实现技术,是一门非常值得推荐的视频课。
书籍的话,推荐《操作系统概念》 (“龙书”)和 《现代操作系统》 ,是操作系统领域的经典书籍。学完操作系统,你要能回答这些问题:
- 进程与线程简单介绍,区别,以及进程间通信方式,线程同步方式
- 用户态和内核态
- 内存管理:分页分段,虚拟内存,空闲地址管理方法
- 死锁:死锁的必要条件,死锁的检测与恢复,死锁的预防,死锁的避免
三、计算机网络
B 站上的这个计算机网络微课堂视频课非常不错,强烈推荐。
学完计算机网络,你要能回答以下这些问题:
- 七层结构,简单介绍一下每一层。
- 输入 URL 后,将发生什么?这个问题会涉及到很大一部分的计算机网络基础。
- HTTP 和 HTTPS,DNS 解析
- TCP、UDP、拥塞控制、三次握手、四次挥手、滑动窗口
- IP 和 ARP 协议
四、数据结构与算法
有算法基础的同学,这部分是最不怕的。国内最看重算法题的公司当属字节了,想去字节的同学一定要记得刷算法题。
我这里有一份美团大佬的 LeetCode 刷题笔记,纯 Java 版的,给你瞧一下内容。
我花了不少时间整理成 PDF了,对算法薄弱和需要提高算法的同学很有帮助:刷完 300 道 LeetCode 题后,我膨胀到要飘起来了!纯正 Java 版
再说一下我的刷题心得:从易到难,一遍一遍地刷,尽量使用自己熟悉的编程语言,比如说 Java 程序员尽量用 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 站上看一下江南一点雨的视频教程。
先学习 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
- 主从复制
- 事务特性简单介绍
常用的几种设计模式必须得清楚,比如:
我认为设计模式是初中级程序员迈向高级程序员的必经之路。有不少程序员,前期冲劲十足,但后继乏力,都是吃了设计模式的亏。在工作的前几年,大部分程序员都处于熟悉编程语言的阶段,也就是处于“技”的阶段,随后就要进入“术”的阶段了。在编程领域,“术”的典型代表就是“设计模式”。
你可能听说过,学习设计模式非常的重要,那么为什么这么重要呢,设计模式到底是什么?打个比喻学编程就像学武功一样。武功要练得很牛逼,有两样东西不能丢。第一,是内功;第二,是武功秘籍。内功对应到编程就是我们编程基础能力,那编程的设计模式就可以想象成武术中的武功秘籍。
推荐小傅哥的重学 Java 设计模式,持续霸榜 GitHubTrending。
不得不说,算法岗确实卷,没有研究生以上的学历,很难入算法岗的门槛,Java 后端开发岗就不同了,不管你是不是 985、211 毕业的,只要你能具备基本的素质,就能胜任对应的工作。当然了,Java 现在也是非常卷了。好的一点是,Java 的岗位多,需求量大!
这个世界上只有两种语言,一种是经常被骂的,一种是从来没有人用的——来自 C++ 之父。
而 Java,显然是经常被骂的那一种。这里骂显然不是一个贬义词,而是一个褒义词。
根据 JetBrains 2020 年给出的数据分析显示, 全世界大约有 520 万名专业开发者使用 Java 作为主要语言。详情参照:JetBrains 2020 Java调查报告
其中,中国和韩国使用 Java 的比例最高,分别为 51% 和 50%。
有一个很有意思的数据,Reddit(相当于国外版贴吧)上讨论最多的主题是:现在学习 Java 语言是一个好的选择吗?(Is Java a good language to learn today?)
这意味着什么?
意味着 Java YYDS!
当然了,Java 后端开发岗这条道路并不好走,不仅要学习很多新技术、新框架,还要及时补充必要的计算机基础知识,底子硬的同时还要学会拥抱变化。
但同时,大家要知道,Java 是一门面向对象的编程语言,凭借着简单性、健壮性、安全性、可移植性、多线程并发等等优势,迅速地占领了市场。
大型网站的后端,比如淘宝、京东都主要使用的 Java。
大型的企业级应用,比如大型企业管理系统,CRM 系统,ERP系统也都用 Java 开发。
还有像移动、联通、电信、网通这些大型企业,还有金融相关的大型企业,比如银行、证券,都与 Java 息息相关。
不夸张的说,学 Java,总能找到合适的工作岗位!学习的过程,就好像登山一样,大概有 80% 的人在这个过程中会掉队。那么请相信我,只要目标明确,努力加上坚持,再加上一点点好运气,你就能登顶!
我劝你在找工作之前刷一波面试题,做到有备而战,知彼知己,百战不殆。可以看一下 GitHub 上星标 100k+ 的这份面试攻略,这才是 Java 程序员应该学的东西。
衷心的希望,大家能在学习 Java 的这条路上快乐一些,纯粹一些,少听少看一些那些焦虑文,什么 35 岁,什么学历歧视,沉下心来,多学习一点知识,让自己变强一点,比什么都好!一家之言,必然有不尽善尽美的地方,但只要能对大家的学习有些许帮助,我也就很满足了!
我是二哥呀,大家记得收藏点赞呀!笔芯!
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/129484.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...