写在前面:经过系统的学习了原生JS之后,会发现其具有以下三个特点:

1、是一种解释性脚本语言(代码不进行预编译)。

2、主要用来向 HTML 页面添加交互行为。

3、可以直接嵌入 HTML 页面,但写成单独的js文件有利于结构和行为的分离。

而接下来要讲的jQuery 就对原生javascript的一个扩展,封装,就是让javascript更好用,更简单。

换而言之,jquery就是要用更少的代码,漂亮的完成更多的功能。{Write less, Do more!}

1. jQuery 作为 JavaScript 的代码库,自然是使用 JavaScript 语言编写的。
2. jQuery 的代码非常规范,执行效率也很高,是 JavaScript 编码的优秀范例。
3. 很多情只要使用 jQuery 的方法就可以实现大部分的 JavaScript 功能。

所以说,程序员作为一种极懒的物种存在,势必想着要减少不必要的代码劳动量,因此jQuery诞生了。


一、jQuery基础语法 


1、适应JQuery、必须要先导入JQuery。x.x.x.js文件。

 2、JQuery中的选择器: $("选择器").函数();
① $是JQuery的缩写形式,即也可以使用JQuery("选择器").函数();
② 选择器,可以是任何CSS支持的选择符;
3、文档就绪函数:防止文档在未完全加载之前,运行JQuery代码;
 $(document).ready(function() {
 //JQuery代码
 });
 简写形式如下:
 $(function(){});

[文档就绪函数&window.onload的区别]

① window.onload必须等到网页中的所有内容(包括图片视频)加载完成后才能执行代码;
文档就绪函数只需要在 网页DOM结构加载完成之后,就可以执行代码;
② window.onload只能写一个,写多个之后只会执行最后一个;
文档就绪函数可以写多个,而且不会覆盖。
4、原生JS对象与JQuery对象:
① 使用$("")选中的是JQuery对象,只能调用JQuery函数,而不能使用元素的JS事件与函数;
 $("#p").click() √
 $("#p").onclick = function(){}; ×

解释:

$("#p")是JQuery对象,.onclick是原生的JS事件。
同理,使用document.getElement系列获取的是原生JS对象,也不能使用JQuery相关函数。
② 原生的JS对象转为 JQuery对象
可以使用$() 包裹即可以转为JQuery对象
var p = document.getElementsByTagName("p");
$("p").click(); √ 原生的JS对象已经转为 JQuery对象;
③ JQuery转为原生JS对象:
使用get(index)或者[index]
 $("#p").get(0).onclick() = function () {}; √
 $("#p").[0].onclick() = function () {}; √
5、 由于其其他的库也可能使用$作为自身标识,导致其他的JS库与JQuery冲突。
① 要解决冲突,可以放弃使用$,直接使用JQuery对象。
 
 !function ($) {
 $()//函数之中,就可以使用$代替JQuery对象。
 }(jQuery); 

② [jQuery.noConflict();]

运行这个函数将变量$的控制权让渡给第一个实现它的那个库
在运行这个函数后,就只能使用jQuery变量访问jQuery对象。

二、02-JQueryDOM操作及其他函数


使用$()直接创建一个标签节点

将创建好的节点,插入到指定位置。

在#div1内部的最后,直接插入一个节点。

$("#div1").append("<p>这是被插入的p标签</p>");

把新节点插入到#div1中

$("<p>这是被插入的p标签</p>").appendTo("#div1");

在#div1内部的开头,直接插入一个节点。

$("#div1").prepend("<p>这是被插入的p标签</p>");
$("#div1").after("<p>这是被插入的p标签</p>");
$("<p>这是被插入的p标签</p>").insertBefore("#div1");

把每个p标签外面,都包裹一层div

$("p").wrap("<div></div>");

/ 把所有的p标签,包裹在同一个div中

$("p").wrapAll("<div></div>");

把#div1里面的所有子元素,用<div>包裹起来

$("#div1").wrapInner("<div></div>");

删除元素的父标签

$("#p").unwrap();

将所有匹配的p标签,全部换为span标签

$("p").replaceWith("<span>111</span>");

用span元素,替换掉所有p标签

$("<span>111</span>").replaceAll("p");

删除#div1中的所有子元素。 但是#div1依然保留空标签

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

直接从DOM中,删除#div1以及所有子元素

$("#div1").remove();

直接从DOM中,删除#div1以及所有子元素

$("#div1").detach();

重点 【remove和detach异同】

1、相同点:
① 都会把当前标签,以及当前标签的所有子节点,全部删除;
② 都可以在删除时,把当前节点返回。并可以使用变量接受返回的节点,以便后期恢复;

2、 不同点:

使用接受的节点,恢复原节点时。
remove只能恢复节点的内容,但是事件绑定,不能再恢复;
detach不但恢复节点的内容,还能再恢复 事件的绑定;
 
案例 ↓
$("#div1").click(function(){
alert(1);
})
var div1 = null;
$("button:eq(0)").click(function(){
div1 = $("#div1").remove();
})
$("button:eq(1)").click(function(){
div1 = $("#div1").detach();
})
$("button:eq(2)").click(function(){
$("button:eq(2)").after(div1);
});

重点 [JS中.cloneNode() 和 JQ中 .clone()区别]

两者都接受传入true/false的参数。

.cloneNode() 不传参数或传入参数false,表示只克隆当前节点,而不克隆子节点。 传入true表示可隆全部子节点。

.clone() 无论传入哪个参数,都会克隆所有子节点。但是,不传参数或者传入false,表示只克隆节点,不克隆节点绑定的事件。 传入true表示同时克隆及诶单绑定的事件。
 
$("#div1").clone(true).empty().insertBefore("button:eq(0)")

CSS和属性相关操作

使用attr()设置或者取到元素的某个属性。

//$("#div1").attr("class","cls1");

/*$("#div1").attr({ //使用attr一次性设置多个属性
"class" : "cls1",
"name" : "name1",
"style" : "color:red;"
});*/
console.log($(".p").attr("id"));

删除元素属性
$("#div1").removeAttr("class");
 

prop与Attr区别。

对于checked/disabled等属性名等于属性值的属性,使用prop返回的将是true或false, 使用attr返回的将是属性名或者undefined
所以,对于属性名等于属性值,或者属性是true/false的特殊属性,通常使用prop选取。 其他的属性,通常使用attr选取。
console.log($("button:eq(2)").attr("disabled"));
console.log($("button:eq(2)").prop("disabled"));
给元素添加class属性,与attr添加class的不同是,使用addClass添加的新类名,将会保留原来已有的class名。
$("p").addClass("selected1 selected2");

删除掉元素指定的class

$("p").removeClass("selected1");

元素有指定class名,则删除; 元素没有指定class名,则新增。

$("p").toggleClass("selected1");

取到或设置元素里面的html,相当于innerHTML

console.log($("#div1").html());
$("#div1").html("<h1>我是新的h1</h1>");

取到或设置元素里面的文字内容,相当于innerText

console.log($("#div1").text());
$("#div1").text("<h1>我是新的h1</h1>");

获取或设置 元素的Value值

console.log($("input[type='text']").val());
$("input[type='text']").val("啧啧啧!");
给元素设置CSS样式属性 属于style行级样式表权限
$("#div1").css({
"color":"red",
"user-select":"none",
"text-stroke":"0.5px blue"
});

var id = setInterval(function(){
$("#div1").css({
"width":function(index,value){
if(parseFloat(value)+10 >= 600){
clearInterval(id);
}
return parseFloat(value)+10+"px";
}
});
},500);
 获取和设置元素的width和height属性
console.log($("#div1").height());
console.log($("#div1").width());
$("#div1").width("400px");

获取元素的内部宽度。 包括宽高和padding

console.log($("#div1").innerHeight());
console.log($("#div1").innerWidth());

获取元素的外部宽高。 包括宽高+padding+border

传入参数为true时,还要包括margin

console.log($("#div1").outerHeight(true));
console.log($("#div1").outerWidth()); 

offset():

获取元素,相对于浏览器窗口左上角的偏移位置。
这个位置,包括margin/position等。
返回的是一个对象,包含两个属性,分别是left和top

position():

获取定位元素,相对于父元素的偏移位置(父元素必须是定位元素)。
这个位置,只包括top/left等定位属性。 而margin将被视为当前元素的一部分,并不会视为偏移量范畴。
 
如果父元素有定位属性。则相对于父元素padding左上角定位;
如果父元素没有定位属性,则与offerSet一样 ,相对于浏览器左上角定位(但是,只是两者的定位原点都在浏览器左上角。 在计算偏移量时,offerSet会计算margin和top. 而position只计算top)。

三、JQuery 事件及动画


【绑定事件的方式】
1、绑定事件的快捷方式。
$("button").eq(0).click(function () {
alert("快捷绑定!");
})

缺点:绑定的事件无法取消!

2、使用on()绑定事件 :
① 使用on进行单事件绑定;
$("button:eq(0)").on ("click",(function () {
alert("这是使用on绑定的事件!");
});
② 使用on,一次性给同一个节点,添加多次事件;多个事件之间,用空格分隔!
$("button:eq(0)").on ("click dbclick",(function () {
alert("这是使用on绑定的事件!");
});
③ 使用on,同一次给一个节点添加多个事件,分别执行不同的函数。
$("button:eq(0)").on ({
"click":function () {
alert("执行了click事件!")
},
"mouseover":function () {
alert("执行了mouseover事件!")
}
});
④ 调用函数时,同时给函数传入指定参数:
$("button:eq(0)").on ("click",{name:"wq",age:23},(function (evn) {
alert(evn);
});
⑤ 使用on进行事件委派!!! 重点问题!!!
 
>>>将原本需要绑定到子元素上的事件,绑定到其祖先节点乃至根节点上面,在委派给子元素节点,生效!
eg: $("p").on("click",function(){});
事件委派 如下:
$("document").on("click","p",function(){});
>>>作用:
不使用事件委派的绑定方式,只能将事件绑定到初始化时的子元素标签上,
当页面新增同类型标签时,这些新增的标签上,没有之前绑定的事件。
而 使用 事件委派时 ,当页面新增更同类型标签时,这些新增的事件也具有之同类型前标签所绑定的事件!
 
3、off()取消事件绑定
$("p").off("click"):取消单事件绑定
$("p").off("click mouseover dbclick"):取消多事件绑定
$(document).off("click","p"):取消委派事件绑定
$("p").off()取消所有的事件绑定
4、使用.one()绑定的事件,只能执行一次;
eg:
$("button").one("click",function () {
alert("one做的 只能点一次!")
})
5、.trigger()自动 触发某元素事件;
第一个参数:是需要触发的事件类型;
第二个参数:(可选)数组格式,表示传递给事件函数的参数;
>>>传递进来的参数,可以在事件函数中,定义形参进行获取
(形参第一个必须是event事件,所以从第二个开始为所传递的参数!)
>>> 也可以直接在函数中,使用arguements对象数组,读取参数;
 
6、.triggerHandler():功能同上,区别如下:
① .triggerHandler()不能触发浏览器默认的HTML事件,如submit等;
② .trigger()可以触发页面中所有匹配元素的事件;
而.triggerHandler()只能触发第一个匹配元素的事件;
③ .trigger()的返回值,返回的是调用当前函数的对象,符合JQuery的可链式语法;
.triggerHandler()返回的是事件函数的返回值,如果事件函数没有返回值,则返回的是Undefined;
 JQuery动画
 1、.show() 让隐藏的元素显示,效果为同时修改元素的宽度、高度、opacity属性;
① 不传参数:直接显示,不进行动画;
② 传参: 参数为时间毫秒数,表示动画多少时间结束;
③ 传入(时间,函数)表示动画完成之后,执行回调函数;
.hidde() 让显示的元素隐藏,与show相反;
 
2、.slideDown() 让隐藏的元素显示,效果为从上往下,逐渐增加高度;
.slideUp() 让显示的元素隐藏,效果为从下往上,逐渐减少高度;
.slideToggle():让显示的元素隐藏,让隐藏的元素显示;
 
3、.fadeIn() 让隐藏的元素淡入显示。
.fadeOut() 让显示的元素淡入隐藏。
.fadeToggle() 让隐藏的元素淡入显示,让显示的元素淡入隐藏。
.fadeTo(动画总时间,结束时透明度,函数)接受的第二个参数,表示最终达到的透明度;
 
4、animate: ({最终的样式属性,键值对对象},
动画事件,动画效果("linear","swing"),
动画执行完后的回调函数)
自定义动画的注意事项:
① 参数一的对象中,链必须使用驼峰法命名。{fontSzie:"18px"}
② 只有数值类型的属性可以使用动画效果。
 

四、JQuery 高级  Ajax


台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。
很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网、百度搜索等等。
 
 
二、AJAX是基于现有的Internet标准
AJAX是基于现有的Internet标准,并且联合使用它们:
  • XMLHttpRequest 对象 (异步的与服务器交换数据)
  • JavaScript/DOM (信息显示/交互)
  • CSS (给数据定义样式)
  • XML (作为转换数据的格式,现在基本上被淘汰了,大多数情况下使用JSON数据格式
  AJAX应用程序与浏览器和平台无关的!
三、AJAX的应用函数:
1、.load() 载入远程 HTML 文件代码并插入至 DOM 中。
可以只传入一个参数,表示加载一个静态的HTML代码片段。
默认使用 GET 方式 - 传递附加参数时自动转换为 POST 方式。
eg:
$("#div1").load("load.html",{参数},function () {对参数进行函数处理});
 
2、$.ajax() 通过 HTTP 请求加载远程数据。jQuery 最底层 AJAX 实现函数。
接受一个大的对象。对象里面的属性和方法,表示ajax请求的相关设置:
① url:被请求的远程文件的路径。
② Ajax请求的类型,可选值get/post.
•success: 请求成功的回调函数。接受一个参数data,表示后台返回的数据。
•dataType:预期服务器返回的数据类型。
"json": 返回 JSON 数据 。
"text": 返回纯文本字符串
•data:对象格式。向后台发送一个对象,表示传递的数据。
常用于type为post的请求方式。
如果type为get,可以使用?直接追加载URL后面。
•error:请求失败时的回调函数
•statusCode:接受一个对象,对象的键值对是status状态码和对应的回调函数,
表示当请求状态码是对应数字时,执行具体的操作函数.
404 - 页面没有找到!
200 - 请求成功!
500 - 内部服务器错误!
3、 $.get(); $.post(); 这两个函数,是在$.ajax()的基础上进行封装而来。可以直接默认发送get请求或post请求;
 
接受四个参数:
① 请求的URL路径。 相当于$.ajax()里面的url;
② 向后台传递的数据。 相当于$.ajax()里面的data;
③ 请求成功的回调函数。 相当于$.ajax()里面的success;
④ 预期返回的数据类型。 相当于$.ajax()里面的dataType;
4、 AJax的各种监听事件:
ajaxStart--->ajaxSend--->ajaxSuccess/ajaxError/ajaxComplete--->ajaxStop
$(document).ajaxSend(function(){
alert("ajax请求发送")
});
$(document).ajaxStop(function(){
alert("ajax请求停止")
})
$(document).ajaxStart(function(){
alert("ajax请求开始")
})
$(document).ajaxSuccess(function(){
alert("ajax请求成功")
})
$(document).ajaxError(function(){
alert("ajax请求失败")
})
$(document).ajaxComplete(function(){
alert("ajax请求完成(不管成功失败,都会死乞白赖出来)")
})
5、 序列化表单数据的一些操作:
①、 序列化表单数据为一个字符串
$("#btn1").click(function(){
var str = $("#form1").serialize();
console.log(str);
//str = name=jianghao&password=123&email=1234123
var arr = str.split("&");
console.log(arr);
var obj = {};
for (var i=0; i<arr.length; i++) {
var arr1 = arr[i].split("=");
var keys = arr1[0];
var values = arr1[1];
obj[keys] = values;
}
console.log(obj);
$.get("01-JQuery基础.html?"+str,obj,function(){

})
})
2、序列化表单数据为一个数组
$("#btn2").click(function(){
var arr = $("#form1").serializeArray();
console.log(arr);
var obj = {};
for (var i=0; i<arr.length; i++) {
var keys = arr[i].name;
var values = arr[i].value;
obj[keys] = values;
}
console.log(obj);
});

3、 $.parseJSON(str) 将JSON字符串转为JSON对象

标准的JSON字符串,键必须用双引号包裹。
var str = '{"age":12}'
var obj = $.parseJSON(str);
console.log(obj);

4、 .trim() 去除掉字符串两端空格

var str1 = " 123 ";
console.log(str1.trim());

5、 用户遍历数组和对象

遍历数组时,函数的第一个参数是下标,第二个参数是值;
遍历对象时,函数的第一个参数是键,第二个参数是值
var arr = [1,2,3,4,5,6,7];
var obj = {
name : "zhangsan",
age : 12,
sex : "nan"
}
$.each(obj,function(index,item){
console.log(index);
console.log(item);
});

五、JQuery插件 plugin


1、fullpage插件


1、fullpage插件简介:

fullPage.js 是一个基于 jQuery 的插件,它能够很方便、很轻松的制作出全屏网站,主要功能有:
  • 支持鼠标滚动
  • 支持前进后退和键盘控制
  • 多个回调函数
  • 支持手机、平板触摸事件
  • 支持 CSS3 动画
  • 支持窗口缩放
  • 窗口缩放时自动调整
  • 可设置滚动宽度、背景颜色、滚动速度、循环选项、回调、文本对齐方式等等
2、引入文件
fullPage.js必须在JQuery.js文件之后导入!

3、htm基本样式:

在fullPage中,class为section表示一个屏幕。
section不能执行包裹在body中,必须使用一个div包裹所有的section。
section中的每一个slide表示一个横向幻灯片,可在当前屏中左右横向切换。
3、CSS样式写法无差别
4、JavaScript:

5、属性配置:
①、选项:
 
 
2、回调函数
① afterLoad:当一个页面加载完成之后触发
传递参数:
anchorLink:当前页面的锚链接
index:当前页面的序号,从1开始。
afterLoad:function (anchorLink,index) {
console.log(anchorLink);
console.log(index);
},
//② onLeave:当页面离开时触发的函数:
/* 接收 index、nextIndex 和 direction 3个参数:
index 是离开的“页面”的序号,从1开始计算;
nextIndex 是滚动到的“页面”的序号,从1开始计算;
direction 判断往上滚动还是往下滚动,值是 up 或 down
*/
onLeave:function (index,nextIndex,direction) {
console.log(index);
console.log(nextIndex);
console.log(direction);
},
// afterRender 页面结构生成后的回调函数,或者说页面初始化完成后的回调函数,执行一次。
// 先执行afterRender 再执行afterLoad:
afterRender:function () {
console.log("页面初始化完成了!")
},

/* afterSlideLoad:当幻灯片加载完成时执行的函数,接收四个参数
* >>>anchorLink:幻灯片所在的section的锚点
* >>>index:幻灯片所在的section的序号
* >>>slideAnchor:幻灯片自身的锚点(如果没有显示slideIdex)
* >>>slideIdex:幻灯片自身的序号
*/

afterSlideLoad:function (anchorLink,index,slideIndex,direction) {
console.log(anchorLink);
console.log(index);
console.log(slideIndex);
console.log(direction);
}

onSlideLeave 左右移动幻灯片加载之前执行的回调函数,与 onLeave 类似,
// 接收 anchorLink、index、slideIndex、direction 4个参数
/* anchorLink:幻灯片所在的section的锚点
index:幻灯片所在的section的序号
slideIndex:当前幻灯片自身的index(从0开始)
direction:幻灯片移动的方向left和right
nextSlideIndex:即将显示的幻灯片的index
*/
onSlideLeave :function function_name () {

}
二、move插件
1、插件简介:
Move.js 提供了创建 CSS3 动画的最简单的 JavaScript API。
2、使用方法:
<script type="text/javascript" src="js/move.js"></script>
(move插件并不是JQ插件,是原生插件,无需链接jq文件。)
<script type="text/javascript">
document.getElementById('playButton').onclick = function() {
move('.box')

.set("margin-left","300px") //设置css样式
.set("margin-top","300px")

.add("margin-left", "200px")//add()方法用来增加其已经设置的属性值。该方法必须数值型值,以便用来增加。
//该方法必须有两个参数:属性值和其增量
.sub("margin-left", "200px") //sub()是add()的逆过程,他接受两个相同的参数,但其值将从属性值中减去。
.rotate(90)//该方法通过提供的数值作为参数来旋转元素。
//当方法被调用的时候通过附加到元素的 transform 属性上。

.skew(30, 40)//skew()用于调整一个相对于x和y轴的角度。
//该方法可以被分为skewX(deg)和skewY(deg)两个方法
.scale(3, 3) //该方法用于放大或压缩元素的大小,按照提供的每一个值,将调用transform的scale方法
// .then()//用于分割动画为两个集合,并按顺序执行。动画将被分为两步,通过then()方法实现分割
.x(300) //设置X轴位置
.y(300) //设置Y轴位置 和添加margin值效果一样。

.delay(1000) //延时多少毫秒之后执行动画
.duration('5s')//设置动画的播放时间。
.end(function() {
alert("Animation Over!");
}) //end()该方法用于Move.js代码片段的结束,他标识动画的结束。
//技术上,该方法触发动画的播放。该方法接受一个可选的callback回掉函数
};
</script>
 
三、validate插件
1、插件简介
jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求。该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用户自定义方法的 API。所有的捆绑方法默认使用英语作为错误信息,且已翻译成其他 37 种语言。
2、插件的使用:

3、

 
4、使用示范
$(function () {
$("#commentForm").validate({
 //rules对象 用于声明各个input的验证规则;
rules:{
//选择每个input时需要先选中该input的name,并对应一个对象设置多条验证规则;
name:{
required:true,
minlength:2

},

email:{
required:true,
email:true
},
url:{

url:true,
}
},
 //messages对象 用于显示各个input验证不通过时的提示文字。
 //messages对应的各个规则都会有默认的提示,如果没有特殊需要,无需单独设置。
messages:{
name:{
required:"这个内容是必填项!",
minlength:"这里最少输入两个字符!"

},
email:{
required:"这个内容是必填项!",
email:"邮箱格式错误!"
},
url:{

url:"url格式错误!",
}
}
})
})
5、特殊用法
 
 
 
 

【干货篇】步步为营,带你轻松掌握jQuery!的更多相关文章

  1. 赞!带进度条的 jQuery 文件拖放上传插件

    jQuery File Uploader 是一个 jQuery 文件拖放上传插件,包括 Ajax 上传和进度条效果.作者编写这个插件的想法是要保持它非常简单,不像其他的插件,很多的标记,并提供一些 H ...

  2. appledoc导出iOS代码文档的使用和问题详解(干货篇)

    appledoc导出iOS代码文档的使用和问题详解(干货篇) 1. 简单说一下背景和自己感受 背景: 项目好像突然黄了,公司让详细写项目代码的注释并且导出文档,弄完之后就要封版. 说实话:听到这个消息 ...

  3. 两篇文章带你走入.NET Core 世界:Kestrel+Nginx+Supervisor 部署上云服务器(二)

    背景: 上一篇:两篇文章带你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虚拟机先走一遍(一) 已经交待了背景,这篇就省下背景了,这是第二篇文章了,看完就木有下篇了. 直接进 ...

  4. 带搜索框的jQuery下拉框插件

    由于下拉框的条数有几十个,于是打算找一个可以搜索查找功能的下拉框,刚开始在网上看了几个,都是有浏览器兼容性问题,后来看到这个“带搜索框的jQuery下拉框美化插件 searchable”,看演示代码简 ...

  5. 带动画效果的jQuery手风琴

    带动画效果的jQuery特效手风琴是一款带动画效果的手风琴作品,非常实用,可以用在新闻列表.FAQ等模块,默认的是打开第一个选项,查看其它的时候直接点击加号按钮就展开. 源码地址:http://www ...

  6. 架构篇 | 带你轻松玩转 LAMP 网站架构平台(一)

    作者 | JackTian 微信公众号 | 杰哥的IT之旅(ID:Jake_Internet) 转载请联系授权(微信ID:Hc220066)备注:来自博客园 1.什么是 LAMP 架构? LAMP 架 ...

  7. 一篇博客带你轻松应对java面试中的多线程与高并发

    1. Java线程的创建方式 (1)继承thread类 thread类本质是实现了runnable接口的一个实例,代表线程的一个实例.启动线程的方式start方法.start是一个本地方法,执行后,执 ...

  8. 一篇博客带你轻松应对Springboot面试

    1. SpringBoot简介 SpringBoot是简化Spring应用开发的一个框架.他整合了Spring的技术栈,提供各种标准化的默认配置.使得我们可以快速开发Spring项目,免掉xml配置的 ...

  9. 干货 | 10分钟带你全面掌握branch and bound(分支定界)算法-概念篇

    00 前言 之前一直做启发式算法,最近突然对精确算法感兴趣了.但是这玩意儿说实话是真的难,刚好boss又叫我学学column generation求解VRP相关的内容.一看里面有好多知识需要重新把握, ...

随机推荐

  1. SGI STL 内存分配方式及malloc底层实现分析

    在STL中考虑到小型区块所可能造成的内存碎片问题,SGI STL设计了双层级配置器,第一级配置器直接使用malloc()和free();第二级配置器则视情况采用不同的策略:当配置区块超过128byte ...

  2. centos 7.2 配置Nginx

    1.添加资源 添加CentOS 7 Nginx yum资源库,打开终端,使用以下命令(没有换行): rpm -Uvh http://nginx.org/packages/centos/7/noarch ...

  3. mysql按某个列执行1-N排名的问题

    对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列CREATE TABLE `salaries` (` ...

  4. java核心技术卷一笔记(1)

    jdk是java开发工具包,里面包含了javac.jar.javadoc.java等工具,可以在bin目录中找到.有一个文件夹是jre,即jdk也包含了java运行环境.jre可单独安装,只是运行ja ...

  5. NetBeans主题配色方案加设置.md

    1.网上下载主题的地址是:http://netbeansthemes.com/ **上面的主题我看了下但是感觉不太适合自己所以自己就仿照的设置了下下面我附上自己的配置信息 感兴趣的可以下载下来自己看下 ...

  6. Spring框架IOC,DI概念理解

    1.什么是框架? 框架是一种重复使用的解决方案,针对某个软件开发的问题提出的. Spring框架,它是一个大型的包含很多重复使用的某个领域的解决方案. Spring的理念:不要重复发明轮子. 2.Sp ...

  7. Java温故而知新-插入排序

    插入排序 插入排序的基本思想是将待排序的元素依次插入序列合适的位置,然后将这个位置后面的元素依次向后移动一位 位置1 2 3 4 5 6 序列5 4 2 1 8 3 设第1位为最初始的基础元素,也就是 ...

  8. Spring-MVC开发步骤(入门配置)

    Spring-MVC开发步骤(入门配置) Step1.导包 spring-webmvc Step2.添加spring配置文件 Step3.配置DispatcherServlet 在web.xml中: ...

  9. Mysql 分区详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt120 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.m ...

  10. 利用Java调用OpenCV进行人脸识别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt409 今天我准备学习如何用Java来进行人脸检测.人脸检测有助于在任何数字图 ...