找回密码
 立即注册
首页 业界区 业界 Spring AI Alibaba 1.0 正式发布!核心特性速览+老项目 ...

Spring AI Alibaba 1.0 正式发布!核心特性速览+老项目升级指南

胰芰 2025-6-26 09:57:42
随着 Spring AI 首个正式版本 1.0 的发布,国产之光 Spring AI Alibaba 也发布了 1.0 GA 正式版本,更新速度真的很快!
我对框架的更新真的是又爱又恨,爱的是功能更丰富更好用,恨的是又要学习新东西了、老项目又要更新了。
1.png

不过下面通过我的分享,相信能帮大家节约很多时间,快速了解:

  • 什么是 Spring AI Alibaba?
  • 新版本有哪些大更新?
  • 如何将项目升级到新版本?
该踩的坑都帮大家踩完了,坚持看完这期内容,你一定会有所收获。
 
什么是 Spring AI Alibaba?

Spring AI 是知名 Java 开发框架 Spring 官方维护的 AI 开发框架,能够让你用更少的代码、更快开发各种 AI 应用。而 Spring AI Alibaba 在 Spring AI 的基础上进行扩展,深度集成阿里自家的大模型平台和各种技术组件,并且额外支持工作流、多智能体应用的快速开发。
2.png

因为它是兼容 Spring AI 的,而且功能更丰富、更新更及时、文档更清晰,更适合国人体质,所以我会更建议大家选择它来开发 AI 应用。
3.png

官方也是很贴心,基于 Spring AI Alibaba 提供了一个现成的 智能体调试广场,而且代码开源,这不就是一个现成的、可以学习 AI 开发的项目么?
4.png

直接复制官方提供的 Docker 命令就可以把项目跑起来了:
5.png

然后就可以在本地体验聊天机器人、多轮对话、图片生成、工具调用、RAG 知识库、MCP 集成等框架的核心能力。
6.png

7.png

 
新版本有哪些更新?

结合官方文档和我自己的理解,我觉得 Spring AI Alibaba 1.0 的更新可以用两个字来概括 —— 突破
为什么这么说?我们先来看看这次值得关注的几点更新:
1、Graph 多智能体框架

这是本次更新的重头戏。基于 Spring AI Alibaba Graph,开发者可以快速构建复杂的工作流和多智能体应用,完全无需关心底层的流程编排、上下文记忆管理等复杂实现细节。
举个小例子,比如我们现在想做一个 “自媒体自动发文工具”,可以利用一些可视化 AI 智能体开发平台快速创建工作流:
8.png

有时别人的平台可能无法满足我们定制化的开发需求,这时就可以使用 Graph 多智能体框架,利用预置的节点快速定义出一套工作流。上图对应的工作流代码如下:
  1. // 创建工作流<br>StateGraph stateGraph = new StateGraph("内容生成工作流", stateFactory)<br>   // 添加工作流节点<br>  .addNode("start", node_async(new StartNode()))                      // 初始化工作流<br>  .addNode("topic_generation", node_async(new TopicGenerationNode())) // 根据输入生成文案<br>  .addNode("content_collection", node_async(new ContentCollectionNode())) // 从网络收集相关素材<br>  .addNode("content_integration", node_async(new ContentIntegrationNode())) // 组合文案和素材<br>  .addNode("api_publish", node_async(new ApiPublishNode()))           // 调用接口发布文章<br>  .addNode("result_output", node_async(new ResultOutputNode()))       // 输出最终结果<br>   // 定义节点间的执行顺序<br>  .addEdge(START, "start")                        // 工作流启动 → 开始节点<br>  .addEdge("start", "topic_generation")           // 开始节点 → 主题生成<br>  .addEdge("topic_generation", "content_collection")  // 主题生成 → 素材收集<br>  .addEdge("content_collection", "content_integration") // 素材收集 → 内容整合<br>  .addEdge("content_integration", "api_publish")   // 内容整合 → API 发布<br>  .addEdge("api_publish", "result_output")        // API 发布 → 结果输出<br>  .addEdge("result_output", END);                 // 结果输出 → 工作流结束
复制代码
虽然给出的例子并不复杂,但智能体工作流的水还是很深的,涉及到智能体协作、任务分解、路由策略、状态管理等等。后面我会在 编程导航 的项目和个人账号中分享更多这方面的实战和技术解析。
9.png

 
2、生态集成

Spring AI Alibaba 1.0 继续放大自身的优势,将传统后端开发与新兴的 AI 开发进行了融合,通过集成更多技术组件和云服务,帮助传统业务更快地接入 AI、加速 AI 应用的落地。
举几个典型的集成案例:
1)集成 Nacos 管理 MCP

Nacos 是主流的服务注册中心,是微服务架构的实现关键,用于帮助某个服务发现其他服务,从而进行调用。如果 AI 项目需要使用很多 MCP 服务,我们就可以把各种 MCP 服务的信息注册到 Nacos 上;AI 项目需要使用 MCP 时,就可以到 Nacos 上获取到 MCP 服务的信息了。这样就实现了对 MCP 服务的集中管理和动态更新,更加规范化。
官方文档:https://java2ai.com/docs/1.0.0.2/tutorials/basics/spring-ai-alibaba-mcp-nacos-introduce
10.png

 
2)集成 Nacos 管理 Prompt

传统的 AI 应用开发中,Prompt 往往是硬编码在代码里的,这就带来了一个问题:每次想要调整 Prompt,都需要重新发布代码,非常不灵活。而 Spring AI Alibaba 通过集成 Nacos,解决了这个痛点。
开发者可以将 Prompt 模板存储在 Nacos 配置中心,AI 应用启动时会自动从 Nacos 拉取最新的 Prompt 配置。而且当我们在 Nacos 中修改 Prompt 后,应用可以实时感知到变化并自动更新,无需重启服务,让 Prompt 的迭代优化变得更灵活。
参考文档:https://java2ai.com/docs/1.0.0.2/practices/dynamic-prompt/dynamic-prompt
11.png

3)集成 AI 模型和云知识库

虽然这是之前就有的能力,但我觉得还是值得介绍一下。与阿里云百炼平台无缝对接,一键接入通义千问等阿里系大模型;还能直接对接云知识库平台,企业只需要利用可视化界面上传切分文档、制作知识库,然后几行代码就能让 AI 利用知识库回答问题。
12.png

 
4)可观测性支持

Spring AI 本身提供了 可观测性 能力,可以在项目运行时获取到 AI 的调用情况,比如调用次数、响应时间、Token 消耗等关键指标。这些指标数据可以轻松接入阿里云的应用实时监控服务 ARMS、Zipkin 等监控工具,开发者可以实时监控 AI 模型,快速定位和解决性能瓶颈。
13.png

 
3、前沿案例

最近 Spring AI Alibaba 连续发布了几个新项目,包括:
1)JManus 通用智能体平台:可以说是 Java 版本的 OpenManus 通用智能体平台,用户可以通过自然语言描述需求,让 AI 自动规划并执行规划,直到完成任务。
14.png

2)NL2SQL 智能体框架:专为 Java 开发者设计的自然语言转 SQL 工具,用户只需用中文描述查询数据库的需求,AI 就能自动生成对应的 SQL 语句,让数据分析变得更简单。
15.png

3)DeepResearch 深度调研智能体:基于多智能体架构的调研工具,整合了网络搜索、网页爬取、数据分析等功能,可以自动完成复杂调研报告的撰写工作。
16.png

虽然这些并不是框架本身的功能更新,但是很好地展示了 Spring AI Alibaba 在不同场景的应用效果。如果你要开发类似的项目,可以直接参考官方提供的这些案例。
 
4、细节优化

此外,Spring AI Alibaba 1.0 还优化了一些功能和细节,比如我发现 会话记忆能力 支持了 jdbc、redis、elasticsearch 等多种存储插件,让 AI 对话能够持久化保存。
17.png

更多的内容大家可以自己阅读官方文档探索。
 
 
前面提到我认为这次框架的更新是一种突破,因为它完成了 能对话 的 AI 助手到 能做事 的 AI 智能体的进化。
在以前,我们使用 Spring AI 只能开发一些简单的对话型 AI 应用,功能相对单一。而现在,借助 Spring AI Alibaba 1.0 的 Graph 能力和生态集成,我们可以更快速地开发出复杂的智能体应用。
当然,Spring AI Alibaba 并不是唯一的 AI 应用开发框架,像 LangChain4j、LangGraph,以及 Spring 之父最新推出的 embabel-agent 都是不错的选择。
在框架选择上,我比较看重的因素是 生态。可以思考一下,你的项目是否需要和其他服务进行深度集成?
就拿我们团队来说,目前也在用 Spring AI Alibaba 框架,主要是因为我们使用了不少阿里开源的技术中间件和云服务,使用 Spring AI Alibaba 的开发成本更低。毕竟有技术大厂背书,我还是很看好它的发展,但有一说一,现在文档更新的速度有点跟不上框架更新的速度了,智能体框架的学习成本还是有点高的。
官方也提供了 主流 Java AI 框架的选型对比,供大家参考:
18.png

 
如何升级框架版本?

接下来进入实战环节,我会用自己之前开源的 AI 超级智能体项目 来详细演示如何将老版本的 Spring AI Alibaba 项目升级到 1.0 版本。大家一定要认真看,因为有些变动连官方文档都没有明确指出,是我在升级过程中踩坑摸索出来的宝贵经验。
项目指路:https://github.com/liyupi/yu-ai-agent
19.png

友情提醒:这个项目涉及到向量数据库、MCP 服务、API Key 等外部依赖,直接下载项目是跑不起来的,这是正常现象。必须要按照项目说明补充相应的配置,所有需要配置的地方我都已经详细标注出来了。
20.png

建议大家先新建一个本地配置文件,然后让我们开始将 Spring AI Alibaba 从 1.0.0-M6.1 版本升级到 1.0.0.2 版本。
 
第一步:依赖更新

我们的项目分为主项目和 MCP 服务子项目两部分,需要分别进行更新。
主项目依赖更新

1)更新 Spring AI Alibaba 基础依赖,从官方文档复制依赖管理配置并引入依赖:
  1. <dependencyManagement><br> <dependencies><br>   <dependency><br>     <groupId>com.alibaba.cloud.ai</groupId><br>     spring-ai-alibaba-bom</artifactId><br>     <version>1.0.0.2</version><br>     <type>pom</type><br>     <scope>import</scope><br>   </dependency><br> </dependencies><br></dependencyManagement><br>​<br><dependencies><br> <dependency><br>   <groupId>com.alibaba.cloud.ai</groupId><br>   spring-ai-alibaba-starter-dashscope</artifactId><br> </dependency><br></dependencies>
复制代码
 
2)更新 Spring AI 相关依赖
参考 官方文档 进行升级,首先引入仓库配置,确保能够正确拉取到 Spring AI 相关的依赖:
  1. <repositories><br> <repository><br>   <id>spring-snapshots</id><br>   <name>Spring Snapshots</name><br>   <url>https://repo.spring.io/snapshot</url><br>   <releases><br>     <enabled>false</enabled><br>   </releases><br> </repository><br> <repository><br>   <name>Central Portal Snapshots</name><br>   <id>central-portal-snapshots</id><br>   <url>https://central.sonatype.com/repository/maven-snapshots/</url><br>   <releases><br>     <enabled>false</enabled><br>   </releases><br>   <snapshots><br>     <enabled>true</enabled><br>   </snapshots><br> </repository><br></repositories>
复制代码
在这个过程中,你可以通过 Maven 仓库 来查看最新版本信息:
21.png

然后添加依赖管理配置,注意版本号不用添加 SNAPSHOT 后缀,就 1.0.0 版本:
  1. <dependencyManagement><br>   <dependencies><br>       <dependency><br>           <groupId>org.springframework.ai</groupId><br>           spring-ai-bom</artifactId><br>           <version>1.0.0</version><br>           <type>pom</type><br>           <scope>import</scope><br>       </dependency><br>   </dependencies><br></dependencyManagement>
复制代码
具体要修改的依赖项如下,修改前的依赖配置:
  1. <br><dependency><br>   <groupId>org.springframework.ai</groupId><br>   spring-ai-ollama-spring-boot-starter</artifactId><br>   <version>1.0.0-M6</version><br></dependency><br>​<br><dependency><br>   <groupId>org.springframework.ai</groupId><br>   spring-ai-markdown-document-reader</artifactId><br>   <version>1.0.0-M6</version><br></dependency><br>​<br><dependency><br>   <groupId>org.springframework.ai</groupId><br>   spring-ai-pgvector-store</artifactId><br>   <version>1.0.0-M6</version><br></dependency><br>​<br><br><dependency><br>   <groupId>org.springframework.ai</groupId><br>   spring-ai-mcp-client-spring-boot-starter</artifactId><br>   <version>1.0.0-M6</version><br></dependency>
复制代码
修改后的依赖配置,鱼皮是依次参考官方文档进行确认和更新的:

  • Ollama:https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html
  • Markdown Document Reader:https://docs.spring.io/spring-ai/reference/api/etl-pipeline.html#_markdown
  • PGvector:https://docs.spring.io/spring-ai/reference/api/vectordbs/pgvector.html#_manual_configuration
  • MCP:https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html
  1. <dependency><br>   <groupId>org.springframework.ai</groupId><br>   spring-ai-starter-model-ollama</artifactId><br></dependency><br>​<br><dependency><br>   <groupId>org.springframework.ai</groupId><br>   spring-ai-markdown-document-reader</artifactId><br></dependency><br>​<br><dependency><br>   <groupId>org.springframework.ai</groupId><br>   spring-ai-pgvector-store</artifactId><br></dependency><br>​<br><dependency><br>   <groupId>org.springframework.ai</groupId><br>   spring-ai-starter-mcp-client</artifactId><br></dependency>
复制代码
 
3)更新完依赖后,建议安装 Maven Helper 插件来检测依赖冲突:
22.png

检查结果显示没有 Spring AI 相关冲突,说明依赖配置正确:
23.png

 
MCP 服务端项目依赖更新

MCP 服务端项目的更新相对简单,跟前面一样,引入仓库和依赖管理配置,然后只需要更新 spring-ai-starter-mcp-server-webmvc 依赖即可:
  1. <dependencyManagement><br>   <dependencies><br>       <dependency><br>           <groupId>org.springframework.ai</groupId><br>           spring-ai-bom</artifactId><br>           <version>1.0.0</version><br>           <type>pom</type><br>           <scope>import</scope><br>       </dependency><br>   </dependencies><br></dependencyManagement>
  2. <repositories><br> <repository><br>   <id>spring-snapshots</id><br>   <name>Spring Snapshots</name><br>   <url>https://repo.spring.io/snapshot</url><br>   <releases><br>     <enabled>false</enabled><br>   </releases><br> </repository><br> <repository><br>   <name>Central Portal Snapshots</name><br>   <id>central-portal-snapshots</id><br>   <url>https://central.sonatype.com/repository/maven-snapshots/</url><br>   <releases><br>     <enabled>false</enabled><br>   </releases><br>   <snapshots><br>     <enabled>true</enabled><br>   </snapshots><br> </repository><br></repositories>
  3.    org.springframework.ai
  4.    spring-ai-starter-mcp-server-webmvc
复制代码
 
第二步:代码问题修复

依赖更新完成后,接下来需要修复由于版本变更导致的代码问题。
 
1、Advisor 顾问功能修复

这是一个 破坏性变更,很多 advisor 相关的接口和方法都更新了,但坑爹的是官方文档并未明确说明这个变更!
24.png

遇到这种情况,我们可以参考源码(比如 SimpleLoggerAdvisor)的实现方式对之前开发的 advisor 进行修改。
1)修改后的 MyLoggerAdvisor 自定义日志拦截器代码:
  1. @Slf4j<br>public class MyLoggerAdvisor implements CallAdvisor, StreamAdvisor {<br>​<br>@Override<br>public String getName() {<br>return this.getClass().getSimpleName();<br>}<br>​<br>@Override<br>public int getOrder() {<br>return 0;<br>}<br>​<br>private ChatClientRequest before(ChatClientRequest request) {<br>log.info("AI Request: {}", request.prompt());<br>return request;<br>}<br>​<br>private void observeAfter(ChatClientResponse chatClientResponse) {<br>log.info("AI Response: {}", chatClientResponse.chatResponse().getResult().getOutput().getText());<br>}<br>​<br>@Override<br>public ChatClientResponse adviseCall(ChatClientRequest chatClientRequest, CallAdvisorChain chain) {<br>chatClientRequest = before(chatClientRequest);<br>ChatClientResponse chatClientResponse = chain.nextCall(chatClientRequest);<br>observeAfter(chatClientResponse);<br>return chatClientResponse;<br>}<br>​<br>@Override<br>public Flux<ChatClientResponse> adviseStream(ChatClientRequest chatClientRequest, StreamAdvisorChain chain) {<br>chatClientRequest = before(chatClientRequest);<br>Flux<ChatClientResponse> chatClientResponseFlux = chain.nextStream(chatClientRequest);<br>return (new ChatClientMessageAggregator()).aggregateChatClientResponse(chatClientResponseFlux, this::observeAfter);<br>}<br>}
复制代码
2)同样需要修复 ReReadingAdvisor,需要重新编写修改用户提示词的代码:
  1. /**<br>* 自定义 Re2 Advisor<br>* 可提高大型语言模型的推理能力<br>*/<br>public class ReReadingAdvisor implements CallAdvisor, StreamAdvisor {<br>​<br>   /**<br>    * 执行请求前,改写 Prompt<br>    *<br>    * @param chatClientRequest<br>    * @return<br>    */<br>   private ChatClientRequest before(ChatClientRequest chatClientRequest) {<br>       String userText = chatClientRequest.prompt().getUserMessage().getText();<br>       // 添加上下文参数<br>       chatClientRequest.context().put("re2_input_query", userText);<br>       // 修改用户提示词<br>       String newUserText = """<br>               %s<br>               Read the question again: %s<br>               """.formatted(userText, userText);<br>       Prompt newPrompt = chatClientRequest.prompt().augmentUserMessage(newUserText);<br>       return new ChatClientRequest(newPrompt, chatClientRequest.context());<br>  }<br>​<br>   @Override<br>   public ChatClientResponse adviseCall(ChatClientRequest chatClientRequest, CallAdvisorChain chain) {<br>       return chain.nextCall(this.before(chatClientRequest));<br>  }<br>​<br>   @Override<br>   public Flux<ChatClientResponse> adviseStream(ChatClientRequest chatClientRequest, StreamAdvisorChain chain) {<br>       return chain.nextStream(this.before(chatClientRequest));<br>  }<br>​<br>   @Override<br>   public int getOrder() {<br>       return 0;<br>  }<br>​<br>   @Override<br>   public String getName() {<br>       return this.getClass().getSimpleName();<br>  }<br>}
复制代码
 
2、工具调用功能修复

1)ToolRegistration 工具注册类的包名发生了变更,需要修改:
  1. // 原来:<br>import org.springframework.ai.tool.ToolCallbacks;<br>​<br>// 改为:<br>import org.springframework.ai.support.ToolCallbacks;
复制代码
2)LoveApp 中的工具调用方法需要修改:
  1. // 修改为:<br>.toolCallbacks(toolCallbackProvider)
复制代码
3)ToolCallAgent 的配置也需要修改,这是为了禁用 Spring AI 内置的工具调用机制,自己处理工具调用的流程和消息上下文:
  1. public ToolCallAgent(ToolCallback[] availableTools) {<br>   super();<br>   this.availableTools = availableTools;<br>   this.toolCallingManager = ToolCallingManager.builder().build();<br>   // 禁用 Spring AI 内置的工具调用机制,自己维护选项和消息上下文<br>   this.chatOptions = DashScopeChatOptions.builder()<br>          .withInternalToolExecutionEnabled(false)<br>          .build();<br>}
复制代码
 
3、RAG 知识库功能修复

1)PgVector 配置修改
由于我们原本就是手动引入 PgVector,没有使用 Spring Boot 的自动配置包,所以只需要移除项目启动类的自动配置即可:
25.png

代码如下:
  1. @SpringBootApplication(exclude = {<br>       // 为了便于大家开发调试和部署,取消数据库自动配置<br>       // 需要使用 PgVector 时把 DataSourceAutoConfiguration.class 删除<br>       DataSourceAutoConfiguration.class<br>})<br>public class YuAiAgentApplication {<br>​<br>   public static void main(String[] args) {<br>       SpringApplication.run(YuAiAgentApplication.class, args);<br>  }<br>}
复制代码
2)RAG 相关类包名修复
自定义 RAG 知识库相关的 LoveAppRagCloudAdvisorConfig 和 LoveAppRagCustomAdvisorFactory 类,包名发生了变更:
  1. // 原来:<br>import org.springframework.ai.chat.client.advisor.RetrievalAugmentationAdvisor;<br>​<br>// 改为:<br>import org.springframework.ai.rag.advisor.RetrievalAugmentationAdvisor;
复制代码
3)DashScopeApi 构建方式修改,之前是 new,改为 builder 模式:
  1. DashScopeApi dashScopeApi = DashScopeApi.builder()<br>      .apiKey(dashScopeApiKey)<br>      .build();
复制代码
4)如果在 LoveApp 中想使用 QuestionAnswerAdvisor,需要引入新的依赖,因为包名发生了变更:
  1. <dependency><br>   <groupId>org.springframework.ai</groupId><br>   spring-ai-advisors-vector-store</artifactId><br></dependency>
复制代码
 
4、对话记忆功能修复

对话记忆的写法变更还挺大的,参考 官方文档。
1)修改 LoveApp 类中对话记忆的设置方式,新版本将算法和存储进行了分离,支持了更多的存储方式:
  1. // 初始化基于内存的对话记忆<br>MessageWindowChatMemory chatMemory = MessageWindowChatMemory.builder()<br>      .chatMemoryRepository(new InMemoryChatMemoryRepository())<br>      .maxMessages(20)<br>      .build();
复制代码
2)修改对话记忆 Advisor 的创建方式,感觉 Spring AI 要统一用建造者模式创建对象了:
  1. chatClient = ChatClient.builder(dashscopeChatModel)<br>      .defaultSystem(SYSTEM_PROMPT)<br>      .defaultAdvisors(<br>               MessageChatMemoryAdvisor.builder(chatMemory).build(),<br>      )
复制代码
3)会话 ID 键名修改:
  1. .advisors(spec -> spec.param(ChatMemory.CONVERSATION_ID, chatId))
复制代码
4)修改基于文件持久化的会话记忆 FileBasedChatMemory 类,调整 get 方法,因为 ChatMemory 接口的 get 方法参数发生了变更:
  1. @Override<br>public List<Message> get(String conversationId) {<br>   return getOrCreateConversation(conversationId);<br>}
复制代码
 
5、 其他

还有个小细节,要修改 MyKeywordEnricher 类,因为关键词元信息增强器的包名发生了变更:
  1. // 原来:<br>import org.springframework.ai.transformer.KeywordMetadataEnricher;<br>​<br>// 改为:<br>import org.springframework.ai.model.transformer.KeywordMetadataEnricher;
复制代码
 
总结

以上就是 Spring AI Alibaba 框架的升级过程,涉及的修改点还是比较多的、而且还要对所有功能进行测试,很耗时间,这就是为什么在企业中 “项目能运行,就不要动它”。
所有的代码修改我都已经开源到 GitHub 上了,每一次的提交记录都非常清晰,方便大家对照学习。如果有遗漏的地方,也欢迎大家评论区指出,我会继续补充和完善。
不得不感叹技术的更新真的是太太太太快了,但也正是这种快速迭代让我们能够享受到越来越强大的 AI 开发能力。很快我会再带大家用更新的技术做一套全新的 AI 全栈项目,点个关注,敬请期待吧~
 
更多编程学习资源


  • Java前端程序员必做项目实战教程+毕设网站
  • 程序员免费编程学习交流社区(自学必备)
  • 程序员保姆级求职写简历指南(找工作必备)
  • 程序员免费面试刷题网站工具(找工作必备)
  • 最新Java零基础入门学习路线 + Java教程
  • 最新Python零基础入门学习路线 + Python教程
  • 最新前端零基础入门学习路线 + 前端教程
  • 最新数据结构和算法零基础入门学习路线 + 算法教程
  • 最新C++零基础入门学习路线、C++教程
  • 最新数据库零基础入门学习路线 + 数据库教程
  • 最新Redis零基础入门学习路线 + Redis教程
  • 最新计算机基础入门学习路线 + 计算机基础教程
  • 最新小程序入门学习路线 + 小程序开发教程
  • 最新SQL零基础入门学习路线 + SQL教程
  • 最新Linux零基础入门学习路线 + Linux教程
  • 最新Git/GitHub零基础入门学习路线 + Git教程
  • 最新操作系统零基础入门学习路线 + 操作系统教程
  • 最新计算机网络零基础入门学习路线 + 计算机网络教程
  • 最新设计模式零基础入门学习路线 + 设计模式教程
  • 最新软件工程零基础入门学习路线 + 软件工程教程

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册