Java 语言概述 -- Java 语言的介绍、现在、过去与将来

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 001 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同学学习。当然,我也会在必要的时候进行相关技术深度的技术解读,相信即使是拥有多年 Java 开发经验的从业者和大佬们也会有所收获并找到乐趣。

作为 “Java 入门” 也是整个专栏的第一篇文章,我在这里主要是会先介绍一下 Java 语言 —— Java 是什么? 可以用来做什么? 从诞生到现在依旧有这么多人用着 Java,说明它一定做对了一些,有着一些优点,那么都是什么?Java 近些年来在全球的热度有所下降,是什么原因?Java 还值得作为第一门编程语言或者工作语言来学习吗?现在的 Java 就业前景是怎样的?这些都是本篇内容所要讨论的。

最后在前言的末尾我补充一下,如果这篇文章,对大家有所帮助或收获一定的乐趣和想法,那么非常欢迎大家能够,点赞、评论、收藏、订阅。这些也将是我持续更新的最大动力。


文章目录

      • 1、Java 语言的简介
        • 1.1、Java 语言的概述
        • 1.2、Java 语言的特性
        • 1.3、Java 语言的应用现状
      • 2、Java 语言的演进
        • 2.1、"Java"名字的由来
        • 2.2、Java 演进历史
        • 1.3、Java 各个版本特性
      • 3、Java 语言的前景
        • 3.1、Java 语言发展现状
        • 3.2、Java 语言就业前景


1、Java 语言的简介

1.1、Java 语言的概述

Java 语言是于 1991 年由 Sun(Sun Microsystems,美国)公司的 詹姆斯·高斯林(James Gosling)团队研发的一门面向对象的编程语言。最初命名为 Oak,并于 1995 年更名为 Java 后开始推广。

如今,随着互联网的崛起,Java 已经成为目前世界上最流行、最重要的计算机编程语言之一。

image-20231004233354669

Java 作为一门面向对象的高级编程语言,在设计之初,借鉴了多种编程语言的特性和理念。比如它吸收了 C 语言的优点(语法结构、操作符和数据类型),同时摒弃了 C 语言中难以理解的多继承、指针等概念,使得 Java 语言既功能强大又简单易用。

作为静态面向对象编程语言的代表,Java 极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

1.2、Java 语言的特性

Java 自 1995 年问世以来,因其卓越的通用性、高效性、平台移植性和安全性等特性,成为全球范围内应用范围最广的开发语言,而且即使历经十余年发展仍然在行业内保持着其"常青树"的地位。

1995 年 Java 发布的同时,Sun 公司也发布的一份官方文档,在后来也被大家称作 Java 白皮书。Java 白皮书是理解 Java 语言设计初衷和主要特性的重要参考资料,对于 Java 开发者和学习者来说具有很高的参考价值。

Oracle 官网 Java 白皮书参考链接:https://www.oracle.com/java/technologies/language-environment.html

在这份文档中 James Gosling 主要介绍了 Java 语言的设计理念、核心特性和应用领域。同时也阐述了 Java 的跨平台性、面向对象、网络编程、安全性、多线程等众多特性。

这 11 个关键特性体现了 Java 设计哲学的核心核心:

  1. 简单性:Java 旨在易于学习和使用。其语法类似于 C++,但去除了指针和多重继承等容易引起错误的特性,使编程更加直观;

  2. 面向对象:Java 是纯面向对象的编程语言,所有代码必须位于类中。面向对象的设计使得代码模块化、可重用,并促进代码维护;

  3. 分布式:Java 提供丰富的 API,支持 TCP/IP 协议,使网络编程和分布式计算变得简单,可以方便地创建和访问远程对象;

  4. 健壮性:Java 强调健壮性,通过强类型检查、异常处理和自动垃圾回收,确保程序能可靠地运行,并在编译时发现潜在错误;

  5. 安全性:Java 内置多种安全特性,包括类加载机制、沙盒安全模型和内存管理,保护系统免受恶意代码的侵害;

  6. 体系结构中立:Java 实现了"一次编写,到处运行"的目标,通过 Java 虚拟机(JVM),使得程序可以在任何平台上运行,而无需修改代码;

  7. 可移植性:Java 程序编译成平台无关的字节码,可以在任何支持 Java 的平台上运行,无需重新编译,确保了应用的可移植性;

  8. 解释型:Java 程序在运行时通过 JVM 解释执行,这赋予了 Java 强大的跨平台能力,并允许即时(JIT)编译以提高性能;

  9. 高性能:尽管 Java 是解释型语言,但通过 JIT 编译技术,Java 程序的执行速度接近于原生编译的 C++ 程序,兼具灵活性和性能;

  10. 多线程:Java 原生支持多线程编程,提供一套简便的 API,用于创建和管理线程,简化了并发编程,提升程序的响应性和性能;

  11. 动态性:Java 是动态语言,可以在运行时加载新类和对象,支持动态扩展和模块化编程,适应不断变化的运行环境。

这些特点共同构成了 Java 设计哲学的核心,使得 Java 成为一种功能强大、灵活且安全的编程语言,广泛应用于各个领域。

1.3、Java 语言的应用现状

即使经过了近 30 年的发展,Java 依旧在软件开发领域保持强劲的活力,并且在多个行业中占据重要地位。以下是 Java 在一些主要领域的应用现状:

  1. 企业应用开发:Java 是企业级应用开发的主要语言。许多大型企业和组织选择 Java 来构建高性能、可靠和安全的应用程序。Spring Framework 和 Jakarta EE(原 Java EE)等框架为企业级 Java 应用提供了强大支持;

  2. 移动应用开发:在移动应用开发领域,Java 依然是核心语言,特别是在 Android 平台上。Android 使用 Java 作为主要开发语言,开发者利用 Android SDK 构建功能丰富的移动应用程序;

  3. 大数据和云计算:Java 在大数据处理和云计算领域表现出色。许多大数据框架和平台(如 Apache Hadoop 和 Apache Spark)都支持 Java 编程。Java 的跨平台性和稳定性使其成为构建可扩展大数据解决方案的理想选择;

  4. 物联网(IoT):随着物联网的快速发展,Java 在这个领域也发挥着重要作用。Java ME(Micro Edition)被广泛用于嵌入式设备和物联网应用的开发,其高度可移植性和安全性是关键优势;

  5. 人工智能和机器学习:尽管 Java 在人工智能和机器学习领域并不是首选语言,但仍然有一些强大的库和工具可以支持 Java 在这些领域的开发。例如,Weka 和 Deeplearning4j 等库提供了在 Java 中进行机器学习和深度学习的功能;

  6. 游戏开发:相对于其他编程语言和引擎,Java 在游戏开发领域的应用较少。尽管如此,仍然有一些游戏开发者和公司选择使用 Java 来开发他们的游戏。例如,Minecraft 就是一个使用 Java 编程语言开发的知名游戏,其后端服务和游戏逻辑都是通过 Java 实现的。此外,一些游戏开发框架和库,如 libGDX,也支持使用 Java 来开发跨平台的游戏应用程序。

总的来说:Java 作为一种稳定可靠、灵活易用且功能强大的编程语言,在全球范围内的各个领域赢得了广泛认可和应用。无论是初学者还是资深开发者,通过学习和掌握 Java 都能显著提升编程技能和竞争力。


2、Java 语言的演进

2.1、"Java"名字的由来

Java 起初并非叫 Java,甚至于这个名字都没有进入备选前三(Java 排名第四)行列,最初架构搭建的时候这套语言被命名为"Greentalk",因为,当时这个项目组的名字叫 Green 很随意的起名。 后来改名为"Oak",翻译成中文是"橡树"的意思,在欧美很多国家,橡树因其高大、强壮、枝繁叶茂被视为国树,而恰巧的是,詹姆斯.高林斯(James Gosling) 的窗外就有一颗。

美国红橡

因此,Java 的第二个名字就应运而生了,但是天公不作美,当 James Gosling 团队打算注册新的名称时才发现,Oak 这个名字已经被其他公司捷足先登了。

无奈之下高林斯团队只能重新起名,新名字需要具备 Dynamic(动态的)、Revolutionary(革命性的)、Silk(像丝绸一样柔软的)、Cool(炫酷的)等特点,有人说用"Silk",也有人说用"Lyric",但最终都没有被律师团队认可。

有一天,团队中的一个工程师马克(Mark Opperman)去咖啡店喝咖啡,得到启发想将他们的语言命名为"Java”,这个命名源于印度尼西亚的爪哇岛,因其盛产咖啡而闻名

马克回去将自己想到的名字与团队成员分享之后,大家一拍即合,Java 之名从此诞生,并寓意:希望后世之人可以通过 Java 过上舒适,惬意的生活。

Ps:Java 语言中的许多类库名称,如 JavaBeans、NetBeans 和 ObjectBeans 等,也都与咖啡有关。

2.2、Java 演进历史

上个世纪 90 年代,单片计算机诞生,推动了电子产品的智能化,为抢占市场,Sun 公司高层紧急会议,推出"Green"计划,由詹姆斯·高斯林(James Gosling)牵头,开发出一种可以在多种电子产品上运行的程序架构。 由此 Green 项目组正式成立,决定采用 C++ 进行程序开发,但随着项目深度的进行,大家逐渐发现了 C++ 的弊端, 庞大且复杂的 C++ 无法满足他们丰富的跨平台需求,高林斯项目组经过深度讨论,最终咬牙跺脚,决定以 C++ 为底层开发出一套简单,高效,跨平台的程序语言。

1992 年 Oak 雏形诞生,东西搞出来了,Sun 公司经过多方洽谈,联系了不少的硬件公司进行商业展示,悲伤的是这一次 Oak 没有让金主爸爸们满意。

时间很快来到了 1994 年,Green 项目用 Oak 开发出了可以在网页上嵌入小程序的 Applet 技术,此举让很多公司看到了 Oak 的价值,Oak活了下来。

1995年,Sun 公司将 Oak 正式更名为 Java,同年发布了 Java1.0 版本,提出了那句"Write Once, Run anywhere",一次编译,随处运行,这句口号注定会写入世界编程史。而这一年也成为了 Java 的元年,此后 Java 正式进入了版本迭代时代。

image-20240605172721605

下面是 Java 语言发展的大事记:

  • 1991 年Sun MicrosystemsPatrick NaughtonMike SheridanJames Gosling 在这一年启动了 Green 项目,这个项目的目标是为数字设备(如电视机、电话机等)开发编程语言。这个项目最终导致了 Java 语言的诞生;
  • 1995 年 05 月:Sun Microsystems 正式发布了 Java 语言,最初名为 Oak,后来改名为 Java。其主要特点是跨平台性,即 “写一次,处处运行”,这使得 Java 语言具有很好的跨平台性;
  • 1996 年 01 月:JDK 1.0 发布,这是 Java 的第一个正式版本;
  • 1996 年 02 月:Java 白皮书发布;
  • 1997 年 02 月:JDK 1.1 发布;
  • 1998 年 12 月:JDK 1.2 发布,也被称为 Java 2;
  • 1999 年 12 月:Apache Tomcat 发布,这是一个开源的 Servlet 容器,广泛用于 Java Web 应用的开发和部署;
  • 1999 年 12 月:Sun Microsystems 在 Java 2 基础上,引入了多个 Java 版本,即 J2SE(后来的 Java SE,即 Standard Edition,是 Java 平台的标准版本),JJ2EE(后来的 Java EE,即 Enterprise Edition,专注于企业级开发的版本)和 J2ME(后来的 Java ME,即 Micro Edition,是 Java 平台的嵌入式开发版本);
  • 1999 年 12 月:Java Community Process (JCP)的成立,旨在规范 Java 技术的发展,确保其开放性和标准化;
  • 2000 年 05 月:JDK 1.3 发布;
  • 2001 年 01月:JetBrains 发布了 IntelliJ IDEA(收费),这是一个专为提高开发者生产力而设计的集成开发环境(IDE),以其智能代码补全和高级调试功能著称,发布后迅速成为 Java 开发者的首选 IDE 之一;
  • 2001 年 11 月:Eclipse(免费) 发布,这是一个由 IBM 发起的开源 IDE 项目,发布后迅速成为 Java 开发者的首选工具之一;
  • 2002 年 02 月:JDK 1.4 发布;
  • 2003 年 10 月:Rod Johnson 发布了 Spring Framework,为 Java 开发引入了 IoC(Inversion of Control)和 AOP(Aspect-Oriented Programming)等概念,极大简化了企业级应用的开发;
  • 2004 年 09 月:JDK 5 发布,J2SE 更名为 JavaSE;
  • 2006 年 11 月:Sun Microsystems 宣布启动 OpenJDK 项目,将 Java 平台开源,允许开发者参与 Java 开发并改进其功能;
  • 2006 年 12 月:JDK 6 发布;
  • 2008 年 09 月:Google(谷歌) 发布了 Android(安卓) 操作系统,这是基于 Java 的移动操作系统,迅速成为全球最流行的智能手机平台之一,极大地推动了 Java 在移动设备上的应用;
  • 2009 年 04 月:Oracle(甲骨文)公司在 2009 年 4 月 20 日宣布正式以 74 亿美元的价格收购 Sun 公司,Java 商标从此正式归 Oracle 所有;
  • 2010 年 08 月:Oracle 起诉 Google,指控其在 Android 中非法使用 Java API。此案历时多年,对 Java API 的版权问题产生了深远的影响。最终,2021 年 04 月,美国最高法院裁定 Google 对 Java API 的使用属于 “合理使用”;
  • 2011 年 07 月:JDK 7 发布;
  • 2014 年 03 月:JDK 8 发布,这是一个里程碑式的、非常稳定和成熟的版本,这个版本引入了 Lambda 表达式、函数式接口、方法引用、Stream API、默认方法和静态方法等特性;
  • 2014 年 04 月:Spring Boot 发布,Spring Boot 的发布进一步简化了 Spring 应用的创建和配置,成为微服务架构中广泛使用的框架;
  • 2017 年 09 月:JDK 9 发布,同时 Oracle 宣布 Java 将采用半年发布一次的版本计划,以便更快地引入新特性和改进;
  • 2017 年 10 月:为了应对 Oracle 对 Java SE 商业支持政策的改变,AdoptOpenJDK 项目启动,提供免费的开源 Java SE 构建,得到广大社区和企业的支持;
  • 2018 年 01 月:Oracle 宣布,从 2019 年 01 月起,对用于商业用途的 Java SE 8 将开始收费,用户需要购买商业许可证才能继续获得更新和支持。这一公告促使许多企业和开发者转向开源的 AdoptOpenJDK;
  • 2018 年 03 月:JDK 10 发布;
  • 2018 年 09 月:JDK 11 发布,这是一个长期支持版本;
  • 2019 年 03 月:JDK 12 发布;
  • 2019 年 09 月:JDK 13 发布;
  • 2020 年 03 月:JDK 14 发布;
  • 2020 年 09 月:JDK 15 发布;
  • 2021 年 03 月:JDK 16 发布;
  • 2021 年 09 月:JDK 17 发布,这是一个长期支持版本;
  • 2022 年 03 月:JDK 18 发布;
  • 2022 年 09 月:JDK 19 发布;
  • 2023 年 03 月:JDK 20 发布;
  • 2023 年 09 月:JDK 21 发布,这是一个长期支持版本;
  • 2024 年 03 月:JDK 22 发布;
1.3、Java 各个版本特性

Java 语言自 1995 年由 Sun Microsystems 公司发布以来,已经经历了多次重要的版本更新和语言特性的改进。以下是 Java 语言的一些主要演进阶段:

版本日期版本特性
JDK_1.0#1996_01Java 的首个正式版本,伟大的一个里程碑,提供了基本的对象导向编程能力和网络处理能力
JDK_1.1#1997_02引入了 内部类、Java Beans、JDBC、反射 API、RMI 等新特性
JDK_1.2#1998_12引入了 集合框架、Swing 包、内存映射文件 I/O、NIO、断言、正则表达式等新特性
JDK_1.3#2000_05增加了 HotSpot JVM、JavaSound、Java Naming and Directory Interface (JNDI) 等特性
JDK_1.4#2002_02增加了 XML 解析、正则表达式、Java Web Start、Java Print Service 等特性
JDK_5.0#2004_09引入了泛型、自动装箱/拆箱、枚举、可变参数、for_each 循环等特性
JDK_6.0#2006_12增加了 JDBC 4.0、Java Compiler API、Pluggable Annotations 等特性
JDK_7.0#2011_07引入了 switch 对字符串的支持、自动资源管理、改进的类型推断、多异常捕获等特性
JDK_8.0#2014_03引入了 Lambda 表达式、函数式接口、方法引用、Stream API、默认方法和静态方法等特性
JDK_9.0#2017_09引入了模块系统,可以将 JDK 划分为多个模块,便于开发大型应用。同时还引入了 JShell、改进了 Javadoc、增强了 Stream API 等
JDK_10#2018_03引入了局部变量类型推断,可以使用 var 关键字声明局部变量,无需显式指定其类型
JDK_11#2018_09引入了新的垃圾收集器 ZGC,可以处理 TB 级别的堆内存,且停顿时间不超过 10ms。同时还引入了新的字符串方法、HTTP 客户端 API 等
JDK_12#2019_03引入了新的 switch 表达式,可以使用更简洁的方式编写 switch 语句
JDK_13#2019_09引入了文本块功能,可以方便地编写多行字符串
JDK_14#2020_03引入了 instanceof 的模式匹配,对 switch 语句进行了改进等特性
JDK_15#2020_09引入了密封类和接口,可以限制哪些其他类或接口可以继承或实现它们
JDK_16#2021_03引入了 Records,可以方便地创建只包含数据的类,无需编写大量模板代码
JDK_17#2021_09引入了模式匹配的第二阶段,可以在 switch 表达式中使用模式匹配。同时还引入了新的垃圾收集器 Shenandoah
JDK_18#2022_03默认 UTF_8、简单的网络服务器、弃用 finalize
JDK_19#2022_09模块化编程、本地类型推断、文本块、嵌套注解、改进的 Garbage Collection
JDK_20#2023_03模式匹配、Sealed Classes、Records、Text Blocks、ZGC
JDK_21#2023_09引入虚拟线程、结构化并发、顺序集合、记录模式、外部函数和内存 API、向量 API
JDK_22#2024_03提供了符合 GPL 协议的生产就绪二进制文件、G1 的区域引入、未命名变量和模式等新特性

3、Java 语言的前景

3.1、Java 语言发展现状

时至今日,Java 语言已经火爆 20 余载,那么,在这个瞬息万变的移动互联网时代,未来,它还能一如既往,引领开发界吗?还是如有些人说的会饱和而辉煌不再?

下图是反映编程语言热门程度「Tiobe 排行」在 2024 年 5 月的编程语言热度排名:

image-20240522131742854

下图是反映编程语言热门程度「Tiobe 排行」在 2024 年 5 月的排名趋势图:

image-20240522134017157

从以上趋势图来看,Java 的热度排名有所下降,尤其是在 2016 年之后这一趋势更为明显,这一趋势的主要原因可以归结为以下两个方面:

  1. 编程语言的多样化:随着技术的进步和应用场景的多样化,越来越多的新编程语言被开发和应用。例如,Python 因其简洁的语法和强大的库支持,尤其在数据科学、人工智能和机器学习领域获得了广泛的应用;
  2. 特定领域语言的兴起:一些语言在特定领域表现出色,吸引了大量开发者。例如,JavaScript 在前端开发中的主导地位,Swift 和 Kotlin 在移动开发中的流行,Go 和 Rust 在系统编程和高性能应用中的使用。
3.2、Java 语言就业前景

诚然,仅从以上的热度占比来看,Java 已经显露出了明显颓势,并且在网上也可以看到很多人开始看衰 Java,觉得它已经要彻底凉了。实则并不是,即便如此衰败的情况下,Java 仍然是国内市场上使用率最高,那么真如网上所说,Java 市场彻底饱和了吗?

目前来看,Java 程序员远远没有饱和,现在 Java 程序员是挺多的,但是职位需求量更大,只是相对来说高薪酬的要求变高了,特别是能干实干或优秀的程序员是相当缺乏的,不存在存在饱和一说。

就工作而言,对于国内 Java 程序员来说,年薪 10 万+ 是很正常的一个薪酬水平,从经验来说,如果你是一位实干,又有强烈改变际遇的意志力的人,我建议可以做 Java 技术开发,至少你的付出会有收获(技术领域内相对公平);

就学习而言,Java 作为一门优秀的语言,可以让你在学习过程中收获很多。它的面向对象编程思想和设计模式能够帮助你建立扎实的编程基础,同时其广泛的应用场景和强大的生态系统可以让你在各个领域获得实践经验和职业机会。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/693071.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《软件定义安全》之一:SDN和NFV:下一代网络的变革

第1章 SDN和NFV:下一代网络的变革 1.什么是SDN和NFV 1.1 SDN/NFV的体系结构 SDN SDN的体系结构可以分为3层: 基础设施层由经过资源抽象的网络设备组成,仅实现网络转发等数据平面的功能,不包含或仅包含有限的控制平面的功能。…

华为防火墙 1

华为防火墙1 实验拓扑: 实验步骤: 1.完成终端基本IP信息配置 2.配置防火墙: 2.1配置IP地址 sys Enter system view, return user view with CtrlZ. [USG6000V1]undo in e Info: Saving log files… Info: Information center is disabled. […

Spark 性能调优——分布式计算

前言 分布式计算的精髓,在于如何把抽象的计算流图,转化为实实在在的分布式计算任务,然后以并行计算的方式交付执行。今天这一讲,我们就来聊一聊,Spark 是如何实现分布式计算的。分布式计算的实现,离不开两个…

详解SM3算法加密流程(SM3加密算法一)

1、SM3 算法简介 SM3是中国国家密码管理局发布的消息摘要算法,首次发布于2010年,并于2016年发布了正式的国家标准GB/T 32905-2016。类似于国际上广泛应用的SHA-256算法,但有其独特的设计和实现细节。 该算法应用于各种数据加密和验证场景&…

vs - vs2015编译gtest-v1.12.1

文章目录 vs - vs2015编译gtest-v1.12.1概述点评笔记将工程迁出到本地后,如果已经编译过工程,将工程Revert, Clean up 干净。编译用的CMake, 优先用VS2019自带的打开VS2015X64本地命令行编译gtest工程测试安装自己写个测试工程,看看编译出来的…

使用小黄鸟(HttpCanary)、VMOS Pro虚拟机对手机APP进行抓包(附带软件)

老规矩先看,效果图: 文章很详细,希望可以耐心看完,保证可以学会抓包,不再走冤枉路,小编在之前看过太多类似文章,折腾了太久才搞懂的,写这篇文章就是不想希望你们像小编一样再花时间…

谁也没想到来得如此之快,现在二三线城市就有电梯楼变成贫民窟了

独家首发 ----------------- 高层电梯楼贫民窟化,一直是业界担忧的问题,许多人以为这个问题应该还要十多年时间才会成为现实,然而有网友表示在二三线城市已出现高层电梯楼贫民窟化,时间比大家预期的早得多。 该网友说,…

easyexcel将csv转为excel处理数字问题

使用easyexcel可以将csv格式的文件转为.xlsx文件,但是csv中有很多数字,比如:"123","12.34","-111",默认情况下会将其作为字符串写入.xlsx文件,就如同下面一样,字符类型的数字…

Nginx学习笔记(九)location转发后,proxy_pass结尾带 / 和不带 / 的区别

目录 一、知识回顾二、proxy_pass 结尾带 / 和不带 / 的区别2.1 场景假设2.2 实战验证验证1:结尾带/的场景验证2:不带/的场景 2.3 结论 一、知识回顾 之前使用过 Nginx 的小伙伴或许都了解,Nginx 是一款用于请求转发的高性能中间件&#xff…

【数据结构(邓俊辉)学习笔记】图03——拓扑排序

文章目录 0. 概述1. 零入度算法1. 1 拓扑排序1. 2 算法 2. 零出度算法2.1 算法2.2 实现2.3. 复杂度 0. 概述 学习下拓扑排序 1. 零入度算法 1. 1 拓扑排序 首先理解下拓扑排序 其实老师经常干这事,如编讲义,将已经知道的知识点串起来变成讲课序列。那…

Vivado时序报告之Datasheet详解

目录 一、前言 二、Datasheet配置选项说明 2.1 Options 2.2 Groups 2.3 Timer Settings 2.4 Common Options 三、Datasheet报告 3.1 General Information 3.2 Input Ports Setup/Hold 3.3 Output Ports Clock-to-out 3.4 Setup between Clocks 3.5 Combinational…

盘点 2024 Google I/O 中的 Android 方向关键更新

这里写自定义目录标题 前言1. AI 编程助手2. 生成式AI 应用3. 不同屏幕尺寸适配4. 桌面小部件(Widget)5. 跨设备类型开发6. WearOS & 可穿戴7. Android for Car8. Android TV9. Google Home API10. Kotlin Multiplatform11. Jetpack Compose12. Andr…

HTML+CSS+JS 密码灯登录表单

效果演示 实现了一个登录页面,包括一个标题、两个输入框(用户名和密码)、一个登录按钮和一个眼睛图标。点击眼睛图标可以显示或隐藏密码。页面背景有两个圆形的半透明元素,整个页面使用了flex布局,并且在水平和垂直方向上都居中对齐。登录框使用了阴影效果和圆角边框,并且…

Jmeter 压力测测试的简单入门

下载安装 官方网站:Apache JMeter - Download Apache JMeter 下载完成解压即可。 配置 1. 找到 bin 目录下的 ApacheJMeter.jar 包,直接打开 如果向图片这样不能直接打开,就在此路径运行 CMD,然后输入下面的命令即可启动。 ja…

微信小程序学习笔记(4)

文章目录 1、< template >< / template >2、样式导入i、wxmlii、wxss 3、flex布局i、容器属性ii、项目属性 1、< template >< / template > 模板可以重复调用 首先要定义一个模板&#xff1a; <template name"test"><view>{{…

Python GUI编程:深入探索现代GUI库及其创新应用

目录 引言 Python GUI库概览 1. Tkinter 2. PyQt/PySide 3. wxPython 4. Kivy 5. PyGTK 6.FLTK (pyFLTK) 创新应用案例 1. 交互式数据分析工具 2. 智能物联网(IoT)仪表板 3. 增强现实(AR)辅助设计软件 4. 跨平台的科学计算软件 5. 交互式教育软件 实战示例1&…

Springboot整合SpringCache+redis简化缓存开发

使用步骤&#xff1a; 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId> </dependency><dependency><groupId>org.springframework.boot</groupI…

MySQL—多表查询—标量子查询

一、引言 上篇学习完子查询的概念和分类。 现在来学习第一种子查询——标量子查询。 &#xff08;1&#xff09;标量子查询的基本概念 子查询返回的结果是单个值&#xff0c;也就是一行一列&#xff08;可以是数字、字符串、日期等&#xff09; 是一种最简单的子查询形式&am…

【机器人和人工智能——自主巡航赛项】进阶篇

文章目录 案例要求创建地图rviz仿真 保存地图坐标点定位识别训练主逻辑理解语音播报模块匹配二维码识别多点导航讲解视频其余篇章 案例要求 创建地图 ./1-gmapping.sh 把多个launch文件融合在sh文件里面 rviz仿真 rviz是rose集成的可视化界面&#xff0c;查看机器人的各项数…

iOS--block再学习

block再学习 什么是blockblock是带有自动变量的匿名函数block语法 block的实现block的实质截获自动变量__blcok说明符Block存储域__block变量存储域使用__block变量用结构体成员变量__forwarding的原因 截获对象 什么是block Block时c语言的扩充功能&#xff0c;它允许开发者定…