nvzitea 发表于 2023-10-8 06:54:16

自学 Java 怎么入门?

在大学自学 Java,看视频教程和代码能看懂,自己写就写不出来,怎么样能够入门?

czp820401 发表于 2023-10-8 06:54:53

本人Java全靠自学并通过校招拿到阿里巴巴offer,分享一下本人自学Java的方法论。
本回答长达2万+字,而且非常硬核,建议大家可以点赞收藏防止迷路。
如果你的目标是通过自学Java并找到一份不错的工作,我的回答一定要认真看完,从入门到进阶的学习路线全都规划好了,可以先看目录。
但是,有些话我得先说在前头:
1、打牢计算机基础!打牢计算机基础!打牢计算机基础!重要的事情说三遍!
基础非常重要,不管你以后从事什么方向,应用开发也好,大数据开发也要,客户端工程师也好,要想吃得开必须依赖这些基础课程:操作系统、组成原理、计算机网络、数据结构、算法、数据库。

http://pica.zhimg.com/v2-95861e4114a2034179e938572ad013f0_r.jpg?source=1940ef5c
2、初学编程,建议选择一门偏底层的语言,C或C++均可以,不建议一开始就学java或python。因为学底层语言可以亲密接触到诸如内存管理等特性,有助于理解计算机基础知识。等学会了底层语言,再去学上层的语言是非常快的。
自学C语言和C++,有什么好书推荐吗?3、自学=看书+视频+Google搜索+实战。
看书的优点:体系化,比较严谨,能够完善的学习一门技术。但是缺点也有,容易陷进去,略枯燥,需要聚焦重点。而且不要一开始就抱着大块头的书去啃,也不要从头到尾啃,要抓重点。一开始掌握最基本的知识就可以,然后就可以开始实践了。
看视频会更生动,便于知识的理解,但是也会养成惰性,让你觉得自己看完已经会了,所以一定要通过写代码来检验学习效果。
博客是程序员必不可少的学习资源,近些年高质量博客、文章也越来越多。这种博客文章阅读比较方便,内容选择也比较丰富,好的博客图文并茂生动形象非常有助于理解记忆,并且博客在代码拷贝学习方面更占优势。
程序员提升自身能力的实用网站有哪些值得推荐?看博客也有一些缺点:比如博客比较碎片化,体系不太完整。还有博客质量参差不齐差距较大,甚至有的博客还出现较大的错误,所以挑选好的博客是一大挑战。
最后的实战最重要!实战是解决学编程“一看就会,一写就废”的最佳路径。
一定要理论结合实践,不要只看书或者视频,一定要多动手看代码、写代码。
好啦,讲完这三大前提,如果你觉得认同的话就继续往下看我的Java学习路径。
先贴一张本人总结的Java技术栈脑图:

http://picx.zhimg.com/v2-d94332552e09de7b8b397cb21c98d1a3_r.jpg?source=1940ef5c
目前Java在是后端开发使用最广泛的语言。
很多互联网大厂如阿里巴巴、快手、拼多多、美团等都是使用Java作为主流开发语言。
而Java的生态也是非常成熟,如spring、Netty、dubbo、RocketMQ、ElasticSearch等框架。
Java技术栈说实在的知识点很多,绝不仅仅是学一门语言和一个数据库那么简单。
要让我们的程序运行在流量洪峰下还能保证结果正确,我们需要处理好并发问题。
实际生产环境中我们的应用一定是分布式的,我们还需要用到各种框架(rpc服务框架、消息中间件、除了关系型数据库还可能用到nosql、newsql),还需要掌握分布式设计知识。
当程序遇到内存飙高的问题我们排查的时候需要掌握JVM知识。
在面对复杂业务场景为了写出优雅、可维护性强的代码我们需要掌握设计模式以及DDD(领域驱动设计)。
部分大数据场景我们还需要用到实时计算框架flink或spark。下面来详细分享一下Java的学习路径,要想打好扎实的基础,就按照这个路线来。
(一)计算机基础课程

这是我在所有回答里面都在反复强调的,学编程一定要打好计算机基础。
科班和非科班的差距,主要在于基本理论知识。如果你是非科班自学想要达到科班的水平,计算机基础知识一定要补上。
这些基础知识的重要性体现在多个方面:
第一个,面试,大厂面试基本都要考基础知识,比如算法。
第二个,更高纬度去发现问题,更能发现问题的本质,更好的解决问题,学习技术也能站在很好的纬度,学习到本质。
第三个,要想接触更高领域的技术,基础知识是一把利剑。
http://pic1.zhimg.com/v2-afb8171844a6d1f95b05f012b6a2082c_r.jpg?source=1940ef5c
几乎各个大厂面试前2轮面试都会重点关注基础,如果基础不扎实,那么就很难进入后面的面试,把大学一半的精力花在打基础上都是值得的。
一个合格的程序员,应该要知道计算机体系是如何一步步构建出来的,每一步的取舍是什么,内在的逻辑是什么。
所以科班和培训机构最大区别就在于:科班选手打下的基础会更好,更能理解计算机的深层逻辑,再学习Java、python、PHP Object-c这些语言的时候会更容易上手。

http://pic1.zhimg.com/v2-02c87cb2d1c23e46b3b84c3d47eb560d_r.jpg?source=1940ef5c
基本理论这个东西,对于入门和平均水平程序员来说,可能并不见得有多大用处。
但是如果迈向高端、深入,那么这些基本功就显得很重要了。
高手不一定出身科班,但没有相应的理论打底,他绝成不了高手!
基础课程推荐的视频课程和书籍有:
1、操作系统

①MIT6.268
课程官网:https://pdos.csail.mit.edu/6.828/2018/schedule.html
网友的一些homework实现:
https://github.com/SmallPond/MIT6.828_OS/tree/master/xv6-public

MIT6.828 是一门公认的硬核课程,一直以来都有很高的知名度,也广受好评,是理论与实践相结合的经典。
建议是在上过学校的OS课,或者阅读过操作系统导论类再来学习这门课。最好在开始之前熟悉C和汇编,也对计算机组成有一定了解。
然后只要你跟着项目一步一步走,做完 6 个实验,就能实现一个简单的操作系统内核。

lab是这门课的重点:

[*]Lab1: C, Assembly, Tools, and Bootstrapping. 熟悉课程使用的工具qemu,C语言,以及汇编。讲解了bootstrapping:从计算机从通电,到开始运行操作系统,这个过程中发生了什么。
[*]Lab2: Memory management. 实现虚拟内存,分页机制。
[*]Lab3: User-level Environments. 实现进程管理,中断机制(interrupt),系统调用(system call),缺页处理(page fault handling)等。
[*]Lab4: Preemptive Multitasking. 实现多CPU的支持,Round-Robin进程调度,Copy-on-Write机制,抢占式多任务(preemptive multitasking), 进程间通信(IPC)。
[*]Lab5: File system, spawn, and sh. 实现文件系统,完善sh。
[*]Lab6: Networking. 实现网络功能。
②国内哈工大的操作系统实验课
https://github.com/hoverwinter/HIT-OSLab
2、计算机网络

推荐standford课程cs144结合书籍《计算机网络:自顶向下方法》。
课程链接:
https://www.scs.stanford.edu/10au-cs144/
https://cs144.github.io/
书籍选择《计算机网络:自顶向下方法》,豆瓣评分9.3分。
这位知乎大佬 @胡津铭 有一个专栏讲如何自己实现一个TCP,强烈推荐:
https://zhuanlan.zhihu.com/p/175998415

如果想找一本简单的入门书籍,推荐《图解TCP/IP》。
实战的话推荐《Wireshark网络分析就这么简单》,可以亲手尝试抓包分析数据报文的信息。
3、数据库

① standford CS145/CS245/CS346逐步递进的学习。
课程链接:
CS145:Introduction to Databases Course Information
https://cs145-fa20.github.io/
http://infolab.stanford.edu/~junyang/cs145/info.html

CS245:Principles of Data-Intensive Systems
https://web.stanford.edu/class/cs245/

CS346:Database System Implementation
https://web.stanford.edu/class/cs346/2015/
②伯克利的数据库导论
https://www2.eecs.berkeley.edu/Courses/CS186/

③CMU的数据库系统
数据库系统设计域实现,涵盖数据模型、存储模型、查询语言、存储架构、事务处理、恢复、并发架构等等,并结合开源和商业数据库给出案例讲解。
https://15445.courses.cs.cmu.edu/fall2020/

④书籍推荐《数据库系统概念》
4、数据结构与算法设计

①MIT 6.006 Introduction to Algorithms
MIT 6.006 是经典的数据结构和算法入门课程,涉及到排序、哈希、图论、动态规划。Lecture非常翔实,伪代码可读性强,在辅以专门的practice,用py实现的。

http://picx.zhimg.com/v2-dfd870eb4021c1c464ec5713d43c4571_r.jpg?source=1940ef5c
课程链接:
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/
②书籍推荐《算法》,豆瓣评分9.4分。
内容全,源码示例多。
比如普林斯顿大学教材使用的就是这本书,然后有配套的教程网站,上面有很多文档和demo:
https://algs4.cs.princeton.edu/lectures/

http://picx.zhimg.com/v2-c416a900c060ede06a8f2d16d80fff45_r.jpg?source=1940ef5c
视频:
https://www.youtube.com/watch?v=1QZDe28peZk&list=PLRdD1c6QbAqJn0606RlOR6T3yUqFWKwmX

建议通过可视化的方式学习算法和数据结构,能很容易看出其基本原理、各种操作是怎么实现的。

这里推荐几个非常棒的数据结构可视化网站:
(1)visualgo
https://visualgo.net/zh
涵盖了主流的数据结构,可视化展示,支持对其进行各种操作,以及提供了很多示例。
如二叉树,我们对其插入一个节点71,会自动进行匹配,将节点插入到正确的地方


http://picx.zhimg.com/v2-75522f1bbed7758ef6be805b107a57c7_r.jpg?source=1940ef5c
(2)Data Structure Visualizations
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
同样是涵盖了主流数据结构和算法,提供动态演示功能。

http://pica.zhimg.com/v2-bf8ea3054cea4babac3b9c0770905e78_r.jpg?source=1940ef5c
5、计算机组成原理

国外大学是怎么学习计算机组成原理的-
https://www.zhihu.com/question/38838088

http://www.cs.cmu.edu/~213/
http://web.stanford.edu/class/cs107/

关于公开课,更多的可以参考这个github项目,维护了众多推荐的公开课程资源:(star 14K)
https://github.com/ForrestKnight/open-source-cs/blob/master/README.md
老外OSSU组织总结的自学计算机学习路径,star 92K:
https://github.com/ossu/compute
(二)Java语言基础


http://pic1.zhimg.com/v2-8a50169389c6f224a956d1713026544f_r.jpg?source=1940ef5c
开发工具:

[*]ide:Intellij Idea
[*]JDK
[*]依赖管理maven

语言基础:

[*]输入输出
[*]数据类型
[*]运算符
[*]修饰符
[*]控制流程
[*]类与对象
[*]面向对象:继承、封装、多态
[*]正则表达式

进阶知识:

[*]IO文件处理
[*]集合(list、map、set、queue)
[*]异常处理
[*]泛型
[*]网络编程
[*]反射
[*]注解
[*]java8的新特性如lambda表达式
书籍推荐:
(1)入门强烈推荐《head first java》
语言非常轻松,相比《java编程思想》而言更适合入门。
(2)并发编程学习推荐《java并发编程实战》
豆瓣评分9.0分。深入浅出地介绍了java线程和并发,是一本完美的java并发参考手册。英文功底好的可以直接阅读原版,翻译的并不是那么好。
关于Java语言从入门到进阶的书籍阅读顺序,我的这个回答已经获得了3200+赞和收藏:
关于JAVA的书籍最佳阅读顺序,大家有什么建议?(三)JVM

JVM体系结构概览:

http://pic1.zhimg.com/v2-6d276403b776acb6b411669c15df04a3_r.jpg?source=1940ef5c

核心知识点整理:

http://pic1.zhimg.com/v2-5548e5c773d92924cf9e876433c0bc58_r.jpg?source=1940ef5c

书籍推荐:
(1)jvm学习推荐《深入理解java虚拟机》
对于理解java虚拟机内存管理、类加载机制、常用调优方法非常有用。
(2)另外推荐一本网络书籍《深入理解java内存模型》
书中首先介绍了java内存模型的抽象以及happens-before。然后详细讲解了重排序以及顺序一致性原理,最后介绍了volatile的内存语义实现以及锁机制。
(四)数据库

1、关系型数据库-mysql知识点归纳:

http://pic1.zhimg.com/v2-aeb3654b817218ae5b6e3e5ddf7ff627_r.jpg?source=1940ef5c
推荐书籍:
(1)入门篇-《MySQL必知必会》
非常薄,只有200来页,花几天时间就能刷完,SQL 语法入门好书,推荐!
这本书的特点是注重实用性,紧贴实战需要,基本没有什么理论的堆砌,完完全全就是一本实践指南。读懂后基本mysql的用没问题了。
(2)进阶篇-《高性能mysql》
本书深度讲解了mysql引擎架构、索引设计、SQL查询优化的实战技巧、复制、分片等原理,还有运维技能。
书很厚,内容非常全面,适合精读,弄清整本书,也就能精通数据库了。
2、SQL VS NoSQL VS NewSQL的区别是什么?

http://pic1.zhimg.com/v2-6126b39788dff44061f612dacfb2a123_r.jpg?source=1940ef5c
sql通常用来指结构化查询语言或者代指关系型数据库如mysql、PostgreSQL。
NewSQL:关系型数据模型,并提供了良好的伸缩性等特性。
他们三者之间的核心差别是什么呢?
特性SQLNoSQLNewSQL是否关系模型关系模型不遵循关系模型是ACID是否,CAP是SQL支持支持schema-free两者都支持(schema-free/schema-fixed)OLTP支持不佳不支持支持的非常好伸缩性(scaling)垂直伸缩水平伸缩都支持是否分布式数据库否是是应用场景大数据,社交网络,IOT电商,通信示例MySQL,PostgreSQLHbase,Cassandra,DynamoDB,MongoDBVoltDB, CockroachDB, NuoDB
推荐书籍:
《Hbase权威指南》
《Cassandra权威指南》

(五)并发编程

生产环境中,我们的代码通常要应对巨大的流量,因此我们必须处理后并发问题。并发问题处理不好,会造成不可预料的损失,严重会造成巨大资损。典型的场景有库存扣减、抢优惠券等。
并发编程知识点整理:

http://picx.zhimg.com/v2-7dc5f9a3c39873af5ea77bb651d283ca_r.jpg?source=1940ef5c
来自网友总结:
https://www.processon.com/mindmap/60f618351efad454a76e1fa7
https://github.com/CL0610/Java-concurrency

推荐书籍:《Java并发编程实战》
(六)常用开发框架-spring

spring是一个轻量级java开发框架,最早由Rod Johnson,目的是解决企业级应用开发的业务逻辑层和其他各层的耦合问题。其最根本的使命是解决企业级应用开发的复杂性。
spring的核心:控制反转(IOC)和面向切面编程(AOP)。
spring的优点:

[*]解耦,简化开发。开发者可以将所有对象创建和依赖关系维护,交给spring管理。
[*]AOP编程的支持。可以方便的实现对程序进行权限拦截、监控等功能。
[*]非常方便集成各种优秀框架。如mybatis、hibernate。
[*]降低javaee api的使用难度,进行了比较好的封装。

http://pica.zhimg.com/v2-afb2f0ad5551b3beb70730be76c14887_r.jpg?source=1940ef5c
spring模块组成
Spring Core:Spring核心模块,包含控制反转(IOC)和依赖注入(DI)。
spring-beans 模块:提供了BeanFactory工厂模式的一个经典实现(Spring将管理对象称为Bean)
Spring Context:访问定义和配置对象的媒介。
Spring AOP:面向切面编程AOP实现,以动态代理技术为基础,允许定义各种拦截器,方便解耦。
Spring JDBC:提供了JDBC的抽象层,消除了JDBC编码的繁琐工作和不同数据库厂商的处理逻辑,简化JDBC。
Spring JMS:JAVA消息发送和接收服务。
Spring ORM:ORM框架支持,集成了hibernate、jpa和jdo用于资源管理、dao的实现和事务。
Spring Web:为创建Web应用程序提供支持。
Spring Test:提供了对 JUnit 和 TestNG 测试的支持、
Spring Aspects:该模块为与AspectJ的集成提供支持。
Spring Web:Spring框架支持与Struts集成,为基于web的应用程序提供了上下文。从用户视角看:

http://pic1.zhimg.com/v2-192956e154fdac5af68d4531151fdb83_r.jpg?source=1940ef5c
spring在面试中问的频率非常高,是我们必须掌握使用和设计原理的开发框架。
大厂面试 Java 工程师为什么总爱问 Spring 这些问题?13 赞同 · 2 评论回答(七)常用开发框架-mybatis

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

http://picx.zhimg.com/v2-b56b1fd98ddb8658624d371d5e0d650d_r.jpg?source=1940ef5c
官网:https://mybatis.org/mybatis-3/zh/index.html
(八)设计模式

设计模式是一套被反复使用、多数人知晓、经过分类的、代码设计经验的总结。
使用设计模式的作用是为了代码可重用性、增加可维护性,让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化。
遵循设计模式七大原则:单一职责原则、开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、迪米特法则、合成/聚合复用原则
使用设计模式能够增加系统的健壮性,易修改性和可扩展性,当你进行开发的软件规模比较大的时候,良好的设计模式会给编程带来便利,让系统更加稳定,这些在自己编写小程序的时候是体现不出来的。

需要掌握22种核心的设计模式:

http://picx.zhimg.com/v2-b2978c623b2914762fb0477121b41005_r.jpg?source=1940ef5c
https://refactoringguru.cn/design-patterns/catalog
(九)分布式

生产环境中我们的应用部署通常是分布式、多机器部署的,因此会涉及分布式问题的处理,如服务跨机房调用、消息通信、分库分表等等。是非常重要且有难度的一块。
这是网上搜到的淘宝3.0架构:服务化。

http://picx.zhimg.com/v2-9aee6f1be168f54c35560c86cc78a8da_r.jpg?source=1940ef5c
学习路径:
(1)这里首先推荐书籍《数据密集型应用系统设计》
这本书知识面非常广,涵盖了分布式系统设计的方方面面,将深奥的分布式知识深入浅出的讲解,非常容易懂。英文较好的可以直接读影印版,难度不大。看完这本书后,理论基本上入门了。

http://picx.zhimg.com/v2-836851d5b9acf01e79e0c92c8adb98a7_r.jpg?source=1940ef5c
网上的评价都非常高:

http://picx.zhimg.com/v2-8dfe76c762eba70c0aaf1dd18ec642fd_r.jpg?source=1940ef5c

(2)然后还需要实践。
实践可以看经典的公开课,然后做配套的lab。
这里推荐mit 6.824:
https://pdos.csail.mit.edu/6.824/
https://pdos.csail.mit.edu/6.824/schedule.html
(十)大数据计算

随着我们进入DT时代,数据成为最重要的资产,数据的处理变得越来越重要。
Flink 诞生于欧洲的一个大数据研究项目 StratoSphere。该项目是柏林工业大学的一个研究性项目
早期,Flink 是做 Batch 计算的,但是在 2014 年,StratoSphere 里面的核心成员孵化出 Flink,同年将 Flink 捐赠 Apache,并在后来成为 Apache 的顶级大数据项目,同时 Flink 计算的主流方向被定位为 Streaming,即用流式计算来做所有大数据的计算。
flink架构:

http://pica.zhimg.com/v2-1c65b99fa71219341347e588a2647070_r.jpg?source=1940ef5c
flink资料推荐:《基于Apache Flink的流处理》
Apache Flink PMC成员力作,书中展示了如何使用Flink DataStream API实现可伸缩的流式应用,以及怎么样在业务环境中持续运行和维护这些应用。对于入门是非常好的一本书。
最后,要想打好Java基础,一定要多练手实战项目。
建议找那些贴近实际互联网项目、功能齐全的项目,麻雀虽小五脏俱全,这里推荐几个优质的github高star的项目,可以戳下面回答看:
java如何从理论转向实践?4 赞同 · 0 评论回答下面这些高赞回答你可能也会感兴趣:
神级程序员都在用什么工具?1140 赞同 · 41 评论回答2021年你读了哪些觉得比较好的计算机书籍?1006 赞同 · 43 评论回答希望总结的这几万字学习方法论能对你有所帮助。

如果觉得不错,可以给个赞。

jorny004 发表于 2023-10-8 06:55:00

这个问题太好了,必须强答一波:
首先我们来看看Java包含哪些知识点:
Java基础语法:变量,赋值,判断,循环,函数,类等等;
Java语言特性:面向对象、继承、封装、接口、多态、抽象、跨平台等等;
Java内置SDK: Map、List、Arry、Network、File、Thread、 IO等等;
SSM框架:SpringMVC: 负责和浏览器交互、Spring:负责业务逻辑、MyBatis:负责和数据库交互、Log4j:负责打日志、Maven:跨平台依赖包管理等等;
语言设计特性:JVM、GC回收算法,Thread Local等等;
架构体系:分库/分表、分布式、缓存、搜索、抓取、索引、消息队列、集成部署、集群等;
设计模式:单例模式、工厂模式、迭代器模式、中介者模式、解释者模式等等;
工作实战经验:高并发、高可用、容灾备份、降级、微服务等;
要想学习Java达到能找一份工作(无论好坏),并且能做项目,最起码要将:Java基础语法、Java语言特性、Java内置SDK、SSM框架学习通透。
否则就算你勉强着了一份工作,真正要动手做项目,依然是大把东西都不会(别怀疑,有那种培训班出来特会面试的,入职后什么都不会,这种我见过)。
下面重点说下这四块学通透要花多久:
1.Java基础语法,这个有个几天基本就学会了,无非是看看书和视频,然后一行行敲代码。
2.Java语言特性,比如Erlang里的收件箱和发件箱,Java里的面向对象、继承、封装、多态、接口等等,这个稍微难点,但高效学习的话也就1-2周。
3.Java语言内置的SDK,Java里内置了非常多的东西,Map、Arry这些算是最常用的集合,也比较好理解,但像IO、Network、File之类的就麻烦多了,因为理解这些封装SDK的背后需要大量计算机体系基础知识,比如计算机网络、操作系统等等。好在Java提供了一个神器:Java Doc,不会的话就去查查,勉强能改能运行起来也差不多了,这一块最起码需要1个月左右的时间,如果想精通基本几个月甚至几年起步。
4.SSM框架:它们都是开源工具包,或者叫开源框架,Java最令人发指的就是这几个弟兄,在它们面前你之前学的Java的基础知识几乎作废!SSM框架是完全不一样的东西,同样一个功能放在不同的场景下就需要选择不同的框架。但这玩意基本是所有公司做项目的标配,拼命学,2个月起步吧。但要想精通基本贯穿了整个编码生涯。
以上,总计差不多3个月,就能成长为一名初级Java工程师,不少培训班为啥时间是3个月?其实还是有一点科学道理的。
但是,但是,无论你是科班出身还是培训班流水线培养出来的,找到一份Java工作只是一个起步。Java是特别容易让人低估的语言,不少C++出身的人上来就狂妄宣称:一个月玩转Java,最终都被残酷的事实打脸。
我曾经就是,作为毕业就加入腾讯担任C++开发工程师,之后在360成长晋升到技术总监,2014年,我们部门的后端技术栈要转Java,一开始我以为很快就能精通,结果发现Java真是入门容易,天花板却极高。
比如JVM、GC回收算法,Thread Local这些,再比如分库/分表、分布式、缓存、搜索、抓取、索引、消息队列、集成部署、集群这些,随便拿出一项都值得深入研究。
所以,要不断深入的学习,不断夯实计算机体系基础知识、加强对Java整体体系的深入了解,这样才能成长为高级Java开发甚至Java技术专家。
另外,初学Java不建议一上来就啃经典大厚书,可以看看Java初学书籍,再搭配学习视频来完成入门。Java入门书籍我推荐这本:
《Head First Java》

http://picx.zhimg.com/v2-7c193be43516d2d26c62cb646982d5a3_r.jpg?source=1940ef5c
很多人上来就给初学者推荐《Java编程思想》,其实是很不负责任的表现,这本书才是初学者最好的入门书籍,虽然很厚,但是非常简单且有趣,比如这张图,你感受下:

http://picx.zhimg.com/v2-113e3380d6471e0b587073d076777add_r.jpg?source=1940ef5c
是不是很逗很风趣,其实对于初学者,兴趣是很重要的,这也是为什么看容易的书和看视频会更好的原因。
攻克完这本书,再看看Java入门视频,再动动手实践下。这之后就可以开始啃啃Java经典大厚书了,比如什么《Java编程思想》、《Java核心技术》、《effective java》、《java 网络编程》等等。
学习Java书籍是要严格遵循顺序的,一定要由浅入深,更详细的学习顺序大家可以看看这个3000赞回答,这个真心牛逼,最好看看:
关于JAVA的书籍最佳阅读顺序,大家有什么建议?好巧不巧,前几天我正好整理了一份过去12年看过的Java和计算机体系基础知识的经典书籍书单,从入门到精通,这个回答提到的大部分Java书籍,这份资源里全部一键搞定。
另外我把大学和工作中用的经典电子书库(包含数据结构、操作系统、C++/C、网络经典、前端编程经典、Java相关、程序员认知、职场发展)、面试找工作的资料汇总都打包放在这了,这套资源可不是一般那种网上找的资源,是伴随我从学生一路成长为腾讯高级开发工程师,360技术经理、360技术总监、中小公司CTO的打包全套,非常宝贵!点击下方链接直达获取:

http://pic1.zhimg.com/v2-f2c98d56488a69f9b157c642e43de308_r.jpg?source=1940ef5c
我已经帮大家打包好了,点击下方链接直接获取:
计算机经典书籍(含下载方式)大家可以抓紧安排学起来,另外重点说一下,看书其实是有技巧的,千万别一头扎进去出不来。首先如果看不懂某个知识点,那大概率是这个知识点背后的基础不牢固,不妨回过头针对性的看看这个知识点。
比如在你学习Java的Network之际,要是犯迷糊了,那就应该看看计算机网络相关的书籍或者视频,了解下HTTP、DNS、ARP、TCP、IP、ICMP、UDP等基础知识。这样不光你能攻克学习的卡点,顺带还把计算机体系基础知识给补齐全了。
另外,看书可以选择自己感兴趣或者工作实战中用得着的章节来看,这样也算做到了看完就可以实践,学习的关键点在于实践,脱离实践的学习是很难深刻和牢固的。
不知不觉写了这么点,但还是想给大家力推一份超级详细硬核的Java学习成长视频系列,为了整理这份视频,我整整花费了一天时间,就为能帮到真正渴求进步的同学:
接下来送题主和大家一份我整理的超级完备的Java视频系列,它涵盖从入门到精通、从理论到实战、从概念到应用,绝对经典:

一、Java基础

1、尚硅谷宋红康(强力推荐):
尚硅谷宋红康Java基础教程(java入门神器、配套资料齐全)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
2、北京尚学堂高琪(强烈推荐,总计300集):
高淇老师应各位网友要求又更新了JAVA300集_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
3、求知讲堂的课程,适合零基础的朋友, 视频特点:无废话、无尿点、知识密度极高 :
2019求知讲堂零基础Java入门编程视频教程 高口碑 无废话 无尿点_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili二、数据结构与算法
学完Java基础后,可以将数据结构、算法和Java一起学。对于程序员而言数据结构、算法是重中之重,不少大厂面试必考这两项,有些面试官甚至要求手写。
这里给大家推荐六分超级经典的视频:

1、郝斌,数据结构入门,看完这个常用的数据结构基本都了解了:
【郝斌】-数据结构入门_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
2、尚硅谷的图解Java数据结构与算法,有趣生动,很给力:
尚硅谷Java数据结构和java算法,韩顺平数据结构和算法_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
3、恋上数据结构与算法,这个视频还带课件,很强的:
恋上数据结构与算法(第一季、第二季)带课件_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
4、邓俊辉MOOC数据结构与算法全套,清华出品、品质保证:
【全】清华大学-邓俊辉MOOC数据结构与算法全套_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
5、(小甲鱼)数据结构与算法(总计99讲,超给力):
(小甲鱼)数据结构与算法(全99讲完结版)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
三、SSM框架
学完上面两项,就可以开始学习SSM框架了。web后端开发分为3层,表现层:SpringMVC负责和浏览器交互、业务层:Spring框架负责业务逻辑、持久层:MyBatis负责和数据库交互。
学会这些,基本可以动手做点小东西,甚至找工作问题都不太大了。
1、spring源码剖析,这个太经典了,看完你基本能明白spring究竟是个什么东东:
【spring源码全集】B站唯一阿里P8级别的架构师教程_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
2、spring最好的入门视频教程之一_:
Spring4.x入门视频教程_王泽(广陵散)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
3、尚硅谷的这个视频,很适合初学SSM框架的朋友:
尚硅谷SSM整合教程(ssm框架整合技术方案)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
4、黑马SSM教程,这个视频短平快,还附有实战例子:
Mybatis教程IDEA版-4天-2018黑马SSM-01_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
5、传智播客的SSM框架视频整合:
【javaWeb(SSM)】+SSM框架视频整合+(传智播客)(一)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
6、SSM框架整合教学IDEA版最新:
SSM框架整合教学IDEA版最新_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
7、学习SpringMVC,这个视频首推:
尚硅谷SpringMVC教程(springmvc框架,佟刚spring mvc)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

四、JVM
Java基础学好上面三个部分就够了,但还是想推荐几个JVM的视频,毕竟JVM是Java最重要的组成部分,没有之一!

1、juc 与 jvm 入门:
juc 与 jvm - Java 必学 2019版本-阳哥- 尚硅谷- idea_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
2、这个视频看完基本能整体了解jvm的运作机制:
尚硅谷宋红康JVM教程(java虚拟机详解,jvm从入门到精通)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
3、要想深入理解jvm,看这个就对了:
深入理解JVM 虚拟机 圣思园张龙(108p版)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili如果有用的话,记得帮我 @findyi一个点赞鼓励哈,笔芯~

xpdou 发表于 2023-10-8 06:55:14

玩Java多年的老司机带你上车全面系统学习Java,并且还能教你如何学习才能在今年拿到一份不错的offer。
说到系统全面,就是以目前绝大部分公司招聘要求的知识内容为基准,毕竟我们学习Java都是为了高薪工作,《史记》中说”天下熙熙皆为利来,天下攘攘皆为利往“,为了高薪工作而学习Java技术,这都是人之常情,也是大部分人奋斗的目标。
我们先看看市场上招聘Java程序员都需要哪些技术:

http://pic1.zhimg.com/v2-3d5e328c54cddaa3ff1d2867d87ba9ae_r.jpg?source=1940ef5c

http://pica.zhimg.com/v2-6843f356f4af00e2eb1d829a2d208e1d_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-6a0ea12359adf2f7a832e64e1df306c0_r.jpg?source=1940ef5c
看了上面三家招聘要求不难发现,初级Java工程师的要求大致相同,主要框架就是Spring家族系列框架为主。而数据库是MySQL和Oracle,一般中小型公司是用MySQL,规模稍微大一点的公司则是Oracle为主,以及Web相关的基础内容和一些如git、Maven、SVN工具的使用。
以学习目标到导向,企业当今最流行使用什么技术,我们就学习什么技术。

全面系统的Java内容如下:

一、JavaSE基础篇
JavaSE就是一种标准版,是Java语言的基础部分,Java衍生出来的各种框架(如Spring系列)各种产品都是基于JavaSE标准,JavaSE是Java向上发展的基础,Java任何高级产品的底层基础都是JavaSE,通俗来讲这是所有孩子的”爹“。JavaSE如果学不好,理解不透彻,后面学习框架时就有如天书一般,所以JavaSE这部分的重要性是不言而喻的,希望各位初学者铭记。
主要包含内容:数据类型、基础语法、运算符、流程控制、数组、面向对象、常用类、异常处理、集合、IO流、多线程、反射、注解、解析、网络编程。
我用三个月的时间录制了一套2023年最新的Java就业教程,如果有需要的朋友可以点击下面的插件获取,我“免费”分享给大家,这是我建立了6年的Java学习群,算是给自己打个小广告,以后我想成立自己的软件公司,所以就想多认识一些学习计算机的大学生,以后可以来我公司实习给我帮忙,有学习Java的问题也可以问我,工作不忙的时候我会给大家进行解答。
1PS:JavaSE的内容非常庞大,任何一套JavaSE教程都不会把所有的方法讲一遍,只会挑平时工作中常用的内容来讲解,所以JavaSE里面的内容很多都是课后自己在API文档中慢慢了解的,你自己一定要学会主动学习,不能坐以待毙。
推荐学习书籍:Java核心技术
这本书是老美写的,出版以来,一直备受广大Java程序设计人员的青睐,畅销不衰,是Java经典书籍。囊括了Java平台标准版JavaSE的全部基础知识,提供了大量完整且具有实际意义的应用实例,详细介绍了Java语言基础知识、面向对象程序设计、接口与内部类、事件监听器模型、swing图形用户界面程序设计、打包应用程序、异常处理、登录与调试、泛型程序设计、集合框架、多线程等内容。
二、数据库篇
数据库是学习Java语言必学的一项内容,常见的数据库就是MySQL和Oracle这两种,作为初学者一般都是学习MySQL为主,一般情况下中小型企业都会选择MySQL数据库,比较大型的互联网公司会选择用Oracle,而学习Oracle相对于MySQL也要复杂一些,建议是主要学习MySQL数据库,Oracle作为了解即可。
三、Web开发
Web前端内容:HTML/CSS/JavaScript/(前端页面)
注意:Java后端开发可以不用过多关注HTML页面及CSS的处理,但是最起码要会用简单的HTML,JavaScript是必需要会的,因为Javaweb后端程序员毕竟要接触使用AJAX方式处理数据及显示。当然如果只关注服务器端实现而不考虑任何用户界面,则HTML、CSS、JavaScript都不用关注,但是完全脱离前端的开发现在虽然也不少,但是绝对不关心前端是不可能,尤其是JavaScript,但是前端却可以完全不关心服务器后台的任何实现。
推荐学习书籍:《JavaScript DOM编程艺术》(第二版)
这本书作为被大家推荐的最多的前端入门书籍是有道理的。他能真正让大家了解dom脚本编程,或是说前端编程技术背后的思路和原则。对于初学者来说,这本书没有任何门槛,按部就班跟着书籍实例编写代码即可。我们会知晓如何对浏览器元素操作和掌控,会学会如何实现简单的页面效果。这种简单易得的成就感是一个编程语言入门时最难能可贵的体验。
JavaEE内容:Servlet/JSP
虽然现在网上在传JSP很少用了,可能是被一些模板或JS AJAX方式代替了一些,但是我认为还是应该接触一下,万一要用到不会怎么办,而且它是Java EE的动态网页实现标准组件。学习JSP过程也能更好的帮助我们理解web会话的过程,掌握web会话都有哪些我们必需知道的。如果学习Javaweb、JSP都不接触那就相当于学习使用Springboot而一点不接触SpringFramework一样,岂不是稀里糊涂。包括开发Javaweb 我们必需知道的概念诸如Web应用上下文,请求对象,响应对象,HttpSession,Cookie等都是在接触学习JSP和Servelt中体现的,还有一些比较少见的EJB JSF JMS 以及 Java Felix等。
一些初学者不清楚这些难免会有误区,尤其是有些较成熟的工程师也这么说,我只能说他们很无知,只是代码机器而已,其实对于应用开发设计也就稀里糊涂,人云亦云罢了。

四、高级框架
1、Springframework 核心IOC容器
2、Spring boot 在Spring基础上的更全面提升效率的Spring工具
3、ORM 框架当今流行使用较多的是Mybatis 和 MP(Mybatis插件),Hibernate是可选性学习的
4、模板技术,比较成熟的Freemarker
5、Spring Cloud 微服务框架,Spring Cloud提供的全套的分布式系统解决方案。
五、工具
maven 是构建管理项目的工具,svn 和git是团队协作开发的项目源代码及相关文档资料管理工具,需要学习者初步掌握其应用。
像Tomcat,jetty ,resin,JBoss,GlassFish 等都是部署运行Java web应用的服务器。
以上就是初学者大概学习的内容,我是尽量站在初学者的角度来说的,没有写得特别复杂,怕初学者看不懂,没有实质性的帮助。所以我尽量用白话把话说的简单一些,给大家罗列出主要学习的Java知识点。
知道了Java要学习的大概内容,下面就是怎么才能用最好的方式把Java学好,从而达到就业的水平,首选我们应该了解一下目前想要达到找到工作的水平,应该是怎样的。
学习Java的过程中会遇到无数的问题和Bug,所以一定要有人交流,有人给你解答问题,不然你很难进行下去,没有交流组织的朋友,可以点击下面插件加入我们的Java交流群,平时非常活跃,我经常给大家解答关于Java学习的问题,没有任何套路,全部是免费公开的。
1Java学到什么程度才能达到就业的水平:
对于大多数初学Java的同学而言,最关心的莫过于我学要学习哪些和学到什么程度才能找到相关的Java研发工作岗位。
不同的软件公司对研发人员的水平要求存在一定的差异,如果从大多数中小型企业来看能接受一个入职到本企业的IT技术人员通常需要具备以下能力。
1 理解掌握Java核心面向对象的设计思想和代码构建,能以面向对象方式设计编写业务功能;
2 熟练掌握至少两种数据库的开发,如Oracle,mySql,能熟练编写基本常用及高级的SQL语句;
3 必需掌握并熟练应用Springframework IOC容器,深入了解IOC及AOP概念并应用,使用MVC实现对web 请求做出处理;
4 熟练掌握Java处理数据库的ORM框架myBatis,JDBCTemplate,对Hibernate也应有所了解;
5 熟练应用Spring 增强工具集合Spring boot;
6 至少熟练使用Eclipse及IDEA集成开发工具构建应用程序;
7 能够基本掌握MVN GIT Maven 在项目中的使用;
8 前端开发必需掌握JavaScript和常用的JS框架
以上这些都是中小型软件企业的入职基本要求,如果你能够达到这个水平,找到一份Java工作应该是不难的。
推荐的学习方式:系统视频教程+书籍辅助+有人指导

视频教程:对于Java初学者来说,看视频学习也是最普通的方式,视频教程会把工作中常用的知识进行讲解,而且视频一般都是分章分节,每一个小节都只讲一个知识点,学习起来较为明确。但是视频教程尽量要完整,最好是一整套视频学习。
书籍辅助:书籍便于对理论知识的补充,以便更容易理解Java面向对象核心设计理念和代码实践功能。
PS:但是大部分人都没有耐心看不下去书,所以大部分人都是只看视频教程学习。如果自己能看的下去就看,看不下去就不看。
有人指导:大部分人都不可能全靠自己的能力把Java学的特别好,因为你不了解这个行业,也不知道怎么学,完全零基础自学Java想要找到工作,概率极低。所以建议如果真的想要做这行,尽量找人去带带你,有不懂的问题可以直接请教,少走弯路,提高效率。学习的质量决定以后工作的薪资以及起点,所以还是应该重视起来。
项目的重要性

很多Java初学者看完一些视频,学过一段时间就说自己“会了”。这里我需要给大家纠正一个问题,希望每个学习Java的知友都能明确学习编程的中心是什么。 其实在我看来,学习编程从来都不存在会不会这样的说法。学习编程不同于初中学的数学、物理、化学,记住一些公式,做同样一种类型的习题,就证明类似的题型你会做了。 编程只讲技术能力是什么水平、什么级别的,最能证明技术水平处在什么阶段的,就是在做项目的过程中,研发好的互联网产品,写代码的质量怎么样,排错能力怎么样,找BUG的能力怎么样,构思功能模块整体布局的能力怎么样等等。 做作为初学者想要达到入门的水平,就是自己具备了一些简单项目的编码能力,初学者最重要的一点就是培养自己的编程思维,每一个程序都是不一样的,你不可能都背下来,学编程也不是靠死记硬背的,你只有能去独立编码写一些东西的时候,才有就业的就会。
所以做项目的能力才能去衡量一个学习的水平处在什么阶段,而往往那些嘴上说“会了”的人,往往没写过多少代码,也一个项目做不了出来,这就是纸上谈兵,完全曲解了学习编程到底在学什么,也不知道应该往哪里去。
所以一个Java初学者在学习的整体过程中,必须要有两个能拿得出手,能写在简历上的项目作为找工作的资本,并且要对于这两个项目的前前后后相当了解,才可能最后面试成功,一个初学者在学习完Java所有内容后,如若还达不到可以做简单项目的水平,那么他整个学习过程还是白费,没有达到最终的学习目的,就是学习质量不过关。所以项目的重要性希望大家都明确,因为有太多Java初学者不知道最后学习的目的是什么,最后白白的浪费时间。
1学习心态:

学习编程一定不是一个简单的事情,换句话说它还是挺困难的,毕竟能出去找到工作,就是少则五六千,多则上万的工种。这些知识都不是随随便便就是任何一个人都能学会的。关于这个学习心态,希望提示大家要把重心放到“学习”这件事上,因为我发现有很多Java初学者都是像“完成任务”一样去学习,所谓完成任务就是“我把这些视频看完就能找到工作吗”“我把这些都学完就能找到工作吗”学完并不等于“学会”,这是两种不同的概念。
你到底理没理解?
你到底能不能应用起来?
你到底用没用心?
你自己应该是最清楚的,我发现那些把学习当做完成任务一样去对待的,这样的人没有一个是有耐心的,自己在心里欺骗自己“把这些视频看完我就能找到工作”,到了最后自己就逐渐明白,完全是自欺欺人,最后放弃说自己不适合学这个。其实揭开这些人的面具真相就一个:他们没有耐心学习,也不喜欢学习,这是以前经历造成的,是多年的习惯导致的。
所以正确的学习心态一定是把关注点放到学习这件事本身,你要学会这些知识,这些内容,这些技术,这是需要一天一天逐渐积累起来的,并不是短时间就可以达到什么结果。
PS:如果你对于学习没什么耐心,没什么兴趣,我劝你不要来学习编程,学习编程绝对是一个耐心的活,也是需要不断学习和充电的行业。或者说已经到了信息时代,不爱学习的人,很难有耐心去学习知识的人,在信息时代是混不下去的,任何行业都是如此,不学习不进步不紧贴时代的人就一定会被淘汰。
最终自学Java能就业的人基本具备以下几点:
1、有超强的学习耐心及进取心
2、手不懒,代码写的足够多,熟能生巧
3、有一定的学习能力,善于自学善于自己解决问题
4、可以独立写一些简单的项目
以上内容均由本人手写而成,完全站在Java初学者的角度来说,就是希望能用通俗易懂的语言让大家清晰的明白学习Java全面系统的学习内容,以及应该达到什么程度才能拿到一份Java工作的offer,希望可以给大家带来帮助。
如知友们对于学习Java还有相关的一切疑惑与难题,皆可随时私信我咨询,本人接触Java语言将近20年时间,敢说自己对于Java的了解是精通的水平,如能尽自己的绵薄之力为大家提供一些微薄的帮助,不胜荣幸。
2023年新更新——
没想到已经这么多赞了,感谢大家的支持,如果对于学习Java有任何疑问可以随时来问我,知无不言 言无不尽的帮助大家解决。

落日的孤单 发表于 2023-10-8 06:56:09

我最近在考虑写本技术书,顺便也在整理过去几年在知乎的技术问题,正好有知友私信问我这个问题,回过头来再看,不由得感慨万千。
过去两年,陆陆续续不少人来加微信,QQ群,然而我仍然是越来越悲观,越来越坚定了我2年前的观点(附在后面),可能只有培训班,才会真的培养起入门这个事情。原因很简单,过去2年,我所看到的自学的人,无一不是三分钟热度,而他们遇到问题的态度,又无一不是伸手党。就算是我有心带一把后辈,我绝对不可能把我自己的业余时间无休无止地扔在帮人配JDK PATH上面对不对?
比如很多人问,JAVA到底如何入门。那么这其中又有大约两个层次:
第一个层次,你根本是行外人,一天用电脑也就一两个小时,玩玩游戏,其他什么都不懂,你听别人说JAVA很火工资很高,想要入门。
这个入门,是入编程门,走的路径是JAVA。JAVA对于你来说,是进入编程世界的工具。那么你所需要掌握的,主要是编程的思路,是一种想法,而JAVA是帮助你实现想法这种抽象物品的一个具体实现。那么,你需要的是三种能力。
第一是知识搜索能力,即使用搜索引擎的能力。这个能力我突然发现,很多人是缺乏的。曾经有一位网友,向我询问入门的知识,我告诉他,你可以看视频。这本是很直白简单的情况。然后这位网友,向我抱怨,他无法查到,我看了他提供的截图,发现他输入JAVA入门在百度当中,出来的结果多数是介绍JAVA历史知识这些,他显得非常沮丧。这就是我所谓的基础知识搜索能力。编程的时候,你会遇到很多问题需要去查询,如何能获取正确的知识结论,这个技能非常重要。如果是我,我就不仅仅会输入JAVA入门,因为我要查询的是视频,我可能会输入JAVA入门空格视频,甚至,我还能更精确到JAVA入门空格视频空格hello world,这样显然你在第一个链接就能获得想要的视频,从而达到你的目的。此即为基础知识搜索能力,当然,高级的知识搜索能力,是需要练习的,这个日后再讲。基础能力的表达形式主要是:根据一两个词,你应该能在网络上获取正确的解读。比如你要学spring,你就需要能够找到足够的关于spring的知识,你会如何搜索?你会仅仅在百度输入spring?还是别的什么?任何你需要的问题,在半小时内能在全网搜索到,基本上,你的学习能力是非常强的,一小时以上仍然无法搜索到,你需要考虑是是否合适在程序员这个岗位上继续下去,这对于你和代码来说,都会是个痛苦且漫长额过程。
其次是理性看待术语的能力,这是普通人不具有的一种能力,需要特别训练。术语乃是创造来供专业人士快速沟通的,你可以把他看做是一种专业的“梗”。所以术语不要望文生义,术语需要确切理解其针对的意义,这在初学者或者行外人当中非常常见,并且致命。他们通常会反问道,为什么这个词不是那个意思呢?术语,就是定义,定义成什么样,就严格按照这个定义来,同时,也希望你不要试图用通俗语言再进行二次理解,你就确切的,完全的理解术语,这是你需要做到的。打个比方,之前有人问我基础的infra的事情,我就给予讲解了服务器和客户端的结构,他就问我,服务器是不是就像是家里的宽带猫,我说不是,于是他就问我,为什么不是?他们的区别是什么?这我就认为,这样是提高了学习成本。编程本来就是反人类的,不要试图用已知的知识去套用未知的知识,你需要强行背出来服务器是什么,而不是拿不相关的东西去想像。
第三抽象思维和结构化思考的能力,这是更高阶些的东西,连一些处入行的人,都不具备。人类的思考方式具有联想性,随着你思考的范围增加,你会从一处跳到另一处,这就是很多人常常说的,我看不懂这些代码。为什么看不懂?所有的代码,除去语法区别,都是非常简单的,尤其是现在OOP的阶段,所有的东西都是对象方法属性,不可能看不懂,为什么看不懂?因为你的思维跳跃了,你本来想看toString()的实现,进去一看,还跳转到其他类,再进去看这个类,跳了几次,你已经不知道你想看什么了,这是缺乏结构化思考问题的能力,你需要能够知道何时把问题当做黑盒来看,何时把问题当做白盒来看,这样,才能快速将问题切分,切分的越小,越容易学会。
解决了这些问题,你就入门了,是从一个非计算机人才转变成了一个计算机人才,用JAVA作为入门的工具,事实上,在这个阶段,用别的语言也是没本质区别的,之所以选JAVA,很可能是因为JAVA的用户更多,资料更多。在这之后,你基本上已经了解了计算机语言的大致区别,可能是对计算机有兴趣的高中生或者理科大一的人,想要把JAVA作为发展的方向之一。
你就可能转入下面一个阶段,也就是去专精JAVA,这是第二个入门,程序员的JAVA入门。对于JAVA专精为目标的入门,其实网上有很多很多内容,我是嗤之以鼻的,尤其是充斥着知乎的脑图,我最为厌恶。
我教各位一个简单的原则,分清一个“路线图”是不是正确的,你看四个点
1,有没有swing,AWT,这类GUI,有的,直接扔掉
2,有没有XML作为一个巨大的知识点,让你看各种SAX,DOM,XSD,XPATH的,有的,直接扔掉
3,有没有Struts的,有的直接扔掉
4,有没有叫你了解一堆容器的,从tomcat开始,各种容器,有的直接扔掉
为什么?显然是闭门造车的后果,多数是学生的臆测,或者是水平很低的培训老师的产物。
JAVA世界的一个特点就是知识点分散,任何给你建议要全面学习的,在我看来,全部是学生思维的臆测。原因很简单,不可能。当你不可能精通十八般兵器的时候,你要如何上阵杀敌?回答很简单,一力降十会。
JAVA世界虽然知识点分散,但是总是有一条主要的脉络,而现在误导你们的,主要在于主次不分地给予你们指导。说简单,很简单,8成的公司都需要会这些东西的人:
layout+spring+database 就这么简单,在这个组合上面,能有千变万化,但是,何妨你先掌握最基础的一种?少林绝学千千万万,是不是还是入门每个人都要从少林长拳开始入门?长拳打的好,是不是也能成为大侠?萧峰就能靠一套长拳退敌,那你作为新人,为什么要着急去看一阳指呢?
来,我们就来入门JAVA长拳。JSP+spring mvc+mysql
是不是很简单,不要去看其他的东西,在你没有熟练这些之前。
那么我在另外的专栏里面讲过,用打包安装,可以跳过你最烦恼的环境配置。简单的采用bitnami上提供的tomcat安装包,数据库也已经包括在里面,可以很容易的进行环境搭建,采取eclipse官网提供的J2EE开发者安装包,或者IDEA都能简单的获得IDE,这两步都可以在半天内完成。如果你无法独立依靠搜索完成这两步,我劝你重新衡量入行程序员。
你有了IDE,你有了环境,你就需要开始写代码。
写一个jsp,写一个spring controller,写一个数据库直接访问类,这些网上都有直接的例子,部署到tomcat里面,注意什么资源部署到什么位置,这些按照你的能力,基本上能在1到2周内完成,我认为30%的人能独立依靠网络资源完成,50%的人需要同辈的互相讨论(这个我有一肚子话想要吐槽,放在后面非技术部分),最后20%的人必须有一个完全成功的例子,照着做才能做好。
这就入门了呀,这有什么难的?那大堆大堆的其他东西,都是在这个之上的呀,前端框架?前端框架再复杂,能跳出JS转换成HTML显示,JS提交表单吗?XML,XML再复杂,能跳出element读写吗?Json,有什么难的?任何输入格式只要告诉你如何读取,都是输入而已。数据库有什么难的?先不说大部分公司都有自己的实用框架,由不得你写jdbc,SQL写的好不好,纯粹是经验,经验这种东西,你靠学习能获得?木工你不去锯木板,你看书能获得经验?这根本就不是你该“学习”的事情,IT技术当中有相当多的“经验”,你学习?是学习不到的。早日抛弃学生思维,你要知道什么是学习能学习得到的,什么是要获取经验才可以的。
其实扔完干货,我有些掏心窝子的话想要和大家说,就是学习群的事情。大家都是成年人,免费的东西是最贵的。在商言商,培训班是因为培训而盈利,因为成绩而能获得更大的名声的,他们有足够的时间,资源来带你入行,而用爱发电的前辈,无一不是陷入无穷无尽的伸手党漩涡,最后身心俱疲,放弃的。这是两年前我就表达的观点,两年后,再次来强调一下。
过去几年,我带着一个可以几个月没声音的JAVA群,自己做公司里面的内部培训,自己也参加AWS的培训,也为很多朋友在培训和带领新人上面出谋划策,发现了一点,经过多年的演变,目前的培训,已经基本上从过去线下式的课堂教育,以贷款形式预知数千到上万学费这种我们非常讨厌,榨取式的培训,演变进化到了线上培训。线上培训,我是赞同的。这是目前的主流,也是我会推荐你们入门的唯一方法。
为什么推荐培训班了?原因是什么?是性价比。因为现在线上培训,已经白菜价了,而不出钱的混JAVA群,除了表情包能收获的大多是吹逼能力。
过去讲,IT人最讨厌培训班,讨厌的是那种动辄几万,以包就业为幌子的线下培训班,这些教的不是知识,是欺骗用人单位的方法,这样子教出来的,不是IT人,是骗子。
现在线上培训,已经很成熟了,包括他们的讲师聘请,课程销售模式,都是非常成熟的商业化。商业化是好事情,专业的人做专业的事情可以做到非常细致。尤其是线上的内容,可以比线下培训班深入很多,最大的原因是师资力量的不同。我记得我在平安的朋友讲,他们甚至于有一次找拉勾教育把尤雨溪找来培训VUE。我去他们的网站确认了下,还是真事。
比如这种线上的培训内容,你可以看到,如果线下培训班要凑齐这种师资力量,是不可能的,这种技术栈,连小一点的公司都覆盖不全,别说线下培训班了,而线上的培训班就可以做到,因为他的培训老师可以是从各大大厂拉来的,专门应对某一个话题的。


http://picx.zhimg.com/v2-d55ea4c5e104788980537962001c0d70_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-1c4e74baa1b3b798ecedb0ccca82f0d2_r.jpg?source=1940ef5c
你可能想要一分钱不出,在网上找大神教,或者自己找资料学来入门。那么过去,是可以的,因为去培训班,你要全职去学,你要付出几万学费几个月时间,和这种成本比起来,晚上找资料或者大神,是远远高效的。而现在不同的是,你吃顿肯德基就能看上十几个小时的名师讲解,你网上找错几篇文章,抽一包利群干几瓶酒,也差不多这些钱了。。。
而且现在线上教育的好处,有一个是其他培训无法比拟的,就是深入。我和线上线下培训班都合作过,两者的差别非常明显,线下培训班的师资力量受规模限制,不可能拥有无限知识储备,但是线上培训班就可以,他们的课程录了一门是一门,随着累积效应的增加,的确可以覆盖大部分情况。比如JAVA虚拟机这种东西,要深入了解,就必须有非常多的实战经验,就得是真的做过大项目群的人,这种人,生活中你本身能接触到的就不对,人家也不一定有时间给你细讲,更不可能去线下培训班上课,也只有线上能把这样的资源整合起来,录成视频教学。

http://picx.zhimg.com/v2-e5acc4ce3348e86cf9d44a1e10e7ede7_r.jpg?source=1940ef5c
所以很简单,JAVA怎么入门?
少吃一顿烧烤,去买一堂网课。


============2年前的回答==================
我之前挺热心带自学入门的。后来扯了几个学习群后,知道水深了。再之后,我一般都劝培训班了。原因有二:1,免费的东西,基本上不珍惜。2,9成的人没有自学能力,但是觉得自己有自学能力。
比如我在群里,用spring全家桶搭了一个框架。基本上包含了spring入门的所有东西,“小公司,小作坊,可以直接用这些技术开发内容了”看看dependency就知道包含哪些了。
群快两百人。这个project fork只有6个。只有个位数的人问过问题,想要了解这个内容。其他大量的每天都是在看,这个分号少打了,那个逗号写错了,都是毫无意义的自学项目。这你就知道现在所谓如何自学,这些问题的真正目的是:有什么捷径?区区20几个类的程序都不愿意学,到处都是“读spring源码” “实现JVM”。
怎么入门?花大价钱去念培训班吧。起码花了钱会因为心疼而跟着老师做。

http://picx.zhimg.com/50/v2-088209905ea9dc1840ef26b7c91a8622_720w.jpg?source=1940ef5c

CHUNLAN789 发表于 2023-10-8 06:56:21

这三张图够用吗?

http://pic1.zhimg.com/v2-6343aa35b0e7dcbf49a999ed0fcbec86_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-3f32105612d09dbbcf1f153e4dcf99d1_r.jpg?source=1940ef5c

http://pic1.zhimg.com/v2-6e6fec69a505306d79f4990cd2ac9e51_r.jpg?source=1940ef5c
页: [1]
查看完整版本: 自学 Java 怎么入门?