0%

最优子结构详解

最优子结构:从子问题的最优结果推出更大规模的问题的最优结果。

Read more »

Start

完整示意图为:

整个过程需要进程的配合。结合之前的浏览器进程架构以及上面的示意图,整个过程的大概描述如下:

  • 首先,浏览器进程接收用户输入的 URL请求,浏览器进程便将该 URL 转发给网络进程。
  • 然后,在网络进程中发起真正的 URL 请求
  • 接着网络进程接收到了响应头数据,解析响应头数据,将数据转发给网络进程。
  • 浏览器进程接收到网络进程的响应头数据之后,发送“提交导航(CommitNavigation)”消息到渲染进程
  • 渲染进程接收到“提交导航”的消息之后,便开始准备接收 HTML 数据,接收数据的方式是直接和网络进程建立数据管道
  • 最后渲染进程会向浏览器进程“确认提交”,这是告诉浏览器进程:“已经准备好接受和解析页面数据”
  • 浏览器进程接收到渲染进程“提交文档”的消息之后,便开始移除之前旧的文档,然后更新浏览器进程中的页面状态
Read more »

为什么要写C++拓展模块

C++ 比 JS 解释器高效

相同意思的代码,在 JavaScript 解析器中执行 JavaScript 代码的效率通常比直接执行一个 C++ 编译好后的二进制文件要低。(这里指那些非并行、计算密集型的代码,因为模型不用,单线程下实现 C++ 的 Web 请求处理和有着异步 I/O 优势的 Node.js 下实现的 Web 请求处理也是不能相提并论的 —— Node.js底层使用了别的线程)

有个 NBody的例子,相同的代码,使用C++ 大约只需要6-7s,但使用Node.JS却需要20s左右,具体代码可以参看书中例子。

C++效率虽然高,但是所需要的维护成本和开发效率和 Node.js 也不在一个层次上。因此偶尔在一个整体使用 Node.js 开发的项目中使用 C++ 写一两个拓展也是一种很奇妙的体验。

Read more »

回溯算法解题框架

解决一个回溯问题,需要考虑以下三个问题:

  • 路径:也就是已经做出的选择
  • 选择列表:当前能做的选择
  • 结束条件:达到决策树的底层无法在做出选择

代码框架:

1
2
3
4
5
6
7
8
9
result = []
def backtrap(路径,选择列表):
if 满足结束条件:
result.add(路径)
return
for 选择 in 选择列表:
做选择
backtrap(路径,选择列表)
撤销选择
Read more »

http 请求流程

HTTP协议,正是建立在 TCP 连接的基础之上。HTTP是一种允许浏览器上服务器获取资源的协议,是Web的基础,通常由浏览器发起请求,用来获取不同类型的文件。http也是浏览器使用最多的最广的协议。

浏览器端发起http请求

如果你在浏览器里面输入一个url,浏览器会完成哪些动作呢?

1.构建请求

首先,浏览器构建请求行信息,构建好后浏览器发起请求。

1
GET /index.html HTTP1.1
Read more »

衡量 Web 页面性能有个重要的指标叫做:FP(First Paint),是指从页面加载到首次开始绘制的时长。更少的FP意味着更多的PV,更高的参与度、以及转换率。影响其的一个很重要的因素就是网络加载速度

想要优化网页的加载速度,需要对网络有一个深入的认识。

数据包的传输过程

互联网实际是一套理论和协议组成的体系架构。其中,因为有了协议这一众所周知的规则和标准,各方都同意使用 的前提下,那么它们的通信之间将变得毫无障碍。

互联网中的数据是通过数据包来传输的。发送的数据很大的话,会被拆成很多小的包来传输。例如音频数据就并不是一个大的文件。

Read more »

配置 shadowsocks 代理

即小飞机

image-20200517175437615

设置代理

image-20200517175502982

点击高级配置一波代理:

image-20200517181844309

然后在命令行里面使用如下的命令:

1
2
git config --global http.proxy 'socks5://127.0.0.1:1086'
git config --global https.proxy 'socks5://127.0.0.1:1086'

然后就可以加速处理了。

取消加速代理

1
2
git config --global --unset http.proxy
git config --global --unset https.proxy

bfs解题框架

参考文章

算法框架

bfs题目出现的常见场景:问题的本质实际上是在一张图里面找从 start 到 end 的最近距离

广义的描述有很多的题目变形:例如走迷宫、有的格子不能走、起点到终点的最短路?有瞬间传送的门?

Read more »

chrome 架构

一般我们使用chrome浏览器打开一个网页的时候,打开浏览器的任务管理器可以发现会发现chrome在这个时候会启用多个进程窗口。(同windows一样,chrome任务管理器也是用来展示运行中chrome使用进程信息的。)

这里就会涉及到chrome的多进程架构

并行处理

计算机的并行处理就是指在同一时刻处理多个任务,性能是要高于正常情况下用单线程来处理的。

线程 and 进程

多线程可以并行处理任务,但是线程不能存在的,还需要进程来启动和管理

进程指的是一个程序的运行实例:启动一个程序时,OS会为程序创建一块内存,用来存放代码、运行中的数据、和一个执行任务的主线程,这样的一个环境就可以叫做进程

image-20200513225045754

如图所示,线程是依附于进程的,进程中使用多线程并行处理是能够提升运行效率。

Read more »