前言
渣本3 英语专业 面了2个中厂后(薪资谈不拢) 然后投了 蚂蚁
第二天 收到了一个邮件,来自于蚂蚁的在线笔 --- 探花平台操作 没有代码提示
今天回忆下面试题,希望能帮助到大家
输出打印顺序
这题也没什么难度 关键就 1个 好吧我就记住关键点那个位置的原题了 哈;
有个郁闷的点是 不知道输出顺序/答案写在哪里(晕死 当时找了半天然后 写在题目最后注释处)
最后的答案是 y o u r i g h t 面试官 这个心机boy -.-
setTimeout(() => {
// 此处忘记啥代码了
}, 0);
setTimeout(() => {
// 此处忘记啥代码了
}, 0);
function fn() {
return new Promise(resolve => {
console.log('y')
resolve('u')
})
}
async function func() {
const p = await fn()
// 关键点 1: 下面的打印书序 是 先 u 后 r
Promise.resolve('r').then(res => {
console.log(res)
})
console.log(p) //
}
func()
console.log('o')
双向绑定
- 要求:
- 页面中有个 input 标签,id为example;
- 有个对象test,test.value 与input标签 双向绑定 即 input输入框内容变化,test.value随同变化; test.value变化 input框随同变化 控制台输出变化值
这题不知道考察意图 就按要求实现了 不知道对不对
自己的实现如下 ↓
<html lang="en">
<head>
</head>
<body>
<input id="example" />
<script>
var dom = document.getElementById('example')
const test = {
_value: undefined,
get value() {
return this._value
},
set value(val) {
this._value = val
console.log(val)
dom.value = val
}
}
dom.oninput = function (ev) {
const { value } = ev.target
test.value = value
}
</script>
</body>
</html>
实现一个 Promise.all 增强版
- 要求:
- 入参 tasks: any[], runner:(task) => Promise, limit: number
- 最大同时执行任务数为limit个
- 题目就写了 (一个函数 入参的要求如1 返回参数 return ...) 个人假设返回参数和普通Promise.all一样
说实话 个人Promise的实例方法和静态方法源码都写的很熟了 看到这个 题目要求时候 还是有些蒙的,因为也不知道怎么用,当时想了一段时间有2种思路
- 将任务tasks 分成limit长度若干数组 分批使用 all 然后 结果 在 flat一下
- 任务完成一个 重新启用一个任务 递归调用 直到 rejected 任务出现 或 tasks任务均已经执行过了(索引越界)
自己的实现如下 ↓
function all(tasks, runner, limit) {
return new Promise((resolve, reject) => {
let isFailed = false // 是否已经 存在 rejected 任务
const result = []
const len = tasks.length
let n = 0 // fulfilled 个数
let index = 0 // 任务索引
while(limit --) { // 执行上线个数的 任务
fn()
}
function fn() {
if (isFailed) return // 存在 rejected 任务
if (index >= len) return // 任务队列 索引越界
const p = runner(tasks[index])
const i = index // 重新锁定 闭包变量
p.then(res => {
result[i] = res // 此处直接 使用 index 是最外层的index 所以 需要重新在外层定义变量锁定闭包
n++
if (len === n) {
resolve(result)
} else {
fn()
}
}, err => {
isFailed = true
reject(err)
})
index++
}
})
}
Promise.all = all;
实现 ls -l /usr/xxx/dir
- 要求:
- 获取参数及路径 后 打印出显示内容
- 显示内容 包括 文件名称 大小 修改时间
- 排序顺序 先 文件夹后文件
这个题目 nodeApi 不熟 最后放弃了 (放弃了不妨在备注里 调侃下 面试官哈。。)
总结
这是小的的 第一篇文章,不知道写出来效果如何 哈~~
希望小伙伴们支持下,后续也好有动力继续更新 谢谢啦·~~
下面是 本人的微信号 webxiaoy 可以一起交流