我爱编程

2018-02-08

2018-02-08  本文已影响0人  自you是敏感词

前端开发面试题

<a name='preface'>前言</a>

只看问题点这里

看全部问题和答案点这里

本文由我收集总结了一些前端面试题,初学者阅后也要用心钻研其中的原理,重要知识需要系统学习、透彻学习,形成自己的知识链。万不可投机取巧,临时抱佛脚只求面试侥幸混过关是错误的!也是不可能的!不可能的!不可能的!

前端还是一个年轻的行业,新的行业标准, 框架, 库都不断在更新和新增,正如赫门在2015深JS大会上的《前端服务化之路》主题演讲中说的一句话:“每18至24个月,前端都会难一倍”,这些变化使前端的能力更加丰富、创造的应用也会更加完美。所以关注各种前端技术,跟上快速变化的节奏,也是身为一个前端程序员必备的技能之一。

最近也收到许多微博私信的鼓励和更正题目信息,后面会经常更新题目和答案到github博客。希望前端er达到既能使用也会表达,对理论知识有自己的理解。可根据下面的知识点一个一个去进阶学习,形成自己的职业技能链。

面试有几点需注意:(来源寒冬winter 老师,github:@wintercn)

  1. 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。

  2. 题目类型: 理论知识、算法、项目细节、技术视野、开放性题、工作案例。

  3. 细节追问: 可以确保问到你开始不懂或面试官开始不懂为止,这样可以大大延展题目的区分度和深度,知道你的实际能力。因为这种知识关联是长时期的学习,临时抱佛脚绝对是记不住的。

  4. 回答问题再棒,面试官(可能是你面试职位的直接领导),会考虑我要不要这个人做我的同事?所以态度很重要、除了能做事,还要会做人。(感觉更像是相亲( •̣̣̣̣̣̥́௰•̣̣̣̣̣̥̀ ))

  5. 资深的前端开发能把absolute和relative弄混,这样的人不要也罢,因为团队需要的是:你这个人具有可以依靠的才能(靠谱)。

前端开发所需掌握知识点概要:

HTML&CSS:
    对Web标准的理解(结构、表现、行为)、浏览器内核、渲染原理、依赖管理、兼容性、CSS语法、层次关系,常用属性、布局、选择器、权重、盒模型、
    Hack、CSS预处理器、CSS3、Flexbox、CSS Modules、Document flow、BFC、HTML5(离线 & 存储、Histoy,多媒体、WebGL\SVG\Canvas);     
JavaScript:
    数据类型、运算、对象、Function、继承、闭包、作用域、事件、Prototype、RegExp、JSON、Ajax、DOM、BOM、
    内存泄漏、跨域、异步请求、模板引擎、模块化、Flux、同构、算法、ECMAScript6、Nodejs、HTTP、

其他:
    主流MVVM框架(React\Vue\Angular)、Hybrid App\React Native\Weex、TypeScript、RESTFul、WEB安全、前端工程化、依赖管理、性能优化、
    重构、团队协作、可维护、易用性、SEO、UED、前端技术选型、快速学习能力等;

作为一名前端工程师,无论工作年头长短都应该掌握的知识点

此条由 王子墨 发表在 攻城师的实验室

    1、DOM结构 —— 两个节点之间可能存在哪些关系以及如何在节点之间任意移动。

    2、DOM操作 —— 如何添加、移除、移动、复制、创建和查找节点等。

    3、事件 —— 如何使用事件,以及IE和标准DOM事件模型之间存在的差别。

    4、XMLHttpRequest —— 这是什么、怎样完整地执行一次GET请求、怎样检测错误。

    5、严格模式与混杂模式 —— 如何触发这两种模式,区分它们有何意义。

    6、盒模型 —— 外边距、内边距和边框之间的关系,及IE8以下版本的浏览器中的盒模型

    7、块级元素与行内元素 —— 怎么用CSS控制它们、以及如何合理的使用它们

    8、浮动元素 —— 怎么使用它们、它们有什么问题以及怎么解决这些问题。

    9、HTML与XHTML —— 二者有什么区别,你觉得应该使用哪一个并说出理由。

    10、JSON —— 作用、用途、设计结构。

备注:

根据自己需要选择性阅读,面试题是对理论知识的总结,让自己学会应该如何表达。

资料答案不够正确和全面,欢迎欢迎Star和提交issues。

格式不断修改更新中。

更新记录:
2018-01-14: 公司在招聘前端,使用react技术栈;借此机会更新一波前端框架相关的题目;
2016-10-20: 更新一些已被发现的问题。
2016-03-25: 新增ECMAScript6 相关问题

<a name='html'>HTML</a>

    (1)link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;

    (2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;

    (3)import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题;
    * HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
          绘画 canvas;
          用于媒介回放的 video 和 audio 元素;
          本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
          sessionStorage 的数据在浏览器关闭后自动删除;
          语意化更好的内容元素,比如 article、footer、header、nav、section;
          表单控件,calendar、date、time、email、url、search;
          新的技术webworker, websocket, Geolocation;

      移除的元素:
          纯表现的元素:basefont,big,center,font, s,strike,tt,u;
          对可用性产生负面影响的元素:frame,frameset,noframes;

    * 支持HTML5新标签:
         IE8/IE7/IE6支持通过document.createElement方法产生的标签,
         可以利用这一特性让这些浏览器支持HTML5新标签,
         浏览器支持新标签后,还需要添加标签默认的样式。

         当然也可以直接使用成熟的框架、比如html5shim;
         <!--[if lt IE 9]>
            <script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
         <![endif]-->

    * 如何区分HTML5: DOCTYPE声明\新增的结构元素\功能元素

<a name='css'>CSS</a>

*  水平居中:给div设置一个宽度,然后添加margin:0 auto属性

        div{
            width:200px;
            margin:0 auto;
         }

*  让绝对定位的div居中

        div {
            position: absolute;
            width: 300px;
            height: 300px;
            margin: auto;
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
            background-color: pink; /* 方便看效果 */
        }

*  水平垂直居中一

        确定容器的宽高 宽500 高 300 的层
        设置层的外边距

        div {
            position: relative;     /* 相对定位或绝对定位均可 */
            width:500px;
            height:300px;
            top: 50%;
            left: 50%;
            margin: -150px 0 0 -250px;      /* 外边距为自身宽高的一半 */
            background-color: pink;     /* 方便看效果 */

         }

*  水平垂直居中二

        未知容器的宽高,利用 `transform` 属性

        div {
            position: absolute;     /* 相对定位或绝对定位均可 */
            width:500px;
            height:300px;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            background-color: pink;     /* 方便看效果 */

        }

*  水平垂直居中三

        利用 flex 布局
        实际使用时应考虑兼容性

        .container {
            display: flex;
            align-items: center;        /* 垂直居中 */
            justify-content: center;    /* 水平居中 */

        }
        .container div {
            width: 100px;
            height: 100px;
            background-color: pink;     /* 方便看效果 */
        }  
假设你现在正用一台显示设备来阅读这篇文章,同时你也想把它投影到屏幕上,或者打印出来,
而显示设备、屏幕投影和打印等这些媒介都有自己的特点,CSS就是为文档提供在不同媒介上展示的适配方法

<!-- link元素中的CSS媒体查询 -->
当媒体查询为真时,相关的样式表或样式规则会按照正常的级联规被应用。
当媒体查询返回假, <link> 标签上带有媒体查询的样式表 仍将被下载 (只不过不会被应用)。

<link rel="stylesheet" media="(max-width: 800px)" href="example.css" />

<!-- 样式表中的CSS媒体查询 -->
包含了一个媒体类型和至少一个使用 宽度、高度和颜色等媒体属性来限制样式表范围的表达式。
CSS3加入的媒体查询使得无需修改内容便可以使样式应用于某些特定的设备范围。

<style>
    @media (min-width: 700px) and (orientation: landscape){
      .sidebar {
        display: none;
      }
    }
</style>

<a name='js'>JavaScript</a>

同步:浏览器访问服务器请求,用户看得到页面刷新,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作。

异步:浏览器访问服务器请求,用户正常操作,浏览器后端进行请求。等请求完,页面不刷新,新内容也会出现,用户看到新内容。



(待完善)
      例子中用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4);

      注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。

        function add(a,b)
        {
            alert(a+b);
        }

        function sub(a,b)
        {
            alert(a-b);
        }

        add.call(sub,3,1);
    *jQuery是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等。

    *jQuery UI则是在jQuery的基础上,利用jQuery的扩展性,设计的插件。
     提供了一些常用的界面元素,诸如对话框、拖动行为、改变大小行为等等

jQuery中没有提供这个功能,所以你需要先编写两个jQuery的扩展:

    $.fn.stringifyArray = function(array) {
        return JSON.stringify(array)
    }

    $.fn.parseArray = function(array) {
        return JSON.parse(array)
    }

    然后调用:
    $("").stringifyArray(array)
    参考:http://www.tuicool.com/articles/ArQZfui
    function commafy(num) {
        return num && num
            .toString()
            .replace(/(\d)(?=(\d{3})+\.)/g, function($0, $1) {
                return $1 + ",";
            });
    }
    console.log(commafy(1234567.90)); //1,234,567.90

<a name='other'>ECMAScript6 相关</a>

<a name='other'>前端框架</a>

<a name='other'>其他问题</a>

    1、事件不同之处:

        触发事件的元素被认为是目标(target)。而在 IE 中,目标包含在 event 对象的 srcElement 属性;

        获取字符代码、如果按键代表一个字符(shift、ctrl、alt除外),IE 的 keyCode 会返回字符代码(Unicode),DOM 中按键的代码和字符是分离的,要获取字符代码,需要使用 charCode 属性;

        阻止某个事件的默认行为,IE 中阻止某个事件的默认行为,必须将 returnValue 属性设置为 false,Mozilla 中,需要调用 preventDefault() 方法;

        停止事件冒泡,IE 中阻止事件进一步冒泡,需要设置 cancelBubble 为 true,Mozzilla 中,需要调用 stopPropagation();
    *(优点)因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求,
      因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。
      此外,与Node代理服务器交互的客户端代码是由javascript语言编写的,
      因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。

    *(缺点)Node是一个相对新的开源项目,所以不太稳定,它总是一直在变,
      而且缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子。
    加班就像借钱,原则应当是------救急不救穷

<a name='web'>前端学习网站推荐</a>

1. 极客标签:     http://www.gbtags.com/

2. 码农周刊:     http://weekly.manong.io/issues/

3. 前端周刊:     http://www.feweekly.com/issues

4. 慕课网:       http://www.imooc.com/

5. div.io:       http://div.io

6. Hacker News: https://news.ycombinator.com/news

7. InfoQ:       http://www.infoq.com/

8. w3cplus:     http://www.w3cplus.com/

9. Stack Overflow: http://stackoverflow.com/

10.w3school:    http://www.w3school.com.cn/

11.mozilla:     https://developer.mozilla.org/zh-CN/docs/Web/JavaScript

<a name='web'>文档推荐</a>

  1. jQuery 基本原理

  2. JavaScript 秘密花园

  3. CSS参考手册

  4. JavaScript 标准参考教程

  5. ECMAScript 6入门

上一篇下一篇

猜你喜欢

热点阅读