這是我參與更文挑戰的第7天,活動詳情查看:更文挑戰css
碼字不易,您的贊是我持續更新創做的動力。html
在此次找工做的過程當中,百度總體的流程仍是比較規範的,雖然由於第一次去百度大廈的時候被HR告知一面面試官由於會議緣由要臨時取消面試,改約其餘時間。可是以後來到和全部的面試官聊天的過程當中,仍是感覺到了大廠範兒。前端
相較於其餘公司喜歡問原理、問機制,百度的幾面中更關注的是你在工做中是如何運用你所掌握的框架知識的,工做中是如何平衡業務和技術的,會經過一些工做中很實際的問題來一層層的深刻討論,這點我以爲很是好。webpack
下面主要看一下百度線下測試題部分,看看百度更關注一個前端的基本素養是什麼。web
<style> body { background: #fff !important; } .root { border: 3px #000 solid; width: 200px; } .root div { box-sizing: border-box; border: 1px #000 solid; background-color: #fff; } .div-a { position: relative; z-index: 100; top: 50px; width: 200px; height: 100px; } .div-b { position: absolute; z-index: 300; top: 80px; width: 100px; height: 50px; } .div-c { position: absolute; z-index: 200; width: 50px; height: 100px; } </style>
<div class="root">
<div class="div-a">
<div class="div-b"></div>
</div>
<div class="div-c"></div>
</div>
複製代碼
選B。面試
⾸先,針對 root ⾼度,因爲 root 下的元素只有 div-a 是 relative ,在⽂檔流中;⼜由於全部 div 的盒模型是使⽤的標準盒模型,因此 root 的⾼度就等於 div-a 的⾼度 200px + 其上下邊框的⾼度 3px*2 = 206px ;ajax
而後, div-a 相對其正常位置向下偏移 50px (top: 50px) , div-b 是絕對定位,其定位是相對於⽗級 div-a 進⾏的,向下偏移 80px (top:80px) ,由此能夠排除C、D選項。算法
A、B選項中的不一樣點在於針對 div-c 和 div-b 的 z-index ,因爲 div-b 的⽗級元素 div-a 的 z-index 爲 100px ,根據從⽗規則,因此 div-b 的 z-index 會被降級,⽽ div-c 的 z-index 值⼤於 div-a 的 z-index ,因此 div-c 在 div-b 的上⾯。故選B。跨域
同源策略是指協議、端⼝、域名相同,也就是在同⼀個域中。數組
⾮同源受到的限制有:cookie⽆法讀取、dom⽆法獲取、ajax請求⽆法發送。
跨域:兩個不一樣域(協議、端⼝、域名不一樣)之間進⾏請求。
解決跨域的⽅法:
必需項, 值爲請求頭中的 Origin 的值.
可選項, 值爲boolean, 表示是否容許瀏覽器發送cookie, 須要在服務器配置.
必需項, 容許跨域請求的請求⽅式.
強制緩存
由於這個時間是⼀個絕對時間,因此當客戶端本地時間被修改後,服務器與客戶端時間誤差變⼤會 致使緩存混亂。
的取值有:
協商緩存
若未命中強緩存,則瀏覽器會將請求發送⾄服務器。服務器根據http頭信息中的Last-Modify/If-ModifySince或Etag/If-None-Match來判斷是否命中協商緩存。若是命中,則http返回碼爲304,瀏覽器從緩存 中加載資源。
301 永久性重定向。該狀態碼錶示請求的資源已經被分配了新的URI,而且之後使⽤資源如今所指的URI。而且根據請求的⽅法有不一樣的處理⽅式。
302 臨時性重定向。該狀態碼錶示請求的資源已被分配了新的URI,但願⽤戶本次能使⽤新的URI訪問。
304 該狀態碼錶示客戶端發送附帶條件請求時,服務器端容許請求訪問資源,但未滿⾜條件的狀況。
304狀態碼返回時,不包含任何響應的主題部分。附帶條件的請求指的是採⽤GET⽅法的請求頭中包含:If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任⼀⾸部。
const result = ['1', '3', '10'].map(parseInt);
// 這⾥會打印出什麼呢?
console.log( result );
複製代碼
打印結果是[1, NaN, 2] 由於map的參數是
function(current, index, arr) { // 當前元素值,當前元素索引值,數組自己
}
複製代碼
parseInt的參數是:
parseInt(str, radix) // 解析的字符串,⼏進制(若省略或爲0,則以10進⾏解析,若⼩於2或者⼤於36,則返回NaN)
複製代碼
因此該題展開來寫:
const result = ['1', '3', '10'].map(function(cur, index, arr) {
return parseInt(cur, index);
});
// 執⾏過程:
// parseInt('1', 0) -> 1
// parseInt('3', 1) -> NaN
// parseInt('10', 2) -> 2
複製代碼
for (var i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i);
}, 1000);
}
複製代碼
const myPromise = num => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(num)
}, 1000)
})
}
async function test() {
for (let i = 0; i < 5;) {
i++;
console.log(await myPromise(i))
}
}
test();
複製代碼
const arrayA = [4, 2, 1, 2, 5];
const arrayB = [2, 3, 1, 6];
function process(arrayA, arrayB) {
// 這⾥是你實現代碼的地⽅
}
/* 應該返回 [1, 2] */
process(arrayA, arrayB);
複製代碼
第一種:
function process(arrayA, arrayB){
return arrayA
.filter((v) => arrayB.includes(v))
.filter((v, i, arr) => arr.indexOf(v) === i )
.sort((a, b) => a-b);
}
複製代碼
第⼆種:
function process(arrayA, arrayB) {
const set = new Set();
while(arrayA.length > 0) {
const ele = arrayA.pop();
if (arrayB.includes(ele)) {
set.add(ele);
}
}
return [...set].sort((a,b) => a - b);
}
複製代碼
/* 例如, n = 1, return 1 (⽅法1: 1臺階) n = 2, return 2 (⽅法1: 1臺階&1臺階, ⽅法2: 2臺階) n = 3, return 3 (⽅法1: 1臺階*3次, ⽅法2: 1臺階&2臺階, ⽅法3: 2臺階&1臺階) */
function step(n) {
// 這⾥是你實現代碼的地⽅
}
複製代碼
(典型的斐波那契數列)
遞歸解法:
function step(n) {
if (n <= 0) {
throw new Error("param err");
return -1;
}
if (n == 1) return 1;
if (n == 2) return 2;
return step(n - 1) + step(n - 2);
}
複製代碼
⾮遞歸解法:
function step(n) {
if (n <= 0) {
throw new Error("param err");
return -1;
}
if (n === 1) return 1;
if (n === 2) return 2;
let nMinusOne = 2,
nMinusTwo = 1,
timeN = 0;
for (let i = 3; i <= n; ++i) {
timeN = nMinusOne + nMinusTwo;
nMinusTwo = nMinusOne;
nMinusOne = timeN;
}
return timeN;
}
複製代碼
綜合來看,百度對前端的要求其實更看重的是解決問題的能力以及一些很基礎的前段知識。面試的過程,其實也是覆盤本身的過程,經過一次次的覆盤來更加清楚本身的優劣勢,明確本身的定位,這樣才能在之後的工做中揚長補短,逐漸完善本身的知識體系。