天天看點

面試題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

,建立對象之

間的關聯

繼續閱讀