J2EE中的设计模式之四

J2EE设计模式实战全集:Java设计模式学习资料 本文还有配套的精品资源,点击获取 简介:Java设计模式在J2EE企业级应用开发中占据核心地位,有助于提升代码的可读性、可维护性,增强系统灵活性和扩展性。本资料集合覆盖了J2EE环境下的设计模式应用,详述了单例、工厂、抽象工厂、策略、观察者、装饰器、适配器、代理、模版方法、建造者等模式,并解释了它们在J2EE中的具体应用和优势。学习这些模式有助于开发者掌握设计原则和最佳实践... 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> b. 建议的解决方法   解决这个问题的方法是,把客户端和他们使用的EJB分割开。建议适用Session Fa?ade模式。这个模式通过一个Session Bean,为一系列的EJB提供统一的接口来实现流程。事实上,当客户端只是使用这个接口来触发流程。这样,所有关于EJB实现流程所需要的改变,都和客户端无关。   看下面这个例子。这段代码用来控制与客户相关的订单的处理方法。 // All imports required // Exception handling not shown in the sample code public class OrderSessionFacade implements SessionBean { // all EJB specific methods like ejbCreate defined here // Here is the business method that does the workflow // required when a customer places a new order public int placeOrder(String customerId, Details orderDetails) throws RemoteException { // Get reference to the required EJBs InitialContext ctxt = new InitialContext(); Object obj = ctxt.lookup("java:comp/env/ejb/UserAccount"); UserAccountHome acctHome = (UserAccountHome) PortableRemoteObject.narrow(obj, UserAccountHome.class); UserAccount acct = acctHome.create(); obj = ctxt.lookup("java:comp/env/ejb/CreditCheck"); CreditCheckHome creditCheckHome = (CreditCheckHome) PortableRemoteObject.narrow(obj, CreditCheckHome.class); CreditCheck credit = creditCheckHome.create(); obj = ctxt.lookup("java:comp/env/ejb/Approvals"); ApprovalsHome apprHome = (ApprovalsHome) PortableRemoteObject.narrow(obj, ApprovalsHome.class); Approvals appr = apprHome.create(); obj = ctxt.lookup("java:comp/env/ejb/CommitOrder"); CommitOrderHome orderHome = (CommitOrderHome) PortableRemoteObject.narrow(obj, CommitOrderHome.class); CommitOrder order = orderHome.create(); // Now do the required workflow to place the order int result = acct.checkStatus(customerId); if(result != OK) { // stop further steps } result = credit.checkCreditWorth(customerId, currentOrder); if(result != OK) { // stop further steps } result = appr.getApprovals(customerId, currentOrder); if(result != OK) { // stop further steps } // Everything OK; place the order int orderId = order.placeOrder(customerId, currentOrder); // Do other processing required return(orderId); } // Implement other workflows for other order related functionalities (like // updating an existing order, canceling an existing order etc.) in a // similar way }   在模式允许的情况下,Servlet代码将很容易实现。 // all required imports // exceptions to be caught appropriately wherever applicable public class OrderHandlingServlet extends HttpServlet { // all required declarations, definitions public void init() { // all inits required done here } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // other logic as required // Get reference to the session facade InitialContext ctxt = new InitialContext(); Object obj = ctxt.lookup("java:comp/env/ejb/OrderSessionFacade"); OrderSessionFacadeHome facadeHome = (OrderSessionFacadeHome) PortableRemoteObject.narrow(obj, OrderSessionFacadeHome.class); OrderSessionFacade facade = facadeHome.create(); // trigger the order workflow int orderId = facade.placeOrder(customerId, currentOrder); // do further processing as required } }   就象上面显示的,客户端的逻辑变得非常简单。流程中的任何改变只要修改模式中的一处地方就可以了。客户端可以仍旧使用原来的接口,而不必做任何修改。同样,这个模式可以用来响应其他处理器的流程处理。这让你能用同样的模式来处理不同客户端的不同流程。在这个例子中,模式提供了很好的伸缩性和可维护性。 J2EE中的设计模式之一 J2EE中的设计模式之二 J2EE中的设计模式之三 J2EE中的设计模式之四 J2EE中的设计模式之五
SPD5 集线器协议内容解析 ​ 若不同SPD5 Hub后面的本地侧设备同时发送请求,则是22和23、24的混合过程,先通过LID裁决,再通过HID裁决,这里的LID是本地设备的,若LID一致,则看HID,由于SPD5 Hub的本地侧设备HID均为111,因此实际上是比较SPD5 Hub的HID,这个过程在前文提到,SPD5 Hub会转换HID。​ 若MR27[4]=1且MR27[3:0]=1,如果MR51[3:0]=1时,发送IBI,并且MR48[7]置1,将GETSTATUS CCC的待处理中断位[3:0]更新为0001。 阅读详情

相关推荐

RAG-Anything 实战指南:从零构建企业级多模态知识库

本文是RAG-Anything的实战指南,详细介绍了如何从零构建企业级多模态知识库。通过一体化框架,它能无差别解析文本、表格、图片、公式等多格式文档,并构建可深度理解和智能检索的知识图谱。指南涵盖了环境搭建、核心实战、智能查询及生产级部署优化,帮助企业将杂乱文档转化为智能知识大脑。

pandas7gardener的博客 243

编程-笔记四:J2EE设计模式-小结

J2EE设计模式是一系列用于解决Java EE应用程序开发中常见问题的设计模式。这些模式专注于如何组织应用程序的架构,以提高其可维护性、可扩展性和可复用性。

qq_45831414的博客 1202

关于token无痛刷新的两个方案

目录方案一方案二 方案一 思路: 后端需要返回一个token过期的时间,在请求发起前拦截每个请求,判断token的有效时间是否已经过期,如果已过期,则暂时将请求挂起,先刷新token后再继续请求。 前期思考: 返回过期时间是为了判断是否过期的,但是如果服务器时间和系统时间不一致呢? 如果同时发起多个请求时怎么办? 实现: 因为是在请求前进行拦截,所以这里用axios的axios.interceptors.request.use()方法 首先,关于服务器时间和系统时间不一致的问题,我的解决方法是:

Yugoup的博客 2718

设计模式(四)J2EE模式

J2EE 模式 这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。 包含以下模式: MVC 模式(MVC Pattern) 业务代表模式(Business Delegate Pattern) 组合实体模式(Composite Entity Pattern) 数据访问对象模式(Data Access Object Pattern) 前端控制器模式(Fron...

小白博客,请指教 530

LDA模型参数优化实战:从auto设置到passes调优

本文深入探讨了LDA主题模型的参数优化实战,重点解析了如何通过设置alpha='auto'与eta='auto'让模型自适应语料,并详细阐述了passes参数对训练效果的核心影响。文章提供了系统的调优方法与评估策略,旨在帮助用户从“能用”到“用好”LDA,产出清晰、可解释的主题分析结果。

weixin_29163797的博客 119

4. PCIe 接口时序

在上一篇中,大致介绍IPcore接口。总的来说接口如下图数据的接收和发送通过transmitTLPinterface和ReceiveTLPinterface。收发数据的时序也只是描述这几个接口的关系。从手册上截取PCIex1的接口时序。

jjinl的专栏 6123

J2EE框架(四)核心设计模式

这一章主要讲两种设计模式:建造者设计模式和工厂设计模式,这两种设计模式在持久层框架基本上都是一起出现,建造者用于加载资源为工厂做好准备,工厂专门用来生产具体对象。这里的资源往往是框架开放给用户自定义的信息,比如:数据库配置信息、spring上下文配置信息。建造者模式负责把这些信息加载到内存并封装到一个对象中。 工厂模式利用构建在内存中的对象,来创建具体的某个对象(比如:session)因此1、

cd_cd的专栏 4828

第51节:cesium 范围查询(含源码+视频)

cesium 范围查询

qq_29384639的博客 1498

GoF 设计模式

GoF     定义:GoF(Gang of Four),中文名——四人组。GoF是一种设计模式。 GoF的起源   《Design Patterns: Elements of Reusable Object-Oriented Software》(即后述《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合...

ScNuLH 224

YOLOv8融合HAttention:激活更多像素的注意力机制科研实践指南

HAttention通过层级化像素激活与融合的设计,为YOLOv8的像素级特征利用能力带来了质的飞跃。从原理理解到代码实现,再到集成调优,每一步都是科研中“解决像素信息遗漏难题”的具体实践。如果你在实验中发现某类细节或大尺度目标的检测仍有不足,可以尝试结合数据增强(如随机裁剪、多尺度训练)来强化模型对像素特征的学习能力。科研的价值在于不断挖掘技术的潜力,希望这份指南能真正帮你在目标检测的像素级特征利用领域找到新的突破点,祝你在科研探索中持续收获创新与成长。

FJN110的博客 106

基于simulink的低通滤波器(Low-pass Filter, LPF)

摘要:本文详细介绍了如何在Simulink中搭建低通滤波器进行噪声抑制仿真。通过定义系统需求(50Hz信号+250Hz噪声)、添加信号源、设计6阶巴特沃斯低通滤波器(截止频率100Hz)、连接各模块并配置仿真参数,最终实现高频噪声的有效滤除。该教程包含从模型创建到结果分析的完整流程,为信号处理系统开发提供了基础框架,并可进一步扩展为自适应滤波等高级应用。所需MATLAB版本为R2023a及以上,需安装Simulink和DSPSystemToolbox。

amy_mhd的博客 1303

设计模式

GOF: 在1994年,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四人合著出版一本名为Design Patterns - Elements ofReusable Object - Oriented Software(中文译名:设计模式 -可复用的面向对象软件元素)的书,该书首次提到了软件开发中设计模式的概念。 四...

diancheng4428的博客 98

深度学习工具包 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")

设计模式的介绍

设计模式简介 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理...

weixin_30632899的博客 59

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

学习设计模式_01 GOF, 设计模式和J2EE

1. 学习设计模式不得不提的 “GOF”  GOF:Gang of Four的简称,是设计模式开山之作 Design Patterns: Elements of Reusable Object-OrientedSoftware》的几位作者ErichGamma、Richard Helm、RalphJohnson 和 John Vlissides 的简称。 这几位作者常被称为"四人组",而这本书也就

courage的专栏 931

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JavaEE(J2EE)学习篇

一、简要介绍 Java EE,Java 平台企业版(Java Platform Enterprise Edition),之前称为Java 2 Platform, Enterprise Edition (J2EE),2018年3月更名为 Jakarta EE, 是 Sun 公司为企业级应用推出的标准平台,用来开发B/S架构软件,可以说是一个框架或是一种规范。 Java EE是 J2EE的一个新的名...

nann-viiv 的博客 925

设计模式与J2EE技术

 文章写的不好,请多提意见第一章 设计模式与J2EE技术什么是设计模式简单地说,模式是一个出现在世界上的实物,同时也是一条规则,告诉你应该如何创建一个实物、应该在何时创建。它既是过程,也是实物;既是对当前实物的描述,也是对创建实物的过程的描述。――C.Alexander,《建筑的永恒之道》[i]在软件科学中,模式有很多种,有软件的管理模式,实践证明与传统管理是有区别的,从而是一种新

cx0998的专栏 2130

J2EE设计模式分析与实践——从J2EE设计模式总图理解J2EE技术

 第三章 J2EE设计模式上文我们形成了对框架、模式的简单认知。作为背景知识,这一章中主要了解和理解J2EE设计模式,以期获得J2EE设计模式的全貌。由于在SUN公司的网站上有整个J2EE模式的详细的介绍,重复介绍是没有必要的。但是有张图,根据本文的内在要求,是必须要看的。从中我们会进一步漓清框架、模式、具体的技术(如J2EE技术)、设计一个应用之间的关系。(图3)可以这样来理解这

cx0998的专栏 1628

J2EE中的设计模式

J2EE中的设计模式 什么是Design Patten? 简单来说,Design Patten 就是一个常用的方案。 在我们的开发过程中,经常会遇到一些相同或者相近的问题,每次我们都会去寻找一个新的解决方法,为了节省时间提高效率,我们提供一些能够解决这些常见问题的,被证实可行的方案,构成一个统一的资源库。 一个Design P

iseeiconquer的专栏 1160

理解J2EE设计模式

  第二章 J2EE设计模式在我们形成了对框架、模式的简单认知以后。作为背景知识,这一章中我们主要了解和理解J2EE设计模式,以期获得J2EE设计模式的全貌。由于在SUN公司的网站上[i]有整个J2EE模式的详细的介绍,重复介绍就没什么必要了。但是有张图,根据本文的内在要求,是必须要看的。从中我们会进一步漓清框架、模式、具体的技术(如J2EE技术)、设计一个应用之间的关系。[ii]

cx0998的专栏 2140

J2EE Specification level指的是什么和J2EE规范讲解

我们在使用Myeclipse创建web 工程时,经常会遇到一个J2EE Specification level的选项,那这个选项的意义是什么呢? J2EE Specification Level指的是选择使用J2EE的哪个版本的规范。   在网上搜索了一下, 这个和使用的服务器有关, 比如Tomcat4、Weblogic9 以下的版本就应该选J2EE 1.4 。如果是Tomcat5 或

1897

JavaEE 从入门到放弃(四):MVC 模式

通俗易懂地讲解 MVC 模式。

Evan 的博客 1万+

J2EE中的设计模式之一

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java

java专栏 296

SCWCD之路——J2EE设计模式

概述           J2EE目前的设计模式有一类由Sun Java Center管理,其已经定义了15种设计模式,并且在《Core J2EE Patterns》中发表,有兴趣的可以去http://java.sun.com/blueprints/corej2eepatterns/Patterns/index.html 查看,考试中考到的设计模式就在其中。         这15...

superzhouych's Blog 219

j2ee的设计模式

j2ee设计模式一共有23种,分为3大类:创建型、结构性、行为型。 创建型(5种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型(7种):包装模式、适配器模式、组合模式、代理模式、外观模式、桥接模式、享元模式。 行为型(11种):观察者模式、策略者模式、模板模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 设计模式6

明天,你好的博客 1391
上一篇: J2EE中的设计模式之五
下一篇: J2EE中的设计模式之一
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值