diff --git a/blogs/interview/coding.md b/blogs/interview/coding.md index cdc74261..17a37dda 100644 --- a/blogs/interview/coding.md +++ b/blogs/interview/coding.md @@ -7,14 +7,17 @@ ```js function concurrentRequests(urls, limit) { return new Promise((resolve, reject) => { - const results = new Array(urls.length) + const results = Array(urls.length).fill() let completedCount = 0 let index = 0 + let fetchingCount = 0 function processNext() { - if (index >= urls.length) return - + if (index >= urls.length || fetchingCount >= limit) { + return + } const currentIndex = index++ + fetchingCount++ window .fetch(urls[currentIndex]) .then((response) => response.json()) @@ -22,10 +25,11 @@ function concurrentRequests(urls, limit) { results[currentIndex] = data }) .catch((error) => { - results[currentIndex] = { error: error.message } + results[currentIndex] = { error } }) .finally(() => { completedCount++ + fetchingCount-- if (completedCount === urls.length) { resolve(results) } else { @@ -70,3 +74,62 @@ function flatArray(array, depth = 1) { ``` ::: + +3. [最长有效括号的长度](https://leetcode.cn/problems/longest-valid-parentheses/description/) + +给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 + +::: detail result + +```js +var longestValidParentheses = function (s) { + const stack = [-1] // 存储当前有效括号上一个位置的下标 + let i = 0 + let maxLen = 0 + while (i < s.length) { + // 遇到合法的括号就弹出,同时计算最长长度 + if (s[i] === ')' && s[stack.at(-1)] === '(') { + stack.pop() + // 此时stack最顶部的位置表示该位置之后都是合法的 + maxLen = Math.max(maxLen, i - stack.at(-1)) + } else { + stack.push(i) + } + i++ + } + return maxLen +} +``` + +::: + +4. 将一维数组转换为树形结构的数据 + +::: detail result + +```js +function arrayToTree(data) { + const idMap = new Map() + const root = [] + + // 创建 id 到节点的映射 + for (const item of data) { + idMap.set(item.id, { ...item, children: [] }) + } + + // 构建树形结构 + for (const item of data) { + const node = idMap.get(item.id) + if (item.parentId === '') { + root.push(node) + } else { + const parent = idMap.get(item.parentId) + parent.children.push(node) + } + } + + return root +} +``` + +::: diff --git a/blogs/interview/test.md b/blogs/interview/test.md index 43262b8b..01714ce7 100644 --- a/blogs/interview/test.md +++ b/blogs/interview/test.md @@ -184,6 +184,8 @@ function advancedRequest(url, timeout, errorRetry) { ::: +6. 说一下JavaScript中能使代码运行阻塞的一些情况吗 + ## http 1. 当前网站 A 向第三方网站 C(可信但是不同域名)请求一个接口并且希望带上二者的 cookie,请问需要满足什么条件或者做什么设置? @@ -234,7 +236,6 @@ function advancedRequest(url, timeout, errorRetry) { ## 算法 1. 判断一个二叉树是否是另一个二叉树的**子结构** [leetcode](https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/) - 2. 使用递归和迭代两种方式反转一个链表 [leetcode](https://leetcode-cn.com/problems/reverse-linked-list/) 3. 有一个数组,从其中找到两个数的最大差值(要求这两个数递增),返回对应的差值 4. 使用两种方法实现 N 叉树的层次遍历 [leetcode](https://leetcode.cn/problems/n-ary-tree-level-order-traversal/)