1
  • 简述 html5 离线储存的原理,同时说明如何使用

    原理 :

    HTML5 的离线缓存储存是基于一个.appcache 文件的缓存机制(不是储存技术),通过这个文件上的解析清单离线储存资源,这些资源就会像 cookie一样被储存下来.这样当网络处于离线状态下的时候,浏览器会通过被离线储存下来的数据展现页面.

    更新缓存

    一旦应用被缓存,他会保持缓存直到发生下列情况
    1 用户清空浏览器缓存
    2 manifest 文件被修改
    3 由程序来更改缓存

    如何使用

    1. 页面头部像下面一样加入一个manifest的属性

      <!DOCTYPE HTML>
      <html manifest = "cache.manifest">
          ...
      </html>
    2. 在cache.manifest 文件编写离线储存的资源

      CACHE MANIFEST
      #v0.1
      CACHE:
          js/index.js
          css/index.css
      NETWORK:
          images/logo.png
      FALLBACK:
          *.html /404.html /* / /404.html 或 /html/ /404.html 也可*/
      以 # 开头的是注释, 一般会在第二行写个版本号,用来在缓存的文件更新的时候,更新 mainfest 以实现浏览器重新下载新的文件,可以是版本号,时间戳, md5 码等等

      离线存储的manifest一般由三个部分组成:

      • CACHE: 必选; 表示需要离线储存的资源列表,由于包含 mainfest 文件的页面会被自动离线缓存,所以不用吧自身页面也列出来
      • NETWORK: 可选; 可以使用通配符,表示在他下面列出来的资源只有在在线的情况下才能访问,他们不会被离线缓存,所以在离线状态下无法使用这些资源.不过如果有资源在 CACHE 和 NETWORK 中同时存在,该资源还是会被缓存,也就是说 CACHE 优先级高于 NETWORK
      • FALLBACK: 可选; 表示如果第一个资源访问不到,那么就使用第二个资源来替换他; 例如:/html//404.html. 表示用"404.html"代替/html/中的所有文件; //404.html 表示用"404.html"代替当前目录中的所有文件; *.html/404.html 表示用 "404html"代替所有.html 文件

  • 清除浮动的方法有哪些,以及其优缺点

    首先说明, 确实是现在用浮动的很少了.基本上 flex 和基本的定位布局都能满足需求了;
    浮动带来的问题是盒子塌陷问题.清除浮动就是为了解决这个问题的

    什么是盒子塌陷
    外部盒子本应该包住内部的浮动盒子,结果却没有
    出现问题的原因
    父元素只包含浮动元素,那么他的高度就会塌陷为 0;前提是没有设置高度,或者设置为 auto 就会出现这种情况.如果父元素不包含任何可见元素,这个问题就很难被注意到.因为子元素设置了float属性,而float属性会把元素从标准文档流中抽离,直接结果就是外部盒子丢了两个孩子,因为内部没有其它盒子了,所以外部盒子只包裹文本节点内容,却把两个内部盒子扔在外面了.
    解决办法

    1. 给外部盒子也添加浮动
      把外部盒子也从标准文档流中抽离
      缺点 : 可读性差,不易于维护(别人很难理解为什么要给父元素也添上float),而且可能需要调整整个页面布局。
    2. 在外部盒子内最下方添上带clear属性的空盒子
      可以是 div 也可以是其他块级元素;把 <div style="clear:both;"></div>放在盒内底部,用最下面的空盒子清除浮动,把盒子重新撑起来。
      缺点 : 引入多余元素
    3. 用overflow:hidden清除浮动
      给外部盒子添加这个属性即可;
      缺点 : 有可能造成溢出元素不可见,影响展示效果
    4. 用after伪元素清除浮动
      给外部元素的 after 伪元素设置 clear 属性,然后再隐藏;此方法原理跟2 的在外部盒子最下方添加带上 clear 的盒子一样.只是这样是一种纯 css 的方法,避免了多余元素

      .clearfix::after{
          content:'';
          display:block;
          height:0;
          line-height:0;
          clear:both;
      }

  • 写一个加密字符串的方法

    这里如果只是简单的方法其实有现成的 就是字符串的charCodeAt和charAt(). 然后还可以使用encodeURIComponent()和decodeURIComponent.

    先贴一个答案吧 这个答案有些地方我还没搞懂, 先贴出来大家看看,如果有人知道为啥的话希望可以给我讲解讲解里面的+padding 是有什么用 是用来干嘛的 感谢

// 利用 base64, 浏览器环境自带 btoa / atob 方法
// Node.js 需要引入相关库
const str = "abcdefg";

console.log(btoa(str));
console.log(atob(btoa(str)));

// 凯撒密码
const encodeCaesar = ({str = "", padding = 3}) =>
  !str
    ? str
    : str
        .split("")
        .map((s) => String.fromCharCode(s.charCodeAt() + padding))
        .join("");

const decodeCaesar = ({str = "", padding = 3}) =>
  !str
    ? str
    : str
        .split("")
        .map((s) => String.fromCharCode(s.charCodeAt() - padding))
        .join("");

console.log(encodeCaesar({str: "hello world"}));
console.log(decodeCaesar({str: "khoor#zruog"}));

面试题摘自 Github


Evil
376 声望1 粉丝

不是修电脑的!电脑卡怎么办?买新的!!买贵的!!!