08、Java 学习路线

厨子大约 12 分钟校招面试校招指南互联网程序员学习路线Java 学习路线

08、Java 学习路线

这篇文章时我请我朋友为大家写的,这个老哥贼牛批,希望这篇文章对大家有一丢丢帮助。

整个模块可以浓缩为一个字,那就是早!早就是优势,秋招对我们来说是非常重要的一场考试。所以我们越早准备越有把握。

我大概是去年的 9 月份开始准备的,感觉稍微晚了一些,不过也完全来得及。

现在还没有开始准备的同学,要行动起来了,再晚的话就来不及啦。

我秋招时,主要准备了以下科目,每个科目都看了 1 - 2 本书或课程。

  • 数据结构与算法 ⭐️⭐️⭐️⭐️⭐️
  • 操作系统 ⭐️⭐️⭐️
  • 计算机网络 ⭐️⭐️⭐️⭐️
  • Java 基础 ⭐️⭐️⭐️⭐️
  • MySQL⭐️⭐️⭐️⭐️
  • JVM ⭐️⭐️⭐️⭐️
  • Redis⭐️⭐️⭐️
  • Java 并发编程 ⭐️⭐️⭐️
  • Spring 全家桶 ⭐️⭐️
  • Linux⭐️⭐️⭐️
  • 设计模式 ⭐️⭐️
  • 1-2 两个能拿得出手的项目。⭐️⭐️⭐️⭐️⭐️

星星的数目代表被考到的频率,星星越多,我被考到的次数越多,大家可以先按照我的考察频率进行复习,后面再进行微调。

数据结构与算法

这里可以分为两类同学,科班和跨考生

科班同学的话,或多或少都会有一些基础,所以可以直接上手刷题,另外觉得自己有些生疏的话,可以看下先快速过一遍《大话数据结构》帮你快速回忆。

如果是非科班的话,还是建议大家先系统学习一遍,面试时不仅仅是让你手撕代码,还会问一些课本上的内容,比如某些排序算法的比较等。推荐书籍同样是《大话数据结构》我认为这本书,既简单又详尽。

刷题时推荐大家使用这两个网站

  • Leetcode
  • Acwing

前期可以使用 Leetcode 进行刷题,刷够一定量之后,感觉自己对某些题目有一些思路之后,再使用 Acwing ,Acwing 可以帮助我们模拟考场环境,因为你笔试的时候大多都是 Acwing 模式。

LeetCode 刷题时,可以按照标签刷,可以先按照数组,每个标签刷几道经典题目,等到感觉自己有些自己想法的时候,则可以刷 leetcode hot 100 和 剑指 offer,前期注重数量,后期注重质量,把那些经典高频的题目多刷几遍, 因为面试时,面试官让你写的大多都是经典题目,你曾经刷过的那些,所以我们要把这些题目烂熟于心。

还有极其重要的一点

尽早参加周赛,或者计时刷题,这样是为了让大家适应笔试面试环境,培养思维的敏捷性。遇到问题时快速找到突破点。这样笔试面试时,大家则不会慌张和局促。

另外再给大家推荐两个学习算法的仓库吧

第一个适合入门选手,可以结合大话数据结构一起复习,仓库大概有 150 张动画,模拟经典的排序算法及二叉树执行逻辑,还有一些模块下的经典题目,帮助刚开始刷题的同学快速入门,培养自信心。

另一个是卡尔哥的仓库,里面对每个模块下的经典题目都进行了总结,非常适合校招的同学,基本刷完这些题,大家就能够对每个模块有自己的心得啦。

算法这块还是建议大家,多多重复,百炼成钢,经典题目多刷几遍。

推荐书籍:《大话数据结构》,《剑指 offer》

项目

项目的话建议大家准备两个,有实习经验的同学,可以把自己的实习项目写上,这一块也是面试时的重点,甚至有的公司一整场面试全在问项目,项目我们不仅要提前准备,项目中用到的技术点,我们也要提前准备,并提前思考面试官会问到那些题目,并阅读一些相关博客。

这一块也要尽早准备不断完善,我是之前做过一个含金量还可以的项目。然后又**跟着地哥星球里的慕课视频做了一个秒杀项目,每行代码都自己打了一遍,并加了一些其他功能。**所以项目这一块准备的还算充分。不过刚开始时也处处碰壁,具体原因在下个模块再和大家详细唠。

大家这里可以去 Github,慕课网,哔哩哔哩找一些开源项目,自己动手敲一下代码,面试时则会更加自信。

推荐平台:Github,哔哩哔哩,慕课,地哥的星球

计算机网络

感觉除了项目,计算机网络问的是最多的了,三次握手,四次挥手,HTTPS,打开网址的过程,七层模型等这些都属于是高频考点。另外面试官还会进行一些拓展,比如三次握手过程中,客户端和服务端的状态变化,或者某一次握手时,有一方断开会怎样等问题,所以我们需要把这一块掌握熟练。

我当时的复习路线是这样的

《网络是怎么连接的》两遍

《图解 HTTP》两遍

《图解 TCP/IP》重点章节阅读 2-3 遍

《计算机网络自顶向下》重点章节阅读

《趣谈网络协议》百分之 60 章节,某些章节看了 2-3 遍

还有 小林 coding 的一些文章,有时候还会用 wireshark 抓一下包,刚开始我是很排斥网络的,后面学起来,越学越有趣。算是相对简单的一门课程。

我认为大家还是要系统学习一下,有自己的知识体系,后面对知识点的穿插很有帮助。

Java 基础

Java 基础的话,我没有看太多书籍,因为我之前就学习过 Java,后面的重点放在了看一些集合的源码上,常考的几个集合,比如 ArrayList,LinkedList,HashMap,HashTable,ConcurrentHashMap 等,我个人建议大家自己 debug 一下,跟着执行一遍,看下每个函数的逻辑。能让你的印象更深刻。

剩下的就可以根据某些面经和文章,整理一下 Java 常考的面试题,后面你会发现,面试的时候,这块的问题都被你掌握啦。

所以这块的学习重点就放在容器源码的阅读和面经上吧,另外如果没有学习过 Java 的同学,可以看下这个视频,看了几个视频感觉这个讲的最好。https://www.bilibili.com/video/BV1uJ411k7wy?from=search&seid=7142847222883537630&spm_id_from=333.337.0.0open in new window

推荐书籍:《Java 编程思想》,《Java 核心技术卷》

MySQL

数据库也算准备的比较充分,因为之前我写过挺多 SQL 语句,并且把牛客 80 道 SQL 题都给刷了,并且还阅读了一些书籍,主要有以下几种。没有基础的同学可以按这个路线学习。

  • MySQL 必知必会(一遍)

    一本小册子,一天就能搞定,帮你快速入门 MySQL,另外大家在学习时,可以自己下载一下 MySQL 官方的学习库,然后自己动手实践一下,虽然速度慢了一些,但是能够让你学习的更加扎实。

    官方的 employees 库,我们可以用来练习一下,连接,explains 命令等。

  • 数据库系统概论(好多遍,之前总看这本书)

    玫红色书皮的那本书,很多学校用来当作教材,这本书对数据库基础知识,查询语句,范式等讲的比较详细。这本书因为我之前学过几遍,后面再看的时候很快就读完了。个人认为还不错的一本书。有的学校研究生复试会考数据库,那么可以看下这本书,考点全面覆盖。

  • 高性能 MySQL(重点章节若干遍)

    非常牛皮的一本书,很多知识点在里面讲的很细,适合进阶的同学,如果你看了这本书,面试时,常考的那些知识点,你就可以得心应手啦。

  • MySQL 技术内幕(重点章节)

    这本书我没有完整的看下来,看了部分章节,比如那些常考的知识点,事务,索引等。也是非常棒的一本书,推荐给面试的同学。

  • MySQL 45 讲(看了百分之 70 大概,某些章节反复阅读)

    这门课我看了大概百分之七十,前面的十几讲 看了大概 3-4 遍,每次都有新收获,这门课适合有一定基础的同学,如果没有学过 MySQL 的话,看的时候可能会有些吃力。

  • 从根上理解 MySQL(某些章节)

    这个是掘金小册,也非常棒,但是我发现的有点晚了,后面抽着看了大概 1/ 2 吧。小册子对某个知识点说的很细,很透。

视频的话,我看的比较少,之前看过 MOOC 哈工大,战德臣 老师的课程,非常牛的一位老师,讲课风格也很棒,没有基础的同学可以看一下这个视频。

操作系统

操作系统的话,相对网络考的少一些,不过也是一门重点科目,大家可以结合哔哩哔哩的视频进行学习,感觉这门科目比网络难一些。基础较薄弱的同学,可以看下王道或者天勤,就是考研书籍,那里写的没有那么复杂,可能帮助你快速入门。后面的话再针对某些重点阅读其他书籍,进行深入学习。

推荐视频:https://www.bilibili.com/video/BV1d4411v7u7?from=search&seid=6302178952751913801&spm_id_from=333.337.0.0open in new window

https://www.bilibili.com/video/BV1uW411f72n?from=search&seid=6302178952751913801&spm_id_from=333.337.0.0open in new window

推荐书籍:操作系统考研书籍,《深入理解计算机系统》,小林 Coding 图解操作系统 电子书

JVM

JVM 的话,我只看了深入理解 Java 虚拟机,看了大概 3 遍吧。后面的话则结合面经重点看某些章节,感觉考察最多的还是垃圾回收算法和垃圾收集器等,比如 CMS,G1。这些都是一些高频问题。

个人建议大家可以先通过书快速学习,快速学习时,如果遇到看不懂的地方,可以先做好标记,等后面二刷,三刷时再认真阅读,后面可以再结合面经,对重点章节深入学习。

这一块的话,对于 Javaer 来说,也属于必考的科目,大家需要认真学习。

Redis

虽然我之前没有用过 Redis,但是我感觉这门科目还是比较容易入门的。我主要看了两本书。

《Redis 设计与实现》,这本书看了大概三遍吧,非常简单且全面的一本书。

《Redis 核心技术与实战》这是极客时间的一门课程,后面的话,主要是看这门课程,某些重点章节看了好几遍,还自己安装了 Redis,进行实践,并用到项目上。

考察比较多的问题就是底层数据结构,数据表现形式,数据不一致性问题,穿透,击穿等。都相对比较简单,看过书的话,基本都不会有太大问题,不过这一门课也是考察重点,大家需要认真学习。

Java 高并发

这门课我也主要看了两本书

《Java 并发编程之美》一遍半

《Java 并发程序设计》两遍

感觉第一本书,可以帮助我们入门,对一些锁和容器线程安全等概念有一些了解,后面的话可以看 Java 并发程序设计,我认为这本书非常好。当时看了两遍,还做了笔记,并自己动手实践和看了一些线程安全容器的代码。

这一块,我也没有特别多的心得,因为我感觉我自己学的也不太好,勉强可以应付面试,不过我的建议是,自己多动手实践,对技术保持热情。

常考的问题,synchronized 底层原理,volatile 底层原理,ReentrantLock 底层原理,线程池等。这一门科目也是 Javaer 必考科目,大家需要认真学习。

Linux

这个的话,考察的还比较多,因为平常我也会使用 Linux ,所以这一块也没有太为难,这个在以后的企业开发中,会经常使用,所以我们有必要提前进行学习。个人建议时间充裕的话可以看下 《UNIX 网络编程》那本书,虽然比较厚,但是干货满满,啃完之后能够收获很多。

设计模式

设计模式的话,考察的不是特别多,不过也被问了几次,经常的话就是让你手写一个单例模式,或者让你介绍你熟悉的几种设计模式,不会考察的太深,大家可以通过这个网站进行学习。

https://refactoringguru.cn/design-patterns/structural-patternsopen in new window

或者通过《大话设计模式》进行学习,了解几种常见的设计模式,足够应付面试啦。

Spring 全家桶

这一块的话,我主要是看的视频,面试时,问的也不太多,校招的话更多的还是注重基础知识。不过我们的项目中,会经常被问到。

大家可以看下这个 UP 的视频,我认为讲的很不错,通俗易懂。

https://www.bilibili.com/video/BV1Cv411p7cQ?spm_id_from=333.999.0.0open in new window

大家不要白嫖人家的视频哈,顺手给人点个赞。