快手前端秋招面经
0906 一面
- 手写防抖节流。基本的该有的写出来了,写获取返回值的时候出了点问题,调试不出来(获取返回值需要用一个promise对象包裹起来)。
- CSS 的盒子模型
- 垂直居中一个元素的方式有哪些
- 重排和重绘
- 实现一个三角形的方法(只答出了一种)
- 计算机网络分层
- http2,解决了什么问题,与 http1 的区别。
- 说说JS中数组常见的API
- 手写
indexOf、并能满足[1,2,3].indexOf() - 算法:需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?(简单动规)
0912 二面
- 三个子元素纵向排列,总高度小于视图高度时,header 固定在顶部,footer 固定在底部,content 撑满剩余空间;三个子元素总高度大于视图高度时,header 固定在顶部,footer 随着content一起滚动。(写了个大概)
<div class="box">
<div class="header">header</div>
<div class="content">content</div>
<div class="footer">footer</div>
</div>
<style>
.box{
min-height: 100vh;
display: flex;
flex-direction: column;
position: relative;
overflow: scroll;
}
.header{
position: absolute;
top: 0;
height: 100px;
}
.content{
flex: 1;
}
.footer{
height: 100px;
}
</style>
- 经典看代码说输出:(结果脑子抽了没答对)
var length = 10;
function fn() {
console.log(this.length);
}
var obj = {
length: 5,
method: function (fn) {
fn();
arguments[0]();
}
}
obj.method(fn, 1);
- 给出 一个时间范围 target,再给出一组时间范围 current,判断 current 覆盖的时间段是否 包含了 target时间段
const target = ["1979/06", "2001/10"];
// current1 为全覆盖
const current1 = [
["1985/09","1995/08"],
['1979/06', '1981/10'],
['1981/06', '1985/09'],
['1993/11', '1994/06'],
["1995/08", "2001/10"],
];
// current2 为不全覆盖
const current2 = [
['1979/06', '1981/10'],
['1981/12', '1985/09'],
["1985/09","1995/08"],
['1993/11', '1994/06'],
["1995/08", "2001/10"],
];
function fn(target, current){
let cur = current.sort((a, b)=>{
return a[0] < b[0] ? -1:1;
});
let min = cur[0][0]
let max = cur[0][1];
for(let i=1; i<cur.length; i++){
if(min <= target[0] && max >= target[1]) return true;
if(cur[i][0] <= max){
max = cur[i][1] < max ? max : cur[i][1];
continue;
}else{
return false;
}
}
if(min <= target[0] && max >= target[1]) return true;
else return false;
}
console.log(fn(target, current2))
- 然后就是简历上项目以及实习相关的事情。
0921 三面
- 简历上项目以及实习相关。
- 简单手写:给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1
str = "abcsdas"
result:1
str = "leet"
result:0
function findDuplicate(str){
if(str.length < 1) return 0;
let map = {};
for(let i = 0; i < str.length; i++){
let s = str.charAt(i);
if(map.hasOwnProperty(s)){
map[s] += 1;
}else{
map[s] = 0;
}
}
for(let i = 0; i < str.length; i++){
let s = str.charAt(i);
if(map[s] == 0) return i;
else continue;
}
return -1;
}
console.log(findDuplicate('leet'))
总的来说一二面的八股和手撕都还行(除了二面看代码说输出有点匡瓢)。
三面项目经历有点回答得含糊不清,到 09/27 还一直在泡池子。许愿能有个 hr 面吧。

查看6道真题和解析