Web前端开发面试题库(包含初级、中级及高级)

匿名网友 匿名网友 发布于: 2016-10-17 00:00:00
阅读 207 收藏 0 点赞 0 评论 0

初级:

1、position四个属性

```
absolute
relative
fixed
static
```

2、移动端:CSS盒模型

``` 
display: -webkit-box; /* Chrome 4+, Safari 3.1, iOS Safari 3.2+ */ 
display: -moz-box; /* Firefox 17- */ 
display: -webkit-flex; /* Chrome 21+, Safari 6.1+, iOS Safari 7+, Opera 15/16 */ 
display: -moz-flex; /* Firefox 18+ */ 
display: -ms-flexbox; /* IE 10 */
display: flex; /* Chrome 29+, Firefox 22+, IE 11+, Opera 12.1/17/18, Android 4.4+ */

父元素设置display:flex后,子元素宽度会随父元素宽度的改变而改变,display:box不会
```

3、递归实现斐波那契数列:1 1 2 3 5 8

```

function Fibonacci (n) {
   if( n == 1 || n == 2) {
        // 递归结束的条件,求前两项
        return 1;
    } else {
        // 如果是求其它项,先要求出它前面两项,然后做和。
        return Fibonacci(n-1)+Fibonacci(n-2);
    }
}

```

4、解释css sprites,如何使用 css sprites就是将网页中所有的图片放到一张里面,通过background-position使用

5、call和apply的区别

call 方法调用一个对象的一个方法,以另一个对象替换当前对象
对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])

同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入

6、CSS选择符有哪些?优先级算法如何计算?内联和important哪个优先级高?

```
*
id
class
标签名
:visited :link :hover :active  :checked :after :befor
x+y 相邻选择符
x>y后代直接选择符
x~y兄弟选择符
x[title]属性选择器
x[href*="nettuts"]包含字符
x[href^="http"]以什么开始
x[href$=".jpg"]以什么结束
x:not(selector) 非选择器
x:nth-child(n) 从一开始的子元素
x:nth-last-child(n) 倒序
x:nth-of-type(n) 从一开始的子元素
x:nth-last-of-type(n) 倒序
x:first-child 第一个
x:last-child 最后一个
X::pseudoElement
  p::first-line { font-weight: bold; font-size: 1.2em; } p::first-letter { float: left; font-size: 2em; font-weight: bold; font-family: cursive; padding-right: 2px; }
  分别用于匹配元素的第一行和第一个字母
```

7、闭包是什么,有什么特性,对页面有什么影响

闭包的实质是一个函数,是一个用于返回局部变量值的函数,因为在全局中,受JavaScript链式作用域结构的影响,父级变量中无法访问到子级的变量值,为了解决这个问题,才使用闭包这个概念。由于闭包时,变量的值都保存到内存中,会导致页面加载时内存消耗很大,IE会导致内在泄露,因此尽量少用或用时要及时删除变量。

8、解释jsonp的原理

就是利用<script>标签没有跨域限制的“漏洞”(历史遗迹啊)来达到与第三方通讯的目的。当需要通讯时,本站脚本创建一个<script>元素,地址指向第三方的API网址,形如:
<script src="http://www.example.net/api?param1=1&param2=2"></script>
并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递)。
第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),形如:
callback({"name":"hax","gender":"Male"})
这样浏览器会调用callback函数,并传递解析后json对象作为参数。本站脚本可在callback函数里处理所传入的数据。
补充:“历史遗迹”的意思就是,如果在今天重新设计的话,也许就不会允许这样简单的跨域了嘿,比如可能像XHR一样按照CORS规范要求服务器发送特定的http头。

9、数组的前后增加、删除

unshift:将参数添加到原数组开头,并返回数组的长度 
shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined 
push:将新元素添加到一个数组中,并返回数组的新长度值。
pop:删除原数组最后一项,并返回删除元素的值;如果数组为空则返回undefined 
concat:返回一个新数组,是将参数添加到原数组中构成的 
splice(start,deleteCount,val1,val2,...):从start位置开始删除deleteCount项,并从该位置起插入val1,val2,... 
reverse:将数组反序 
sort(orderfunction):按指定的参数对数组进行排序
slice(start,end):返回从原数组中指定开始下标到结束下标之间的项组成的新数组 
join(separator):将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符 

10、数组的合并

concat方法
a.push.apply( a, b );

11、==与===的区别

"==="叫做严格运算符,"=="叫做相等运算符。
严格运算符的运算规则如下,
(1)不同类型值
    如果两个值的类型不同,直接返回false。
(2)同一类的原始类型值

    同一类型的原始类型的值(数值、字符串、布尔值)比较时,值相同就返回true,值不同就返回false。

(3)同一类的复合类型值

    两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。

(4)undefined和null

    undefined 和 null 与自身严格相等。

12、编程排序

    插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序

    插入排序:
    ```
    var insertSort = function (arr) {
        var len = arr.length, key;
            for (var i = 1; i < len; i++) {
                var j = i;
                key = arr[j];
                while (--j > -1) {
                    if (arr[j] > key) {
                        arr[j + 1] = arr[j];
                    } else {
                        break;
                    }
                }
                arr[j + 1] = key;
            }
    };
    ```
    冒泡排序:
    ```
        var bubbleSort = function (arr) {
            var flag = true;
            var len = arr.length;
            for (var i = 0; i < len - 1; i++) {
                flag = true;
                for (var j = 0; j < len - 1 - i; j++) {
                    if (arr[j] > arr[j + 1]) {
                        var temp = arr[j+1];
                        arr[j+1] = arr[j];
                        arr[j] = temp;
                        flag = false;
                    }
                }
                if (flag) {
                    break;
                }
            }
        };
    ```
    选择排序:
    ```
    var selectSort = function (arr) {
        var min;
        for (var i = 0; i < arr.length-1; i++) {
            min = i;
            for (var j = i + 1; j < arr.length; j++) {
                if (arr[min] > arr[j]) {
                    min = j;
                }
            }
            if (i != min) {
                swap(arr, i, min);
            }
        }
    };
    function swap(arr, index1, index2) {
        var temp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = temp;
    };
    ```
    Shell排序:
    ```
        var shellSort = function (arr) {
            var gaps = [5, 3, 1];
            for (var g = 0; g < gaps.length; ++g) {
                for (var i = gaps[g]; i < arr.length; ++i) {
                    var temp = arr[i];
                    for (var j = i; j >= gaps[g] && arr[j - gaps[g]] > temp; j -= gaps[g]){
                        arr[j] = arr[j - gaps[g]];
                    }
                    arr[j] = temp;
                }
            }
        };
    ```
    快速排序:
    ```
        var quickSort = function(arr, left, right) {
            var i, j, t, pivot;
            if (left >= right) {
                return;
            }
            pivot = arr[left];
            i = left;
            j = right;
            while (i != j) {
                while (arr[j] >= pivot && i < j) {
                    j--;
                }
                while (arr[i] <= pivot && i < j) {
                    i++;
                }
                if (i < j) {
                    t = arr[i];
                    arr[i] = arr[j];
                    arr[j] = t;
                }
            }
            arr[left] = arr[j];
            arr[j] = pivot;
            quickSort(arr, left, i - 1);
            quickSort(arr, i + 1, right);
        }
    ```
    归并排序:
    ```
        function mergeSort(arr) {
            if (arr.length < 2) {
                return;
            }
            var step = 1;
            var left, right;
            while (step < arr.length) {
                left = 0;
                right = step;
                while (right + step <= arr.length) {
                    mergeArrays(arr, left, left + step, right, right + step);
                    left = right + step;
                    right = left + step;
                }
                if (right < arr.length) {
                    mergeArrays(arr, left, left + step, right, arr.length);
                }
                step *= 2;
            }
        }
        function mergeArrays(arr, startLeft, stopLeft, startRight, stopRight) {
            var rightArr = new Array(stopRight - startRight + 1);
            var leftArr = new Array(stopLeft - startLeft + 1);
            k = startRight;
            for (var i = 0; i < (rightArr.length - 1); ++i) {
                rightArr[i] = arr[k];
                ++k;
            }
            k = startLeft;
            for (var i = 0; i < (leftArr.length - 1); ++i) {
                leftArr[i] = arr[k];
                ++k;
            }
            rightArr[rightArr.length - 1] = Infinity; // 哨兵值
            leftArr[leftArr.length - 1] = Infinity; // 哨兵值
            var m = 0;
            var n = 0;
            for (var k = startLeft; k < stopRight; ++k) {
                if (leftArr[m] <= rightArr[n]) {
                    arr[k] = leftArr[m];
                    m++;
                } else {
                    arr[k] = rightArr[n];
                    n++;
                }
            }
        }
    ```

中级: 1、多DOM节点事件触发时,如何事件代理委托 2、CCS媒体查询 3、正则去掉首尾空格 4、页面性能优化 5、跨域解决方案 6、编程:删除重复元素(重点:二重循环要倒序,map方案) 7、编程:取URL的参数 8、移动端:rem与px、em的区别及优势 9、移动端:转屏事件:onorientationchange;全屏方法:requestFullScreen 10、ES6箭头函数 11、编程:实现获取jsonp函数 12、数组的排序方法有哪些 13、编程:删除指定元素

高级: 1、正则去掉重复字符串 2、实现模块框架的define函数 3、模块框架:browerify、webpack、requirejs、seajs 4、node的web服务器:express、koa 5、ES6语法的语法及用法 6、移动端:video标签哪些属性方法,兼容性问题有哪些 7、移动端:开发工具和技术:adb、weinre、代理设置、抓包 8、MVVM意思,及框架介绍:angular、vue、avalon 9、移动端:android、ios与H5交互原理及实现 10、如何做前后端分离 11、开发模式及工具 12、对开发框架的认识和理解,有自己的见解 13、如何避免回调地狱 14、哪些工具可以用来保证一致性的代码风格 15、什么是异步编程?为什么在 JavaScript 中这么重要? 16、gulp顶层方法有哪些? 17、模块解析并动态加载

评论列表
文章目录