美文网首页
前端面试3

前端面试3

作者: 涯无凌 | 来源:发表于2017-10-20 23:14 被阅读0次

    1、浏览器渲染过程

    http://blog.csdn.net/xiaozhuxmen/article/details/52014901

    解析html以构建dom树 -> 构建render树 -> 布局render树 -> 绘制render树

    解析过程:
    (1) HTML/SVG/XHTML,解析这三种文件会产生一个 DOM Tree。
    (2) CSS,解析 CSS 会产生 CSS 规则树。
    (3) Javascript脚本,主要是通过 DOM API 和 CSSOM API 来操作 DOM Tree 和 CSS Rule Tree

    HTML页面加载和解析流程

    1. 用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务器返回html文件;
    2. 浏览器开始载入html代码,发现<head>标签内有一个<link>标签引用外部CSS文件;
    3. 浏览器又发出CSS文件的请求,服务器返回这个CSS文件;
    4. 浏览器继续载入html中<body>部分的代码,并且CSS文件已经拿到手了,可以开始渲染页面了;
    5. 浏览器在代码中发现一个<img>标签引用了一张图片,向服务器发出请求。此时浏览器不会等到图片下载完,而是继续渲染后面的代码;
    6. 服务器返回图片文件,由于图片占用了一定面积,影响了后面段落的排布,因此浏览器需要回过头来重新渲染这部分代码;
    7. 浏览器发现了一个包含一行Javascript代码的<script>标签,赶快运行它;
    8. Javascript脚本执行了这条语句,它命令浏览器隐藏掉代码中的某个<div> (style.display=”none”)。突然少了这么一个元素,浏览器不得不重新渲染这部分代码;
    9. 终于等到了</html>的到来,浏览器泪流满面……
    10. 等等,还没完,用户点了一下界面中的“换肤”按钮,Javascript让浏览器换了一下<link>标签的CSS路径;
    11. 浏览器召集了在座的各位<div><span><ul><li>们,“大伙儿收拾收拾行李,咱得重新来过……”,浏览器向服务器请求了新的CSS文件,重新渲染页面。

    2、无刷新路由的实现

    使用数组存储路由对象,对象中存放url地址和组件名

    跳转时通过window.history.pushState(state, title, url)或者window.history.replaceState(state, title, url)修改

    如果不支持html5,则使用hash

    3、三次握手改为两次握手或四次握手

    两次握手:A->B , B->A, A->B, 第三次对第二次的确认了,才算连接成功。如果改为两次,第二个包能否发送到A,B是不知道的。对第二个包, A如果能成功收到,A则知道建立连接成功了,如果超时,A可判断第二个包发送失败,连接失败。对第二个包,B是不知道能否发送成功的(需要地三个包来确认)

    四次握手:三次握手就可以确认客户端和服务器都确立收到包了,可以确立连接了

    2MSL

    4、原生JS实现lodash.flatten

    function flatten (arr, isDeep) {
        var ret = [];
      for (var i = 0; i < arr.length; i++) {
        if (arr[i] instanceof Array) {
          ret = isDeep 
            ? ret.concat(flatten(arr[i], true))
            : ret.concat(arr[i]);
        } else {
          ret.push(arr[i]);
        }
      }
      
      return ret;
    }
    

    5、什么时候用到document.write()

    • 加载需要配合JS脚本使用的外部CSS文件

      <scirpt>
          document.write('<link  rel="stylesheet" href="style_neads_js.css">');
      </script>
      

      将所有需要用到JS的样式都放到这个外部样式表中,如果浏览器不禁用JS,那么该样式表就会被顺利加载,否则页面就不会使用该样式。

    • 在新的窗口中写入新的页面数据时

      document.open();
      document.write('anthing')
      document.close();
      

    弊端:

    • 在非loading阶段调用document.write会清除已加载的页面;
    • document.write不能够在XHTML中使用;
    • 嵌入script中的document.write不能给任意节点添加子节点,因为它是随着DOM的构建执行的;
    • 利用document.write写入HTML字符串流并不是一个好方法,它有违DOM操作的概念;
    • 利用document.write添加script加载外部脚本时,浏览器的HTML解析会被script的加载所阻塞;

    6、js 位运算

    http://www.cnblogs.com/xljzlw/p/4231354.html

    7、font-face

    CSS3 自定义字体

    @font-face{
        font-family: myFont;
        src: url('myFont.ttf'),
                 url('myFont.eot')  // 字体资源路径
    }
    

    8、json 和 xml比较

    http://www.cnblogs.com/SanMaoSpace/p/3139186.html

    • XML的优点

      • 格式统一,符合标准;
      • 容易与其他系统进行远程交互,数据共享比较方便。
    • XML的缺点

      • XML文件庞大,文件格式复杂,传输占带宽;
      • 服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;
      • 客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;
      • 服务器端和客户端解析XML花费较多的资源和时间。
    • JSON的优点:

      • 数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
      • 易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;
      • 支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析;
      • 在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取;
      • 因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。
    • JSON的缺点
       没有XML那么通用性;

    9、Web缓存

    Web缓存分为数据库缓存、代理服务器缓存、CDN缓存和浏览器缓存

    浏览器缓存设置HTTP缓存、WebStorage

    10、HTTP协议

    Http是一个基于请求与响应模式的无状态的、应用层的协议,常基于TCP的连接方式

    HTTP请求由请求行、消息报头、请求正文组成
    HTTP响应由响应行、消息报头、响应正文组成

    http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html

    11、最小生成树

    无向图n个顶点,构造成一棵树,有n-1条边,没有构成环,加权值最小

    https://www.2cto.com/kf/201603/496259.html

    12、SSL协议

    上层协议:SSL握手协议、SSL密码变化协议、SSL警告协议
    底层协议:SSL记录协议

    • SSL握手协议:是SSL协议非常重要的组成部分,用来协商通信过程中使用的加密套件(加密算法、密钥交换算法和MAC算法等)、在服务器和客户端之间安全地交换密钥、实现服务器和客户端的身份验证。
    • SSL密码变化协议:客户端和服务器端通过密码变化协议通知对端,随后的报文都将使用新协商的加密套件和密钥进行保护和传输。
    • SSL警告协议:用来向通信对端报告告警信息,消息中包含告警的严重级别和描述。
    • SSL记录协议:主要负责对上层的数据(SSL握手协议、SSL密码变化协议、SSL警告协议和应用层协议报文)进行分块、计算并添加MAC值、加密,并把处理后的记录块传输给对端。

    http://www.jianshu.com/p/d366e5fcd58b

    13、前后端分离做SEO

    • 首屏预渲染
    • 服务端渲染SSR,实现前后端同构,一套代码在浏览器和node环境都可以运行
    • Google搜索引擎支持hashtag再rewrite访问静态页面,使用pushState实现无刷新路由控制

    https://www.zhihu.com/question/52235652

    14、上千条数据显示在DOM列表中,如何防止卡顿

    只创建一定数量的DOM节点,滚动时根据滚动条修改DOM节点的内容,比如Framework7的Virtual List组件,通过相对定位设置每个li标签的top,滚动时根据一定的条件,同时修改top和li标签的内容

    15、data-xxx 属性

    data-属性用来存储页面或应用程序的私有自定义数据

    16、margin

    在margin属性中一共有两类参考线,top和left的参考线属于一类,right和bottom的参考线属于另一类。top和left是以外元素为参考,right和bottom是以元素本身为参考

    17、BFC

    Block Formatting Context,中文直译为块级格式上下文。BFC就是一种布局方式,在这种布局方式下,盒子们自所在的containing block顶部一个接一个垂直排列,水平方向上撑满整个宽度(除非内部盒子自己建立了新的BFC)。两个相邻的BFC之间的距离由margin决定。在同一个BFC内部,两个垂直方向相邻的块级元素的margin会发生“塌陷”

    创建BFC:

    • float属性不为none
    • overflow不为visible(可以是hidden、scroll、auto)
    • position为absolute或fixed
    • display为inline-block、table-cell、table-caption

    BFC作用:

    • 清除浮动
    • 垂直margin合并
    • 创建自适应两栏布局

    18、绝对定位和相对定位

    绝对定位:absolute,相对于第一个具有定位元素(absolute,relative)的祖先元素,吗,没有定位元素的祖先元素则相对于body定位
    相对定位:relative,相对于其在普通流中的位置进行定位的

    19、margin叠加

    • 浮动元素和其他任何元素之间不发生外边距叠加 (包括和它的子元素).
    • 创建了 BFC 的元素不会和它的子元素发生外边距叠加
    • 绝对定位元素和其他任何元素之间不发生外边距叠加(包括和它的子元素).
    • inline-block 元素和其他任何元素之间不发生外边距叠加 (包括和它的子元素).
    • 普通流中的块级元素的 margin-bottom 永远和它相邻的下一个块级元素的 margin-top 叠加(除非相邻的兄弟元素clear)
    • 普通流中的块级元素(没有 border-top、没有 padding-top )的 margin-top 和它的第一个普通流中的子元素(没有 clear )发生 margin-top 叠加
    • 普通流中的块级元素( height 为 auto、min-height 为 0、没有 border-bottom、没有 padding-bottom )和它的最后一个普通流中的子元素(没有自身发生 margin 叠加或 clear )发生 margin-bottom 叠加
    • 如果一个元素的 min-height 为 0、没有 border、没有 padding、高度为 0 或者 auto、不包含子元素,那么它自身的外边距会发生叠加

    20、元素

    块级元素:P|H1|H2|H3|H4|H5|H6|UL|OL|PRE| DL | DIV | NOSCRIPT | BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS

    行内元素:#PCDATA(即文本)| TT | I | B | BIG | SMALL|EM | STRONG | DFN | CODE |SAMP | KBD | VAR | CITE | ABBR | ACRONYM|A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO|INPUT | SELECT | TEXTAREA | LABEL | BUTTON

    可置换元素:img|input|select|textarea|button|label

    21、响应式布局和流式布局

    响应式布局:根据不同设备宽度设定不同样式,主要靠媒体查询实现

    流式布局:即百分比布局,宽度用百分比,高度用px做单位

    相关文章

      网友评论

          本文标题:前端面试3

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