首页 > Java系统学习整理
头像
六颗盒子经
编辑于 2021-04-12 15:09
+ 关注

Java系统学习整理

个人学习Java的路线

简介

本人北京某985大三,科班(软件工程),现在在一个小公司实习(时间比较自由,大厂出勤率要求太高),暑期实习准备去美团,已经拿到美团外卖商家端的实习offer,所以现在在这里简单分享一下Java的学习以及面试的准备,希望对大家准备面试和java学习有所帮助。

为何选择Java

首先还是简单说下为何选择Java作为自己的主要技术栈。我本人在大学里的大多数项目都是用python后端做的(django和flask)。java的项目很少。
但毕竟当前还是java盛行的时代,毕竟找工作优先,大厂中后端大部分还是选择Java,而且Java的生态还是其他语言无法比拟的,C语言对于我来说太过于底层,毕竟不是学硬件的。其次我个人对于Java的稳定性和规范性还是非常喜爱的。所以最终选择了Java。

Java学习路线

Java入门

我本人前序有C语言和简单C++的背景,对于Java的基础上手还是较为容易的

首先Java入门是我本人是学校大二上的OOP课程,对Java基础有了很简单的了解,深入程度很低。即简单的语法和JavaSE简单部分。具体课程应用也就是一个控制台程序。
大家如果纯小白入门的话,可以去慕课网看看Java的免费入门课程或者去b站找找(b站的都十分系统,动辄上几百集,可能需要一定心理素质去学习)
不过需要注意的是,如果是为了面试而准备,这部分基础知识一定要扎实,特别是Java集合、包装类、Java IO这部分,需要多花功夫。Java集合中HashMap、ArrayList、PriorityQueue的jdk源码是一定需要去看并且理解的。包装类的自动拆箱、装箱也是同样。

JavaWeb和框架

第二部分肯定就是JavaWeb了。我本人是在大二下通过b站上的黑马课程学习的(前前后后700集叭)。以Servlet、jsp、tomcat为核心的web基础,虽然后面已经忘得很多了并且面试也基本没有涉及,但感觉这种基本的东西还是需要用心去多看看的,为后面Spring全家桶埋下基础。
框架的话,我还是在b站上通过黑马课程看的,但深度不是很深,是入门级别的,Spring、SpringMVC、SpringBoot、Docker等等都有所涉及。这部分的学习还是就是一个尝鲜式的,要想真正理解,需要项目以及源码的辅助。比如b站上也有很多Spring源码的讲解,可以多啃啃,我本人是看的诸葛老师的一个Spring面试题速成的。
对于面试的话,因为我本身准备面试时也没有Spring相关的项目,所以也就没有很深入的进行学习,但如果要准备面试,至少Spring的基本注解、bean的加载过程、三级缓存、dispacherServlet这些还是需要掌握的。

JVM

这部分可以说是精华了,我是在大三上结束的寒假看的b站康师傅的课程(真的是经典,200集完全够面试斩杀了)。
这部分一旦了解了,对于很多JAVA的东西就融会贯通了。特别是对于JVM内存结构的理解后。真的非常推荐大家看康师傅的视频,讲得深入浅出非常透彻。具体的细节部分很多,这里就不赘述了,可以说JVM全是重点都不为过。

Java并发

这部分可以说是重难点了。juc包下的几大天王都需要深刻理解的。我个人是通过Java并发编程艺术、b站上找找、开课吧去白嫖一些课以及看别人面经最终形成自己的体系的
首先是CAS和volatile,这俩东西是基础,一定要理解好原理。
然后则是看AQS源码了,一定要完全理解,才能知道Lock到底是怎么加锁的,为何比没有优化前的synchronized效率快很多。然后就是semaphore、CountDownWatch,这俩。至少要知道是怎么用的。
之后就是synchronized了,锁的是什么,monitor的实现(jvm中会有涉及的),1.6优化后偏向锁、轻量级锁、重量级锁是需要完全理解的。肯定是面试必问,锁升级这些。
然后threadLocal的了解,底层的map实现,弱引用(jvm也会有)。
各种锁的了解,公平锁、非公平锁、乐观锁、悲观锁等等。
线程池的原理和参数。
线程之间的通信等等。
这部分内容很多并且全是重难点,需要很细心的去理解。

设计模式

这个把自己项目中用过的去理解就行,如果没有用过。去菜鸟教程把前几个写熟就没问题。面试保证自己有熟悉的并且能手撸出来就完事。

总结

这部分Java相关的学习完毕后,Java方面的面试应该不会有什么问题了。多刷刷面经就行。

OS和计网

这部分内容,科班出身的应该都是必学的,但是对于非科班出身的朋友们,OS去看b站陈渝老师的就可(90集),非常透彻的讲解了OS。计网的话,就需要多看书了(谢老师的),把书吃透就完全没问题了。
除了以上学习的内容外,面试时还会有很多别的内容。
io多路复用select、poll、epoll
tcp的各种异常情况的理解和处理
http的所有,需要掌握
这部分内容,很多通过面经也能整理的非常好

mysql

数据库,肯定是后端无法避免的东西了,需要很深刻的理解。我个人是学校学习了数据库课程(主要是sql方面的)
进阶版的索引和innodb以及mvcc、分库分表这些,是通过开课吧白嫖和b站以及博客自己学的,这些都是难点。
举几个面试例子
索引数据结构、innodb原理、mvcc好处、binlog、redolog、undolog这些。
这部分也不做过多赘述,需要大家去深度学习并且做项目理解。

linux

这部分就看平时做项目的运维多不多了,只要自己部署过几次,基本命令是没有问题的。
如果没有的话,只能自己多实践,这个只了解理论是不行的
甚至可以对nginx这些有很深的了解。

其他中间件

面试至少还是需要拿出一些自己熟悉的中间件的。这样才能脱颖而出。
我本人熟悉的有rokcetMQ、Docker、Nginx、Redis
其中redis应该是大家较为熟悉的,但我项目中没有使用,所以面试中问的很少,这里也就不总结了。
对于RocketMQ来说,面试更多问的还是选型方面以及消息消费方面的问题,具体原理也需要掌握。
nginx就了解一些进程模型以及基本工作原理也足够了。

算法

这放在最后,也可以说是最重要的东西了叭,毕竟是敲门砖。不然笔试都没法通过,谈何面试呢。
这个也没有快捷方法,刷题叭,leetcode至少刷个150题,然后基本笔试都能通过(除了某里的笔试)
如果没有刷题指南,可以私信我。之前找到一个很厉害的刷题指南。

最后

时间比较匆忙,整理的也不是很全面,所以把我从三月以来整理的面试题都放在这里给大家参考,应该会比这篇文章本身更有价值,也欢迎大家指正和讨论交流。
https://blog.csdn.net/qq_43780964/article/details/115622749

全部评论

(10) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期精华帖

热门推荐