web笔记

本文介绍了Windows系统下的DLL文件及其作用,如Kernel32.dll、User32.dll和GDI32.dll。文章提及Postek条码标签打印机基于winpsk.dll,探讨了VB和VC编程语言的区别,以及它们与DLL的关系。此外,还提到了DLL的共享资源功能、依赖工具depends.exe的使用以及DLL的注册与管理。最后,简要提及了.NET框架下的NuGet、Visual Studio的Git管理和项目构建工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        PrintLab.OpenPort("POSTEK G-2108");//打开打印机端口
        PrintLab.PTK_ClearBuffer();           //清空缓冲区
        PrintLab.PTK_SetPrintSpeed(4);        //设置打印速度
        PrintLab.PTK_SetDarkness(10);         //设置打印黑度
        PrintLab.PTK_SetLabelHeight(200, 16); //设置标签的高度和定位间隙\黑线\穿孔的高度
        PrintLab.PTK_SetLabelWidth(200);      //设置标签的宽度

            PrintLab.PTK_PrintLabel(1,1);
            PrintLab.ClosePort();//关闭打印机端口

postek打印机基于windows的winpsk.dll文件
此函数库只是postek条码标签打印机公司自己编写的基于windows系统的程序
dll文件好处,windows三个底层dll文件:负责内核的Kernel32.dll管理内存进程和线程,关于用户界面User32.dll负责事件的逻辑处理,图形设备接口GDI32.dll可以用于画窗口和文本GDI32.dll
所有程序共同用一个已经进入内存的dll

VB和VC都是micosoft的编程语言,VB核心是basc语言,VC核心是C++语言
VC功能更强大,是win32 API 的封装,可以操作微软基础库
VB是面向对象变成,VC是面向过程编程
VB可视化好,可以使用鼠标画出图像界面,vc需要使用API编码逐个实现

dll可以让程序之间共享资源(图片,图标,对话框,声音文件等等)

可以下载使用depends工具,运行depends.exe,之后打开一个dll文件,里面会列出这个dll文件使用了哪些其他的dll的功能函数,,里面显示了函数的输入和输出表,函数输出表示该dll给其他exe或dll文件调用的函数的总列表
输出表里的function是输出函数的名字
wsock32.dll可以进行网络通讯
也有只是存储了很多音频图片对话框字符串资源的资源dll

dll文件需要注册,一种dll无需注册就可以使用,另一种必须注册使用,可以使用depends打开看一看函数的输出表,输出表里有DLLRegisterServer或DLLUnregisterServer就一定要注册后才可以使用
一般只要把dll放到程序的插件目录就可以直接使用

nuget是.net平台下的项目,是visualstudio的扩展,可以找到相应的插件

magick使用方法
1.
Bitmap bit = new Bitmap(printinfo1.Width, printinfo1.Height);//实例化一个和窗体一样大的bitmap
Graphics g = Graphics.FromImage(bit);
//g.CompositingQuality = CompositingQuality.HighQuality;//质量设为最高
g.CopyFromScreen(printinfo1.Left, printinfo1.Top+23, 0, 0, new Size(printinfo1.Width, printinfo1.Height));//保存整个窗体为图片
//g.CopyFromScreen(panel游戏区 .PointToScreen(Point.Empty), Point.Empty, panel游戏区.Size);//只保存某个控件(这里是panel游戏区)
bit.Save(“lab.png”);//默认保存格式为PNG,保存成jpg格式质量不是很好
MagickImage image = new MagickImage(“lab.png”);
image.Format = MagickFormat.Pcx;
image.ColorType = ColorType.Palette; // <----
image.Write(“lab.pxc”);
2.

MagickImage image = new MagickImage(path);//获得一个图片对象
image.Quality = 100;//进行无损压缩
image.Resize(1000,1000); //整体进行尺寸调整
string SaveToPath = @rootPath +“\”+ reName +“resize.jpg”;//对保存路径进行编辑
image.Write(SaveToPath);//以流的方式写入目标路径
image.Dispose();//对象进行释放

【git提交管理工具】
beyond compare
文件比较工具
对比两个文件夹或文件,差异用颜色标识
可以把电脑里的文件和ftp地址的文件对比
包括UTF-8,html,Delphi源程序的文本都可以进行比较
可以跨媒体比较,黑色表示两个文件夹内容一样,红色表示不完全相同,蓝色表示有一侧完全没有某个文件夹黄色是系统的卷标信息文件夹
Delphi是windows下的快速应用程序开发工具
由传统pascal语言发展来的object pascal,一图形用户界面为开发环境,透过IDE,VCL工具与编译器,结合连接数据库的功能构成一个一面向对象程序设计为中心的app开发工具
是最领先的数据库技术,是C++语言的开发集成环境
兼具VB+VC的优点,

svn和git都是版本管理工具,git是分布式的,不容易和其他人的由太多的冲突,是在自己的电脑上进行修改之后再和整体项目合并的
tortoisegit是git的一个插件,是git控制系统的源控制端
是一个图形化操作git的软件
本地库与远程库连接的方式由两种,https和ssh,https使用起来不需要配置,但是每次抓取和push代码都需要输入账号和密码,ssh方式需要添加好sshkey秘钥
加上tortoise的git库支持了fork、pullrequest,公有库和通知等

“”与string.empty是一样的,但是

【融入】
utility
从数据库去一个用于分片的二标信息
参数名weight和quota
一个返回rfid的信息的方法,需要输入重量和quato
又定义了产品数量和编码
跟踪产品批次重量,输入批次产品编码和batchno
使用产品代码获取一个产品
获取一个可打印的标签
看一下待分配的产品

mybatis初始化是在戒子mybatis-config.xml的配置文件映射配置文件以及注解信息
建一个返回一个SQLsessionfactory参数的方法
里面传入reader环境以及property参数
先使用xmlconfigbuilder建一个config对象
mybatis初始化使用了建造者模式,baseBuilder扮演建造者接口的方式
可以d setting
li ueviyixx uibuui kdqi zids ykue
配置的插件都是使用configuration。interceptorchain字段管理,创建一个interceptor对象,底层使用arraylist实现
xmlmapperbuilder负责解析映射配置文件,继承了basebuilder抽象类属于具体建造者
xmlmapperbuilder。parse是解析映射文件的入口
使用configuration。isreloaded()检查一下之前有没有加载过这个映射文件
使用configurationElement(parser,evalNode("/mapper"))处理mapper节点
之后可以使用configuration。addloadedResource(resource)把这个映射文件加入到已经下载过的映射文件的集合里
再使用bindMapperForNameSpace()注册mapper接口
处理configurationElement()方法里解析识别的resultmap节点,SQL语句
parsePendingResultMaps();parsePendingstatements()
把每个节点的解析过程封装成一个方法
mybatis由耳机缓存功能,默认不开启
可以在响应的配置文件里添加节点,通过配置cache的相关属性添加响应的装饰器
xmlmapperbuilder.cacheElement()可以解析cache节点
【mybatis与spring的集成】
设计好的对象都交给ioc容器控制不需要再使用new新建对象
使用对象时由spring这种ioc容器创建对象之后注入到依赖对象里
a和b两个类之间的依赖关系使用配置文件告诉ioc容器,由ioc容器创建并且维护两者之间的关系
依赖注入:对象之间的依赖关系由容器在运行期决定,容器动态的维持两个对象之间的依赖关系
只需要使用限流文件或者注解就可以确定依赖关系
AOP面向切面编程:对面向对象变成的补充和完善,可以使用封装,继承,多态的概念建立对象的层次结构
系统里处理核心业务逻辑还有权限检测,日志输出,事务管理等代码
这些代码与核心逻辑代码无关,面向对象的设计容易使这种代码重复出现不利于模块重用
AOP使用横切技术把公共代码抽取出来封装到一个可重用模块称其为切面
AOP常见名词:横切关注点–拦截那些方法拦截之后的处理方式,切面,连接点–值被拦截的方法,切入点,通知–连接到方法之后要执行的代码(前置通知,后置通知,异常通知,最终通知,环绕通知),织入–切面应用到目标对象并且创建代理对象的过程

【AOP实现事务管理】
事务管理可以保证在异常情况下数据的一致性,是对数据库事务进行提交和回滚
spring框架里最常用的是声明式配置事务,声明式可以基于xml进行配置也可以基于注解进行配置
|||||||||基于注解
@Transactional
配置在需要开启事务的service接口的实现类里
有以下属性:
isolation–事务隔离级别
noRollbackFor–一组异常类,遇到时不回滚默认为{}
norollbackForClassName–一组异常类名
propagation–事务传播类型
readonly–事务读写性
timeout–超时时间
value–可选的限定描述符,指定使用的事务管理器
(isolation参数)
isolation.READ_UNCOMMITTED读取一个为提交数据,不可以重复读取
isolation.read_committed读取一个已提交数据
isolation.repeatable_read可以重复读取但是会出现幻读
isolation.serializable串行化
(propagation参数)事务传播行为
propagation.required–有事务就加入事务,没有就新建一个
propagation.not_supported容器不为这个方法开启事务
propagation.requires_new不管是不是存在这个事务都创建一个新的事务,原来的挂起,新的执行完毕之后在执行老的任务
propagation.mandatory–必须在一个已经由的事务中执行否则抛出异常
propahation.Never–必须在一个没有的事务中执行否则抛出异常
propagation.supports–其他组件调用这个方法的话,在其他组件里声明事务,其他组件没有声明的话就不用事务

【在spring里使用事务注解】
1.||||||||||||配置一下spring的jdbc事务管理器



(类名就是jdbc的数据库管理者,资源名称是数据库,引用是数据库)
为了配合自定义的注解选择的注解方式
<tx:annotation-driven transaction-manager=“transactionManager” />
驱动是transactionManager

2.|||||||||||||||||||||在service的实现类里添加@Teansactional注解
实现类和实现方法的访问权限是public
rollbackFor属性可以在程序出现异常时进行一次事务回滚得到准确的数据
类上写
@Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,rollbackFor=Exception.class)
@Service
如果某一个方法不需要开启事务可以在该方法上提交注解,单独设置一下
@Transactional(propagation=Propagation.NOT_SUPPORTED)
【spring mvc】
对web层的各个框架进行解耦,借助spring注解功能提供pojo对象开发模式
pojo简单的java对象
模型负责封装需要展示到view的数据,控制器负责处理用户请求,导演底层service实现具体逻辑。之后业务逻辑返回一些数据在视图展示
控制器手机这些数据并准备一些模型对象在视图上展示
model里封装的数据实际上也是由java对象组成的,会在业务逻辑层被处理之后在持久层里存入数据库进行持久化的保存
视图一般是使用jsp的标准标签库囧讨论编写的jsp模板,控制器一般是使用spring mvc注解配置的controller类
jstl就是专门给javaweb开发人员提供的,这些标签可以取代jsp页面上的java代码提高可读性
在jsp页面使用jstl标签需要使用taglib标签库
在jsp里使用jstl标签还需要安装jstl,jstl1.2下载一个jar文件之后复制到web应用程序的webinflib文件夹里就可以使用了,1.0需要下载一个自拍文件把里面的jstl.jar和standard.jar两个文件都复制到这个文件夹里
DispatcherServlet是一个前端控制器,是整个mvc框架的核心组件,负责整个流程的调度,在接收了http请求之后,会根据请求调用springmvc中的各个组件,拦截指定格式的URL请求,初始化webapplicationcontext,初始化mvc的各个组件,根据controller返回的逻辑试图名选择具体试图进行渲染
负责根据controller返回的逻辑视图名选择具体视图进行渲染
配置在web.xml文件里拦截匹配请求,匹配规则自己匹配,拦截下的请求分发到对应的控制器进行处理,这是配置mvc的第一步
这个前端控制器设计模式可以提供spring web mvc的集中访问点,与spring ioc无缝对接
配置(web.xml)
先写一个servlet标签类就是使用前端的dispatcherservlet类
之后写一下servlet的映射,在里写匹配的字符
默认使用webapplicationcontext作为上下文,
webapplicationcontext里特殊的组件:
controller,控制逻辑转移到前端了,用于处理请求
handlermapping,把请求映射到处理器,映射成功返回一个handlerExecutionChain对象,里面包含一个页面的控制器对象和多个页面拦截器对象
handleradapter,会把处理器包装成适配器,支持多个类型的处理器,即适配器设计模式的应用
viewresolver可以把逻辑试图名解析为具体视图,可以很容易的更换其他视图技术
localresolver本地化解析,解析客户端本地信息方便spring国际化
themeresolver可以实现一个页面多套风格
multipleresolver用于支持文件上传
handlerexceptionResolver解析处理器的异常,把异常映射到统一的错误页面,可以不让用户看到具体的错误信息
requestToViewNameTranslator处理器没有返回逻辑试图名等相关信息时可以自动将请求URL映射为逻辑视图名
【springboot使用小技巧】
使用tomcat设置网页标题栏图片时一般直接替换root包下的favicon.ico 替换成自己的(就是标题栏图片),比如换成Baidu.ico,换完之后在html里的head里的link rel=“icon” href=“root/baidu.ico” type ="image/x-icon"里改一下就可以了
使用springboot只需要把自定义图片放到静态资源目录下即可
允许跨域访问
CORS是一个www标准,是跨域资源共享,允许浏览器向跨源(协议+域名+端口)服务器发出先榔头贴request请求,客服类ajax只能同源使用的限制
跨域可以使用nginx解决,或者通过jsonp(只支持get请求)解决
springboot里利用@crossOrigin注解,可以放到类或者方法上,类上面表示整个控制层的所有映射方法都支持跨域请求
配置全局cors配置可以写一个webMvcconfigurer corsConfigurer方法里面返回一个新的webmvcconfigurerAdapter的适配器的方法
一般都是使用jar包运行,部署独立的tomcat可以把项目打包成war包之后修改启动类的配置
1.把pom里的打包方式改为war并且不使用内部的tomcat
2.改一下启动类,使其继承springbootservletinitializer,之后覆盖configure方法
设置一个定时任务或者挂起一个线程保证启动类不会启动之后就退出
3.之后使用maven打包为war之后放入tomcat即可
启动时不设置端口
一些不需要被其他服务调用的项目不需要设置端口,只需要改一下启动的方式,启动之后挂起一个线程或设置一个定时任务,或者修改一下配置文件的属性web-environment=false

启动完成前可以进行业务逻辑
利用commandLineRunner或者ApplicationRunner可以在SpringApplication的run()前完成一些业务逻辑
0.在启动类里实现commandlinerunner接口
1.运行或者直接声明一个bean
多个可以使用@Order确定执行顺序
使用org.springframework。boot。logging。loggingsystem提供的api即可
log默认是info模式,修改后显示debug模式

热部署,一般都需要重启服务进行更新,只需要在springboot里加入一个spring-boot-devtools即可,设置为TRUE的话依赖于次项目的必须额外引入此包

自定义启动banner

【屏蔽外部依赖】
项目基于springcloud或DUBbo这种分布式服务需要依赖许多基础服务
比如某个订单号生成以及获取用户信息等
由于服务拆分这些功能都在其他应用里以接口形式提供,可以使用mock把这个屏蔽掉
如果想启动之后把自己的相关代码跑一遍可以:
在本地启动好所有的服务
把注册中心换为开发环境,依赖开发环境的服务
直接把代码推送大开发环境
这几个做法的问题是本地服务启动可能跳转本地计算机性能,使用开发环境需要提前打通网络,推送之后调试困难,没有本地debug的效率
所以可以使用在本地单测,mock掉其他外部依赖即可
springboot启动之后在spring里找出需要屏蔽的api的bean
手动从bean容器里删除这个组件
使用mock重新创建一个该api的对象
手动注册进bean容器里
(mock是在测试过程中吧一些不容易构造或获取的对象用于个虚拟对象创建之后测试)
配置加密
一个对springboot十分友好的组件可以轻松实现
根据加密密码把需要加密的配置加密为密文
替换明文保存的配置
使用时进行解密
1.在pom里引入一个jaspt-spring-boot-starter的依赖到包里
2.写一个单侧句密码生成密文,密码也可保存在配置文件里
jasypt.encryptor.password=123456
在单测中生成密文
@Autowired
private StringEncryptor encryptor;
@Test
public void getPass() {
String name = encryptor.encrypt(“userName”);
String password = encryptor.encrypt(“password”);
System.out.println(name + “----------------”);
System.out.println(password + “----------------”);

  }

即可
还有一个解密的过程
DataSourceProperties dataSourceProperties = (DataSourceProperties) bean;
dataSourceProperties.setUsername(encryptor.decrypt(dataSourceProperties.getUsername())) ;
dataSourceProperties.setPassword(encryptor.decrypt(dataSourceProperties.getPassword()));

handlermapping接口可以把用户的请求映射到controller
handlerinterceptor接口拦截http请求
modelandview,controller处理完请求之后会把视图名称以及模型数据封装成modelandview对象返回到dispatcherservlet里
viewresolver接口可以把视图的逻辑名称映射为集体的视图
view接口可以实现具体的视图
【mvc如何处理一个http请求】
浏览器送来一个http请求–事务处理器dispatcher servlet查找一下需要那个handlermapping处理器,之后调用映射出来的handlermapping对应的controller接口–调用controller的业务逻辑
–在modelandview里得到结构把结构发送到事务处理器,事务处理器把数据传递到model里进行数据处理,处理之后变成视图,之后发到浏览器

【一个完整的mvc案例】
使用mybatis作为对象关系映射框架(可以把数据库里的数据变成java可以识别的类型,相当于模拟了一个虚拟的可以直接操作的java数据库)
先建立一个叫demo的数据库,里面一个user表
在pom里添加MySQL驱动包依赖以及mybatis支持
在application。properties里配置数据库的用户名密码以及驱动类,使用的数据库的类型(jdbc:mysql),并且配置一下实体类就是domain类所在的包名
建立一个简单的user类
里面两个user构造方法
构造方法必须与类名一致,每个类可以有多个构造方法
构造方法没有返回类型(包括void)
不可以被static,final,synchronized,abstract和native修饰,不能被子类继承
构造方法在创建对象时自动执行,一般不能被显示调用
之后创建一个usermapper的接口属于实体层
usermapper里的sql注解可以在接口上也可以保存在一个xml文件里
@Select(“select * from user”)
ListselectAll()意思是创建一个元素类型是User的list对象的方法
之后写一个UserService类,return usermapper里的selectall方法
之后写一个usercontroller类,里面一个便于外部调用的接口,return下service里的方法
控制器可以家@Controller注解也可以家@RestController注解,前者返回的是一个页面的代称,后者是返回一个JSON数据
controller方法类前加@RequestMapping
之后在主应用程序的类前加一个注解@Mapperscan(“com.hanhf.demo.domain”)
这个可以扫描数据库@mapper接口的包
spring 没找里没有starter,spring可以通过starter融入各种框架
spring mvc是基于servlet的mvc框架,没有model里的映射

与前端的整合
方式一:可以把前端的资源打包为jar包或者war包进行部署
方式二:也可以后端文件打包成jar或war包,把前端资源放到nginx代理服务器上
方式一
先选择模板引擎,springboot推荐thymeleaf
pom里添加spring-boot-starter-thymeleaf到org.springframework。boot里
spring.thymeleaf.prefix=classpath:/templates/
spring.mvc.static-path-pattern=/static/**
spring.thymeleaf.cache=false
指定把html页面都放到templates目录下,css和js文件都放到static目录下
static目录下的文件默认是可以访问到的,template目录下的文件不能直接访问到,与jsp模板开发下的web-inf相似
写一个controller映射访问首页之后使用maven达成jar包,在决定环境使用java -jar启动,直接打包成jar包别名会不能识别需要收手动设置
方式二
先安装nginx
修改nginx的配置文件添加拦截路径和代理地址以及首页的访问地址

mode。js可以作为服务器转发请求和访问静态页面

【maven作用】
可以下载和关联source
mvn compile 下载jar并且编译项目
mvn test 可以执行test
mvn dependency sources尝试下载source文件
mvn eclipse 生成一个eclipse的工程配置文件

后端服务器的html,htm,shtml,asp,aspx,php,jsp等格式的而繁忙
处理html和htm都是用于动态网页
比如一个前台的submit 按钮,点击之后会提交表单的数据到服务器的loginservlet相对地址
之后会在web。xml文件里找到这个servlet关联的java类,执行了服务端的程序(第一次执行先实例化执行里面的init函数,之后执行service函数,第二次调用直接执行service函数)
node.js是Javascript的应用学科和人家看,使用了一个事件驱动,非阻塞式IO模型,让javascript运行在服务端的开发平台,让javascript也可以像胖胖,Python,perl,ruby等语言一样可以直接运行在服务端
对一些特殊用例优化,提供替代的api,可以让v8在非浏览器环境下运行的更好,V8引擎执行javascript的速度非常快,性能也非常好
使用module模块划分不同的功能,简化了应用的开发,modules模块像c++语言里的类库,每一个node的类库都包含了丰富的各类函数,比如http模块里有很多http功能的类库,很容易创建http和tcp/udp的服务器
引入了http类库之后会把http类库的引用存放到http变量里,此时node会在应用里搜索是否存在node_modules目录,并且搜索目录里是否存在http模块,node.js 找不到这个目录的话会在全局模块缓存里寻找,用户可以使用相对或绝对路径指定模块位置
可以把一些方法和变量暴露到模块外就可以使用exports对象取实现了,不然模块里的方法和变量都最只能在同一模块里调用
可以用于开发一些快速移动的web框架(应用程序监控,媒体流,远程控制,桌面和移动应用)
http是首要的,node为创建http服务器做了优化
var http =require(“http”)
server =http.createServer(function(req,res)){
res.writeHeader(200,{“Content-Type”:“text/plain”})
res.end(“Hello world\n”)
}
server.listen(8000)
console.log(“httpd start @8000”)
创建服务节点的网络应用需要先创建一个网络服务对象,用createServer
var http = require(‘http’);
var server = http.createServer(function(request, response) {
// handle your request
});
传入createServer的function里有需求和响应,是请求的处理者,function每次http请求的时候都会被调用
node.js 所有的异步IO操作都会完成时发送一个时间到队列
node.js里许多的对象都会分发事件,一个net.server 对象每次由新链接时都会触发一个时间,一个fs.readStream对象会在文件被打开的时候触发一个事件,所有事件都是events.EventEmitter的实例
event是模块只提供一个对象:events.EventEmitter
event Emitter的核心是事件触发和事件监听
可以使用require(“events”)访问这个模块
require()可以用于访问node.js 里的各个模块
eventEmitter实例化时发生错误会触发error事件,添加新的监听器时,newlistener事件会触发,监听器移除时removelistener事件被触发
addlistenter为指定事件添加一个监听器到监听器数组的尾部
on为事件注册一个监听器
once为指定事件注册一个单次的监听器
removelistener移除一个已经制定过的监听器
setmaxlisteners超出多少个监控器就会发出警告
listeners()返回指定事件的监听器数组
emit(event,param1,param2 。。。)按照监听器的顺序执行每一个监听器,事件有注册监听返回true,没有返回false
node.js (javascript的运行环境)+javascript属于后端
可以用于模拟ajax请求,直接使用浏览器post会遇到跨域等麻烦,直接使用node写一个request就可以解决这个问题
grunt可以帮助管理一个前端工程,省去非前端的麻烦,有助于前端工程师对js的理解(闭包,事件驱动)

【目前流行的9个前端框架】
Vue不是大型框架,是自底层向上逐层应用,只关心视图层,易于上手,便于与第三方库或已有项目整合,可以为复杂的单页提供驱动
react一个用于构建用户界面的javascript库,主要用于构建UI,是MVC里的V,代码逻辑简单
angular是一个前端js框架,核心由MVVM,模块化,语义化标签,依赖注入等
qucikUI是一个企业级web前端方案由基础框架,UI组件库,示例工程和文档组成
layui是写门槛低使用的就是html/js/css的书写与组织模式
Avalon基于虚拟dom的前端mvvm框架,兼容性强支持移动开发后端渲染
Dojo致力于互操作性,可以在非Dojo应用程序里使用基于Dojo的小部件
ember.js是最固执己见的主流框架,只有一套创建ember.js 应用的方法,类似一个产品,比较成熟
aurelia可以在不牺牲功能的情况下采用简单干净的代码

前端构建工具一般就是gulp和grunt
react框架和vue都比较火
react只有view这一层,是一个库不是一个完整的框架,angular是一个大框架但是载入比较慢
模块化由很多人用sea.js

打包前端的工具由grunt,gulp和百度开发的fis
服务器渲染还是要写好jQuery插件
elementUI是基于Vue的框架
ANtDesign是基于react的是框架
Quick UI是基于jQuery的框架,可以用于企业级的开发,搭配皮肤可以实现风格多变,费用贵
NG-ZORRO是基于Angular的框架

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值