2026晓多科技一面---转正实习

11 天前(已编辑)
10

2026晓多科技一面---转正实习

1. 自我介绍

2. 项目中遇到的难点和解决办法

3. react 中的 useEffect经典闭包场景

import { useState, useEffect } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  // 点击按钮触发的函数
  const handleClick = () => {
    setCount(1); // 先把count设为1
    
    // 3秒后尝试修改count
    setTimeout(() => {
      console.log('定时器里的count值:', count); // 关键:输出的是多少?
      setCount(count + 1); // 期望count变成2,实际会变成多少?
    }, 3000);
  };

  return (
    <div>
      <p>当前计数:{count}</p>
      <button onClick={handleClick}>点击修改计数</button>
    </div>
  );
}

export default Counter;

问 counter点击之后有什么变化

4. 同步代码、微任务、宏任务的执行顺序

async function async1() {
  console.log('async1 start')
  await async2()
  console.log('async1 end')
}

async function async2() {
  console.log('async2')
}

console.log('script start')

setTimeout(() => {
  console.log('setTimeout')
}, 0)

async1()

new Promise(resolve => {
  console.log('Promise1')
  resolve()
}).then(() => {
  console.log('Promise2')
})

console.log('script end')

回头看很简单,之前没做过这类题目,没做出来!

5. 项目中遇到性能优化问题没,是什么解决的,有什么常用方法?

6. react中的 usecallback、memo、useMemo

7. 为什么项目中使用 fetch sse流而不是 EventSource?

8. 在sse流的流式输出时候,你是如何解决输出抖动问题的?

9. ai-chat项目中有没有用到虚拟列表,它和普通列表相比,难点在哪?

10. 如何实现在流式中,视口自动下拉?

11. 如果在流式中,视口自动下拉,但是用户想上拉视口怎么解决?。此问题有完全总结答案https://lingwang.ink/posts/project/scrollup

12. 讲一下原型链和作用域链 (作用域链没说出来!)

13. 讲一下闭包

14. 手撕算法 lodash库中的flattenObject方法 (没解出来)

输入:
const obj = {
  a: {
    b: {
      c: {
        d: "value"
      },
      e: "e-value"
    },
    f: "f-value"
  },
  g: "g-value"
};

要求输出:
{
  "a.b.c.d": "value",
  "a.b.e": "e-value",
  "a.f": "f-value",
  "g": "g-value"
}


/**
 * 扁平化嵌套对象,将嵌套路径转换为点连接的键
 * @param {Object} target - 要扁平化的目标对象
 * @param {string} [prefix=''] - 递归时的路径前缀
 * @param {Object} [result={}] - 存储结果的对象
 * @returns {Object} 扁平化后的对象
 */
function flattenObject(target, prefix = '', result = {}) {
  // 遍历对象的每个键
  for (const key in target) {
    // 确保是对象自身的属性(排除原型链属性)
    if (target.hasOwnProperty(key)) {
      // 拼接当前路径:前缀 + 点(如果有前缀) + 当前键
      const currentKey = prefix ? `${prefix}.${key}` : key;
      const value = target[key];
      
      // 判断当前值是否是对象且不是 null(null 的 typeof 也是 object)
      if (typeof value === 'object' && value !== null) {
        // 递归处理嵌套对象
        flattenObject(value, currentKey, result);
      } else {
        // 非对象类型,直接存入结果
        result[currentKey] = value;
      }
    }
  }
  return result;
}

// 执行扁平化并打印结果
const flattenedObj = flattenObject(obj);
console.log(JSON.stringify(flattenedObj, null, 2));

15. 因为 算法没做出来,面试官换了个简单的防抖hook,因为太紧张,防抖写错了,严重拉低预期

总结

本次面试一共持续 1 小时 3 分钟,面试官给出建议:“项目经验比较丰富,但是基础薄弱”,预期挂。自我评估:最近忙于项目和ai-coding,代码写的变少了,导致算法题和简单的utils工具方法都无从下手,头重脚轻。

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...