No title
javascript 实现两个大数的相加大数超出了 Javascript 的数值范围,用字符串表示function sumString(a, b) {
//取两个数字的最大长度
let maxLength = Math.max(a.length, b.length);
//用0去补齐长度
a = a.padStart(maxLength, 0); //"0009007199254740991"
b = b.padStart(maxLength, 0); //"1234567899999999999"
//定义加法过程中需要用到的变量
let t = 0;
let f = 0; //"进位"
let sum = "";
for (let i = maxLength - 1; i >= 0; i--) {
t = parseInt(a[i]) + parseInt(b[i]) + f;
f = Math.floor(t / 10) ...
No title
从输入 URL 到页面加载发生了什么URL首先,在回答在个问题之前,我们需要搞清楚URL是什么。
常见的 URL 会包含:
协议名常见的协议是 HTTP 协议,除此之外还包括
HTTPS
FTP
FILE 等
域名
端口号端口号一般都是默认隐藏的,HTTP 协议默认端口是 80,HTTPS 协议默认端口是 443.
path一般取决于服务器的路由结构
问号参数和 hash
问号传参是客户端把信息传递给服务器的一种方式(也有可能是跳转到某一个页面,把参数值传递给页面用来标识的)
hash 主要用于页面中锚点定位和 hash 路由切换
从输入 URL 到页面加载发生的事这个过程主要可以分为以下几个过程:
DNS 解析
建立 TCP 连接
客户端发送 HTTP 协议
服务器返回 response
浏览器渲染页面
结束连接
DNS 解析DNS 解析是找到对应服务器的 IP 地址
查找方法有:迭代和递归两种
查询的位置有
浏览器缓存
操作系统缓存
本地域名服务器
顶级域名服务器
根域名服务器直到获得准确的 IP 地址
建立 TCP 连接在获得 IP 地址后,便开始建立一次 ...
No title
loaderwebpack 默认只识别 js 结尾的文件,当遇到其他格式后,webpack 并不知道如何去处理。此时,我们需要定义一种规则,告诉 webpack,当遇到其他类型的问件时,去求助于相应的 loader。
识别出应该被对应的 loader 进行转换的文件。(test 属性)
转换这些文件,使其能够被添加到依赖图中。(use 属性)
用法
test:匹配处理文件的拓展名的表达式,必须
user:使用的 loader 模块名称,必须
include/exclude:手动添加必须处理的文件(夹)或屏蔽不需要处理的文件,可选
query:为 loader 提供额外的设置选项,可选
pluginloader 被用于转换某些类型的模块,而插件则可以用于执行广泛的任务。想要使用一个插件,你只需要 require()它,然后将它添加到 plugins 数组中。多数插件可以通过选项自定义。你也可以在一个配置中因为不同目的而多次使用同一个插件,这时需要通过使用 new 操作符来创建它的一个实例。
用法plugins:[执行的插件]
No title
setState的异步调用setState是异步的,在class式的组件中,this.state表示当前渲染的值,在hook中state是同样的效果。
所以this.setState或者setState到底什么时候才会重新渲染呢?
setState 函数用于更新 state。它接收一个新的 state 值并将组件的一次重新渲染加入队列。在后续的重新渲染中,useState 返回的第一个值将始终是更新后最新的 state。(这段话来自hook文档)
那么,“加入队列”怎么理解,“后续的重新渲染”又是什么时候呢?
先看一段代码:
const [count, setCount] = React.useState(0);
return <div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>click</button>
</div>显而易见,打印的count ...
No title
fetch 相关 APIfetch()fetch 请求
fetch('http://example.com/movies.json')
.then(function(response) {
return response.json();
})
.then(function(myJson) {
console.log(myJson);
});他可以接受两个参数,可以为一个请求的基本信息,如下:
function postData(url, data) {
return fetch(url, {
body: JSON.stringify(data), // must match 'Content-Type' header
cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
credentials: 'same-origin& ...
No title
http 常见的 headerget 和 post 的区别get
GET 方法请求指定的资源。使用 GET 的请求应该只用于获取数据。
post
POST 方法发送数据给服务器. 请求主体的类型由 Content-Type 首部指定.
一个 POST 请求通常是通过 HTML 表单发送, 并返回服务器的修改结果. 在这种情况下, content type 是通过在 <form> 元素中设置正确的 enctype 属性, 或是在 <input> 和 <button> 元素中设置 formenctype 属性来选择的;
当 POST 请求是通过除 HTML 表单之外的方式发送时, 例如使用 XMLHttpRequest, 那么请求主体可以是任何类型;
区别
get只能获取数据,post可以发送数据,并返回服务器的修改结果
http2随着 web 应用的发展,更多的数据通过 HTTP 传输,HTTP/1.1 链接需要请求以正确的顺序发送,,带来的成本和复杂性堪忧。HTTP/2 应运而生。
HTTP/2 在 HTTP/1.1 有几处基本的不同:
...
No title
http 原理及请求组成http 原理HTTP 协议工作于客户端-服务端架构上。浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 WEB 服务器发送所有请求。
特点
HTTP 是无连接的:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
HTTP 是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过 HTTP 发送。客户端以及服务器指定使用适合的 MIME-type 内容类型。
HTTP 是无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
请求组成起始行包含三个元素:
一个 HTTP 方法:GET PUT POST OPTION HEAD等;
请求目标:通常是一个 URL,或者是协议、端口和域名的绝对路径;
HTTP 版本
Header由不区分大小写的字符串,紧跟着的冒号 ‘:’ ...