中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

前端基礎面試題及參考答案

發布時間:2020-08-05 14:48:34 來源:億速云 閱讀:210 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關前端基礎面試題及參考答案的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

基礎題

我出的這套基礎題,面試(當面答題,想百度是不存在的)好多人,情況都比較差,沒有令我滿意的,是我出題太難了么?

介紹一下js原型繼承

查看答案

當我們想要從 object 中讀取一個缺失的屬性時,js 會自動從原型中獲取它

舉例:

const animal = {
  eats: true,
  sleep: true,
  voice: '',
  bark(){
    console.log(this.voice);
  },
}
const dog = {
  run: true,
  voice: 'wang~~ wang~~',
}
dog.__proto__ = animal;
console.log(dog.run) // true
console.log(dog.eats) // true
console.log(dog.bark()) // wang~~ wang~~
console.log(dog.sleep) // true

總結:

  所有的對象都有一個隱藏的 [[Prototype]] 屬性,它可以是另一個對象或者 null。

  可以使用 obj.__proto__ 進行訪問。

  [[Prototype]] 引用的對象稱為“原型”。

  要讀取 obj 屬性或者調用一個方法,而且它不存在,那么就會嘗試在原型中查找它。

  寫/刪除直接在對象上進行操作,它們不使用原型(除非屬性實際上是一個 setter)。

  我們調用 obj.method(),而且 method 是從原型中獲取的,this 仍然會引用 obj。

  方法重視與當前對象一起工作,即使它們是繼承的。

擴展:

  構造函數繼承、組合繼承、寄生繼承、寄生組合式繼承。

說說什么是防抖、節流,在實際應用中在哪些場景會用到它們

防抖:

  連續觸發的事件(高頻),在單位時間T內只執行最后一次,

  若在T內再次觸發,則清空定時重新計算。場景:模糊搜索

節流:

  連續觸發的事件(高頻),在單位時間T內只執行一次。窗口滾動,獲取滾動條top

javascript如何實現跨窗口通信

若子域同源,則可以通過設置document.domain將窗口視為同源站點,進行通信,

  例如本地儲存等等方式。

若不同源,我們可以在通過 postMessage(data,targetOrigin) 這個接口,進行跨窗口通信。

什么是點擊劫持,如何防范

點擊劫持:

  允許惡意網頁以用戶的名義點擊 “受害站點”。

  通常惡意網頁在受害網站鏈接之上放置一個透明 <iframe> 標簽。

防范:

  服務端 header 字段 X-Frame-Options 能夠允許或禁止 frame 內頁面的顯示。

介紹一下什么是單向鏈表?有哪些特點?你知道的在哪些方面有鏈表的應用

鏈表(Linked list)是一種常見的基礎數據結構,是一種線性表,

  但是并不會按線性的順序儲存數據,而是在每一個節點里存到下一個節點的指針(Pointer)。

  由于不必須按順序儲存,鏈表在插入的時候可以達到 o(1)的復雜度,比另一種線性表順序表快得多,

  但是查找一個節點或者訪問特定編號的節點則需要 o(n)的時間,而順序表響應的時間復雜度分別是 o(logn)和 o(1)。

特點:

  無需預先分配內存,可以充分利用計算機內存空間,實現靈活的內存動態管理

  插入/刪除節點不影響其他節點

  隨機訪問速度較慢

  增加了結點的指針域,空間開銷比較大

單向鏈表:

  是鏈表中最簡單的一種,它包含兩個域,一個信息域和一個指針域。

  這個鏈接指向列表中的下一個節點,而最后一個節點則指向一個空值。

應用:

  git commit、es6的Iterator、react的fiber算法。

前后端路由差別

前端路由(spa)純瀏覽器行為,是由瀏覽器控制的(hash、history),

  當打開一個spa頁面后,切換路由,瀏覽器改變地址欄url并通過js展示對應頁面(組件)

后端路由,切換路由時,服務端會去匹配并查找對應資源,返回給瀏覽器并渲染。

是否研究過webpack,談談你對它的理解及loader的設計原則

本題相對開放一些。

webpack個人理解:

  webpack是劃時代的,比較完美解決了前端模塊依賴的問題,任何資源都是js,任何資源都可以在js中聲明依賴,

  真正實現了通用的模塊化開發。

loader的設計原則:

  單一職責、所有模塊都是js模塊,webpack 只支持js模塊,所有其他類型的模塊,

  比如圖片,css等,都需要通過對應的loader轉成js模塊。

  所以在webpack中無論任何類型的資源,本質上都被當成js模塊處理。

  所有的loader都是一個管道,可以把一個loader看做是一個數據管道,

  進口是一個字符串,然后經過加工,輸出另一個字符串。

給定一個一維數組arr,將其按一定數量num分組為二維數組,例如: 條件為arr=[0,1,2,3,4,5,6], num=3, 結果為[[0,1,2],[3,4,5],[6]]

假設我們有一個函數 slow(x,y,z,...) ,它是 CPU 重負載的,但它的結果是穩定的,換句話說,對于相同的輸入 x,y,z...,它總是返回相同的結果 XYZ,我們該如何優化,才能避免在重新計算上花費額外的時間

function slow(x,y,z) {
  // 這里可能會有重負載的CPU密集型工作
  // ...
  alert(`Called with ${XYZ}`);
  return XYZ;
}

用js實現一個發布-訂閱模式

class Event{
  constructor(){
    this.pool = new Map()
  }
  broadcast(){
    const [key,...rest] = [...arguments];
    if(this.pool.has(key)){
      const func = this.pool.get(key)
      func.apply(this, rest)
    }
  }
  addEventListenering(key, func){
    this.pool.set(key,func)
  }
  removeEventListenering(key){
    this.pool.delete(key)
  }
}
const ev = new Event();
ev.addEventListenering('event1',function(param){
  console.log('發布新值了',param)
})
ev.broadcast('event1',1000); //發布新值了 1000
ev.broadcast('event1',2000); //發布新值了 2000
ev.broadcast('event1',3000); //發布新值了 3000
ev.removeEventListenering('event1');
ev.broadcast('event1',3000);

以下代碼打印的是什么

function A() {
  this.a = 1;
}
A.prototype.b = 1;
const a = new A();
console.log(a.a);
console.log(a.b);
const b = new A();
b.__proto__.a = 2;
A.prototype.b = 2;
console.log(a.a);
console.log(a.b);

1 1 1 2

請輸出下面代碼的打印內容

var name = '小紅';
var obj = {
  name: '小明',
  sayName() {
    console.log(`${this.name}`);
  },
};
var sayName = () => {
  console.log(`${this.name}`);
};
var fn = obj.sayName;
sayName();
obj.sayName();
sayName.call(obj);
obj.sayName.call(this);
fn();

小紅 小明 小紅 小紅 小紅復制代碼

請輸出以下代碼的打印內容

new Promise((resolve) => {
  console.log(3);
  resolve();
}).then(() => {
  onsole.log(4);
});
setTimeout(() => {6
  console.log(2);
}, 0);
Promise.resolve().then(() => {
  console.log(5);
});
console.log(1);

3 1 4 5 2

感謝各位的閱讀!關于前端基礎面試題及參考答案就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

博兴县| 阜平县| 曲阜市| 城口县| 临夏县| 盈江县| 吴忠市| 宝兴县| 卢湾区| 和政县| 安丘市| 汾西县| 同心县| 舒兰市| 资源县| 油尖旺区| 拉萨市| 盖州市| 湘潭县| 剑河县| 沁源县| 如东县| 兴安县| 东明县| 怀远县| 岱山县| 诏安县| 新沂市| 海伦市| 吉隆县| 庆云县| 邯郸县| 同心县| 招远市| 寿阳县| 云龙县| 焦作市| 八宿县| 密山市| 靖西县| 昆明市|