零基础——java学习路线(下)

学习路线分上中下三篇,前两篇已经发布了,本文是学习路线系列的最后一篇。有没有提到的点学习疑问欢迎评论区留言~

公众号后台回复“资料”即可获取学习资料大礼包你想找的基本都有,外加一份博主整理好的精品学习资料一份。

第一篇文章中,主要讲解了:java基础、javaEE以及解答了项目相关的所有疑问;第二篇文章,主要回答了第一阶段学习完成之后的后续学习路线问题,主要是非常详细的书籍推荐。视频学习比较直观,非常适合初学者,而一本优秀的书籍可以帮助初学者更加深刻和全面的巩固知识。之前也强调过的第二点是:经典优秀的书籍是人们口耳相传下来的,这意味着你和面试官当年在求职准备的时候看的是书很可能是同一本,如果真是这样,面试的时候你自然能够给出面试官心中满意的回答。在第二篇中,博主列举的书单都非常经典,博主学校找工作同学大都都看的是书单列表中的书籍,这个书单也经受了很多年的面试检验,所以希望能够引起大家重视。

在前两篇文章的基础上,本篇文章主要由以下几个部分组成:

  1. 书籍推荐补充

  2. java还是C++

  3. 学习目标

  4. 学习进度规划

01 书籍推荐补充

**linux:“鸟哥的linux私房菜(基础学习篇)”。**这本书口碑很好,适合初学者,通俗易懂。linux主要考察常用命令、文件权限、虚拟内存、软硬链接等等。在讲解这本书应该看哪几章之前,强烈建议读者自己安装一个linux虚拟机,教程的话找度娘:“ubuntu 虚拟机安装”或“centos虚拟机安装”,搜索上面那两个关键词即可。初学者推荐centos,因为推荐的那本书上是按照centos系统讲解的,所以安装centos可以给初学者减少一些不必要的麻烦。安装linux虚拟机的时候可能会看到教程讲解配置虚拟机内存分区之类的,其实默认值就足够了,至少你不应该花费很多时间在纠结分区数量和分区大小上。网络上虚拟机安装的教程网络很多,也很简单。安装之后,再看书或者先看看书的第0、1、2章。至于第三章分区可以看看,但是安装虚拟机的时候使用默认值分区配置就好~,初学者不必在上面纠结。

书的话主要看:第0,1,2,3章随便翻一翻、第5章是最基本使用命令、第6章权限是考察重点、第7章、第8章(ext文件系统了解即可,关注下磁盘常用命令)、第9章、第10和11章建议看、20.1小节可以看看,其他没提到的部分可以不看~

另外看书最好要结合linux虚拟机,看书的时候,自己跟着一起敲一遍命令,这样会更加深刻,也能够很直观看到命令的作用。其实linux系统和windows系统一样,大家不要畏惧,用多了就好了啊,刚刚开始肯定不太熟练,不用太担心,主要是要多用,多动手操作。

扫描二维码关注公众号,回复: 5939761 查看本文章

计算机网络:“计算机网络(谢希仁)”。计算机网络最常见问题:OSI七层模型,每层干嘛的或者五层协议栈每层作用、TCP和UDP的区别、拥塞控制和流量控制、TCP三次握手和四次挥手等。书的话,博主看的是第六版,所以就按照这个版本来推荐看哪些章节:前六章建议都看。第一章1.7是重点,其他的作为了解,预备知识,随便翻一翻,有个了解就好。第二章:2.1、2.2、2.4建议看,2.6作为补充就好。第三章:看前三节、后面两节可以不看。第四章:看前五小节和4.7小节。整个第五章都需要看,重点。 第六章:从6.1开始,看完6.4.3以及6.6,第六章主要是应用层协议,协议比较多,建议都翻一下,了解协议大致的用途功能就好了。

操作系统:博主是通信专业,没有特意去看操作系统的书,身边同学也没有特意去看的。面试问到相关的就坦然说自己对操作系统不是很熟,另外就是可以上网上找面经,操作系统常问的面试题,然后找到答案,自己弄懂就好了。书籍的话,周围师兄和同学推荐“深入理解计算机操作系统”或“现代操作系统”这两本书,书都很厚,博主当时实在看不过来,而且当时身边同学也都没看这两本书,主要是要学的东西实在太多了,而且操作系统的书都很厚…

基于上面两点,博主和身边的小伙伴们都没有专门去看操作系统相关的书。所以呢,也就给不了你们太多意见了,操作系统重不重要?肯定重要,面试必问。要不要看?建议看,不鼓励博主这种冒险行为。

02 java还是C++

C++和java的选择问题,该是世纪之争,这问题对于博主已经超纲了。下面博主谈谈自己和识别同学对这个问题的看法(不一定对,仅供参考):

1

博主了解到java和C++就业形式:今年而言,C++找工作应该比java好一些,这也是实验室同学的看法;C++待遇方面比java好;整体就业来说没有说谁一定比谁强或者弱,也就是这两种语言都是找工作的主流语言。

2
怎么选?博主向同学了解了C++的一些情况:C++学的东西比java要少:C++基础、网络、linux好像大概就这些;而Java呢:java基础、linux、网络、SSM等框架、分布式框架、消息中间件。java面试中的linux和网络要比C++要浅,但是javaEE那些框架就够你喝几壶的了,何况还有懂框架源码。另外,分布式、消息中间件这些你不但但要会用,更重要的是要了解底层原理:如何实现高可用、如果实现消息不丢失等等一些原理。当然不要被我吓唬到了这些其实并不非常难,只是东西有点多~

3
那java优势呢?按照上面这么说java就一无是处了。java学的东西多,但是这也意味着java的选择很广,java可以做web后台、客户端、分布式、大数据等等,而且javaEE用的也很广,各种网站就不用说了吧,阿里系主要就是java。C++就业相对要“窄”一些,C++偏底层一些,所以操作系统、网络这些要求较高。偏底层就业选择相对窄一些。这里说的相对指意思是不是压倒性优势。

4
如何选择?在和走C++方向的同学聊天过程中了解到:C++的项目基本都是来自实验室,很少网络上找项目,主要是不好找…C++做图像、深度学习相关的实验室较多,他们的项目也是大多来源于此。也就是如果你的实验室没有较好的C++项目背景,建议走java方向,除非你解决了C++项目问题。反过来看java:应该很少实验室说是java方向,但是java自学相对比较简单,重要的是如果实验室没有“拿得出手”的项目,选择Java的同学可以在网络上找,而且在网络上找java项目的同学不是少数,因为javaEE项目网络上遍地都是,当然有时候这也带来了选择问题。但是如果你实验室有C++相关项目,那么你可以考虑选择C++。

5
最后,上面所有的都是身边同学的大致看法,不一定对。最后选择什么方向还是得自己做选择。最好的方式是和你实验室/周围的师兄师姐聊聊天,多向师兄师姐们取取经,这才是合理的“实验室特色”职业方向选择。实验室之间差异很大,但是你们的师兄师姐在历经秋招之后,他/她们对求职的感悟对你的参考价值很大,希望大家重视这一点建议。无论你选择java和C++,可以肯定的是,它们都是主流的语言;在秋招时的需求量都很大,这一点大家大可放心。

03 学习目标

做一件事情,首先要明白你的目标,即你要做成做好这件事情,你最后需要做到什么地步,不仅仅是求职,因为目标可以给你方向和动力。下面列举出的考点都是面试重点,你在面试中将会遇到下面90%以上的问题(面试问题也就是你的目标),如果不信,欢迎来年秋招评论区打脸:

在基础篇中讲到的基础究竟包括哪些东西呢?注:下面这些先看看就好,不会也很正常,但是七月中旬的时候下面的问题你必须得会了[图片上传失败…(image-a0d8e9-1555558353081)]

1
java语言基本使用能力;面向对象特性;类、接口、抽象类区别;重载、重写区别;JDK8新特性、JDK容器源码:HashMap、ArrayList、LinkedList、AQS、ConcurrentHashMap等;JDK concurrent包下的源码;java虚拟机:内存模型、gc、类加载、异常的分类和排查;设计模式(最好找到JDK或者spring等框架中中对应场景);排序算法;Object中的方法;如何排查OOM;如何判断死循环;违反双亲委派模型的案例;java反射和CGLIB原理以及异同;阻塞队列的源码(要求手写实现,重点);创建对象的四种方式等等。

2
多线程并发:synchronize特性、volatile特性、JMM中的原子操作(read、load、use;assign、store、write)、countDownLatch和CyclicBarrier异同点;线程池参数、类型;如何让多个线程有序运行;生产者消费者等;创建线程的三种方式;进程和线程之间的区别;进程见间通信的方式;会写简单的sock通信代码;IO 操作;如何让多个线程顺序执行等等。

3
数据库:mysql索引底层实现:B+树;索引失效场景/原因;SQL优化;SQL注入等相关web安全问题;MySQL主从复制;Redis常用数据结构(能看一两数据结构源码最好);Redis集群;Redis分布式锁;持久化AOF、RDB;Redis应用场景、解决了什么问题、秒杀系统;基本SQL语句、ACID、隔离级别、MVCC、行锁和表锁等。

4
javaEE:get、post的区别;request头;response头;这块问题大多和你的项目有关,session和cookie、SSM框架,spring源码(能看多少是多少,一定会问)。spring解决了哪些问题、spring的IOC,AOP,spring事务、spring bean。springMVC生命周期,一个完整的http请求包括哪些流程、https访问流程:加密解密(对称加密和非对称加密);servlet生命周期。项目如何考虑分布式问题。

5
linux:虚拟内存、查看某个进程使用的内存,cpu、查找某个文件、查找某个大文件中的关键字所在位置;查看磁盘使用;用户空间和内核空间的区别;linux常用命令;chmod,ps,top,grep,linux软硬链接、权限等等。另外,有的公司也会问:select、poll和epoll异同。

6
系统设计:给定一个现实场景,让你完成对应系统的设计。keep:如何实现360的开机时间、百度:实现QQ通信,问的很细,包括协议;度小满:秒杀系统设计。后面会有相关文章总结。

7
计算机网络:OSI七层模型、经典五层模型、tcp三次握手四次挥手、流量控制和拥塞控制、tcp和udp区别、如何解决很多个tcp连接处在time_waiting状态等等。一定要能画出三次握手和四次挥手的状态图,以及记住每个状态的名字。

8
算法:牛客网,LeetCode。大部分面试的算法都是这两个地方的原题,一定要刷题,一定要!!!公众号后面会有重点算法讲解。

9
分布式:zookeeper及其应用场景,zookeeper可以解决绝大部分面试中的分布式问题:高可用、分布式读写锁、分布式共享锁、分布式队列等等。所以感觉学习zookeeper性价比很高。

上面只是告诉你七月中旬应该掌握到一个什么程度,也就是你的目标,而不是你现在就该掌握。如果你在3月份实习之前掌握了上面大部分内容,大部分公司面试都没什么问题。3月份欢迎评论区打脸~

注意上面说的是掌握和理解,而不是死记硬背,这是重点。你要记住,只有自己真正理解了的知识才属于你。

公众号陆续会帮同学们总结上面对应重点考点,会有对应的文章,并且保证通俗易懂。欢迎同学们关注订阅,如果有疑问和建议欢迎评论区留言。

有了目标、方向,下面就是学习时间进度规划和怎么学的问题?

04 进度规划

需要学的东西这么多,那时间该如何安排呢?首先要明确一点,每个人的基础都不一样,每一个部分需要的时间都不一样,所以下面的时间线只能是一个大概,而且只能作为参考,学习时间规划因人而异,仅供参考。

下面的进度是以走秋招路线为参考的,秋招的时间点这里以7月中旬为参照点;实习的参照点是开学之后的半个月。这里参照点的意思是:到参照点这个时间你应该完成上面所有知识的学习。

1
7中旬之后逐渐进入内推高峰期,有的公司内推没有笔试,即使有笔试也比秋招的笔试简单些,所以大家要抓住内推的机会。也就是在七月中旬的时候,所有知识你应该都要很熟了,不仅仅是看过一遍而已,要达到“上战场”的水平,七月中旬之后呢?这期间大部分时间会在面试:有视频、电话面试、有的要跑到酒店去面试,也就是七月中旬之后你们大部分时间都是在做笔试、面试和在去面试的路上;面试之余呢,应该总结/完善面试中碰到的知识点,查漏补缺,以及刷算法题或者温习以前刷过的算法。到九月的时候,你们80%的时间会花在去面试的路上,一天可能会有三四场面试。

基于这一点,建议把平时的笔记写在“云上”,也就是写在可以同步到手机AAp上,这样在地铁上的时间也可以利用起来。周围同学用的最多的两款在线笔记APP是:有道云和为知笔记。有道云笔记免费,好像还可以;博主用的是为知笔记,注册送100天试用期;试用期过了之后,还是可以记录笔记的,但是不能实时同步到手机上;不过为知会员也便宜,60一年。大家自己选择就好,其他有些很好的在线笔记APP可能博主不太知道,这里只是建议。

2
也就是七月中旬你要达到“上战场”的水平;在七月中旬之前呢?你得花时间温习以前学过基础、项目、源码、以及刷算法。那么算法该怎么刷呢?首先得明白算法是刷不完的,所以要有重点,这里给出个人建议,就博主的面试来看,面试中的手写算法非常重要,如果算法没写出来或者没有任何思路,面试基本凉凉,这里丝毫没有夸张,希望能够引起大家的重视,那么该刷哪些算法呢?

后续公众号会有重点算法讲解,另外就是:牛客网->题库->在线编程->剑指offer。上面一共66道题,每道题都是重点。很多公司比较“懒”,面试直接问上面的原题。这里说的刷算法完全不是说“我看过一遍”就行,要达到提到上面任何一道题你都立刻就能给出解题思路以及手写出代码实现。也就是得刷多遍,开始的时候可能刷题进度很慢,这没有关系,大家刚开始的时候都是这样,如果实在不会:看评论区/讨论区点赞最多的回答,把思路吃透,一定理解通透,不要“死记硬背”,理解过后知识才会变成你的。这样下来第二遍就会轻松很多,第三遍就可以做到对于上面的任何一道题都可以信手拈来。

上面的题刷完后,另外就是LeetCode上的Top100,这是面试公司最常问的100道算法题总结,完全吃透这100道题和牛客网上的66道题,面试算法题大部分没有什么问题,LeetCode上一共800多题,上面166道就已经可以应付大多公司的面试了。有余力的同学可以刷其他的算法题,没有余力也没多大问题,但是得是完全吃透这166道题。这之后不仅仅面试算法,笔试算法题你也可以独挡一面了。登录LeetCode->problems这是可以看到大概800多道题按编号排列;最右边可以找到“Top 100 Liked Questions”这就是上面那100道题的入口,和牛客网上一样刷题时注意利用评论区/disscuss的回答。刷算法基本是贯穿求职后半期,即三月份之后。而且算法得做到“吃透”。

在开始刷算法之前呢?在这之前你得看一些求职面试必备书籍,书单列表在之前这篇文章中有详细说明。

在看书之前呢?你的学完java基础、javaEE、数据库等等。然后认真准备项目之类的。

上面说的那些“流程”并不是按部就班进行的,上面只是给出了一个大概的顺序。在实际求职准备中,大部分是交叉进行的。因为长时间一直做一件事情很容易烦/暴躁,所以交叉学习、合理安排时间非常重要。

说了那么多,同学们心中一定要有个大概的时间线:到几月份,自己应该完成哪部分;之后该做什么;到七月份的时候自己应该到达一个什么水平。时间线可以给你动力,目标的切分很重要:那一个个小目标其实就是你求职路上一个个加油站,加油站走完了,目的地自然也就达到了。

有句名言叫:“爱分享的人,最后都成为了大神”。知识无价,如果你觉得有用,不妨分享给更多的小伙伴。


扫描下方二维码,及时获取更多互联网求职面经javapython爬虫大数据等技术,和海量资料分享:公众号后台回复“csdn”即可免费领取【csdn】和【百度文库】下载服务;公众号后台回复“资料”:即可领取5T精品学习资料java面试考点java面经总结,以及几十个java、大数据项目资料很全,你想找的几乎都有

扫码关注,及时获取更多精彩内容。(博主今日头条大数据工程师)

推荐阅读
公众号初衷

全网最全最优全套学习资料

你要找的项目的群都在这了

零基础—互联网学习路线(上)

零基础—互联网学习路线(中)

offer分享(包含offer截图)

猜你喜欢

转载自blog.csdn.net/liewen_/article/details/89376847