高級(jí)前端面試問題

1殖妇、CSS

(1)#root.box 的父元素狱从,兩者寬高都不固定抱怔。用CSS實(shí)現(xiàn).box相對(duì)于#root水平和垂直居中劣坊,至少兩種方式。

// 方式一:flex 彈性布局
#root{
   display: flex;
   justify-content: center;
  align-items: center;
}

// 方式二:絕對(duì)定位 + transform
#root{
   position: relative;
}
.box{
   position: absolute;
   top: 50%;
   left: 50%;
   transform: translate(-50%, -50%);
}

(2)position 有哪幾種取值屈留?分別相對(duì)于誰進(jìn)行定位?

可能的值 描述
absolute 生成絕對(duì)定位的元素测蘑,相對(duì)于 static 定位以外的第一個(gè)父元素進(jìn)行定位灌危。元素的位置通過 "left", "top", "right" 以及 "bottom" 屬性進(jìn)行規(guī)定。
fixed 生成固定定位的元素碳胳,相對(duì)于瀏覽器窗口進(jìn)行定位勇蝙。元素的位置通過 "left", "top", "right" 以及 "bottom" 屬性進(jìn)行規(guī)定。
relative 生成相對(duì)定位的元素挨约,相對(duì)于其正常位置進(jìn)行定位味混。因此,"left:20" 會(huì)向元素的 LEFT 位置添加 20 像素诫惭。
static 默認(rèn)值翁锡。沒有定位元素出現(xiàn)在正常的流中(忽略 top, bottom, left, right 或者 z-index 聲明)夕土。
inherit 規(guī)定應(yīng)該從父元素繼承 position 屬性的值馆衔。

2、Javascript Basic Knowledge

(3)let 和 var 的區(qū)別怨绣? (let

let var
作用域 只在let命令所在的代碼塊內(nèi)有效 在全局范圍內(nèi)都有效
變量提升 不存在
所聲明的變量一定要在聲明后使用角溃,否則報(bào)錯(cuò)。 存在
所聲明的變量在聲明之前使用篮撑,會(huì)輸出 undefined
暫時(shí)性死區(qū) 存在
在代碼塊內(nèi)减细,使用let命令聲明變量之前,該變量都是不可用的赢笨。 不存在
重復(fù)聲明 不允許 允許

(4)寫出下面代碼的輸出未蝌?(如果回答正確,用兩種方式對(duì)代碼進(jìn)行改造质欲,使其輸出為6) (let 閉包

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6]();

// correct log
// 10 (用var 聲明的變量 i 是一個(gè)全局變量)

// 使其輸出為6的改造
// 改造方式一:直接將 var 改為 let
// 改造方式二:使用閉包
var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = (function (i) {
    return function () {
      console.log(i);
    }
  })(i)
}
a[6]();

(5)寫出下面代碼的輸出树埠? (RegExp

var regex = /foo/g;
regex.test('foo'); 
regex.test('foo'); 
regex.test('barfoo')
regex.test('foobar') 

// correct log
var regex = /foo/g;

// regex.lastIndex is at 0
regex.test('foo'); // true

// regex.lastIndex is now at 3
regex.test('foo'); // false

// regex.lastIndex is at 0
regex.test('barfoo') // true

// regex.lastIndex is at 6
regex.test('foobar') // false

(6)寫出下面代碼的輸出?( 箭頭函數(shù) this指向

function Timer() {
  this.s1 = 0;
  this.s2 = 0;

  setInterval(() => this.s1++, 1000);
  setInterval(function () {
    this.s2++;
  }, 1000);
}

var timer = new Timer();

setTimeout(() => console.log('s1: ', timer.s1), 3100);
setTimeout(() => console.log('s2: ', timer.s2), 3100);

// correct log
// s1: 3
// s2: 0

(7)最簡單的方式實(shí)現(xiàn)數(shù)組的深拷貝 (深淺拷貝

let deepCopyArr = JSON.parse(JSON.stringify(originalArr))

(8)有下面的類定義和實(shí)例創(chuàng)建: (原型 prototype

class Animal extends Object {
}

class Person extends Animal {
}

let jane = new Person()

(8.1)jane.__proto__和下面哪些選項(xiàng)恒等(===)嘶伟?
A. Person
B. Person.prototype
C. Person.constructor
D. Person.proto
E. Object.getPrototypeOf(jane)

(8.2)jane.prototype和下面哪些選項(xiàng)恒等(===)怎憋?
A. Person
B. Person.prototype
C. Person.proto
D. undefined

(8.3)jane.constructor和下面哪些選項(xiàng)恒等(===)?
A. Person
B. Person.prototype
C. Person.prototype.constructor
D. Object.getPrototypeOf(jane)

(8.4)Person.__proto__和下面哪些選項(xiàng)恒等(===)?
A. jane.proto.constructor
B. Object.getPrototypeOf(jane.constructor)
C. Animal.prototype
D. Object.getPrototypeOf(jane.proto).constructor

(9)用一種最簡單的方式實(shí)現(xiàn)數(shù)組的去重 (Set

// 去除數(shù)組的重復(fù)成員
[...new Set(array)]

(10)寫出下面代碼的輸出:(Promise

const p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('success')
  }, 1000)
})

const p2 = p1.then(() => {
  throw new Error('error~')
})

console.log('p1:', p1)
console.log('p2:', p2)

setTimeout(() => {
  console.log('p1:', p1)
  console.log('p2:', p2)
}, 2000)

(11)Javascript模塊化標(biāo)準(zhǔn)有哪些绊袋?分別介紹一下它們之間的區(qū)別毕匀。(模塊化

#50

(12)importrequire 的區(qū)別?(模塊化

require import
所屬的模塊化標(biāo)準(zhǔn) CommonJS ES6語言層面實(shí)現(xiàn)的模塊功能
什么時(shí)候執(zhí)行 運(yùn)行時(shí)執(zhí)行模塊加載 編譯時(shí)執(zhí)行模塊導(dǎo)入(或者叫靜態(tài)加載)
加載效率
實(shí)質(zhì)是整體加載整個(gè)模塊:生成一個(gè)對(duì)象癌别,然后再從這個(gè)對(duì)象上面讀取方法皂岔。這種加載稱為“運(yùn)行時(shí)加載”,因?yàn)橹挥羞\(yùn)行時(shí)才能得到這個(gè)對(duì)象展姐,導(dǎo)致完全沒辦法在編譯時(shí)做“靜態(tài)優(yōu)化”躁垛。
ES6 模塊不是對(duì)象,而是通過export命令顯式指定輸出的代碼圾笨,再通過import命令輸入教馆。import { stat, exists, readFile } from 'fs'; 上面代碼的實(shí)質(zhì)是從fs模塊加載 3 個(gè)方法,其他方法不加載擂达。這種加載稱為“編譯時(shí)加載”或者靜態(tài)加載土铺,即 ES6 可以在編譯時(shí)就完成模塊加載,效率要比 CommonJS 模塊的加載方式高板鬓。當(dāng)然悲敷,這也導(dǎo)致了沒法引用 ES6 模塊本身,因?yàn)樗皇菍?duì)象俭令。

(13)Javascript實(shí)現(xiàn)異步編程的幾種方式 (JS對(duì)異步編程的實(shí)現(xiàn)方式

  • 回調(diào)函數(shù)
  • 事件監(jiān)聽
  • 發(fā)布/訂閱
  • Promise 對(duì)象
  • Generator函數(shù)

(14)async函數(shù)的實(shí)現(xiàn)原理 (Async/Await原理

3后德、UI Framework

(15)談?wù)剬?duì)Vue的生命周期的理解?

(16)什么階段才能訪問DOM唤蔗?

(17)Vue-router 路由模式有幾種探遵?

三種: 'hash' 、'history' 妓柜、'abstract'

  • hash:使用 URL hash值來作路由箱季。支持所有瀏覽器,包括不支持 HTML5 History Api的瀏覽器棍掐。
  • history :依賴 HTML5 History API 和服務(wù)器配置藏雏。
  • abstract:支持所有JavaScript 運(yùn)行環(huán)境,如 Node.js 服務(wù)器端作煌。如果發(fā)現(xiàn)沒有瀏覽器的 API掘殴,路由會(huì)自動(dòng)強(qiáng)制進(jìn)入這個(gè)模式。

(18)談?wù)剬?duì)React的生命周期的理解粟誓?

(19)如何實(shí)現(xiàn):在父組件Father的生命周期中直接引用子組件Child中某一個(gè)元素(例如一個(gè)input元素)奏寨?寫出實(shí)現(xiàn)的代碼。

(20)談?wù)剬?duì)React中Context的理解鹰服,什么情況下需要使用Context 病瞳?

(21)Redux設(shè)計(jì)的三條重要原則是什么揽咕?為什么reducer必須返回一個(gè)新的state,而不能修改傳入的state對(duì)象套菜?

#86

(22)react redux中表象組件和容器組件的區(qū)別是什么亲善?

Presentational Components Container Components
Purpose How things look (markup, styles) How things work (data fetching, state updates)
Aware of Redux No Yes
To read data Read data from props Subscribe to Redux state
To change data Invoke callbacks from props Dispatch Redux actions
Are written By hand Usually generated by React Redux

(23)談一談對(duì)React Hooks的理解?

4逗柴、Others

(24)大致描述一下瀏覽器渲染的流程蛹头?(瀏覽器工作原理

#97

(25)為了提高用戶體驗(yàn),做過的性能優(yōu)化有哪些戏溺?(性能優(yōu)化

(26)談一談對(duì)微服務(wù)的了解渣蜗。

有任何github star fork follow watch issue 加星之類的疑問, 我都能幫得到你們

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末旷祸,一起剝皮案震驚了整個(gè)濱河市袍睡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肋僧,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件控淡,死亡現(xiàn)場(chǎng)離奇詭異嫌吠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)掺炭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門辫诅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涧狮,你說我怎么就攤上這事炕矮。” “怎么了者冤?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵肤视,是天一觀的道長。 經(jīng)常有香客問我涉枫,道長邢滑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任愿汰,我火速辦了婚禮困后,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘衬廷。我一直安慰自己摇予,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布吗跋。 她就那樣靜靜地躺著侧戴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上救鲤,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天久窟,我揣著相機(jī)與錄音,去河邊找鬼本缠。 笑死斥扛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的丹锹。 我是一名探鬼主播稀颁,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼楣黍!你這毒婦竟也來了匾灶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤租漂,失蹤者是張志新(化名)和其女友劉穎阶女,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哩治,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秃踩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了业筏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片憔杨。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蒜胖,靈堂內(nèi)的尸體忽然破棺而出消别,到底是詐尸還是另有隱情,我是刑警寧澤台谢,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布寻狂,位于F島的核電站,受9級(jí)特大地震影響对碌,放射性物質(zhì)發(fā)生泄漏荆虱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一朽们、第九天 我趴在偏房一處隱蔽的房頂上張望朦蕴。 院中可真熱鬧甩恼,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽襟雷。三九已至,卻和暖如春岳瞭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚊锹。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工瞳筏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牡昆。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓姚炕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親丢烘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柱宦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容