首页 > 我们要学会什么才能进大厂实习(JavaWeb)
头像
王悟空
发布于 2021-05-11 14:49
+ 关注

我们要学会什么才能进大厂实习(JavaWeb)

最近拿了百度的offer,整理了一波书单给自己学校的师弟师妹,想了想,也分享过来了,原文链接:https://www.yuque.com/realsky/anything/yn70s0

标题之所以写Java Web,是这篇文章真的只适合Java Web岗,而且只适用于新手入门级别的。写作的角度和思路也是面向新手写的,希望新手以上的同志们慎重开喷。

文中涉及到的所有书籍和资料都是笔者自己看过的,绝不会乱推荐。

文中书籍提到的很多知识,很多东西可能是我们一辈子都用不上的,但是你要学,这是没有办法的一件事情,学很多东西并不是让你一工作就能解决什么样什么样的问题,而是在遇到问题的时候,你所学的知识能让你有一个正确思维的方式,遇到一个新问题的时候能在你所学领域中检索类似模式的错误或问题,然后按图索骥地去学习和解决新问题。

不要像点技能点一样去读书和学习,要思考,不停地思考,遇到新的技术知识要不停地问自己问题,尽可能的多问,把自己所有能问的问题都问自己一个遍,尽力的让当前学的知识和以前学过的知识联系在一起。

数据结构与算法

数据结构很重要,这点怎么强调都不为过,但是在这方面笔者并没有读过多少书,

入门
笔者当初读的是《数据结构与算法分析》,这本书是C语言描述的,而且是经典机械工业出版社黑书。如果读者没有C语言的基础不建议阅读此书,可另寻书籍或资料学习基础的数据结构。
算法方面入门级别的可以阅读《啊哈!算法》,这本书非常适合入门,但是缺陷就是知识点组织的比较松散,没有一个系统的结构,建议阅读此书之后,刷题慢慢增长。

这一步的目标是了解基础数据结构都有哪些,每一种数据结构常用的算法有哪些。

万不要纠结细节,如果一个算法看不懂,看两遍就跳过就好了,时间没有那么紧急,会有回过头来复习的时候。人面对数学相关的东西的时候都容易觉得自己是个***,所以看不懂很正常,记住那个算法是用来解决什么问题的,然后大胆跳过,下次再学。

刷题
了解到了基础的数据结构和算法之后,就可以开始做题了,用代码将你学的数据结构和算法去实现,推荐的网站:Leetcode。做题网站的使用方法请读者自己摸索。
进大厂的话,在leetcode做个三四百道应该差不多了,因为每个人学习效率的不同,很难说刷会哪几百道就能保证你学会,所以在这一步上很难量化自己的学习成果,更好的方法是多看看大厂的面经,看看他们算法题考到什么程度。
这里推荐一个网站:CodeTop,这是一个大佬将各类大厂面经中涉及到的算法题都对应到了Leetcode题上,甚至还标注了考题的频度,读者可以作为参考。

谨慎提醒,做题的时候一定要会看答案,一道题想了半个小时还没思路,就赶紧看题解,节约时间,目的是把题弄明白怎么写,而不是在你脑子里从零到有的推理出一个算法来。

这一步虽然只放了两个网站,但实际上是个天坑,读者做题的时候谨慎一些,不要上瘾,不要沉迷于此。

很容易计算,一天一道题的话,刷一年就刷的差不多了。
但实际情况不是这样,实际情况是你的遗忘速度超乎你想象,常见情况:

  • 上午刷的题,下午就忘了
  • 一道题抄了3遍题解还不会
  • 打开题解发现看不懂
  • 一道题盯了半个小时都没有思路
  • 打开题解发现了一种新的数据结构,然后吭哧吭哧学半天

这都很正常,理智接受就好。重点是,不要放弃

Java

语言
了解Java的语法和基础特性我推荐 Java教程 - 廖雪峰的官方网站
了解完语法之后可以阅读《Java编程的逻辑》,可以更深的理解Java中的各种概念,可以更多的了解到Java中常用类的使用方法。

如果你觉得上面2个看完了不过瘾,你可以阅读《Java 8实战》,学习JDK8引入的函数式编程。
如果还不过瘾,可以阅读《Java编程思想 (第4版)》,Java领域的圣经,对每个基础知识都讲解的非常详尽,不过这也是我不推荐一入门就读这本书的理由,因为太过详尽,容易让新手迷失在细节之中。

语法方面最忌讳的就是把语法当语文背,不要背诵语法,不要背诵某个类提供的函数的名字。
了解到某个类有什么功能就可以了,至于完成这些功能需要哪个函数,这个函数不同的重载是什么意思,完全没有必要背诵,要写的时候回来查就可以了。

JVM
如果你不知道什么是JVM,那读这本书就对了:《深入理解Java虚拟机(第3版)》。如果你知道了什么是JVM,但是不太了解JVM的实现细节,那么也读上面那本书。

如果你知道什么是JVM,还能很快说出JMM、常用GC算法、类的生命周期这些东西,请关了本文。

面试的话,JVM方面读一本就够。

并发
先看《Java并发编程实战》,圣经,看就对了。圣经之所以是圣经,就是在面对某一种情况的时候,把所有的解决方案都列给你了,让你能完整的学某一块知识。
再看《Java并发编程的艺术》,从更实际、更应用的方面写了并发编程的一些知识,有非常多的面试高频考点。

同样不要纠结于细节,比如笔者到现在都不知道如何对多线程程序做性能测试,但是如果让我去测,我知道《Java并发编程实战》中有写这方面的东西,可以回过头去学。

框架

框架方面,笔者没有推荐太多,因为不同的读者有不同的项目,项目所用的框架也各自不同。
但在Java Web方面,Spring是必学的,面试如果问到这方面问题,IoC、AOP是必问的。

你不知道什么是IoC、AOP也没关系,不用慌张。

Spring框架并没有比较好的技术书籍,《Spring揭秘》是一本,但是这本书已经停印了,读者可以含泪买盗版。

数据库

数据库方面笔者只列举了2个数据库:MySQL和Redis。这两个是面试高频考点,也是一个后端开发的基本功。

MySQL
基础的SQL语法、MySQL如何使用、安装等知识笔者没有什么可推荐的,请读者自行检索。这里的推荐书籍是有关MySQL原理的。

如果只读一本,请看《MySQL技术内幕》,涉及到了大部分的MySQL底层原理(其实也就是InnoDB原理)。
如果你看上面那本书不过瘾,感觉上面那本书讲解的不够细致,请看《MySQL是怎样运行的》,这本书可以拉出源码,画出图示来给你讲MySQL某一块功能是怎么实现的。

首先声明,此书并非全书必读,在笔者看来书中很多细节知识并不适合入门的人看:《高性能MySQL(第3版)》。如果要看,重点是3-6章。目的是学会如何设计数据库、了解数据库基础的优化。

Redis
Redis只推荐一本:《Redis 深度历险:核心原理与应用实践》,这本书可以从Redis能干什么开始讲,一直讲到Redis的底层原理和部分源码。它的好处也是它的坏处,正是因为起点太浅了,所以没有办法过多的讲源码,如果你觉得不过瘾,请自行搜索书籍。

操作系统与计算机网络

都是非常经典的基础知识,这块知识的最大问题就是你学了很久之后都不知道有什么用,但是大家都说他们有用,这就是内功。直到学了很久,才发现在我们所学技术之中随处可见操作系统和计算机网络的思想。
这部分没办法多说,细品。

推荐2本书
《操作系统导论》《计算机网络(第7版)》

软件工程

你平时一个人写代码BUG都那么多了,如果很多人一起维护一份代码,项目里有很多不是由你来实现的功能,你们如何协作?你们如何降低项目维护的成本?这就是软件工程做的事情,软件工程教会你如何维护越来越大的项目.
大体的解决方案有如下几个:

这部分学起来有点虚无缥缈的,笔者学的时候学的很爽,但是实际生活上又用不到,无处发力。
生活中、学校中并没有一个很大的项目让我们开发,协作的项目大多也没有完整的流程、合格的测试,甚至代码风格都无法统一。

但是,学学为好。不学软件工程方面的东西可能不影响面试和你在学校里的开发,但是可能影响转正)

这部分推荐的资料可能看起来比前面的知识更多一点,但是读者看下来就会发现,这部分的书籍看起来比之前的书籍看起来快多了

后话

不要觉得本文推荐了很多东西,要看很久。实际上一年左右完全可以看完(当然如果写代码要写多久才能完整掌握那得另算)。本文推荐的东西只是你未来要学技术的一个子集

书籍的推荐不具有权威性,仅是笔者一家之言,目标是学会那一块知识,至于如何学,笔者可以自行选择,不要盲从。

共勉。

全部评论

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

推荐话题

相关热帖

近期精华帖

热门推荐