首页 文章 精选 留言 我的

精选列表

搜索[自我进化],共7131篇文章
优秀的个人博客,低调大师

Python初学者的自我修养,找到自己的方向

云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 上周的文章当中我们简单介绍了线程和进程的概念,以及在Python当中如何在主线程之外创建其他线程,并且还了解了用户级线程和后台线程的区别以及使用方法。今天我们来看看线程的其他使用,比如如何停止一个线程,线程之间的Event用法等等。 停止线程 利用Threading库我们可以很方便地创建线程,让它按照我们的想法执行我们想让它执行的事情,从而加快程序运行的效率。然而有一点坑爹的是,线程创建之后,就交给了操作系统执行,我们无法直接结束一个线程,也无法给它发送信号,无法调整它的调度,也没有其他高级操作。如果想要相关的功能,只能自己开发。 怎么开发呢? 我们创建线程的时候指定了target等于一个我们想让它执行的函数,这个函数并不一定是全局函数,实际上也可以是一个对象中的函数。如果是对象中的函数,那么我们就可以在这个函数当中获取到对象中的其他信息,我们可以利用这一点来实现手动控制线程的停止。 说起来好像不太好理解,但是看下代码真的非常简单: import time from threading import Thread class TaskWithSwitch: def __init__(self): self._running = True def terminate(self): self._running = False def run(self, n): while self._running and n > 0: print('Running {}'.format(n)) n -= 1 time.sleep(1) c = TaskWithSwitch() t = Thread(target=c.run, args=(10, )) t.start() c.terminate() t.join() 如果你运行这段代码,会发现屏幕上只输出了10,因为我们将_running这个字段置为False之后,下次循环的时候不再满足循环条件,它就会自己退出了。 如果我们想要用多线程来读取IO,由于IO可能存在堵塞,所以可能会出现线程一直无法返回的情况。也就是说我们在循环内部卡死了,这个时候单纯用_running来判断还是不够的,我们需要在线程内部设置计时器,防止循环内部的卡死。 class IOTask: def __init__(self): self._running = True def terminate(self): self._running = False def run(self, sock): # 在socket中设置计时器 sock.settimeout(10) while self._running: try: # 由于设置了计时器,所以这里不会永久等待 data = sock.recv(1024) break except socket.timeout: continue return 线程信号的传递 我们之所以如此费劲才能控制线程的运行,主要原因是线程的状态是不可知的,并且我们无法直接操作它,因为它是被操作系统管理的。我们运行的主线程和创建出来的线程是独立的,两者之间并没有从属关系,所以想要实现对线程的状态进行控制,往往需要我们通过其他手段来实现。 我们来思考一个场景,假设我们有一个任务,需要在另外一个线程运行结束之后才能开始执行。要想要实现这一点,就必须对线程的状态有所感知,需要其他线程传递出信号来才行。我们可以使用threading中的Event工具来实现这一点。Event工具就是可以用来传递信号的,就好像是一个开关,当一个线程执行完成之后,会去启动这个开关。而这个开关控制着另外一段逻辑的运行。 我们来看下样例代码: import time from threading import Thread, Event def run_in_thread(): time.sleep(1) print('Thread is running') t = Thread(target=run_in_thread) t.start() print('Main thread print') 我们在线程里面就只做了输出一行提示符,没有其他任何逻辑。由于我们在run_in_thread函数当中沉睡了1s,所以一定是先输出Main thread print再输出的Thread is running。假设这个线程是一个很重要的任务,我们希望主线程能够等待它运行到一个阶段再往下执行,我们应该怎么办呢? 注意,这里说的是运行到一个阶段,并不是运行结束。运行结束我们很好处理,可以通过join来完成。但如果不是运行结束,而是运行完成了某一个阶段,当然通过join也可以,但是会损害整体的效率。这个时候我们就必须要用上Event了。加上Event之后,我们再来看下代码: import time from threading import Thread, Event def run_in_thread(event): time.sleep(1) print('Thread is running') # set一下event,这样外面wait的部分就会被启动 event.set() # 初始化Event event = Event() t = Thread(target=run_in_thread, args=(event, )) t.start() # event等待set event.wait() print('Main thread print') 整体的逻辑没有太多的修改,主要的是增加了几行关于Event的使用代码。 我们如果要用到Event,最好在代码当中只使用一次。当然通过Event中的clear方法我们可以重置Event的值,但问题是我们没办法保证重置的这个逻辑会在wait之前执行。如果是在之后执行的,那么就会问题,并且在debug的时候会异常痛苦,因为bug不是必现的,而是有时候会出现有时候不会出现。这种情况往往都是因为多线程的使用问题。 所以如果要多次使用开关和信号的话,不要使用Event,可以使用信号量。 信号量 Event的问题在于如果多个线程在等待Event的发生,当它一旦被set的时候,那么这些线程都会同时执行。但有时候我们并不希望这样,我们希望可以控制这些线程一个一个地运行。如果想要做到这一点,Event就无法满足了,而需要使用信号量。 信号量和Event的使用方法类似,不同的是,信号量可以保证每次只会启动一个线程。因为这两者的底层逻辑不太一致,对于Event来说,它更像是一个开关。一旦开关启动,所有和这个开关关联的逻辑都会同时执行。而信号量则像是许可证,只有拿到许可证的线程才能执行工作,并且许可证一次只发一张。 想要使用信号量并不需要自己开发,thread库当中为我们提供了现成的工具——Semaphore,我们来看它的使用代码: # 工作线程 def worker(n, sema): # 等待信号量 sema.acquire() print('Working', n) # 初始化 sema = threading.Semaphore(0) nworkers = 10 for n in range(nworkers): t = threading.Thread(target=worker, args=(n, sema,)) t.start() 在上面的代码当中我们创建了10个线程,虽然这些线程都被启动了,但是都不会执行逻辑,因为sema.acquire是一个阻塞方法,没有监听到信号量是会一直挂起等待。 当我们释放信号量之后,线程被启动,才开始了执行。我们每释放一个信号,则会多启动一个线程。这里面的逻辑应该不难理解。 总结 在并发场景当中,多线程的使用绝不是多启动几个线程做不同的任务而已,我们需要线程间协作,需要同步、获取它们的状态,这是非常不容易的。一不小心就会出现幽灵bug,时显时隐,这也是并发问题让人头疼的主要原因。 【云栖号在线课堂】每天都有产品技术专家分享!课程地址:https://yqh.aliyun.com/live 立即加入社群,与专家面对面,及时了解课程最新动态!【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK 原文发布时间:2020-07-16本文作者:承志本文来自:“掘金”,了解相关信息可以关注“掘金”

优秀的个人博客,低调大师

一个“新生代”白帽的自我修养

准确地说,用“新生代”这个词来形容五达并不是非常贴切。毕竟,他已经是这个圈儿里的“老司机”了。曾两次被BlackHat邀请作主题演讲、被TEDx邀请做分享、参加CCTV-10走近科学栏目,今年又被两个全球性的安全会议邀请(2018年5月在德国卡尔斯鲁厄的安全会议和2018年10月在加拿大蒙特利尔的Virus Bulletin;这两个会议都与U2F密码学令牌相关)……嗯,应该算是白帽圈儿的一枚资深“网红”。我再见五达的时候,他依然如同去年国家网络安全宣传周上那么忙碌,有过之而无不及。因为他要在429首都网络安全日上Hold两个展台,一个是他一直非常得意的研究成果——用超声波Hack物联网设备(一台平衡车),这个演示对于他来说,也算是一个“老梗”了;而另外一个则是他新近的研究发现——黑客解密U盾(密钥)。看他精神抖擞地在展台口若悬河,

优秀的个人博客,低调大师

GRPO:模型自进化的“学习算法”

在大语言模型(LLM)迈向更高推理能力的过程中,强化学习扮演了越来越关键的角色。从早期的 PPO(Proximal Policy Optimization)到如今备受关注的 GRPO(Group Relative Policy Optimization),训练范式正在经历一场“减法革命”——用更轻量的设计,换取更高的效率与更强的稳定性。本文将从核心思想、算法差异、优势与应用场景四个维度,带你全面理解 GRPO。

优秀的个人博客,低调大师

Spring AI 再进化,支持 MCP 协议

Model Context Protocol (MCP) 是一种开放标准,旨在促进人工智能(AI)系统与各种数据源之间的安全双向连接。它为 AI 应用程序提供了统一的接口,使其能够高效地访问和利用外部数据,从而取代了以往需要为每个数据源定制集成的复杂做法。 https://modelcontextprotocol.io/docs/concepts/architecture 是什么? Model Context Protocol(MCP)是由Anthropic推出的一项开放协议,旨在促进大型语言模型(LLM)与外部数据源之间的无缝集成。MCP通过提供一个标准化的客户端-服务器架构,使得不同的AI应用能够高效地访问和共享本地及远程资源,从而解决了数据孤岛问题。 MCP 协议让开发者能够以统一的方式,连接各种本地或远程资源。 统一标准: 开发者只需要针对 MCP 进行一次开发,就能够实现与各种数据来源的对接,免去为每个数据源编写单独连接器的麻烦,从而大幅减少开发和维护的成本。 支持多种数据格式 MCP 能够处理各种不同的数据,包括结构化数据(如数据库)和非结构化数据(如文本或影像),这使得开发者可以在不考虑数据格式的情况下,轻松地将不同来源的资料整合到一起。 无缝整合 开发者可以在一个统一的界面中,从多个来源同时获取并操作数据。例如,MCP 让你可以在语言模型的聊天界面中,直接访问 GitHub、Google Drive 等资源,让团队协作更加流畅,提升工作流程效率。 和 function calling 的区别 MCP(多协议通信)提供了一种灵活且高效的数据交换机制,支持跨系统的通信和数据交换。它通过协议标准化,简化了分布式系统的开发,并有效降低了长期生态开发的成本,实现了数据共享和上下文协同等高级功能。 相较之下,Function Calling 主要适用于简单任务,且与具体的 AI 应用紧密绑定。在实际应用中,Function Calling 一旦设计完毕,通常很难在其他业务场景中复用。而 MCP 的设计初衷是为了应对跨系统、跨工具的复杂场景,它着重解决了复用性和系统间交互的问题,使得数据和功能能够在不同系统间灵活传递,从而提升了系统的整体协同效率。 Spring AI MCP 添加依赖 <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>1.0.0-M5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.experimental</groupId> <artifactId>spring-ai-mcp</artifactId> <version>0.4.1</version> </dependency> </dependencies> 增加配置 application.properties spring.ai.openai.base-url=https://api.openai-hk.com spring.ai.openai.api-key=XXX MCP Client 实现 业务目标,让 MCP 直接加载当前公众号推文,让大模型提出修改意见 @Bean public CommandLineRunner predefinedQuestions(ChatClient.Builder chatClientBuilder, List<McpFunctionCallback> functionCallbacks, ConfigurableApplicationContext context) { return args -> { var chatClient = chatClientBuilder .defaultFunctions(functionCallbacks.toArray(new McpFunctionCallback[0])) .build(); String question1 = "mcp.txt 这篇文档有什么建议吗?方便公众号传播推广"; System.out.println("ASSISTANT: " + chatClient.prompt(question1).call().content()); context.close(); }; } @Bean public List<McpFunctionCallback> functionCallbacks(McpSyncClient mcpClient) { return mcpClient.listTools(null) .tools() .stream() .map(tool -> new McpFunctionCallback(mcpClient, tool)) .toList(); } @Bean(destroyMethod = "close") public McpSyncClient mcpClient() { var stdioParams = ServerParameters.builder("npx") .args("-y", "@modelcontextprotocol/server-filesystem", getDbPath()) .build(); var mcpClient = McpClient.using(new StdioClientTransport(stdioParams)) .requestTimeout(Duration.ofSeconds(10)).sync(); var init = mcpClient.initialize(); System.out.println("MCP Initialized: " + init); return mcpClient; } private static String getDbPath() { return Paths.get(System.getProperty("user.dir"), "target").toString(); } 测试执行 运行以下命令来启动Spring Boot应用,测试MCP功能: mvn springboot:run 如果您对 Java AI 感兴趣,欢迎订阅我的频道。

优秀的个人博客,低调大师

Google 开源 RawNeRF,计算摄影再进化

Google 的 RawNeRF 是一个基于人工智能的工具,可以对图像进行智能降噪点,同时还可以改变其拍摄角度、焦点、曝光水平和色调映射,而且上述所有这些都可以在照片拍摄后再进行调整。 熟悉手机摄影的用户应该都知道,如今手机摄像头的像素越来越高,传感器尺寸也越来越大,即便如此,一旦涉及到在极端低光或完全黑暗的情况下拍摄时,拍摄出来的照片通常还是会不够清晰,画面上也会有不少的噪点。不过 Google 推出的的新工具可能会改变这种状况。 RawNeRF 是 Google 开源的一个 AI 工具,它也是更大的 MultiNeRF 项目的一部分,通过使用 NeRF (Neural Radiance Fields) 来扫描一系列的图像,RawNeRF 可以重建一个场景的三维渲染。通过重建的渲染,除了可以降低图片中的噪点,用户还可以在拍摄照片后改变相机位置、曝光、焦点等。 从图片中也能看出来,经过 RawNeRF 处理后的图片更加清晰,色彩也没有失真。它表现如此出色的原因是该工具是根据 RAW 图片收集的数据进行训练的,而不是标准的 JPEG 图像。与标准照片相比,RAW 图像包含了更多的细节,这些细节可以用来在后期处理中增强图像,也正是多出来的这些数据,可以帮助 Google 更好地训练 AI 工具。 Google Pixel 系列手机的一大特色就是拍照效果十分出众,尤其是当年仅凭借一个摄像头就能拍摄出比其他配备多个摄像头的手机还要好的照片。十分期待 RawNeRF(或者类似技术)可以在不久的将来出现在智能手机上,进一步推动计算摄影的发展。 RawNeRF 项目地址

优秀的个人博客,低调大师

追踪边缘计算的发展和进化

根据调研机构Forrester公司的调查,目前全球32%的电信决策者正在应用或扩展边缘计算设施,另有27%的电信决策者表示计划在一年内构建边缘基础设施。而组织采用边缘计算的主要动力包括对带宽、成本和延迟的敏感性。 到目前为止,边缘计算通过本地化数据采集和控制功能,在最终用户附近存储高带宽内容和应用程序可以规避距离、容量限制、多个网络跃点以及集中处理存在于传统互联网架构中负载的问题。简而言之,在公共云和私有云来回传输数据需要足够的带宽,而随着智能城市发展而不断增长的数十亿台物联网设备需要更低的网络延迟。 多年来,内容提供商已经实现媒体本地化,以便为消费者提供卓越的观看体验。云计算服务需要更大的带宽、更小的延迟、更高的功率密度,以及更快的云端入口,他们继续利用边缘基础设施作为接近企业客户的手段,同时解决诸如性能、安全性和成本等业务关键挑战。与此同时,与物联网、5G和自动驾驶汽车的出现相关的创新性下一代服务和生态系统合作伙伴,无论是目前还是未来,都将不得不依赖边缘基础设施。但要全面了解边缘计算的未来,也要了解其过去。 描绘边缘计算的历史和未来 在发展历史上,全球互联网及其连接随着时间的推移已经发展成为一种中心辐射模式。网络服务提供商(NSP)在主要数据中心枢纽的互连交换机之间连接并传递流量。问题在于,由于这些枢纽主要位于一级市场,因此数据包通常必须遵循间接甚至迂回的路径传输。这通常会导致传输瓶颈和网络延迟,这些因素会对最终用户的体验产生负面影响,尤其是在二级和三级市场中。 美国许多成熟的数据中心提供商忽略了这种情况。其结果是,由于位于某些二级和三级市场的资源继续集中于一级市场的主要枢纽,这些二级和三级市场在很大程度上被边缘化。更具进取心、着眼于未来的提供商通过在二、三线城市建立数据中心来解决这种连接不足的问题,这些城市的战略位置靠近网络提供商集聚点,将互联网的优势尽可能地扩展到企业和最终用户。从那时起,许多早期边缘设施已发展成为大型区域性园区。 纵观整个市场,欧洲也面临辐射式互联网模式的挑战和局限性。尽管规模庞大,但欧洲二级和三级城市的市场服务不足。在欧洲,二级市场的人口基础通常小于一级市场,但是在地理规模、经济活动和数据流量方面,许多市场都接近一级市场,而且欧洲的一级市场比美国要多得多。一个名为《欧洲二级城市和地区发展:绩效、政策和前景》的调查报告调查了欧洲124个二级城市,这些城市几乎占了欧洲城市人口的80%。尽管二线城市通常远离所在国的首都和主要商业中心,但其商业和社会活动严重影响了各自国民经济的表现。 在这里,其解决方案是基于邻近的边缘基础设施,其战略位置最接近终端用户的接入点,从而减少网络延迟和优化性能。与北美地区一样,欧洲的本地接近访问也使云计算更接近企业,从而能够更安全、实时地访问云计算应用和服务,同时降低骨干传输成本。移动基础设施以及更靠近网络边缘的连接生态系统,最终将使这些市场能够作为独立资源运行,这是高效交付云服务、OTT内容、游戏和支持物联网的设备所必需的措施。 智慧城市是边缘计算的最后一个驱动因素。尤其是随着智慧城市理念在欧洲大陆不断扩散,全球排名前50位的智慧城市中有28个位于欧洲,其中包括阿姆斯特丹、都柏林和慕尼黑,边缘基础设施只会变得更加重要。 尽管欧洲可能不具备美国那样的大型集中式数据中心市场,但边缘计算的发展现状态却大同小异。在美国,边缘计算几乎总是由最大的宽带网络和内容生态系统所支撑。同样,在欧洲大陆,第一次发展浪潮中的边缘计算客户包括内容提供商,这些提供商寻求为消费者提供最佳的体验,其次是第二次发展浪潮,需要使云平台离企业更近。 在南美洲,云计算和内容提供商所推动的边缘计算与核心宽带网络所推动的边缘计算一样。但是,位于阿根廷布宜诺斯艾利斯的边缘设施的范围是为其整个地理区域提供服务。其首创的多租户、运营商中立的、专用的网络连接平台具有广泛的光纤、密度和对等选项,用于低延迟内容交付、云计算访问、国际互联服务,通信服务不仅促进布宜诺斯艾利斯的经济增长,而且促进周边市场的经济增长。这使阿根廷成为各行业厂商进行投资的更具吸引力的地区。 了解边缘计算的所有形式因素 在所有这些情况下,主要的优势在于边缘计算是客户需要它的地方。但是,随着边缘计算的不断发展,这变得越来越重要。无论其具体位置、规模或工作量如何,边缘计算都是实现成功业务成果的一种手段。因此,边缘计算解决方案的范围很广,从为超大规模云平台部署而设计的10到100兆瓦以上的新建数据中心设施到从1MW到10MW的本地批发数据中心,以满足内容和网络提供商、混合IT以及游戏行业的需求;而本地10kW至1MW的微型边缘数据中心将为自动驾驶汽车、物联网以及智慧城市应用和系统提供服务。 在后一种形式中,边缘计算使智能应用程序和设备在创建数据时几乎可以立即响应数据,从而消除了延迟时间。云计算为智慧城市提供了强大的支持平台,因为它提供了必要的规模、存储和处理能力,可以从这些信息中获取见解。但是,随着智慧城市技术对集中式云计算数据中心的要求越来越高,将需要本地边缘数据中心来克服延迟方面的限制,同时满足更多本地处理的需求。 也就是说,即使支持云计算服务,网络规模客户和一切即服务(XaaS)模型的超大规模园区也需要在客户需要的地方构建。无论其规模大小,边缘计算设施可以优化客户的体验。同样在这里,组织必须将数据中心的功能带到边缘计算,这是一种全新的、具有前瞻性的设计、构建和交付模式。

优秀的个人博客,低调大师

图像语义分割进化史

大多数人接触 “语义” 都是在和文字相关的领域,或语音识别,期望机器能够识别你发出去的消息或简短的语音,然后给予你适当的反馈和回复。嗯,看到这里你应该已经猜到了,图像领域也是存在 “语义” 的。 今天是 AI 大热年,很多人都关注与机器人的语音交互,可是有没有想过,将来的机器人如果不能通过图像来识别主人,家里的物品、宠物,那该多没意思。说近一些,假如扫地机器人能够机智地绕开你丢在地上的臭袜子而扫走旁边的纸屑,一定能为你的生活解决不少麻烦。 没错,图像语义分割是 AI 领域中一个重要的分支,是机器视觉技术中关于图像理解的重要一环,是不是听上去即重要又牛 X 闪闪的。 近年的自动驾驶技术中,也需要用到这种技术。车载摄像头探查到图像,后台计算机可以自动将图像分割归类,以避让行人和车辆等障碍。

优秀的个人博客,低调大师

深度学习进化编年大事记

本文来自AI新媒体量子位(QbitAI) 本文作者Andrew Fogg,可视化网页抓取网站Import.io的联合创始人。这篇文章阐明了人工智能、机器学习与深度学习的关系,进而讲述深度学习成长史,带你一文入门深度学习。 当你听到“深度学习”时,可以想象一个巨大的深度神经网络。“深度”指的是层数,媒体经常采用这种说法。 ——杰夫·迪恩 人工智能、机器学习和深度学习这三个词经常被互换,但它们的含义并不相同。我们用一张图概括三者关系—— △人工智能、机器学习与深度学习之间的关系 人工智能的定义颇具争议,一种说法就是“与人类思考方式相似的计算机程序”。根据应用范围的大小,我们将它分为通用型和应用型(应用范围窄)人工智能。 Google Trends数据显示,自2015年起,“机器学习”的搜索热度超过人工智能本身。机器学习是指在没有提供明确程序的情况

优秀的个人博客,低调大师

半导体业突围 芯片再进化

对半导体制造商和设备供应商来说,智慧手机和PC市场饱和,无法带动业绩成长,以往生产功能更强晶片的传统做法,预料也难扭转颓势,如今业界采用新技术,像是全耗尽型绝缘上覆矽(FD-SOI)和3D NAND。 华尔街日报(博客,微博)报导,半导体业面临的业绩压力已经引发整并风潮,最新数据也指出,今年全球半导体设备厂商营收恐怕仅成长1%至369.4亿美元,而晶片营收可能下滑2.4%,利空就是智慧手机的成长趋缓,PC市场也正在萎缩。半导体业都在问:下一个成长机会在哪里? 如今有许多业者陆续采用新材料与新生产技术来因应市场变化,这些业者看好连网装置需求,但物联网的晶片需求不一样,要求晶片成本控制在1美元以下,并且可运行数年,不需换电池。 格罗方德(GlobalFoundries)与竞争对手三星电子已经采用称为FD-SOI的技术,这项技术在耗电与成本上具有优势,仰赖法国厂商Soitec特别量身订制的半导体晶圆。 Soitec执行长布德尔说,日本科技大厂Sony近来设计的智慧手机GPS晶片便使用FD-SOI技术,结果晶片耗电量只有原本晶片的十分之一,让用户可以更频繁使用卫星定位技术,不必担心会吃掉手机太多电力。 有些业者也开始在不生产更小电晶体的情况下,进一步挖掘晶片的潜能,NAND快闪记忆体厂商已经以3D NAND的方式,透过堆叠多层电路来提升效能。这项技术需要采购许多生产设备,因此令许多厂商受惠,应用材料(Applied Materials)便是其中之一。 阅读祕书/FD-SOI 全耗尽型绝缘上覆矽(Fully Depleted Silicon-on-Insular,FD-SOI)是鳍式场效电晶体(FinFET)与三闸极电晶体架构(Tri-Gate)的互补技术,被视为是可望在物联网与汽车市场取代FinFET的理想替代方案,其特色为功耗低、性能和成本效益较佳。目前支持FD-SOI的晶圆代工厂包括格罗方德以及三星电子。 ====================================分割线================================ 本文转自d1net(转载)

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册