大家好,我这次又来了,这次说的公司是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: 你的实现}