我应该要知道的前端面试题

这些年

15年入校,那个时候的我什么也不懂。
不知道什么是计算机网络,也不知道什么是数据结构。
不会C++和Java,也不理解什么是编译原理。

那个时候的我选了软件工程这个专业,过的也是得过且过的生活。所以大一一整个学年除了数学还能吃点高中的老本,其他的专业课简直是一塌糊涂。

说到底,真正让我开始对编程感兴趣的一件事情就是前端。因为它是可见的,所见即所得。不像之前学习C++的时候,面对着黑框框,写着似是而非的代码。
再后来,意外的在网上参加了一个教育机构的课程,对前端的理解也逐步加深。

因为专业的原因,我们没有课程是专门来讲前端的,老师说只能让我们自己去学。那个时候在同学的推荐下看了慕课网的教程,学习了许多html、css和js的语法,也因为各种比赛写了不少的前端的页面。怎么说呢,页面确实能写出来,但还是因为没有经过系统的学习,前端在基础上还是很差的。

到了大三下学期,也就是现在。我们需要找实习了,刚开始还是满怀信心的投了BAT的内推,看了他们的招聘条件,觉得自己也是符合。可是没想到,自己在前端上的理解简直如同井底之蛙。

我以为的前端就是写写web界面,完成一些动画特效。从来没有深入去理解过一些比如兼容,html5新特性,以及我们最常打交道的http协议。经过这段时间的学习,我发现我仅仅只是刚刚起步而已,至于大二期间说的做全栈工程师,我想也就是一个不切实际的梦想吧。

说了这么多,最后还是总结一下关于前端,我们应该了解什么吧。

http的请求方法有哪些?

head,get,post,put,delete,option,traceback,connection

Http和Https的区别?

http的默认端口是80,而https的默认端口是443。
http传输的数据是明文的,而https传输的数据是加密的,https会建立信息安全通道,并且会对服务器做验证。在主流搜索引擎中,他们更倾向于抓取https的页面,也就是说https利于seo。
http在建立连接时需要三次握手,断开连接时需要四次挥手。/https也是三次握手和四次挥手/
https需要ca证书认证,其中的s其实指的是ssl。

JS实现继承的几种方式?

  1. 原型链继承
  2. 构造继承
  3. 实例继承
  4. 拷贝继承
  5. 组合继承
  6. 寄生组合继承

详见这位大神的博客,传送门

什么是JS的严格模式?

设立严格模式的目的主要是在一个更加规范的JS环境中,正确的编码运行,为未来的编码做准备。使用严格模式的方法是“‘use strict’”,作用域为当前块级作用域。如果在首行,则是整个文件都将使用严格模式。如果在函数开头,则整个函数作用域为严格模式。相关博客传送门

什么是Sass和Less?

Sass是基于Ruby的,是在服务器端处理的。而less是基于JavaScript的,是在客户端处理的。sass和less都是css预处理器,也就是说,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件。

你所知道的浏览器内核?

IE浏览器的内核是trident,FireFox的内核是Gecko,Opera的内核是presto,后来变成了WebKit ,Chrome的内核是blink。

NodeJs的优点是什么?

NodeJs适用于高并发的场景,异步非IO阻塞,不适用于密集计算。传送门

如何进行SEO优化?

尽量使用https协议,尽量将页面静态化,页面title尽量简短,meta标签中的keyword不要太宽泛。页面深度不超过三层,减少页面加载时间。使用Robot.txt,等等。

src和href的区别?

src通常指的是外部资源连接,而href表示的是网络资源,也可建立链接。通常情况下,当页面加载到src连接的资源时,会被阻塞,直到被页面加载进来,这也就是为什么外部script应该放在页面底部而不是head中。

JS中的垃圾回收机制

常见的垃圾回收机制有两种:引用计数和标记清除。Js一般采用的是后者。所谓引用计数是指跟踪记录每个值被引用的次数。当声明了一个变量并将一个引用类型赋值给该变量时,则这个值的引用次数就是1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数就减1。当这个引用次数变成0时,则说明没有办法再访问这个值(也就是原来的那个引用类型)了。
标记清除是指当对象进入运行环境的时候,为其增加标记。运行结束或者移出运行环境的时候删除标记。最后,垃圾收集器完成内存清除工作。
传送门

关于跨域的解决办法?

  1. 使用jsonp,缺点是只能使用get请求,并且不能够知道是否请求失败
  2. 服务器允许访问,cors跨域资源共享
  3. document.domain 允许跨子域
  4. window.name
  5. window.postMessage,html5的新方法

你有没有见过这样的闭包?试试看下面这道题?

var add = function(x){  
    var sum = 1;  
    var tmp = function(x){  
        sum = sum + x;  
    return tmp;  
    }  
    tmp.toString = function(){  
        return sum;  
    }  
    return tmp;  
}

add(10)(2)(3)//输出什么?

结果是6,参考链接

position中的可能取值?

relative,absolute,static,fixed,sticky,initial,inherit,unset….
没想到吧,竟然有八个…

JS异步编程有几种方式?

  1. 回调函数
  2. 事件监听
  3. 发布/订阅
  4. Promise对象

前端性能优化的注意点是什么?

  • 页面加载时:减少http请求(懒加载方式,异步加载),减少css、js的大小,使用CDN加速
  • 页面加载中:将script外部资源放于页面底部,css放于页面顶部。减少重绘和回流。尽量使用css而不是图片。
  • JS执行时:尽量减少dom操作

rem、em的区别?

rem是相对于根节点或者说是浏览器字体的默认大小而言的。通常情况下1rem = 16px。而em是相对父元素的字体大小,或者最近父元素的字体大小。

了解过ES6和React吗?

加分项

有过移动端开发经验吗?

加分项,基本上是html5的新特性的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值