返回
大厂面试真题,让你应试如鱼得水!
前端
2024-02-26 02:46:00
在求职季如火如荼之际,准备一份强大的面试攻略至关重要。特别是对于技术人才而言,面试中的算法和数据结构题目往往是求职路上的拦路虎。本文整理了来自各大知名公司的十余道面试真题,附带答案解析,助力你轻松应对此类棘手问题。
1. 异步编程方式
问题:
JavaScript 中有哪些常见的异步编程方式?
答案:
- 回调函数
- Promise
- async/await
2. 回调函数陷阱
问题:
回调函数在异步编程中的优点和缺点。
答案:
优点:
- 易于编写和理解
- 部署简单
缺点:
- 不利于代码可读性和维护性
- 各个部分之间的耦合度高
3. Promise 链式调用
问题:
解释 Promise 的链式调用机制。
答案:
Promise 提供了一个.then()
方法,允许你将多个异步操作串联起来。每个 .then()
方法都返回一个新的 Promise,其值是前一个 Promise 执行结果。
4. async/await 语法
问题:
async/await 语法如何简化异步编程。
答案:
async/await 语法允许你编写异步代码,就像编写同步代码一样。它会自动处理 Promise,让你可以使用 await
暂停执行,直到异步操作完成。
5. 事件循环与事件队列
问题:
解释事件循环和事件队列在 JavaScript 异步编程中的作用。
答案:
事件循环: 不断检查事件队列,当有事件发生时,就将其从队列中取出并执行。
事件队列: 存储等待执行的事件。
6. 斐波那契数列
问题:
编写一个函数来计算斐波那契数列的第 n 项。
答案:
function fibonacci(n) {
if (n === 0 || n === 1) {
return n;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
7. 二叉树遍历
问题:
实现二叉树的前序、中序和后序遍历算法。
答案:
前序遍历:
function preOrder(node) {
if (node === null) {
return;
}
console.log(node.val);
preOrder(node.left);
preOrder(node.right);
}
中序遍历:
function inOrder(node) {
if (node === null) {
return;
}
inOrder(node.left);
console.log(node.val);
inOrder(node.right);
}
后序遍历:
function postOrder(node) {
if (node === null) {
return;
}
postOrder(node.left);
postOrder(node.right);
console.log(node.val);
}