【秋招求职之路】「快手-效率工程」面试复盘总结

小狮子前端

共 5745字,需浏览 12分钟

 · 2021-06-15

往期面试复盘推荐


快手-效率工程面经

介绍

8月25日(周二)投递,在9月8日上午收到 HR 电话,告知简历通过了,约9月10日上午11点面试,整个面试时间1个小时左右。

一面

面经

1、自我介绍

2、你刚刚提到了项目中防抖 debounce ,你知道实现原理是什么吗?说一说

这个问题是项目中用到过,然后自我介绍提了一下,就说了一下原理,面试官居然不要我手撕...

3、你家乡在哪?面试岗位在北京,有没有城市要求吗?

回答:反正在湖南,去哪都是很远...

4、实现一个函数,以字符串形式(要求字母小写)返回参数类型

// null => 'null' undefined=>'undefined'
function getArgType(arg){
}

实现:

/* 编程题:以字符串形式返回参数类型  */

function getArgType(arg){
  let str = Object.prototype.toString.call(arg).slice(8,-1)
  let res = str[0].toLowerCase() + str.substr(1)
  return res
}
console.log(getArgType(null))
console.log(getArgType(undefined))

const a = 1
const b = new Number(1)
console.log(a === b)
console.log(getArgType(a))
console.log(getArgType(b))
console.log(getArgType(new Date(2020,9,10)))
console.log(getArgType(new RegExp(/^\s+|\s$/g)))

后面终点问了 1new Number(1) 有什么区别,这里没答上来。

对象Number、String、Boolean分别对应数字、字符串、布尔值,可以通过这三个对象把原始类型的值变成(包装成)对象

var v1 = new Number(123);
var v2 = new String('abc');
var v3 = new Boolean(true);

typeof v1;// "object"
typeof v2;// "object"
typeof v3;// "object"

v1 === 123// false
v1 == 123// true

但是要注意 new Boolean 的用法,只有当 new Boolean 的参数值为 null 或者 undefined 时,求值转换的原始的值才是 false ,其他情况都是 true

5、给你一个数组 [1,3,2,5] 你有多少种方法,求得最大值,说一说

一下没 get 到面试官的点,我想着除了遍历比较或排序还能怎么做。但后面不断引导后发现可以用各种数组 api ,然后就答了 sortmapreducefor循环shiftpopforEachMath.max(...arr)

后面面试官说了用 apply,没使用过,补充一下:

var arr = [641821123];
console.log(Math.max.apply(null, arr))

6、实现如下效果:当你点击 ul 下面某个 li后(多个 ui),打印对应索引值(可以为 01

<ul><li></li>........</ul>
<ul><li></
li>........</ul>
<ul><li></
li>........</ul>

最终实现如下,一开始我是直接 querySelectorAll所有的 li,但是会给所有 li绑定事件,于是面试官说考虑使用事件代理,然后提示 e.target(当时没写出来,现在补充一下)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>编程题:ul底下li索引值(多个ul)</title>
  </head>
  <body>
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
    </ul>
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
    </ul>
    <script>
      let list = document.getElementsByTagName('ul')
      for (let i = 0; i < list.length; i++) {
        list[i].addEventListener('click', (e) => {
          let target = e.target
          // console.log(target)
          if (target.tagName.toLowerCase() === 'li') {
            let liList = list[i].getElementsByTagName('li')
            // console.log(liList)
            // getElementsByTagName方法获取到的元素列表不是数组,
            // 和函数的arguments一样是一种类数组类型,不可以直接使用数组的方法。
            let idx = Array.prototype.indexOf.call(liList, target)
            /* 或者采用如下方式,将类数组转换成数组,然后使用indexOf方法 */
            // let idx = Array.from(liList).indexOf(target)
            console.log(liList)
            console.log(idx)
          }
        })
      }
    
</script>
  </body>
</html>

7、使用 vue 封装一个组件,实现倒计时的功能

倒计时(一个 button 按钮,有下述三种状态)
(开始-》暂停-》继续)

{count}
按钮

参考:vue封装倒计时组件

8、你还有什么想问我的吗?

感受

问了部门是效率工程,然后主要业务是做公司内部系统,比如各种流程处理,请假那些,然后还提到了公司封装内部聊天工具,类似于企业微信那种。然后还问了技术栈,主要用 React + Ts ,然后面试官说了技术栈都不是太大问题,主要还是 js 能力

最后,问了一下多久会有面试结果,面试官说一天之内给结果。

后续

依旧是一面之后就没有任何消息,结束了...

小狮子有话说

我是小狮子团队的【一百个Chocolate】,全网同名,周更的前端博主,分享一些前端技术干货与程序员生活日常,欢迎各位小伙伴的持续关注,一起变优秀~



学如逆水行舟,不进则退

你若喜欢,为小狮子点个【在看】哦~

浏览 60
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报