linux系统时间对java.Timer执行产生的影响

从Timer到调度器:嵌入式到分布式系统的定时任务核心原理与避坑指南 定时器(Timer)是计算机系统中实现异步事件调度的核心基础设施,其本质是一个异步事件调度器。它的工作原理基于时间源、调度算法和执行器三大组件,通过将未来某个时间点的任务触发与主流程解耦,实现了非阻塞的事件处理。这项技术的核心价值在于为各类系统提供了精准的时间控制能力,是保障系统实时性、可靠性和高效性的关键技术。在应用场景上,从单片机裸机环境中的硬件定时器中断,到RTOS的定时器服务,再到Linux/Windows用户态的语言运行时库和高性能服务器的时间轮算法,直至分布式系统中的延迟队列和调度中间件,Tim 阅读详情

很有意思的一件事情,如果你们有兴趣,可以去试试


环境:centOS7-mini-x64

openJDK-1.7


步骤:

1.创建一个简单的2秒输出时间的timer

package linuxTimer;

import org.apache.log4j.Logger;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
 * Created by shenhongliang on 2015/11/23.
 */
public class Log {
    public static Logger logger = Logger.getLogger(Log.class);

    public static void main(String[] a){
        // System.out.println("This is println message.");

        // 记录debug级别的信息
//        logger.debug("This is debug message.");
        // 记录info级别的信息
//        logger.info("This is info message.");
        // 记录error级别的信息
//        logger.error("This is error message.");

        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                logger.info(new Date());
            }
        };
        Timer timer = new Timer();
        timer.schedule(task, 0, 2000);
    }
}

2.打个jar,让这个小程序在你的机器上跑起来,其实不用log4j也可以,开始我以为它不能在终端上显示呢

3.这个小程序隔2秒告诉你一次,当前系统的时间,现在用另外一个终端连接上linux

4.使用命令 ` date -s xx:xx:xx` 先向未来修改时间,观察结果,再向过去修改时间,观察结果。向过去修改时间的时候,不要修改的过大,1分钟内,因为你需要等它

我先把我的结论放上来:

经实验,并不是线程被停止,实际情况如下:
    1.当将时钟向未来调整,timer会继续从新时间开始定时执行任务.
    2.当将时钟向过去调整,timer会暂停执行,暂停的时间=现在的时间-新设置的时间
后续我会看一下到底为什么,再来填坑,先放出实验结果,感兴趣的自己动手试试,读了源码给我说说~

定时器原理与实战:从JavaScript到Java再到嵌入式开发的全面解析 定时器是编程中的基础组件,用于在指定时间点或周期性地执行任务。其核心原理基于硬件时钟和系统节拍,通过软件算法如最小堆或时间轮进行任务调度。在技术价值上,定时器实现了异步事件处理、任务调度和系统心跳等关键功能,广泛应用于前端交互、后端任务调度和嵌入式系统控制。在前端JavaScript中,setTimeout和setInterval需要注意回调执行时间的不确定性和累积效应;后端Java的ScheduledThreadPoolExecutor提供了FixedRate和FixedDelay两种调度模式,需根据任务 阅读详情

相关推荐

学会这10种JAVA定时任务多种方式集锦,我有点飘了

前言最近有几个读者私信给我,问我他们的业务场景,要用什么样的定时任务。确实,在不用的业务场景下要用不同的定时任务,其实我们的选择还是挺多的。我今天给大家总结10种非常实用的定时任务,总有一种是适合你的。一. linux自带的定时任务crontab不知道你有没有遇到过这种场景:有时需要临时统计线上的数据,然后导出到excel表格中。这种需求有时较为复杂,光靠写sql语句是无法满足需求的,这就需要写java代码了。然后将该程序打成一个jar包,在线上环境执行,最后将生成的excel文件下载到本地。为了减小对线上

Java_Pluto的博客 1465

修改系统时间导致 @scheduled 定时任务执行时间不正确

修改发系统时间导致 @scheduled 没有按照指定时间执行

weixin_42918955的博客 3103

从零打造M328晶体管测试仪:硬件DIY与烧录避坑指南

本文是一份详尽的M328晶体管测试仪DIY指南,涵盖从硬件选型、PCB设计、焊接组装到固件烧录的全过程。重点解析了使用AVR单片机与Arduino IDE环境时,如何正确设置熔丝位以避免“白屏”等常见问题,并提供了使用ISP编程器进行烧录的实操步骤与校准方法,帮助电子爱好者成功打造属于自己的高性价比元件测试工具。

weixin_29243063的博客 475

系统延迟任务及定时任务

系统延迟任务及定时任务 系统延迟任务 at time/now+1min 设定任务执行时间/延时1分钟 at> 任务动作 at> 用 ctrl +d 发起任务 at -l 查看任务列表 at -c 任务号 查看任务内容 at -r 任务号 取消任务执行 当任务有输出时,输出会以邮件的形式发送...

weixin_45368526的博客 207

第一章 Cheat Enginee(CE)使用指南

Cheat Engine核心功能详细说明(以植物大战僵尸为例) 教你修改单机游戏。

m0_74545731的博客 1万+

用例设计:滴滴打车从轿车到完成支付如何测?

滴滴打车全流程测试用例设计从业务场景覆盖、功能逻辑分解、异常流验证三个维度展开,系统化地构建了测试方案。首先,业务流主干场景被分解为叫车、行程中、支付结算三个阶段,每个阶段都设计了核心测试用例,包括正向和异常用例,如定位准确性、车型选择逻辑、路径偏移监控、费用实时计算、多支付方式兼容等。专项测试补充了状态机验证、资损防控测试和性能测试,确保系统在不同情况下的稳定性和安全性。测试数据策略采用等价类划分设计,实战技巧包括流量回放技术、混沌工程注入和计费沙盒验证,以提高测试的覆盖率和准确性。最终输出交付物包括流程

海姐软件测试的博客 1524

CentOS6 x64位平台下,JDK1.6运行环境下,Thread.sleep()的睡眠时间会因为修改系统时钟而改变。...

这个文章是作为问题而发表。有遇到相同问题的朋友们一起看看,有没有解决办法,或者有没有办法让oracle去修复。 在CentOS6x64位平台下,运行JDK1.6版本的64位Java运行环境,当一个线程在运行过程中执行sleep(30000)之类的方法进入睡眠状态时,在这个过程中如果将系统时钟向后调慢1个小时,那么这个sleep的实际时间会变成一个小时+30秒。也就是说在这个运行环境下,sleep的...

dowhathowtodo 256

ROS——无人机ROS仿真包 rotors_simulator 编译教程

文章目录 安装wstool sudo apt install python3-wstool 创建ROS工程 $ mkdir -p ~/UAV/src $ cd ~/UAV/src $ catkin_init_workspace # initialize your catkin workspace $ wstool init 下载源码 git clone git@github.com:ethz-asl/rotors_simulator.git 源码链接: https://github.com/eth

漫长IT路 5863

java定时任务在linux上失效,linux定时任务生产java服务无法执行问题案例

我写了一个重启resin的脚本,由于业务原因,需要定时在某一个时间重启下resin服务器于是就在crontab里配置了如下内容:* * - root /usr/local/bin/resin_restart.sh其中,resin_restart.sh内容如下:#!/bin/sh/usr/local/bin/xxresin_stop.sh/usr/local/bin/xxresin_start.sh...

weixin_42109732的博客 1281

Web渗/透/攻/击实战(1)—成功渗/透台湾某净化设备公司官网

写在前面 作为一个防御型白帽黑客​ 你一定要知道黑客的进攻套路 才能有相应的防御措施 声明:只做测试,发现对方的漏洞,并不进行破坏性操作 1、 网站分析 地址:http://www.xxx.com.tw/ 这是一家中国台湾地区的网站,看着满屏的繁体字,就不是很舒服 网站首页包括:关于我们、资料下载、联络方式等等。 这些对我们进行sql注入用处并不大 我们需要的是可以进行参数传入的页面,这样我们就可以在参数里做文章 找一下 有没有新闻列表相关的页面 页...

信息安全领域优质创作者|操作系统领域专家 1807

C#串口通信从入门到精通(27)——高速通信下解决数据处理慢的问题(20ms以内)

本文介绍如何在高速通信情况下解决串口接收的数据来不及处理的问题,由高级工程师多年经验总结而成,绝对是串口领域的实战经验!

qq_34059233的博客 6811

linux timer多长时间,linux系统时间对java.Timer执行产生的影响

很有意思的一件事情,如果你们有兴趣,可以去试试环境:centOS7-mini-x64openJDK-1.7步骤:1.创建一个简单的2秒输出时间的timerpackage linuxTimer;import org.apache.log4j.Logger;import java.util.Date;import java.util.Timer;import java.util.TimerTask;/...

weixin_34168834的博客 156

C语言试题一之计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和

1、题目 计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和 2、源代码实现 #include <stdio.h> #include <math.h> double fun1(int n) { if (n <= 0) return 0; int i; double sum = 0.0; for (i = 1; i <= n;...

码莎拉蒂 1万+

Timer为什么会一运行就执行?

package com.utan.timer.test; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Timer; public class TimerTest { public void test(){ try { Ti...

kuwoleft 230

【ComfyUI】Flux 完整版文生图

本文介绍了一个基于Flux Dev的AI文生图全流程工作流,通过整合扩散模型、文本编码器和VAE解码器等核心组件,实现从文本到高清图像的端到端生成。工作流包含模型加载、条件构建、潜空间采样、图像解码和成果保存五个关键环节,支持高分辨率图像的细节还原和艺术风格塑造。应用场景涵盖艺术创作、内容生产、教学演示和科研数据准备等领域,适用于对画质和提示遵循性要求严格的场景。文章还提供了相关开发资源和学习教程链接,帮助用户深入理解AI绘图机制和实际应用。

Mr数据杨 1279

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

Linux第14篇:定时任务——crontab 与 systemd Timer 实战

日志清理、数据库备份、健康检查、AI 模型更新——这些定时运行的任务是 Java SaaS 运维体系的重要组成部分。本文讲透 crontab 语法全貌与常见陷阱,并对比 systemd Timer 这套现代化的替代方案,配套真实可用的 Spring Boot 场景脚本。

qq_23625847的博客 381

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

使用 Timer 进行任务调度

package com.huyd.xiancheng; import java.util.Timer; import java.util.TimerTask; /**  *   *  使用 Timer 进行任务调度  *   * */ public class TimerDemo extends TimerTask{ private String name="";

u012532109的专栏 540

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

Timer在windows和linux下的不同表现

工作之余就想写这篇文章了,但是种种原因没有写上,回到家中记录一下,以供在被岁月摧残的N多年之后回忆一下,也许还可以给别人带来帮助,而更多的是为了温故而知新,不善言谈,直接上代码。 class MyTask extends TimerTask { public void run() { System.out.print("hello everybody!"); ...

不积跬步无以至千里 267

java时钟中断_Linux之时钟中断详解

在Linux的0号中断是一个定时器中断。在固定的时间间隔都发生一次中断,也是说每秒发生该中断的频率都是固定的。该频率是常量HZ,该值一般是在100 ~ 1000之间。该中断的作用是为了定时更新系统日期和时间,使系统时间不断地得到跳转。另外该中断的中断处理函数除了更新系统时间外,还需要更新本地CPU统计数。指的是调用scheduler_tick递减进程的时间片,若进程的时间片递减到0,进程则被调度出...

weixin_35775988的博客 1074

13-Linux学习之旅之Linux系统启动过程+Systemd+计划任务

GRUB2是Linux系统最常用的引导加载程序(Boot Loader)。它的核心职责:允许用户选择启动哪个操作系统或内核版本向内核传递启动参数(如调整运行级别、启用调试模式)提供救援模式入口单用户模式是一种维护模式,用于:重置root密码(忘记root密码时)修复文件系统错误排查启动故障移除损坏的软件包Systemd 是 Linux 系统的初始化系统(init system)和服务管理器,PID 为 1,是系统中所有进程的父进程。

2401_88082755的博客 523

CentOS 8 Cron 生产避坑指南:systemd-cron、语法差异与 timer 进阶

Cron 是 Linux 系统级定时任务调度的核心机制,其底层依赖 crond 守护进程与 systemd 协同工作。在 CentOS 8 中,传统 SysV cron 已被 systemd-cron(cronie)深度集成,带来环境隔离、服务依赖、资源限制等新特性,也引发 PATH 缺失、时间同步冲突、表达式不兼容等高频故障。理解 cronie 与 systemd 的交互原理,掌握 @Scheduled 到标准 5 字段 cron 的语义转换规则,并善用 systemd timer 实现超时控制、失败重试

weixin_30421809的博客 369

Android定时任务开发:Timer使用详解与优化实践

在移动开发中,定时任务是实现周期性操作的核心技术。Java的Timer类作为基础线程调度工具,通过后台线程执行预定任务,提供精确的时间控制和丰富的调度选项。其技术价值体现在延迟执行、周期任务等场景,特别适用于需要高精度计时的Android应用开发。实际工程中需注意线程安全、生命周期管理等关键问题,避免内存泄漏和ANR。现代Android开发中,Timer常与Handler、Coroutine等技术结合使用,在数据同步、心跳检测等场景发挥重要作用。本文深入解析Timer的四种调度方法,并对比分析其与WorkM

weixin_30314793的博客 389

Linux时间管理机制与高精度同步实践

计算机系统中的时间管理是操作系统基础功能的核心组成部分,其实现原理涉及硬件时钟、系统时钟和单调时钟的协同工作。在分布式系统和嵌入式领域,时钟同步精度直接影响事务一致性、日志排序等关键功能。通过NTP、PTP等协议可实现不同级别的时间同步,其中chrony作为现代NTP实现,在移动设备和云环境中展现出快速收敛优势。工业场景下需结合硬件时间戳卡和精密时钟源,而金融系统则依赖内核级实时补丁确保微秒级精度。本文通过量化分析时钟漂移现象,详解了从基础hwclock操作到容器环境时间注入的全栈实践方案。

weixin_30698527的博客 461

linux C定时器总结

linux c定时器

xiaoshixiu的专栏 5266

java定时器的使用(timer)_Linux定时器 - 定时的方法

网络程序需要处理的第三类事件就是定时器,比如定期检测一个客户连接的活动状态。服务器程序通常管理着众多定时事件,因此有效地组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,ui对于服务器的性能有着至关重要的影响。为此,我们要将每个定时器事件分别封装成定时器,以实现对定时时间的统一管理。不过在讨论如何组织定时器之前,我们先要介绍定时的方法。定时是指在一段时间之内触发某段代码的机制,...

weixin_39997400的博客 359
上一篇: 关于StringBuffer.setLength和trimToSize
下一篇: 关于Ubuntu14.04.3安装完成后WI-FI驱动(BCM43142)没有的问题
isCoding
博客等级 码龄14年 10粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值