JS面试题

存储cookie

题目

  • 描述cookie localStorage sessionStorage区别

知识点

  • cookie

    • 本身用于浏览器和server通讯
    • 被‘借用’到本地存储来
    • 可用document.cookie=' '来修改
    • 存储大小,最大存储4kb
    • http请求时要发送到服务端,增加请求数量
    • 只能用document.cookie = ' ' 来修改,太过简陋
  • localStorage和sessionStorage

    • HTML5专门为存储设计,最大可存5M
    • API简单易用setItem,getItem
    • 不会随着http请求被发送出去
    • localStorage数据会永久存储,除非代码或手动删除
    • sessionStorage数据值存在于当前会话,浏览器关闭则清空
    • 一般用localStorage会更多 

http

  • 前端工程师开发界面
  • 需要调用后端的接口,提交/获取数据---http协议
  • 要求事先掌握好ajax

题目

  • http常见的状态码有哪些
    • 状态码分类
      • 1xx服务器收到请求
      • 2xx请求成功,如200
      • 3xx重定向,如302
      • 4xx客户端错误,如404(请求的地址服务端找不到)
      • 5xx服务端错误,如500
    • 常见状态码
      • 200成功
      • 301永久重定向(配合location(新的地址),浏览器自动处理):浏览器自己记住新地址,下次直接访问,使用情况:网站域名到期了或者想换域名了,老的域名就可以返回301状态码然后返回一个location 等于新的域名。以后浏览器不会再访问老的域名
      • 302临时重定向(配合location,浏览器自动处理):浏览器每次都会访问老地址,例如百度搜索引擎中访问其他网站,都是第一时间访问百度地址,然后再跳转到目标地址
      • 304 资源未被修改:服务端告诉你,之前请求的资源在本地还有效,不需要重新请求了
      • 404 资源未找到:请求的地址服务端找不到
      • 403 没有权限
      • 500 服务器错误
      • 504 网关超时:能访问到服务器,但是服务器内部在做处理,比如做跳转或者连接其他服务器(比如数据库)的访问时造成超时
    • 关于协议和规范
      • 就是一个约定
      • 要求大家都跟着执行
      • 不要违反规范,例如IE浏览器
  • http常见的header有哪些
  • 什么是RestfulAPI
    • REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移
    • API 设计规范,用于 Web 数据接口的设计
  • 描述下http的缓存机制(重要)

http methods

  • 传统的methods
    • get获取服务器的数据
    • post向服务器提交数据
    • 简单的网页功能,就是这两个操作
  • 现在的methods
    • get获取数据
    • post新建数据
    • patch/put更新数据
    • delete删除数据
  • Restful API
    • 一种新的API(前端后端交互的api)设计方法(早已推广使用)
    • 传统API设计理念:把每个url当做一个功能 (*)
    • Restful API设计理念 :把每个url当做一个唯一的资源(*)。如何设计成一个资源?
      • 尽量不用url参数
        • 传统的API设计:/api/list?pageIndex=2(很像一个函数+一个参数的样子)
        • Restful API 设计: /api/list/2(没有参数,就是一个资源标识,list的第二页)
      • 用method表示操作类型(传统的API设计,当做功能设计)做一个博客列表
        • post请求 /api/create-blog
        • post请求 : /api/update-blog?id=100
        • get请求 : /api/get-blog?id=100
      • 用method表示操作类型(Restful API设计)
        • post 请求: /api/blog
        • patch 请求: /api/blog/100
        • get 请求: /api/blog/100

http headers

  • 常见的Request Headers
    • Accept 浏览器可以接受的数据格式
    • Accept-Encoding 浏览器可接受的压缩算法,如gzip
    • Accept-Language浏览器可以接受的语言,如zh-CN
    • Connections:keep-alive 一次TCP连接重复使用(客户端和服务端建立连接之后就会重复的使用这个链接,不会断开,把资源一次性请求完成)
    • cookie:每次同域请求资源是浏览器自己携带cookie
    • Host 请求的域名是什么
    • User-Agent:浏览器信息(简称UA),例如:分析一个网站多少人用了Chrome浏览器,多少人用了Safari,IE浏览器,和不同的操作系统信息,都是通过服务端收到的UA来分析
    • Content-type 发送数据的格式(post请求中),如applications/json
  • 常见的Response Headers
    • Content-type 服务端返回数据的格式,如applications/json
    • Content-length 返回数据的大小,多少字节
    • Content-Encoding 返回数据的压缩算法,如gzip
    • Set-Cookie 服务端修改cookie

自定义header

​ * 用于简单的前端验证

缓存相关的headers

  • Cache-Control Expires
  • Last-Modified If-Modified-Since
  • Etag If-None-Math​

http 缓存

  • 什么是缓存
    • 把没必要重新从服务端获取的资源暂存一份,节省请求服务器浪费的时间
  • 为什么需要缓存
    • 通过缓存可以减少网络请求的数量和体积,让整个页面加载和渲染的速度更快一些
  • 哪些资源可以被缓存? ---- 静态资源(js css img)

强制缓存 

  • Cache-Control

    • max-age:设置最大缓存过期时间

    • no-cache:不用本地缓存,正常的向服务端请求,服务端进行处理(服务端可能有缓存措施),比如html资源,不想做缓存

    • no-store:不用本地缓存,也不用服务端的一些缓存措施(服务端“协商缓存”),更彻底

    • private:只能允许最终用户作为缓存

    • public:允许中间用户或者代理作为缓存

    • 在Response Headers 中( 由服务端决定哪个资源可以缓存,服务端添加)

    • 控制强制缓存的逻辑

  • Expires

    • 也是在Response Headers中
    • 也是控制缓存过期
    • 已经被Cache-Control代替

协商缓存(对比缓存)

  • 服务端缓存策略(判断一个请求资源是否可以使用本地缓存)
  • 服务器判断客户端资源,是否和服务端资源一样,一样就使用本地缓存
  • 如果一致则返回304,否则返回200和最新的资源
  • 资源标识

    • 在Response Headers中,有两种

    • Last-Modified资源的最后修改时间

    • 优先使用Etag

    • Last-Modified只能精确到秒级

    • 如果资源被重复生成,而内容不变,则Etag更精

三种刷新操作

  • 正常操作:地址栏输入url,跳转链接,前进后退等
    • 强制缓存失效,协商缓存有效
  • 手动刷新:F5,点击刷新按钮,右击菜单刷新
    • 强制缓存失效,协商缓存有效
  • 强制刷新:ctrl+F5
    • 强制缓存失效,协商缓存失效

http面试题 - 总结

开发环境

  • git
  • 调试工具
  • 抓包
  • webpack babel
  • Linux 常用命令

git

  • 常用的代码版本管理工具
  • 大型项目需要多人协作开发,必须熟用git
  • 如果不知道或者之前不用git,不会通过面试
  • git服务端常见的有github,coding.net等
  • 大公司会搭建自己的内网git服务
  • 常用命令
    • git add
    • Git checkout xxx
    • git commit -m 'xxx'
    • git push origin master
    • git pull origin master
    • git branch
    • git checkout -b xxx /git checkout xxx
    • git merge xxx

抓包

  • 移动端h5页,查看网络请求,需要用工具抓包
  • Windows一般用fiddler
  • Mac OS 一般用charles
  • 手机和电脑连同一个局域网
  • 将手机代理到电脑上
  • 手机浏览网页,即可抓包
  • 查看网络请求
  • 网址代理
  • https

webpack和babel

  • ES6模块化,浏览器暂不支持
  • ES6语法,浏览器并不完全支持
  • 压缩代码,整合代码,以让网页加载更快