天天看点

面试题10道

一.css的居中方式

    常用:

       ①文本左右居中:text-align:center   

       ②文本上下居中:line-height

       ③利用边距:padding:  , margin:0 auto;   

       ④按中线对齐:vertical-align:middle

       ⑤利用定位:position:fixed

          top:50%;

          left:50%;

二.px,em,rem,%

        ①它们都是用于设置字体的大小以及盒子的宽高,但是px不会因为浏览器尺寸的改变而改 

            变,而em和rem会因为浏览器尺寸的变化而变化

        ②px 是 pixel 的缩写,它的含义是像素的意思,在指定字体大小和元素的宽高的时候使用。

像           素是相对于显示器屏幕分辨率而言的    例:height:200px,

        ③em是一个相对长度的单位,是相对于当前对象内文本的字体尺寸。如过我们未设置当前文

本          的字体尺寸,那么em就会相对于浏览器的默认字体尺寸   例:width:6.25em;

        ④rem是CSS3中新增的一个相对单位,它与em的区别在于使用rem为元素设定字体大小时,

仍          然是相对大小,但相对的只是HTML根元素。它的使用非常简单,通过改变根元素的大小

就            可以改变它的值

        ⑤%和em大同小异,1em=100%

        默认浏览器1em=16px=100%,即0.625em=10px

三.display的值和作用

none | inline | block | inline-block | list-item | run-in | table | inline-table | table-row-group | table-

header-group | table-footer-group | table-row | table-column-group | table-column | table-cell |

table-caption | inherit

以下常用:

①none: 元素不会显示,而且改元素现实的空间也不会保留。但有另外一个 visibility: hidden, 是

保留元素的空间的。

②inline: display的默认属性。将元素显示为内联元素,元素前后没有换行符。我们知道内联元素

是无法设置宽高的,所以一旦将元素的display 属性设为 inline, 设置属性height和width是没有用

的。此时影响它的高度一般是内部元素的高度(font-size)和padding。

③block: 将元素将显示为块级元素,元素前后会带有换行符。设置为block后,元素可以设置

width和height了。元素独占一行。

④inline-block:行内块元素。这个属性值融合了inline 和 block 的特性,即是它既是内联元素,又

可以设置width和height。

四.路由跳转的方式

①router-link (声明式路由)

②router.push(编程式路由)

③this.$router.push() (函数里面调用)

④ this.$router.replace() (用法同上,push)

⑤this.$router.go(n) ()

五.vue生命周期的理解

组件从创建到销毁的一系列过程叫做组件的声明周期。vue在整个生命周期里面提供了一些函数,

可以在内部实现一些业务逻辑,并且这些函数会在一些特定的场合下去执行。

六.vue数据双向绑定的原理,用了什么设计模式(web高级)

        装饰者模式

        观察者模式

七.数组去重

①.最基本的去重方法

定义一个新数组,并存放原数组的第一个元素,然后将元素组一一和新数组的元素对比,若不同则

存放在新数组中。

  function unique(arr){

       var res = [arr[0]];

       for(var i=1;i<arr.length;i++){

            var repeat = false;

         for(var j=0;j<res.length;j++){

            if(arr[i] == res[j]){

               repeat = true;

               break;

              }

          }

          if(!repeat){

                res.push(arr[i]);

          }

   }

   return res;

}

②先排序在去重

function unique(arr){

  var arr2 = arr.sort();

  var res = [arr2[0]];

  for(var i=1;i<arr2.length;i++){

    if(arr2[i] !== res[res.length-1]){

      res.push(arr2[i]);

    }

  }

  return res;

}

③利用对象的属性去重

function unique(arr){

  var res =[];

  var json = {};

  for(var i=0;i<arr.length;i++){

    if(!json[arr[i]]){

      res.push(arr[i]);

      json[arr[i]] = 1;

    }

  }

  return res;

}

④利用下标查询

function unique(arr){

  var newArr = [arr[0]];

   for(var i=1;i<arr.length;i++){

    if(newArr.indexOf(arr[i]) == -1){

               newArr.push(arr[i]);

         }

        }

        return newArr;

  }

八.统计字符串中出现最多的字符

function fn(str) {

   var hash = {}

   for(let i = 0; i < str.length; i++) {

    if(hash[str[i]]) {

      hash[str[i]]++

    } else {

      hash[str[i]] = 1

    }

  }

  let keys = Object.keys(hash)

  let maxValue = -1, maxKey = ''

  for(let i = 0; i < keys.length; i++) {

    if(hash[keys[i]] > maxValue) {

      maxValue = hash[keys[i]]

      maxKey = keys[i]

    }

  }

  console.log(maxKey, maxValue)

}

fn('aaaaaaabbbc')

九.js垃圾回收机制

①标记清除

JavaScript最常见的垃圾回收方式。当变量进入执行环境的时候,比如在函数中声明一个变量,垃

圾回收器将其标记为“进入环境”。当函数执行结束,将其标记为“离开环境”。

②引用计数

引用计数的策略是跟踪记录每个值被使用的次数。当声明了一个变量并将一个引用类型赋值给该变

量的时候,这个值的引用次数就加一。如果该变量的值变成了另外一个,则这个值得引用次数减

一。当这个值的引用次数变为0的时候,说明没有变量在使用,这个值没法被访问。

十.原型、原型链

①原型:

每个函数都有一个prototype(原型)属性,这个属性都有一个指针,指向一个对象,这个对象包含由

特定类型所有实例共享的属性和方法。使用原型的好处是可以让所有对象实例共享原型包含的方法

和属性。利用原型是当前构造函数创建的对象的父类,这个特点我们可以提取对象的公共属性和方

法放在原型中,从程序的视角中具有封装性。

②原型链:

当对象访问属性和方法的时候,会往自身查找,如果没有才会去原型中找。

原型链实现:让原型等于父类构造函数创建的对象

原型链的本质:子类构造函数的

prototype

__proto__

指向父类构造器的

prototype

,建立对象之

间的关联

继续阅读