在这里记录一下自己人生中的第一次面试,因为之前春招有其他的安排,没有去实习的打算,错过了腾讯和阿里的面试,觉得也挺可惜的,能不能过是一回事,去锻炼自己又是一回事。
在自己被通知简历通过筛选以后,心里其实还是非常高兴的,然后被通知了面试,开始了一个星期的CSS和JS基础复习之路,学习了css3的新特性和许多HTML5的新技术。
第一面是一个美女,开始的时候直接叫我做个自我介绍,没错,第一个问题就把我问蒙了,经验不足的后果啊,也没准备过自我介绍说些什么,然后说了一些自己的基本情况,结果面试官问了句:“没有了?”,表示很惊讶,然后开始问问题了。。
question 1:img标签中的title和alt的区别?
answer:title是鼠标放上去的时候显示,alt呢是图片无法显示的时候显示在浏览器。
question 2:css的选择器有哪些?优先级?
answer:派生选择器,ID选择器,类选择器。选择越精准优先级越高。
question 3:position有哪些?
answer:绝对定位absolute,相对定义relative,静态static,固定fixed;
question 4:absolute和relative是相对于什么来定位?
answer:absolute是相对于body来定位,relative是相对于父级来定位。
ps:这里面试官问了句是body吗?我知道答案错了,然而自己没研究过,这里应该是相对于所属元素树中。
question 5:块级元素和行内元素的区别?如何把行内元素设置他的width和height?
answer:块级元素有换行。设置display:block把行内元素设置为块级元素,就可以设置width和height。
PS:面试官追问一句:除了设置display还有其他方法吗?这个问题真不知道,以前只知道display。
question 6 : 浏览器是如何解析css和js文件的?为什么需要阻塞页面后续内容?
answer:浏览器是并行加载css文件,串行加载js文件。如果你的javascript想操作后面的DOM元素,基本上来说,浏览器都会报错说对象找不到。因为Javascript执行时,后面的HTML被阻塞住了,DOM树时还没有后面的DOM结点。所以程序也就报错了。
PS:问题到这里突然变得比较难了,这也是我前不久才学习的。资料:http://coolshell.cn/articles/9749.html。
question 7:开发中有没有遇到缓存问题?如何解决?
answer:经常出现,就是当加载的JS路径变换时,浏览器还是加载原来的路径,一般都是点击浏览器的历史记录删除历史记录。
PS:追问:有没有想过通过JS代码来删除缓存?这个以前没考虑过,含糊的说了一句是通过删除cookied吗?面试官说不是,然后我又说了一句是通过刷新页面吗?否认。
这个问题其实是设置一个开关,当我们有改变时开启开关,让页面重新加载。
question 8:知道闭包吗?如何运用?
answer:用2句话概括下闭包。1.闭包是引用着外部变量的内部函数。2.所有函数都是闭包。一般运用是匿名闭包(IIFE),也叫立即执行的函数表达式,优点是:模块化,可重用,实现信息隐藏,只暴露出public方法,最大的优点是不污染变量对象。
question 9:有没有做过性能优化?怎样优化?
answer:用arguments.callee实现递归,在for循环时保留数组长度,尽量少使用全局对象。。。
question 10:有没有遇到过浏览器兼容问题?如何处理IE8以下浏览器?
answer:最常遇到的就是事件监听的addEventlistener和attchEvent。IE8以下我在项目开发中不考虑。。
question 11:事件冒泡和事件捕捉的区别?
answer:这个问题真是始料未及,冒泡和捕捉是在一年前看过,没有仔细研究,就说了冒泡和捕捉对于onclick事件的区别。
question 12:OO思想如何理解?
answer:这个问题因为是我在简历中说过自己有过OO思想的学习,然后和面试官吹了一些封装、继承和多态的知识。
question 13:HTML5游戏的设计思路?
answer:略,简历中自己的东西。
question 14:HTTP协议响应的几种状态?
answer:1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
PS:资料:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html
一面结束以后真是送了很大一口气,在过程中先紧张然后舒缓,然后又紧张,这个过程真是有点累。一面问了很多CSS的基础,还好自己通过一个星期准备了,不然很多东西虽然不是很常用,也不是很重要,但问到了答不出来就是水平问题,和题目本身没有关系,还是要充分准备下。
早上第一面结束以后,下午5点的时候一个男的打电话给我,说你第一面通过,我们约个时间进行第二次面试。自己也是遵从了他的安排,进行了7点的面试。听声音让人很舒服,应该年龄不大。
question 1:你开发过自己的JS框架?框架主要实现什么功能?
answer:开发JS框架呢是通过看一本《JS框架设计》这本书来跟着书开发的框架,现在实现的包括选择器,对象扩展,类型判断和一些对于数组、字符串、字符的操作。
question 2:在AMD规范中为什么要选择seaJS?在开发中能解决什么问题?
answer:经常在开发项目时会引入jQuery的插件,经常这个插件就会报错了,原因可能是没有引入jQuery,或者jQuery的插件后引用,而且每次开发项目都需要引入大量的<script>标签,让人非常反感,引入seaJs呢,只需要引入一个<script>文件即可,在其他模块中引入所依赖的模块就可以了,实现模块化开发。
PS:资料:https://github.com/seajs/seajs/issues/547
question 3:如何实现js文件的异步加载?
answer:通过document.createElement("script"),然后设置src就可以引入了。
PS:面试官就这样就可以加载JS文件了吗?你自己实现过没有?我说只是学会了seaJs的使用,没有具体实现过。
question 4:闭包的问题。(回答和第一次差不多)
question 5:HTML5游戏开发中遇到最大的困难?
answer:物理和数学的基础知识缺乏。(回答了自己的游戏stick hero开发过程)。
question 6:你对前端的看法是什么?未来规划怎么样?
answer:我对于前端的看法是web框架的架构,所以我会尽多的去学习JS的框架设计,并且研究别人的JS设计思路,以后的计划是10年内成为框架架构师。
PS:面试官问了句:成为架构师需要10年吗?我说我也不知道,尽自己的努力吧。
question 7:问了编译原理和数据结构还有简单的算法问题。
answer:这次面试没想到会问专业知识,自己也没复习过,当初大二的时候也不是学得很好,就把自己能想到的说了一下。
第二次面试呢气氛很轻松,回答也非常流畅,完全没有第一次的尴尬,这也算是一种成长吧,不管这次结果怎么样,丰富了自己的人生经历,感觉自己在专业知识上还有欠缺,到秋招的时候自己也找到了自己的不足还有复习的方向,这也算是一种收获。
我的梦想是,web框架架构师。