写点什么

震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗?

  • 2021 年 11 月 12 日
  • 本文字数:3750 字

    阅读完需:约 12 分钟

操作系统、计算机网络、数据结构与算法,这些肯定是要学的,还有 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(循环栅栏)

  • R


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


eentrantLock 、 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%。

评论

发布
暂无评论
震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗?