若干小知识点记录

目录

1. 登陆网站默认首页(index.jsp)先访问action再转到jsp页面的方法

2. 简易MD5加密程序

3. 使用jquery实现在iframe引用的子页面访问父页面的元素

4. html文本过长部分显示为省略号

5. Oracle数据表中插入日期型数据

6. mysql初次安装更改默认的空密码(解压缩版简单安装步骤)

7. jsp页面的图片路径包含中文时在tomcat服务器下的显示问题

8.模糊查询占位符?的使用

9.mysql中按照中文列排序问题

10.js获取一个月有多少天

11.使用swfupload插件无法获取session在SSH下的解决方法

12.获取请求者ip地址的方法

13.解决jQuery与其它javascript库对"$"的使用冲突

14.页面回车事件触发表单提交

15.div中的内容超过设定宽度自动换行的css

16.调用window.location.reload()方法浏览器弹窗问题

17.用jsp返回XML如何写HTTP头

18.mySql禁用和重启外键约束

19.易忽略的乱码问题原因

20.不同编码程序间提交表单解决编码问题

21.DOM节点是否绑定事件的jquery验证

22.各种浏览器兼容的onbeforeunload实现

23.url中包含中文及特殊字符的编解码

24.jQuery ajax常用模板

25.简单遮罩层的实现

26.网址js正则表达式

27.让页面在兼容模式下有更好的表现需要的设置


一、登陆网站默认首页(index.jsp)先访问action再转到jsp页面的方法

    在index.jsp添加标签<meta http-equiv=’refresh’ content=’0;url=yourAction.action’>,index.jsp相当于一个假的首页,在action中指定转到的页面。


二、简易MD5加密程序

public static String encrypt_md5(String srcStr) {
        String hexStr = "0123456789abcdef";
        String result = "";
        try {
            java.security.MessageDigest md5 = java.security.MessageDigest.
                getInstance("MD5");
            md5.update(srcStr.getBytes());
            byte bytes[] = md5.digest();
            for (int i = 0; i < bytes.length; i++) {
                int temp = bytes[i] < 0 ? bytes[i] + 256 : bytes[i];
                result = result + hexStr.charAt( (temp / 16) % 16) +
                    hexStr.charAt(temp % 16);
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return result;
}


三、使用jquery实现在iframe引用的子页面访问父页面的元素

    $("#test",parent.document),以上为获取父窗体中id为test的对象。


四、html文本过长部分显示为省略号

    添加以下代码,当文本长度超过指定范围之后将超出的部分以省略号形式显示。

white-space:nowrap;
overflow: hidden;
text-overflow:ellipsis;


五、Oracle数据表中插入日期型数据

INSERT INTO TABLE VALUES(to_date('2007-12-20 18:31:34','YYYY-MM-DD HH24:MI:SS'));


六、mysql初次安装更改默认的空密码

1. 启动mysql服务之后首先进入数据库:mysql –u root –p,回车后会提示输入密码,这是密码为空,直接回车即可进入mysql数据库。

2. 选择mysql数据库:use mysql;

3. 执行密码修改语句:update user set password=PASSWORD('root') where user='root';

4. 刷新以使密码生效:flush privileges;

5. 退出数据库(quit)重新登录验证新密码即可;

6. 查看mysql数据库编码命令:show variables like 'character%';

    解压缩版简单安装步骤:

1.mysql5.6.x解压到任意目录下

2.my-default.ini改名为my.ini,进行如下配置:

[client]
port=3306
default-character-set=utf8

[mysqld]
port=3306
character_set_server=utf8
basedir="mysql文件夹的根目录"
datadir="mysql文件夹根目录下data文件夹目录"
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

3.以管理员身份运行cmd.exe,进入mysql文件夹下的bin文件夹下。

4.在cmd窗口输入服务安装命令:mysqld install MySQL --defaults-file="my.ini文件路径"。

5.运行mysql启动命令:net start mysql,全部操作完成。


七、jsp页面的图片路径包含中文时在tomcat服务器下的显示问题

    在tomcat的server.xml文件的Connector标签中添加URIEncoding=“jsp网页的编码格式”,之后jsp页面的图片即可正常显示。


八、模糊查询中占位符?的使用

    模糊查询的sql语句按照常规思路写成如下形式是不行的:

String sql = "select * from table where name like '%?%'";
    正确形式是:

String sql = "select * from table where name like ?";
    然后设置参数,xxx.setString(1,"%" + parameter + "%");多提一点就是不同对象设置参数的方法不同,有的是setString(x,x);有的是setParameter(x,x);有的索引从1开始,有的索引从0开始。还要注意,set参数的时候单引号是不需要的,多加了会导致出错。


九、mysql中按照中文列排序问题

    ①如果采用UTF-8编码,将中文排序的时候得不到我们想要的按照中文的拼音字母顺序排序的结果。可以采用如下方式解决:

SELECT * FROM table ORDER BY CONVERT( chinese_field USING gbk ) ;

    ②如果使用hibernate访问数据库,因为hibernate不支持CONVERT方法,所以以上内容写成hql语句会报错。要实现相同的目的需要新建一个类继承hibernate的MySQLDialect类,具体内容如下:

import org.hibernate.dialect.MySQLDialect;
import org.hibernate.dialect.function.SQLFunctionTemplate;
import org.hibernate.type.StringType;

public class MyISAMDialect extends MySQLDialect {
	public MyISAMDialect(){  
        super();
        registerFunction("convert", new SQLFunctionTemplate(StringType.INSTANCE, "convert(?1 using gbk)"));
    }
	@Override  
    public String getTableTypeString() {
        return "engine=MyISAM";
    }
}

    convert(?1 using gbk)可以换成convert(?1 using ?2),取决于是不是固定gbk这个编码集。

    配置hibernate方言的时候将指定的类从hibernate提供的MySQLDialect替换成自己实现的MyISAMDialect。

    使用的时候hql语句如下:

from User as u order by convert(u.name);
    如果使用了动态编码集,则hql语句如下:
from User as u order by convert_mine(u.name,'gbk');


十、js获取一个月有多少天

  思路:构造Date对象指向下一个月的第一天,然后用Date对象的getDate()方法获得它的前一天是几号,这个数字就是要求的月份的天数。

function get_day_count(){
	var now = new Date();
	var year = now.getFullYear();
	var month = now.getMonth();
	month++;
	if(month == 12){ //月份数从0到11,如果月份加1等于12,则进入下一年的1月份
		month -= 12;
		year++;
	}
	var new_day = new Date(year,month,1);//构造一个新的日期指向下个月的1号
	var day_count = (new Date(new_day.getTime() - 1000*60*60*24)).getDate();
	return day_count;
}

十一、使用swfupload插件无法获取session在SSH下的解决方法

    网上还有很多其他方法,但是这个最简单,所以记录一下。在SSH架构的java web项目下有效,其他环境下未测试。

    设置上传文件处理路径的时候加上jsessionid即可:

upload_url: "dealUpload.action;jsessionid=<%=request.getSession().getId()%>",

十二、获取请求者ip地址 的方法

private String getIpAddr() {
	HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);
	String ip = request.getHeader("x-forwarded-for");
	if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
		ip = request.getHeader("Proxy-Client-IP");
	} else { //如果经过多重反向代理返回多个ip地址,这些ip地址用“,”分隔,第一个是真正的ip地址
		if (ip.indexOf(",") != -1) {
			ip = ip.substring(0,ip.indexOf(","));
		}
	}
	if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
		ip = request.getHeader("WL-Proxy-Client-IP");
	}
	if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
		ip = request.getRemoteAddr();
	}
	return ip;
}

十三、解决jQuery与其它javascript库对"$"的使用冲突

<script src="other.js"></script>
<script src="jquery.js"></script>
<script>
    jQuery.noConflict();
</script>
    首先引入引起冲突的其它js库(这里是other.js),然后引入jQuery库,然后调用.noConflict()方法让出$使用权,然后在自定义脚本中使用jQuery取代$即可正常使用jQuery的功能。

    这种情况下有一个可以在.ready()使用$的小技巧,如下所示:

jQuery(document).ready(function($){
    //这里可以正常使用$了
});


十四、页面回车事件触发表单提交

    一般来说,如果页面中有submit按钮,或者页面只有一个type为text的input表单,在这个页面按下回车键会导致表单提交,更具体的触发原理自行搜索。如果要禁止这样的默认行为可以采取如下方式:

    ①如果页面没有submit按钮,而只有一个<input type="text" />,可以添加一个隐藏的<input type="text" style="display:none" />;

    ②更通用的做法是在jquery的$(document).ready(function(){})中注册以下监听事件:

$("#form").keypress(function(e){  
	if (e.which == 13){    
		return false;  
	}
});

十五、div中的内容超过设定宽度自动换行的css

    一般来说如果指定了div的width属性(指css属性),当单行的内容长度超过width时会自动换行,但是如果在该自动换行的地方出现的是英文单词或者连续的英文字母,则默认在一组英文字母完成之后才会换行,这就可能导致页面排版问题。在div的一行末尾强制换行可以采用如下css代码:

    word-break:break-all;

    word-wrap:break-word;


十六、调用window.location.reload()方法浏览器总是弹窗问题的解决

    通过提交form表单的方式进入某个页面之后,在这个页面调用window.location.reload()方法,通常会触发浏览器弹窗询问是否重新发送上次提交的信息。如果不想弹出窗口可以用如下代码代替reload()方法。

window.location = window.location.href;
    这个方法有效的前提是form表单是通过get方式提交的。说白了就是用url提交参数的方式代替form表单提交参数,从而避免浏览器的弹窗提醒。当满足以下几个条件时多使用url提交参数可以有效避免刷新页面导致的浏览器弹窗困扰。

    ①参数不必对外保密。url提交参数是客户可见的。

    ②参数个数不多。

    ③参数内容不是很长。

    后两条是基于一个原因的,那就是get方式不适于数据量特别大的参数提交。如果当前页面是通过post方式提交表单到达的,那还是想别的办法禁止刷新吧(例如Struts2的token标签)!


十七、用jsp返回XML如何写HTTP头

response.setHeader("Cache-Control", "no-cache");
response.setHeader("Content-Type","text/xml; charset=UTF-8");

十八、mySql禁用和重启外键约束

-- Disable foreign key checks
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
-- Re-enable foreign key checks
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

十九、易忽略的乱码问题原因

    通过设置“文件内”各处的编码方式均不能解决乱码问题时,可能是文件本身的编码方式存在问题。尝试使用记事本打开文件,以原文件名“另存为”的时候选择编码方式(ANSI或UTF-8)。很可能这才是解决之道。

二十、不同编码程序间提交form表单解决编码问题

    以gb2312页面提交表单到utf-8编码的程序为例。在gb2312页面的form中添加:accept-charset="utf-8"οnsubmit="document.charset='utf-8';",如:
<form method="post" action="2.php"accept-charset="utf-8"οnsubmit="document.characterSet='utf-8';">
这样一来,ie、ff、opera、google等主流浏览器都欣然接受了。但是当提交后直接后退这又出现新问题了,form页面变成乱码,再在gb2312页面的<head></head>之间加上如下代码:
<script>
if(document.charset!="gb2312" &&navigator.userAgent.indexOf("MSIE")>0){
      window.location.reload();
}
</script>


二十一、DOM节点是否绑定事件的jquery验证

    函数格式:$._data(element,"events")[type]

    例如判断id为“name”的元素是否绑定有click事件:

    $._data($("#name").get(0),"events")["click"]

    如果命题为真,返回object对象,如果命题为假,返回空。

    需要特别注意的是,只有先给element绑定了事件之后,再调用上述函数才会得到object对象,否则会得到“$._data(...) is undefined”异常。而且事件只有调用jquery方法绑定才有效,在标签上定义onclick事件对上述函数的调用结果没有影响。

    说明:网络上比较普遍的解决方法如下

jQuery.data(elem,"events")[type] //老版本也能用 
$(elem).data("events")[type] //1.2.3以后才能用
    貌似jQuery1.8之后上述方式都失效了,还有说用$(element).attr(type)判断的,我在jQuery1.10上验证也无效,不知道从哪个版本开始失效的。而本例中所用的方式,从写法上看就知道是个不提倡的内部方法,在目前最新的1.11.0还可以用(1.7~1.11均验证可用)。但是随着版本升级,这个方法被改写的风险也比较大。所以使用中要针对jQuery版本做好测试,并时刻关注最新的解决方案。

二十二、各种浏览器兼容的onbeforeunload实现

window.οnbefοreunlοad=function(){
    if(true){
      //some code  
    }
}
    特别说明:在some code处使用ajax与后台进行交互时,firefox浏览器中ajax得不到执行,ie、chrome、opera浏览器下都能正常执行。如果在some code的末尾添加return语句,弹出对话框提醒用户是否离开当前页面,则firefox下的ajax也能正常执行。推测原因是firefox在处理“关闭浏览器”与“执行ajax请求”的时序上存在问题(基于firefox30的测试)。

二十三、url中包含中文及特殊字符的编解码

    通常将页面、服务器端编码格式设置一致后,即使url的参数中包含中文也没有问题,但是现在有一种特殊需求。url的参数中包含另一个url,例如:url=http://www.hahh.com/project/index.jsp?myUrl=http://www.hehh.com/project/index.jsp?a=时间&b=fas。这时后台在获取myUrl这个参数的时候就会出现问题。解决办法是浏览器端对myUrl进行escape()编码,将其中的特殊字符转义,后遗症是如果myUrl中包含中文,经过js编码后台获取的时候又会出现问题(得到null)。终极解决方案是浏览器端进行两次escape()编码,服务器端(java)使用特定工具类解码。

    整个过程如下:

var myUrl = 'http://www.hehh.com/project/index.jsp?a=时间&b=dfa';
var url = 'http://www.hahh.com/project/index.jsp?myUrl=' + escape(escape(myUrl));
//然后通过某种方式请求url

JAVA工具类代码

	/**
	 * JavaScript escape/unescape 编码的 Java 实现
	 * author jackyz
	 * keep this copyright info while using this method by free
	 */
    private final static String[] hex = {
        "00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F",
        "10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F",
        "20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F",
        "30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F",
        "40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F",
        "50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F",
        "60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F",
        "70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F",
        "80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F",
        "90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F",
        "A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF",
        "B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF",
        "C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF",
        "D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF",
        "E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF",
        "F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"
    };
    private final static byte[] val = {
        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
        0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
        0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
        0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F
    };
    public static String escape(String s) {
        StringBuffer sbuf = new StringBuffer();
        int len = s.length();
        for (int i = 0; i < len; i++) {
            int ch = s.charAt(i);
            if (ch == ' ') {                        // space : map to '+' 
                sbuf.append('+');
            } else if ('A' <= ch && ch <= 'Z') {    // 'A'..'Z' : as it was
                sbuf.append((char)ch);
            } else if ('a' <= ch && ch <= 'z') {    // 'a'..'z' : as it was
                sbuf.append((char)ch);
            } else if ('0' <= ch && ch <= '9') {    // '0'..'9' : as it was
                sbuf.append((char)ch);
            } else if (ch == '-' || ch == '_'       // unreserved : as it was
                || ch == '.' || ch == '!'
                || ch == '~' || ch == '*'
                || ch == '/' || ch == '('
                || ch == ')') {
                sbuf.append((char)ch);
            } else if (ch <= 0x007F) {              // other ASCII : map to %XX
                sbuf.append('%');
                sbuf.append(hex[ch]);
            } else {                                // unicode : map to %uXXXX
                sbuf.append('%');
                sbuf.append('u');
                sbuf.append(hex[(ch >>> 8)]);
                sbuf.append(hex[(0x00FF & ch)]);
            }
       }
        return sbuf.toString();
    }
    public static String unescape(String s) {
        StringBuffer sbuf = new StringBuffer();
        int i = 0;
        int len = s.length();
        while (i < len) {
            int ch = s.charAt(i);
            if (ch == '+') {                        // + : map to ' ' 
                sbuf.append(' ');
            } else if ('A' <= ch && ch <= 'Z') {    // 'A'..'Z' : as it was
                sbuf.append((char)ch);
            } else if ('a' <= ch && ch <= 'z') {    // 'a'..'z' : as it was
                sbuf.append((char)ch);
            } else if ('0' <= ch && ch <= '9') {    // '0'..'9' : as it was
                sbuf.append((char)ch);
            } else if (ch == '-' || ch == '_'       // unreserved : as it was
                || ch == '.' || ch == '!'
                || ch == '~' || ch == '*'
                || ch == '/' || ch == '('
                || ch == ')') {
                sbuf.append((char)ch);
            } else if (ch == '%') {
                int cint = 0;
                if ('u' != s.charAt(i+1)) {         // %XX : map to ascii(XX)
                    cint = (cint << 4) | val[s.charAt(i+1)];
                    cint = (cint << 4) | val[s.charAt(i+2)];
                    i+=2;
                } else {                            // %uXXXX : map to unicode(XXXX)
                    cint = (cint << 4) | val[s.charAt(i+2)];
                    cint = (cint << 4) | val[s.charAt(i+3)];
                    cint = (cint << 4) | val[s.charAt(i+4)];
                    cint = (cint << 4) | val[s.charAt(i+5)];
                    i+=5;
                }
                sbuf.append((char)cint);
            }
            i++;
        }
        return sbuf.toString();
    }

    然后就能正常获取url参数了。

System.out.println(SomeClass.unescape(request.getParameter("myUrl")));

二十四、jQuery ajax常用模板

$.ajax({
    url: 'att/pic/AttPicAction!findCheckedNum.do',
    type: 'POST',
    //data:{Name:"keyun"},
    dataType: 'json',
    error: function(XMLHttpRequest, textStatus, errorThrown){
        var error = "XMLHttpRequest.status: " + XMLHttpRequest.status +
                    "\nXMLHttpRequest.readyState: "+ XMLHttpRequest.readyState +
                    "\ntextStatus: "+ textStatus;
        alert(error);
    },
    success: function(result){
	$("#checkedNum").text(result["num"]);
    }	
});

二十五、简易遮罩层实现

<style type="text/css">
#page_mask{
    visibility: hidden;
    width: 100%;
    height: 100%;
    position: fixed;
    top: 0px;
    left: 0px;
    display: block;
    z-index: 999;
    background-color: rgb(0, 0, 0);
    opacity: 0.7;
    color: yellow;
}
</style>
<script type="text/javascript">
    //显示遮罩层
    $(document).on("some event",function(){
        $("#page_mask").css("visibility","visible");
    });
</script>
<div id="page_mask"  style="vertical-align: middle;">
    <div style="position:absolute;top:50%;left:50%;">
	<p style="margin-left:-75px;margin-top:-30;">程序处理中,请稍候......</p>
	<p><img src="images/ld.gif"></p>
    </div>
</div>

二十六. 网址js正则表达式

var regExp = /((^http)|(^https)|(^ftp)):\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;

二十七.让页面在兼容模式下有更好的表现需要的设置

    在titile下添加以下声明,它表示在兼容模式下,ie将使用最高版本的引擎渲染页面。当然也能制定IE=7或者IE=8、IE=9来指定渲染引擎。

<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值