首先提前15分鍾進入牛客房間,進行聲音 視頻,網絡的調試,一切准備工作就緒后,開始正式面試
面試官 先讓進行一下自我介紹。於是簡單的介紹后,就開始正式進入面試階段
1、手寫快速排序 ?
該方法的基本思想是:
1.先從數列中取出一個數作為基准數。
2.分區過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。
3.再對左右區間重復第二步,直到各區間只有一個數。
var quickSort = function(arr) {
if (arr.length <= 1) { return arr; }
var pivotIndex = Math.floor(arr.length / 2);
var pivot = arr.splice(pivotIndex, 1)[0];
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++){
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot], quickSort(right));
};
function quickSort(arr) {
if (!arr.length) {
return []
}
const [pivot,...rest] = arr;
return [
...quickSort(rest.filter(item => item < pivot)),
pivot,
...quickSort(rest.filter(item => item >= pivot))
]
}
2、https為啥安全 ?
http協議屬於明文傳輸協議,交互過程以及數據傳輸都沒有進行加密,通信雙方也沒有進行任何認證,通信過程非常容易遭遇劫持、監聽、篡改,嚴重情況下,會造成惡意的流量劫持等問題,甚至造成個人隱私泄露(比如銀行卡卡號和密碼泄露)等嚴重的安全問題
HTTPS,其實就是身披SSL協議這層外殼的HTTP
3、cdn原理,有了解嘛 ?
CDN網絡是在用戶和服務器之間增加Cache層,主要是通過接管DNS實現,將用戶的請求引導到Cache上獲得源服務器的數據,從而降低網絡的訪問時間。
https://blog.csdn.net/xiangzhihong8/article/details/83147542
4、單頁路由是如何實現 ?
- 配置路由模式
history和hash - 添加和刪除路由
- 監聽路由變化並調用對應路由回調
- 暴露路由跳轉函數
5、宏任務和微任務 程序題 ?
console.log('1');
setTimeout(function () {
console.log('2');
})
new Promise(function (resolve) {
console.log('3');
}).then(function () {
new Promise(function (resolve) {
console.log('4');
}).then(function () {
console.log('5');
})
console.log('6');
})
console.log('7');
正確輸出 :
1
3
7
2
6、對promise all 有了解嘛?用promise實現一個promise.all ?
function promiseAll(promises) {
return new Promise((resolve, reject) => {
let resultCount = 0;
let results = new Array(promises.length);
for (let i = 0; i < promises.length; i++) {
promises[i].then(value => {
resultCount++;
results[i] = value;
if (resultCount === promises.length) {
return resolve(results)
}
}, error => {
reject(error)
})
}
})
}
let p1 = new Promise(resolve => resolve('p1'))
let p2 = new Promise(resolve => resolve('p2'))
let p3 = Promise.reject('p3 error')
promiseAll([p1, p2]).then(results => {
console.log(results) // ['p1', 'p2']
}).catch(error => {
console.log(error)
})
promiseAll([p1, p2, p3]).then(results => {
console.log(results)
}).catch(error => {
console.log(error) // 'p3 error'
})
7、左右寬度寫死 ,中間自適應?
html:
<div className="container">
<div className="main left"></div>
<div className="main right"></div>
<div className="main center">
<h1>float </h1>
<p>float浮動划分左中右</p>
</div>
</div>
css:
方法1:float
.main {
height: 100px;
}
.left {
float: left;
width: 300px;
background-color: green;
}
.right {
float: right;
width: 300px;
background-color: gray;
}
.center {
background-color: gold;
}
方法2:flex
.flex {
margin-top: 160px;
display: flex;
}
.flex-left {
width: 300px;
background-color: green;
}
.flex-right {
width: 300px;
background-color: gray;
}
.flex-center {
flex: 1;
background-color: gold;
}
方法3 : position
.position-left {
width: 300px;
background-color: green;
position: absolute;
left: 0;
}
.position-right {
width: 300px;
background-color: gray;
position: absolute;
right: 0;
}
.position-center {
background-color: gold;
position: absolute;
left: 300px;
right: 300px;
}
8、css 樣式題
<div>
<p className="font1 font2">111111</p>
</div>
.font1{
color:red;
}
.font2{
color:pink;
}
