大家好,又见面了,我是你们的朋友全栈君。
不知道大家在大学的时候有没有这样的疑惑,做后端开发学Java还是C++呢?可能大家和我一样,都有过这种二选一的疑惑,如果我毕业后想从事Java后端开发,那么应该按照怎么样的路线学习呢?
网上关于这个话题的文章很多,但是大部分只是对知识点和模块的简单罗列,只是让大家知道有这么些东西要学,我从校招生的角度来谈一下这个话题,介绍一下我从学习C++转向学习Java的学习历程,主要讨论Java的学习路线和找工作相关的情况,谈谈我是如何在短时间内通过自学Java进入阿里和美团的。
当初选择语言的纠结
我大一大二的时候学习的都是C语言和C++,主要原因是当时没有考虑就业,还有就是学校课程的安排,我当时买了很多这方面的书籍并且花了挺多精力。
后来发现自己对科研不感兴趣,就打算毕业了直接参加工作,于是去网上了解了一下程序员就业的情况,当时发现Java技术栈校招就业机会相对比较多,就选择开始学习Java相关的技术栈了。
在确定完要学习Java之后,已经到了大二暑假,也就是大三了。当时完全是从零开始,靠自己从网上看一些零碎的信息,自己慢慢摸索进行学习,也走了很多弯路,所以今天想和大家分享一下学习路线和一些心得。
对Java语言的看法
我觉得Java是一门语法比较简单的语言,相对于C/C++更容易学习,提供的就业机会也相对比较多。
学过C/C++的同学都知道,这门语言更加接近于机器底层硬件,最大的特点就是可以用指针直接操作内存,语言特性也比较多且复杂,使用起来也相对于Java来说困难一些。C++目前用的比较多的领域是嵌入式、游戏服务器端开发、算法工程系统等等。
Java在后端开发中使用的还是更多一些的,Java语言是生态是最完善的一门语言,各种开源的工具非常多也非常好用,Java是一门平台无关的语言,使用JVM隔离了底层的硬件细节,有自动内存管理功能,所以也更加容易学习和上手。但是对于校招面试来说,Java需要准备的东西也更多。
虽然相关的内容比较多,但是如果是准备找工作的话,我还是建议大家学习Java。首先是招Java开发的公司比较多,机会也比较多。其次是对于一些使用Go/C++的大厂,在校招中是没有语言倾向的,例如腾讯、字节跳动,虽然我学的是Java,但是我还是能拿到它们的offer。但是相反,使用Java语言的大厂,一般是有语言倾向的,最典型的就是阿里和美团。
校招Java学习的路线
当初走过的一些弯路
我当时走的弯路是,在理论学习和实践中没有做到一个很好的平衡,我当时比较重视书上理论知识的学习,忽略了在实践中去写代码,所以在这一段时间里的学习效果并不好。
其实这里有两个误区,第一个误区就是因为面试中考察八股文比较多,所以认为理论知识比较重要,而不写代码了。第二个误区是只写代码不学习理论,认为我们是做开发的,只需要尽可能多写代码就行了。
其实我们在学习的过程中,理论知识和实践动手都很重要,首先是需要学习好理论知识,因为这是面试的重点,然后在动手实践中去使用我们学习过的知识,这样能够加深我们对知识的理解和提高我们的动手能力。
学习方法
因为我们需要对Java进行系统的学习,所以我推荐大家一定要看书,因为看书能够让我们对一个技术的学习更加全面。除此之外,我们也可以通过网上的一些博客和文章,来对某一个知识点进行深入学习,因为书籍为了全面地对知识进行讲解,所以可能在一些地方的深度存在欠缺。
这也是面试过程中,面试官经常会问我们喜不喜欢看书,看过哪些经典技术书籍的原因。
还有一个可以提高我们学习效率和面试能力的方法,就是我们依靠面试题来做导向学习,在学习的过程中重点关注高频面试考点,这样能强化我们对相关知识的记忆和学习,在平常就让我们重点关注,也能更好地去应付相关知识模块的面试。
在学习过程中,一定不能偷懒,要自己多记笔记多整理,根据费曼学习法,多做知识输出才能学习得更好。
学习路线
1.Java基础
首先我们需要学习的是Java基础知识,这一部分包括数据类型、流程控制、数组、面向对象、抽象类、接口、枚举、集合类、泛型、异常处理、IO流、反射。
这部分的学习我推荐《Java核心技术 卷一》这本书, 跟着书上的例子敲代码后,自主编写代码,并完成课后练习。不推荐看《Java编程思想》,虽然是最经典的一本书,但是对新手十分不友好。
在学习完基础的语法之后,我推荐大家学习一下Java核心类库相关的知识,这是一个重点,也是这个部分在面试中考察比较多的内容。这里我推荐一本书《Java修炼指南》,这是一本侧重于面试热点的书,里面有这些类库的详细解读,例如基础类(Object、String、包装类)、集合类(HashMap、ArrayList、ConcurrentHashMap)等等,还有并发包里面一些类的解读。
2.Java虚拟机
我推荐大家学习这部分的原因有两点,第一点是这部分经常在面试中被考察到,第二点是学习这部分能够加深我们对Java语言的理解。
这部分知识比较偏理论化,我建议大家看周志明老师的《深入理解Java虚拟机》这本书的其中若干个核心的章节,我建议大家学习的章节有Java内存区域与内存溢出异常、垃圾收集器与内存分配策略、虚拟机类加载机制、Java内存模型与线程、线程安全与锁优化等几个章节,这些章节也是这部分内容的重点。学习完这几个章节后,我们就可以对JVM的核心功能有一个大体的了解,对相关的原理也有了一个简单的认识,接下来学习这部分常考的面试题就行了。
3.Java并发
为什么Java并发我推荐大家在Java虚拟级之后学习呢?因为我觉得Java一些锁和同步机制的实现原理,比如syncronize关键字、volatile关键字、锁升级的过程、并发包,都与JVM底层原理有关,所以我建议在学习这部分之前,先学习一下Java虚拟机。
这部分的重点是Java线程模型和线程的生命周期、syncronize关键字的实现原理、锁升级的过程、volatile关键字的实现原理、JUC并发工具类、线程池的作用原理实现等等。
关于这部分我看过几本书,这部分我推荐大家看《Java并发编程的艺术》这本书,这本书是阿里巴巴两个非常资深的技术专家写的,写得非常深入浅出。
4.Spring框架
这部分我建议大家以掌握使用为主,因为这毕竟是一个工具嘛。根据面试考察的重点掌握一下核心的原理就够了,例如Spring的基本概念、SpringIOC的实现原理、SpringAOP的实现原理、SpingBean的管理。如果我们简历对这块内容只是简要写几点,一般面试官都不会对这块内容进行深入考察,我也建议大家不要在简历上写阅读过Spring源码,因为对Spring深入学习的学习成本也比较高,防止被面试官深挖这块内容。
学习Spring我建议大家以上手使用Spring框架为主,可以去github上找一两个项目来看一看,如果实在想看书,可以看《Spring实战》这本书。
5.MyBatis框架
这部分我同样也建议大家以掌握使用为主,这部分在面试中考察的相对较少,我甚至几乎没有被问到过,我简历上也没写MyBatis相关的东西。
结尾
最后要强调的一点就是,我觉得学习的过程中最重要的两点就是学习规划和坚持努力,我相信大家只要肯好好规划和用心学习,也一定能取得效果的,希望大家在这一点上能有信心。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160759.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...