前端跳槽面試必備技巧css
一面前端
頁面佈局類 / CSS盒模型vue
DOM事件類 / HTTP協議類css3
面向對象類 / 原型鏈類程序員
通訊類 / 安全類 / 算法類web
二面面試
渲染機制 / 異步線程算法
頁面性能 / 錯誤監控跨域
MVVM框架 (vue) 解析數組
工做原理 / 生命週期
雙向綁定 / 項目特點
面試是一個考試。是通過精心設計的。
(1) Javascript的算法包含哪些?
去重,數組排序,交叉
(2) 前端性能優化
(3) 數組的操做
(4) CSS,以及CSS3新增的屬性
(5) JS的面向對象
(6) Vue的生命週期,以及工做原理
(7) 在Vue開發的過程當中遇到過哪些問題
(8) ES6的繼承類
程序員的第三年,是一到坎,基礎知識掌握不紮實,學高階知識,根本沒用。
因此,基礎知識,加ES6,加Vue,基本就好了。
有一個要注意的一點就是,若是你學的東西,將來用不上。那麼你就是在浪費時間。
(1)
頁面佈局 / CSS盒模型
DOM事件 / HTTP協議
面向對象 / 原型鏈
通訊 / 安全 / 算法
(1) 頁面佈局
題目:假設高度已知,請寫出三欄佈局,其中左欄、右欄寬度各爲300px,中間自適應。
至少不下於3種解決方案:
(1)浮動
(2)絕對定位
(3) flex-box
(4) 表格佈局(table-box)
(5)grid 網格佈局
(1)浮動解決方案
<section class="layout float"> <article class="left-right-center"> <div class="left"></div> <div class="right"></div> <div class="center"> <h1>浮動解決方案</h1> 1.這是三欄佈局中間部分 2.這是三欄佈局中間部分 </div> </article> </section>
(2) 絕對定位
// VSCode 快捷寫法
// 而後回車
div.left+div.center+div.right
不斷的收集面試題,以及刷面試題。
最高端的還有北郵的計算機研究生,能夠去了解一下。怎麼會沒有事情作?
<style> * { margin:0; padding:0; } .layout article div { min-height: 100px; } .layout.absolute .left-center-right > div { position: absolute; } .layout.absolute .left { left: 0; width: 300px; background: red; } .layout.absolute .center { left: 300px; right: 300px; background: yellow; } .layout.absolute .right { right:0; width: 300px; background: blue; } </style> <section class="layout absolute"> <article class="left-center-right"> <div class="left"></div> <div class="center"> <h2>絕對定位解決方案</h2> 1.這是三欄佈局絕對定位中間部分。 </div> <div class="right"></div> </article> </section>
(3) flexbox解決方案
<style> * { margin:0; padding:0; } .layout article div { min-height: 100px; } .layout.flexbox .left-center-right { display: flex; } .layout.flexbox .left { width: 300px; background: red; } .layout.flexbox .center { flex:1; background: yellow; } .layout.flexbox .right { width: 300px; background: blue; } </style> <section class="layout flexbox"> <article class="left-center-right"> <div class="left"></div> <div class="center"> <h2>flexbox解決方案</h2> 1.這是三欄佈局flexbox中間部分 2.這是三欄佈局flexbox中間部分 </div> <div class="right"></div> </article> </section>
(4) 表格佈局
<style> * { margin:0; padding:0; } .layout article div { min-height: 100px; } .layout.table .left-center-right { width: 100%; display: table; height: 100px; } .layout.table .left-center-right > div { display: table-cell; } .layout.table .left { width: 300px; background: red; } .layout.table .center { background: yellow; } .layout.table .right { width: 300px; background: blue; } </style> <section class="layout table"> <article class="left-center-right"> <div class="left"></div> <div class="center"> <h2>表格佈局解決方案</h2> 1.這是三欄佈局表格佈局中間部分 2.這是三欄佈局表格佈局中間部分 </div> <div class="right"></div> </article> </section>
(5) 網格佈局
<style> * { margin:0; padding:0; } .layout.grid .left-center-right { display: grid; /** 父容器聲明爲網格佈局 **/ width: 100%; grid-template-rows: 100px; grid-template-columns: 300px auto 300px; } .layout.grid .left { background: red; } .layout.grid .center { background: yellow; } .layout.grid .right { background: blue; } </style> <section class="layout grid"> <article class="left-center-right"> <div class="left"></div> <div class="center"> <h2>網格佈局解決方案</h2> 1.這是三欄佈局網格佈局中間部分 2.這是三欄佈局網格佈局中間部分 </div> <div class="right"></div> </article> </section>
這道題目怎麼延申?
(1) 這5種解決方案各自有什麼優缺點?
浮動解決方案的兼容性比較好,只要把清除浮動給作好的話。
絕對定位解決方案,好處是快捷,缺點是佈局已經脫離文檔流了,那意味着下面全部的子元素也必須脫離文檔流。
那麼就致使了這個方案的有效性,也就是可以使用性是比較差的。
flexbox佈局,是CSS3中新出現的一種佈局方式,flexbox佈局,是比較完美的一個,如今的移動端,基本上
都是基於flexbox佈局。
表格佈局,在不少場景中,仍是比較適用的。表格佈局的兼容性是很是好的。由於IE8不兼容flexbox,因此,在
低版本的瀏覽器中可使用表格佈局。
網格佈局,是新出的技術。
(2) 還有,若是高度未知,中間的高度被撐開了,須要左邊和右邊也跟着被撐開。那麼剛纔寫的5種方案,
哪一個還能夠被適用?哪一個已經不能夠用了?
若是高度未知,哪種解決方案再也不適用?
浮動解決方案不能用。
絕對定位解決方案不能用。
flexbox解決方案能夠用。
表格佈局能夠用。
網格佈局不能用。
(3) 這5種方案的兼容性(瀏覽器)如何?真正到業務中去使用,哪個最實用?
(4) 爲何浮動解決方案,中間的超出部分爲何會這樣顯示?
原理就是內容向左浮動的時候,當內容超出之後,左邊的寬度是固定的,中間的文字,沒有了遮擋物,
因此,內容就會向左。
(5) 如何讓浮動解決方案的中間超出部分,不要跑到左邊去?
這個時候,應該怎麼作?
答案是建立BFC。
什麼是BFC,在盒模型中有這個概念。
頁面佈局的變通
三欄佈局:
兩欄佈局:
還有一個佈局面試題,比較常見,"居中"。
題目:一、請寫出css樣式實現一個不定寬高的彈出框上下左右居中(至少兩種)
就是彈層高度寬度不肯定,始終上下左右居中(css方法)
(1) translate定位解決方案
CSS3的屬性,IE8不支持。
這是css3的transform的屬性,能夠將寬高度設爲百分比,IE8不支持,在移動端使用較好。
<style> * { margin:0; padding:0; } .translateCenter { width: 40%; height: 20%; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); background: blue; } </style> <div class="translateCenter">我是translate居中定位</div>
(2) margin居中定位解決方案
不須要肯定div的寬度和高度,讓top,bottom,left,right都爲0,再加個margin: auto。 IE7不支持。
<style> * { margin:0; padding:0; } .marginCenter { width: 40%; height: 20%; position: absolute; left:0; top:0; right:0; bottom:0; margin: auto; background: yellow; } </style> <div class="marginCenter">我是margin居中定位</div>
(3) 另外一種簡單的margin居中佈局解決方案。
不須要肯定div的寬度和高度。原理相似於translate。
<style> * { margin:0; padding:0; } .marginCenter { width: 40%; height: 20%; position: absolute; left: 50%; top: 50%; margin-left: -20%; margin-top: -10%; background: blue; } </style> <div class="marginCenter">我是margin居中定位</div>
(4) 使用flexbox佈局解決方案
純css實現不定寬度提示框水平垂直頁面居中。
一些提示框裏的文字字數是不必定的,寬度不能寫死。
運用flexbox佈局。
justify-content: center;
align-items: center;
控制 .text 在頁面水平垂直居中。
提示框不須要設置寬度和高度,只須要控制父容器。
<style> * { margin:0; padding:0; } .wrapper { position: fixed; top:0; bottom:0; z-index:99; display: flex; justify-content: center; align-items: center; height: 100%; width: 100%; background: red; } .text { background: rgba(0,0,0,.6); padding: 10px; color: #fff; } </style> <div class="wrapper"> <div class="text">我是flexbox居中定位</div> </div>
總結:
有四個解決方案:
(1) 經過translate實現不定寬高元素水平垂直居中
.demo1 {
position: absolue;
top: 50%;
left:50%;
-webkit-transform: translate(-50%, -50%);
}
簡單分析:
先把元素設定爲絕對定位。
絕對定位指的就是 position: absolute;
position:relative; 指的是相對定位。
而後經過top 和 left把元素的最左點和最上點移動到屏幕的中間。
最後經過 translate屬性,根據元素自身大小,相對向左和向上移動自身寬高的50%。
從而實現了不定寬高元素的水平垂直居中。
(2) 經過margin居中定位實現不定寬高元素水平垂直居中。
(3) 另外一種簡單的margin居中定位解決方案,原理相似於translate屬性。
(4) 經過flexbox佈局解決方案。
.wrapper1 {
display: -webkit-flex;
justify-content: center;
align-items: center;
}
簡單分析:
設置父級元素 display 爲flex;
justify-content 設定子元素水平居中。
align-items 設定子元素垂直居中。
延申:
使用flexbox佈局解決方案的時候,要注意兼容性寫法。
.container{ 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+ */ }
(2) CSS盒模型
題目:談談你對CSS盒模型的認識
關聯知識很是多。
(1) 基本概念:標準模型+IE模型
(2) 標準模型和IE模型區別
標準模型和IE模型的區別,就是寬度和高度的計算方式不一樣。
標準模型,的寬度指的就是content的寬度。
不包含padding和border。
IE模型,的寬度包含padding 和 border。
好比:寬度是200px,那麼content的寬度只有180px。
高度也是相似的。
(3) CSS如何設置這兩種模型
box-sizing 是CSS3的一個屬性。
box-sizing: content-box;
或者
box-sizing: border-box;
(4) JS如何設置獲取盒模型對應的寬和高
dom.style.width或者 dom.style.height
dom.currentStyle.width 或者 dom.currentStyle.height ,這個屬性只有IE支持。
window.getComputedStyle(dom).width 或者 window.getComputedStyle(dom).height ,這個屬性全部瀏覽器都支持。
dom.getBoundingClientRect().width 或者 dom.getBoundingClientRect().height ,這個API適用於獲取絕對位置。
(5) 實例題(根據盒模型解釋邊距重疊)
給 .wrapper 加上 overflow: hidden; 以後, .wrapper的高度變爲 110px。
(6) BFC(邊距重疊解決方案)
BFC是用來解決邊距重疊的方案的。
BFC的基本概念:就是塊級格式化上下文。
跟BFC並列的另外一個叫IFC,叫內聯格式化上下文。
BFC的原理:
如何建立BFC?
(7) BFC的使用場景
CSS的基石就是盒模型
(3) DOM事件
(4) 通訊 (跨域)
(5) CSRF / XSS 安全
(6) 算法
去重,迭代