Skip to main content

4 posts tagged with "滴滴"

View All Tags

GET 和 POST 到底有什么区别

getpost 本质上就是 TCP 连接,并无差别,但由于 HTTP 的规定和浏览器、服务器的限制,导致它

们在应用过程中有一些不同:

  • get 参数通过 URL 传递;post 放在 request body

  • get 请求在 URL 中传递的参数有长度限制;post 没有(HTTP 协议未规定,是因为浏览器和服务器的限制)

  • get 请求只能进行 URL 编码;post 请求有多种编码方式

  • get 请求参数会被完整保留在浏览历史记录里;post 中的参数不会被保留

  • get 产生一个 TCP 数据包;post 产生两个 TCP 数据包

  • 对于 get 请求,浏览器将 http headerdata 一并发送,服务器响应 200 OK;对于 post 请求,

浏览器先发送 header,服务器响应 100 Continue,浏览器再发送 data,服务器响应 200 OK

  • 缓存方面:get 请求类似于查找的过程,用户获取数据,可以不用每次都与数据库连接,所以

可以使用缓存;post 请求一般做的是修改和删除工作,必须与数据库交互,所以不能使用缓存

diff 算法

diff 算法#

在某一时间节点调用 React 的 render() 方法,会创建一棵由 React 元素组成的树。在下一次 stateprops 更新时,相同的 render() 方法会返回一棵不同的树。React 需要基于这两棵树之间的差别来判断如何高效的更新 UI,以保证当前 UI 与最新的树保持同步。

此算法有一些通用的解决方案,即生成将一棵树转换成另一棵树的最小操作次数。然而,即使使用最优的算法,该算法的复杂程度仍为 O(n3),其中 n 是树中元素的数量。

如果在 React 中使用该算法,那么展示 1000 个元素则需要 10 亿次的比较。这个开销实在是太过高昂。于是 React 在以下两个假设的基础之上提出了一套 O(n) 的启发式算法:

  1. 两个不同类型的元素会产生出不同的树;
  2. 开发者可以通过设置 key 属性,来告知渲染哪些子元素在不同的渲染下可以保存不变;

正是基于此设计概念,所以 React diff 算法只对同层进行比较,故将复杂度降低到 O(n) 而其体现形式即如下:

  • 对比不同类型的元素(当根节点为不同类型的元素时,React 会拆卸原有的树并且建立起新的树)
  • 对比同一类型的元素(仅对比更新有改变的属性)
  • 对比同一类型的组件元素(组件实例会保持不变,因此可以在不同的渲染时保持 state 一致)
  • 对子节点进行递归(默认情况下,React 会同时遍历两个子元素的列表;当产生差异时,生成一个 mutation

对子节点的递归涉及到我们为什么要为子元素设置 key ?即帮助 React 使用 key 来匹配原有树上的子元素以及最新树上的子元素。至于为什么不用下标作为 key ,我想读者加以思考便会知道

由于 React 依赖启发式算法,因此当以下假设没有得到满足,性能会有所损耗。

  1. 该算法不会尝试匹配不同组件类型的子树。如果你发现你在两种不同类型的组件中切换,但输出非常相似的内容,建议把它们改成同一类型。在实践中,我们没有遇到这类问题。
  2. Key 应该具有稳定,可预测,以及列表内唯一的特质。不稳定的 key(比如通过 Math.random() 生成的)会导致许多组件实例和 DOM 节点被不必要地重新创建,这可能导致性能下降和子组件中的状态丢失。

更多设计思想与实现细节请查看 协调 [Diff 算法](

HTTPS 和 HTTP 区别

  • https 协议需要到 CA 申请证书,一般免费证书较少,因而需要一定费用
  • http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl/tls 加密传输协议。
  • httphttps 使用的是完全不同的连接方式,用的端口也不一样,前者是 80, 后者是 443
  • http 的连接很简单,是无状态的;https 协议是由 SSL/TLS+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全

基本数据类型有哪些?如何判断?

七大基本数据类型:undefinednullbooleanNumberStringBigIntSymbol

引用数据类型:Object

判断:

  • typeof
  • instanceof
  • Object.prototype.toString()

这个地方面试官通常会引问:你会如何判断数组? 或者 typeof null 是?为什么?

其实需要搞清楚的是它们判断的原理是什么

typeof 通过机器码去判断,instanceof 通过原型链去判断,引问的问题你可以通过阅读下面这篇文章获取答案

浅谈 typeof 和 instanceof 的原理