已經很久沒想寫面經了……菜鳥面到生無可戀。javascript
1.用CSS實現下面圓形css
答案:html
<!DOCTYPE html> <html> <head> <style type="text/css"> .circle{ height: 0px; width: 0px; border-radius :50%; border-left:50px solid transparent; border-right: 50px solid transparent; border-top: 50px solid transparent; border-bottom: 50px solid transparent; border-left-color: #000; border-right-color: #000; border-top-color:red; border-bottom-color:red; } .circle1{ height: 0px; width: 0px; border-radius :50%; border:50px solid; border-color:black red black red; } </style> </head> <body> <div class="circle"></div> </body> </html>
上面circle和circle1兩個class皆能夠。vue
2.堆排序,手動畫圖實現堆排序。如何建堆,如何排序。java
3.實際上是leetcode上面的一道原題:https://leetcode.com/problems/container-with-most-water/description/react
先用最笨的辦法O(n2)解,也就是循環遍歷求每兩根之間的盛水量,再求出最大值。webpack
再就是用兩根指針索引,雙指針,first和last,時間複雜度爲O(N)。git
這道題網上解法不少,可自行查看。github
4.html的盒子模型web
IE的盒子模型,標準盒子模型,box-sizing的用法。
5.float元素塌陷的緣由和解決辦法,順便問到了BFC盒子的觸發方式。
緣由:當元素設置浮動後,會自動脫離文檔流
解決辦法:
一、給父元素也添加float
。這樣讓父元素與子元素一塊兒脫離文檔流浮動起來,保證子元素在父元素內,這樣父元素就能自適應子元素的高度,可是此方法有一弊端,必定會影響父元素以後的元素排列,甚至影響佈局。
二、給父元素一個固定高度,此方法適用於子元素高度已知而且固定的狀況。
三、添加一個塊級元素,並給此元素設置clear:both;
清除浮動。在很早以前用的就是這種解決辦法,新建一個空的div,爲這個div設置clear:both;這樣無疑是增長了無心義的標籤,一個大型頁面中,這種標籤太可能是很差的。
四、給父元素添加 overflow:hidden;
五、經過僞類::after清除浮動
BFC盒子的觸發方式:
float
不是 none
)position
爲 absolute
或 fixed
)display
爲 inline-block
)display
爲 table-cell
,HTML表格單元格默認爲該值)display
爲 table-caption
,HTML表格標題默認爲該值)display
爲 table、``table-row
、 table-row-group、``table-header-group、``table-footer-group
(分別是HTML table、row、tbody、thead、tfoot的默認屬性)或 inline-table
)overflow
值不爲 visible
的塊元素display
值爲 [flow-root](https://drafts.csswg.org/css-display/#valdef-display-flow-root)
的元素contain
值爲 layout
、content
或 strict
的元素display
爲 flex
或 inline-flex
元素的直接子元素)display
爲 grid
或 inline-grid
元素的直接子元素)column-count
或 column-width
不爲 auto,包括 ``column-count
爲 1
)column-span
爲 all
的元素始終會建立一個新的BFC,即便該元素沒有包裹在一個多列容器中(標準變動,Chrome bug)6.margin塌陷問題
在垂直方向(水平方向沒這問題),上面元素的margin-bottom和下面的margin-top,在文檔流中,只會取其中較大的一個實行,而不是上面的margin-bottom+下面的margin-top。
解決辦法:觸發BFC盒子、
7.js的原型鏈和構造器,連線
我已經懵了,有小夥伴連好了,能夠私信我一下。
8.Object.assign的特性和用法
淺拷貝
9.https的加密方式,對稱加密和不對稱加密
10.線程和進程的異同點,如何加鎖。
11.TCP協議的特色,三次握手四次揮手,擁塞控制,重傳之類的。
12.看代碼,說輸出結果和緣由
<script> window.onload=function(){ function test(flag){ if(flag){ return function getValue(){ console.log('a'); } } else{ return function getValue(){ console.log('b'); } } return getValue; } var c=test(true); c();// a } </script>
這段考的是函數提高的問題,一共定義了倆getValue,那個生效了?由於flag===true,因此沒有執行到else,因此第一個getValue生效。
對於重複定義,變量的重複聲明是無用的,不會覆蓋以前同一做用域聲明的變量,但函數的重複聲明會覆蓋前面的聲明的同名函數或同名變量。
//變量的重複聲明無用 var a = 1; var a; console.log(a);//1 //覆蓋同名變量 var a; function a(){ console.log(1); } a();//1 //覆蓋同名函數 a();//2 function a(){ console.log(1); } function a(){ console.log(2); }
13.看代碼,說輸出結果和緣由
window.onload=function(){ var a=11; function test(){ var a=1; var obj={ a:10, b:2, fn:function(){ console.log(this.a+this.b); } }; obj.fn();//12 } test(); }
當obj.fn()被執行的時候,此時的this指向的是 obj 這個對象,由於fn函數是經過obj這個對象直接調用的。
14.看代碼,說輸出結果和緣由
var a=11; function test(){ var a=1; setTimeout(function(){ console.log(this.a);//11 },0); } test();
在通常狀況下,this對象時在運行時基於函數的執行環境綁定的:在全局函數中,this等於window,而當函數被做爲某個對象的方法調用時,this等於那個對象。可是,匿名函數的執行環境具備全局性,所以它的this對象一般指向windows.
15.看代碼,說輸出結果和緣由
var a=11; function test(){ console.log(a);//undefined var a=1; } test();
函數test有本身的做用域,而且做用域內聲明瞭變量a,根據變量提高的規則,在該做用域內未定義以前就是undefined。
16. 1+undefined=NaN
17.git經常使用步驟
git clone / git pull / git fetch
git checkout -b branchname
git add ./ git commit -m""/ git push
git merge / git rebase / git squash
18.jsonp 跨域
function getScript(url,callback){ var script = document.createElement("script"); script.type="text/javascript"; if(script.readyState){ script.onreadystatechange = function(){ if(script.readyState=="loaded"||script.readyState=="complete"){ script.onreadystatechange=null; callback(); } } }else{ script.onload = function(){ callback(); } } script.src = url; document.getElementsByTagName("head")[0].appendChild(script); }
什麼是同源策略,怎麼比較兩端的同源策略?兩端指的是那兩端?
還有那些html標籤默認跨域:script、img、link、iframe
http://www.javashuo.com/article/p-ajvnwvwz-dz.html
19.script是阻塞式加載?非阻塞式加載?
這也涉及了頁面渲染過程,各部分資源加載過程。
20.vue的生命週期
見:https://cn.vuejs.org/v2/guide/instance.html#%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E5%9B%BE%E7%A4%BA
data定義在那個階段?
解:當一個 Vue 實例被建立時,它向 Vue 的響應式系統中加入了其 data
對象中能找到的全部的屬性。
watch發生在哪一個階段?create階段通常作什麼事情?mounted階段作什麼事情?
active動態階段會發生什麼?
window.onload發生在vue的那個週期?
怎麼將vue的生命週期同普通html頁面加載週期對應起來。
vue的深刻響應式原理?
解:https://cn.vuejs.org/v2/guide/reactivity.html 主要仍是用了Object.defineProperty 的數據屬性和訪問其屬性,跟蹤依賴,在屬性被訪問和修改時通知變化。受現代 JavaScript 的限制 (以及廢棄 Object.observe
),Vue 不能檢測到對象屬性的添加或刪除。因爲 Vue 會在初始化實例時對屬性執行 getter/setter
轉化過程,因此屬性必須在 data
對象上存在才能讓 Vue 轉換它,這樣才能讓它是響應的。
21.在vue中,template、html、render均可以做爲模板,有什麼區別?
見:html:https://cn.vuejs.org/v2/api/#el
template:https://cn.vuejs.org/v2/api/#template
render:https://cn.vuejs.org/v2/api/#render
22.vue頁面和普通html頁面有什麼須要注意的事項?
<div class="test"> <li>123</li> <li>123</li> <li>123</li> </div>
上面這種狀況中的li元素在兩種頁面中都會渲染嗎?
23.隱式轉換
var a={}; var b={}; var c=[]; var d=[]; console.log(a==b);// false console.log(c==d);// false console.log(a==true);// false console.log(b==true);// false console.log(b==0);// false console.log(a==0);// false console.log(b==null);// false console.log(a==null);// false console.log(a=='1');// false console.log(b=='1');// false
上面每一步比較,都發生了隱式轉換,轉換了什麼?比較的是什麼?結果是什麼?爲何?
其實引用類型比較的是該對象的地址,每一個變量都開闢了一塊屬於本身的地址,因此 a!=b
具體見mdn:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness
https://dorey.github.io/JavaScript-Equality-Table/
24.如何得到某個id爲「test」的元素的CSS屬性值?
<!DOCTYPE html> <html> <head> <style> #test{ width :100px; height:100px; }</style> </head> <body> <div id="test" style="background-color:red"> </div> <script> var dom = document.getElementById("test"); console.log(dom.style.backgroundColor);// red console.log(dom.style.width);// 什麼都沒輸出 var computedStyle = document.defaultView.getComputedStyle(dom, null); console.log(computedStyle.width);// 100px console.log(computedStyle.backgroundColor);// rgb(255, 0, 0) </script> </body> </html>
因此dom.style這個方法只能JS只能獲取寫在html標籤中的寫在style屬性中的值(style=」…」),而沒法獲取定義在<style type="text/css">裏面的屬性。也就是說只能得到內聯樣式值。
而getComputedStyle能夠獲取全部樣式值。
還有IE的currentStyle,你們能夠了解一下。
25.webpack的用處
轉碼解碼,壓縮,tree shaking等……
26.計算下面倆div a和 b是否相交?若是相交,交集的面積多大?js實現
最簡單的方式就是計算二者style的top 和 left,而後計算。
或者找到兩個div的中心點,判斷是否隔離?相交?嵌套?
其餘方法尋找中,可評論告知。
兩面,一共差很少就面了這幾個問題,兩個小時+……