嗨,大家好!
我是“行走的程序喵”,一个曾经是大学非计算机专业出身的小伙子,但因为生活所迫,我不得不自学Web前端和Java后端开发。经过了数年的学习和实践,我现已是一名具有丰富经验的技术小牛。
在这段充满挑战和成长的旅程中,我遇到了无数次的困难和挑战,但我从未放弃。通过不断地学习、实践和总结,我逐渐掌握了Web前端和Java后端开发的核心技能,并成功应用于实际项目中。
在这篇博客中,我将分享我的学习心得、工作经验以及对技术发展趋势的理解。无论你是一名非计算机专业出身的学生,还是一名正在自学编程的开发者,我相信我的经验分享都能为你提供一些启发和帮助。
让我们一起踏上编程之路,共同成长,探索技术的奇妙世界吧!💻✨
让我们先探讨不同的学习方法,大家可以根据自己的情况做出选择。
- 观看视频进行系统学习,例如培训机构提供的课程或慕课平台上的课程等。通过观看视频,有老师带领学习,易于理解和掌握,非常适合初学者。
- 阅读书籍进行学习,包括各种专业技术书籍。这有助于了解技术脉络,并深入学习知识点。
- 阅读博客和源码进行深入学习。博客的好处在于,有些知识点会以通俗易懂的方式讲解,更容易理解。
阶段一: Java 基础
最初学习的重点是Java基础知识。虽然这一部分内容可能有些乏味,但扎实的基础对于后续学习框架至关重要,具有非常大的益处而没有任何害处。事实上,大多数编程语言的基础知识都有相似之处。如果之前已经学习过其他语言如C、C++,那么学习Java基础会更快一些。
Java基础部分的主要内容包括:基本程序结构、类与对象、接口、泛型、反射、集合、异常处理与调试、Java网络编程、Java I/O和多线程。
在学习Java基础时,建议大家参考尚硅谷宋红康老师的Java教程。宋老师的课程更适合零基础学员,从Java语言的起源开始,循序渐进,对知识点进行详细的分析。
除了以上提到的学习资源,还可以参考《Java核心技术 卷I》这本书。这本书偏向实用,内容的广度和深度都非常适中。其中,第7至9章介绍了Java的GUI编程,虽然在实际开发中GUI开发的应用并不是很多,所以可以选择跳过这部分内容。
此外,网上也有一些优质的文档和教程网站,可以作为学习的辅助资料。
一旦你掌握了Java基础知识,就可以尝试开发一些小型项目,比如图书管理系统、学生管理系统等。这样的小项目有助于巩固所学知识,同时也能够提升成就感。
当然,如果时间有限,你也可以直接尝试着开发一些Java Web项目。无论选择哪种方式,都是对你学习过程的一个很好的补充和实践。
阶段二:数据库
MySQL 和 Oracle 都是企业中广泛应用的数据库系统,其中 MySQL 是目前应用最广泛的开源关系数据库。对于初学者或者校园招聘的同学来说,目前只学习 MySQL 就足够了。
在学习 MySQL 的过程中,主要涉及以下内容:数据库的CRUD操作、JDBC API、数据库特性以及数据库连接池。
其中,数据库连接池的作用是为了避免频繁地创建和销毁 JDBC 连接。常见的连接池包括 C3P0、Druid 和 HikariCP,目前使用最广泛的是 HikariCP。
在书籍方面,推荐入门的同学阅读《MySQL必知必会》。这本小册子非常实用,内容紧凑,几乎没有理论堆砌,非常适合初学者。
如果想要深入学习,可以考虑阅读《高性能 MySQL》。这本书是 MySQL 领域的经典之作,但是相对较厚。对于面试准备,重点可以关注索引部分。
阶段三: Java Web
学习Java Web开发需要掌握后端Java技术,同时也需要一些前端知识。
前端的基础技术包括HTML、CSS和JavaScript,初学者可以先学习这些基础知识,之后在项目开发过程中可以查阅相关手册。如果想要实现更好的交互效果,可以进一步学习Vue和React等前端技术。
后端Java技术包括Servlet、Filter、Listener、Session、Cookie、JSP、EL表达式和JSTL等。
值得注意的是,像JSP这样的技术在很多互联网公司已经不再使用,取而代之的是Freemark、Thymeleaf等模板引擎。因此,我们只需了解JSP的基本使用即可。
如果想要入门Java Web开发,推荐参考尚硅谷的Java Web教程。该教程涵盖了前端三大技术以及后端Java技术,并最终会带领大家完成一个书城项目。
阶段四:主流框架
在学习Java Web开发中,主流的框架包括Spring、Spring MVC和MyBatis,通常被称为SSM框架。
过去的SSH框架,即Struts2、Spring和Hibernate框架,已经逐渐被SSM框架所取代。因此,现在学习者可以不必再专门学习Struts2和Hibernate框架。在准备面试时,可能会被问及与此相关的知识,因此大家只需在面试前了解这方面的知识即可。
在学习这些框架之前,建议先学习项目管理工具Maven和版本控制工具Git。Maven可以帮助管理项目的依赖和构建过程,Git则是团队协作中常用的版本控制工具。
4.1、Maven
Maven是一个项目管理工具,其核心概念是基于项目对象模型(POM)。它可以用于管理项目的构建、报告和文档。
Maven本质上是一个庞大的JAR包资源库。使用Maven构建项目时,只需在项目的pom.xml文件中配置相关依赖,就可以直接从远程仓库同步到本地。这样就不再需要手动在各处搜索和下载JAR包,省去了很多查找和下载的麻烦。
4.2、Git
Git是一个开源的分布式版本控制系统,其主要作用是对文件进行版本管理,便于在不同版本之间进行切换和修改,同时也方便协作开发。
GitHub是基于Git的代码库托管站点,掌握了Git后,我们就能够愉快地在GitHub上进行交友和协作开发。
4.3、SSM框架
Spring是一个轻量级的Java开发框架,目前已经成为最受欢迎的企业级Java应用程序开发框架之一,最新版本为Spring 5。
Spring框架的核心特性包括依赖注入(DI)和面向切面编程(AOP)。其组成结构如下图所示:
Spring MVC是基于MVC架构的一个框架,用于简化Web应用程序的开发。作为Spring的一部分,Spring MVC已经成为当前最主流的MVC框架之一。
MyBatis是一款优秀的持久层框架,支持自定义SQL、存储过程以及高级映射。
在传统JDBC中,往往需要编写大量的JDBC代码,包括SQL语句的编写、参数的装配以及结果集的处理。而MyBatis通过一些配置文件(XML)或注解来简化了这些操作,使得数据库查询和结果映射封装更加便捷。
学习SSM框架时,推荐使用一整套课程进行学习,这样会有更好的连贯性,并且还能学习到整合SSM框架的相关知识。
整合SSM框架虽然有些繁琐,但时间紧张的学习者可以选择跳过此步骤。在实际开发中,可以直接复制粘贴已有的代码来完成整合工作。另外,现在使用更强大的Spring Boot也能够达到同样的效果。
4.4、Spring Boot
Spring Boot采用约定大于配置的方式,大大减少了配置文件的使用,使得开发人员不再需要定义大量的样板化配置。
对于学习Spring Boot,我推荐雷丰阳老师的Spring Boot课程。该课程基于Spring Boot 2.3与2.4版本,内容涵盖了核心基础、Web原理、单元测试、数据访问、指标监控等方面的知识。
关于是否直接跳过SSM而学习Spring Boot,这取决于你的目标和需求。如果你只是想使用Spring Boot快速开发项目,那么当然可以跳过SSM。因为SSM的配置相对繁琐,Spring Boot能够提供更便捷的开发体验。
但如果你想深入学习Java开发,并且可能会在面试中遇到关于Spring底层原理的问题,那么学习SSM仍然是有必要的。了解SSM框架可以帮助你更好地理解Spring Boot的底层原理和运作机制。
阶段五:服务器中间件
学完上述内容后,你确实已经具备了实际项目开发的基本能力。然而,要解决更复杂的业务场景,你还需要学习一些中间件技术,如Redis、消息队列(MQ)和Elasticsearch。
-
Redis(Remote Dictionary Server):Redis是一个高性能的键值存储系统,常用于缓存、会话管理、消息队列等。学习Redis可以让你了解如何利用内存数据库来加速应用程序的性能,并实现一些复杂的数据结构和业务场景。
-
消息队列(MQ):消息队列是一种在分布式系统中广泛应用的通信机制,常用于解耦合、异步通信、流量控制等。学习消息队列可以帮助你处理高并发、大数据量的场景,并实现系统之间的解耦合和异步通信。
-
Elasticsearch:Elasticsearch是一个开源的分布式搜索和分析引擎,常用于全文搜索、日志分析、数据可视化等。学习Elasticsearch可以帮助你构建复杂的搜索引擎、日志分析系统和数据可视化平台,提升系统的搜索性能和用户体验。
掌握了这些中间件技术,你就可以更好地应对复杂的业务场景,提升系统的性能、可靠性和扩展性,从而更好地应对工作中的挑战。
5.1、Redis
Redis是一个key-value存储系统,是跨平台的非关系型数据库,可用作数据库、高速缓存和消息队列代理。
作为当前主流的缓存技术,Redis已经成为互联网企业的首选之一。
对于想深入学习的同学,推荐阅读《Redis设计与实现》,该书知识点丰富,深入讲解了Redis的底层原理。我曾经反复阅读了三遍,对我的面试帮助很大,强烈推荐!
5.2、MQ
MQ(消息队列)是一种跨进程的通信机制,用于在应用程序之间传递消息。简单来说,它是一种先进先出(FIFO)的数据结构。MQ的主要作用包括解耦、异步、削峰/限流等。
目前业界有多种MQ产品,其中比较出名的有以下四种:
- Kafka
- RabbitMQ
- RocketMQ
- ActiveMQ
根据个人喜好或项目需求,你可以选择其中一款MQ进行学习。
另外,如果想深入学习,可以阅读《Kafka权威指南》。这本书由Kafka的作者执笔,覆盖了比较全面的内容,对于深入理解Kafka是非常有帮助的。
5.3、Elasticsearch
全文搜索是一个非常常见的需求,而开源的Elasticsearch目前是全文搜索引擎的首选之一。
Elasticsearch能够快速地存储、搜索和分析海量数据。很多知名网站和平台,如维基百科、Stack Overflow和GitHub等都采用了Elasticsearch。
Elasticsearch的底层是开源库Lucene,但是如果要使用Lucene,就需要自己编写代码来调用Lucene的接口。而Elasticsearch则是对Lucene的封装,提供了REST API的操作接口,使得开发者可以直接使用,开箱即用。
阶段六:微服务和分布式
对于实习和校招的小伙伴来说,学好前五阶段的技术知识是非常重要的,这包括:
- Java基础知识:包括基本语法、面向对象编程、集合框架等。
- 数据库基础:了解SQL语言、数据库设计、基本的CRUD操作等。
- Web开发:掌握HTML、CSS、JavaScript等前端技术,以及后端技术如Servlet、JSP等。
- Spring框架:理解Spring框架的核心特性,包括依赖注入(DI)和面向切面编程(AOP)等。
- 数据持久化技术:掌握MyBatis等ORM框架,能够实现数据库与Java对象之间的映射。
学好这些技术知识可以为你的实习和校招打下坚实的基础。如果你有额外的时间和精力,可以考虑深入学习微服务和分布式系统的内容。这些技术是当今互联网行业非常热门的方向,掌握了这些技术可以让你在求职时更有竞争力,也有助于你未来的职业发展。
6.1、Spring Cloud
Spring Cloud是一套完整的微服务解决方案,基于Spring Boot框架。
更准确地说,Spring Cloud是一系列框架的有序集合,它利用了Spring Boot的开发便利性,简化了分布式系统的开发。它包括了诸如服务发现、服务网关、服务路由、链路追踪等功能。
6.2、Dubbo
阿里开源的Dubbo是一个高性能优秀的服务框架。简单来说,Dubbo是一个基于Spring的RPC(远程过程调用)框架,可以实现服务的远程调用和服务的治理。
与Dubbo相比,Spring Cloud是另一种微服务架构解决方案。它是一个基于Spring Boot的开源工具集,旨在简化分布式系统的开发。Spring Cloud提供了诸如服务发现、配置管理、负载均衡、断路器等功能,使得构建、部署和管理分布式系统变得更加容易。
用一个网络上的台式电脑的比喻来说,Dubbo可以看作是品牌机,它是一个完整的、高性能的服务框架;而Spring Cloud则可以看作是组装机,它提供了一系列工具和组件,可以根据需求自由组合和定制,更加灵活。
6.3、ZooKeeper
ZooKeeper是一个高可用的分布式管理与协调框架,其基于ZAB算法(原子消息广播协议)的实现确保了在分布式环境中数据的一致性。因此,ZooKeeper成为了解决分布式一致性问题的重要工具。
阶段七:进阶优化
学会了前面提到的技术知识,你就能够独立完成一个小项目,并且应对项目组分配给你的开发任务。
然而,想要写出优质的代码,还需要学习更多的知识,包括设计模式、多线程以及JVM的内部原理等。这些知识点同样是面试中的必备内容。
以上资源可以帮助你深入理解设计模式、JVM和并发编程,为写出高质量的代码打下坚实的基础。
写在最后
学习任何新技能都需要持之以恒和耐心。Java技术栈的确非常庞大,而且技术更新速度快,这可能让刚入门的小伙伴感到有些懵圈。但不要担心,只要你按部就班、由浅入深地学习,一切都会变得更容易些。
在学习的过程中,不要过分纠结于某个难以理解的知识点。记得做好记录,暂时跳过,过一段时间再回过头来看,也许会有新的领悟。放弃固然容易,但只有坚持下去,才能真正体会到学习的乐趣和成就感。
往期精彩内容