常考面试题

151 阅读2分钟

1. 什么是BFC?

BFC就是Block Formatting Context(格式化上下文),具有BFC特征的元素可以看做独立容器,容器里面的元素不会影响到外面的元素,相当于一个独立块区域

触发条件有:

  1. body 根元素
  2. 浮动元素 float除了none值外
  3. 绝对定位元素:position (absolute、fixed)
  4. display 为inline-block、table-cells、flex
  5. overflow 除了visible以外的值(hidden、auto、scroll)

可以解决

  1. 同一个 BFC 下外边距会发生折叠
  2. BFC 可以包含浮动的元素(清除浮动)
  3. BFC 可以阻止元素被浮动元素覆盖,两列布局(float + overflow:hidden)

参考:

可以详细参考:zhuanlan.zhihu.com/p/25321647

2. 什么是盒子模型?

盒子模型有两种:W3C标准盒子模型IE盒子模型,标准盒子模型(box-sizing:content-box),内容宽高是内容的大小,IE盒子模型(box-sizing:border-box),内容宽高为:内容大小+padding+border

参考 juejin.cn/post/684490…

3.如何实现左侧宽度固定,右侧宽度自适应的布局

  1. float + margin: (float:left;width:10px) + (margin-left:10px)
  2. calc:(float:left;width:10px) + (float:right;width:calc(100% - 10px))
  3. float + overflow:(float:left) + (overflow:hidden)
  4. flex: father{difplay:flex} + float:left + flex:1

4.跨域的方法

  1. jsonp:利用img、script、iframe没有同源要求的标签,所以它只支持get,并且要服务器支持,通过url+callback=func返回值,记得处理XSS攻击
  2. CORS:向服务端发出XMLHttpRequest请求,也需要服务器支持,Access-Control-Allow-Origin 浏览器端设置请求源,服务端设置允许请求源,vue的axios封装了CORS
  3. proxy:将指定字符串的请求,发送到目标服务器
devServer:{
    '/api':{
        target: "http://127.0.0.1:8091", // 这里一定要记得添加http
        changeOrigin: true  // 这里设置允许跨域
    }
}
  1. 除了前面提到的跨域方案,你还可以使用nginx反向代理,它和proxy十分类似,都是访问中间层,由中间层去访问目标服务器 另外还有很多讨巧的方法进行跨域,比如你在页面中使用iframe标签,使用哈希location.hash的方式,进行跨域并且传递数据;也可以使用window.name或者H5的postMessage接口

参考:juejin.cn/post/684490…

5.HTTP1.1和HTTP2的区别

相对于HTTP1.0,HTTP1.1的优化:

  1. 缓存处理:多了Entity tag,If-Unmodified-Since, If-Match, If-None-Match等缓存信息(HTTTP1.0 If-Modified-Since,Expires)
  2. 带宽优化及网络连接的使用
  3. 错误通知的管理
  4. Host头处理
  5. 长连接: HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

相对于HTTP1.1,HTTP2的优化:

  1. HTTP2支持二进制传送(实现方便且健壮),HTTP1.x是字符串传送
  2. HTTP2支持多路复用
  3. HTTP2采用HPACK压缩算法压缩头部,减小了传输的体积
  4. HTTP2支持服务端推送

参考:juejin.cn/post/684490…

待续未完。。。