Skip to content

Commit

Permalink
优化结构
Browse files Browse the repository at this point in the history
  • Loading branch information
itwanger committed Mar 13, 2023
1 parent d40f780 commit baa31c5
Show file tree
Hide file tree
Showing 8 changed files with 205 additions and 73 deletions.
4 changes: 1 addition & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,7 @@

## Java概述及环境配置

- [Java简介,什么是 Java?](docs/overview/what-is-java.md)
- [Java发展简史](docs/overview/java-history.md)
- [学Java还有前途吗?](docs/overview/java-can-do-what.md)
- [Java简介](docs/overview/what-is-java.md)
- [安装Java开发工具包JDK](docs/overview/jdk-install-config.md)
- [安装集成开发环境Intellij IDEA](docs/overview/IDEA-install-config.md)
- [编写第一个Java程序:Hello World](docs/overview/hello-world.md)
Expand Down
2 changes: 0 additions & 2 deletions docs/.vuepress/sidebar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,6 @@ export const sidebarConfig = sidebar({
// readme小写一定要带上.md,否则找不到
"readme.md",
"what-is-java",
"java-history",
"java-can-do-what",
"jdk-install-config",
"IDEA-install-config",
"hello-world",
Expand Down
4 changes: 1 addition & 3 deletions docs/home.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,7 @@ head:

### Java概述及环境配置

- [Java简介,什么是 Java?](overview/what-is-java.md)
- [Java发展简史](overview/java-history.md)
- [学Java还有前途吗?](overview/java-can-do-what.md)
- [Java简介](overview/what-is-java.md)
- [安装Java开发工具包JDK](overview/jdk-install-config.md)
- [安装集成开发环境Intellij IDEA](overview/IDEA-install-config.md)
- [编写第一个Java程序:Hello World](overview/hello-world.md)
Expand Down
4 changes: 2 additions & 2 deletions docs/overview/IDEA-install-config.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: 安装集成开发环境Intellij IDEA
shortTitle: 安装集成开发环境IDEA
shortTitle: 安装IDEA
category:
- Java核心
tag:
Expand All @@ -12,7 +12,7 @@ head:
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,Intellij IDEA安装,IDEA安装,idea,Intellij IDEA
---

# 2.5 安装集成开发环境Intellij IDEA
# 2.3 安装IDEA

IntelliJ IDEA 简称 IDEA,是业界公认为最好的 Java 集成开发工具,尤其是在代码自动提示、代码重构、代码版本管理、单元测试、代码分析等方面有着亮眼的发挥。

Expand Down
4 changes: 2 additions & 2 deletions docs/overview/hello-world.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: 编写第一个Java程序:Hello World
shortTitle: 编写第一个Java程序
shortTitle: 第一个Java程序
category:
- Java核心
tag:
Expand All @@ -12,7 +12,7 @@ head:
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,Hello World
---

# 2.6 编写第一个Java程序:Hello World
# 2.4 第一个Java程序

“三妹,今天,我们来编写第一个 Java 程序,Hello World 期待吗?”

Expand Down
4 changes: 2 additions & 2 deletions docs/overview/jdk-install-config.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: 安装Java开发工具包JDK
shortTitle: 安装Java开发工具包JDK
shortTitle: 安装JDK
category:
- Java核心
tag:
Expand All @@ -12,7 +12,7 @@ head:
content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,JDK 安装,jdk
---

# 2.4 安装Java开发工具包JDK
# 2.2 安装JDK

因为Java程序必须运行在 JVM 之上,所以我们 Java 程序员在学习 Java 之前,要做的第一件事情就是安装JDK。

Expand Down
157 changes: 155 additions & 2 deletions docs/overview/what-is-java.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: Java简介,什么是 Java?
title: Java简介
shortTitle: Java简介
category:
- Java核心
Expand Down Expand Up @@ -97,6 +97,78 @@ Java的第一道工序是通过javac命令把Java源码编译成字节码,之

所以,Java是解释和编译并存。但通常来说,我们会说“Java 是编译型语言”,尽管这样并不准确,主要是 JIT 是后面才出现的,“先入为主嘛”。

### Java 发展简史

20 世纪 90 年代,单片式计算机系统诞生。单片式计算机系统不仅廉价(之前的计算机非常庞大,并且昂贵),而且功能强大,可以大幅度提升消费性电子产品的智能化程度。

Sun 公司为了抢占市场先机,在 1991 年成立了一个由詹姆斯·高斯林(James Gosling)领导的,名为“Green”的项目组,目的是开发一种能够在各种消费性电子产品上运行的程序架构。

项目组首先考虑的是采用 C++ 来编写程序,但 C++ 过于复杂和庞大,再加上消费电子产品所采用的嵌入式处理器芯片的种类繁杂,需要让编写的程序能够跨平台运行并不容易——C++ 在跨平台方面做得并不好。

思前想后,项目组最后决定:在 C++ 的基础上创建一种新的编程语言,既能够剔除 C++ 复杂的指针和内存管理,还能够兼容各种设备。这语言最初的名字叫做 **Greentalk**,文件扩展名为 `.gt`。这个名字叫的比较随意,就因为项目组叫 Green,没什么特殊的寓意。

**Oak** 是“Java”的第二个名字,这次就有点意义了。Oak(橡树)是力量的象征,被美国、法国、德国等许多欧美国家选为国树。橡树长下面这样。

![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/overview/two-01.png)

1992 年,Oak 的雏形有了,但项目组在向硬件生产商进行商演的时候,并没有获得认可,于是 Oak 就被搁置一旁了。

1994 年,项目组发现 Java 更适合进行 Internet 编程。随后,项目组用 Oak 语言研发了一种能将小程序嵌入到网页中执行的技术——Applet。Applet 不仅能嵌入网页,还能够随同网页在网络上进行传输。

不得不感慨一下,技术的更新迭代是真的快,Applet 拯救了 Oak,并使其蜕变成顶天立地的 Java,但 Applet 很早之前就被无情地拍死在了沙滩上。是不是很残酷?

1995 年,Oak 被重新命名为“Java”,因为 Oak 被别的公司注册过了。新的名字最好能够表达出技术的本质:dynamic(动态的)、revolutionary(革命性的)、Silk(像丝绸一样柔软的)、Cool(炫酷的)等等。另外,名字一定要容易拼写,念起来也比较有趣。

选来选去,项目组最后选择了“Java”,中文叫“爪哇”。细心的小伙伴可能会发现,Java 这个单词里有一个敏感词,所以有段时间微信(文章专辑名这块)为了禁敏感词,竟然把 Java 都禁了,我当时就只能用爪哇来代替 Java,手动狗头。

“Java”是印度尼西亚爪哇岛的英文名,因生产咖啡而闻名,所以,小伙伴也看到了,Java 这个单词经常和一杯冒着热气的咖啡一起出现。

![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/overview/two-02.png)

同年,Sun 公司在 SunWorld 大会上正式发布了 Java 1.0 版本,第一次提出了“Write Once, Run anywhere”的口号。《时代》杂志将 Java 评为 1995 年十大最佳产品之一。

1996 年 1 月 23 日,JDK 1.0 发布,Java 语言有了第一个正式版本的运行环境。JDK 1.0 是一个纯解释执行的 Java 虚拟机,代表技术有:Java 虚拟机、AWT(图形化界面)、Applet。

4 月,十个主要的操作系统和计算机供应商宣称将在产品中嵌入 Java 技术。9 月,已有大约 8.3 万网页应用采用了 Java 来制作。5 月底,第一届 JavaOne 大会在旧金山举行,从此,JavaOne 成为全世界数百万 Java 语言开发者的技术盛会。

1997 年 2 月 19 日,JDK 1.1 发布,代表技术有:JAR 文件格式、JDBC、JavaBeans、RMI(远程方法调用)。

1998 年 12 月 4 日,JDK 1.2 发布,这是一个里程碑式的版本。Sun 在这个版本中把 Java 拆分为三个方向:面向桌面开发的 J2SE、面向企业开发的 J2EE,面向移动开发的 J2ME。代表技术有:EJB、Swing。

2000 年 5 月 8 日,JDK 1.3 发布,对 Java 2D 做了大幅修改。

2002 年 2 月 13 日,JDK 1.4 发布,这是 Java 真正走向成熟的一个版本,IBM、富士通(二哥曾在这家世界 500 强的日企工作过三年半时间)等著名公司都有参与。代表技术有:正则表达式、NIO。

2004 年 9 月 30 日,JDK 5 发布,注意 Sun 把“1.x”的命名方式抛弃了。JDK 5 在 Java 语法的易用性上做出了非常大的改进,比如说:自动装箱、泛型、动态注解、枚举、可变参数、foreach 循环。

2006 年 12 月 11 日,JDK 6 发布,J2SE 变成了 Java SE 6,J2EE 变成了 Java EE 6,J2ME 变成了 Java ME 6。JDK 6 恐怕是 Java 历史上使用寿命最长的一个版本了。主要的原因有:代码复杂性的增加、世界经济危机、Oracle 对 Sun 的收购。

JDK 6 的最后一个升级补丁为 Java SE 6 Update 211, 于 2018 年 10 月 18 日发布——12 年的跨度啊!

2009 年 2 月 19 日,JDK 7 发布,但功能是阉割的。很多翘首以盼的功能都没有完成,比如说 Lambda 表达式。主要是因为 Sun 公司在商业上陷入了泥沼,已经无力推动 JDK 7 的研发工作。

2009 年 4 月 20 日,Oracle 以 74 亿美元的价格收购了市值曾超过 2000 亿美元的 Sun 公司——太阳终究还是落山了。对于 Java 语言这个孩子来说,可以说是好事,也可以说是坏事。好事是 Oracle 有钱,能够注入资金推动 Java 的发展;坏处就是 Oracle 是后爸,对 Java 肯定没有 Sun 那么亲,走的是极具商业化的道路。

2014 年 3 月 18 日,JDK 8 终于来了,步伐是那么蹒跚,但终究还是来了。带着最强有力的武器——Lambda 表达式而来。虽然 JDK 19 马上就发布了,但“新版任你发,我用 Java 8”的梗至今还流传着。

2017 年 9 月 21 日,JDK 9 发布。从此以后,JDK 更新版本的速度令开发者应接不暇,半年一个版本,虽然 Oracle 的目的是好的,为了避免因功能增加而引发的跳票风险,但不得不承认,版本更新的节奏实在是有点过于频繁。

这就导致一个问题,好不容易更新一个版本,用了六个月后,Oracle 不维护了。针对这个问题,Oracle 给出的解决方案挺奇葩的,每六个 JDK 大版本才会被长期支持(Long Term Support,LTS)。

JDK 8 是 LTS 版,2018 年 9 月 25 日发布的 JDK 11 是 LTS 版, 2018 年 3 月 20 日发布的 JDK 10 就可以一笔带过了。

2021 年发布的 JDK 17 是目前最新的 LTS 版本。

JDK 12、JDK 13、JDK 14、JDK 15、JDK 16、JDK 18、JDK 19 都是过渡产品,就好像是试验品一样,不太受开发者待见。

Java 发展到今天已经 20 多年了,作为一个编程语言确实不简单,Java 代表的面向对象思想确实给工程领域带来了革命性的变化,关键是 Java 一直在拥抱变化。

大数据方面,有 Apache Kafka、Apache Samza、Apache Storm、Apache Spark、Apache Flink,除了 Spark 是基于 JVM 的函数语言 Scala 编写的,其余都是 Java 编写的。

Java 在云时代面临着以 Go 语言为主的容器(Docker 等技术)生态圈的挑战,但是,Java 的大型分布式系统越来越多,Java 在云计算与分布式系统中还是扮演着主要角色,并且形成了一个大型的生态圈。

虽然 Java 和 C++,C 一样,都“老”了,被其他语言不断地挑战,但只有强者才有机会接受挑战,对吧?我相信,Java 的未来依然很光明。

### 学 Java 有钱途吗?

“二哥,学 Java 到底有没有前途啊?我毕业以后能不能找到工作啊?”
Expand All @@ -120,14 +192,95 @@ Java的第一道工序是通过javac命令把Java源码编译成字节码,之

这一切的一切,都让软件开发的效率大大的提高。

下图是号称史上最惨的 23 届秋招 Java 岗的薪资状况,像 22 届的薪资待遇远比这个好得多。
下图是号称史上最惨的 2023 届秋招 Java 岗的薪资状况,像 22 届的薪资待遇远比这个好得多,但其实已经比很多其他行业好太多了

![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/overview/what-is-java-d5e8b87c-741b-49c8-a6d9-7b8bb9ba803b.png)

24 届及以后的起薪肯定会比这个好得多,这上面大专、普本的案例比较少,是因为网上爆的人比较少,但其实这部分群体也是非常大的,所以,学习 Java 还是很有“**钱秃**”的。

“噢噢噢噢,那好吧,我先跟着《[Java程序员进阶之路](https://tobebetterjavaer.com/)》学起来!”

### Java的特性

尽管 Java 已经 25 岁了,但仍然“宝刀未老”。在 Stack Overflow 2019 年流行编程语言调查报告中,Java 位居第 5 位,有 41% 的受调开发者认为 Java 仍然是一门受欢迎的编程语言。

![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/overview/three-01.png)

国内对 Java 的使用率远超国外,所以国内 Java 的市场占有率更大,不管是 2020 年还是 2021、2022、2023 年,短时间内,Java 的霸主地位很难撼动。

虽然这些年 Java 很卷的话,甚嚣尘上,我只能说这样的声音每年都有,听听就好了。

很多大型的互联网公司都在使用 Java,国内最有名的当属阿里巴巴,国外最有名的当属谷歌。那为什么 Java 如此流行呢?

#### **1)简单性**

Java 为开发者提供了简单易用的用户体验,与其他面向对象编程语言相比,Java 的设计和生态库具有巨大的优势。Java 剔除了 C++ 中很少使用、难以理解、易混淆的特别,比如说指针运算、操作符重载,内存管理等。

Java 可以做到堆栈分配、垃圾回收和自动内存管理,在一定程度上为开发者减轻了入门的难度。

#### **2)可移植性**

如果 Java 直接编译成操作系统能识的二进制码,可能一个标识在 Windows 操作系统下是1100,而 Linux 下是 1001,这样的话,在 Windows 操作系统下可以运行的程序到了 Linux 环境下就无法运行。

为了解决这个问题,Java 先编译生成字节码,再由 JVM(Java 虚拟机)来解释执行,目的就是将统一的字节码转成操作系统可以识别的二进制码,然后执行。而针对不同的操作系统,都有相应版本的 JVM,所以 Java 就实现了可移植性。

#### **3)安全性**

Java 适用于网络/分布式环境,为了达到这个目标,在安全方面投入了巨大的精力。使用 Java 可以构建防病毒、防篡改的程序。

从一开始,Java 就设计了很多可以防范攻击的机制,比如说:

- 运行时堆栈溢出,这是蠕虫病毒常用的攻击手段。
- 字节码验证,可以确保代码符合 JVM 规范并防止恶意代码破坏运行时环境。
- 安全的类加载,可以防止不受信任的代码干扰 Java 程序的运行。
- 全面的 API 支持广泛的加密服务,包括数字签名、消息摘要、(对称、非对称)密码、密钥生成器。
- 安全通信,支持 HTTPS、SSL,保护传输的数据完整性和隐私性。

#### **4)并发性**

Java 在多线程方面做得非常突出,只要操作系统支持,Java 中的线程就可以利用多个处理器,带来了更好的交互响应和实时行为。

### Java 应用领域

“二哥,那 Java 还会继续流行下去吗?”三妹眨了眨她的长睫毛,对我说。

“当然!这主要得益于 Java 广泛的应用场景。”我斩钉截铁地回答到。

#### **大数据领域:**

与 Python 一样,Java 在大数据领域占据着主导地位,很多用于处理大规模数据的框架都是基于 Java 开发的。

- Apache Hadoop,用于在分布式环境中处理大规模数据集。Hadoop 采用了主副架构模式,其中主节点负责控制整个分布式计算栈。Hadoop 在需要处理和分析大规模数据的公司当中很流行。
- Apache Spark,大型的 ETL(数据仓库技术)、预测分析和报表程序经常使用到 Spark。
- Apache Mahout,用于机器学习,比如分类、聚类和推荐。
- JFreechart,用于可视化数据,可以用它制作各种图表,比如饼图、柱状图、线图、散点图、盒状图、直方图等等。
- Deeplearning4j,用于构建各种类型的神经网络,可以与 Spark 集成,运行在 GPU(图形处理器)上。
- Apache Storm,用于处理实时数据流,一个 Storm 节点可以在秒级处理数百万个作业。

#### **物联网(IoT)领域:**

![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/overview/three-02.png)

Oracle 表示,灵活性和流行度是 IoT 程序员选择 Java 的主要原因。Java 提供了大量的 API 库,可以很容易应用到嵌入式应用程序中。相比其他编程语言,比如 C 语言,Java 在切换平台时更加顺畅,不容易出错。

#### **金融服务领域:**

- 聊天机器人,由于可移植性、可维护性、可视化等诸多方面的因素,Java 成了开发聊天机器人最好的工具。
- 欺诈检测和管理,银行和金融公司使用 AI(人工智能)工具来进行金融欺诈和信用卡欺诈检测,而 Java 常用来开发这些 AI 工具。
- 交易系统,Java 虚拟机提供的动态运行时编译优化在很多情况下比编译型语言(如 C++)具有更好的性能,让交易系统运行得更顺畅。
- 移动钱包,基于 AI 和 Java 算法开发的移动钱包,可以帮助用户在花钱时做出更智能的决策。

#### **Web 领域:**

Java 技术对 Web 领域的发展注入了强大的动力,主流的 Java Web 开发框架有很多:

- Spring 框架,一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,渗透了 Java EE 技术的方方面面,绝大部分 Java 应用都可以从 Spring 框架中受益。
- Spring MVC 框架,是一种基于 Java 实现的 MVC(Model-View-Controller)设计模式的请求驱动类型的轻量级 Web 框架。
- MyBatis 框架,一个优秀的数据持久层框架,可在实体类和 SQL 语句之间建立映射关系,是一种半自动化的 ORM(Object Relational Mapping,对象关系映射)实现。
- JavaServer Faces 框架,由 Oracle 开发,能够将表示层与应用程序代码轻松连接,它提供了一个 API 集,用于表示和管理 UI 组件。

总之,Oracle 宣称,Java 正运行在 97% 的企业计算机上——有点厉害的样子。

----

最近整理了一份牛逼的学习资料,包括但不限于Java基础部分(JVM、Java集合框架、多线程),还囊括了 **数据库、计算机网络、算法与数据结构、设计模式、框架类Spring、Netty、微服务(Dubbo,消息队列) 网关** 等等等等……详情戳:[可以说是2022年全网最全的学习和找工作的PDF资源了](https://tobebetterjavaer.com/pdf/programmer-111.html)
Expand Down
Loading

0 comments on commit baa31c5

Please sign in to comment.