1.字节跳动 -前端面试
首先提前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;
}

浙公网安备 33010602011771号