JavaScript 基础知识 - BOM篇

image

前言

本篇文章是JavaScript基础知识的BOM篇,如果前面的《JavaScript基础知识-DOM篇》看完了,现在就可以学习BOM了。

注意: 所有的案例都在这里链接: 提取密码密码: yvxo,文章中的每个案例后面都有对应的序号。

1. BOM 基本概念

BOM(Browser Object Model):浏览器对象模型,提供了一套操作浏览器的工具。

image

BOM中包含的内容很多,但是有很多东西是用不到的。在BOM中我们需要掌握定时器

2. window 对象

  • window对象是一个全局对象,也可以说是JavaScript中的顶级对象
  • documentalert()console.log()这些都是window的属性,其实BOM中基本所有的属性和方法都是属性window的。
  • 所有定义在全局作用域中的变量、函数都会变成window对象的属性和方法
  • window对象下的属性和方法调用的时候可以省略window

示例代码: [01-window对象.html]

普通函数调用的时候:

var name = "项羽";
var age = "28";function Teacher() {this.name = "虞姬";this.age = 22;console.log(this);
}
// 没有 new 的时候就相当于普通函数调用
var obj = Teacher(); // 打印的this 指的是全局对象window
console.log(name);   // 虞姬
console.log(age);    // 22
/* 
为什么会是 虞姬 和 22 ? 不是定义了一个全局变量name = "项羽"吗?
因为 Teacher作为一个普通函数调用,它里面的this指的就是全局对象
js 代码一步步往下执行,一开始是定义了一个name="项羽"的全局变量,
但是下面的this有将"虞姬"指向了全局对象,所以最后打印的是虞姬 22
*/

构造函数的时候:

var name = "项羽";
var age = "28";function Teacher() {this.name = "虞姬";this.age = 22;console.log(this);
}
// 没有 new 的时候就相当于普通函数调用
var obj = new Teacher(); // 打印的this 指的是构造函数对象 Teacher
console.log(name); // 项羽
console.log(age); // 28
/*
Teacher作为构造函数的时候,它内部的this指向的是 对象Teacher
此时的全局变量name="项羽" 将不会再受this的影响,所以,打印的是 项羽 28
*/

2.1 window.onload

window.onload事件会在窗体加载完成后执行,通常我们称之为入口函数
window.onload = function(){//里面的代码会在窗体加载完成后执行。//窗体加载完成包括文档树的加载、还有图片、文件的加载完成。
}

注意:

  • 如果有图片加载,那么代码一定要写到window.onload里面,否则会出现图片没有加载完成,获取到的宽度和高度不对的情况。
  • 浏览器会对页面的加载做优化,在加载图片的时候,图片的引入会延迟。
  • 一个页面中不能有两个onload函数,写在下面的会覆盖掉上面的。

示例代码: [02-window.onload对象(一)]

为什么下面的代码会报错呢?

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>window.onload</title><!-- script写在上面直接报错 --><!--  因为代码是一步步向下执行的,在head里的script获取btn或者box的时候,是获取不到的,因为下面的页面结构还没加载到:--><script>var btn = document.getElementById('btn');var box = document.getElementById('box');btn.onclick = function() {box.style.width = "500px";box.style.height = "500px";}</script>
</head><body><button id="btn">按钮</button><div id="box" style="width:200px;height:200px;background:pink;"></div>
</body></html>

此时就可以用window.onload入口函数:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>window.onload</title><script>// 这里定义了一个入口函数,就是说等页面所有文档树加载完才会执行这里面的代码:window.onload = function() {var btn = document.getElementById('btn');var box = document.getElementById('box');btn.onclick = function() {box.style.width = "500px";box.style.height = "500px";}}</script>
</head><body><button id="btn">按钮</button><div id="box" style="width:200px;height:200px;background:pink;"></div>
</body></html>

示例代码:图片加载 [03-window.onload对象(二)]

为什么获取的宽度和高度都为0呢,js代码不是写在最后面了吗?

<body><!-- html 部分--><img id="img" src="../image/levi.jpg" alt=""><!-- js 部分 --><script>var img = document.getElementById('img');console.log(img.width);     // 0console.log(img.height);    // 0</script>
</body>

效果图:

image

这是因为,浏览器会对页面的加载做优化,在加载图片的时候,图片的引入会延迟。这时候需要用window.onload

<head><script>// 当文档加载完成的时候执行,如果有图片,等到图片也加载完成才会执行。window.onload = function() {var img = document.getElementById('img');console.log(img.width);console.log(img.height);}</script>
</head><body><img id="img" src="../image/levi.jpg" alt="">
</body>

效果图:

image

2.2 window.open

window.open() 打开一个窗口

语法window.open(url, [name], [features]);

参数1:需要载入的url地址
参数2:新窗口的名称_self:在当前窗口打开_blank:在新的窗口打开
参数3:窗口的属性,指定窗口的大小
返回值:会返回刚刚创建的那个窗口,用于关闭

示例代码: [04-window.open.html]

<!-- html 部分 -->
<button id="btn">点击在新窗口跳转到百度</button>
<button id="btn2">点击在本窗口跳转到百度</button><!-- js 部分 -->
<script>var btn = document.getElementById('btn');var btn2 = document.getElementById('btn2');btn.onclick = function() {// 在新窗口打开,新窗口的大小为300 * 300var newWin = window.open("http://www.baidu.com", "_blank", "width=300,height=300");}btn2.onclick = function() {// 在当前窗口打开,新窗口的大小根据当前窗口改变的,设置的无效var newWin = window.open("http://www.baidu.com", "_self");}
</script>

效果图:

image

2.3 window.close

window.close() 关闭一个窗口 在火狐浏览器下会失效解决办法
newWin.close();//newWin是刚刚创建的那个窗口
window.close(); //把当前窗口给关闭了

示例代码: [05-window.close.html]

<!-- html 部分 -->
<button id="btn">点击在新窗口跳转到百度</button>
<button id="btn2">点击在本窗口跳转到百度</button>
<button id="btn3">点击关闭打开的新窗口</button>
<button id="btn4">点击关闭本窗口</button><!-- js 部分 -->
<script>var btn = document.getElementById('btn');var btn2 = document.getElementById('btn2');btn.onclick = function() {// 在新窗口打开,新窗口的大小为300 * 300var newWin = window.open("http://www.baidu.com", "_blank", "width=300,height=300");btn3.onclick = function() {// 关闭打开的新窗口newWin.close();}}btn2.onclick = function() {// 在当前窗口打开,新窗口的大小根据当前窗口改变的,设置的无效var newWin2 = window.open("http://www.baidu.com", "_self");}btn4.onclick = function() {// 关闭本窗口window.close();}
</script>

效果图:

image

3. 定时器

定时器里面不能用this,因为在定时器里面,this,指向的是全局对象window

3.1 延时定时器

延时定时器可以让代码延迟一段时间之后才执行。定时器不是我们调用,我们只需要把函数的地址传过去,时间到了,window会自己调用。

1、设置延时定时器

语法setTimeOut(callback, time);

参数1:回调函数,时间到了就会执行。
参数2:延时的时间 单位:毫秒
返 回:定时器的id,用于清除

示例代码: [06-延时定时器.html]

var timer = setTimeOut(function(){//1秒后将执行的代码。console.log("哈哈");
}, 1000);

2.清除延时定时器

语法clearTimeOut(timerId);

// 参数:定时器id
clearTimeOut(timerId);

示例代码:

<!-- html 部分 -->
<button id="btn1">开启</button>
<button id="btn2">关闭</button><!-- js 部分 -->
<script>var btn1 = document.getElementById("btn1");var btn2 = document.getElementById("btn2");// 定义一个全局变量var timeId; // 开启定时器btn1.onclick = function() {//设置了一个定时器,会返回一个定时器idtimeId = setTimeout(function() {// 两秒后在页面显示 Boom!document.write("<h1> Boom! </h1>");}, 2000);}//  清除定时器btn2.onclick = function() {//清除定时器, 需要定时器idclearTimeout(timeId);}
</script>

效果图:两秒后执行代码,两秒钟之内清除定时器,就不会执行

image

3.2 间歇定时器

间歇定时器让定时器每隔一段时间就会执行一次,并且会一直执行,到清除定时器为止。

1、设置间歇定时器

语法:var intervalID = setInterval(func, delay);

参数1:重复执行的函数
参数2:每次延迟的毫秒数
返 回:定时器的id,用于清除

示例代码:

var timer = setInterval(function(){//重复执行的代码。
}, 1000);

2、清除间歇定时器

语法:clearInterval(intervalID);

参数:定时器id

示例代码: [07-间歇定时器.html]

<!-- html 部分 -->
<button id="btn1">开启</button>
<button id="btn2">关闭</button><!-- js 部分 -->
<script>var btn1 = document.getElementById("btn1");var btn2 = document.getElementById("btn2");// 定义一个全局变量 存放定时器var timer;// 开启定时器btn1.onclick = function() {//设置了一个定时器,会返回一个定时器 idtimer = setInterval(function() {// 每隔1秒 就会创建一个 h2 标签var tag = document.createElement("h2");tag.innerHTML = "我是间歇定时器";document.body.appendChild(tag);}, 1000);};//  清除定时器btn2.onclick = function() {//清除定时器, 需要定时器idclearInterval(timer);document.body.innerHTML = "<h1>间歇定时器已清除</h1>";};
</script>

效果图:

image

2.3 定时器综合练习

1、获取短信验证码案例 [08-定时器综合练习-获取短信验证码.html]

<!-- html 部分-->
<input type="button" value="点击获取短信验证码" id="btn"><!-- js 部分 -->
<script>var btn = document.getElementById('btn');var timer = null;btn.onclick = function() {// 倒计时的秒数var num = 5;// 当按钮点击的时候 禁用buttonbtn.disabled = true;timer = setInterval(function() {// 每隔一秒修改num的值num--;// 修改btn的value值  这里不可以用this 因为定时器里的this指的是window对象btn.value = num + "秒后可再次发送";// 当num = 0 秒的时候,清除定时器if (num == 0) {clearInterval(timer);btn.disabled = false;btn.value = "点击获取短信验证码";}}, 1000);}
</script>

效果图:

image

2、倒计时案例 [09-定时器综合练习-倒计时案例.html]

<!-- 样式部分 -->
<style>.time {width: 160px;height: 40px;margin: 100px auto;line-height: 40px;font-size: 24px;font-weight: 700;}#h,#m,#s {float: left;display: block;width: 40px;height: 40px;text-align: center;background-color: #F9F9F9;box-shadow: 1px 1px 2px #616161;color: #453246;border-radius: 5px;}.split {width: 20px;float: left;text-align: center;}
</style><!-- html 部分 -->
<div class="time"><span id="h">00</span><span class="split">:</span><span id="m">00</span><span class="split">:</span><span id="s">00</span>
</div><!-- js 部分 -->
<script>var h = document.getElementById('h');var m = document.getElementById('m');var s = document.getElementById('s');setTime();var timer = setInterval(setTime, 1000);function setTime() {// 获取当前时间var newTime = new Date(); // 此时测试的时间是 2017-12-11 15:24:00(根据本地时间一直在变)// 定义一个未来的时间var futureTime = new Date("2017-12-11 16:30:31");// 获取时间差 单位是毫秒 首先我们需要转成秒 而且时间戳获取的时候 有很多小数 需要取整一下var time = parseInt((futureTime - newTime) / 1000);// time现在已经是秒了  我们需要将它转换成小时// 1h = 3600svar hours = parseInt(time / 3600);// 将获取的小时添加到页面中 // 注意因为时钟是两位数,这里的小时可能只是一个个位数,所以需要拼接一个 "0"// 因为 分钟、秒都需要拼0,所以我们可以封装一个函数h.innerHTML = addZero(hours);// 获取分钟// 先将 time 转换成分钟 再去取余60var minutes = parseInt(time / 60) % 60;// 将获取的分钟添加到页面中 m.innerHTML = addZero(minutes);// 获取秒var seconds = time % 60;s.innerHTML = addZero(seconds);// 还要做个判断 当time这个时间差小于等于0的时候 清除定时器if (time <= 0) {// 如果不置0的话 还会继续减time = 0;clearInterval(timer);}}// 拼接 0 函数function addZero(num) {// 如果传进来的参数小于10 就要给他拼 0return num < 10 ? '0' + num : num;}
</script>

效果图:

image

3、电子表案例 [10-定时器综合练习-电子表.html]

<!-- 样式部分 -->
<style>#box {width: 300px;height: 50px;background-color: #F9F9F9;box-shadow: 1px 1px 2px #616161;color: #453246;border-radius: 5px;margin: 100px auto;font: bold 24px/50px 楷体;text-align: center;}
</style><!-- html 部分 -->
<div id="box"></div><!-- js 部分 -->
<script>var box = document.getElementById('box');// 封装一个获取当前时间的函数function getTime() {// 获取当前时间var date = new Date();console.log(date);// 获取当前的年份var year = date.getFullYear();// 获取当前时间的月份var month = addZero(date.getMonth() + 1);// 获取当前的天var day = addZero(date.getDate());// 获取小时var hours = addZero(date.getHours());// 获取分钟var minutes = addZero(date.getMinutes());// 获取秒var seconds = addZero(date.getSeconds());// 将时间格式设置为如下格式var str = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;return str;}// 拼 0 函数function addZero(num) {return num < 10 ? "0" + num : num;}// 定时器会延迟一秒执行,在外面定义一遍 会补偿这个一秒box.innerHTML = getTime();setInterval(function() {box.innerHTML = getTime();}, 1000);
</script>

效果图:

image

4、机械表案例 [11-定时器综合练习-机械表.html]

<!-- 样式部分 -->
<style>.clock {width: 600px;height: 600px;margin: 100px auto;background: url(../image/机械表/clock.jpg) no-repeat;position: relative;}.clock div {position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(../image/机械表/hour.png) no-repeat center center;}#m {background-image: url(../image/机械表/minute.png);}#s {background-image: url(../image/机械表/second.png);}
</style><!-- html 部分 -->
<div class="clock"><div id="h"></div><div id="m"></div><div id="s"></div>
</div><!-- js 部分 -->
<script>var h = document.getElementById("h");var m = document.getElementById("m");var s = document.getElementById("s");function setTime() {// 获取当前时间var date = new Date();// 设置秒针var seconds = date.getSeconds() + (date.getMilliseconds() / 1000);s.style.transform = "rotate(" + 6 * seconds + "deg)";// 设置分针// 60分钟一圈360度 每分钟相当于 6度 这样只会一分分钟的走// 我们想要的效果是秒针旋转地同时  分针也在微弱的旋转 seconds/60得到一个小数 加上分钟 再去乘以角度var minutes = date.getMinutes() + seconds / 60;m.style.transform = "rotate(" + 6 * minutes + "deg)";// 设置时针// 12个小时是一圈360度 每个小时相当于 30度var hours = date.getHours() + minutes / 60;h.style.transform = "rotate(" + 30 * hours + "deg)";}// 页面一加载就执行一次setTime();// 让window每隔15ms就执行一次  1秒钟 分成 25份就已经有动画效果  分成60份,很细腻setInterval(setTime, 15);
</script>

效果图:

image

4. Location对象

location对象也是window的一个属性,location其实对应的就是浏览器中的地址栏。

4.1 常用的属性和方法

location.href:控制地址栏中的地址
location.href = "http://www.baidu.com"; //让页面跳转到百度首页
location.reload()让页面重新加载
location.reload(true);//强制刷新,相当于ctrl+F5
location.reload(false);//刷新,相当于F5
location的其他属性
console.log(window.location.hash);      // 哈希值 其实就是锚点
console.log(window.location.host);      // 服务器 服务器名+端口号
console.log(window.location.hostname);  // 服务器名
console.log(window.location.pathname);  // 路径名
console.log(window.location.port);      // 端口
console.log(window.location.protocol);  // 协议
console.log(window.location.search);    // 参数

示例代码:定时跳转网址 [12-location对象-定时跳转.html]

<!-- html 部分 -->
<a href="#" id="link">注册成功,5秒后跳转</a><!-- js 部分 -->
<script>var num = 5;var link = document.getElementById('link');var timer = setInterval(function() {num--;link.innerHTML = "注册成功," + num + "秒后跳转";// 如果倒计时等于0的时候,自动跳转到网址if (num == 0) {clearInterval(timer);location.href = "https://segmentfault.com/u/marsman_levi";}}, 1000);
</script>

效果图:

image

5. Navigator 对象

window.navigator的一些属性可以获取客户端的一些信息
navigator.userAgent:返回浏览器版本 navigator.onLin:返回网络状态 true / false

示例代码:获取浏览器版本 [13-navigator对象.html]

// 打印浏览器版本
console.log(navigator.userAgent);// 打印网络状态
console.log(navigator.onLine);

效果图:

image

6. Screen 对象

window.screen的一些属性可以获取屏幕的宽高

1、获取屏幕的可占用宽高

返回访问者屏幕的宽度、高度,以像素计,减去界面特性,比如窗口任务栏。

screen.availWidth:获取屏幕的可用宽度screen.availHeight:获取屏幕的可用高度

2、获取屏幕宽高

screen.width:获取屏幕的宽度screen.height:获取屏幕的高度

示例代码: [14-screen对象.html]

document.write("当前屏幕可占用宽度:" + screen.availWidth + "<br>");    // 1864
document.write("当前屏幕可占用高度:" + screen.availHeight + "<br>");   // 1080
document.write("当前屏幕宽度:" + screen.width + "<br>");              // 1920
document.write("当前屏幕高度:" + screen.height + "<br>");             // 1080

效果图:

image

7. History 对象

history对象表示页面的历史

1、后退 history.back()

history.back() 方法加载历史列表中的前一个URL。这与在浏览器中点击后退按钮是相同的:

history.back();
history.go(-1);

2、后退 history.forward()

history forward() 方法加载历史列表中的下一个URL。这与在浏览器中点击前进按钮是相同的:

history.forward();
history.go(1);

8. javascript 弹框

javascript中可以创建3种弹框,分别是:警告框、确认框、提示框。

1、警告框 alert

  • 警告框经常用于确保用户可以得到某些信息。
  • 当警告框出现后,用户需要点击确定按钮才能继续进行操作。
window.alert("呵呵呵");
// window.alert() 方法可以不带上window对象,直接使用alert()方法。
alert("呵呵呵");

2、确认框 confirm

  • 确认框通常用于验证是否接受用户操作。
  • 当确认卡弹出时,用户可以点击 "确认" 或者 "取消" 来确定用户操作。
  • 当你点击 "确认", 确认框返回 true, 如果点击 "取消", 确认框返回 false
var result = confirm();
if (result == true) {alert("你真的是猪!");
} else {alert("你不是猪!");
}

3、提示框 prompt

  • 提示框经常用于提示用户在进入页面前输入某个值。
  • 当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。
  • 如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为null
// 参数一:提示内容  参数er:可以省略,输入框默认显示内容
var person = prompt("请输入你的名字", "Levi丶");
if (person != null && person != "") {alert("你好" + person);
}

4、弹框换行
弹窗使用 反斜杠 + "n"(\n) 来设置换行。

alert("大家好\n我是\nLevi丶");

9. javascript Cookie

Cookie用于存储web页面的用户信息

1、什么是Cookie?

  • Cookie是一些数据, 存储于你电脑上的文本文件中。
  • web服务器向浏览器发送web页面时,在连接关闭后,服务端不会记录用户的信息。
  • Cookie的作用就是用于解决 "如何记录客户端的用户信息":

    • 当用户访问web页面时,他的名字可以记录在cookie中。
    • 在用户下一次访问该页面时,可以在cookie中读取用户访问记录。

Cookie以名/值对形式存储,如下所示:

username=Levi

当浏览器从服务器上请求web页面时,属于该页面的cookie会被添加到该请求中。服务端通过这种方式来获取用户的信息。

2、使用 JavaScript 创建Cookie

JavaScript可以使用document.cookie属性来创建 、读取、及删除cookie

JavaScript中,创建cookie如下所示:

document.cookie = "username = Levi";

你还可以为cookie添加一个过期时间(以 UTCGMT 时间)。默认情况下,cookie 在浏览器关闭时删除:

document.cookie="username = Levi; expires = Tue Dec 12 2017 11:32:33 GMT+0800";

你可以使用path参数告诉浏览器cookie的路径。默认情况下,cookie属于当前页面

document.cookie="username = Levi; expires = Tue Dec 12 2017 11:32:33 GMT+0800; path = /";

3、使用 JavaScript 读取 Cookie

在 JavaScript 中, 可以使用以下代码来读取cookie

var x = document.cookie;

document.cookie将以字符串的方式返回所有的cookie,类型格式cookie1=value; cookie2=value; cookie3=value;

4、使用 JavaScript 修改 Cookie

在 JavaScript 中,修改cookie类似于创建cookie,如下所示:

document.cookie="username = LXH; expires = Tue Dec 12 2017 11:32:33 GMT+0800; path = /";

旧的cookie将被覆盖。

5、使用 JavaScript 删除 Cookie

删除cookie非常简单。您只需要设置expires参数为以前的时间即可,如下所示

document.cookie="username = Levi; expires = Thu, 01 Jan 1970 00:00:00 GMT;";

注意,当您删除时不必指定 cookie 的值。

6、Cookie 字符串

document.cookie属性看起来像一个普通的文本字符串,其实它不是。

即使您在document.cookie中写入一个完整的cookie字符串, 当您重新读取该cookie信息时,cookie 信息是以名/值对的形式展示的。

如果您设置了新的cookie,旧的cookie不会被覆盖。 新cookie将添加到document.cookie 中,所以如果您重新读取document.cookie

上一篇:JavaScript 基础知识 - DOM篇(二)
下一篇:JavaScript 进阶知识 - 特效篇(一)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全球首例机器人自杀事件 因受够无聊家务

据凤凰网,一个奥地利家庭购买一小机器人,每天工作就是倒垃圾、倒垃圾。一天完工后,它竟自己启动,爬到炉边&#xff0c;推开上面的锅&#xff0c;把自己活活烧死…专家称这个机器人实在受够了无聊的家务琐事&#xff0c;才毅然选择自杀机器人也是有尊严的!为这有骨气的robot点根…

【python基础】——数据类型(列表、字典、集合)

骏马金龙——python语法基础 python基础 变量与运算 符号//%**意义整除整除取余幂次方数据种类 #mermaid-svg-7nSRRijcYFCYwTDr .label{font-family:trebuchet ms, verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-7nSRRijcYFCYw…

机器人实现屠宰自动化

当 WESTFLEISCH 注册合作社考虑在 Coesfeld 肉类加工中心内自动化原有的人工屠宰设备过程时&#xff0c;首先在“剔除直肠”及“切开盆腔骨及腹部”两个流程中测试使用了两台库卡机器人。在此过程中&#xff0c;机器人主要以它工作的质量及经济效益说服了使用者。 实施措施/解…

python数据结构《排序专题复习》

目录 常见的三种排序方法 冒泡排序 插入排序 选择排序 其他经典的排序方法 快速排序 堆排序 归并排序 希尔排序 不同排序方法的各维度对比 排序方式的稳定性&#xff1a;若两个相同的元素在排序前后的相对位置不发生改变的排序为稳定排序&#xff0c;否则不稳定排序 常…

BZOJ2844 albus就是要第一个出场

AC通道&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id2844 这题貌似HDU上有一道差不多的题&#xff0c;不过我没做过&#xff0c;也就没管了。 首先讲一个线性基的东西&#xff0c;大概就是这样&#xff1a; 然后就是一个什么性质&#xff1a;S异或起来会出现重…

HTG Explains: Why Linux Doesn’t Need Defragmenting

If you’re a Linux user, you’ve probably heard that you don’t need to defragment your Linux file systems. You’ll also notice that Linux distributions don’t come with disk-defragmenting utilities. But why is that? To understand why Linux file systems d…

Spring AOP 实战运用

Spring AOP 实战 看了上面这么多的理论知识, 不知道大家有没有觉得枯燥哈. 不过不要急, 俗话说理论是实践的基础, 对 Spring AOP 有了基本的理论认识后, 我们来看一下下面几个具体的例子吧.下面的几个例子是我在工作中所遇见的比较常用的 Spring AOP 的使用场景, 我精简了很多有…

大话设计模式之策略模式

第二章&#xff1a;商场促销——策略模式 策略模式的定义:策略模式是一种定义一系列算法的方法&#xff0c;从概念上来看&#xff0c;所有这些算法完成的都是相同的工作&#xff0c;知识实现不同&#xff0c;他可以以相同的方式调用所有的算法&#xff0c;减少了各类算法类与使…

【Python学习】——语言风格(变量赋值、深浅拷贝、for循环陷阱)

目录 1、赋值 2、赋值的分类——引用赋值、值赋值 1) 不可变对象引用赋值——字符串、数值、元组等 2&#xff09;可变对象引用赋值——列表、集合、字典 3&#xff09;可变与不可变对象的引用赋值内部分析 4&#xff09;在py文件中&#xff0c;和作用域有关&#xff0c;如…

判断庄家是否出货

1. 大盘处于强势的时候 日平均线在横盘的时候&#xff0c;缓慢拉升然后急剧下跌 高位盘整的时候 2. 有利好消息发布的时候 因为庄家会利用这个对于散户来说这个买入时机来进行出货操作&#xff0c;可见庄家真是阴险狡诈转载于:https://www.cnblogs.com/dcz1001/p/6115893.html

【深度学习】——常见深度学习模型总结、anchor-free和anchor-based

目录 1、faster rcnn&#xff1a; 2、SSD&#xff1a; 3、YOLOv1: 小结&#xff1a; 拓展&#xff1a;anchor-based和anchor-free anchor 1、faster rcnn&#xff1a; FasterRcnn 算法原理讲解笔记&#xff08;非常详细&#xff09;https://blog.csdn.net/xjtdw/article…

真静态和伪静态的区别

首先肯定的是纯静态和伪静态都是SEO的产物&#xff0c;但纯静态和伪静态还是有很大区别的。 纯静态是生成真实的HTML页面保存到服务器端&#xff0c;用户访问时直接访问这 个HTML页面即可&#xff0c;从而大大的减轻了服务器压力&#xff08;如dedecms就是采用的纯静态&#xf…

非常有趣的Console

console觉醒之路&#xff0c;打印个动画如何&#xff1f; 原文地址: http://www.helloweba.com/view-blog-383.html 批量去掉或替换文本中的换行符&#xff08;notepad、sublime text2&#xff09; 原文地址&#xff1a;http://m.blog.csdn.net/article/details?id43228729 有…

假期实践

第一天 地点:杭州颐高数码城 第一天&#xff0c;我来到了自己家附近的颐高数码城。文三路这边有一个卖数码产品的一条街&#xff0c;这里也是最贴近我专业实践的地方&#xff0c;所以第一天的实践我选择了这里。 2001年开业的颐高数码广场座落于“电子一条街”文三路、学院路口…

3.AngularJS-过滤器

转自&#xff1a;https://www.cnblogs.com/best/p/6225621.html 二、过滤器 使用过滤器格式化数据&#xff0c;变换数据格式&#xff0c;在模板中使用一个插值变量。语法格式如下&#xff1a; {{ express | filter:parameter1:p2:p3… | … | …}} 过滤器分了内置过滤器与自定义…

【深度学习】——训练过程

包含哪些层 训练过程 其实就是yf(x)的求参过程&#xff0c;先给参数一个初始值&#xff0c;然后根据初始函数计算得到预测值&#xff0c;根据预测值和真值计算损失&#xff0c;然后又根据损失函数进行反向传播更新参数&#xff0c;更新参数后&#xff0c;再次计算预测值&#…

thinkphp自定义模板标签(一)

thinkphp内置的foreach和include等模板标签使用是非常方便的&#xff1b;但是内置的那些标签只能满足常用功能&#xff0c;个性化的功能就需要我们自己编写自定义模板标签了&#xff1b;下面就是要讲解如何实现&#xff1b; 示例环境&#xff1a;thinkphp3.2.3 thinkphp的模板标…

【深度学习】——激活函数(sigmoid、tanh、relu、softmax)

目录 激活函数 1、作用 2、常用激活函数 3、衡量激活函数好坏的标准&#xff1a; 4、不同的激活函数 1&#xff09;sigmoid 2&#xff09;tanh函数 3&#xff09;RULE函数和leak-relu函数 4&#xff09;softmax函数 激活函数 1、作用 如果只是线性卷积的话&#xff0c…

【深度学习】——分类损失函数、回归损失函数、交叉熵损失函数、均方差损失函数、损失函数曲线、

目录 代码 回归问题的损失函数 分类问题的损失函数 1、 0-1损失 (zero-one loss) 2、Logistic loss 3、Hinge loss 4、指数损失(Exponential loss) 机器学习的损失函数 Cross Entropy Loss Function&#xff08;交叉熵损失函数&#xff09; 交叉熵优点 Mean Squared E…

【转】应用架构一团糟?如何将单体应用改造为微服务

概述 将单体应用改造为微服务实际上是应用现代化的过程&#xff0c;这是开发者们在过去十年来一直在做的事情&#xff0c;所以已经有一些可以复用的经验。 全部重写是绝对不能用的策略&#xff0c;除非你要集中精力从头构建一个基于微服务的应用。虽然听起来很有吸引力&#xf…