反问:
笔试:
题目一:数组打平
// [1, 2, [3, 4, [5, 6]]] => [1, 2, 3, 4, 5, 6] function flattrn(arr) { return arr.reduce((curr, next) => { return Array.isArray(next) ? [...curr, ...flatten(next)] : [...curr, next]; }, []); }
题目二:设计存储页面/组件内数据和方法的 JSON 格式,并从 JSON 格式转为页面代码,微信小程序 + React 两种格式(感觉是讲项目的时候面试官没太听懂,现场实现下)
题目三:简单的发布-订阅模式
class EventEmitter { events = {}; emit(type, ...args) { const listeners = this.events[type] || []; for (const listener of listeners) { listener(...args); } } on(type, listener) { this.events[type] = this.events[type] || []; this.events[type].push(listener); } }
Callback:
最初约的 4 月 18 晚上七点面,鸽了一晚上,19 上午打电话道歉 + 约中午 12 点面,又迟到十五分钟
题目一:实现increase
函数
function increase() { let a = 1; const obj = { valueOf: function () { return a++; }, }; return obj; } const a = increase(); const res = a == 1 && a == 2 && a == 3; console.log(res); // true
题目二:判断循环依赖
// isCylic(window) => true // const o = {}, o.o = o; // isCylic(o) => true // isCylic({}) => false const isCylic = (o, set = new WeakSet()) => { let isCyled = false; if (typeof o === "object" && o !== null) { if (set.has(o)) { return true; } set.add(o); for (const key in o) { if (isCylic(o[key], set)) { isCyled = true; break; } } } return isCyled; };
问了下用 WeakSet 的原因,能否用 Set、数组实现
反问:
反问:
hr通知五月中上旬全部面完后给feedback
#面经##阿里巴巴##阿里云##2025届暑期#