Moka一面(牛客面经很有用,刚看了算法,立刻面了)

---

title: Moka一面

date: 2023-03-06 16:29:23

categories:

- [杂谈,面试]

---

公司: Moka

时间:2023-03-06 下午3点

时长:1hour左右

------------------------------

HR:我们重点考察算法,预计总共一个小时,前半个小时考算法

### 自我介绍

### 算法题

**写一个函数format,传入一个javascript object,输出格式化后的string,为了简化,我们规定object里只有number、string、array、object四种类型, 且传入合法。**

(本题需用原生方法实现,不能用**JSON.stringify**方法)

const object = {
  a: 1,
  b: [
    2,
    3,
    {
      c: 4
    }
  ],
  d: {
    e: 5,
    f: {
      g: '6'
    }
  }
}
/* 将在屏幕上打印:*/
// '{
//   "a": 1,
//   "b": [
//     2,
//     3,
//     {          // <-- 这个{前的空格数是4 
//       "c": 4 
//     } 
//   ], 
//   "d": {       // <-- 这个属性"d"前的空格数是2 
//     "e": 5, 
//     "f": { 
//       "g": "6"
//     } 
//   } 
// }'

//实现
function format(obj) {
  // TODO
  let type = typeof obj
  if(type !== 'object' || type === null) {
      if(/string|funcntion|undefined/.test(type)) {
          obj = '"' + obj + '"'
      }
      return String(obj)
  } else {
      let json = []
      let arr = (obj && obj.constructor == Array)
      for(let k in obj) {
          let v = obj[k]
          if(/string|funcntion|undefined/.test(type)) {
              v = '"' + v + '"'
          } else if(type == 'object') {
              v = format(v)
          }
          json.push((arr ? "" : '"' +  k + '":') + String(v))
      }
      return (arr ? '[\n' : '{\n') + String(json) + (arr ? ' \n  ]' : '\n  }')
  }
};

- 讲一讲整个题的一个思路?

- 用的for in这个循环,怎么处理输出的逗号问题?

- 是不是没有用到Object.keys这个方法,这个方法可以判断最后一个元素?

- 我看到你有视图去写一个\t去实现一个缩进,又把它删了,为什么,你怎么处理这个缩进这个场景?

//面试后的代码改进
function format(obj, floor = 0) {
    // TODO
    let type = typeof obj
    if(type !== 'object' || type === null) {
        if(/string|funcntion|undefined/.test(type)) {
            obj = '"' + obj + '"'
        }
        return String(obj)
    } else {
        let json = []
        let arr = (obj && obj.constructor == Array)

        //层级判断
        let blank = ''
        for(let i = 0; i < floor; i++) {
            blank += '  '
        }

        for(let k in obj) {
            let v = obj[k]
            if(/string|funcntion|undefined/.test(type)) {
                v = '"' + v + '"'
            } else if(type == 'object') {
                v = format(v, floor + 1)
            }
            json.push(`\n${blank + '  '}` + (arr ? "" : '"' +  k + '": ') + String(v))
        }       
        
        return (arr ? '[' : '{') + String(json) + (arr ? `\n${blank}]` : `\n${blank}}`)
    }
  };

#### 工作在北京没有问题吧?

#### 讲一下你哪一个项目做起来感受最多一些?

#### 你的低代码项目有哪些应用的场景可以说一下嘛?

#### 表单里面有复杂一点的功能吗?举个例子,比如说多个selected级联,额外接口的的fetch,输入后可以关联字段,有类似这种吗?

#### 组件拖拽中,拖拽后插入有一个预状态,怎么实现的?

#### 反问

(直接说她对我的反馈是一面过了)

全部评论
大佬
2 回复 分享
发布于 2023-03-06 22:17 四川
收到,后天面
1 回复 分享
发布于 2023-03-06 21:20 湖南
这道题写出来我感觉挺强的,我没写出来
1 回复 分享
发布于 2023-03-07 20:17 安徽
兄弟过了吗?
点赞 回复 分享
发布于 2023-03-07 20:16 安徽

相关推荐

HTTP请求方法GET和POST是两种常见的请求方法,它们在使用方式和作用上有一些区别。GET请求:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&amp;uuid=02b1742be4564f04b7e1bdf3b39333d7GET方法用于从服务器获取资源,通常用于请求获取页面、图片、文档等内容。GET请求的参数会附加在URL的查询字符串中,并以键值对的形式传递,例如:http://example.com/resource?key1=value1&amp;key2=value2。GET请求具有幂等性,即多次发送相同的GET请求,不应对服务器产生副作用,只是获取相同的响应。GET请求参数的长度有限制,不适合传递大量数据。POST请求:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&amp;uuid=02b1742be4564f04b7e1bdf3b39333d7POST方法用于向服务器提交数据,通常用于提交表单、上传文件等操作。POST请求的参数会包含在请求体中,并以键值对的形式传递。参数不会直接暴露在URL中,因此相对于GET方法更安全。POST请求可以传递大量数据,没有像GET方法的参数长度限制。POST请求不具有幂等性,即多次发送相同的POST请求,可能对服务器产生副作用,例如重复提交订单。总结:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&amp;uuid=02b1742be4564f04b7e1bdf3b39333d7GET方法用于获取资源,参数附加在URL中,通常用于无副作用的读取操作。POST方法用于提交数据,参数包含在请求体中,通常用于有副作用的写入操作。GET方法适合获取少量数据,POST方法适合传递大量数据。GET请求可以被缓存和收藏,POST请求一般不会被缓存。需要根据具体的场景和需求选择适合的请求方法。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
2 6 评论
分享
牛客网
牛客企业服务