首页 > 前端社招一年半字节跳动凉面
头像
牛客7730603号
编辑于 2021-03-01 10:09
+ 关注

前端社招一年半字节跳动凉面

一面

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=3

url对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

斐波那契实现,复杂度,斐波那契递归时间复杂度(O(2^N))

一年半社招苦苦挣扎,觉得跳槽=收集信息+准备面试题+项目

更多模拟面试

全部评论

(9) 回帖
加载中...
话题 回帖

推荐话题

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐