web反思 | 青训营笔记

41 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第9天

1. 响应

面试常问问题之——如果一个人在网页输入www.google.com会发生什么?

www.google.com → DNS

面试的时候可以从sign in, sign out角度讲:这样sign in的时候header会多一个token (authorization_bearer)

通常:新的browser会去DNS寻址,DNS解析域名, 返回ip地址。之后再发get请求,之后返回200 ok和html. 如果有cache了,则不用去寻址了。

HTTP Request 如何传参:

1. URL Regrex: eg: courses/OOD

2. Get Request: ?key=value (重要信息不从url传)

3. body传(通常是post request): 用于传的文件比较大的时候

API key:

google map api为什么要让你设置api key:

通常是看谁在用api,避免过度使用,对使用者进行权限控制(比如看谁在疯狂call,导致服务坏掉:)

Djangle流程: 

先去views里查routing table(查api对应哪个function处理它)

读token验证身份,查database,拿到object,序列化返回数据(key-value pair)

2. 单机系统如何处理更多的请求:

1. 前端避免不必要渲染:

- state放在minimal position,而不是更大的component

- 存cache: eg:render时closealert是function的话就有可能一直开变量closealert,通常函数在定义后函数就不会改变了,所以没必要

2. 解决大量图片渲染:

- 渲染小图

- progressive loading

- lazy loading

3. 缓存

- 这样下次client call api,就能直接返回给client,client端自查,就不需要call api了

4. database设计好

- 遵循normal form,避免频繁跨表查询,可以做indexing,这样查起来会比较快

5. 提高硬件(买更好的机器)-> 提高memory

6. 减少对硬盘读写:检查从硬盘读出的数据是否可以放在memory里

7. 写好代码:)

8. 多线程(分开做不同的task)

3. 分布式系统优化

1. 一个机器放database,一个机器前端/后端

2. 两个机器跑相同的代码,用load balancer分配任务

sharding概念:

eg: instance A装了100万数据 0

      instance B 装了100万数据 1

这两个instance是会平均分配的

和indexing区别:indexing只是为了提高读query的速度