前端面试 | 我的第一次前端实习面试

455 阅读6分钟

面试总结

首先是自我介绍。在自我介绍这一块我就已经成了结巴狼。。。以至于没有体现出我的竞争优势。
然后是询问了项目经历,我现有的项目经历一个是给朋友打杂,也就是传传代码,录一下数据之类的,另一项就是在学校里面做的基于高德地图SDK的地图定位器,这个虽然是自己做的项目,但是在移动端开发上的一些问题还是模棱两可,不过还好在后续的问题中没有过多地涉及到移动端开发相关的发问。后面问了有没有写过页面,对这方面简直是毫无经验可谈。。。这一下就暴露出来自学前端的缺陷了。所以各位在学习知识的过程中一定要注意多实践多上手!!
下面来说说面试遇到的问题:

面试问题

Html画布(canvas)有什么作用

HTML中的画布canvas是在HTML5中的元素,用于在网页中创建一个可以绘制图形的区域。canvas元素使用JavaScript在网页上绘制图像,其拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。但是canvas本身没有绘图能力,所有的绘制工作需要在JS代码中完成。

CSS的盒子模型

关于CSS的盒子模型,之后会单独出一篇文章细讲,此处会附上链接。

盒模型会因为浏览器的不同而有变化吗

由于浏览器对盒模型的实现不同,形成了:标准盒模型和IE盒模型。
标准盒模型(W3C盒模型)的width只包括content;
IE盒模型的width除了包括content外,还包括border和padding。

VUE的生命周期

(后续补充)

CSS的DIV浮动,文档流,脱离文档流

首先我们要了解什么是文档流;
文档流和文本一样,所有的元素都会紧挨着,直到边界或是距离边界的剩余位置不足以放下元素时才会换行。这里注意,行内元素属于一行,也就是说,不管行内元素有多大,剩余的位置如果还能放得下文字,也只能与图片底端对齐放下一行文字;而块元素会单独成行。
那么什么又是脱离文档流呢?顾名思义,脱离文档流就是利用css的某些属性,使元素脱离原本的文档流,使得布局更为灵活。
脱离文档流有三种方式:

  1. float浮动:脱离文档流后,文档流中的文本会为它空出位置;
  2. position:absolute:相对于上一级最近的有定位的父级元素定位;
  3. position:fixed:相对于窗口(HTML)定位。

元素的塌陷,如何解决或者消除塌陷

元素的塌陷,就是内部元素设置了浮动而导致外部的父元素无法被撑开,导致此现象的原因是外部元素没有设置固定宽高,内元素设置了宽高且具有浮动属性。
解决办法:

  1. 在外部元素的结尾新增一个div,并清除浮动(clear:both);
  2. 给外部元素设置overflow:hidden属性来清除浮动;
  3. 给外部元素也设置浮动(此方法会使外部元素失去原有的宽高);
  4. 给外部元素设置固定的宽高;
  5. 给外部元素设置display:inline-block/inline-flex/inline-table(会失去原有宽高);
  6. 给外部元素添加伪类(:before/:after)。

JS的原型和原型链

原型是一个可以被复制的一个类,通过复制原型可以创建一个一模一样的新对象,也可以说原型就是一个模板,更准确地说是一个对象模板;
原型链是原型对象创建和过程中的历史记录,当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没找到就会再在构造函数的prototype的__proto__中查找,这样一层一层向上查找就会形成一个链式结构。

JS作用域

一段程序代码中所用到的名字并不总是有效的和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。 作用域分为全局作用域和局部作用域。全局作用域作用范围为整个script标签,或者是一个单独的js文件;局部作用域的作用范围为函数内部,这个代码中的名字只在函数内部起效。
执行效率方面,全局变量在关闭浏览器后才会销毁,比较占用内存资源;局部变量在程序执行完后就会销毁,比较节约内存资源。
在ES6后,JS中有了块级作用域的说法,即被花括号围起来的部分。
这里还要注意一个作用域链的概念:
只要是代码,就至少有一个作用域,而作用域链我们可以理解成是写在函数内部的局部作用域,即如果函数中还有函数,纳闷在这个作用域中就又可以诞生一个作用域。根据“内部函数可以访问外部函数变量”的机制,用链式查找决定哪些数据能被内部函数访问,这就称为作用域链。

ES6中三个声明变量的方法中,哪些有作用域

var 作用域为包含它的函数(函数作用域)或是全局变量;
let 作用域为块作用域;
const 块级作用域,声明时必须初始化,初始化后不能修改,可以认为是声明常量;
除此之外,还有用关键字function声明变量并赋予函数定义、用class声明变量、用关键字import声明变量。

promise有了解吗

Promise 是异步编程的一种解决方案,其实是一个构造函数,自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法。

HTTP协议有了解吗?ajax里面有什么方法

(后续补充)

怎么实现前后端接口和数据的通信?

(后续补充)

get和post的区别是什么

get是从服务器请求数据,post是向服务器提交数据。get不会对服务器上的数据有影响,而post会进行增删改查等操作。

websocket有了解吗

(后续补充)

localStorage和sessionStorage有了解吗

sessionStorage的生命周期为关闭浏览器窗口,在同一个页面下数据可以共享,以键值对的方式存储使用;
localStorage的生命周期为永久存在,可以多页面共享(同一浏览器),同样以键值对的方式存储使用。

本次面试的问题和总结就先写到这了,喝杯奶茶歇了,希望我的面试记录能对各位看官有一点帮助。


我正在参与掘金技术社区创作者签约计划招募活动,点击链接报名投稿