为了账号安全,请及时绑定邮箱和手机立即绑定

开发运维日常

标签:
JavaScript

注意:



1、jstl 不能获取 ${xx.isXXX}的值

is=get

有异常




2、Parameter 'XXX' not found. Available parameters are [1, 0, param1, param2]


修改前的代码:


@Select("select * from fruitsell where f_id=#{f_id} and u_id=#{u_id}")

public Fruitsell finbyfruitsell(Long f_id,Long u_id);


修改后的代码:

@Select("select * from fruitsell where f_id=#{0} and u_id=#{1}")

public Fruitsell finbyfruitsell(Long f_id,Long u_id);

2018年3月更新=======


之前写的方法有好多问题,现在更新在更新一下 


@Select("select * from fruitsell where f_id=#{f_id} and u_id=#{u_id}")

public Fruitsell finbyfruitsell(@Param("f_id") Long f_id,@Param("f_id") Long u_id);

加一个@Param注解就可以了


3、jQuery获取选中单选按钮radio的值_jquery

<tr>

<td valign="middle" align="right">所属机房:</td>

<td valign="middle" align="left" id="td1">

<c:forEach items="${idcs}" var="idc" varStatus="i">

input type="radio" class="inputgri" name="idcId" value="${idc.id}">${idc.idcName}

</c:forEach>

</td>

</tr>



4、Ajax用法

$(function(){

  $(":radio").click(showThisVal);

});  

function showThisVal(){

$("#serverId").load("/system/server/findByIdcId.do",'idcId='+$(this).val());

}


5、response 乱码

PrintWriter 一定要在setCharacterEncoding 字符集后实现

//这句话的意思,是让浏览器用utf8来解析返回的数据  

response.setHeader("Content-type", "text/html;charset=UTF-8");  

//这句话的意思,是告诉servlet用UTF-8转码,而不是用默认的ISO8859  

response.setCharacterEncoding("UTF-8");  

String data = "中国";  

PrintWriter pw = response.getWriter();  

pw.write(data);  


3、JSTL通过数值key访问map的陷阱


https://blog.csdn.net/goldenfish1919/article/details/7332992






4、no mapping

1、web.xml 的classpath:spring.xml

其中 spring.xml 的路径是否正确

2、

5、<script>标记互斥

要么使用src属性引用外部js文件

要么在标记内自己写js代码

6、事件绑定:


静态绑定: 元素.click(function(){})


动态绑定: 父元素.on("click","li",fn)


动态绑定是指动态添加的DOM节点或者html元素,他们最开始时运行的时候是不存在的。如果要给这些动态加入的节点增加事件,就必须要用jquery的on方法来绑定事件。 


元素.click();

7、jQuery 数据 - jQuery.data() 方法

从元素返回数据

从被选元素中返回附加的数据。

语法

$(selector).data(name)


向元素附加数据

向被选元素附加数据。

语法

$(selector).data(name,value)

参数 描述

name 必需。规定要设置的数据的名称。

value 必需。规定要设置的数据的值。

使用对象向元素附加数据

使用带有名称/值对的对象向被选元素添加数据。

语法

$(selector).data(object)

8、字符串转jq对象

// 其中$(text)就text字符串转为了一个Jquery对象

var $li=$(sli);

9、Dao接口的传值特点

mybatis 中 Dao方法要么没有参数,要么一个参数,多个参数做成集合,或者对象

public inerface Dao(){

public void fn();

public void fn(String str);

public void fn(Map map);

public void fn(User user);

}

10、搜索所有段落中的后代 span 元素,并将其颜色设置为红色:


$("p").find("span").css('color','red');

定义和用法

find() 方法获得当前元素集合中每个元素的后代,通过选择器、jQuery 对象或元素来筛选。


语法

.find(selector)

参数 描述

selector 字符串值,包含供匹配当前元素集合的选择器表达式。

11、向第一个 p 元素添加一个类:

$("button").click(function(){

  $("p:first").addClass("intro");

});

定义和用法

addClass() 方法向被选元素添加一个或多个类。


该方法不会移除已存在的 class 属性,仅仅添加一个或多个 class 属性。


提示:如需添加多个类,请使用空格分隔类名。


语法

$(selector).addClass(class)

参数 描述

class 必需。规定一个或多个 class 名称。



12、UEdit 百度开发

用js 开发的开源组件

通过js代码实现表单功能的增强

1引用脚本

2实例化

3通过<script>引用

4、um.setContent("str");

5、um.getContent();


13、 chrom 读不到最新的js

 F12后按F1,出现设置界面,勾选Network下的Disable cache选项:




14、js 操作cookie

//获取指定名称的cookie的值

function getCookie(objName) {

//得到分割的cookie名值对

var arrStr = document.cookie.split("; ");

for ( var i = 0; i < arrStr.length; i++) {

//将名和值分开    

var temp = arrStr[i].split("=");

if (temp[0] == objName)

return unescape(temp[1]);

}

return "";

}


//添加cookie

function addCookie(objName, objValue, objHours) { 

var str = objName + "=" + escape(objValue);

//为0时不设定过期时间,浏览器关闭时cookie自动消失

if (objHours > 0) { 

var ms = objHours * 3600 * 1000;

var date = new Date();

date.setTime(date.getTime() + ms);

str += "; expires=" + date.toGMTString();

}

document.cookie = str;

}


//两个参数,一个是cookie的名字,一个是值

function setCookie(name, value) {

//此 cookie 将被保存 30 天

var Days = 30; 

var exp = new Date();

exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);

document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString();

}


//删除cookie

function delCookie(name) {

var exp = new Date();

exp.setTime(exp.getTime() - 1);

var cval = getCookie(name);

if (cval != null) {

document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();

}

}




15、

以滑动方式显示隐藏的 <p> 元素:

$(".btn2").click(function(){

  $("p").slideDown();

});



16、点击显示,再一次点击隐藏

//显示笔记下拉菜单

$("#note_ul").on("click",".btn_slide_down",function(){

var $div = $(this).parents('li').children('.note_menu');

if($div.is(':hidden')){

$div.slideDown();

}else{

$div.slideUp();

}

})




17、ajax返回数据成功 却进入error方法

url:"/share/add.do",

type:"post",

data:{}

dataType: "json",

success:,

error:

检查有没有写错,

返回的数据类型和你设置的是否一致。。。参数类型是否和你实际的一致。。。

把type:json去掉就好了

或者是跨域,要用jsonp

async: false, 加个这个再试试

https://blog.csdn.net/zwk199024/article/details/53032621

总结:

使用JQuery的ajax中,dataType返回数据使用json,后台传过来的一定是严格的JSON格式!

也就是说必须要这种格式的:

{ "键" : "值" , "键" : "值" } ;


18、模拟点击

$("#a").click();


19、jquery实现回车键触发事件

键盘事件有3:

keydown,keypress,keyup,分别是按下,按着没上抬,上抬键盘 。

正确代码为:

$(document).keyup(function(event){

  if(event.keyCode ==13){

$("#submit").trigger("click");

  }

});

推荐:keyup,防止笔记本键盘不小心触摸到了


1.有些文档中有写成这样:

$("#search_note").keydown(function(event){

var code = event.keyCode;

if(code==13){

发送ajax

}

})

XP系统IE6下是不成功的。


2.还有INPUT的

$("input").keydown(function(){

...

})

这种情况要在input获取焦点时候,才能监听到键盘事件。

20、显示和隐藏

$("#pc_part_2").hide();

$("#pc_part_6").show();


21、清空

$("#search_note_ul").empty();


22、SELECT 到文件

select id,systime,v2,v21,v75 from real_sse where id = 'ICE.SSE.510050.S' and v21=20180524 into outfile 'c:\\zongxuan.txt'





23、Tomcat集群

要开启session 共享

5个左右 的tomcat

太多了 都在互怼session 信息  性能反而下降




24、分布式:

把系统按照模块拆分成多个子系统

模块使用接口通信,降低模块之间的耦合度

把项目拆分成若干个子项目,不同的团队负责不同的子项目

增加功能时只需要再增加一个子项目,调用其他系统的接口就可以

可以灵活的进行分布式部署

系统之间交互需要使用远程通信,接口开发增加工作量

各个模块有一些通用的业务逻辑无法共用

25、soa 架构

面向服务的架构,就是把功能拆分成服务层、表现层,两个工程,

服务层中包含业务逻辑只需要对外提供服务、

表现层只需要处理和页面的交互业务逻辑都是调用服务层的服务来实现


26、maven 打包

jar

war

war 部署tomcat

pom

pom工程一般都是父工程,管理jar包的版本 maven插件的版本 统一的依赖管理 聚合工程

27、网页导入 jq库

var jquery = document.createElement('script');

jquery.src = "https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js";

document.getElementsByTagName('head')[0].appendChild(jquery);

jQuery.noConflict();


 ////解决库冲突

28、mysql url

jdbc:mysql://127.0.0.1:3306/dbdaseName?useUnicode=true&characterEncoding=UTF8

userUnicode canshu  指定这个链接数据库的过程中,使用的字节集是Unicode字节集

characherEncoding 参数:指定java 程序链接数据库的过程中,使用的字节集是UTF-8 mysql 中执行的UTF-8是UTF8


29、方法增强

继承:子类继承父类 将父类的方法进行重写

必须有子类,存在继承关系

装饰着设计模式: 专门用于增强方法

必须有接口

动态代理:在运行时动态创建代理类,完成增强操作

必须有接口

字节码增强:运行时创建目标类子类,从而进行增强

第三方框架 cglib javassist

30、装饰者设计模式

接口A 已知实现类C 需要装饰者创建代理类B

1、创建类B 并实现接口A

2、提供类B的构造方法,参数类型为A,用于接受A接口的其他实现类C

3、给类B天界类型为A成员变量 用于存 A接口的其他实现类

4、增强需要的方法

5、实现不需要增强的方法,方法体重调用成员变量存放的其他实现类对应的方法

31、C3P0

使用时需要添加配置文件:c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>  

<c3p0-config>    

<!-- This is default config! -->    

<default-config>    

<property name="initialPoolSize">10</property>    

<property name="maxIdleTime">30</property>    

<property name="maxPoolSize">100</property>    

<property name="minPoolSize">10</property>    

<property name="maxStatements">200</property>    

</default-config>    

<!-- This is my config for mysql-->    

<named-config name="mysql">    

<property name="driverClass">com.mysql.jdbc.Driver</property>    

<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=UTF8</property>    

<property name="user">root</property>    

<property name="password"></property>    

<!-- 初始化连接池中的连接数,取值应在minPoolSize与maxPoolSize之间,默认为3-->  

<property name="initialPoolSize">10</property>  

<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。默认值: 0 -->    

<property name="maxIdleTime">30</property>    

<!--连接池中保留的最大连接数。默认值: 15 -->  

<property name="maxPoolSize">100</property>   

<!-- 连接池中保留的最小连接数,默认为:3-->   

<property name="minPoolSize">10</property>   

<!--c3p0全局的PreparedStatements缓存的大小。如果maxStatements与maxStatementsPerConnection均为0,则缓存不生效,只要有一个不为0,则语句的缓存就能生效。如果默认值: 0-->   

<property name="maxStatements">200</property>    

<!-- 当连接池连接耗尽时,客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。默认: 0 -->     

<property name="checkoutTimeout" value="3000"/>   

<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。默认值: 3 -->     

<property name="acquireIncrement" value="2"/>   

<!--定义在从数据库获取新连接失败后重复尝试的次数。默认值: 30 ;小于等于0表示无限次-->     

<property name="acquireRetryAttempts" value="0"/>    

<!--重新尝试的时间间隔,默认为:1000毫秒-->     

<property name="acquireRetryDelay" value="1000" />   

<!--关闭连接时,是否提交未提交的事务,默认为false,即关闭连接,回滚未提交的事务 -->     

<property name="autoCommitOnClose">false</property>    

<!--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试使用。默认值: null -->     

<property name="automaticTestTable">Test</property>   

<!--如果为false,则获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常,但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。默认: false-->     

<property name="breakAfterAcquireFailure">false</property>  

<!--每60秒检查所有连接池中的空闲连接。默认值: 0,不检查 -->     

<property name="idleConnectionTestPeriod">60</property>      

<!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。默认值: 0 -->     

<property name="maxStatementsPerConnection"></property>   

</named-config>    

<!-- This is my config for oracle -->    

<named-config name="oracle">    

<property name="driverClass">oracle.jdbc.driver.OracleDriver</property>    

<property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:orcl</property>    

<property name="user">scott</property>    

<property name="password">liang</property>    

<property name="initialPoolSize">10</property>    

<property name="maxIdleTime">30</property>    

<property name="maxPoolSize">100</property>    

<property name="minPoolSize">10</property>    

<property name="maxStatements">200</property>    

</named-config>    

</c3p0-config>  

32、DBUtils

如果只使用JDBC进行开发,为了简化JDBC开发 使用apache commons DBUtils

33、XML模拟Servlet

34、Http 协议的版本:

http/1.0 发送请求,创建一次连接 获得一个web资源,连接断开

http/1.1 发送请求,创建一次连接 获得多个web资源,连接断开

35、http 请求头

Referer 浏览器通知服务器,当前请求来自何处。如果是直接访问,则不会有这个头。常用于:防盗链

Cookie 与会话有关技术,用于存放浏览器缓存的cookie信息。

User-Agent 浏览器通知服务器,客户端浏览器与操作系统相关信息

Connection 保持连接状态。Keep-Alive 连接中,close 已关闭

If-Modified-Since 浏览器通知服务器,本地缓存的最后变更时间。与另一个响应头组合控制浏览器页面的缓存。

Host 请求的服务器主机名

Content-Length 请求体的长度

Content-Type 如果是POST请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码

Accept: 浏览器可支持的MIME类型。文件类型的一种描述方式。

MIME格式:大类型/小类型[;参数]

例如:

   text/html ,html文件

   text/css,css文件

   text/javascript,js文件

   image/*,所有图片文件

Accept-Encoding 浏览器通知服务器,浏览器支持的数据压缩格式。如:GZIP压缩

Accept-Language 浏览器通知服务器,浏览器支持的语言。各国语言(国际化i18n)


36、http响应代码

200 :请求成功。

302 :请求重定向。

304 :请求资源没有改变,访问本地缓存。

404 :请求资源不存在。通常是用户路径编写错误,也可能是服务器资源已删除。

500 :服务器内部错误。通常程序抛异常。


37、http响应头

Location 指定响应的路径,需要与状态码302配合使用,完成跳转。

Content-Type 响应正文的类型(MIME类型)

取值:text/html;charset=UTF-8

Content-Disposition 通过浏览器以下载方式解析正文

取值:attachment;filename=xx.zip

Set-Cookie 与会话相关技术。服务器向浏览器写入cookie

Content-Encoding 服务器使用的压缩格式

取值:gzip

Content-length 响应正文的长度

Refresh 定时刷新,格式:秒数;url=路径。url可省略,默认值为当前页。

取值:3;url=www.itcast.cn    //三秒刷新页面到www.itcast.cn

Server 指的是服务器名称,默认值:Apache-Coyote/1.1。可以通过conf/server.xml配置进行修改。<Connector port="8080" ... server="itcast"/>

Last-Modified 服务器通知浏览器,文件的最后修改时间。与If-Modified-Since一起使用。


38、Web开发中常用的web应用服务器

1)weblogic:oracle公司的大型收费web服务器 支持全部javaEE规范

2)websphere:IBM公司的大型收费web服务器 支持全部的javaEE规范

3)Tomcat:Apache开源组织下的 开源免费的中小型的web应用服务器 支持 javaEE 中的 servlet 和 jsp规范

39、文件下载

浏览器不能解析的文件就下载

能解析的文件 需要下载,就要编写下载代码

package com.stevezong.op.system.controller;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import javax.servlet.ServletContext;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;



@Controller

public class DlController {

private ServletContext servletContext;

@RequestMapping("/dl.do")

public void exec(HttpServletRequest request ,HttpServletResponse response) throws Exception {

String fileName= request.getParameter("filename");

//要下载的这个文件的类型--客户端通过文件的MIME类型区分类型

response.setContentType("application/octet-stream");

//告诉客户端这个文件不是直接解析,而是以附件打开 下载

response.addHeader("Content-Disposition", "attachment; filename="+fileName);

System.out.println(fileName);

File file = new File("d://123//"+fileName);

InputStream  in = new FileInputStream(file);

ServletOutputStream out = response.getOutputStream();

int len =0;

byte[] buffer = new byte[1024];

while((len  = in.read(buffer))>0) {

out.write(buffer,0,len);

}

}

}

40、cookie session

cookie 存在客户端 不能存中文

//创建cookie

Cookie cookie = new Cookie(CookieName,CookieValue);

//发送cookie

response.addCookie(cookie);

通常是将session id 做成cookie 发送给客户端

cookie.setMaxAge(int seconds); ---时间秒

注意:如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭 cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会 被持久化到浏览器的磁盘文件里

cookie.setPath(String path);

注意:如果不设置携带路径,那么该cookie信息会在访问产生该cookie的 web资源所在的路径都携带cookie信息

删除客户端的cookie:

如果想删除客户端的已经存储的cookie信息,那么就使用同名同路径的持久化时 间为0的cookie进行覆盖即可

通过request获得所有的Cookie:

Cookie[] cookies = request.getCookies();

遍历Cookie数组,通过Cookie的名称获得我们想要的Cookie

for(Cookie cookie : cookies){

if(cookie.getName().equal(cookieName)){

String cookieValue = cookie.getValue();

}

}


session 存在服务端(session 技术基于cookie cookie 技术存储session编号 )

发送编号和根据编号去寻找session区域位置 这些是客户端和服务器自动完成的,不需要手动编码

获得Session对象

HttpSession session = request.getSession();

此方法会获得专属于当前会话的Session对象,如果服务器端没有该会话的Session 对象会创建一个新的Session返回,如果已经有了属于该会话的Session直接将已有 的Session返回(实质就是根据JSESSIONID判断该客户端是否在服务器上已经存在 session了)

获得sessionId

session.getId();

怎样向session中存取数据(session也是一个域对象)

Session也是存储数据的区域对象,所以session对象也具有如下三个方法:

session.setAttribute(String name,Object obj);

session.getAttribute(String name);

session.removeAttribute(String name);

创建:

第一次执行request.getSession()时创建

销毁:

服务器(非正常)关闭时

session过期/失效(默认30分钟)


问题:时间的起算点 从何时开始计算30分钟?

从不操作服务器端的资源开始计时


可以在工程的web.xml中进行配置

<session-config>

<session-timeout>30</session-timeout>

</session-config>

手动销毁session

session.invalidate();

浏览器关闭,session不会销毁,他在服务器上 但是JSESSIONID没有了.

手动创建一个存储JSESSIONID的cookie 为这个cookie 设定持久化时间

Cookie cookie = new Cookie("JSESSIONID",session.getId())

cookie.setMaxAge(60*60*24);

response.addCookie(cookie);


41、会话

一次会话

从打开浏览器访问了百度,到关闭这个浏览器的整个过程 ==》

42、jsp本质就是servlet

第一次访问---->helloServlet.jsp---->helloServlet_jsp.java---->编译运行

PS:被翻译后的servlet在Tomcat的work目录中可以找到


43、jsp内置/隐式对象(9个)

jsp被翻译成servlet之后,service方法中有9个对象定义并初始化完毕,我们在jsp 脚本中可以直接使用这9个对象

名称 类型 描述

out javax.servlet.jsp.JspWriter 用于页面输出

request javax.servlet.http.HttpServletRequest 得到用户请求信息,

response javax.servlet.http.HttpServletResponse 服务器向客户端的回应信息

config javax.servlet.ServletConfig 服务器配置,可以取得初始化参数

session javax.servlet.http.HttpSession 用来保存用户的信息

application javax.servlet.ServletContext 所有用户的共享信息

page java.lang.Object 指当前页面转换后的Servlet类的实例

pageContext javax.servlet.jsp.PageContext JSP的页面容器

exception java.lang.Throwable 表示JSP页面所发生的异常,在错误页中才起作用

44、jsp的 out对象

out的类型:JspWriter

out作用就是想客户端输出内容----out.write()

out缓冲区默认8kb 可以设置成0 代表关闭out缓冲区 内容直接写到respons缓冲 器


45、jsp的pageContext对象

jsp页面的上下文对象,作用如下:

page对象与pageContext对象不是一回事

pageContext是一个域对象

setAttribute(String name,Object obj)

getAttribute(String name)

removeAttrbute(String name)


pageContext可以向指定的其他域中存取数据

setAttribute(String name,Object obj,int scope)

getAttribute(String name,int scope)

removeAttrbute(String name,int scope)

findAttribute(String name)

---依次从pageContext域,request域,session域,application域中获 取属性,在某个域中获取后将不在向后寻找


46、jsp四大作用域的总结:

page域:当前jsp页面范围

request域:一次请求

session域:一次会话

application域:整个web应用


47、jsp实际应用

技术组成:jsp+javaBean

弊端:随着业务复杂性 导致jsp页面比较混乱

技术组成:jsp+servlet+javaBean

优点:开发中 使用各个技术擅长的方面

servlet:擅长处理java业务代码

jsp:擅长页面的现实


MVC:---- web开发的设计模式

M:Model---模型 javaBean:封装数据

V:View-----视图 jsp:单纯进行页面的显示

C:Controller----控制器 Servelt:获取数据--对数据进行封装--传递数据-- 指派显示的jsp页面

javaEE三层架构+MVC

web层:收集页面数据,封装数据,传递数据,指定响应jsp页面

service层:逻辑业务代码的编写

dao层:数据库的访问代码的编写


48、mysql的事务控制:

开启事务:start transaction;

提交:commit;

回滚:rollback;

49、JDBC事务控制:

开启事务:conn.setAutoCommit(false);

提交:conn.commit();

回滚:conn.rollback();


50、ajax的使用

$.ajax({

url:path+"/note/delete.do",

type:"post",

data:{

"noteId":noteId

},

dataType:"json",

success:function(result){

if(result.status==0){

alert(result.msg);

$("#book_ul a.checked").click();

}else{

alert(result.msg);

}

},

error:function(){

alert("删除失败,请稍后重试");

}

});

async:是否异步,默认是true代表异步

data:发送到服务器的参数,建议使用json格式

dataType:服务器端返回的数据类型,常用text和json

success:成功响应执行的函数,对应的类型是function类型

type:请求方式,POST/GET

url:请求服务器端地址


$.get(url, [data], [callback], [type])

$.post(url, [data], [callback], [type])

url:代表请求的服务器端地址

data:代表请求服务器端的数据(可以是key=value形式也可以是json格式)

callback:表示服务器端成功响应所触发的函数(只有正常成功返回才执行)

type:表示服务器端返回的数据类型(jquery会根据指定的类型自动类型转换)

常用的返回类型:text、json、html等



点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消