news 2026/9/1 5:33:23

用友前端秋招笔试考点全解析:从响应式原理到手写Promise

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用友前端秋招笔试考点全解析:从响应式原理到手写Promise

又到了秋招季,不少学弟学妹私信问我:“学长,用友的前端笔试到底考什么?”说实话,用友这两年在校招圈的存在感不低,老牌ToB大厂、上市公司、企业服务赛道头部玩家,技术栈随着云转型越铺越广,尤其适合想扎进企业级应用开发的前端新人。我去年完整走了一遍用友秋招前端岗的流程,从网申、笔试到一面二面都有实际经历,踩了不少坑,也总结出一些规律。今天这篇就专门聊聊当年那场笔试,把考察逻辑、考点分布、手写题套路、备考节奏一次性理清楚,给正在准备或者打算冲一冲用友的同学做个参考。

1. 先搞清楚用友笔试在考什么:整体考察逻辑

1.1 用友的业务盘子决定了它的技术栈

想要吃透一场笔试,不能只看题目本身,得先看这家公司到底在做什么业务。用友的核心产品线是企业管理软件,也就是ERP、财务系统、人力资源系统、供应链系统这一整套企业级应用。这几年用友在力推云转型,BIP、YonSuite这些云产品陆续上线,前端的业务场景从传统的后台管理界面,扩展到了数据分析大屏、低代码平台、流程设计器、协同办公工具等复杂交互领域。

这就决定了用友前端岗对候选人的要求不是“会写页面”就行,而是要有比较扎实的工程化能力。老一代产品用的是Vue 2 + Element UI,新一代云产品开始往Vue 3、TypeScript、微前端架构迁移,甚至有些团队在尝试低代码引擎和可视化搭建。笔试题目虽然不会直接考业务,但考察方向一定会围绕这些技术栈展开,比如Vue响应式原理、组件通信、状态管理、微前端拆分的意义、构建工具的配置逻辑等等。

另外还要注意,用友是典型的ToB公司,ToB产品的特征是业务逻辑复杂、表单密集、权限体系重、数据可视化要求高。所以笔试里出现“如何设计一个复杂表单”“如何实现一个大数据表格的虚拟滚动”“前端如何做权限控制”这类题目,一点都不意外。准备的时候如果只会做C端页面,却在B端场景上一问三不知,笔试这关很容易栽跟头。

1.2 校招笔试的筛选逻辑:不是要满分,是要排名

用友的在线笔试通常是海选性质的,投递人数多、岗位名额有限,笔试的目的不是考察你有多完美,而是通过一套统一的题目快速筛出“基础扎实、能干活、有潜力”的那批人。所以题目难度一定是有梯度的:前面是基础题,区分“有没有准备”;中间是中等题,区分“有没有深度理解”;后面是手写题或者编程题,区分“能不能真动手写代码”。

我参加的那场笔试,整体框架大概是:单选、多选(覆盖计算机基础、网络、JS语言特性、浏览器原理)、简答或填空(CSS布局、Event Loop、Promise相关)、最后两道大题为手写编程题(一道偏算法,一道偏前端手写能力)。不同批次题型可能略有差异,有的批次会有录屏监控,有的批次是纯客观题加一道编程。但核心逻辑不变:先看广度和基础,再看深度和实战。

还有一个容易被忽略的点:笔试成绩不是绝对的,而是相对的。同一批候选人里,只要你的排名靠前就能进面试。所以答题策略上要有取舍,前面客观题尽量别丢分,后面手写题哪怕不能完全AC(Accepted),能写出思路、写出关键代码片段,也有机会进入下一轮。这一点跟LeetCode刷题不太一样,不是一题定生死,而是综合评估。

2. 笔试各模块考点拆解:高频题型与考察重点

2.1 计算机基础与网络:前端躲不开的“内功”

很多前端新人觉得“我背八股文就行了,网络和数据结构不用管”,这在大厂笔试里是行不通的。用友笔试的客观题里,计算机网络和数据结构占了不小比例,尤其是HTTP协议和浏览器相关的内容。

先说网络部分的高频考点。HTTP和HTTPS的区别几乎是必出题,但别只背“HTTPS更安全”这种表面答案,要深入到握手过程:HTTP是明文传输,HTTPS在TCP和HTTP之间加了TLS/SSL层,握手阶段要完成密钥交换和证书验证,具体是几次握手、每次握手交换了什么,这些都得能说清楚。还有HTTP/1.1和HTTP/2.0的区别,队头阻塞问题、多路复用、二进制分帧层这些概念,笔试选择题里经常出现变形题。再有就是常见的HTTP状态码,301、302、304、403、404、500、502、504分别代表什么,尤其是304配合缓存策略的逻辑,几乎年年考。

缓存这块也是重头戏。强缓存和协商缓存的区别、Cache-Control的各个字段(max-age、no-cache、no-store、public、private)、ETag和Last-Modified的优先级,这些是笔试选择题和简答题的常客。我当时的经验是,复习缓存不能只记概念,最好画一条“浏览器从输入URL到页面展示”的流程线,把DNS解析、TCP连接、HTTP请求、缓存命中、资源解析、渲染过程串起来,这样前端性能优化的题也能顺手解决。

数据结构部分,最常见的考点是数组和字符串的操作、栈和队列的应用、二叉树的基础遍历。另外排序算法的时间复杂度对比表最好背熟,快速排序的最坏情况是什么、什么时候退化,稳定的排序算法有哪些,这些选择题爱考。

2.2 前端语言基础:JS是笔试的第一大分仓

用友前端笔试的基础题大头,毫无悬念是JavaScript。这部分的出题风格很典型:概念题+代码输出题+手写题相结合。

概念题里,闭包、作用域链、原型链、this指向、事件循环(Event Loop)、Promise状态机、async/await语法糖,这些是绝对高频。尤其是this指向,笔试题里最爱变着花样考:普通函数调用、对象方法调用、new调用、箭头函数、call/apply/bind显式绑定,每种情况的this值都要能一眼判断出来。我见过一道很经典的题,把setTimeout回调、对象方法、箭头函数组合在一起,让考生写出输出顺序,这种题本质上考的就是“作用域和this”的组合理解。

变量提升也是个老考点。var、let、const的区别,暂时性死区,函数声明和变量声明的提升优先级,这些看起来基础,但一旦和闭包、循环结合,就容易翻车。经典的“for循环中用var声明i,setTimeout打印i”的题目变形,用let换成块级作用域后输出是什么,这个坑每年都有人踩。

原型链这块,笔试不会让你手写一个完整的继承机制,但选择题频繁考instanceof的原理、Object.create的作用、构造函数原型的指向关系。复习的时候可以把“构造函数、原型对象、实例对象”这三者的三角关系画清楚,再配合几个手写继承的例子练一练,基本就稳了。

2.3 框架与工程化:围绕Vue展开是默认选项

用友是Vue的深度用户,笔试里Vue的题目比重明显高于React。这其实是很多同学的优势,因为Vue的上手门槛低,但笔试考的不是“会用”,而是“懂原理”。

Vue 2和Vue 3的生命周期对比是高频题,而且出题角度很刁钻,不直接问“created是干什么的”,而是问“在created阶段能不能访问DOM”“mounted和created之间发生了什么”“Vue 3的setup里对应Vue 2的哪个生命周期”。如果只是背了生命周期表格,没有理解每个阶段的真实场景,这种题容易懵。

响应式原理更是重点中的重点。Vue 2的Object.defineProperty和Vue 3的Proxy有什么区别,为什么Vue 3要改造成Proxy,数组索引操作和对象新增属性在Vue 2里的响应式缺陷是什么,$set的原理是什么,这些题目几乎绕不开。我当时复习的方法是,不只是背结论,而是自己写了一个极简的响应式数据劫持demo,从依赖收集到派发更新的整个过程手跑一遍,理解了之后笔试怎么变形都不怕。

组件通信也是常考项:props和$emit、$attrs和$listeners、provide/inject、EventBus、Vuex、Pinia,笔试选择题会问“以下哪种方式适合跨层级通信”“Vuex的mutation为什么必须是同步的”。还有v-if和v-show的区别、computed和watch的区别、v-for的key的作用,这些基础选择题虽然简单,但特别容易因为粗心丢分,平时多刷几套题保持题感很重要。

工程化方面,Webpack的loader和plugin的区别、打包流程、Tree-shaking原理、Vite为什么比Webpack快,这些题目出现的频率越来越高。用友这类ToB大厂,内部项目多、体量大,对构建效率和打包优化是有真实需求的,笔试出这些题不是为难你,而是想筛选出对工程化有概念的人。

2.4 手写代码题:基础API和算法各占一头

用友笔试的手写题,大方向分两类:一类是前端基础API的手写实现,一类是纯算法题。

前端基础API常见的有:手写Promise(至少要实现resolve、reject、then、catch的串行调用)、手写防抖节流、手写深拷贝(需要考虑数组、对象、Date、RegExp、循环引用)、手写call/apply/bind、手写数组去重和数组扁平化、手写一个简单的发布订阅模式。这些题不是要你写得和源码一模一样,而是考察你对API底层机制的理解,以及代码的健壮性。比如手写深拷贝,能写出基础版本只能算及格,能处理循环引用、能拷贝Symbol和特殊对象类型,才算达到大厂标准。

算法题方面,用友的难度不算变态,不会出特别偏的脑经急转弯,但常见的LeetCode热题必须练熟。数组和字符串处理类的题目是首选,比如两数之和、最长无重复子串、反转链表、合并两个有序数组。动态规划和贪心算法偶尔会出现,但属于拉开差距的题目,不会做的话把暴力解写出来也有分。我个人的建议是,笔试前至少把LeetCode Hot 100里的简单和中等题刷一遍,重点练“输入输出处理”和“边界条件”,因为在线笔试的判题环境往往比LeetCode苛刻,没有处理好输入格式可能会全军覆没。

3. 高频笔试题型实战解析:思路与解法

3.1 Promise系列:先看懂“为什么”,再动手写“怎么办”

Promise是前端手写题里的MVP,用友的笔试几乎必考,而且出题方式越来越多样。常见的有:手写Promise、实现Promise.all、实现Promise.race、用Promise实现一个带并发限制的异步调度器。

以手写Promise为例,核心考点有三个:状态机、链式调用、异步执行。状态机方面,Promise只有pending、fulfilled、rejected三种状态,且状态一旦变更不可逆,这是底层逻辑。链式调用的关键点是then方法要返回一个新的Promise,这样才能支持无限链式调用,同时还要处理回调函数返回Promise的情况,也就是需要递归解析。异步执行方面,then中注册的回调需要放到微任务队列里执行,不能在注册时同步触发。

我当时写的时候踩过一个坑:实现then返回新Promise时,没有把resolvePromise和rejectPromise放到setTimeout里,导致执行顺序和原生Promise不一致。这个细节在笔试判题时很可能被测试用例卡住。建议考前手写一遍完整的Promise,对照原生行为跑几个用例,比刷十道选择题都管用。

另外,Promise.all的实现思路也要记住:接收一个可迭代对象,返回一个新的Promise,内部用计数器统计已完成的数量,当所有Promise都resolve后,将结果数组传出;任何一个reject就直接reject。这个实现里最容易被忽略的是空数组的情况,空数组会立即resolve一个空数组。笔试里如果有边界输入的测试用例,这个细节就是分水岭。

3.2 防抖与节流:高频手写题,也是业务刚需

防抖和节流在笔试题里的出现频率高得离谱,而且经常让你实现后补充应用场景。我猜是因为ToB系统里这类场景太常见了:搜索框输入联想、窗口resize的图表重绘、按钮防止重复提交、表格滚动加载等等。

防抖的实现核心是setTimeout,连续触发时清除上一次的定时器,只有当停止触发超过某个时间间隔后才执行目标函数。要注意的是this指向和参数透传,以及在支持立即执行版本的实现中,第一次触发是否马上执行。节流的实现方式有两种,一种是时间戳版,一种是定时器版。时间戳版的特点是第一次触发立即执行,停止触发后不会多余执行;定时器版的特点是停止触发后还会补执行一次。笔试如果只让你“手写防抖节流”,那写基础版就够了;但如果追问应用区别,你得能说清楚“防抖适合输入搜索,节流适合滚动和resize”这种场景差异。

我当时复习的时候,把防抖节流分别封装到了独立的工具函数文件里,然后写了一个小的demo页面验证效果。强推这个做法,因为光背代码不跑一遍,真的会漏掉一些细节,比如连续点击按钮时,防抖函数里的this指向如果不处理,在线笔试的测试用例很可能报错。

3.3 深拷贝:从“能用”到“健壮”的进阶路线

深拷贝这道题看似简单,实际考查面很广。基础版就是递归判断类型,如果是原始类型直接返回,如果是对象就新建一个空对象或空数组,继续递归拷贝属性。

但笔试不会满足于基础版。进阶版需要处理的点包括:数组和普通对象的区分、Date和RegExp等特殊对象的处理、函数的拷贝策略、Symbol作为属性名的拷贝、循环引用的规避。其中循环引用是最大的坑,如果不用WeakMap记录已经拷贝过的对象,遇到循环引用(比如obj.self = obj)就会无限递归,直接爆栈。我当时用的方案是:在递归函数外层创建一个WeakMap,每次拷贝对象前先查询,命中就直接返回之前拷贝的结果。

还有一个细节容易被忽略:深拷贝要不要拷贝对象的原型链?笔试题如果只是让你实现深拷贝,大概率不用处理原型链,但如果你能把Object.create(null)和Object.getPrototypeOf用上,让拷贝结果保留原型,这会成为加分的亮点。不过千万别在笔试环境里犹豫太久,先提交一个能通过的版本,比一直追求完美版本卡时间要强得多。

3.4 算法题:优先保稳,再求最优

用友笔试的算法题通常会给2到3道,难度从简单到中等。如果目标只是进面试,简单题和中等题只要能AC一道,另一道写对思路,就已经很稳了。我当时遇到的两道题,一道是字符串类的简单题,就是判断一个字符串能否通过字符重排变成回文串,核心思路是统计每个字符出现次数,最多只能有一个奇数次字符;另一道是二叉树的层序遍历,标准的BFS模板题。

算法题备考最大的心得是:别只刷难题,简单题和中等题的高频题型要多练。输入输出的解析、边界条件的判断、时间复杂度的估算,这些比考场临时想思路更重要。在线笔试环境里没有IDE提示、没有断点调试,不像自己在本地写代码那么舒服,所以考前一定要在类似的在线OJ环境里模拟几次,适应“没有自动补全”的写码状态。

4. 备考策略与整段时间规划

4.1 按“三轮复习法”安排笔试准备

如果离笔试还有一个月左右的时间,我建议按三轮来准备。这个节奏我也是从多次笔试面试里试出来的,首轮过基础,二轮刷题,三轮模拟冲刺。

第一轮(7到10天):快速过一遍计算机网络、数据结构、JavaScript核心概念、CSS布局和浏览器原理。这一轮的核心目标是建立知识框架,不用深究每个细节,重点是高频考点要能脱口而出。比如HTTP状态码的分类、TCP三次握手四次挥手、Promise的处理链、Flex和Grid布局的区别,这些属于“基础中的基础”,不过关的话后面刷题会很痛苦。

第二轮(10到14天):集中刷题。客观题部分可以找一些前端面试题库,每天做50到100道选择题,重点是校对错题、总结错因。手写题部分,按照“深拷贝、防抖节流、Promise、call/apply/bind、发布订阅、数组去重与扁平化”这个顺序逐个手写一遍,每个至少写两遍,第二遍要求不看参考直接能写出来。算法题部分,每天固定刷3到5道LeetCode简单和中等题,优先刷数组、字符串、链表、二叉树、哈希表这些高频模块。

第三轮(3到5天):模拟笔试。找一套完整的在线笔试题,严格按照考试时间来做,中间不要翻资料、不要暂停。做完之后认真复盘,看看哪些题耗时过长,哪些知识点还是模糊的。这个阶段的目的有两个:一是找到考试状态,避免考场紧张;二是查漏补缺,把最后一轮复习聚焦在最容易出问题的点上。

4.2 资料选择:少而精,宁吃透一套

现在网上的前端面试资料多到爆炸,很多同学容易陷入收藏焦虑,看到什么就存什么,最后发现真正看完的没几份。以我的经验,笔试备考不需要太多资料,精选两三套吃透就够了。

JavaScript方面,强烈推荐找一套成体系的面试题集,配合一些源码分析文章来理解底层原理。比如Vue的响应式原理,只看概念很容易忘,但去看一下源码里Dep、Watcher、Observer这三个类的关系,就很容易记牢。计算机网络方面,把TCP/IP、HTTP相关的面试题整理成笔记,按“连接建立、请求发送、缓存策略、断开连接”这个顺序串起来记忆,效率比乱翻书高很多。算法方面,LeetCode是主力,不要贪多,Hot 100里的简单和中等题已经覆盖了绝大多数笔试可能出现的范围。

4.3 应试技巧:选择题别恋战,手写题先框架后细节

在线笔试的时间一般是60到90分钟,题量大概在30到50道之间,包含客观题和编程题。时间分配非常讲究,我的策略是客观题每道题控制在1分钟半以内,拿不准的先标记跳过,绝不恋战。因为客观题的分数分布通常比较均匀,为了纠结一道不确定的选择题浪费5分钟,后面编程题却没时间写,得不偿失。

编程题一定要先构思框架再写细节。拿到题目后,不要上来就写代码,先在纸上或脑海里理清思路:输入是什么,输出是什么,用什么样的数据结构,时间复杂度和空间复杂度大概是什么量级。想清楚之后再开始写,写的时候注意变量命名规范、边界条件的判断、空值处理这些细节。很多同学踩过的坑是:一看到题目有点思路就急着写,结果写到一半发现思路有漏洞,删掉重来,时间全浪费了。还有一点,在线判题环境通常不支持查看错误输出,所以更要养成“先写一个干净版本,再补充特殊情况”的习惯,保证基础用例能通过。

5. 踩坑记录与笔试之后的衔接

5.1 我踩过的几个坑,希望你别再踩

先说选择题的坑。用友的笔试题大多来自题库,会出现一些“网上搜不到标准答案”的题目,尤其是多选题,少选不得分、选错不得分,答起来很亏。我当时遇到一道关于浏览器渲染流程的多选题,选项里有个干扰项说“JavaScript脚本会阻塞DOM解析,但async属性的脚本不会改变执行顺序”,这个描述一半对一半错,如果不仔细看很容易选错。我的建议是:多选题遇到不确定的选项,宁可少选也别多选,至少还能得部分分,多选往往直接零分。

再就是手写题的坑。我当时写深拷贝的时候,因为考场紧张,把WeakMap的用法写错了,代码一直报错,最后只能交了一个基础版本。后来复盘才发现,我考前虽然练过两遍,但都是照着博客敲的,没有真正理解为什么要用WeakMap而不是Map,也没有考虑过循环引用的场景,所以一紧张就露馅了。教训就是手写题不能背代码,要理解每一行代码存在的理由。

还有一个系统层面的坑:在线笔试最好提前10分钟进入系统,测试摄像头、麦克风、网络环境。有的批次要求在草稿纸上写计算过程并拍摄上传,如果设备没有准备到位,会严重压缩做题时间。另外,考试过程中不要切屏,很多在线笔试系统检测到切屏会记录异常,严重的直接判定作弊,整个过程我都老老实实待在笔试页面里,这点务必注意。

5.2 笔试之后:从“会答题”到“会讲题”的面试过渡

笔试通过之后很快就进入面试环节,很多同学会犯一个错误:笔试考完就彻底放松,把知识点全扔一边,等收到面试通知再临时抱佛脚。实际上,笔试内容就是面试内容的最佳提纲,面试官很喜欢拿着笔试的题目追问细节,尤其是手写题的空间复杂度和优化方案。

我当时笔试里写了防抖节流,面试官第一题就问:“你实现的防抖函数如果支持maxWait参数,让等待时间超过上限时强制执行一次,你会怎么改?”这就是在笔试基础上的延伸。所以笔试复盘的时候,不能只对答案,还要主动给自己出“变体题”:这个功能如果加个参数会怎样,如果换个实现思路会怎样,如果数据规模变大又会怎样。带着这些思考去准备面试,会有种“所有的题我都见过”的安全感。

另外,用友的面试很看重业务匹配度。面试官会问“你对我们BIP这类云产品了解多少”“有没有接触过大型表单系统”“能不能接受比较成熟的业务团队氛围”。这类问题在笔试里考不出来,但面试前一定要提前了解。我当时提前看了几篇关于用友云转型的深度文章,面试时聊到企业级前端的挑战和方向,能明显感觉到面试官态度的转变,从考察模式切到了交流模式。

5.3 复盘工具和方法:让一次笔试变成一次成长

最后分享一个我自己的复盘习惯。每次笔试结束,不管过没过,我都会在当天晚上花40分钟做一个简单的复盘表格,记录三列:题目考察的知识点、我当时的表现(答对了还是答错了或者是半懂不懂)、下一步要补的东西。这个方法看着土,实际效果很快。你会发现,考场上丢分的题目最终都回到少数几个知识板块,比如Event Loop相关的异步执行顺序、Vue的响应式原理、数组和字符串的算法应用。找到薄弱板块之后,集中火力补课,效率远高于漫无目的地刷题。

用友的笔试在整个秋招里算是很有代表性的:老牌大厂、技术栈主流、考察面广、手写题和算法题并重。把这场笔试准备充分了,再去面其他ToB或传统大厂的前端岗,很多知识点都是通用的。如果正在准备的过程中觉得题量大、时间紧,我的建议是别慌,按“基础、刷题、模拟”三个节奏推进,一步一个脚印,笔试这关一定能稳稳通过。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 5:32:34

开源AI数据标注平台Label Studio:源码部署与二次开发实战

简介:Label Studio数据标注指南附带可运行源码,面向大模型训练中的数据工程师、算法工程师及AI产品经理,旨在解决多模态数据标注流程搭建与实操落地问题。压缩包共3个文件,以HTML说明文档为主体,配合inscode在线运行配…

作者头像 李华
网站建设 2026/9/1 5:31:01

Windows USB插拔痕迹清理:注册表与日志的批处理实战

简介:面向Windows用户的USB清理工具合集,整合了USBOblivion 32/64位正式版与UsbViewer设备查看器,专用于彻底清除注册表中留存的USB设备连接/断开记录,包括设备ID、序列号及首次/最后使用时间等敏感信息,适用于注重隐私…

作者头像 李华
网站建设 2026/9/1 5:30:31

猫眼抢票技术方案:Python自动化下单与接口调优实战

简介:面向对票务自动化及反爬风控感兴趣的开发者,这份源码包围绕猫眼抢票整理了三种主流技术路线:基于HTTPS协议逆向的高并发方案、基于AutoX.js的模拟真人点击方案,以及结合微信小程序与云函数的轻量方案。资源共3个文件&#xf…

作者头像 李华
网站建设 2026/9/1 5:28:41

量子振荡数据处理全流程:从SdH/dHvA曲线到费米面参数提取

简介:面向量子振荡数据分析的Python工具包,主要服务凝聚态物理、强磁场输运等研究方向的科研人员与研究生。其围绕Shubnikov-de Haas(SdH)振荡的完整数据处理流程而设计,基于SdHDataSet类对单次磁场扫描的原始与处理数…

作者头像 李华
网站建设 2026/9/1 5:28:39

EDG冠军赛前阵容传闻深度剖析:从爆料到官宣的理性观察

距离上海冠军赛越来越近,EDG却被一条外媒爆料推到风口浪尖:前JDG选手stew或将加入EDG,以替代jieni7参加冠军赛。消息一出,国内电竞社区立即炸开了锅。 这条传闻的新闻点并不在“换人”本身,而在“谁在什么时间点以什么…

作者头像 李华