美文网首页
面试准备

面试准备

作者: 星月西 | 来源:发表于2017-09-12 10:41 被阅读28次

    1.本地存储

    • navigator.onLine 判断设备是否能上网
    • HTML5应用缓存,为离线web应用设计,可以用一个描述文件manifest file,列出要下载和缓存的资源

    1.1 cookie

    • document.cookie 可以访问cookie
    • cookie 在客户端存储会话信息,用于保存客户端状态
    • 响应中包含Set-Cookie字段,要求设置相应cookie
    • 向相同域名发送请求都会包含这个cookie
    • 浏览器对cookie数量限制在每个域30或50个,超过cookie数量,浏览器就会清楚之前设置的cookie,删除最少使用的cookie,为了绕开限制可以使用子cookie
    • cookie大小限制在4095B范围内
    • cookie是由分号隔开,需要用encodeURIComponent编码后存入
    • 可以添加HTTP-only字段,cookie只能从服务器读取,

    1.2 localStorage

    持久化存储数据,同源策略

    • clear
    • setItem
    • getItem
    • removeItem
    • length 获取有多少键值对在Storage对象中
      在safa上,无痕模式下去写入LocalStorage会报错,要注意捕获异常

    1.3. SessionStorage

    存储会话数据,数据只保持到浏览器关闭

    • 对存储数据进行修改,都会在文档上触发storage事件
    • 每个来源2.5M的大小限制

    1.4 IndexedDB

    同源策略,对象存储数据库,所有操作为异步执行,客户端本地数据库

    2.nodejs

    • 中间件
      是一个处理请求对象和响应对象的函数,在express请求响应循环中,下一个内联的中间件通常用变量next表示
    • 执行任何代码
    • 修改请求和响应对象
    • 终结请求-响应循环
    • 调用堆栈中的下一个中间
      如果中间件没有终结请求响应循环,则必须调用next方法将控制权交给下一个中间件,否则请求就会挂起
    • 常用中间件
      • flash
        后台管理部分用于显示成功和错误信息
      • wechat, wechatCenter
        用于处理微信公众号发过来的请求,

    4.preact

    • 与React相同的API,更容易迁移
    • 更小的体积,更适用于移动端,首屏渲染时间小于React
    • 渲染性能更好
    • 专注于React服务端渲染
    • 花更多时间去解决更关键的问题,而不是花在使用替换方案和解决其兼容性上
    • React项目使用在自己的核心产品上

    3.React生命周期

    生命周期分为挂载,渲染,卸载这几个阶段

    • 挂载阶段
      componentWillMount可以在render方法之前执行,componentDidMount会在render方法之后执行,在componentWillMount中调用setState方法,组件会更新state,但组件只渲染一次

    • 卸载阶段
      componentWillUnmount
      执行一些清理方法,事件回收或是清除定时器

    • 更新阶段
      如果组件自身的state更新了,会依次执行

      • shouldComponentUpdate
        接受更新的props和state,在需要时更新,不需要时不更新,即是否执行虚拟DOM对比
    • componentWillUpdate
      渲染前后时刻,不能执行setState,会造成死循环,自身调用自身

    • componentDidUpdate
      渲染之后时刻

    • componentWillReceiveProps
      在props传入后,渲染之前setState,这里调用setState不会二次渲染

    • 可以使用setstate的有
      componentWillMount
      componentDidMount
      componentWillReceiveProps
      componentDidUpdate

    • 将无状态组件写成函数组件
      展示型组件,也无法使用组件的生命周期方法

    4.React性能优化

    1.如果新的props和旧的一样,这是React还是要进行虚拟DOM的diff,,这个diff就是多余的性能损耗,而且在DOM结构比较复杂的情况,整个diff会花费较长的时间
    可以通过集成React.pureComponent纯组件来优化性能,它重写了shouldComponentUpdate,浅比较Props和state,当两者相等时返回false,这样组件就不会进行虚拟DOM的diff
    2.有特殊需求时,可以使用shouldComponentUpdate来判断是否需要更新组件,比如判断传入数据的id是否有变化等等
    3.diff算法不会尝试比较不同组件类的子树,如果发现正在使用的两个组件类输出的DOM结构非常相似,可以把这两个组件类改成一个组件类
    4.不要进行DOM节点跨层级的操作,保持稳定DOM结构有助于性能的提升,可以通过CSS隐藏和显示节点,而不是真正地移除和添加DOM节点
    5.React会将所有显示到DOM的字符串转义,防止XSS

    5.使用Symbol设置私有属性

    let Person=(function(){
        let _name=Symbol();
        class Person{
            constructor(name){
                this[_name]=name;
            }
    
            get name(){
                return this[_name];
            }
        }
        return Person;
    })();
    
    let a=new Person('red');
    console.log(a.name);
    

    首先在函数作用域内创建属性名,使用闭包引用这个变量,就不会被垃圾回收器回收,接着使用Symbol设置属性名,保证不会重名,且外部无法生成同样的值,保证唯一性

    6.express特点

    • 自带路由和路由规则,需要body-parser解析请求主体
    • 使用一个接一个的中间件的线性结构

    7.koa特点

    • 洋葱模型,调用next下一个中间件的前后都能执行相应的代码

    8.HTTP请求报文和响应报文

    8.1 请求报文

    请求报文由

    • 请求行,请求头部,请求主体构成
      请求行包含请求方法,请求URL,HTTP协议及版本
      响应报文
    • 响应行,响应头部,响应主体构成
      响应行包含HTTP协议及版本,状态码及描述

    9.性能优化

    • 根据User-Agent判断浏览器的类型,如果是谷歌浏览器返回webp格式

    10.请求报文和响应报文

    请求报文由

    • 请求行
      请求方法,URL字段,HTTP协议版本
    • 请求头部
      User-Agent 请求浏览器的类型
      Host 请求的主机名
    • 请求主体

    响应报文

    • 响应行
      状态码,HTTP协议版本
    • 响应头部
      Set-Cookie字段
      Content-Type字段
    • 响应主体

    11.垃圾回收机制

    内存分配量达到了一个临界值,垃圾收集器就会运行,这个临界值会动态调整。
    如果垃圾回收的内存分配量低于15%,那么临界值就会加倍,垃圾回收的内容分配量高于85%,那么临界值会重置为默认值

    12.ES6

    及时清除引用是非常重要的,WeakSet和WeakMap对值的引用都是不计入垃圾回收机制的,这是弱引用,一旦消除对该节点的引用,它占用的内存就会被垃圾回收机制释放,WeakMap保存的键值对也会自动消失,向向对象上添加数据,又不想干扰垃圾回收机制,就可以使用WeakMap

    • WeakSet
      • 防止不重复值得集合,成员只能是对象,而不能是其他类型的值
      • WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用
      • 内部有多少成员取决于垃圾回收机制有没有运行,运行前后成员个数不同,垃圾回收机制何时运行是不可预测的
      • WeakSet不可遍历

    13.暂时性死区

    只要在块级作用域内存在let命令,声明的变量就绑定这个区域,不再受外部影响,在声明之前使用变量,会报错
    只要已进入当前作用域,索要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才能获取和使用该变量

    14.前端SEO

    • 合理的title,description,keywords
    • 语义化HTML代码
    • 重要内容HTML代码放在最前 搜索引擎对抓取的长度有限制
    • 重要内容不要用js输出
    • 少用iframe
    • 非装饰性图片必须加alt
    • 提高网站速度:网站速度是搜索引擎排序的一个重要指标

    相关文章

      网友评论

          本文标题:面试准备

          本文链接:https://www.haomeiwen.com/subject/jfufsxtx.html