今天面了完美世界的web前端崗,廢話不多說,直接記錄一下今天的面經。
JS問題
1: 一般引入script文件在頁面的哪個地方引入?
回答:一般在<body></body>的最底部引入,在<head>中引入可能會引起js阻塞加載的問題。
2: 當要刪除數組中的某個元素,如何進行刪除?
回答:知道它的索引嗎?若是知道其索引,直接使用js的方法,array.splice(i, 1); //即可刪除索引為i的元素。
3:說一下你對閉包的了解?
回答:閉包是指有權訪問另一個函數作用域中的變量的函數。創建閉包的常見方式,就是在一個函數的內部創建另一個函數。(感覺這個題回答的不怎么樣,也扯到了一些閉包會引起內存泄漏等,balabala)
4: 說一下你用過的一些ES6的東西?
回答:(1)let、const。let解決了js中沒有塊作用域的問題;const解決了全局變量的問題。(2)class類解決了js中繼承比較復雜,比較難維護的問題。(3)extends 實現了js中的繼承,使代碼更易于理解。(4)箭頭函數 舉例說明箭頭函數的使用方法,你是如何使用的。(5)promise函數 解決了js中的回調地獄的問題,舉例說明你在你是如何具體使用的。
5: 寫代碼實現js的繼承,解釋其繼承機制。
//自己胡亂舉了個例子寫的
function Person(name, age){
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function(){
console.log("hello!!");
}
function Stu(name, age){
this.name = name;
this.age = age;
}
Stu.prototype = new Person(); //實現了繼承
6: 出了4道回答運行輸出的問題。主要考察this的指向和變量作用域的問題。
7: 知道深拷貝和淺拷貝問題嗎?如何進行深拷貝?
回答:如果只是單純的淺拷貝,對于引用類型的變量來說,很可能被幾個對象同時操作,造成預期之外的結果。所以,對于數組和對象的拷貝應該使用深拷貝。
//深拷貝代碼
function Copy(obj){
var result;
if(obj instanceof Array){
result = [];
var i = obj.length;
while(i--){
result[i] = Copy(obj[i]);
}
return result;
}else if(obj instanceof Object){
result = {};
for(var t in obj){
result[t] = Copy(obj[t]);
}
return result;
}else{
return obj;
}
}
CSS問題
1: 解釋一下盒模型?
回答: 分為w3c盒模型和IE的盒模型,IE盒模型中的width是包含content+padding+border的 balabala。不知道面試官的下一問是問的如何實現兼容,還是如何實現選擇??。(面試官說回答的有誤差)
最后說有個屬性,應該是考察CSS3的“box-sizing”屬性會給開發者選擇盒模型解析方式的權利。
2: 對列表的理解(ul li ol等)
話說,ol是有序的(order)
//有序列表
<ol>
<li>c語言</li>
<li>c++</li>
</ol>
//無序列表
<ul>
<li>蘋果</li>
<li>梨</li>
</ul>
//自定義列表
<dl>
<dt>計算機</dt>
<dd>計算機是用來計算的</dd>
<dt>顯示器</dt>
<dd>顯示器是用來視覺顯示的。。。</dd>
</dl>
3: position的取值?
回答:常用的有 relative、absolute、fixed、static。
說一下它們各自定位的標準嗎?大體是
4: 對float的理解?
5:一些簡單的標簽的用法(p、ul、li)等
非技術類
1: 為什么選擇前端?
2: 英語水平怎么樣?平時會使用百度嗎?會看stack overflow嗎?電腦翻墻了嗎?
3:面對壓力的時候怎么辦?
4:你做的那個XXX項目是什么?
5:有什么問題要問他?
還有一些比較小的細節了 差不多就這些了。感覺面的都還是比較基礎的。算是準備到一些。