前端面试3

2017-10-20  本文已影响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()

弊端:

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

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记录协议

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

13、前后端分离做SEO

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:

BFC作用:

18、绝对定位和相对定位

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

19、margin叠加

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做单位

上一篇下一篇

猜你喜欢

热点阅读