LeetCode公司社招前端一面

227 阅读2分钟

大家好,我这次又来了,这次说的公司是LeetCode,就是提供LeetCode平台的那个公司。

公司因为是提供算法平台,所以面试主要都是跟算法相关的题目。

上来先进行了自我介绍之后,也没有问其他的问题,然后就开始了两道题目。

第一道:#字棋

题目的意思就是给你一个n * n的棋盘,两个人分别下棋,每个人下一步,谁先连成一条线,也就是横着一条线或者纵着一条线,再或者最长的对角线,不管是主方向也好,或者反方向也好,这个玩家就赢了。

里面有一个next函数,大概长下面这个样子,

next(x: number, y: number, type: number),里面的参数就是x和y是你的落子的横轴和纵轴,type代表哪个用户下的子。

让你完成这道题目。

我是先完成了题目,面试官让我优化,说时间复杂度和空间复杂度,能不能降下来,我已开始没有想出来,面试官给了提示,想出来了。

第二道:异步编程的实现,语言是TypeScript

题目是这样子,实现一个并发处理promise的控制函数,返回值顺序与入参fns保持一致

 Tips1:不要修改任何题干中的类型定义,解答过程中和结果均要保证结果正确 且 类型正确 Tips2:你可以在顶级作用域,定义额外的变量,函数 

Tips3:你可以使用JavaScript提供的标准特和API,无需考虑兼容性,但不能引用第三方库  Tips4:请考虑工程化和代码维护性,不仅仅是把功能实现 

 Tips5:你无需考虑异常情况,入参已经严格按照类型约束传入 

 Tips6:所有用例不会产生异常,只需考虑成功情况

然后给了这个类型定义:

 

以及要实现哪些内容

/**

*

* @param options {Options} 选项

* @param options.fns {Options.fns} 所有待处理的异步函数

* @param options.mode {Options.mode} 处理模式

* 1 并行执行

* 2 串行执行

* 3 按照每{size}个请求为一组,每一组并发,组之间串行

* 4 并行执行并限制最大并发请求数为{size}

* @param [options.size] {Options.size} mode为3,4时的size参数

*/

下面就是一个function,你需要去实现。

export function processConcurrent<T>(options: Options<T>): Promise<T[]> { 

// TODO: 你的实现}