每日一题(含日常工作使用到的知识点)

【PMP 每日一题】2020.4.10 【PMP 每日一题】 2020.4.10每日一题: You are in the process of defining activities and have broken down the WBS into individual activities.You now decide to uniquely tag each activity with a unique code.So here ... 阅读详情

题目来源于网络及日常工作,答案及说明为自己的理解。如有错误,望指出。共同进步!!!

 

目录

1、正则(邮箱,电话,出生日期,数字和英文字母) 

2、不用加减乘除运算符,求整数的7倍

(1)数组方法

(2)ECMAScript5中的数组方法

3、快速从一个巨大的数组中随机获取部分元素

4、60秒获取验证码

5、变量作用域、函数自执行


 

 

 

  • 1、正则(邮箱,电话,出生日期,数字和英文字母) 

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<input type="text" class="code">
	
	<button>保存</button>
</body>
</html>
<script src="jquery-1.12.1.min.js"></script>
<script>
	re=/[^\w_]/
	$('button').on('click',function(){
		var i=$('.code').val()
		if(re.test(i)){
			alert('请输入数字或英文字母')
		}else{
			alert('保存成功')
		}
	})

      
        reEmail = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/
        if (pubEmail == '') {
            swal('民网电子邮箱为空')
            return;
        } else if (!reEmail.test(pubEmail)) {
            swal('请输入正确的电子邮箱')
            return
        }
        reB = /^\d{8}$/
        if (birthday == '') {
            swal('出生日期为空')
            return
        } else if (!reB.test(birthday)) {
            swal('请输入正确格式的出生日期')
            return
        }
        re = /^1\d{10}$/
        if (mph == '') {
            swal('移动电话为空')
            return
        } else if (!re.test(mph)) {
            swal('请输入正确的移动电话')
            return
        }
</script>

涉及知识:

正则:

 

 

  • 2、不用加减乘除运算符,求整数的7倍

方法一:运用乘号的ASSIC码计算

let mul7=(num)=>eval([num,String.fromCharCode(42),"7"].join(""))

方法二:

           (1)通过位运算(二进制与十进制相互转换)

主要思路:十进制转二进制,左移三位,补零(8倍),左移一位,补零(1倍);

                  八倍减1倍,结果为7倍

let mul7=(num)=>{
    return (num << 3 )-num
}
console.log(mul7(10))  //70

          (2)十进制转七进制,左移一位补零

let mul7=(num)=>parseInt([num.toString(7),'0'].join(""),7)
console.log(mul7(10)) //70

涉及知识: 

  1. eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
  2. fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。                                                                             语法:String.fromCharCode(numX,numX,...,numX)
  3. join():把数组中的所有元素放入一个字符串
  4. toString转目标进制
  5. parseInt转十进制                                                                                                                                                                    语法:parseInt(string, radix) (radix介于 2 ~ 36,否则返回NaN)
let num=10;
console.log(num.toString(2)) //1010

扩展知识:

(1)数组方法

数组方法
方法名参数返回值用途

是否改变

原数组

备注
join()

不带参数:用,连接 eg:(',')

带参数:(' ')('')('-')等

连接后的字符串

将数组中的所有元素,转为字符串

并连接在一起

 Array.join()是String.split()的逆向操作
reverse()无逆序的数组将数组中的元素,颠倒顺序是 
sort()

不带参数:以字母表顺序排序

带参数:比较函数(用匿名函数非常方便)

排序后的数组将数组中的元素,排序 

数组中包含undefined,会被排到尾部。

比较函数只使用一次,没必要命名

concat() 新数组

连接为新数组(元素包括:

调用concat()的原始数组的元素和concat()的每个参数)

否

不会修改调用的数组;

不会递归扁平化数组的数组

slice()

两个参数:片段的开始和结束位置

一个参数:从开始到数组结尾

负数:最后一个元素的位置(-1:最后一个;-3:倒数第三个)

指定数组的一个片段或子数组截取指定数组否返回第一个参数位置到不含第二个参数之前的所有数组元素
splice()

第一个参数:插入或删除的起始位置

第二个参数:删除元素的个数(省略:起始到数组结尾的所有元素被删除)

第三个参数及之后的任意个参数:

需要插入到数组中的元素(从第一个参数指定的位置开始插入)

 

由删除元素组成的数组(无:返回空)插入或删除元素是区别于concat(),slipce()会插入数组本身,不是数组的元素
push() 数组新的长度在数组的尾部添加一个或多个元素是允许将数组当做栈使用

pop()

无

删除的值

删除数组的最后一个元素,减小数组的长度

是

unshift()

多个参数:参数是一次性插入

数组新的长度

在数组的头部添加一个或多个元素

 

 

shift()

无

删除的元素

删除数组的第一个元素

 

 

toString()

 

 

 

 

将每个元素转化为字符串,并输出用逗号分隔的字符串列表

 

与不使用任何参数,调用join()返回的字符串相同

toLocaleString()

 

 

将每个元素转化为字符串,并使用本地化分隔符将字符串连接,生成最终的字符串

 

是toString()的本地化版本

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(2)ECMAScript5中的数组方法

 

大多数函数

第一个参数:函数,并且对数组的每个元素(或一些元素调用一次该函数)

第二个参数:可选(有:调用函数是第二个参数的方法)

调用提供的以下函数,使用三个参数:数组元素、元素索引、数组本身(通常只需要第一个参数)

 

ECMAScript5中的数组方法
方法名参数返回值用途是否修改原始数组
forEach()  从头至尾遍历数组,为每个元素调用指定的函数否(传递给这些方法的函数,可以修改原始数组)
map() 一个数组将调用的数组每个元素,传递给指定函数
filter()   
every()   
some()   
reduce()   
reduceRight()   
indexOf()   
lastIndexOf()    

 

 

 

 

 

 

 

 

 

 

 

 

 

(3)数组方法的应用

    // 数组去重
    function unique(arr) {
        return arr.filter(function(item, index, arr) {
            //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素
            return arr.indexOf(item, 0) === index;
        });
    }
    User=unique(User)

    //去重
    function uniqueFun(arr, type) {
        const res = new Map();
        return arr.filter((a) => !res.has(a[type]) && res.set(a[type], 1));
    }
    var userList1 = [];
    userList1 = uniqueFun(userList,"id");

 

 

 

 

  • 3、快速从一个巨大的数组中随机获取部分元素

比如:有个数组有100K个元素,从中不重复随机选取10K个元素。

实际用途:从大量用户中,随机获取抽奖用户!

 

 

 

 

思路:

从数组中抽取随机数(10个中随机抽取3个)

//从数组中随机抽取三个数
var arr=[12,23,30,46,65,67,79,80,93,103]
	var newArr=[]
	var random;
	for(var i=0;i<3;i++){
		random=Math.floor(Math.random()*arr.length)
		if(newArr.indexOf(arr[random])===-1){
			newArr.push(arr[random])
		}else{
			i--;
		}
	}
	console.log(newArr)

打乱现有数组,从打乱后的数组中获取需要的个数

console.time();//函数执行时间(开始)
//通过随机数,将数组随机排序

    let arr=[12,23,30,46,65,67,79,80,93,103]
	let newArr=[];
	let randomNum=[];
	let randomArr=(arr)=>{
		let random;
		for(let i=0;i<arr.length;i++){
			random=Math.floor(Math.random()*arr.length)
			if(newArr.indexOf(arr[random])===-1){
				newArr.push(arr[random])
			}else{
				i--;
			}
		}
	}

//从随机排列的数组中,取出需要的个数

	let getNumArr=(arr,num)=>{
		randomArr(arr)
		for(let i=0;i<num;i++){
			randomNum.push(newArr[i])
		}
	}
	getNumArr(arr,4)
	
	console.log(newArr)
	console.log(randomNum)

    console.timeEnd();//函数执行时间(结束)

自己思考的解决办法:(只是实现,但不是最优解)

//伪造一个100K的数组
    let mostArr=[]
	for(var i=0;i<100000;i++){
		mostArr.push(i+'Lottery')
	}
	console.time();
//洗牌100K数据的数组,取出前10K条数据
	let arr=mostArr
	let newArr=[];
	let randomArr=(arr)=>{
		let random;
		for(let i=0;i<arr.length;i++){
			random=Math.floor(Math.random()*arr.length)
			if(newArr.indexOf(arr[random])===-1){
				newArr.push(arr[random])
//由于洗牌完所有数据,耗时过长。所以洗牌足够10K条的时候,取出洗出的10K条数据
				if(newArr.length===10000){
					return;
				}
			}else{
				i--;
			}
		}
	}
	randomArr(arr)
	console.log(newArr)

	console.timeEnd();

//default: 354.42626953125ms

涉及知识:

随机数:

Math.random();  //0.0 ~ 1.0 之间的一个伪随机数。【包含0不包含1】
Math.floor();  //向下取整。

indexOf() :

  1. 返回某个指定的字符串值,在字符串中,首次出现的位置; 
  2. 对大小写敏感;
  3. 如果要检索的字符串值没有出现,则该方法返回 -1。
var str="Hello world!"
document.write(str.indexOf("Hello") + "<br />") //0
document.write(str.indexOf("World") + "<br />") //-1
document.write(str.indexOf("world")) //6

扩展知识:

Math.ceil();  //向上取整。

Math.floor();  //向下取整。

Math.round();  //四舍五入。

Math.random();  //0.0 ~ 1.0 之间的一个伪随机数。【包含0不包含1】 //比如0.8647578968666494

Math.ceil(Math.random()*10);      // 获取从1到10的随机整数 ,取0的概率极小。

Math.round(Math.random());   //可均衡获取0到1的随机整数。

Math.floor(Math.random()*10);  //可均衡获取0到9的随机整数。

Math.round(Math.random()*10);  //基本均衡获取0到10的随机整数,其中获取最小值0和最大值10的几率少一半

 

  • 4、60秒获取验证码

为什么要有获取验证码?

答:1、防止恶意刷网站  2、可以收集真实用户数据(手机号,邮箱)

 

 

涉及知识:

 

 

 

  • 5、变量作用域、函数自执行

var name = 'Tom';
(function() {
    if (typeof name == 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();

答:Hello Tom(错)

正确答案:Goodbye Jack

 

涉及知识:

var name = 'Tom';
(function() {
    if (typeof name == 'undefined') {
        let name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();
//Hello Tom

var name = 'Tom';
(function(name) {
    if (typeof name == 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})(name);
//Hello Tom

var name = 'Tom';
(function() {
    if (typeof name == 'undefined') {
        name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();
//Hello Tom

 

蓝桥杯国赛高效备赛:从每日一题到分赛道突破的系统策略 算法竞赛是检验编程与问题解决能力的重要途径,其核心在于通过系统训练掌握数据结构与算法原理。理解动态规划、搜索、贪心等基础算法模型,并熟练运用Python、C++等语言实现,是提升解题效率的关键。这些技术能力在软件开发、数据分析及嵌入式系统等工程实践中具有广泛应用价值。本文聚焦蓝桥杯这一国内知名赛事,结合**每日一题**和**嵌入式**等热词,深入探讨如何构建以目标为导向的备赛体系,涵盖软件、嵌入式、EDA等不同赛道的专项训练方法、资源规划与实战模拟策略,旨在帮助参赛者实现从无效刷题到高效提升的转变。 阅读详情

相关推荐

Leetcode每日一题396. 旋转函数

Leetcode每日一题396. 旋转函数

小羊的博客 868

不使用加减乘除,求一个数的7倍

C/C++面试题 #include using namespace std; int bit_add(int a, int b) { int carry = a & b; int noCarrySum = a ^ b; if (carry) return bit_add(carry << 1, noCarrySum); else

auvKone 3016

Java算法进阶:蓝桥杯每日一题训练体系与国赛核心考点精讲

算法是计算机科学的核心基础,其本质是通过一系列指令高效解决特定问题的计算模型。理解算法原理,关键在于掌握数据结构与逻辑控制,这直接决定了程序的性能与可靠性。从工程实践角度看,算法能力是开发者解决复杂问题、优化系统性能的核心竞争力,广泛应用于搜索引擎、推荐系统、大数据处理等场景。对于Java开发者而言,系统化训练是提升算法实战能力的关键。本文聚焦于通过结构化、目标导向的刻意练习路径,帮助学习者攻克算法学习瓶颈。项目以蓝桥杯和国赛为训练目标,深入剖析了动态规划、搜索算法等核心考点,并提供了高效的五步训练法,旨在

weixin_33895657的博客 738

算法题:不使用+-×/求一个数的7倍

#include <iostream> #include <stdlib.h> #include <stdio.h> using namespace std; int Grial(int n) { int a=n<<3; int b=a&(-n); int temp; a=a^(-n); while(b!=0) { b=b<<1; te

liuhuiyan_2014的专栏 1177

实现高效工作的每日工作汇总表模板

明确每个团队成员的角色和责任是优化工作流程的关键。这样做不仅能够确保每个人都了解自己的职责,还能够减少职责重叠和潜在的冲突。工作汇总表是记录角色和责任分配的完美场所。团队可以根据任务的不同阶段和类型,分配不同的责任给相应的成员。在IT行业,持续学习和自我提升是职业发展的核心。反思记录是一种有效的学习工具,它帮助我们理解过去的经历、评估当前的状况,并为未来规划方向。为了更有效地进行工作成果的总结和问题的识别,我们需要对完成的任务和经历的挑战进行全面的分析。

weixin_35815766的博客 1681

软件缺陷(定义+表现形式+优先级+信息+产生原因),看完这篇文章就懂了

软件缺陷软件缺陷的定义软件缺陷的表现形式软件缺陷产生的原因软件缺陷的根源软件缺陷的费用软件缺陷的信息 软件缺陷的定义 IEEE 1983 of IEEE Stardard 729中软件缺陷做了一个标准的定义: 从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题;从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。 因此软件缺陷就是软件产品中所存在的问题,最终表现为用户所需要的功能没有完全实现,没有满足用户的需求。 缺陷不是bug,缺陷包含bug,缺陷的范围更大。 软件缺陷

qq_40676418的博客 1万+

不用加减乘除求两个数的和

public class Solution { public int Add(int num1,int num2){ while (num2!=0) { int temp=num1^num2; num2=(num1&amp;amp;num2)&amp;lt;&amp;lt;1; num1=temp; }...

ZCC的专栏 1710

Blender地形建模实战:5步搞定Gazebo仿真地形(附避坑指南)

本文提供了一份详细的Blender地形建模实战指南,旨在帮助开发者快速创建Gazebo仿真地形。文章通过五个核心步骤,从环境准备、地形雕刻、模型优化导出,到创建Gazebo模型包及问题排错,系统讲解了如何将Blender中的地形模型成功导入Gazebo进行机器人仿真,并重点分享了关键的避坑经验。

weixin_28475533的博客 345

【每天学一点】如何高效工作,进行项目管理

周六去了一个公益讲座,然后就是光环国际的PMP课程的推荐,介绍,然后就关注了公众号,那就开始每天学一点吧: 好的项目管理工具,需要团队所有人都受益: 一:找到合适的工具: 1.对领导,可掌控项目的整体情况。 查看整体汇总情况能看到项目成员的任务情况能看到项目的迭代情况可以看到项目文档备案汇总的情况 2.对员工,可以掌握自己的具体工作。 每天需要看到自己需要做什么,这几天

janny_flower的博客 4587

IFIX数据库Datebase当前值问号

IFIX数据库Datebase当前值问号,已解决,亲测有效 在OPC PowerTool有数据的情况下,IFIX数据库Datebase当前值显示???? 问题分析及解决方法 我的IFIX5.8版本,其它版本可参考 打开IFIX工作台:应用程序–任务控制–I/O驱动–OPC Client;查看OPC驱动是否被禁用,点击启动,变成激活状态即可;若点击启动无法激活OPC驱动,需要重新安装OPC驱动,方法如下: 下载I/O Driver文件 下载链接:https://download.youkuaiyun.com/down

Ron_Tso的博客 2759

[系统安全] 十一.那些年的熊猫烧香及PE病毒行为机理分析

如果你想成为一名逆向分析或恶意代码检测工程师,或者对系统安全非常感兴趣,就必须要认真分析一些恶意样本。熊猫烧香病毒就是一款非常具有代表性的病毒,当年造成了非常大的影响,并且也有一定技术手段。本文将详细讲解熊猫烧香的行为机理,并通过软件对其功能行为进行分析,这将有助于我们学习逆向分析和反病毒工作。后续作者还将对其进行逆向调试,以及WannaCry勒索蠕虫、各种恶意样本及木马的分析。基础性文章,希望您喜欢!同时,本文部分实验参考姜晔老师的视频分析,真的非常佩服和值得去学习的一位老师。技术路上哪有享乐,为了提升安

杨秀璋的专栏 7327

【每日一题】——移除元素

移除数组题目解析,包含图文分析,最后包含C语言代码

PH_modest的博客 606

【K8S系列】Kubernetes 中 Service 的流量不均匀问题【已解决】

在 Kubernetes 中,Service 是一种抽象,用于定义一组 Pod 的访问策略。当某些 Pod 接收的流量过多,而其他 Pod 的流量较少时,可能会导致负载不均衡。这种情况不仅影响性能,还可能导致某些 Pod 过载,影响应用的可用性。本文将详细分析此问题的原因及其解决方案。

颜淡慕潇 8738

leetcode 每日一题机器人推送

建议每日一题

ronething的博客 682

Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知

Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知 文章目录Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知1.实现思路2.新增钉钉机器人并测试消息的发送2.1.新增钉钉机器人2.2.测试发送消息到钉钉3.在Jenkins中新建一个构建任务3.1.新建任务3.2.配置任务时增加参数化构建过程3.3.配置任务添加git地址3.4.配置构建触发器生成gitlab webhook使用的token3.5.配置任务构建过程中执行的She

江晓龙的博客 3809

【现代人形机器人:从物理建模到大模型驱动的控制与学习】第1章 机器人建模回顾

本章建立读者进行后续控制 / 优化 / 学习工作的数学与计算基础。内容分为三大块:刚体运动学:位姿表示、坐标变换、旋转参数与李代数/李群(指数映射、twist)多关节机构的正/逆运动学:DH 与 POE 两种建模、雅可比矩阵推导、数值/解析逆解方法与奇异性问题约束动力学:拉格朗日公式、牛顿—欧拉递归算法、接触/冲击模型、受约束系统的方程(拉格朗日乘子与互补性条件)每一节同时给出与练习题。假设读者已具备线性代数(矩阵、特征分解、SVD)、多变量微积分与基础力学(牛顿第二定律)知识。

u012133341的博客 185

探索算法之旅:LeetCode每日一题推送器——代码学习的智能伙伴

探索算法之旅:LeetCode每日一题推送器——代码学习的智能伙伴 在编程的世界里,持续的学习和实践是通往卓越的不二法门。今天,我们要向大家推荐一个旨在提升编码技能的开源宝藏项目——《LeetCode每日一题推送》。这个项目巧妙地将LeetCode的挑战融入日常,通过自动化推送机制,帮助开发者养成每日解题的习惯,让技术成长变得轻松而有趣。 项目介绍 《LeetCode每日一题推送》是一款专为程序员...

gitblog_00325的博客 389

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【蓝桥Java每日一题】——13.仅仅反转字母

Java日常每日一题,力扣每日一题打卡,每日坚持,滴水穿石!

执梗的博客 2962

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

atitit 部门日常工作流程体系 日常日程表 日常工作内容列表清单.docx

atitit 部门日常工作流程体系  日常日程表 日常工作内容列表清单.docx     多维度 每次》》每日》》每周》》每月》》每季度》》每年》》五年计划》》十年计划     2017/11/21  11:11              .. 2017/11/21  11:11                 0 all.txt 2017/11/21  11:01        

attilax的专栏 1145

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【每日一题一期】日常算法题题集

每日一题一期题单链接:Click Here 每道题的题解会由博主做完以后总结然后发布的 时间 题号 题解 来源 算法备注 3月25日 NC50439 村人B 牛客练习赛50-C 优先队列 + 排序 3月26日 NC13230 村人B 美团2017年CodeM大赛-初赛A轮 区间DP,区间DP小结 3月27日 NC15553 村人B,满天星 2018年长沙理工大学程序设计...

橘嘉禾 82

4月每日一题

4月每日一题0406每日一题0407每日一题0408每日一题0409每日一题0412每日一题0413每日一题0414每日一题0415每日一题0419每日一题0420每日一题0421每日一题0422每日一题0423每日一题 0406每日一题 关于控制文件,以下说法正确的是: A.在open阶段才会需要控制文件,并且根据控制文件记录的去验证数据文件 B.可以手动直接修改控制文件内不符合文件实际路径的记录 C.在数据库运行过程中,会持续更新控制文件的内容 D.当控制文件所在磁盘损坏导致后台进程无法写入控制文件时,

喝醉酒的小白 296

把刷题变成可追踪的系统:牛客Tracker与每日一题实战

在算法学习与编程面试准备中,许多人的困境并非缺乏意志力,而是缺少一套让努力可见的追踪与反馈机制。学习追踪系统的核心原理,是将模糊的“刷题”目标拆解为可记录、可分类、可复盘的数据任务,通过状态流转与标签分析,精准定位薄弱环节。技术价值在于把感觉转化为数据,让进步被量化、让复习有依据。这一方法广泛应用于日常刷题、阶段性复盘以及面试前冲刺等场景。牛客tracker与每日一题正是落地该体系的优秀载体:前者提供数据结构与状态管理,后者维持稳定的练习节奏,二者配合形成“追踪—反馈—优化”的闭环,帮助学习者从低效重复走向

weixin_32466193的博客 245

leetcode每日一题Day2——344. 反转字符串

leetcode每日一题Day2——344. 反转字符串

VLOKL的博客 975

运维日常工作100条

这份《运维日常工作100条》清单全面覆盖了运维工程师的日常工作要点,分为八大类:日常巡检、变更管理、故障处理、安全合规、性能优化、文档管理、自动化工具和职业发展。清单强调监控巡检、规范操作、应急预案、安全加固等核心工作,并提倡自动化、标准化和知识沉淀。建议根据实际需求制定日检/周检/月检计划,将要点融入日常流程,建立高效稳定的运维体系。该清单既可作为工作指南,也能帮助查漏补缺,提升整体运维质量。

qq_39741838的博客 1298
上一篇: select多选 ztree多选
下一篇: ztree右击(点击图标)‘上移、下移、置顶、置底’
sunshinefcc
博客等级 码龄10年 17粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值