二十家公司前端面試題(一)

HTML CSS JavaScript 技術 達人科技 2017-04-21

題目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 }

相關推薦

推薦中...