Skip to content

华为机试JS避坑速记清单

核心用途:考前10分钟快速翻看,规避90%高频丢分点,直接对标机试场景

一、 输入输出必避坑(占丢分50%)

坑点类型错误写法正确写法避坑口诀
多组输入未写终止条件rl.on('line', line => {console.log(+a+ +b)})rl.on('line', line => {<br> let [a,b] = line.split(' ').map(Number)<br> if(a===0&&b===0) {rl.close();return}<br> console.log(a+b)<br>})多组输入先判停,停了立刻关接口
不定长输入用split(' ')line.split(' ').map(Number)line.trim().split(/\s+/).filter(Boolean).map(Number)任意空格用\s+,过滤空串防干扰
字符串转数字隐式转换const a = +lineconst a = parseInt(line) / Number(line)显式转换不偷懒,避免''0
单行输入用on('line')rl.on('line', line => {处理逻辑})rl.question('', line => {处理逻辑;rl.close()})单行用question,多行用line

二、 算法逻辑必避坑(占丢分30%)

坑点类型错误原因解决方案适用场景
二分查找死循环循环条件left < right、更新right=mid循环条件left <= right
更新left=mid+1/right=mid-1
有序数组查找目标
两数之和超时双重循环O(n²)Map存已遍历值和索引,O(n)复杂度找两数索引和为目标
反转整数溢出未判断32位范围循环中提前判断:
res > Math.floor(max/10) → 直接返回0
整数反转、字符串转整数
DFS重复访问未标记已访问节点网格问题:访问后设为'0';树问题:传参避免全局变量岛屿数量、迷宫问题
动态规划空间浪费用数组存全部状态滚动变量优化(如爬楼梯用两个变量代替数组)线性DP(爬楼梯、最大子数组和)

三、 字符串/数组必避坑(占丢分20%)

坑点类型错误操作正确操作避坑提醒
数组去重效率低arr.filter((v,i)=>arr.indexOf(v)===i)[...new Set(arr)]大数据量优先用Set
字符串截取越界str.substr(start, len)(参数易混)str.slice(start, end)slice参数是起止索引,更直观
数组排序失效arr.sort()(字典序排序)arr.sort((a,b)=>a-b)(数字升序)数字排序必须传比较函数
空数组Math.max报错Math.max(arr)arr.length ? Math.max(...arr) : 0先判断数组是否为空

四、 考场应急避坑指南

  1. 代码提交前必查3点

    • 输入是否trim()?是否处理了空输入?

    • 数字是否显式转换?是否有溢出判断?

    • 多组输入是否有终止条件?是否调用rl.close()

  2. 超时急救方案

    • Array.indexOf()换成Map.has()

    • 把嵌套循环拆成单循环+哈希表

    • 递归改迭代(避免栈溢出)

  3. 格式错误急救方案

    • 输出是否严格匹配(空格/换行)?

    • 数组输出是否用join(','),而非直接打印数组?

    • 布尔值输出是否是true/false,而非1/0

需要我帮你把这份清单整理成可打印的PDF版,方便你考前随身携带吗?

(注:文档部分内容可能由 AI 生成)

最近更新