一面
web-push原理,
web-push是一个协议,只是在草案中有( VAPID 协议保证用户信息的安全,只能通知到对应的浏览器)
授权:询问用户索取权限->生成公钥后验签的用户唯一标识信息->base64转码->ajax给后台数据库保存
是发布订阅模式,浏览器授权,去订阅服务器的消息通知,然后接收通知
原理应该是一种通信协议,再深入不知道了
是如何实现推送到服务端的,
和websocket有什么区别
不用websocket,不用http2,不用woker,那么如何实现服务端推送消息
骨架屏是什么
如何改善首屏优化和白屏
node中的require加载文件的顺序(很难,遇到的都是最难得面试题,操)
当 Node 遇到 require(X) 时,按下面的顺序处理。
(1)如果 X 是内置模块(比如 require('http')) a. 返回该模块。 b. 不再继续执行。
(2)如果 X 以 "./" 或者 "/" 或者 "../" 开头 a. 根据 X 所在的父模块,确定 X 的绝对路径。 b. 将 X 当成文件,依次查找下面文件,只要其中有一个存在,就返回该文件,不再继续执行。
X
X.js
X.json
X.node
c. 将 X 当成目录,依次查找下面文件,只要其中有一个存在,就返回该文件,不再继续执行。
X/package.json(main字段)
X/index.js
X/index.json
X/index.node
(3)如果 X 不带路径 a. 根据 X 所在的父模块,确定 X 可能的安装目录。 b. 依次在每个目录中,将 X 当成文件名或目录名加载。
(4) 抛出 "not found"
请看一个例子。
当前脚本文件 /home/ry/projects/foo.js 执行了 require('bar') ,这属于上面的第三种情况。Node 内部运行过程如下。
首先,确定 x 的绝对路径可能是下面这些位置,依次搜索每一个目录。
/home/ry/projects/node_modules/bar /home/ry/node_modules/bar /home/node_modules/bar /node_modules/bar搜索时,Node 先将 bar 当成文件名,依次尝试加载下面这些文件,只要有一个成功就返回。
bar bar.js bar.json bar.node如果都不成功,说明 bar 可能是目录名,于是依次尝试加载下面这些文件。
bar/package.json(main字段) bar/index.js bar/index.json bar/index.node如果在所有目录中,都无法找到 bar 对应的文件或目录,就抛出一个错误。
node项目如何部署
搭建环境,启动node项目,然后
ng配置证书路径ssl证书,免费证书
https://segmentfault.com/a/1190000010281512
https项目部署
http状态码: content-type有那几种,
x-www-urlecoded-form和application/json在post中的区别
json: 用来告诉服务端消息主体是序列化后的 JSON 字符串
application/json
application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦
POST http://www.example.com HTTP/1.1 Content-Type: application/json;charset=utf-8 {"title":"test","sub":[1,2,3]}application/x-www-form-urlencoded
这应该是最常见的 POST 提交数据的方式了。浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样(无关的请求头在本文中都省略掉了):
BASHPOST http://www.example.com HTTP/1.1 Content-Type: application/x-www-form-urlencoded;charset=utf-8 title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3url对key value进行编码,然后用&链接
multipart/form-data
这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 <form> 表单的 enctype 等于 multipart/form-data。直接来看一个请求示例:
BASHPOST http://www.example.com HTTP/1.1 Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="text" title ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="file"; filename="chrome.png" Content-Type: image/png PNG ... content of chrome.png ... ------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
option请求
浏览器中缓存 内存和磁盘中什么时候缓存到磁盘 (没找到一个很清晰的答案)
或者绕过这个问题:说磁盘是持久的,读取没内存快,内存快,但是关闭页面就没有了
就是: 一般要解析后的脚本都是放内存,不是脚本放磁盘 关闭浏览器之后,内存的数据被释放了,但是强缓存的数据还在磁盘上 磁盘就是严格按照强缓存来缓存的是吗
在此打开浏览器,访问目标页面时,先查询内存,没命中,查询磁盘,命中,直接返回
就是内存里会存储一些编译的脚本图片之类的吗,下载下来的文件,解析的文件 ??
所有缓存的资源最初都是在内存的,然后强缓存会写入磁盘 内存随时可能被释放 嗯嗯呢 内存的缓存不可预测是吗 查找缓存是先到内存找,没命中到磁盘找
应该是丢失了也没关系,因为强缓存类型的,磁盘上还有,只不过要先读入内存,会慢一点
强缓存返回什么状态码,协商缓存返回什么状态码
vue-router有几种方式
两种,一种是hash一种是history
两种刷新的话有什么现象,history不会变化(已解决,已理清楚)
浏览器在刷新的时候,会按照路径发送真实的资源请求,如果这个路径是前端通过 history API 设置的 URL,那么在服务端往往不存在这个资源,于是就返回 404 了。上面的参数的意思就是如果后端资源不存在就返回 history.html 的内容。
因此在线上部署基于 history API 的单页面应用的时候,一定要后端配合支持才行,否则会出现大量的 404。以最常用的 Nginx 为例,只需要在配置的 location / 中增加下面一行即可:
try_files $uri /index.html;
hash可能就会回到原始目录,因为hash的url在服务器端找不到对应的文件,这种问题怎么解决
reduce实现map
全部评论
(9) 回帖