静态代理,和线程继承Runnable的联系

别再到处找了!GWAS数据下载保姆级指南:从IEU、FinnGen到UK Biobank一站搞定 本文提供GWAS数据下载的全面指南,涵盖IEU OpenGWAS、FinnGen、UK Biobank等五大核心数据库的获取策略。从数据库选型到实战操作,详细解析数据搜索、下载、预处理全流程,帮助科研人员高效获取GWAS数据,特别适合初学者快速上手。 阅读详情

静态代理

  • 真实对象和代理对象都是实现一个接口,

  • 代理对象要代理真实对象,也就是真实对象传入代理对象

    • //婚庆公司就是Thread,是静态代理
      MarryCompany marryCompany=new MarryCompany(you);
      

好处:

  • 代理对象做真实对象做不了的
  • 真实对象专注于自己的事

线程继承Runnable,经常说是代理,这就是静态代理,满足两个条件:
1.都实现统一接口Runnable
2.实例化对象传入了Thread new Thread(testThread3).start();

//Runnable接口
public class TestThread3 implements Runnable{

    @Override
    public void run() {
        //run()方法线程体
        for(int i=0;i<20;++i){
            System.out.println("我在看代码----"+i);
        }
    }

    public static void main(String[] args) {
        //实现Runnable接口的实例化对象
        TestThread3 testThread3 = new TestThread3();
        //代理Thread,传入对象
        new Thread(testThread3).start();
        for(int i=0;i<20;++i){
            System.out.println("我在学习Thread----"+i);
        }
    }
}

看一下结婚的例子,你结婚,婚庆公司给你办场地,收钱啥的,你就只管结婚就行:
1.共同的实现接口:Marry结婚

public interface Marry {
    void marry();
}

2.真实对象:结婚的你

public class You implements Marry {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void marry() {
        System.out.println(name+"结婚了,贼开心");
    }
}

3.静态代理对象:婚庆公司

public class MarryCompany implements Marry{

    private You target;

    public MarryCompany(You target) {
        this.target = target;
    }

    @Override
    public void marry() {
        before();
        this.target.marry();
        after();

    }
    private void before() {
        System.out.println("结婚前");
    }
    private void after() {
        System.out.println("结婚后");

    }


}

4。实现结婚的测试类

public class StaticProxy {
    public static void main(String[] args) {
        //you就是类似于实现Runnable接口的对象
        You you=new You();
        you.setName("子涵");

        //婚庆公司就是类似于Thread,是静态代理,传入真实对象
        MarryCompany marryCompany=new MarryCompany(you);
        marryCompany.marry();
    }

}
【一看就会】Autoware.universe的“规划”部分源码梳理【0】——Planning综述(持续更新中) 单独开一篇planning综述,作为整个规划系列的开篇。本篇综述会持续更新,希望能帮助大家更好的整体理解规划部分。这个部分会持续更新。 阅读详情

相关推荐

中国IP发展之面面观

谢学军/邱善勤2006-1-25 9:29:28电子经理世界       IP远没有我们当初想象的那么简单   当SoC设计方法学刚刚传到国内的时候,学界为之欢呼雀跃,由于IP/SoC设计技术的使用,可以将发达国家用几年甚至十几年积累起来的设计技术直接为我所用,使中国的集成电路跳过漫长的积累阶段,迅速站到较高的起点上。因此在当时看来,IP/SoC设计技术是我国提升设计水平、发展

klxdmm305的专栏 1188

多线程03--静态代理模式

1.引言 在学习多线程的过程中,有必要学习下静态代理模式,为啥呢?在《多线程01--线程》中,我们提到创建线程的几种方式,其中之一就是实现Runnable接口,这时其实就使用到了我们的静态代理模式。当然现实生活中,也有很多存在代理的场景例如房产中介、海淘代购等等,都扮演着代理者的角色。 2.实现 静态代理的实现一般可分为如下几个环节: 存在或定义一个主题接口Subject(包含一个业务方法:如卖房子); 创建代理类,实现主题接口Subject; 创建真实对象,继承主题接口Subject,实现业

liulianglin的专栏 481

创建可视化机房

(3)窗户位置创建好以后需要对窗户的墙面镂空位置进行修补,具体操作为,选中镂空位置的顶点(这里必须是选择一个平面的顶点,不要跨平面选择),实际操作如下图:选择点以后,鼠标右键,选择【从顶点创建边/面】,或者按F键,随后对其他镂空位置进行相同操作;(2)将【物体模式】修改为【编辑模式】,选中-x对应面的所有顶点,移动顶点位置,其他放小调整按照同理,找到选中对应面的所有顶点,移动位置即可;调整动画事件轴上的线,选中关键帧的时间,调整模型的位置或者旋转角度,具体根据插入关键帧菜单选择的项进行模型的相关调整。

SmileBu丿㦌的博客 2064

7、多线程(静态代理模式(实现Runnable接口来创建线程))

【代码】7、多线程(静态代理模式(实现Runnable接口来创建线程))例子:我们前面学习的实现Runnable接口来创建线程的方式就用了代理模式(主线程内的创建时候)也就是Thread(race,“兔子”).start。 这里面Thread(里面实现了Runnable接口)和这个race都实现了这个Runnable这个接口。所以Thread就是这个代理,里面的这个race就是目标对象(他在专注于他的重写run方法里面,他是无法.start开启线程的)所以就用Thread这个代理去.start()开启

分享JAVA/ Python/ Ts学习路上的一些笔记,不足之处多多见谅。 491

车辆动力学仿真模型的可信度评估方法

以转向工况测试为例,实车采集的方向盘转角作为车辆动力学模型的输入,记录车辆动力学模型的横摆角速度的输出结果,计算横摆角速度的幅频特性,根据《GB/T 6323-2014 转向盘角脉冲试验》的方法,获取横摆角速度峰值、横摆角速度谐振峰频率、横摆角速度谐振峰水平,与采集的实车结果对比,并计算车辆动力学模型和实车对于关键对比参数的相对误差。由公式(2)计算可得,在制动工况和转向工况测试下,车辆动力学模型和实车的纵向车速、制动减速度、制动距离、横摆角速度基本一致,精度> 85%,具有较好的精度。

wangchen900705的博客 1958

【训练】Qwen2.5VL 多机多卡 Grounding Box定位

之前的相关文章:【深度学习】LLaMA-Factory微调sft Qwen2-VL进行印章识别使用LLaMA-Factory微调sft Qwen2-VL-7B-Instruct构建最新的LLaMA-Factory镜像。

q742971636的博客 2583

【Java】创建线程的方式:继承Thread和实现Runnable接口(多线程安全问题)

继承Thread和实现Ruunable接口的区别(举例说明) 1.首先继承Thread是父类与子类的关系,实现Ruunable接口是实现类和接口的关系。 2.继承只能单继承,而接口可以多实现。(先继承后实现。)

m0_64210833的博客 5450

树莓派5使用CSI摄像头 | 树莓派5接上CSI摄像头后命令行操作显示检测无设备

此系列用于记录树莓派5的一些操作,这篇文章讲述树莓派5如何使用CSI摄像头。

beyourself_he的博客 8795

Java 高级应用-多线程-(一)实现 Runnable 接口与继承 Thread 类

Java 高级应用-多线程-实现 Runnable 接口与继承 Thread 类

weixin_45817985的博客 3450

Adams Car——Adams car与Simulink联合仿真

Adams与simulink悬架联合仿真

Mr.邹的博客 2124

2. 第一个 SAP CDS View 源代码的详细解析:CDS View 和底层自动生成 SQL View 的关系讲解

笔者前一篇教程文章,带着大家在 ABAP 系统创建了一个最简单的基于sflight数据库表的 CDS View:本文对这简单的 14 行源代码背后的知识点进行详细讲解。CDS 全称是 Core Data Services,它是一种数据建模技术,帮助开发者以更直观和高层的方式去描述数据库中所需的数据结构。在一个典型的 SAP ABAP 开发场景里,CDS 经常被用来编写各种用于报表、接口或业务逻辑的数据视图。通常,这些视图包含一系列注解。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1021

线程安全 继承runnable接口

https://www.cnblogs.com/lijingran/p/8722301.html 1.线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据 ArrayList和Vect...

fangyan_1229的博客 408

[VCS]VCS dump fsdb的精细化控制

本文介绍了VCS FSDB波形dump的精细化控制方法。主要内容包括:1)基本dump方式;2)通过$fsdbDumpoff排除特定层次;3)使用$fsdbDumpvars选择性dump指定模块;4)运行时动态控制dump开关;5)通过文件管理排除列表($fsdbDumpoffFile或自定义读取);6)层次控制策略(剪除整棵树或仅当前层)。这些方法可有效控制波形文件大小,提高仿真效率。

元直的博客 1033

多线程(代码笔记)、创建线程、继承Thread类、实现Runnable接口、实现Callable接口、静态代理模式、线程的状态 、Lamda表达式、线程同步

多线程代码笔记1、创建线程1.1继承Thread类1.2实现Runnable接口1.3初识并发问题1.4龟兔赛跑1.5实现Callable接口2、静态代理模式3、Lamda表达式3.1为什么使用Lamda表达式3.2函数式接口4、线程的状态4.1线程停止4.2线程休眠4.3线程礼让4.4线程强制执行4.5观测线程状态4.6线程的优先级4.7守护线程daemon5、线程同步5.1三大不安全案例5.2 synchronized5.3 CopyOnWriteArrayList5.4死锁5.5 Lock锁6、线程协

qq_40835432的博客 926

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【多线程1】程序->进程->线程 线程创建 继承Thread类 实现Runnable接口 实现Callable接口 静态代理 Lambda表达式

【代码】【多线程1】程序->进程->线程 线程创建 继承Thread类 实现Runnable接口 实现Callable接口 静态代理 Lambda表达式。

2301_82009801的博客 616

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

线程创建:继承Thread、接口Runnable(静态代理模式)、接口CallableJAVA169-173

一、S02E169_01线程_概念二、S02E170_01线程创建之一_继承Thread三、S02E171_01静态代理模式四、S02E172_01线程创建之二_接口Runnable五、S02E173_01线程创建之三_接口Callable

好好学习天天向上 1172

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java线程与静态代理(代码记事本打,不要复制)

1.继承Thread-实现Ruanable class TextThread extends Thread{ public void run(){ for( int i=1; i<10; i++){ System.out,println(Thread.currentThread.getName()+"步骤"+i); } } } class...

yjp_dgut的博客 129

JAVA篇_静态代理

静态代理在生活中的例子类似于婚庆公司,好比你要结婚,请婚庆公司举办婚礼,但是结婚的人还是你,进行结婚这个动作的人还是你。在JAVA中,可以这样解释,举个例子,一个接口有结婚这个方法 void marry();然后一个类person实现这个接口并重写marry方法,还有一个personProxy(),也实现这个接口,但在重写方法的时候调用的是person重写的marry方法,当你想要调用person.marry的时候,只需要调用personProxy的marry方法即可。这时我们说person为被代理类...

qq_45878219的博客 171

java入门基础学习----创建线程

一.概念----线程和进程的区别 二.  创建线程的三种方式 1.继承Thread +run()         启动: 创建子类对象+对象.start() 2.实现Runnable + run()         启动: 使用静态代理            a.创建真实角色;   b.创建代理角色Thread+引用;   c.代理角色.start() 3.  * 推荐Ru...

Miracle_Gaaral的博客 200

多线程中的静态代理模式

多线程中的静态代理模式 实现多线程的三种方式 继承Thread类 【Thread类实现了Runnable接口】 实现Runnable接口 实现Callable接口 静态代理模式例子 静态模式三部分组成: 1.共同实现的接口 2.被代理目标 3.代理 例 :你结婚,需要找一个婚庆公司,帮你布置婚礼现场等。这个时候,你 就是被代理对象,婚庆公司就是代理,而结婚就是那个被共同实现的接口。 /** * @deprecated 静态代理 * * 1.真实角色 (被代理目标) 本文中的 class Y

weixin_45416687的博客 729

线程java和代理模式实现代理线程类

代理模式就是 找一个代理人帮自己去处理一些事情,对于java线程来说,就是定义一个代理类去实现目标类想实现的功能。3}代理类定义start方法调用目标类run方法,同时可以自定义增强方法。2、在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢。1、将代理对象与真实被调用的目标对象分离。1、代理模式会造成系统设计中类的数量增加。2)代理类构造方法,传入目标类对象。1)代理类和目标类实现同一个接口。3、可以起到保护目标对象的作用。4、可以对目标对象的功能增强。说一下代理模式优点和缺点。

yu_shengfan的博客 260

进程与线程

Thread 自定义线程类继承Thread类 重写run()方法,编写线程执行体 创建线程对象,调用start()方法启动线程 public class StartThread1 extends Thread{ //线程的入口点 @Override public void run(){ //线程体 for(int i=0;i<20;i++){ System.out.println("我在听课");} } //创建线程对象 StartThread1 t = new StartThread1

liuyutongz的博客 110

java中如何实现画线段_java中如何实现多线程

1 通过继承Thread类实现多线程1、继承Thread类实现多线程的步骤:1. 在Java中负责实现线程功能的类是java.lang.Thread类。2. 可以通过创建Thread的实例来创建新的线程。3. 每个线程都是通过某个特定的Thread对象所对应的方法run( )来完成其操作的,方法run( )称为线程体。4. 通过调用Thread类的start()方法来启动一个线程。2、通过继承Th...

weixin_39785814的博客 199

设计模式------Java多线程之静态代理模式

首先来介绍下Java中实现多线程的两种方式    继承Thread类方式和通过Runnable接口的方式    继承Thread类方式的缺点:如果我们的类已经继承了其他类,那就无法再继承Thread类了    实现Runnable接口的方式优点:避免了单继承,方便共享资源,同一份资源可以有多个代理访问 那么下面就来说说静态代理模式     代理就比如是找房子可以找中介,结婚可以找婚庆公司

Ruby 1572

多线程-静态代理的方式 - 实现Runnable接口

在看这个小列子之前   建议大家 最好 先理解一下 静态代理的概念. http://blog.youkuaiyun.com/makemeasmile/article/details/55667574 其实我们的多线程 以实现 Runnable 接口的形式 这种方式  就是采用了我们的 静态代理模式 启用多线程步奏: 1)、真实角色  -  这个角色 就是你要去做的事情 2)、代理角色

makemeasmile的博客 623

多线程学习(二)线程的几种实现

java 中线程实现的几种方式: 1继承Thread类,重写run()方法。 2实现Runable 接口,实现接口中的run()方法(run方法没有返回值) 注:因为java单继承机制,因此在实现线程时建议使用实现Runable接口的方法 3实现Callable接口,实现call()方法(call方法有返回值) ...

chenyx1012的博客 99
上一篇: 多线程实现买票系统,带线程不安全分析
下一篇: Lambda表达式的简介和演变
code_mzh
博客等级 码龄7年 17粉丝 127原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值