知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

大二的学生自学Java有出路吗?

发表时间:2022-03-23来源:网络

我属于双非一本,相比于你的学校可能要更差一点。不过,大学的时候很努力,大二就开始接触博客和开源了。大三的时候开源的JavaGuide 目前已经 80k star,之后又开源了下面这些开源项目:

只要肯努力!进大厂只是时间的问题。

下面分享一下我的Java学习路线。

先说一个初学者很容易犯的错误:上来就通过项目学习。

很多初学者上来就像通过做项目学习,特别是在公司,我觉得这个是不太可取的。 如果的 Java基础或者 Spring Boot 基础不好的话,建议自己先提前学习一下之后再开始看视频或者通过其他方式做项目。 还有点事,我不知道为什么大家都会说边跟着项目边学习做的话效果最好,我觉得这个要加一个前提是你对这门技术有基本的了解或者说你对编程有了一定的了解。

关于如何学习且听我从一个电商系统网站的创建来说起。假如我们要创建一个基于Java的分布式/微服务电商系统的话,我们可以按照下面的学习路线来做:

首选第一步我们肯定是要从 Java 基础来学习的(如果你没有计算机基础知识的话推荐看一下《计算机导论》这类入门书籍)。

step 2(可选):操作系统与计算机网络

操作系统这方面我觉得掌握操作系统的基础知识和 Linux 的常用命令就行以及一些重要概念就行了。

关于操作系统的话,我没有什么操作系统方面的书籍可以推荐,因为我自己也没认真看过几本。因为操作系统比较枯燥的原因,我建议这部分看先看视频学可能会比较好一点。我推荐一个 Github 上开源的哈工大《操作系统》课程给大家吧!地址:https://github.com/hoverwinter/HIT-OSLab

另外,对于 Linux 我们要掌握基本的使用就需要对一些常用命令非常熟悉比如:目录切换命令、目录操作命令、文件的操作命令、压缩或者解压文件的命令等等。推荐一个 Github 上学习 Linux 的开源文档:《Java 程序员眼中的 Linux》

计算机网络方面的学习,我觉得掌握基本的知识就行了,不需要太深究,一般面试对这方面要求也不高,毕竟不是专门做网络的。推荐 《网络是怎样连接的》《图解 HTTP》 这两本书来看,这两本书都属于比较有趣易懂的类型,也适合没有基础的人来看。

我们写程序的都知道一个公式叫做 “程序设计 = 算法 + 数据结构”。我们想让我们的网站的地盘更加牢固的话,我觉得数据结构与算法还是很有必要学习的。所以第三步,我推荐可以适当花时间看一下 数据结构与算法 但是,同样不做强求!你抽时间一定要补上就行!


step 3(可选):数据结构与算法

如果你想进入大厂的话,我推荐你在学习完 Java 基础之后,就开始每天抽出一点时间来学习算法和数据结构。为了提高自己的编程能力,你也可以坚持刷 Leetcode。就目前国内外的大厂面试来说,刷 Leetcode 可以说已经成了不得不走的一条路。

对于想要入门算法和数据结构的朋友,建议看这两本书 《算法图解》 和 《大话数据结构》,这两本书虽然算不上很经典的书籍,但是比较有趣,对于刚入门算法和数据结构的朋友非常友好。《算法导论》 非常经典,但是对于刚入门的就不那么友好了。

另外,还有一本非常赞的算法书推荐给各位,这本书的名字就叫 《算法》,书中的代码都是用 Java 语言编写。这本书的优点太多太多比如它的讲解基础而全面、对阅读者比较友好等等。我觉得这本书唯一的缺点就是太厚了 (小声 BB,可能和作者讲解某些知识点的时候有点啰嗦有关)。除了这本书之外,《剑指 offer》 、《编程珠玑》 、《编程之美》 这三本书都被很多大佬推荐过了,对于算法面试非常有帮助。《算法之美》 这本书也非常不错,非常适合闲暇的时候看。

我们网站的页面搭建需要前端的知识,我们前端也后端的交互也需要前端的知识。所以第四步,我推荐你可以了解一下前端知识,不过不需要学的太精通。自己对与前端知识有了基本的了解之后通过

step 5:MySQL

学习 MySQL 的基本使用,基本的增删改查,SQL 命令,索引、存储过程这些都学一下吧!推荐书籍 《SQL 基础教程(第 2 版)》(入门级)、《高性能 MySQL : 第 3 版》(进阶)、《MySQL 必知必会》

下面这些 MySQL 相关的文章强烈推荐你看看:

【推荐】MySQL/数据库 知识点总结阿里巴巴开发手册数据库部分的一些最佳实践一千行MySQL学习笔记MySQL高性能优化规范建议数据库索引总结事务隔离级别(图文详解)一条SQL语句在MySQL中如何执行的正式开发之前我们还要一些准备工具比如熟悉你的ide,熟悉Maven来帮助我们引入相关jar依赖,使用 Docker来帮助我们安装常用的软件。

step 6:常用工具

非常重要!非常重要!特别是 Git和 Docker。

IDEA:熟悉基本操作以及常用快捷。Maven :建议学习常用框架之前可以提前花半天时间学习一下Maven的使用。(到处找 Jar 包,下载 Jar 包是真的麻烦费事,使用 Maven 可以为你省很多事情)。Git :基本的 Git 技能也是必备的,试着在学习的过程中将自己的代码托管在 Github 上。(Git 入门)Docker :学着用 Docker 安装学习中需要用到的软件比如 MySQL ,这样方便很多,可以为你节省不少时间。(Docker 入门)利用常用框架可以极大程度简化我们的开发工作。学习完了常用工具之后,我们就可以开始常用框架的学习啦!

step 7:常用框架

学习 Struts2(可不用学)、SpringSpringMVCHibernateMybatisshiro 等框架的使用, (可选) 熟悉 Spring 原理(大厂面试必备),然后很有必要学习一下 SpringBoot学好 SpringBoot 真的很重要。很多公司对于应届生都是直接上手 SpringBoot,不过如果时间允许的话,我觉得可以简单把 SpringSpringMVC 过一遍,这个完全不影响你学习最重要的 SpringBoot 。

关于 SpringBoot ,推荐看一下笔主开源的 Spring Boot 教程 (SpringBoot 核心知识点总结。 基于 Spring Boot 2.19+)。

Spring 真的很重要! 一定要搞懂 AOP 和 IOC 这两个概念。Spring 中 bean 的作用域与生命周期、SpringMVC 工作原理详解等等知识点都是非常重要的,一定要搞懂。

推荐看文档+视频结合的方式,中途配合实战来学习,学习期间可以多看看 JavaGuide 对于常用框架的总结。

另外,都 2019 年了,咱千万不要再学 JSP 了好不?

推荐阅读:

Spring

Spring 学习与面试Spring 常见问题总结Spring中 Bean 的作用域与生命周期SpringMVC 工作原理详解Spring中都用到了那些设计模式?

SpringBoot

SpringBoot 指南/常见面试题总结

MyBatis

MyBatis常见面试题总结学习玩了上面这些东西之后,我们就可以开发一个简单的网站了。但是,我们的网站上线之后,访问量逐渐变大,我们原有的实现没办法支撑了怎么办?我们要考虑用上多线程以及分布式了!

step 8:多线程

多线程这部分内容可能会比较难以理解和上手,前期可以先简单地了解一下基础,到了后面有精力和能力后再回来仔细看。推荐 《Java 并发编程之美》 或者 《实战 Java 高并发程序设计》 这两本书。我目前也在重构一份我之前写的多线程学习指南,后面会更新在公众号里面。

学习完多线程之后可以通过下面这些问题检测自己是否掌握。

Java 多线程知识基础:

什么是线程和进程?请简要描述线程与进程的关系,区别及优缺点?说说并发与并行的区别?为什么要使用多线程呢?使用多线程可能带来什么问题?说说线程的生命周期和状态?什么是上下文切换?什么是线程死锁?如何避免死锁?说说 sleep() 方法和 wait() 方法区别和共同点?为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?

Java 多线程知识进阶:

synchronized 关键字:① 说一说自己对于 synchronized 关键字的了解;② 说说自己是怎么使用 synchronized 关键字,在项目中用到了吗;③ 讲一下 synchronized 关键字的底层原理;④ 说说 JDK1.6 之后的 synchronized 关键字底层做了哪些优化,可以详细介绍一下这些优化吗;⑤ 谈谈 synchronized 和 ReentrantLock 的区别。volatile 关键字: ① 讲一下 Java 内存模型;② 说说 synchronized 关键字和 volatile 关键字的区别。ThreadLocal:① 简介;② 原理;③ 内存泄露问题。线程池:① 为什么要用线程池?;② 实现 Runnable 接口和 Callable 接口的区别;③ 执行 execute() 方法和 submit() 方法的区别是什么呢?;④ 如何创建线程池。Atomic 原子类: ① 介绍一下 Atomic 原子类;② JUC 包中的原子类是哪 4 类?;③ 讲讲 AtomicInteger 的使用;④ 能不能给我简单介绍一下 AtomicInteger 类的原理。AQS :① 简介;② 原理;③ AQS 常用组件。

step 8:分布式

学习 Dubbo、Zookeeper来实现简单的分布式服务学习 Redis 来提高访问速度,减少对 MySQL数据库的依赖;学习 Elasticsearch 的使用,来为我们的网站增加搜索功能学习常见的消息队列(比如RabbitMQ、Kafka)来解耦我们的服务(ActiveMq不要学了,已经淘汰);......

到了这一步你应该是有基础的一个 Java程序员了,我推荐你可以通过一个分布式项目来学习。觉得应该是掌握这些知识点比较好的一种方式了,另外,推荐边看视频边自己做,遇到不懂的知识点要及时查阅网上博客和相关书籍,这样学习效果更好。

一定要学会拓展知识,养成自主学习的意识。 黑马项目对这些知识点的介绍都比较蜻蜓点水。

继续深入学习的话,我们要了解Netty、JVM这些东西。


step 9:深入学习

可以再回来看一下多线程方面的知识,还可以利用业余时间学习一下 NIO 和 Netty ,这样简历上也可以多点东西。如果想去大厂,JVM 的一些知识也是必学的(Java 内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM 内存管理)推荐《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(最新第二版》和《实战 Java 虚拟机》,如果嫌看书麻烦的话,你也可以看我整理的文档。

另外,现在微服务特别火,很多公司在面试也明确要求需要微服务方面的知识。如果有精力的话可以去学一下 SpringCloud 生态系统微服务方面的东西。

微服务的概念庞大,技术种类也很多,但是目前大型互联网公司广泛采用的,实话实话这些东西我不在行,自己没有真实做过微服务的项目。不过下面是我自己总结的一些关于微服务比价重要的知识,选学。

step 10:微服务

这部分太多了,选择性学习。

相关技术:

网关 :kong,soul;分布式调用链: SkyWalking、Zipkin日志系统: Kibana......

Spring Cloud 相关:

Eureka:服务注册与发现;Ribbon:负载均衡;Hytrix :熔断;Zuul :网关;Spring Cloud Config:配置中心;

Spring Cloud Alibaba也是很值得学习的:

Sentinel:A lightweight powerful flow control component enabling reliability and monitoring for microservices. (轻量级的流量控制、熔断降级 Java 库)。dubbo:Apache Dubbo 是一个基于 Java 的高性能开源 RPC 框架。nacos:Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 可以作为 Dubbo 的注册中心来使用。seata: Seata 是一种易于使用,高性能,基于 Java 的开源分布式事务解决方案。RocketMQ:阿里巴巴开源的一款高性能、高吞吐量的分布式消息中间件。
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜