浏览器对象详解
文章目录
- 浏览器对象详解
- 一、参考资料
- 二、认识浏览器运行态下的 js
- 1.问:是否了解浏览器的执行态(分层设计)?
- 2.BOM
- 1.[location](https://developer.mozilla.org/zh-CN/docs/Web/API/Location)
- 拓展方向:
- 2.[History](https://developer.mozilla.org/zh-CN/docs/Web/API/History)
- 3.[navigator](https://developer.mozilla.org/zh-CN/docs/Web/API/Navigator)
- 4.[screen](https://developer.mozilla.org/zh-CN/docs/Web/API/Screen)
- 三、浏览器事件
- 1.addEventListener 第三个参数
- 2.阻断事件传播
- 3.阻止默认行为
- 拓展方向
- 性能方向
- 兼容性方向
- 四、网络请求
- 1.XMLHttpRequest
- 2.fetch
- 3.Http 状态码和 Header
- 1.状态码
- [1|2|3]xx
- 4xx
- 5xx
- 2.字段
- 4.拓展方向
- 如何应对网络不稳定(波动)的情况?
- 如何处理并发请求?
- 往期精彩文章
浏览器对象详解
一、参考资料
- 浏览器对象模型
- 聊聊 H5 的 pushState 与 replaceState
- 用 Javascript 获取页面元素的位置
- js 获取操作元素位置
二、认识浏览器运行态下的 js
1.问:是否了解浏览器的执行态(分层设计)?
- ECMAScript - 基础逻辑、数据处理,js 语法块
- BOM - 浏览器本身的能力操作
- Browser Object Model(浏览器对象模型)
- 浏览器模型提供了独立于内容的、可以与浏览器窗口进行滑动的对象结构,就是浏览器提供的 API
- DOM - 浏览器文本的操作
2.BOM
1.location
提供当前窗口中的加载的文档有关的信息和一些导航功能。
既是 window 对象属性,也是 document 的对象属性
window.location === document.location; //true// https://www.zhihu.com/search?type=content&q=123location.href ='https://www.zhihu.com/search?type=content&q=123'.origin = // 完整的url'https://www.zhihu.com'.host = // 页面的标准域名'www.zhihu.com'.hash = // 服务器名称+端口 例如:‘www.zhihu.com:8080’'#hash'.pathname = // url中#号后面的哈希值'/search'.search = // url中[/]后面内容'?type=content&q=123'.protocol = // url中[?]后面内容'https:'.port = // 协议[http:]''; //端口号:[ 80 | 8080 | ... ]
方法:
- assign()
不会打开新窗口
,把请求 url 中的资源,加载到当前窗口- 会给浏览器的
History
中增加一条历史记录
- replace(url)
- 用 url 中的内容,替换掉当前的 location 资源
- 不会在浏览器的
History
中增加记录,意味着用户不能使用回退
按钮
- reload()
- 重新加载当前 url 的内容
- 当 reload(true)时,会
强制从服务器获取
所有内容 - 若没有参数,重新加载时,
可能从浏览器缓存
加载页面
拓展方向:
- location 本身 api 操作
- assign VS replace 的区别
- 解析 url 中的查询字符串,返回一个对象
- 思路:
- 可以通过
正则
的方式获取,或者通过字符串分割
的方式 - 通过
location.search
获取查询字符串内容,如果有[?]
就截取[?]
后面的内容 - 然后通过
[&]
进行分割成为['key=val1','key=val2']
的形式 - 通过
[=]
对数组进行分割,使用decodeURIComponent
对 key 和 val 进行解码,存放到对象中
- 路由相关: 跳转、参数、操作
- 页面能否
返回
(history) - 页面是否
刷新
(hash) - reload、assign、replace 参数等
- 页面能否
- URI or URL 的区别?
- URI
Uniform Resource Identifier - 统一资源标识符
- URL
Uniform Resource Locator - 统一资源定位符
- URI
2.History
history.state.length; // 当前页面的状态 // 返回当前 `会话` 中的 history 个数
方法:
- pushState(state, title, url)
- 给当前的 history 中添加一个状态
- 浏览器地址会改变,但是不会加载页面,本质上页面还是停留在原来的页面
- replaceState()
- 与 pushState 方法类似,但是
不会添加
一个新的 state 到 history 中,而是直接修改当前
state
- 与 pushState 方法类似,但是
相关联的方法
- window.onpopstate()
- 每当处于激活状态的历史记录条目发生变化时,
popstate
事件就会在对应 window 对象上触发 - 调用
history.pushState()
或者history.replaceState()
不会
触发 popstate 事件。 - popstate 事件只会在
浏览器
某些行为下触发
- 比如点击后退、前进按钮(或者在 JavaScript 中调用 history.back()、history.forward()、history.go()方法)
- 每当处于激活状态的历史记录条目发生变化时,
例子:
window.onpopstate = function (event) {alert('location: ' +document.location +', state: ' +JSON.stringify(event.state),);
};
//绑定事件处理函数.
history.pushState({ page: 1 }, 'title 1', '?page=1'); //添加并激活一个历史记录条目 http://example.com/example.html?page=1,条目索引为1
history.pushState({ page: 2 }, 'title 2', '?page=2'); //添加并激活一个历史记录条目 http://example.com/example.html?page=2,条目索引为2
history.replaceState({ page: 3 }, 'title 3', '?page=3'); //修改当前激活的历史记录条目 http://ex..?page=2 变为 http://ex..?page=3,条目索引为3
history.back(); // 弹出 "location: http://example.com/example.html?page=1, state: {"page":1}"
history.back(); // 弹出 "location: http://example.com/example.html, state: null
history.go(2); // 弹出 "location: http://example.com/example.html?page=3, state: {"page":3}
3.navigator
浏览器系统信息大集合
- clipboard
- 系统剪切板相关信息
- userAgent
- 当前用户的设备信息
- onLine
- 返回浏览器的在线状态
- serial
- 返回串口对象,Web Serial API 的入口点
- bluetooth
- 系统蓝牙相关
…
- 系统蓝牙相关
4.screen
用来表示浏览器窗口外部的显示器的信息等
window.screen.deviceXDPI/deviceYDPI 屏幕实际的水平 DPI、垂直 DPI
三、浏览器事件
浏览器事件模型主要分为三个阶段:
- 捕获阶段(IE)
- 事件由最外层元素(window),层层向内传递,直到最具体的元素
- 目标阶段
- 冒泡阶段(网景)
- 事件由最具体的元素(事件的触发者),层层向外传递(传递给父节点),直到 window 对象停止
1.addEventListener 第三个参数
el.addEventListener(event, function, useCapture)
// useCapture默认值false,也就是默认冒泡
// true为捕获阶段
2.阻断事件传播
- event.stopPropagation()
阻断
事件的传播- 但是无法阻止默认事件
- event.stopImmediatePropagation()
- 如果有多个
相同类型
的事件监听函数绑定到同一个
元素 - 当该类型的事件触发时,它们会按照被
添加的顺序
执行 - 如果其中某个监听函数执行了此方法,则当前元素
剩下
的监听函数将不会
被执行
- 如果有多个
3.阻止默认行为
- e.preventDefault()
- e.preventDefault()可以阻止事件的默认行为发生
- 默认行为是指:点击 a 标签就转跳到其他页面、拖拽一个图片到浏览器会自动打开、点击表单的提交按钮会提交表单等等,因为有的时候我们并不希望发生这些事情,所以需要阻止默认行为
拓展方向
性能方向
- 如:事件委托的运用,一个 ul 和多个 li,点击 li 时,改变背景颜色
{/*
<ul class="list"><li>1</li><li>2</li><li>3</li>
</ul>
*/
}
var list = document.querySelector('list');function onClick(e) {var e = e || window.event;if (e.target.tagName.toLowerCase() === 'li') {// 业务逻辑...e.target.style.backgroundColor = 'pink';}
}list.addEventListener('click', onClick, false);
兼容性方向
- 如:写一个兼容 IE 的事件绑定
先区别 IE 的不同之处
- 绑定事件的函数和传参不同: 使用
attachEvent
绑定,事件名要加on
- 解绑时使用的函数和参数不同: 使用
detachEvent
解绑 - 阻断时的不同:
event.cancelBubble = true
- 阻止默认行为的不同:
event.returnValue = false
class BindEvent {constructor(el) {this.el = el;}addEventListener(type, handler) {if (this.el.addEventListener) {this.el.addEventListener(type, handler, false);} else if (this.el.attachEvent) {this.el.attachEvent('on' + type, handler);} else {this.el['on' + type] = handler;}}removeEventListener(type, handler) {if (this.el.removeEventListener) {this.el.removeEventListener(type, handler, false);} else if (this.el.detachEvent) {this.el.detachEvent('on' + type, handler);} else {this.el['on' + type] = null;}}static stopPropagation() {if (e.stopPropagation) {e.stopPropagation();} else {e.cancelBubble = true;}}static preventDefault() {if (e.preventDefault) {e.preventDefault();} else {e.returnValue = false;}}
}
四、网络请求
1.XMLHttpRequest
- 属性
- responseText(服务端响应的文本数据)
- responseXML(服务点响应的 xml 或者 html 类型数据)
- status(响应 HTTP 状态)
- statusText(响应 HTTP 状态描述)
- readyState(发出请求的状态码)对应
onreadystatechange
事件- 0:创建成功,但是没有调用 open 方法
- 1:open 方法被调用
- 2:send 方法被调用
- 3:loading,下载中
- 4:下载操作完成
- timeout(超时时间,对应超时事件
ontimeout
,ontimeout 事件被弃用) - upload(上传进度)
- 方法
- open() 初始化请求(method, url, async),async 表示是否异步操作,默认 true
- send() 发送请求数据,get 请求时,send 可以不传或者 null
- abort() 中止已经发出的请求
- setRequestHeader() 设置请求头信息
- getRequestHeader() 获取指定响应头信息
- getAllResponseHeaders() 获取所有响应头信息
封装 XMLHttpRequest 请求
function ajax({ method = 'get', url = '', params = undefined }) {return new Promise((resolve, reject) => {let xhr = new XMLHttpRequest();if (method.toLowerCase() === 'get' && params !== undefined) {url = url + '?' + params;}xhr.open(method, url, true);xhr.onreadystatechange = function () {if (xhr.readyState === 4) {if (xhr.status === 200) {resolve(xhr.responseText);} else {reject(xhr.status);}}};if (method.toLocaleLowerCase() === 'get') {xhr.send();} else {xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');xhr.send(params);}xhr.onerror = (err) => reject(err);xhr.timeout = () => reject('timeout');// progress事件可以报告长时间运行的文件上传xhr.upload.onprogress = (p) => {console.log(Math.round((p.loaded / p.total) * 100) + '%');};});
}
2.fetch
- 方法:fetch(url,{}| init 对象 ),返回 Promise 对象,只支持异步
- 响应通过 response 对象获取:
fetch().then((response)=>{}).catch(()=>{})
- response 对象混入了 body,提供了 5 个方法,将 ReadableStream 转存到缓冲区的内存里,将缓冲区转换为 js 对象,通过 Promise 返回
- response.text() //转为 text
- response.json() //转为 json
- response.formData()
- response.arrayBuffer()
- response.blob()
不支持超时设置
- 但是可以使用
promise+setTimeout
进行控制
- 但是可以使用
- 默认
不携带cookies
,但是可以设置fetch(url, {credentials: 'include'});
- omit 不发送 cookie
- same-origin 同源发送 cookie(默认)
- include 都发送 cookie
- resolve 若发生在网络通信正常(404,500)也是 resolve
- .catch()也不会被执行。
- reject 只发生在网络通信异常
- 想要精确的判断 fetch 是否成功
- 需要包含 promise resolved 的情况,此时再判断 response.ok 是不是为 true
- 需要借用 AbortController 中止 fetch
// resolve若发生在网络通信正常(404,500)也是resolve
fetch('http://domain/service', {method: 'GET',
}).then((response) => {// 想要精确的判断 fetch是否成功// 需要包含 promise resolved 的情况,此时再判断 response.ok是不是为 trueif (response.ok) {return response.json();}throw new Error('Network response was not ok.');}).then((json) => console.log(json))// .catch()也不会被执行.catch((error) => console.error('error:', error));// ************************************
// 不支持直接设置超时, 可以用promise
function fetchTimeout(url, init, timeout = 3000) {return new Promise((resolve, reject) => {fetch(url, init).then(resolve).catch(reject);setTimeout(reject, timeout);});
}
// ************************************
// 中止fetch
// signal用于支持AbortController中断请求
const controller = new AbortController();
// AbortController接口表示一个控制器对象
// 允许你根据需要中止一个或多个 Web请求
fetch('http://domain/service', {method: 'GET',signal: controller.signal,
}).then((response) => response.json()).then((json) => console.log(json)).catch((error) => console.error('Error:', error));
controller.abort();
3.Http 状态码和 Header
1.状态码
100 信息性|200 成功|300 重定向|400 客户端错误|500 服务器错误
[1|2|3]xx
- 101 切换协议
- 200 Ok
- 301 永久重定向(设备会缓存)
- 302 临时重定向(以前是临时转移,已经不推荐使用了,建议使用 307)
- 307 临时重定向
- 如果是 POST/DELETE 过来的会继续使用
- 302 只会使用 get
- 304 (Not Modified)服务器文件未修改,协商缓存
- 308 永久重定向
4xx
- 400 客户端请求有语法错误,不能被服务器识别
- 403 服务器受到请求,但是拒绝提供服务,可能是跨域也可是权限不够
- 404 请求的资源不存在
- 405 请求的 method 不允许
5xx
- 500 服务器发生不可预期的错误
2.字段
- Content-Length: 发送给接收者给 Body 内容长度(字节)
- 一个 Byte 是 8bit
- utf-8 编码的字符是 1-4 个字节
- User-Agent:客户端特性的字符串
- Content-Type: 媒体类型
- Origin:描述请求来源地址
- Accept
- 建议服务端返回何种媒体类型
- */*表示所有类型(默认)
- text/html,application/json
- 建议服务端返回何种媒体类型
- Accept-Encoding
- 建议服务端发送什么编码(压缩算法)
- deflate,gzip;q=1.0,*;q=0.5
- Accept-Language: 建议服务端传递那种语言
- Referer
- 告诉服务端打开当前页面的上一张页面的 URL;
- 如果是 ajax 请求那么就告诉服务端发送请求的 URL 的什么
- 非浏览器环境有时候不发生 Referer(或者虚拟 Referer,通常是爬虫)
- 常用来做用户行为分析
- Connection
- 决定链接是否在当前事务完成后关闭
- http1.0 默认是 close
- http1.1 默认是 keep-alive
4.拓展方向
如何应对网络不稳定(波动)的情况?
- 失败了重发,指数补偿
const request = (url) => {let resolved = false;let t = 1;return new Promise((resolve, reject) => {// Promise.race([// fetch(url),// wait(100, () => fetch(url)),// wait(200, () => fetch(url)),// wait(400, () => fetch(url)),// wait(800, () => fetch(url)),// wait(1600, () => fetch(url)),// ])function doFetch() {if (resolved || t > 16) return;fetch(url).then((resp) => resp.text()).then((data) => {if (!resolved) {resolved = true;resolve(data);}});setTimeout(() => {doFetch();t *= 2;}, t * 100);}doFetch();});
};
如何处理并发请求?
- 若
相同
的请求,多次
发送,会照成带宽
的浪费 - 处理思路:做
缓存
- 因为请求具有
时效性
,所以不能做永久缓存
- 相同的请求在
一定的时间
内只发生一次
- 使用
w
保存请求信息,若同一时间发送多次相同对请求 - 使用
w[hash].resolves
保存 resolve 函数- 当请求函数
w[hash].func
发送成功,执行 resolves 中的函数,保证每次请求都有响应信息
- 当请求函数
- 使用
import fetch from 'node-fetch';
function hash(...args) {return args.join(',');
}
function window_it(fn, time = 50) {let w = {}; // 时间窗口let flag = false;return (...args) => {return new Promise((resolve, reject) => {if (!w[hash(args)]) {w[hash(args)] = {resolves: [],func: fn,args,};}if (!flag) {flag = true;setTimeout(() => {Object.keys(w).forEach((key) => {console.log(`run ${key}`);const { func, args, resolves } = w[key];func(...args).then((res) => res.text()).then((data) => {resolves.forEach((r) => {console.log(`resolve ${key}`);r(data);});flag = false;delete w[key];});});}, time);}w[hash(args)].resolves.push(resolve);});};
}const request = window_it(fetch, 20);
request('http://www.baidu.com').then((txt) => console.log(txt.length));
request('http://www.baidu.com').then((txt) => console.log(txt.length));
request('http://www.baidu.com').then((txt) => console.log(txt.length));request('http://www.zhihu.com').then((txt) => console.log(txt.length));
request('http://www.zhihu.com').then((txt) => console.log(txt.length));
request('http://www.zhihu.com').then((txt) => console.log(txt.length));
往期精彩文章
- leetcode-js刷题记录&数据结构
- docker下YApi部署教程-支持swagger数据导入
- 带你深入理解什么叫js闭包
- 使用Object.defineProperty进行数据劫持,实现响应式原理-剖析vue2.0
- 前端性能优化之rel=“prefetch“预/懒加载功能
- 前端唤起相机的方法H5+JS
相关文章:
浏览器对象详解
文章目录浏览器对象详解一、参考资料二、认识浏览器运行态下的 js1.问:是否了解浏览器的执行态(分层设计)?2.BOM1.[location](https://developer.mozilla.org/zh-CN/docs/Web/API/Location)拓展方向:2.[History](https…...
异步电路后端实现流程(cdc signOff 后端做什么)
一种后端异步电路的signOff流程同步电路和异步电路分别signOff对于同步电路,后端会分析sta setup/hold,这里不在赘述。在该scenario下 异步电路是不会分析,也不会关注异步电路之间的走线在cdc scenario(mode)下sdc有一下设置:将所…...
Linux网络编程实战介绍
文章目录 前言一、Linux网络编程介绍二、文章目录总结前言 本专栏将为大家讲解Linux网络编程的知识,本专栏只需要有C语言基础即可学习,学习本专栏将大大提高你的C语言水平,当然了我也还会在ARM板子上进行实验将Linux驱动也和网络编程联系起来,方便大家去实现自己的项目。我…...
C++概述 课堂笔记
函数的重载在C语言中函数名是唯一的,不可以重复定义,当我们利用函数执行,功能相似的函数,我们也不能使用同一个函数,比如说,求整型的函数,不能用来求浮点型、字符型。在C中引入函数重载的概念&a…...
一文读懂SpringBoot整合Elasticsearch(一)
(本篇文章主要介绍Spring Boot如何整合Elasticsearch,包括基本配置、数据操作、搜索功能等方面。) 一、前言 Elasticsearch是一款全文搜索引擎,可用于快速、准确地存储、搜索和分析大量数据。而Spring Boot是一款快速开发框架&a…...
(数论)(枚举)(前缀和)1230. K倍区间
目录 题目链接 一些话 切入点 流程 套路 ac代码 题目链接 1230. K倍区间 - AcWing题库 ~数~啦!我草,又~在~水~字~数~啦!我草,又~在~水&…...
万字带你深入理解 Linux 虚拟内存管理(下)
接上文:万字带你深入理解 Linux 虚拟内存管理(上) 6. 程序编译后的二进制文件如何映射到虚拟内存空间中 经过前边这么多小节的内容介绍,现在我们已经熟悉了进程虚拟内存空间的布局,以及内核如何管理这些虚拟内存区域&…...
【iOS】—— JSONModel源码学习
JSONModel 文章目录JSONModel关于JSONModel的用法initWithDictionary等方法load方法实现load方法调用时机init方法__setup__方法__inspectProperties:方法__doesDictionary方法__importDictionary方法关于JSONModel的用法 可以参考之前写的博客:【iOS】—— JSONMo…...
单片机怎么实现真正的多线程?
所谓多线程都是模拟的,本质都是单线程,因为cpu同一时刻只能执行一段代码。模拟的多线程就是任务之间快速切换,看起来像同时执行的样子。据说最近有多核的单片机,不过成本应该会高很多。对于模拟的多线程,我知道的有两种…...
【LeetCode】剑指 Offer(23)
目录 题目:剑指 Offer 46. 把数字翻译成字符串 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 46. 把…...
[免费专栏] 汽车威胁狩猎之不应该相信的几个威胁狩猎误区
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 汽车威胁狩猎专栏长期更新,本篇最新内容请前往: …...
LinuxFTP文件传输服务和DNS域名解析服务
♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放࿰…...
二叉搜索树原理及底层实现
二叉搜索树BST 概念 二叉搜索树又称二叉排序树,它可以是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;若它的右子树不为空,则右子树上所有节点的值都…...
python自动化办公(一)
本文代码参考其他教程书籍实现。 文章目录文件读写open函数读取文本文件写入文本文件文件和目录操作使用os库使用shutil库文件读写 open函数 open函数有8个参数,常用前4个,除了file参数外,其他参数都有默认值。file指定了要打开的文件名称&a…...
LeetCode - 198 打家劫舍
目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 198. 打家劫舍 - 力扣(LeetCode) 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装…...
简单粗暴的分布式定时任务解决方案
分布式定时任务1.为什么需要定时任务?2.数据库实现分布式定时任务3.基于redis实现1.为什么需要定时任务? 因为有时候我们需要定时的执行一些操作,比如业务中产生的一些临时文件,临时文件不能立即删除,因为不清楚用户是…...
蓝桥杯第五天刷题
第一题:数的分解题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2和 4,一共有多少种不同的分解方法&…...
Java数组的定义和使用(万字详解)
目录 编辑 一. 数组的基本概念 1、什么是数组 2、数组的创建及初始化 1、数组的创建 2、数组的初始化 3、数组的使用 (1)数组中元素访问 (3)遍历数组 二、数组是引用类型 1、初始JVM的内存分布 2、基本类型变量与引用类…...
【SpringBoot】自定义Starter
🚩本文已收录至专栏:Spring家族学习之旅 👍希望您能有所收获 一.概述 在使用SpringBoot进行开发的时候,我们发现使用很多技术都是直接导入对应的starter,然后就实现了springboot整合对应技术,再加上一些简…...
【C陷阱与缺陷】----语法陷阱
💯💯💯 要理解一个C程序,必须理解这些程序是如何组成声明,表达式,语句的。虽然现在对C的语法定义很完善,几乎无懈可击,大门有时这些定义与人们的直觉相悖,或容易引起混淆…...
虹科分享| 关于TrueNAS十问十答
上一篇文章我们向您介绍了虹科新品HK-TrueNAS企业存储,很多小伙伴会疑问到底什么是NAS存储,之前常用的磁盘、磁带属于什么存储架构,NAS存储好在哪里,什么时候使用NAS?今天我们整理了关于TrueNAS的十问十答,…...
Https 笔记
HTTP TLS TLS 的前身是 SSL 非对称加密的核心: 两个密钥(公私) https 需要第三方CA(证书授权中心)申请SSL证书以确定其真实性 证书种包含了特定的公钥和私钥 密钥交换 自己将私钥上锁后发给对方对方也上锁 在还回来…...
【Python+requests+unittest+excel】实现接口自动化测试框架
一、框架结构: 工程目录 二、Case文件设计 三、基础包 base 3.1 封装get/post请求(runmethon.py) 1 import requests2 import json3 class RunMethod:4 def post_main(self,url,data,headerNone):5 res None6 if heade…...
MySQL终端的使用及其数据类型的使用
什么是数据库?数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,…...
长视频终局:一场考验资金储备的消耗战
赢者通吃,似乎已成为各行各业的常识,但事实真的是这样吗?20世纪70年代,石油价格高涨,在墨西哥湾油田拍卖中高价拍得油田的企业,要么亏损,要么收入低于预期,但仍然有无数企业在高价竞…...
javaEE初阶 — CSS 常用的属性
文章目录CSS 常用的属性1 字体属性1.1 设置字体家族 font-family1.2 设置字体大小 font-size1.3 设置字体粗细 font-weight1.4 文字倾斜 font-style2 文本属性2.1 文本颜色2.2 文本对齐2.3 文本装饰2.4 文本缩进2.5 行高3 背景属性3.1 背景颜色3.2 背景图片3.3 背景位置3.4 背景…...
【面试题】如何取消 script 标签发出的请求
大厂面试题分享 面试题库前后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库问题之前在业务上有这样一个场景,通过 script 标签动态引入了一个外部资源,具体方式是这样的const script document.…...
蓝桥杯嵌入式(G4系列):RTC时钟
前言: 关于RTC时钟的HAL库配置我也是第一次,之前都是用库函数的写法,这里写下这篇博客来记录一下自己的学习过程。 STM32Cubemx配置: 首先点击左侧的Timers的RTC,勾选以下选项 进入时钟树配置 进入时间设置࿰…...
Linux——进程间通信1
目录 进程间通信目的 进程间通信标准 管道 匿名管道 管道实现进程间通信 管道的特点 进程池 ProcessPool.cc Task.hpp 习题 进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源。 通知事件…...
循环语句——“Python”
各位CSDN的uu们你们好呀,今天小雅兰的内容是Python中的循环语句呀,分为while循环和for循环,下面,让我们进入循环语句的世界吧 循环语句 while循环 for循环 continue和break 循环语句小结 人生重开模拟器 设置初始属性 设置性别…...
武进网站建设信息/信息流优化师是什么
2019独角兽企业重金招聘Python工程师标准>>> 1) 同时运行多个应用 Android 终于正式地支持分屏模式,通过分屏模式可以同时打开两个应用,这个功能在平板上使用起来特别方便,当然在手机上也支持这个功能。 点击概览按钮(方形)打开多…...
企业邮箱查找/莆田百度seo公司
今天来实现以下大众点评客户端的横向listview二级列表,先看一下样式。 这种横向的listview二级列表在手机软件上还不太常见,但是使用过平板的都应该知道,在平板上市比较常见的。可能是因为平板屏幕比较大,而且也能展现更多的内容。…...
精品网站建/广州优化疫情防控举措
本节书摘来自异步社区《面向对象设计实践指南:Ruby语言描述》一书中的第1章,第1.2节设计工具,作者【美】Sandi Metz,更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 设计工具面向对象设计实践指南:Ruby语言…...
管理咨询师证书含金量/微信seo什么意思
据《法制日报》报道,日前国内第一影视剧视频网站乐视网正式与苹果公司对薄公堂,前者将就苹果在线商店(App Store)非法提供《画皮》等影视剧的盗版行为提起诉讼。据了解,该诉讼行为是因为苹果在线商店未经乐视网授权许可…...
网站怎么做优化/怎样建立自己网站
CGI CGI即通用网关接口(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器…...
永州祁阳网站建设/新开网店自己如何推广
问题描述:在linux shell中如何处理tail -n 10 access.log这样的命令行选项?在bash中,可以用以下三种方式来处理命令行参数,每种方式都有自己的应用场景。1,直接处理,依次对$1,$2,...,$n进行解析,…...