当前位置: 首页 > news >正文

Java编程语言:辉煌的历史与未来前景

如果将软件开发世界比喻成一个宇宙,Java 无疑是其中最亮的星星之一。它从诞生起就改变了软件开发世界的格局。发展到今天,Java仍然是这个世界上最重要的编程语言之一。当然,它也面临着新的挑战。

Java的诞生

回溯到 1991 年,在 Sun Microsystems 公司(现已被 Oracle 收购)的内部,有一个名为 “Green Team” 的神秘小组。这个小组的成员怀揣着对未来科技的无限憧憬,开始了一项代号为 “Oak”(橡树)的秘密项目。他们的目标是开发一种能够在各种消费类电子产品上运行的编程语言和平台,这些产品包括机顶盒、微波炉、遥控器等等。想象一下,在那个计算机还未完全普及到家庭的年代,就有人开始着眼于让各种设备互联互通,这是多么具有前瞻性的想法。

Oak 语言的设计理念是 “Write Once, Run Anywhere”(一次编写,到处运行),这一理念在当时可以说是相当超前。开发团队希望创造出一种语言,编写的程序能够在不同的硬件和操作系统上无缝运行,而无需为每个平台单独编写代码。

为了实现这个目标,他们付出了巨大的努力。在设计语言特性时,充分考虑了可移植性、安全性和面向对象特性。例如,Java 摒弃了 C++ 中一些容易导致内存管理错误的复杂特性,如指针运算,引入了自动垃圾回收机制。这一机制大大减轻了程序员的负担,让他们无需再为繁琐的内存管理操心,可以将更多的精力放在业务逻辑的实现上。

然而,Oak 项目在初期并没有取得预期的成功。尽管 Oak 语言本身具备很多优秀的特性,但在当时的市场环境下,消费类电子产品的发展还没有达到能够充分应用这种技术的阶段。Oak 语言在这些设备上的应用并没有引起市场的广泛关注,项目一度陷入困境。

时间来到 1994 年,互联网的兴起为 Oak 项目带来了转机。当时,互联网的发展速度犹如火箭升空,网页技术逐渐成为热门话题。但是,早期的网页大多是静态的,缺乏交互性。Sun 公司的工程师们敏锐地察觉到,Oak 语言的特性非常适合用于开发互联网应用,尤其是能够为网页带来动态交互功能。于是,他们对 Oak 语言进行了一系列改进和优化,使其更适合在网络环境中运行。

1995 年,Oak 语言正式更名为 Java,并伴随着 HotJava 浏览器的发布而正式亮相于世人面前。Java 的出现,立刻在互联网领域掀起了一阵热潮。它允许开发者在网页中嵌入动态内容,如动画、小游戏和交互式表单等,极大地丰富了网页的功能和用户体验。Java Applet(小应用程序)成为了当时网页开发的热门技术,许多网站纷纷采用 Java 来增强自身的吸引力。

图片

不同时期的Java LOGO

Java 的成功并非偶然。它的 “Write Once, Run Anywhere” 特性在互联网环境中发挥了巨大的优势。20世纪末21世纪初,互联网和计算机体系都有巨大发展,用户使用的操作系统和设备千差万别,Java 程序能够在不同平台上运行的特点使得开发者无需为每个平台单独开发版本,大大降低了开发成本和时间。

当时的主流编程语言,譬如C、C++ 程序若要在不同操作系统运行,开发人员需针对每个平台进行繁琐的移植工作,手动调整代码以适配不同系统的 API 和硬件特性,耗时费力。而诸如Delphi,VB等又局限在Windows平台。Java 凭借其独特的 “字节码”(Bytecode)运行机制,打破这一僵局。Java 源代码先编译成与平台无关的字节码文件,在运行时,不同操作系统上的 Java 虚拟机(Java Virtual Machine,JVM)负责解释或即时编译字节码为本地机器指令执行。这意味着,只需编写一次 Java 代码,就能在 Windows、Linux、Mac 等各类操作系统上畅行无阻,极大节省开发成本,让软件部署更具通用性与便捷性,瞬间拓宽 Java 应用的边界

同时,Java 的安全性也得到了广泛认可。在网络环境中,安全性至关重要,Java 通过一系列安全机制,如字节码校验、安全管理器等,有效地保护了用户的系统免受恶意代码的攻击。

随着 Java 在互联网领域的崭露头角,越来越多的企业和开发者开始关注并采用 Java 技术。1996 年,Sun 公司发布了 Java Development Kit(JDK)1.0,这是 Java 开发的重要里程碑。JDK 为开发者提供了编写、编译和运行 Java 程序所需的一切工具和库,使得 Java 开发变得更加便捷和高效。同时,Sun 公司还推出了 Java Runtime Environment(JRE),它是运行 Java 程序所必需的软件环境,用户只需安装 JRE,就能够运行各种 Java 应用程序。

发展与壮大

在接下来的几年里,Java 不断发展壮大。JDK 的版本不断更新,每次更新都带来了新的特性和功能改进。例如,JDK 1.1 引入了内部类、反射等重要特性,进一步增强了 Java 的语言表现力和灵活性。这些特性使得 Java 在面向对象编程方面更加成熟和强大,能够满足更复杂的软件开发需求。

1998 年,Java 2 平台的发布标志着 Java 进入了一个新的发展阶段。Java 2 分为三个版本:Java 2 Standard Edition(J2SE)、Java 2 Enterprise Edition(J2EE)和 Java 2 Micro Edition(J2ME)。J2SE 主要用于桌面应用程序的开发,为开发者提供了丰富的图形用户界面(GUI)开发工具和库,使得开发功能强大的桌面应用变得轻而易举。J2EE 则专注于企业级应用开发,它提供了一套完整的企业级应用解决方案,包括 Servlet、JavaServer Pages(JSP)、Enterprise JavaBeans(EJB)等技术,这些技术极大地简化了企业级应用的开发过程,提高了应用的可扩展性和可靠性。J2ME 则针对移动设备和嵌入式设备进行了优化,为移动应用开发奠定了基础。

Java 2 平台的推出,使得 Java 在各个领域都得到了广泛应用。在企业级应用领域,Java 凭借其强大的功能和良好的可扩展性,逐渐成为企业级应用开发的首选语言。许多大型企业的核心业务系统都采用 Java 技术构建,如银行的核心交易系统、电信运营商的计费系统等。在桌面应用领域,Java 也有着不俗的表现。许多知名的桌面应用程序,如 Eclipse(一款流行的 Java 集成开发环境)、NetBeans 等,都是用 Java 开发的。在移动应用领域,虽然当时的移动设备性能有限,但 J2ME 的出现为移动应用开发带来了新的可能性,一些简单的游戏和应用开始在手机上运行。

J2EE 在企业级开发中曾经风光无限,但随着时间的推移,它逐渐走向衰落。J2EE 框架本身非常复杂,其核心技术 EJB(Enterprise JavaBeans)在开发和部署上都存在较高的门槛。EJB 规范定义了一套复杂的组件模型,开发者需要遵循严格的规范来编写业务逻辑,这使得开发过程变得繁琐且容易出错。例如,在一个简单的用户信息管理模块中,使用 EJB 开发可能需要编写大量的配置文件和接口代码,仅仅是为了实现基本的增删改查功能,这对于开发者来说无疑是一种负担。

而且,J2EE 的部署过程也十分复杂。一个基于 J2EE 的应用往往需要部署在特定的应用服务器上,如 WebLogic、WebSphere 等,这些应用服务器的配置和维护成本较高,并且对硬件资源的要求也比较苛刻。在早期企业信息化建设中,企业有足够的资源和人力来应对这些问题,但随着市场竞争的加剧,企业对开发效率和成本控制提出了更高的要求,J2EE 的这些弊端就逐渐凸显出来。

同时,开源运动的兴起对 J2EE 也产生了巨大的冲击。开源框架以其灵活、轻量和开源的特性吸引了众多开发者的关注。在这样的背景下,Spring 框架应运而生,并逐渐成为企业开发的事实标准。

Spring 框架诞生于 2003 年,它的出现为 Java 企业级开发带来了全新的思路。Spring 倡导轻量级的开发理念,采用了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect - Oriented Programming,AOP)等核心技术。依赖注入使得组件之间的依赖关系变得更加清晰和易于管理。比如,在一个电商系统中,订单服务可能依赖于商品服务和用户服务,通过 Spring 的依赖注入机制,开发者可以轻松地将这些服务注入到订单服务中,而不需要在代码中硬编码依赖关系,这大大提高了代码的可测试性和可维护性。

面向切面编程则允许开发者将一些通用的功能,如日志记录、事务管理等,从业务逻辑中分离出来,以一种非侵入的方式添加到应用中。例如,在一个银行转账业务中,通过 AOP 可以将事务管理的逻辑单独抽取出来,而不需要在转账的业务代码中混杂大量的事务控制代码,使得业务代码更加专注于业务逻辑本身,提高了代码的可读性和可维护性。

Spring 还提供了丰富的模块,涵盖了从 Web 开发到数据访问、安全管理等各个方面。Spring MVC 作为 Spring 框架的 Web 模块,为 Web 应用开发提供了简洁而强大的解决方案。与传统的 J2EE Web 开发技术相比,Spring MVC 的配置更加灵活,开发过程更加简单高效。在数据访问层,Spring 提供了对各种数据库的支持,并且通过其数据访问抽象层,使得开发者可以使用统一的方式来操作不同的数据库,大大降低了数据访问的复杂性。

此外,Spring 的开源特性和活跃的社区也是其成功的关键因素。开源意味着开发者可以自由地查看和修改源代码,根据自己的需求进行定制。同时,Spring 社区拥有大量的开发者,他们在社区中分享经验、解决问题,不断推动 Spring 框架的发展和完善。当开发者在使用 Spring 框架遇到问题时,可以很容易地在社区中找到相关的解决方案和技术支持。

进入 21 世纪,Java 继续保持着强劲的发展势头。在 2004 年,Java 发布了具有重大意义的 JDK 1.5 版本(后更名为 Java 5.0)。这个版本带来了一系列革命性的新特性,如泛型、自动装箱 / 拆箱、枚举、增强型 for 循环等。泛型的引入使得 Java 在编写通用代码时更加类型安全和高效,大大提高了代码的可重用性。自动装箱 / 拆箱功能则让基本数据类型和包装数据类型之间的转换更加便捷,减少了代码的冗余。这些新特性使得 Java 语言更加现代化和强大,进一步巩固了 Java 在编程语言领域的地位。

从 2005 年到 2020 年,Java 在 TOIBE 编程排行榜上长期占据榜首位置,成为了全球最受欢迎的编程语言之一。它的应用范围涵盖了各个领域,从企业级应用到移动应用,从大型系统到小型工具,Java 无处不在。在这个时期,Java 生态系统也变得日益繁荣。大量的开源框架和类库涌现出来,如 Spring、Hibernate、Struts 等,这些开源项目极大地提高了 Java 开发的效率和质量。开发者可以借助这些框架和类库,快速搭建应用程序的基础架构,专注于业务逻辑的实现。

从Java 5.0开始,J2EE也改名为Java EE,并且吸收了Spring,Hibernate等Java生态重要框架的特性,从而为Java在企业开发领域的标准化开发铺平了道路。Java的市场占有率也一路飙升。

同时,Java 社区也蓬勃发展,开发者们通过论坛、开源项目等方式相互交流、分享经验,共同推动着 Java 技术的发展。

图片

几种重要编程语言在不同年份的TOIBE指数排行

除了在企业开发领域,Android操作系统逐渐成为智能手机上具有统治地位的操作系统,而Android APP开发的主要编程语言就是Java,这也使得Java的地位在21世纪初期变得越发稳固。

新时代的挑战

随着技术的不断发展和变革,Java 也面临着新的挑战。2020 年以后,Java 在 TOIBE 编程排行榜上的排名出现了一定的下降趋势。

到我们写这篇文章的时候,JDK已更新至第23版。无论你怎么理解,最近关心Java新版本的人有什么特性的人已经越来越少了。

在软件开发实践中,特别是之前Java占主导地位的企业开发市场,Java的热度也呈下降趋势。这个原因是多方面的。

一方面,2018 年左右,Oracle开始对商业实体使用 Oracle JDK 收取费用,引发广泛关注和争议。Oracle的收费模式复杂,如 2024 年的新收费模式按公司员工总数收取,即使企业中只有少数开发者使用 Java SE,也需按全员数量付费,导致企业成本大幅增加,多数企业表示难以接受,纷纷寻求替代方案。这也导致之后各个厂商分别推出自己的OpenJDK(区别于Oracle JDK)。虽然在大部分场景下OpenJDK与Oracle JDK并没有太大区别。但是Oracle的行为本身对Java生态起到了巨大的破坏。

另外一方面,由于云原生和 AI 技术的兴起,人们的技术选择更加多样化。云原生技术强调应用的容器化、微服务架构和自动化部署,像 Kubernetes、Docker 等云原生技术成为了新的热门。在云原生领域,一些新兴的编程语言如 Go 语言,凭借其高效的并发性能和轻量级的特性,受到了越来越多的关注和应用。

在 AI 领域,Python 则凭借其丰富的机器学习和深度学习库,如 TensorFlow、PyTorch 等,成为了 AI 开发的首选语言。Python 简单易学的语法和强大的数据分析能力,使得它在数据科学和 AI 领域迅速崛起。相比之下,Java 在这些新兴领域的发展相对滞后,虽然 Java 也有一些针对云原生和 AI 的技术和库,但在生态系统的成熟度和社区活跃度方面,与 Go 和 Python 相比还有一定的差距。

面对这些挑战,当然Java 并没有停滞不前。Java 的开发者们积极应对,不断推动 Java 技术的创新和发展。譬如在云原生领域,Java 通过与云原生技术的深度融合,逐渐在容器化和微服务架构方面取得了进展。例如,Spring Cloud 等框架为 Java 开发者提供了构建微服务架构的一站式解决方案,使得 Java 应用能够更好地适应云原生环境。当然在AI领域,Java的使用率就很少了。

回顾 Java 的历史,它从一个为消费类电子产品设计的语言,历经挫折后在互联网领域焕发出勃勃生机,进而成为全球最受欢迎的编程语言之一,在企业级应用、桌面应用和移动应用等多个领域都取得了巨大的成功。尽管如今面临着新的挑战,但 Java 凭借其深厚的技术积累、庞大的开发者社区和持续的创新精神,依然在软件开发界占据着重要的地位。

对于软件开发人员来说,Java 的历史是一部充满回忆和感慨的奋斗史。它见证了编程语言的发展变迁,也见证了无数程序员的成长和努力。那些曾经在 Java 开发中遇到的难题、攻克的难关,都成为了职业生涯中的宝贵财富。很多和我一样的软件从业者,Java 伴随了我们几乎大部分的职业生涯。

展望未来,由于在存量市场的巨大体量Java仍将继续在软件开发领域发挥重要作用。但随着技术的不断进步,新的需求和挑战也将不断涌现。无论是企业还是个人,在AI转型的大时代背景下,了解更多的技术,明白当前的主流技术,保持不断学习和进取,才是保持竞争力的关键。

相关文章:

Java编程语言:辉煌的历史与未来前景

如果将软件开发世界比喻成一个宇宙,Java 无疑是其中最亮的星星之一。它从诞生起就改变了软件开发世界的格局。发展到今天,Java仍然是这个世界上最重要的编程语言之一。当然,它也面临着新的挑战。 Java的诞生 回溯到 1991 年,在 …...

麦田物语学习笔记:保存和加载场景中的物品

目录 基本流程 1.代码思路 2.代码实现 最终效果 补充知识点 1.序列化 2.委托 基本流程 现在在切换场景后,场景中的物品即使被拾取了,也还是会被重新加载出来,所以本篇文章的任务是在切换场景前后能保留当前场景的数据 1.代码思路 (1)为了保留处在地上的物品数据,就需要…...

页高速缓存与缓冲区缓存的应用差异

页高速缓存(Page Cache)与缓冲区缓存(Buffer Cache)是计算机系统中用于提高数据访问性能的两种不同类型的缓存机制,它们的差异主要体现在以下几个方面: 缓存目的 页高速缓存:主要用于加速对磁…...

深度学习 Pytorch 单层神经网络

神经网络是模仿人类大脑结构所构建的算法,在人脑里,我们有轴突连接神经元,在算法中,我们用圆表示神经元,用线表示神经元之间的连接,数据从神经网络的左侧输入,让神经元处理之后,从右…...

一文读懂 HTTP:Web 数据交换的基石

HTTP 概述 HTTP 是一种用作获取诸如 HTML 文档这类资源的协议。它是 Web 上进行任何数据交换的基础,同时,也是一种客户端—服务器(client-server)协议,也就是说,请求是由接受方——通常是 Web 浏览器——发…...

算法知识补充2

一部分&#xff1a;Tire树&#xff1a;高效地存储和查找字符串集合的数据结构acwing835 #include<iostream> #include<cstring> using namespace std; const int N100010; int son[N][26],cnt[N],idx; char str[N]; void insert(char str[]){int p0;for(int i0;st…...

Vue.js组件开发-实现对视频预览

在 Vue 中实现视频文件预览 实现步骤 创建 Vue 组件&#xff1a;构建一个 Vue 组件用于处理视频文件的选择和预览。文件选择&#xff1a;添加一个文件输入框&#xff0c;允许用户选择视频文件。读取文件&#xff1a;监听文件选择事件&#xff0c;使用 FileReader API 读取所选…...

SSM开发(三) spring与mybatis整合(含完整运行demo源码)

目录 本文主要内容 一、Spring整合MyBatis的三个关键点 二、整合步骤 1、创建一个Maven项目 2、在pom.xml文件中添加jar包的依赖 3、配置MyBatis 注解实现方式 XML配置文件实现 4、配置Spring 5、测试运行 本文主要内容 1. Spring + Mybatis整合; 2. MyBatis两种SQL…...

.NET MAUI进行UDP通信(二)

上篇文章有写过一个简单的demo&#xff0c;本次对项目进行进一步的扩展&#xff0c;添加tabbar功能。 1.修改AppShell.xaml文件&#xff0c;如下所示&#xff1a; <?xml version"1.0" encoding"UTF-8" ?> <Shellx:Class"mauiDemo.AppShel…...

14-6-3C++STL的list

&#xff08;一&#xff09;list的插入 1.list.insert(pos,elem);//在pos位置插入一个elem元素的拷贝&#xff0c;返回新数据的位置 #include <iostream> #include <list> using namespace std; int main() { list<int> lst; lst.push_back(10); l…...

AAAI2024论文解读|HGPROMPT Bridging Homogeneous and Heterogeneous Graphs

论文标题 HGPROMPT: Bridging Homogeneous and Heterogeneous Graphs for Few-shot Prompt Learning 跨同构异构图的小样本提示学习 论文链接 HGPROMPT: Bridging Homogeneous and Heterogeneous Graphs for Few-shot Prompt Learning论文下载 论文作者 Xingtong Yu, Yuan…...

WPA_cli P2P命令详解及使用

目录 通用命令 status scan scan_results add_network set_network enable_network reconfigure save_config quit P2P 相关命令 p2p_find p2p_peers p2p_connect [method] p2p_group_add [ssid=] [freq=] [ht40] [persistent] p2p_remove_client p2p_di…...

【竞技宝】LPL:IG3-1击败RNG

北京时间1月26日&#xff0c;英雄联盟LPL2025正在如火如荼的进行之中&#xff0c;昨日共进行两场比赛。第二场比赛由RNG对阵IG。本场比赛&#xff0c;RNG在首局前期打出完美节奏后一直压制着IG拿下比赛&#xff0c;但此后的三局&#xff0c;IG发挥出自己擅长大乱斗的能力在团战…...

sqlite3 学习笔记

文章目录 前言SQL的概念与表格相关的操作i.创建表格&#xff08;增&#xff09;ii 删除表格&#xff08;删&#xff09;iii 更改表格&#xff08;改&#xff09;iv 查询表格&#xff08;查&#xff09; 与记录相关的操作i 插入记录ii 删除记录iii 查询记录iv 修改记录 Linux中使…...

Visual Studio Community 2022(VS2022)安装方法

废话不多说直接上图&#xff1a; 直接上步骤&#xff1a; 1&#xff0c;首先可以下载安装一个Visual Studio安装器&#xff0c;叫做Visual Studio installer。这个安装文件很小&#xff0c;很快就安装完成了。 2&#xff0c;打开Visual Studio installer 小软件 3&#xff0c…...

项目集成RabbitMQ

文章目录 1.common-rabbitmq-starter1.创建common-rabbitmq-starter2.pom.xml3.自动配置1.RabbitMQAutoConfiguration.java2.spring.factories 2.测试使用1.创建common-rabbitmq-starter-demo2.目录结构3.pom.xml4.application.yml5.TestConfig.java 配置交换机和队列6.TestCon…...

3097. 或值至少为 K 的最短子数组 II

3097. 或值至少为 K 的最短子数组 II 题目链接&#xff1a;3097. 或值至少为 K 的最短子数组 II 代码如下&#xff1a; class Solution { public:int minimumSubarrayLength(vector<int>& nums, int k) {int res INT_MAX;for (int i 0;i < nums.size();i) {in…...

Linux 35.6 + JetPack v5.1.4之编译器升级

Linux 35.6 JetPack v5.1.4之编译器升级 1. 源由2. 步骤步骤一&#xff1a;添加编译器源步骤二&#xff1a;安装gcc/g 11/13步骤三&#xff1a;确认安装版本步骤四&#xff1a;配置gcc/g版本步骤五&#xff1a;使能gcc/g版本步骤六&#xff1a;查看使能链接关系步骤七&#xf…...

[MoeCTF 2022]ezhtml

题目 查看页面源代码 有个/evil.js文件打开查看 看到了flag NSSCTF{e15f7f51-d1a0-4d1b-a96d-c987a4fe69a0} 到这里也就可以直接结束了 // 获取元素节点 var sx document.querySelector(#sx); // 获取 id 为 sx 的元素节点 var yw document.querySelector(#yw); // 获取…...

活动回顾和预告|微软开发者社区 Code Without Barriers 上海站首场活动成功举办!

Code Without Barriers 上海活动回顾 Code Without Barriers&#xff1a;AI & DATA 深入探索人工智能与数据如何变革行业 2025年1月16日&#xff0c;微软开发者社区 Code Without Barriers &#xff08;CWB&#xff09;携手 She Rewires 她原力在大中华区的首场活动“AI &…...

使用 Redis List 和 Pub/Sub 实现简单的消息队列

使用 Redis List 和 Pub/Sub 实现简单的消息队列 Redis 本身不是专门的消息队列系统&#xff0c;但它提供了多种数据结构&#xff08;如 List、Pub/Sub、Stream&#xff09;来实现消息队列功能。根据不同的业务需求&#xff0c;可以选择不同的方式&#xff1a; 在 Redis 中&a…...

本地项目上传到码云

本地项目上传到码云 写在前面1. 系统安装git环境2. 创建仓库3. 开始上传3.1 创建新的远程仓库3.2 在项目的文件夹用git打开3.3 删除本地的 .git 目录3.4 初始化新的 Git 仓库3.5 添加远程仓库3.6 添加项目文件3.7 提交更改3.8 推送到远程仓库3.9 验证 4. 完整的步骤总结写在最后…...

Ansible入门学习之基础元素介绍

一、Ansible目录结构介绍 1.通过rpm -ql ansible获取ansible所有文件存放的目录 有配置文件目录 /etc/ansible/ 执行文件目录 /usr/bin/ 其中 /etc/ansible/ 该文件目录的主要功能是 inventory主机信息配置&#xff0c;ansible工具功能配置。 ansible自身的配置文件…...

大数据治理实战指南:数据质量、合规与治理架构

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 引言 随着企业数字化转型的加速&#xff0c;大数据已成为驱动业务决策的核心资产。然而&#xff0c;数据治理的缺失或不完善&…...

leetcode_链表 234.回文链表

234.回文链表 给你一个单链表的头节点head&#xff0c;请你判断该链表是否为回文链表。如果是, 返回 true ; 否则, 返回false。思路&#xff1a; 找到中间节点(快慢指针法)反转后半部分的链表比较前半部分和后半部分链表 # Definition for singly-linked list. # class List…...

[Dialog屏幕开发] 屏幕绘制(下拉菜单)

阅读该篇文章之前&#xff0c;可先阅读下述资料 [Dialog屏幕开发] Table Control 列数据操作https://blog.csdn.net/Hudas/article/details/145343731?spm1001.2014.3001.5501https://blog.csdn.net/Hudas/article/details/145343731?spm1001.2014.3001.5501https://blog.cs…...

deepseek v1手机端部署

在iPhone上部署DeepSeekR1 1. 安装快捷指令&#xff1a; 打开iPhone上的Safari浏览器&#xff0c;访问[这个链接](https://www.icloud.com/shortcuts/e0bc5445c39d45a78b90e1dc896cd010)下载快捷指令。 下载后&#xff0c;按照提示完成安装。 2. 获取并配置API Key&a…...

CVPR 2024 无人机/遥感/卫星图像方向总汇(航空图像和交叉视角定位)

1、UAV、Remote Sensing、Satellite Image(无人机/遥感/卫星图像) Unleashing Unlabeled Data: A Paradigm for Cross-View Geo-Localization ⭐codeRethinking Transformers Pre-training for Multi-Spectral Satellite Imagery ⭐codeAerial Lifting: Neural Urban Semantic …...

【信息系统项目管理师-选择真题】2015下半年综合知识答案和详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第…...

Baklib如何结合内容中台与人工智能技术实现数字化转型

内容概要 在当前快速发展的数字环境中&#xff0c;企业面临着转型的紧迫性与挑战&#xff0c;尤其是在内容管理和用户互动的领域。内容中台作为一种集成化的解决方案&#xff0c;不仅能够提高企业在资源管理方面的效率&#xff0c;还能够为企业提供一致性和灵活性的内容分发机…...