二十家公司前端面試題(一)
題目1:CSS實現垂直水平居中
1.彈性盒子方法
給父容器設置dispaly: flex; justify-content: center; align-items: center
2.絕對定位居中
1 .box2 { 2 position: relative; 3 } 4 .con2 { 5 margin: auto; 6 position: absolute; 7 top: 0; 8 right: 0; 9 bottom: 0; 10 left: 0; 11 }
3負邊距居中
設外盒子100px寬高,內盒子50px寬高
1 .box3 { 2 position: relative; 3 } 4 .con3 { 5 position: absolute; 6 top: 50%; 7 left: 50%; 8 margin-left: -25px; 9 margin-top: -25px; 10 }
4變形
原理同3,把margin換成transform: translate(-50%, -50%)
題目2.寫出原生js 或者 JQ框架循環出下面的li內容
1 <ul> 2 <li>text1</li> 3 <li>text2</li> 4 <li>text3</li> 5 <li>text4</li> 6 <li>text5</li> 7 <li>text6</li> 8 </ul>
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>題目2.寫出原生js 或者 JQ框架循環出下面的li內容</title> 8 </head> 9 <body> 10 <h3>題目2. 寫出原生js 或者 JQ框架循環出下面的li內容</h3> 11 <ul></ul> 12 <script type="text/javascript"> 13 var oUl = document.querySelector('ul'); 14 for (var i = 0; i < 5; i++) { 15 var oLi = document.createElement('li'); 16 oLi.innerHTML = 'test' + (i+1); 17 oUl.appendChild(oLi); 18 } 19 </script> 20 </body> 21 </html>
題目3.get和post請求區別
1.GET請求將參數跟在url後進行傳遞, 而POST請求則是作為HTTP消息的實體內容發送給web服務器。當然在ajax請求中,這種區別對用戶不可見;
2.GET方式對傳輸的數據大小有限制,通常不能大於2KB, 而POST方式傳遞的數據量要比GET方式大得多,理論上不受限制
3.GET方式請求的數據會被瀏覽器緩存起來,因此其他人就可以從瀏覽器的歷史記錄中讀取到這些數據,例如賬號和密碼等。在某種情況下get會帶來嚴重的安全問題,而post方式相對來說可以避免這些問題。
4.GET方式和POST方式傳遞的數據在服務器端的獲取也不同
題目4.js中的函數 split join 的區別
1.split方法能把字符串反序列化為數組
2.split兩個參數 以第一個參數進行分割,第2個參數用來限制數組的大小
3.join方法能把數組序列化為字符串, join方法後面可以跟match方法進行模式匹配
題目5.dom結點的深度優先遍歷和廣度優先搜索
1、深度優先遍歷的遞歸寫法
1 function deepTraversal(node) { 2 var nodes = ; 3 if (node != null) { 4 nodes.push(node); 5 var children = node.children; 6 for (var i = 0; i < children.length; i++) 7 deepTraversal(children[i]); 8 } 9 return nodes; 10 }
2、深度優先遍歷的非遞歸寫法
1 function deepTraversal(node) { 2 var nodes = ; 3 if (node != null) { 4 var stack = ; 5 stack.push(node); 6 while (stack.length != 0) { 7 var item = stack.pop; 8 nodes.push(item); 9 var children = item.children; 10 for (var i = children.length - 1; i >= 0; i--) 11 stack.push(children[i]); 12 } 13 } 14 return nodes; 15 }
3、廣度優先遍歷的遞歸寫法:
1 function wideTraversal(node) { 2 var nodes = ; 3 var i = 0; 4 if (!(node == null)) { 5 nodes.push(node); 6 wideTraversal(node.nextElementSibling); 7 node = nodes[i++]; 8 wideTraversal(node.firstElementChild); 9 } 10 return nodes; 11 }
4、廣度優先遍歷的非遞歸寫法
1 function wideTraversal(selectNode) { 2 var nodes = ; 3 if (selectNode != null) { 4 var queue = ; 5 queue.unshift(selectNode); 6 while (queue.length != 0) { 7 var item = queue.shift; 8 nodes.push(item); 9 var children = item.children; 10 for (var i = 0; i < children.length; i++) 11 queue.push(children[i]); 12 } 13 } 14 return nodes; 15 }
相關推薦
推薦中...