初级走向中级前端(带答案)

最近面试了 很多1-2年的前端,网上手机了一些 问题和答案,发出来 希望能帮助到大家~

CSS篇

IOS手机浏览器字体齿轮

修改-webkit-font-smoothing属性

结果是:-webkit-font-smoothing: none: 无抗锯齿-webkit-font-smoothing: antialiased | subpixel-antialiased | default: 灰度平滑

怎么让Chrome支持小于12px 的文字?

我们的做法是:

针对谷歌浏览器内核,加webkit前缀,用transform:scale()这个属性进行缩放! p span {font-size:10px;-webkit-transform:scale(0.8);display:block;}

CSS预处理器(Sass/Less/Postcss)

CSS预处理器的原理: 是将类 CSS 语言通过 Webpack 编译 转成浏览器可读的真正 CSS。

在这层编译之上,便可以赋予 CSS 更多更强大的功能,常用功能: 嵌套 变量 循环语句 条件语句 自动前缀 单位转换 mixin复用

JS

网站js和css如何压缩?有哪些方法?

概念性知识点: 在线压缩js/css

http请求问题,HTTP请求信息由哪3部分组成?

  1. 请求方法URI协议/版本 (例如:GET/haorooms.jspHTTP/1.1)
  2. 请求头(Request Header)(例如:Accept:image/gif.image/jpeg./ Accept-Language:zh-cn Connection:Keep-Alive Host:localhost等等)
  3. 请求正文

前端性能优化问题,你是如何处理前端性能问题的?

www.haorooms.com/post/web_xn… 及 前端性能优化补充篇

写出最简单JS的去重方式 (重灾区)

  • es6的new Set()方式
let array = [0, 3, 4, 5, 3, 4, 7, 8, 2, 2, 5, 4, 6, 7, 8, 0, 2, 0, 90];
[...new Set(array)]
复制代码
  • es5的Array filter()
[1, 3, 4, 5, 1, 2, 3, 3, 4, 8, 90, 3, 0, 5, 4, 0].filter(function (elem, index, Array) {
  return index === Array.indexOf(elem);
})
复制代码

谷歌浏览器运行下面代码,并解释!

[].forEach.call($$("*"), function (a) {
  a.style.outline = "1px solid #" + (~~(Math.random() * (1 << 24))).toString(16)
})
复制代码

运行上面代码之后,会发现HTML层都被使用不同的颜色添加了一个高亮的边框。为什么会这样呢?

  • 原理解析:
  1. $$("*") 以数组的形式返回页面所有元素
  2. .forEach 。这是一种简写,完整的写法应该是这样:Array.prototype.forEach.call(...);很显然,简写更方便。
  3. .call 是一个prototype,JavaScript函数内置的。 .call 使用它的第一个参数替换掉上面说的这个 this ,也就是你要传人的数组
  4. 因此, [].forEach.call() 是一种快速的方法访问 forEach ,并将空数组的 this 换成想要遍历的list。

如何处理缓存?如何清除缓存。

ajax随机数、ajax参数、meta中设置等。. 可以看下我写的 js清除浏览器缓存的几种方法

  • meta方法
   //不缓存
   <META HTTP-EQUIV="pragma" CONTENT="no-cache"> 
   <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> 
   <META HTTP-EQUIV="expires" CONTENT="0">
复制代码
  • jquery ajax清除浏览器缓存
1. 用ajax请求服务器最新文件,并加上请求头If-Modified-Since和Cache-Control,如下:
    beforeSend :function(xmlHttp){ 
        xmlHttp.setRequestHeader("If-Modified-Since","0"); 
        xmlHttp.setRequestHeader("Cache-Control","no-cache");
     },
2. 直接用cache:false
3. 用随机数,随机数也是避免缓存的一种很不错的方法!
    URL 参数后加上 "?ran=" + Math.random(); //当然这里参数 ran可以任意取了
4. 用随机时间,和随机数一样。
    在 URL 参数后加上 "?timestamp=" + new Date().getTime();
复制代码

Websocket

Websocket 是一个 持久化的协议, 基于 http , 服务端可以 主动 push

  • 兼容:

FLASH Socket 长轮询: 定时发送 ajax long poll: 发送 --> 有消息时再 response

 let ws = new WebSocket(url);
 /* 收到消息回调 */
  ws.onmessage = onMessage;
  /* 连接断开回调 */
  ws.onclose = onClose;
  /* 连接成功回调 */
  ws.onopen = onOpen;
复制代码

解决跨域问题

  1. JSONP:利用

你可能感兴趣的:(初级走向中级前端(带答案))