前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这该死的建议,总是这么靠谱~

这该死的建议,总是这么靠谱~

作者头像
沉默王二
发布2021-05-11 10:43:00
5090
发布2021-05-11 10:43:00
举报
文章被收录于专栏:沉默王二沉默王二

大家好,我是二哥呀!

之前在知乎上回答了一个问题:学习 Java,知识点太多记不住怎么办。虽然赞数不多,但排在了这个问题下的第 3 位,说明看过答案的同学还是挺认可的。

讲良心话,初学 Java 的时候我也记不住,和题主的感觉简直一毛一样,是不是因为 Java 的知识点太多了呀!我想,应该还有很多 Java 初学者会有这种困惑!

但随着时间的推移,我发现,Java 的知识点也就那么点嘛,一张思维导图就能把它装下,不信大家看。

图片内容参考自 Hollis 的成神之路

看到这,可能有些同学会说,这么一大张思维导图,Java 的知识点还不算多吗?“我都要被你劝退了,好不好?”

别别别,能用一张思维导图列出来,真不算多!重要的是掌握学习 Java 的方法。从这张思维导图上,我们可以得出这样一些结论。

Java 的知识点可以分为 6 个方面,分别是:

  • 基础篇
  • 底层篇
  • 进阶篇
  • 高级篇
  • 架构篇
  • 扩展篇

当我们处在基础篇的阶段时,就容易感觉 Java 的知识点比较多,记不住,难学!等到了高级篇和架构篇,就不会再这么觉得了,因为重在运用,而不是死记硬背

1)基础篇

关于 Java 基础篇的学习,我之前给大家推荐的 GitHub 上标星 115k 的 Java 教程,可以先看一看:包括 Java 核心、Java 集合框架、Java 并发编程和 Java IO,非常全面,是我花了一周多时间手工整理的,非常辛苦。大家可以点击链接去下载一波。

看完这份学习资料,可以说对 Java 就有了一个全面的认知,就像你站在高空,鸟瞰了整个 Java 的世界。

有了这个基础之后,你可以选择看书,我推荐 《Java 核心技术卷》,分为上下两册,上册的难度较低,可以在短时间内刷完。下册涉及到的内容有流与文件(☆)、XML、网络(☆)、数据库编程、国际化、Swing、AWT、JavaBean、安全(☆)、脚本编译和注解处理、分布式对象、本地方法(☆),没有标星的内容我认为可以略过。

然后再看一看 《Java 编程思想》,看自己是否能驾驭得了。因为思想的东西嘛,只有经过一些实践后才能有所感悟,有了前面的基础,再看这本书难度会比较小,另外像图形化界面编程的知识可以跳过不看,也能省下不少时间。

视频的话,可以看一下浙江大学教授翁恺老师的。在浙大,每年最受关注的内容之一就是永平奖的百万大奖会花落谁家。2018 年,获得永平杰出教学贡献奖的人,就是翁恺教授。

https://www.bilibili.com/video/BV1DJ411B7cG?p=3

翁恺教授可以说是浙大的网红教授,非常受欢迎,网络上各种风评都很不错。

他的 C语言程序设计,我也推荐大家看一看,可以到慕课官网上看,有认证,也是国家级精品课。

C语言是一种“很高级”的编程语言,并且不专用于某个特定的领域,但 C语言通用性强,使用起来方便、高效。它与 Unix 系统之间存在着密切的关系,一开始,C语言是在 Unix 系统上开发的,随后又重写了 Unix,以及在 Unix 上运行的大部分程序。

当然了,C语言并不受限于操作系统,它很适合用来编写编译器和操作系统,因此,要想在编程这条路上走得更远,更深,C语言基本上变成了必选项,可以早点学,也可以晚点学,但一定要学。

2)底层篇

估计很多同学和我一样,一开始学习 Java 虚拟机是因为面试要被问到,所以硬着头皮学了一段时间,结果发现很难。但如果想要更深入地理解 Java 这门编程语言,以及排查线上问题和性能优化,Java 虚拟机基本上可以说是绕不开的。真正的 Java 技术大佬,在 Java 虚拟机方面都是牛逼得不能顶。

计算机比较“傻”,只认 0 和 1,这意味着我们编写的代码最终都要编译成机器码才能被计算机执行。Java 在诞生之初就提出了一个非常著名的宣传口号: "一次编写,处处运行"。

Write Once, Run Anywhere.

为了这个口号,Java 的亲妈 Sun 公司以及其他虚拟机提供商发布了许多可以在不同平台上运行的 Java 虚拟机,而这些虚拟机都拥有一个共同的功能,那就是可以载入和执行同一种与平台无关的字节码(Byte Code)。

有了 Java 虚拟机的帮助,我们编写的 Java 源代码不必再根据不同平台编译成对应的机器码了,只需要生成一份字节码,然后再将字节码文件交由运行在不同平台上的 Java 虚拟机读取后执行就可以了。

来看一段代码吧。

代码语言:javascript
复制
public class Main {
    private int age = 18;
    public int getAge() {
        return age;
    }
}

编译生成 Main.class 文件后,可以在命令行使用 xxd Main.class 打开 class 文件(我用的是 Intellij IDEA,在 macOS 环境下)。

对于这些 16 进制内容,除了开头的 cafe babe,剩下的内容大致可以翻译成:啥玩意啊这......

想知道这些玩意是什么玩意?就得下劲学习 Java 虚拟机和 Java 字节码。怎么学?我最近刚好写了 5 篇这方面的文章,没看过的同学可以看一看,学一学,入入门。

好家伙!JVM 内存区域划分得这么洒脱

携程面试官竟然问我 Java 虚拟机栈!

一把小刀,直插 class 文件的小心脏

Java 字节码概览

Java 字节码指令,让我发了疯疯疯!

尤其是在校的大学生,特别是大三大四的时候,一定要把 Java 虚拟机这块内容给吃一吃,这方面的知识是区分你到底是个渣渣还是个技术扛把子的分水岭。推荐周志明老师的《深入理解 Java 虚拟机》,可以说是这方面的圣经。上市 10 年,累计销量超过 30 万册,公认的经典。

3)进阶篇

先来看框架部分。

大部分学 Java 的程序员最后都要从事 Java 后端的开发工作,自然也就离不开 Spring 的系列框架。Spring 框架早已成为 Java 后端开发事实上的行业标准,如何用好 Spring ,也就成为 Java 程序员的必修课之一。同时,Spring Boot 和 Spring Cloud 的出现,可以帮助 Java 程序员更好地基于 Spring 框架及各种基础设施来快速搭建系统,可以说,它们的诞生又一次解放了Java 程序员的生产力。

所以,Spring Boot 和 Spring Cloud 已成为 Spring 生态中不可或缺的一环。想成为一名合格的 Java 后端工程师,Spring Framework、Spring Boot、Spring Cloud 这三者必须牢牢掌握。

首先来学 SSM(Spring+SpringMVC+MyBatis,企业级应用的必须品)的整合教程,哪怕是已经有了 Spring Boot,SSM 仍然是必学的,能打下更坚实的基础。

其中 Spring 是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。它可以装载 Bean(也就是 Java 中的类,包括 Service、Dao 里面的),有了控制反转这个机制,我们就不用在每次使用类的时候先初始化,用 new 关键字声明。另外,Spring 的 AOP、事务管理等等都是我们经常用到的。

SpringMVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

MyBatis 是一个支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 对 JDBC 做了封装,它让数据库底层操作变的透明。MyBatis 的操作都是围绕一个叫 sqlSessionFactory 的实例展开的,通过配置文件关联到各实体类的 Mapper 文件,Mapper 文件中配置了每个类对数据库所需进行的 SQL 语句映射。在每次与数据库交互时,通过 sqlSessionFactory 拿到 sqlSession,再执行 SQL 命令。

推荐大家看 B 站上的视频教程,结合弹幕会比较轻松一些

尚硅谷 SSM 整合实战:

https://www.bilibili.com/video/BV17W411g7zP

尚硅谷 Spring 5:

https://www.bilibili.com/video/BV1Vf4y127N5

2021 年最新版 Spring MVC 视频教程:

https://www.bilibili.com/video/BV1qp4y1n7D1

2021 年最新版 MyBatis 视频教程:

https://www.bilibili.com/video/BV1c54y1a7GE

然后是 Spring Boot。Spring Boot 是由 Pivotal 团队提供的一个全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。说句人话就是,Spring Boot 不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。使用 Spring Boot有什么好处其实就是简单、快速、方便!我推荐看纯洁的微笑的博客,访问量在千万级别以上,影响了无数的 Spring Boot 初学者。

http://www.ityouknow.com/spring-boot.html

在云计算日益普及的今天,微服务架构、云原生应用等概念也逐步被大家所接受,大家对大规模分布式系统早已司空见惯,这也对开发者提出了更高的要求。Spring Cloud 在 Spring Framework 与 Spring Boot 的基础之上,为分布式系统的开发提供了一套经过实践验证的常见模式,比如服务的发现与注册、服务的熔断与限流、服务配置、服务链路追踪等等。基于 Spring Cloud,开发者能够很快开发出一套分布式系统,以此满足不断变化的业务需要。

纯洁的微笑后来也出了 Spring Cloud 版的:

http://www.ityouknow.com/spring-cloud.html

工具篇分三块知识点:Git、Maven、Intellij IDEA

顾名思义,版本控制系统(Version Control System)是一类用于追踪源代码改动的工具,这些工具可以帮助我们管理代码的历史记录,不仅如此,还可以让协作编码变得轻而易举。

版本控制系统非常重要!!!!!!即便你只是一个人在编码,它也可以帮助你创建项目的快照、记录每个改动、创建不同的分支等等。如果你参与的是多人协作,它更是一个无价之宝,你不仅可以看到别人对代码的修改,还可以同时解决由于并行开发带来的冲突。版本控制系统有很多,其中最突出的代表就是 Git。

牛逼的Git

Apache Maven 是一个项目管理和自动化构建工具,基于项目对象模型(POM)的概念,可以管理项目的构建、报告以及文档。作为 Apache 组织中的一个颇为成功的开源项目,Maven 主要服务于基于 Java 的项目构建、依赖管理和项目信息管理。Maven 方面,我还没有写过对应的教程,后面打算补一补——同学们可以惦记着。

Intellij IDEA,不用说,是编写 Java 程序的最佳 IDE,必须得掌握。初次使用的话,建议阅读一下《IntelliJ IDEA 简体中文专题教程》,GitHub 上已开源:

https://github.com/judasn/IntelliJ-IDEA-Tutorial

计算机网络部分的视频我推荐湖科大教书匠的《计算机网络微课堂》,制作得非常用心,是一部不可多得的佳作。

https://www.bilibili.com/video/BV1c4411d7jb

计算机网络在面试中也经常被问到,比如:

  • TCP 为什么三次握手?四次挥手?
  • TCP 为什么要有 TIME_WAIT 状态?
  • TCP 为什么是可靠传输协议,而 UDP 不是?
  • 键入网址到网页显示,期间发生了什么?
  • HTTPS 握手过程是怎样的?
  • ….

有过面试经验的同学应该能感受到,计网的重要性。推荐大家看一看小林的图解网络。

最后是设计模式部分。写代码是门手艺活,初学者的代码一般都写的比较烂,当然包括我在内了,一开始写的代码现在真的是不忍心再看。简单来分析一下代码写得烂的原因哈。其一,可能是刚入门,代码写得少,如果我们满打满算只写过一两千行代码,是不可能写出多优雅的代码的。其二,可能我们不懂设计模式,设计模式是软件设计中常见问题的典型解决方案,它们就像能根据需求进行调整的预制蓝图, 可用于解决代码中反复出现的设计问题,如果不懂设计模式的话,遇到这些问题就只能抓瞎了。

这么说吧,设计模式玩得炉火纯青,写出的代码就更优雅,阅读起来也会更加舒服,可维护性、可扩展性就更强。说到这,我确信大家已经了解设计模式的重要性了!那该怎么学好呢?我给大家推荐一个学习网站:Refactoring Guru。

4)高级篇

先说数据库部分

学习一门编程语言,如果不去操作下数据,就感觉这门编程语言空有皮囊却没有灵魂,对吧?要想学好数据,首先要学习一下 SQL,推荐《SQL 必知必会》,然后是 MySQL,推荐《高性能 MySQL》。再拓展的话,还有 Redis,互联网技术领域中使用最广泛的存储中间件,推荐《Redis 深度历险:核心原理与应用实战》。还有 MongoDB,非关系型数据库,推荐《MongoDB权威指南》。

操作系统部分

为什么要学习操作系统呢?第一,面试要考;第二,无论学习哪门子编程语言,比如说 Java、C/C++,都需要和操作系统打交道,像 Java 中的多线程技术,其实是由操作系统来负责进程和线程管理的;第三,学习操作系统,还能学到内存分配方面的知识。可以先看一看《现代操作系统》,知道 OS 的大概;然后再看《操作系统—精髓与设计原理》、《Linux内核设计与实现》、《鸟哥的 Linux 私房菜》。

计算机组成原理部分

思维导图上没有列出来,这部分也是比较重要的。计算机是由 CPU、内存、显示器这些设备组成的硬件,但我们大学毕业后,往往从事的是软件方面的开发工作。那怎样才能在硬件和软件之间自由穿梭呢?答案就是学好计算机组成原理。弄明白了计算机的组成原理,也就对整个软件开发有了一个系统的认知,不论是计算机的硬件原理,还是软件架构,都能很好的驾驭,随之而来的,我们的职业发展机会也就更多了。计算机组成原理这门课完全可以用一个词来概括,就是“抽象”。在我看来这也是整个计算机设计中所蕴含的的灵魂。把《深入理解计算机系统》这本书吃了吧!

数据结构与算法部分

无论什么时候,程序=数据结构+算法这种说法都是成立的。Java 中的线性数据结构有数组、链表、栈、队列,非线性数据结构有树、哈希表、图等等。常见的排序算法有:选择排序、冒泡排序、插入排序、快速排序、归并排序、希尔排序、基数排序、计数排序、桶排序、堆排序等等。常见的查找算法有:顺序查找、二分查找、插值查找、斐波那契查找、树表查找等等。常见的算法有:KMP算法、贪心算法、回溯算法、动态规划、递归算法等等。

我之前给大家推荐的《纯 Java 版的 LeetCode 刷题笔记》一定要看一看,借鉴一下解题思路。算法学得好,大厂小厂的 offer 基本上就有 70% 的把握了!

5)架构篇和扩展篇

啥都不说了,一图胜千言,到了这个阶段,已经到了忘我的境界了,心中早已经没有了 Java

最后,再 BB 几句吧。

无论什么时候,找到学习的目标,以及学习的套路都非常的重要。找不到的话,就只能事倍功半,付出了很多努力,却迟迟得不到最好的回报。有句话说得好,学习的时候一定要把自己当成一台计算机,既有输入,也要有输出。只输入不输出会堵塞,只输入不输出会枯竭。

1)要有危机意识

计算机这个行业已经很卷了,对吧?但每年依然有大量的新人涌入,你不刷题,你不下劲,自然就会有人把你甩在身后。想要拿到满意的 offer,最好按照我说的来!该打基础的使劲打!饱和和咱没关系,卷和咱没关系!

2)伟大的牛逼之前总是傻逼式的坚持

你可能会在很多地方看到一些大牛侃侃而谈,似乎他们在吹逼。但要看到他们背后的辛苦,他们背后付出的努力。敲代码是门手艺活,不信看看你键盘上的 ctrl+c 和 ctrl + v,哈哈哈,调皮下~~~~该敲的代码一定要敲,就像卖油翁的故事,唯手熟尔!

3)多看信息密度大、质量高的资料

我之前提到的那些书籍和学习,真正是经过了时间的检验,是一些特别棒的学习资料,学完后真的会很有帮助,如果你手头上还有什么《21 天学会 JXXX》,不好意思,扔掉吧!

4)多交流,多思考,刻意练习。一开始,没有头绪的时候,肯定会感觉 Java 的知识点太多,无从下手,根本记不住,这时候,就需要停下来思考一下,是不是自己没有找到一条合适的学习路线,是不是学习的方法不得当。

一定要记住,熟能生巧,要勤加练习,代码敲多了,很多知识点自然就印象深刻了。

这该死的建议,总是这么靠谱~

我是二哥,下期见——就上班了~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 沉默王二 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1)基础篇
  • 2)底层篇
  • 3)进阶篇
  • 4)高级篇
  • 5)架构篇和扩展篇
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档