体验良好的Moka一面(可能是凉经)

#软件开发2023笔面经#

Moka 经典流程

面试官介绍面试流程: 如果感觉某一个环境不OK, 他们就会终止面试。

  • 自我介绍
  • 算法题
  • 面试官提问
  • 是否有问题问面试官

幸好,从头到尾的面完了,没有被终止面试,┭┮﹏┭┮。

先夸夸面试官

感觉很温柔,给我的感觉很舒服。

自我介绍

常规的自我介绍

算法题

// 通过调用下面的 addRemote,实现 add 方法
// addRemote 仅能计算两个数字之和
// add 可以传入任意多个数字,返回的是这些数字之和

const addRemote = async (a, b) =>
  new Promise((resolve) => {
    setTimeout(() => resolve(a + b), 1000);
  });

async function add(...inputs) {
  // 你的实现
}

// 请用示例验证运行结果:
add(1, 2).then((result) => {
  console.log(result); // 3
});

add(3, 5, 2).then((result) => {
  console.log(result); // 10
});

我给出的解决方案

// 通过调用下面的 addRemote,实现 add 方法
// addRemote 仅能计算两个数字之和
// add 可以传入任意多个数字,返回的是这些数字之和

const addRemote = async (a, b) =>
  new Promise((resolve) => {
    setTimeout(() => resolve(a + b), 1000);
  });

async function add(...inputs) {
  // 你的实现
  // 1. 参数大于两个,需要将上一次的结果做一个返回,当做一个参数,传入其中。 ==》 递归??
  let len = inputs.length;
  let result = 0;
  result = await addRemote(inputs[0] || 0, inputs[1] || 0);
  // 解决下面的
  for (let i = 2; i < len; i++) {
    let data = await addRemote(result, inputs[i]);
    result = data;
  }
  return result;
}

// 请用示例验证运行结果:
add(1, 2).then((result) => {
  console.log(result); // 3
});

add(3, 5, 2).then((result) => {
  console.log(result); // 10
});

自我总结,做的不是很好,中间卡了一下,没有看到add函数也是一个async, 有一点紧张了。

优化方案:提出二分,将数据分为两大块,然后让两大块进行分别进行addRemote, 然后再addRemote.

面试官提问

这方面可能记得不是很清了, 下面的题不分顺序。

  1. 你了解闭包吗?日常开发中主要用闭包来干什么?

    回答: 了解,日常开发中,经常用来搞私有变量。

    追问:有没有在其他的地方使用过它?

    回答:暂时想不起来,只是了解过在Vue的响应式原理中有用到过。

  2. 你知道作用域吗,能讲一下吗?

    当时就有点懵,不知道怎么给面试官说这个东西。

    说js是静态作用域。。。(虽然没错,但是好别扭)(没有看这方面的面试题)就看了原理。。。

    就导致有点憨,不知道怎么说,脑子一片空白。

    然后就开始讲变量对象OA,还有预编译。。。还有作用域链。(我真的是好蠢,抱歉面试官)

  3. 你知道typeof 和 instanceof吗

    回答,知道,用来判断类型 ,其中typeof可以用来判断Number,String,undefined,boolean但是在判断Array, Object, null的时候,都会被判断为Object.

    instanceof也可以用来判断类型, 但是当时有点瓦特,没想起来这个。就说不会了

    补一下:

    instanceof可以正确的判断对象的类型,其内部运行机制是判断在其原型链中能否找到该类型的原型

    instanceof只能正确判断引用数据类型,而不能判断基本数据类型。

    instanceof运算符可以用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性。

  4. 你知道正常函数和箭头函数的区别吗

    回答: 知道,主要是在this指向 (其实答得有点简陋)。然后箭头函数更好看(哈哈)。

    追问: 那你知道他们this指向有什么区别吗

    回答: 正常函数指向调用它的那个对象,而箭头函数则会指向它的父级的this.举例说明。

    追问: 如何让普通函数也实现箭头函数这个效果,当时有点懵,最后确认了一下是要问 this强制绑定。

    回答: 使用this强制绑定,apply, call, bind;并解释了三个函数的用法。

    补充:

    MDN: 箭头函数表达式语法比函数表达式更简洁, 并且没有自己的this, arguments.super或 new.target,也不能作为构造函数。

    (感觉应该这样说,可能下一个就会问原型链(┭┮﹏┭┮, 这个我熟啊))

    this,指向上面说了。普通函数默认指向window, 严格模式指向undefined

    箭头函数因为本身没有 prototype 属性,所以无法连接它的实例的原型链,所以箭头函数就无法作为构造函数。

    arguments对象, 如果箭头函数想要拿到不限量参数,那么就需要通过剩余参数语法来实现

  5. 你知道http缓存吗?

    回答: 不知道.

    https://juejin.cn/post/6944333740755648520 接下来去学一下

  6. http缓存会每次都请求新的文件吗?

    因为之前后端有写过一个强缓存,所以老是导致更新不了的情况,所以回答不会。

  7. 你知道同源策略吗?

    回答: 知道,讲了一下来源,讲了一下什么情况会导致触发同源策略,造成跨域。

    追问: 那你知道怎么解决跨域吗?

    回答: 讲了一下 jsonp跨域,webpack-dev-serve代理跨域, nginx反向代理跨域。

  8. 你知道常用的网络状态码吗?

    回答: 大致说了一下2xx, 3xx,4xx, 5xx.

    感觉可能说的有点简陋了.

    补充一下吧:

    状态码 类别 描述
    1xx informational 接受请求正在处理
    2xx Success 请求正常处理完毕
    3xx Redirection 需要附加操作已完成请求
    4xx Client Error 服务器无法处理请求
    5xx Server Error 服务器处理请求出错

    常用的状态码

    状态码 状态码英文名称 中文描述
    200 OK 请求成功。一般用于GET与POST请求
    204 No Content 服务器请求成功,但未返回内容
    206 Partial Content 是对资源某一部分的请求
    301 Moved Permanently 永久性重定向
    302 Found 临时重定向
    303 See Other 查看其它地址
    304 Not Modified 未修改
    307 Temprorary Redirect 临时重定向
    400 Bad Request 客户端请求报文中存在语法错误,服务器无法理解
    401 Unauthorized 请求要求用户的身份认证
    402 Payment Required 保留,将来使用
    403 Forbidden 服务器拒绝执行此请求
    404 Not Found 服务器无法找到资源
    500 Internal Server Error 服务器内部出现异常,无法完成请求
    501 Not Implemented 服务器不支持请求的功能,无法完成请求
    503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求
  9. 说一下你知道的请求方式

    回答: post, get, put, delete然后就想不起来了,因为其他的实在是基本不用。

    还有: HEAD, CONNECT, OPTIONS,TRACE,PATCH.

  10. 说一下Vue的数据传递。

    回答: 数据是单向传递的,如果子组件要向父组件传值,就需要用$emit来派发事件,来激发父组件上的事件,通过函数参数传值的形式传递。

  11. 说一下Vue的响应式原理。

    回答: defineProperty进行数据劫持, 用订阅发布的形式进行页面的更新。

    回答的不是很好,想给面试官将从数据绑定一层层推过去的,高估了我自己对源码的掌握。。。

    追问, 我手动去更新数组中的一个元素,会不会导致更新?

    回答: 不会,因为在看源码的过程中,知道这个颗粒化没有细致到这个程度。

  12. 说一下事件循环吧。

    这个东西我倒是知道,但是感觉可能回答也不是很好吧,不是很官方的那种八股.

    回答: 因为js是单线程的,所以当有一些耗时高的事件在执行的时候,会导致HTML的渲染中止, 所以就需要将一些耗时高的操作,异步执行,放在Web API 执行栈中去执行,当同步代码执行完的时候,就会去看事件循环队列中是否有排队等待需要执行的事件。事件又分为宏任务和微任务。比如定时器就是宏任务,Promise就是微任务, 当时想多举几个例子,但是有点懵。

    追问: 有没有了解过, Node.js 的事件循环.

    回答:没有。

  13. 有没有用过Webpack进行一些工程化的构建

    回答: 自己在学完 Webpack 之后,自己搭建过一个小的多页面入口的架子。

    追问: 用了那些 Loader, plugin.

    回答: loader: css 处理的,less处理的,然后其他的想不起来了。。。其实还有图片处理的一个,还有js兼容处理的一个(当时感觉还是有些紧张)

    plugin: 处理css的一个, HtmlWebpackPlugin ==》 根据 html 模板 生成index.html模板的。

  14. Css 中那些属性是可以继承的

    当时面试前看见过这个面试题, 但是没细看。

    回答: font,color

    补充:

    1. 字体系列属性

      • font-family: 字体系列
      • font-weight: 字体粗细
      • 等等
    2. 文本系列属性

      • text-indent: 文本缩进
      • text-align: 文本水平对齐
      • line-height: 行高
      • word-spacing: 单词之间的间距
      • letter-spacing: 中文或者字母之间的间距
      • text-transfrom: 控制文本大小写
      • color: 文本颜色
    3. 元素可见性

      • visibility: 控制元素显示隐藏
    4. 列表布局属性

      • list-style: 列表风格
    5. 光标属性

      • cursor:光标显示为何种形态
  15. 是否对新的前端技术有了解?

  16. 你说你是自学前端,你是怎么对前端感兴趣的?

是否有问题问面试官

  1. 是否有人带

    回答: 有

  2. 技术栈是什么?

    react

  3. 面试评价

    回答: 整个人沟通起来很舒服,但是感觉基础方面还需要巩固(说的太对了)。

  4. 然后和面试官聊了一下我现在尴尬的境地,也给了我很多建议。

总结

很舒服的一次面试体验, 面试官是个帅气的长发美男,很温柔。感谢面试官。

#23届找工作求助阵地##我的求职思考##在找工作求抱抱#
全部评论
找实习,求面试
点赞
送花
回复
分享
发布于 2023-03-03 22:08 天津
大佬,我被Moka提前终止面试了
点赞
送花
回复
分享
发布于 2023-03-03 23:31 四川
滴滴
校招火热招聘中
官网直投
写的很详细
点赞
送花
回复
分享
发布于 2023-03-05 12:32 四川
可以试试我们呀
点赞
送花
回复
分享
发布于 2023-03-06 14:22 福建
😝算法题我的方案: async function add(...inputs) { // 你的实现 return inputs.reduce( async (acc,cur) => { return await acc + cur }) }
点赞
送花
回复
分享
发布于 01-10 02:13 广西

相关推荐

9 16 评论
分享
牛客网
牛客企业服务