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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLVM Cpu0 新后端7 第一部分 DAG调试 dot文件 Machine Pass

想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1V_tZkt9uvxo5bnUufhMQ_Q?…

contos7使用docker安装vulhub

contos7下使用docker安装vulhub 1. 安装docker 1. 更新yum (1)切换root用户 su root (2)更新yum yum update 2. 卸载旧版本的docker sudo yum remove docker sudo yum remove docker-client sudo yum remove docker-clien…

高并发ping多台主机IP

简介 社区或者是大型公司往往有成千上万或者几百台设备,保持设备始终在线对网络运维人员来说至关重要,然而一个一个登录检查,或者一个一个ping并不明智,累人且效率极低,并出错率高。花钱买检测服务当我没说。 shell编…

K210视觉识别模块学习笔记5:(嘉楠)训练使用模型_识别人脸

今日开始学习K210视觉识别模块:(嘉楠)训练与使用模型_识别人脸 亚博智能的K210视觉识别模块...... 固件库版本: canmv_yahboom_v2.1.1.bin 之前的训练网址部署模型时需要我们自己更换固件,而且还不能用亚博的图像操作库函数了,这十分不友好&#xff0…

vue 使用 Vxe UI vxe-print 实现复杂的 Web 打印,支持页眉、页尾、分页的自定义模板

Vxe UI vue 使用 Vxe UI vxe-print 实现复杂的 Web 打印,支持页眉、页尾、分页的自定义模板 官方文档 https://vxeui.com 查看 github、gitee 页眉-自定义标题 说明:vxe-print-page-break标签用于定义分页,一个标签一页内容,超…

YOLOv5改进 | 主干网络 | 用SimRepCSP作为主干网络提取特征【全网独家 + 降本增效】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 SimRepCSP 类似于 YOLOv7的主干网络,由卷积模块和重参数化卷积(RepConv)模块组合而成,以 Cro…

学习使用 Frida 过程中出现的问题

一、adb shell命令报错:error: no devices found 目前该问题解决方法仅供参考,可先看看再选择试试!!!!! 查看此电脑也会发现没有出现手机型号文件夹。 第一步: 检查一下手机开了u…

qmt量化交易策略小白学习笔记第16期【qmt编程之获取北向南向资金(沪港通,深港通和港股通)】

qmt编程之获取北向南向资金 qmt更加详细的教程方法,会持续慢慢梳理。 也可找寻博主的历史文章,搜索关键词查看解决方案 ! 北向南向资金(沪港通,深港通和港股通) #北向南向资金交易日历 获取交易日列表…

【CentOS 7】CentOS 7极致指南:高级部署PyCharm 2022.3.3专业版,实现定制化配置与无缝桌面集成

【CentOS 7】CentOS 7极致指南:高级部署PyCharm 2022.3.3专业版,实现定制化配置与无缝桌面集成 大家好 我是寸铁👊 总结了一篇CentOS 7极致指南:高级部署PyCharm 2022.3.3专业版,实现定制化配置与无缝桌面集成✨ 喜欢的…

线性代数|机器学习-P10最小二乘法的四种方案

文章目录 1. 概述2. SVD奇异值分解3. 最小二乘法方程解4. 最小二乘法图像解释5. Gram-Schmidt 1. 概述 当我们需要根据一堆数据点去拟合出一条近似的直线的时候,就会用到 最小二乘法 .根据矩阵A的情况,有如下四种方法 在r n m 时,SVD奇异…

计算机网络-数制转换与子网划分

目录 一、了解数制 1、计算机的数制 2、二进制 3、八进制 4、十进制 5、十六进制 二、数制转换 1、二进制转十进制 2、八进制转十进制 3、十六进制转十进制 4、十进制转二进制 5、十进制转八进制 6、十进制转十六进制 三、子网划分 1、IP地址定义 2、IP的两种协…

【NetTopologySuite类库】C#生成带约束(线、面)的Delaunay三角网

介绍 API地址:https://nettopologysuite.github.io/NetTopologySuite/api/NetTopologySuite.Triangulate.ConformingDelaunayTriangulationBuilder.html#NetTopologySuite_Triangulate_ConformingDelaunayTriangulationBuilder_Constraints 约束为线 效果图 红色…

经典文献阅读之--P2O-Calib(利用点对空间遮挡关系的相机-激光雷达标定)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务,并且需要GPU资源,可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU,按时收费每卡2.6元,月卡只需要1.7元每小时&…

整除及求余运算符、数字的提取、顺序结构程序

1.运算符 在有余数的除法运算中,如果要知道商和余数分别是多少,可以用/和%这两个运算符号来得到。 (1)/(整除),当被除数和除数均为整数时,结果也为整型,只取商的整数部分。 如:10/25 10/33 5/10 0 (2)%(求余)&…

倩女幽魂搬砖攻略:云手机自动托管搬砖刷本选哪家云手机?

欢迎来到《倩女幽魂手游》的世界,一个充满江湖恩怨的世界。在这个游戏中,你将扮演各个门派中的不同职业,踏上一段属于你自己的江湖之路。本攻略将为你详细介绍如何利用多开挂机搬砖,快速提升自己的实力,成为江湖中的一…

python - pandas常用计算函数

文中所用数据集有需要的可以私聊我获取 学习目标 知道排序函数nlargest、nsmallest和sort_values的用法 知道Pandas中求和、计数、相关性值、最小、最大、平均数、标准偏差、分位数的函数使用 1 排序函数 导包并加载数据集 import pandas as pd ​ # 加载csv数据, 返回df对…

VBA excel 表格将多行拆分成多个表格或 文件 或者合并 多个表格

excel 表格 拆分 合并 拆分工作表按行拆分为工作表工作表按行拆分为工作薄 合并操作步骤 拆分 为了将Excel中的数万行数据拆分成多个个每个固定行数的独立工作表,并且保留每个工作表的表头,你可以使用以下VBA脚本。这个脚本会复制表头到每个新的工作表&…

Java案例:找素数

文章目录 题目问题反思代码改进 题目 找素数 判断101-200之间有多少个素数&#xff0c;并输出所有素数 只需要除到 n/2 即可。 算数平方根。&#xff08;j*j<i&#xff09;实际上可以更高效地只除到Math.sqrt(n)&#xff08;或者说Math.sqrt(n) 1为了处理整数除法&#xf…

Web学习_sqli-labs_1~10关

less1-GET-Error based - Single quotes - String &#xff08;基于错误的GET单引号字符型注入&#xff09; 我每次操作都会在Hackbar中&#xff0c;代码都在Hackbar框中&#xff0c;可放大看 有题目知道了是字符型注入&#xff0c;我们先判断表格有几列&#xff0c;可以发现…

Istio_1.17.8安装

项目背景 按照istio官网的命令一路安装下来&#xff0c;安装好的istio版本为目前的最新版本&#xff0c;1.22.0。而我的k8s集群的版本并不支持istio_1.22的版本&#xff0c;导致ingress-gate网关安装不上&#xff0c;再仔细查看istio的发布文档&#xff0c;如果用istio_1.22版本…