Java并发随笔

S32K144 ADC硬件触发+DMA传输实战:从寄存器配置到数据采集全流程 本文详细解析了S32K144微控制器中ADC硬件触发与DMA传输的协同工作机制,提供了从寄存器配置到数据采集的全流程实战指南。通过PDB定时触发ADC转换,并利用DMA实现数据自动搬运,构建了高效、实时的汽车级数据采集系统,有效释放CPU资源,满足汽车电子应用的严苛要求。 阅读详情

1 什么时候需要考虑并发问题

      多线程环境下(好多人第一反应是访问量大,是因为访问量大的程序多线程居多,但是两者并不等价)

2 多线程可能产生的问题有哪些

    1.安全性(共同访问数据)

    2.活跃性(例如死锁)

    3.性能(多线程同步时会影响性能,线程的切换也会)

3 线程安全包括哪些方面

    1.对象的正确创建(不要在构造器中使this逸出)

    2.对象的安全发布

        1.不可变对象可以通过任意机制发布

        2.事实不可变对象必须通过安全的方式来发布

        3.可变对象必须通过安全的方式来发布,并且必须是线程安全的或者由某个锁保护起来

        注:不可变对象和实施部可变对象安全发布之后可以随意访问,可变对象的访问也需要是安全的,要么他本身负责在并发下的安全访问,即作为一个线程安全的对象被访问,或者由调用者来负责,此时需要文档说明该对象的访问方式。

4 如何解决并发问题

    1.不在线程间共享(线程封闭和ThreadLocal可以实现)

    2.将状态变量修改为不可变的变量(无状态对象一定时线程安全的)

    3.访问时使用同步

5 安全发布一个正确构造的对象的方法

   1.在静态初始化函数中初始化一个对象引用

   2.将对象的引用保存到volatile类型的域或者AtomicReferance对象中

   3.将对象引用保存到某个正确构造对象的final类型域中

   4.将对象引用保存到一个锁保护的域中(如:将对象放入一个线程安全的容器)

安全的发布与安全的访问要区别开来,安全发布保证的是你发布的对象的可见性,如线程A发布一个对象,如果不是安全的发布可能会导致访问该对象的线程B看到尚未创建完成的对象,我是将安全的发布理解为一个原子操作,并保证其可见性即可。但是安全发布的对象访问时是否需要同步取决于该对象是否可变。

今天先写这么多,这是随笔,以后再整理。

如有错误,恳请指正,谢谢

YOLOv11改进策略【SPPF】| AIFI : 基于Transformer的尺度内特征交互,在降低计算成本的同时提高模型的性能 本文记录的是基于AIFI模块的YOLOv11目标检测改进方法研究。AIFI是RT-DETR中高效混合编码器的一部分,利用其改进YOLOv11模型, 阅读详情

相关推荐

SAP系统中PP模块全配置文档

配置路径IMG>SAP NetWeaver>常规设置>维护日历>工厂日历事务代码SCAL要求传输工厂代码描述日历代码日历描述起始日期星期一星期二星期三星期四星期五星期六星期日有效开始日期有效结束日期1000南微医学工厂MT南微医学工厂日历√√√√√√√201820502.4定义工厂配置路径IMG>生产>物料清单>常规数据>定义BOM状态事务代码OS23要求传输配置路径IMG>生产>主数据>资源>常规数据>标准值>定义参数。

yanzibing99的博客 1892

并发(什么时候应该考虑并发问题)

没错,这周项目又出现的问题。 这次的问题是当外联的处理系统反盘给我们两条信息时候,只更新了第一条,没有更新第二条。或者说可能是第二条也更新了第一条。 因为两次反盘的请求相隔时间是毫秒级的。再次想到了并发的问题,但是当看代码后发现,两次请求并不会有并发的问题。但是不能说每次都把问题归结于并发,然后解决方案就是锁表操作。 第一次问题可以用锁表来预防并发的前提是,系统的交易量不大,每周可能才会有几...

博客 4571

利用 vivado实现加减法器的设计

本科计组实验:利用 vivado实现加减法器的设计

qq_52052302的博客 1万+

什么时间、什么场景需要考虑并发问题?

很多人学会了锁的使用,却不清楚什么时候该用锁、什么时候不该用,这就像拿着把刀,却不知道该什么时候挥。共享资源 = 多个线程可以访问,并且可能同时读/写的数据结构或状态:锁会带来以下代价:

欢迎来到我的技术分享博客!这里将带你深入了解AI技术、Java架构设计、系统开发与优化等前沿技术内容。我专注于从实战经验 521

4×V100部署Qwen3.8-Flash-Next:vLLM/GGUF实战

大模型本地部署的核心,是把参数量、量化精度、显存容量和推理框架放在同一张账本里算清楚。MoE 模型总参数量大但激活参数少,解码阶段更受显存带宽与 KV Cache 限制;通过 INT4/AWQ 或 GGUF 等 4-bit 量化可显著压缩权重占用,再结合 vLLM 张量并行、llama.cpp 分层切分提升多卡利用率。其技术价值在于让 V100 这类老架构 GPU 也能承载百亿级参数模型的私有化推理,并服务于 RAG 知识库、工作流 API、批量生成等场景。这次围绕 4×V100 32G 部署 Qwen3.

weixin_29061425的博客 347

【LaTeX PPT模板集】Beamer主题与配色使用教程

【LaTeX PPT模板集】Beamer主题与配色使用教程

Xminyang的博客 1万+

并发使用的时机

多处理器系统已经存在了几十年,但直到最近,它们也只在超级计算机、大型机和大型服务器系统中才能看到。然而,芯片制造商越来越倾向于多核芯片的设计,即在单个芯片上集成2、4、16或更多的处理器,从而获取更好的性能。因此,多核台式计算机、多核嵌入式设备,现在越来越普遍。它们计算能力的提高不是源自使单一任务运行的更快,而是并行运行多个任务。 在过去,程序员曾坐看他们的程序随着处理器的更新换代而变得更快,无需他

qq_31098037的博客 430

WINDOWS下SIP拨号的实现

在WIN10上拨打SIP电话  由于我的交换原理实验有一个是关于SIP的抓包的。而之前从未接触过SIP,所以在如何完成一次SIP拨号上遇到了不少问题,查了好多资料都没有完整的或者写的很清楚的,这里就对那些资料做一个总结,给出一个比较完善的解决方案,一来是记录此次实验的收获,而来也可能为其他有同样困惑的人解惑。  废话不多说直接开始。首先是下载一个可以拨打SIP电话的客户终端,这里我选择的是MicroSIP, 下载红圈内的文件,下载好之后直接一路安装即可,没有什么特别注意的地方。  安装好客户端之后,就需要注

weixin_43918519的博客 3807

开发服务端程序,在存在并发请求场景下,需要考虑一些常规事项简单梳理和总结

并发考虑如下: 1.多线程,限速(停顿),有界堵塞队列+超队列直接调用线程run方法(ThreadPoolExecutor.CallerRunsPolicy),网卡尖刺, 2.注意并发的要点:小数据包(防止网卡打满)+ 占用内存小的小对象,生命周期短的小周期对象(JVM快速释放) + 并发(提升效率) + 多机器;

KuaiLeShiFu的博客 667

使用FloodRisk2插件进行洪水风险评估

入汛以来,长江流域持续的强降雨使得沿岸多地成为洪水风险极高地区,抗洪、抢险、救灾继新冠病毒之后成为又一个攻坚阵地。如何科学地评估洪水风险,是快速决策的关键。 实际生活中,根据风险是否可控,一般将洪水风险大致分为两类:一类是通过数据分析可以得出其发生的可能性和后果,如强降雨引发的区域性洪水、水库/大坝溃决洪水等。这类洪水可以通过有关资料分析和设定一定条件计算得到可能的损失后果,也就是说,风险可以预判。另一类洪水风险基本是未知的,如滑坡堵塞河道形成堰塞湖引发的洪水,无法预知事件发生的地点和规模,具体的洪水风险无

QGISClass的博客 2877

OpenClaw实战系列06:持久记忆与RAG知识库构建——让AI真正“记住”你

本文介绍了OpenClaw AI助理的持久记忆与RAG知识库构建功能。OpenClaw采用"文件即真理"的独特设计,所有记忆都以Markdown文件形式存储,支持直接编辑和Git版本管理。记忆系统分为三层:长期精炼记忆(MEMORY.md)、日常日志(按日期存储)和归档记忆。文章详细说明了环境配置步骤,包括安装必要组件、创建目录结构、设置API密钥,并提供了OpenClaw主配置文件的完整参数说明。该系统实现了跨会话、跨平台的持久化记忆,使AI助理能真正理解用户需求。

PeterPan的博客 1171

Java并发编程一些问题随笔

而后者呢,他的使用情况主要是线程之间的协作,会让当前线程释放锁并等其他调用同一个对象的线程调用notify()或者notifyAll()方法,如果没上锁情况下调用wait方法,会抛出IllegalMonitorStateException异常。一个进程执行过程中可以产生多个线程,这些线程共享进程的堆空间和方法区(JDK1.7及以前),同时,每个线程都有自己的本地方法栈,虚拟机栈和程序计数器。支持,尽管单核一次只能执行一个任务,但是通过时间片轮转,在多个线程之间切换,能让用户感觉多个任务是同时进行的。

S_qy669的博客 540

把 LDB 讲透:SAP ABAP 逻辑数据库的结构、事件模型、动态选择与现代替代方案

摘要:SAP中的Logical Database(LDB)是一种将表组织成树形结构并统一生成选择屏幕的技术,通过事件驱动方式向报表程序传递数据。虽然被标记为过时,但在理解标准代码和优化性能方面仍有价值。LDB通过SE36事务码创建,其结构包含层级关系、选择屏幕和数据库程序。报表通过NODES声明和GET事件处理数据,支持动态选择以减少数据库访问。在S/4HANA和ABAP Cloud环境下,建议使用CDS View和ABAP SQL等现代方案替代LDB,以提升可测试性和架构清晰度。

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

Java 并发 随笔 1-初尝并发

0. 感觉最近有点犯难了… 《Thinking in java 4th》第21章 并发 并发看起来充满了危险,如果你对它有些畏惧,这可能是件好事… 1. 并发的多面性 作者在“性能优化”和“设计可管理性”的角度上的讨论让人印象深刻(Atom类、显式锁…) cpu 更好的利用多核处理器,同样也提升了单核处理器的程序性能 单核处理器上运行并发程序,会带来额外的上下文切换的代价 考虑阻塞的存在,单核处理器此时可以“腾出手来”,去做其他的事情,保证了程序一定的可响应性 并发显著提升单核处理器的程序性能的案例,即

hyoka的博客 550

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java并发编程随笔

死锁:两个线程互相等待对方释放锁才可以继续运行。 避免死锁的常见方法:   1.避免一个线程同时获取多个锁   2.避免一个线程在锁内同时占用多个资源,尽量保证一个锁只占用一个资源   3.尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制   4.对于数据库,加锁个解锁必须在一个数据库连接里,否则会出现解锁失败的情况 volatile变量: ...

an1846450053的博客 189

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【随笔】Java 高并发

高并发 高并发你理解透了吗

天天新知 243

深度学习工具包 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中并发机制原理随笔

Java原生锁四种状态变化:无锁、偏向锁、轻量级锁、重量级锁。 volatile关键字处理器会执行两步操作:将该修改的缓存数据写回到内存中、标记其他处理器缓存了该数据为无效状态。 对于经常写的共享变量一般补齐到一个缓存行的大小(Intel一般为64字节)。 处理器实现原子操作的方法:缓存锁定(常用)与总线锁定。 ...

qq_38954792的博客 210

Java 并发 随笔 5-AQS

0. 挖个坑 大佬_1 大佬_2 大佬_3

hyoka的博客 294

随笔分类 - Java并发编程

http://www.cnblogs.com/dolphin0520/category/602384.html 随笔分类 - Java并发编程 Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition 摘要: Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condi

liangxw1的专栏 449

Java 并发 随笔 3-事务

0. 之前面试的时候总结的了 1.并行事务的四大特性(ACID) 原子性Atomicity 事务是一个不可分割的单位,事务中的操作要么都成功,要么都失败 一致性Consistency 事务执行前和执行后都必须处于一致的状态 这里的"一致":在业务逻辑上是和实际期望的结果相符合的 隔离性Isolation 事务与事务之间是相互隔离的 不同的隔离级别描述了不同的事务隔离程度 事务的提交对数据的改变是永久的 持久性Durability 事物的 原子性、隔离性、持久性都是为了 “一致性” 1.1 补充 多个事务并行

hyoka的博客 861

Java随笔6-并发-AtomicXxxxFieldUpdater

一个对象的属性 x 只是用基本数据类型或者引用类型声明,通过getter、setter等方式修改变量的值,在并发情况下无法保证原子化。一种常规的解决思路是将该属性修改成AtomicXxxx等原子类型,例如: public class Product { public int stock = 0; public int getStock() { return stock; } public void setStock(int stock) {

yeleits的博客 292

Java 并发 随笔 4-unsafe

0. 不知道咋说了…新年快乐吧 大佬的unsafe笔记(但是大佬的错别字有多…) 1. 总结 unsafe可以帮我们直接去操作硬件资源,当然了是借助java的jit来进行的 官方不推荐使用,因为不安全,例如你使用unsafe创建一个超级大的数组,但是这个数组jvm是不管理的,只能你自己操作,容易oom,也不利于资源的回收. 随便只要你高兴,都可以获取到unsafe实例,因为涉及到unsafe的权限问题,所以,我们只能使用反射方式获取,不然就是权限异常 unsafe对对象的修改,是可以越过权限,直接操作内存数

hyoka的博客 159

java并发编程中的随笔

1、使用ConcurrenthHashMap比用synchronzied同步了的HashMap效率要高得多 2、同步的jizhi

huangzebiao007的专栏 628

《java并发编程实战》随笔——第一章

最近工作中需要用到并发以提高模块性能,之前对这一块的认识太浅薄并且缺少相关实践,以至于跟大神们讨论方案时经常被问住,遂决定利用空闲时间好好看看并发,多线程,高性能服务器这方面的知识,跟同事交流了下,这块的经典书籍还是不少的,《java并发编程实战》据说是公认的经典,就从它开始吧~     btw,关于如果选择书籍,我又想起了那句话:重要的不是选择一个最好的开始,重要的是马上立刻现在就开始

jiage123的博客 491

随笔 Java并发的volatile关键字

简单总结volatile关键字

m0_57492987的博客 114

java并发编程实战 java并发编程的艺术 阅读随笔

java线程池说明http://www.oschina.net/question/565065_86540 java中断机制http://ifeve.com/java-interrupt-mechanism/ Ask、现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行? join方法 如果一个线程A执行了thread.join()语句,其含义...

weixin_30678349的博客 416
上一篇: java并发编程实战this引用逸出
下一篇: 记一个file.remaneTo()异常
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值