java进程间通信的几种方式?对比总结

Java进程之间通信方式&线程之间通信的方式 进程之间通信方式 (1) 管道(PIPE) (2) 命名管道(FIFO) (3) 信号量(Semphore) (4) 消息队列(MessageQueue) (5) 共享内存(SharedMemory) (6) Socket Java如何支持进程间通信。我们把Java进程理解为JVM进程。很明显,传统的这些大部分技术是无法被我们的应用程序利用了(这些进程间通信都... 阅读详情
AI摘要

本文深入解析了进程间通信的各种方式,包括管道、信号、消息队列、共享内存、内存映射、信号量、套接口等常见机制,以及RPC、WebService、RMI、JMS等高级通信方式。详细阐述了每种通信方式的特点、应用场景和关键步骤。

目录

1、汇总:常见的进程间通信方式

2、其他通信方式

2、1 RPC

2、2 Web Service

2、3 RMI(Remote Method Invocation,RMI,远程方法调用)

2、4 JMS


Alice ---- 介质 ----- Bob

通信:端到端对象通过介质进行信息的交互。

 


1、汇总:常见的进程间通信方式

 

  1. 管道(Pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。(半双工:数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。)
  2. 有名管道(named pipe): 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令 mkfifo 或系统调用 mkfifo 来创建。
  3. 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生。
  4. 消息(Message)队列:消息队列是消息的链接表。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  5. 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
  6. 内存映射(mapped memory):内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它。
  7. 信号量(semaphore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
  8. 套接口(Socket):更为一般的进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。可用于不同机器之间的进程间通信。

 


2、其他通信方式

其他通信方式有:

  • RPC(Remote Procedure Call,RPC,远程过程调用);
  • Webservice;
  • RMI(Remote Method Invocation,RMI,远程方法调用);
  • JMS等

 

2、1 RPC

概念:远程过程调用(Remote Procedure Call,缩写为RPC),是一种用于构建基于C/S(客户端/服务器)的分布式应用程序技术。调用者与被调用者可能在同一台服务器上,也可能在由网络连接的不同服务器上,对于他们来说,网络通信是透明的,就是像调用本地方法一样调用远程方法。

简单来说:RPC(remote procedure call)是指远程过程调用,比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务器上的应用想调用B服务器上的应用提供的接口,由于不在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。RPC就是用来传输这些远程调用的语义和数据的框架。请注意,RPC只是一种编程模型而非一种规范或协议,并没有规定你具体要怎样实现,你甚至都可以在你的RPC框架里面使用RMI来实现数据的传输!!!

 

 

 

关键步骤:

  • 首先,要解决通讯的问题。主要是通过客户端和服务器端之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享一个连接。
  • 第二,要解决寻址的问题。A服务器上的应用要调用B服务器上的应用,A服务器上的应用需要通过底层RPC框架得知:如何连接到B服务器(主机或IP地址)以及特定的端口,方法的名称等信息,这样才能完成调用。(如函数对应表)
  • 第三,发起调用需要将调用语义和数据进行序列化。A服务器上的应用发起远程调用时,方法的参数需要通过底层的网络协议如TCP传递到B服务器,由于网络协议是基于二进制的,内存中的参数需要序列化成二进制形式,然后再通过寻址和传输将序列化的二进制发送给B服务器。
  • 第四:B服务器收到请求后,需要进行反序列化。恢复为内存中的表达方式,然后找到对应的方法进行本地调用并返回,序列化返回值并发送给A服务器。
  • 第五:处理返回值。A服务器收到B服务器的返回值后,进行反序列化,恢复为内存中的表达方式,然后交给A服务器上的应用进行处理。

 

其他:

1、HTTP和RPC的区别

总的来说,RPC主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便;HTTP主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等。

2、服务端如何确定客户端需要调用的函数?

利用函数对应表。在远程调用中,客户端和服务端分别维护一个【ID->函数】的对应表, ID在所有进程中都是唯一确定的。客户端在做远程过程调用时,附上这个ID,服务端通过查表,来确定客户端需要调用的函数,然后执行相应函数的代码。

3、实际应用

成熟RPC框架:

dubbo:阿里开源的一款高性能RPC框架,在国内应用广泛,期间停止维护过一段时间,如今又开始了更新,并且捐献给Apache基金会。

gRPC:Google开源,具有平台无关性,基于http/2协议,支持服务追踪、负载均衡、健康检查等功能;RPC 框架是基于 HTTP 协议实现的,底层使用到了 Netty 框架的支持。

Thrift:可伸缩的跨语言服务的RPC软件框架,最早由Facebook开发,2007年捐献给了Apache基金会管理,现在是Apache的顶级项目;

Finagle:Twitter基于Netty开发的支持容错的、协议无关的RPC框架,支撑了Twitter的核心服务。
 

 


2、2 Web Service

1、概念:WebService是一种跨编程语言和跨操作系统平台的远程调用技术。


2、基础:Web Service提供的服务是基于web容器的,底层使用http协议,类似一个远程的服务提供者。比如天气预报服务,对各地客户端提供天气预报,是一种请求应答的机制,是跨系统跨平台的。就是通过一个servlet,提供服务给其他应用请求。

3、传输:WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。XML是WebService平台中表示数据的格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。但是XML虽然解决了数据表达问题,却留下了数据格式类型问题,XSD(XML Schema)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。

4、WebSevices三种基本元素:

  • SOAP;
  • WSDL;
  • UDDI;

1)SOAP

SOAP 基于XML 和 HTTP ,其通过XML 来实现消息描述,然后再通过 HTTP 实现消息传输。

WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准RPC方法来调用Web Service。

SOAP协议 = HTTP协议 + XML数据格式

  • Soap 是XML Web Service 的通信协议。
  • SOAP 是一种规范,用来定义消息的XML 格式 。包含在一对SOAP 元素中的、结构正确的XML 段就是SOAP 消息。

 

2)WSDL(Web Services Description Language,对外的服务描述语言,就是广告)

好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。

WebService也一样,WebService客户端要调用一个WebService服务,首先要知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。

WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档(生成广告),又能导入WSDL文档(阅读广告),生成调用相应WebService的代理类代码。

WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:

  1. 注册到UDDI服务器,以便被人查找;
  2. 直接告诉给客户端调用者。

 

3)UDDI(介绍)

UDDI 目录条目是介绍所提供的业务和服务的XML 文件。UDDI 目录条目包括三个部分。

“白页”介绍提供服务的公司:名称、地址、联系方式等等;

“黄页”包括基于标准分类法的行业类别;

“绿页”详细介绍了访问服务的接口,以便用户能够编写应用程序以使用 Web 服务。

服务的定义是通过一个称为类型模型(或 tModel)的 UDDI文档来完成的。多数情况下,tModel包含一个WSDL 文件,用于说明访问 XMLWeb Service 的SOAP 接口,但是tModel非常灵活,可以说明几乎所有类型的服务。


2、3 RMI(Remote Method Invocation,RMI,远程方法调用)

Java RMI,一种用于实现远程过程调用(RPC)的Java API.

特点: 能直接传输序列化后的Java对象和分布式垃圾收集。它的实现依赖于Java虚拟机(JVM),因此它仅支持从一个JVM到另一个JVM的调用。甚至,它可以直接看成RPC的java版本。

总结起来,RMI的工作原理大致可以理解为:

1、服务器端提供服务,服务中要暴露可以调用的远程方法,以接口的形式表现。这样在客户端可以通过服务接口来调用远程方法,实现复杂的业务逻辑。在服务器端,首先要对接口中提供的方法实现,以便客户端调用能够完成一定的业务逻辑;

2、接着需要生成Skeleton,在Skeleton中真正地实现了对商业方法的调用,完成了客户请求的调用的过程,将获取到的调用方法的结果通过序列化机制返回给客户端,进行应答。

3、在客户端,通过Stub来接收服务器返回的数据(对象),即在这里进行了反序列化,也就是读取网络传输的字节流,进而进行重构。在Skeleton和Stub中,都对网络通信进行了处理,例如建立套接字,建立网络连接,为实际的业务需要做好准备。 

 


2、4 JMS


JMS是Java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。JMS支持两种消息模型:Point-to-Point(P2P)和Publish/Subscribe(Pub/Sub),即点对点和发布订阅模型。

Java中进程间通信(IPC)的7种主要方式及原理剖析 在Java开发中,进程间通信(Inter-Process Communication, IPC)是实现不同Java虚拟机(JVM)或本地进程间数据交换的关键技术。本文将介绍7种常见的IPC方式,结合时序图和代码示例,深入剖析其原理与适用场景。 阅读详情

相关推荐

Android进程间通信的四种方式实践指南

Android作为一款以Linux为基础的开源操作系统,拥有丰富的进程间通信(IPC)机制,使得不同的组件之间能够有效地交换数据和协同工作。在这一章中,我们将探讨Android IPC的多种实现方式,以及它们在应用开发中的实际运用。Intent在Android中是一种用于进程间通信的机制,它允许一个组件请求另一个组件(通常是Activity)执行操作。它作为一种消息传递机制,可以传递数据、调用特定的操作以及启动相应的服务。一个Intent可以分为两种类型:显示Intent和隐式Intent。

weixin_42511832的博客 1399

Java进程间的通信技术有哪些?

在Java中,进程间通信(Inter-Process Communication,简称 IPC)是不同进程之间交换数据和信息的技术。3.Socket:基于网络套接字的通信方式,可以实现在不同主机之间的进程通信。1.管道(Pipes):管道是一种半双工的通信方式,可以在两个进程之间传递数据。注意:在代码演示中,我使用了简单的字符串传递作为示例,实际应用中可以根据需求传递更复杂的数据结构。以上只是进程间通信的几种常见方式,还有其他更复杂的方式如远程过程调用(RPC)和共享内存等。

zy1992As的博客 1806

java 进程通信 实例(直接运行)

本人写了一个java进程通信的工具jar,方便大家简单的使用java进程通信。 开启守护进程,获取消息: package com.test; import org.msun.process.ProcessMonitor; import org.msun.process.ProcessMonitor.NewMsgListener; /** * 开启守护进程 */ public class StartService { public static void main(String[] args) { // 开启守护进程 ProcessMonitor.getProcessMonitorTypeSWING().lockMe(); ProcessMonitor.getProcessMonitorTypeSWING().addNewMsgListener(new NewMsgListener(){ @Override public void handler(String data) { System.out.println("收到消息:" + data); } }); // 另一端程序,通过ProcessMonitor.getProcessMonitorTypeWEB() 即可开启守护进程 } } 发送消息测试: package com.test; import org.msun.process.SendMsgUtil; /** * 发送消息 */ public class SendMsg { public static void main(String[] args) { SendMsgUtil.sendMsgToWeb("111"); } }

Java-进程 / 线程间通讯方式

本文主要介绍了Java中进程 / 线程间通讯方式共享内存、管道、消息队列、信号量、Socket以及示例,欢迎各位大佬给出指导意见。

向诸位大佬虚心学习 1889

从XSA到Linux应用:Petalinux与Vitis的嵌入式开发全流程解析

本文详细解析了从XSA文件到Linux应用的嵌入式开发全流程,重点介绍了Petalinux与Vitis工具链的使用技巧和实战经验。通过XSA硬件描述、Petalinux工程搭建、系统镜像优化及Vitis开发配置等关键步骤,帮助开发者高效完成ZYNQ平台开发,解决常见问题并提升开发效率。

weixin_29195217的博客 192

ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)解决办法

问题:ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO) 很久没用这台电脑的mysql了,今天需要连接数据库,启动数据库报错: ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO) 解决方法: 查阅资料后知道了,应该使用已知的用户名和密码登陆 mysql -u root -p 然而密

一个超会写Bug的程序猿的博客 43万+

java进程间通信的几种方式? 对比总结

管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。 消息队列( message queu

soulofball的博客 793

人大金仓V8R3企业版License更新全攻略:从查看到重启一步到位

本文详细解析了人大金仓V8R3企业版License更新的完整运维流程,涵盖从诊断当前授权状态、获取与验证新文件、精准定位旧文件路径,到安全替换文件及服务重启验证的全过程。重点针对更新流程中常见的版本匹配、文件定位、权限与服务重启等关键环节提供了实战解决方案和避坑指南,帮助运维人员高效、平稳地完成授权续期。

redis7keeper的博客 899

JAVA内存模型和多线程

先了解一下java内存模型 IBM:http://www.ibm.com/developerworks/cn/java/j-jtp03304/ http://www.ibm.com/developerworks/cn/java/j-jtp02244/ 百度文库: http://wenku.baidu.com/view/bc890df5f61fb7360b4c654b.html ...

moneyisfrist的专栏 132

cadence数模混合仿真反标sdf

数模混合IC设计时经常要调用一些Verilog模块(最简单的例如SPI接口),在前仿时一般直接用rtl代码来仿真,但是后仿时要关注因寄生带来的延迟,避免这些额外的延迟导致时序错误,因此不能简单地采用RTL来仿真。 一般有两种办法:1是采用由RTL综合得到的门级电路来仿真,这种方法比较简单,但是缺点是规模较大,而且只包括门延迟不包括因版图导致的线延迟;如果想要仿真更精细,就要对该这部分门电路提取寄生参数; 另一种方式是利用sdf文件(standard delay format)来进行仿真。后端工具在布局布

长河柱天的博客 7274

ROCm rocr-libhsakmt分析系列1-2:多GPU跨卡VRAM访问机制分析

本文基于ROCr-Runtime的libhsakmt库源码,深入分析了多GPU系统中跨设备内存访问的实现机制。主要内容包括: 实现流程概述:通过P2P拓扑发现、统一虚拟地址空间、页表映射和硬件转发四个步骤,实现零拷贝的跨GPU内存访问。

图形/计算GPU的驱动与虚拟化技术分享园地 2508

Android进程间通信的几种方式

定义多进程 Android应用中使用多进程只有一个办法(用NDK的fork来做除外),就是在AndroidManifest.xml中声明组件时,用android:process属性来指定。 不知定process属性,则默认运行在主进程中,主进程名字为包名。 android:process = package:remote,将运行在package:remote进程中,属于全局进程,其他具有相同...

augfun的博客 1万+

mediasoup源码分析(二十)服务端架构设计

目录 简介 信令服务(房间服务) 调度服务 媒体服务 简介 流媒体服务器大的方向上可以分为上述三个模块。目前行业内都是分布式服务,独立部署。mediasoup信令与媒体之间虽然可以管道通信。但在行业内,服务之间通过管道通信用的少。 一般是rpc、mq,或者传统的tcp。这块licode架构比较不错,licode是信令和媒体服务通过MQ消息队列解耦。 下面介绍一下这三个服务主要功能,当然文中所说也是一家之言。 信令服务(房间服务) 信令服务也称为房间服务。有的企业把信令和房间分开,信..

lcalqf的专栏 1545

面试题:进程间通信方式,线程间通信方式

一、进程间通信(IPC,Inter-Process Communication)是指在不同进程间传播或交换信息 1. 无名管道 特点 半双工(数据流向仅有一个方向),具有固定的读端和写端 只能用于父进程或兄弟线程之间通信(具有血缘关系的线程之间) 一种特殊文件,可以用普通的read、write函数进行读写,但又不是普通文件,不属于任何其它文件系统,仅存在于内存之中 通信的数据是无格式的流并且大小受限 2. 命名管道(先进先出队列) 特点 不同于无名管道之处在于它提供一个与之关联的路径名,以F

燕然一勒的博客 5538

Android系统开发工程师面试指南与参考答案

本文整理了Android系统开发工程师面试常见问题与参考答案。核心内容涵盖:1)Framework层定制方法,如修改HAL和系统服务;2)ANR问题分析工具(systrace)与解决方案;3)性能优化实践,包括开机加速和功耗管理;4)四大组件工作机制与应用案例;5)Native崩溃调试技巧。文章强调通过AOSP源码研究、工具使用和项目案例准备来提升面试表现,重点考察应聘者的系统开发深度和实操能力。参考答案均基于实际开发经验,提供可量化的优化成果说明。

郑伟强dev的专栏 257

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

理解几种常见的进程间通信方式

什么是进程间通信广义上讲,进程间通信(Inter-Process Communication, IPC)是指运行在不同进程(不论是否在同一台机器)中的若干线程间的数据交换。从上面的定义可以得出两点: 参与通信的进程即可以运行在同一台机器上,也可以运行在各自的设备环境中(Remote Procedure Call Protocol, RPC)。如果进程是跨机器运行的,则通常是由网络连接在一起。 实现方

pcsxk的专栏 6120

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Android 进程间通信的几种实现方式

一、概述        由于应用程序之间不能共享内存。在不同应用程序之间交互数据(跨进程通讯),在android SDK中提供了4种用于跨进程通讯的方式。这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和Service。其中Activity可以跨进程调用其他应用程序的Activity;Content Provid

zhuangyalei的专栏 3万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

微服务之间的相互调用的几种常见实现方式对比

微服务之间的相互调用的几种常见实现方式对比

水w的博客 8140

Android 多进程、进程间通信(IPC)的几种方式

在一个应用中启动多个进程 例如:将自己封装的CommonWebViewActivity在一个单独的进程中启动 使用android:process <activity android:name=".activity.CommonWebViewActivity" android:process=":webview" android:screenOrientation="portrait" /> 需要特别说

张雨的博客 2956

进程和线程的几种通信方式

进程之间通信的几种方式和线程之间的通信方式,以及Java中创建多线程的几种方式

weixin_40701758的博客 7430

Android IPC的几种方式

IPC全称为Inter-Process Communication,含义为进程间通信,指的是两个进程之间进行数据交换的过程。 方式一:Bundle实现 用于android四大组件直接的进程间通信 应用一的Activity public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.o

万子的博客 5515

java进程间通信方式

http://bbs.youkuaiyun.com/topics/40407223 看到楼主提到进程间通信,又想起了以前使用C编程的时光。 :) 先看看传统的进程间通信的手段有什么,上面的各位都说了不少了,无外乎还是以下的这些手段: (1) 管道(PIPE) (2) 命名管道(FIFO) (3) 信号灯(Semphore) (4) 消息队列(MessageQueue) (5) 共享内存(

Torreson 3618

Linux 使用的进程间通信方式?思维导图 代码示例(java 架构)

Linux 提供了多种进程间通信(Inter-Process Communication, IPC)的方式,这些机制允许不同进程之间交换数据和同步操作。理解这些IPC方法对于开发高效、可靠的多进程应用程序至关重要。

qq_33240556的博客 1034

Android 进阶13:几种进程通信方式的对比总结

不花时间打基础,你将会花更多时间解决那些不必要的问题。 读完本文你将了解: RPC 是什么 IDL 是什么 IPC 是什么 Android 几种进程通信方式 如何选择这几种通信方式 ThanksRPC 是什么RPC 即 Remote Procedure Call (远程过程调用) 是一种计算机通讯协议,它为我们定义了计算机 C 中的程序如何调用另外一台计算机 S 的程序,让程序员不需要操心底层网络协

张拭心的博客 shixinzhang 4万+

进程间通信(IPC)的各种方式与比较

在Unix/Linux系统中通过msgget()、msgsnd()、msgrcv()等函数实现,Windows系统也有类似的消息队列机制。在Unix/Linux系统中通过shmget()、shmat()、shmdt()等函数实现,Windows系统也提供了类似的机制。进程间通信是操作系统和分布式系统中的重要概念,不同的IPC方式适用于不同的场景和需求。选择合适的IPC方式可以提高系统的效率和稳定性,从而更好地支持复杂的应用程序和系统架构设计。:信号量用于进程间的同步和互斥,可以控制对共享资源的访问。

微赚淘客系统开发者博客 788
上一篇: 每日算法 - 组合(数学公式 -------- c(n,k))
下一篇: Spring MVC 简介及工作流程
Longtermevolution
博客等级 码龄9年 113粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值