微信 hr 面结束的时候,我也打算结束秋招了,这篇文章会记录面试的全过程,以及一些个人的感悟,希望能给大家一些帮助
一、背景
先说一下背景,秋招期间,本来打算各个大厂都尝试一下,然而转正后时间的分配越来越紧张,因此改变战略,面个微信,最终的秋招结算如下:
- 抖音电商本部门转正
- 微信 A 部门,2 面后主动结束流程
- 微信 B 部门,等待意向
下面我会把面经分享给大家,也不要觉得某某问题很难,每个人的情况不同,面试的内容也会不同~
上集回顾: 终于拿到了 WXG 的 offer,却只能无奈放弃 🥺
二、面试记录
没想到微信开秋招了,同时没想到,上次面暑期实习的微信部门(不过是兄弟部门)找我约面了!!!
好啊,那就面!
微信 A 部门
1 面
一面面试官非常硬核,对我做的事情能问的非常深入,面试过程没有什么八股,基本围绕项目展开:
-
最近两个月做了啥
-
VSCode 插件具体实现过程
-
背景,解决什么问题
-
具体实现......
-
数据如何做映射
-
js 基本数据类型有哪些
-
int32、int64、float 在 js 中怎么转换
-
核心实现逻辑中,数据转类型代码为什么要用 quickType,直接手写转换不行吗
-
-
反爬
-
做了什么
-
数据校验怎么做的
-
-
手写题:异步并发任务调度器
-
反问
2 面
没有自我介绍,上次面兄弟团队的面评留下了,面试官直接说基础考核之前都看到了,这次就不问基础了(爽!
-
城市能否接受,上次拒绝的主要原因
-
电商留用了吗,结果如何?
-
为什么秋招想看看外面机会,基于我说的理由给了回应/建议,这些内容我放在最后展开聊聊
-
你部门现在的技术栈有哪些
-
为什么要有这么多技术栈,这些技术栈会舍弃开发体验,为什么还要做?
- 考虑到综合因素,我们的这套架构可以降低不发版率,同时也能和客户端实现更深入的合作......
-
聊一下最有成就感,技术有闪光的需求:飞书妙记构建工具升级
-
技术评审怎么做的,结构
-
升级过程中的一个亮点难点:手写了一个
webpack
插件 -
工程那么大,加载过程有做什么优化吗?
-
构建有什么经验:编译流程编排
-
资源加载有什么经验:
babel-runtime
、懒加载、拆包、同一包多版本统一、特定包优化(lodash
->lodash-es
) -
还有什么可以优化
fp
、fcp
的点:提高缓存命中率、异步加载、主接口数据优化(拆分) -
说的不够,再扩展扩展:
- 图片资源优化
- 控制
html script
标签的加载模式,控制资源加载模式 JS
主接口加载前逻辑后移(非先决条件)prefetch
-
-
埋点治理怎么做的,详细讲讲你做的类型代码生成插件
-
核心原理
-
解决了什么问题,能彻底解决失误率吗、带来了什么收益
-
如何让埋点消费类型代码的
-
-
学分修完了吗
-
校招 ok 的话,能提前入职吗,可以的话最好提前来
-
看你做的大多是技术为主,你后续对业务和技术的认知和接受程度是咋样的
- 7分业务 3分技术,面试官很认可这个定位
-
反问
-
总体业务构成 + 技术栈
-
还有几轮面试:因为之前拒绝过兄弟部门,需要和他们再沟通一下,想办法证明我是可以被捞回来的,意愿是否改变了
-
建议
-
很遗憾的是,最后得到两个选择:
- 保留之前的实习名额,让我现在去实习然后走转正路线
- 继续推进面试,但是保证通过后一定要选择这里
然而我没法放弃字节这些的 offer,因此决定结束流程(太痛了
微信 B 部门
上面的事过去不久,微信 B 部门就约面试了,好啊,那也试试吧~
1 面
一面面试官也是非常硬核,但是问了很多八股,这对我来说是个弱项,但好在也是通过了面试~
-
自我介绍
-
讲讲你的实习经历
- 反爬怎么做的,核心技术,你负责哪里,实现了什么
- 做的最有技术深度的事情
-
做题
- EventListener
- 修补房屋保护财产,滑动窗口
-
React 如何保证高效率渲染
-
fiber 原理,如何实现两个 dom 树的交换
-
任务队列存在的意义是什么
-
说说浏览器事件循环,微任务和宏任务的本质区别,为什么要存在
-
说说 Https 的定义,全流程,CA 证书是什么
-
说说 node 的多线程,如何开辟多线程,说说 fork 对内存的影响
-
反问
2 面
-
说说飞书中实习经历比较有亮点的(把一个脏活累活做漂亮且实现自动化、延伸、分享)
-
电商中做了哪些业务(低价分流)
- 低价分流的业务逻辑,你做了什么,哪里比较难
- 脱离前端的角度,从全链路分析低价分流要考虑什么(上限问题,很重要!)
- 是否触发低价分流(基于品类判断)
- 平均价格水位判断
- SKU 基于标签分类,基于推荐算法进行引流
- 多样的表达方式,实现低价引流表达强化
- 埋点,衡量数据
- 用户人群划分
- 高比价欲望:提高引流入口唤出频率
- 低比价欲望:不做唤出,保证 GMV 增长
- 用户行为检测:截图、复制链接/标题、划出后台等行为,强制唤出低价分流入口
- 如何跟客户端、后端同学协调好工作内容
-
写题 数组 origin,他的内容 * 2 加上 origin 本身后,打乱,形成 changed,给定 changed,计算任意一个可能存在的 origin
- 如:[1,3,4,2,6,8] => [1,3,4]
-
反问
3 面
进入里面委环节,很幸运的是,几轮面委都非常的友善,他们更倾向考察上限的问题,对某个点的深入也完全是基于我的经历展开的
-
自我介绍
-
讲一下你觉得比较有技术难度的需求:pnpm + monorepo
-
为什么用 pnpm 而不是 npm
-
幽灵依赖是什么?pnpm 怎么解决的
-
能给我讲讲 pnpm 架构设计嘛?【开始上强度了】
-
pnpm 命令执行器是怎么实现的
-
pnpm 命令的结构是咋样的,一个命令都需要什么内容
- 执行器 handler
- 帮助 help
- 触发此命令的命令名列表(比如一些缩写) commandNames
-
跟我说说 pnpm run
- 如何判断执行到 package.json 的命令
- 为什么 pnpm
-
-
npm 的一些安全问题你知道吗,讲几个 case(操作本地文件、读取用户信息并上传)
- 怎么解决安全问题:
- sdk 的选择,基于下载量、更新频率等
- 操作系统权限控制
- 网络请求拦截器(yy 的,估计说的不对)
- 新增依赖时,通过脚本读取命令是否包含文件操作、发送请求等内容,输出日志
- 域名加白,发送请求时,如果有陌生域名,限制并输出内容
- 怎么解决安全问题:
-
反爬安全怎么做的
-
反问
4 面
-
基于过去的经历做个自我介绍,有什么比较有成就的
-
为什么大一就这么早决定走前端这个路呢
-
你现在的想法有变化吗,是否突破了这个 scope,你是如何突破的
-
你怎么看待前端深度和广度的问题
-
大部分人对于广度很热衷,学习各种技术栈,但在深度上浅尝辄止,你怎么看待,你如何解决这个问题
-
你平时工作中的沉淀是怎么做的
- 这个积累是碎片式的,你怎么保证能够系统化学习呢
-
你能系统化学习,那你怎么保证你的方向是选择正确的呢
-
你是否阶段性遇到一个很难的问题,你是怎么看待的,如何处理的
-
反问(我直接把他问我的问题抛回去了hhh)
- 你能系统化学习,那你怎么保证你的方向是选择正确的呢
- 你是否阶段性遇到一个很难的问题,你是怎么看待的,如何处理的
- 一个合格 leader 的能力模型是怎么样的
个人感觉,面试官人很亲切,经常以我名字后两个字开头,后面评价说觉得我能想的挺远还是很不错的,接下来会有 hr 联系我(蚝!
hr 面这边就不展开说啦,整体的面试过程就是如此,可能对一些问题没有展开说明我是如何回应的,我会在下面展开聊聊
三、个人感悟
这次的面试经历也让我有了很大的成长,下面我会基于一些主题进行展开 这一部分我不会做什么长篇大论,讲一些大道理,更多是把我个人的理解表达出来,不接受的话可以忽略不计~
基础知识的积累问题
可能很多人认为基础就是八股,但其实这两个的差异是很大的
首先我们要认识到基础的重要性,从编程语言的语法规则 到算法 、数据结构 ,从数据库 、操作系统 到网络通信 ,在工作中,很可能会因为一些奇怪的问题(我们称之为"坑")而显现
在这个节点上,基础扎实就能很快定位并解决问题
当然这个很多人都知道,那如何让自己有效地学习基础知识呢?
我理解就是基于工作内容去发散,比如:
- 第一次用 Charles 做移动端调试,那我是不是应该看看 Charles 代理是如何实现的?
- 第一次启动公司项目,还得下载一个证书,那证书的意义是什么呢?
- ......
平时多做这些发散,去花精力总结,就能逐渐培养基础能力,当然,我们要尊重过程 ~
至于如何更好地落实 ------ 写文档,可以写博客,也可以写给团队的同学,给他们整一个 xxx 研发 onePage,记录你 xx 开发的感悟,思考,以及一些深入的研究(好处不言而喻)
评判研发能力的真正标准
解决问题的能力、沟通能力!
相比于此,技术能力都排不上号。技术虽为基础,但无非是一个人是否花时间、花多久的问题,没有多少核心竞争力,但是像解决问题、沟通,是很多人一辈子都学不好的。
具备优秀的解决问题能力的人是怎样的?
- 深入分析问题 :拿到问题(或者说需求),不仅停留在完成任务,而是深入挖掘,关注更多,如:
- 排期与风险评估
- 边界问题处理
- 可挖掘的闪光点
- 产品设计是否有误
- ......
- 优先级评估、计划与时间分配:对于程序猿来说,业务并行是常态,同时处理多个事情是必须要经历的过程,因此在比较慌乱的时候,需要快速做好优先级调整,保证需求的顺利推进
- ......
具备优秀的沟通能力的人是怎样的?
- 清晰表达 :沟通时,注重上下文,不会含糊表达,比如
- 小 A,
上次的事(xx 平台的技术评审)帮我再推一下
- 小 A,
- 文档优秀:文档可以视为一个非常重要的能力,比如技术评审,基于文档展开,你要搞明白要表达什么,评审的时候要落实好什么事,作为载体的文档一定会肩负最大的责任
- 情绪稳定,适应不同受众 :这也是一种职场能力的体现 ------ "多元兼容",根据不同的沟通对象调整自己的沟通方式和语言表达,面对不好的 case,也需要保持情绪的问题。在入职的初期,我在沟通上也曾收到很大的委屈,但当时 ld 告诉我说,你只需要负责完成 xx 任务,如果因为某人导致 block,直接上升至对方 ld 即可。(总的来说:沟通上的心智负担是自己给自己的,重点是我们如何调节看法)
至于如何提升,只能多多在工作中学习,观察师兄师姐的行为模式,遇到问题、挫折,解决之后好好复盘,这也是一个必须要经历的过程(尊重过程 * 2~)
简而言之:多观察多思考,少刷短视频(🌚
脏活累活的定义与看法
脏活累活如何定义?
通常是指那些繁琐、重复、技术含量相对较低的工作,例如:数据录入、环境配置、看板搭建等
谁都讨厌脏活累活,但是脏活累活是不可避免的。 一般来说,团队中的资源是不断流转的:某个节点,A 同学有晋升诉求,他的资源就会得到倾斜,相对的其他同学,就会分担一定的脏活累活
对于 "脏活累活",我们应该有正确的看法(这不是 PUA)。首先不可避免,我们在遇到脏活累活时可以多思考是否有可以解决 "脏"、"累" 这两个属性的方式:
- "脏":工作内容繁琐、重复,可以通过自动化工具来减少 "脏" 的程度。例如,对于数据整理工作,可以编写脚本或使用数据处理软件,实现自动筛选、分类和汇总
- "累":工作强度大、耗费时间长,这点无所谓,按照人力顺排即可(你提早卷完了也得干别的)
所以核心在于如何处理 "脏" 这个问题,可能 70% 的场景下都没有快速解决的办法(只能接受,这就是你的工作),但剩下的 30% 的场景,我们可以通过脏活累活做出很亮眼的事情,这在 ld 的眼里就是 ------ 超出预期
全栈的看法
非常接纳!理由如下:
- 前端的 scope 还是太小了,仅仅专注于前端,可能会限制对整个项目架构和业务流程的理解深度
- 全栈能够提供更全面的视角,可以设想,我们了解后端技术、数据库管理、服务器配置等各方面的知识,在项目设计和开发过程中:
- 能够从全局出发,做出更合理的决策
- 提高对接能力,能从对方的角度出发思考问题的合理性
- 一些 node 无法解决的问题,可以用 go、java 等解决(尤其在性能上的问题)
- 跨栈能力能很大程度增强职业竞争力,现在企业对综合性人才的需求也越来越高,是一个很不错的趋势
如何做好选择,找对方向
选择大于努力,最重要的就是规划和对自我认知的程度,这个话题太大了,我们可以从两个小点出发:
- 沟通学习: 了解方向
- 多多和别人交流,打破信息差
- 多找前辈请教,可以提供很多方向的指引
- 自我思考: 确认自己的处境
- 是否能给负责的业务带来明显收益
- 你做的投入产出比是否呈指数增长(否则就是 1:1 的脑力换金钱)
四、最后
每个阶段都有不同的成长,像第三部分就是我秋招以来的收获,都是从面试、答辩中学习到的,在这里分享给大家,如果有想要深入探讨的,随时欢迎交流!
最后,如果你想加我们的技术社区,想要打破信息差、水群、提问、参与开源,可以加我:Tongxx_yj,欢迎大家的加入!