【面试】前端求职之路
功夫不负有心人,【有赞】目标冲击完成,过个好年
# 首发个人博客 🔥
种一棵树,最好的时机是十年前,其次是现在 (opens new window)
# 个人情况
2018.9 开始实习,2019.7 毕业于某二本。老东家前端团队 100 人左右,社招基本不算实习经验,算是一年半经验出去战斗。
# 一、先说原因
# 1、想看看外面的世界
从2018.9
年实习 -> 2019.7
转正 -> 2021.3
离职,没见过外面的世界,自己说不上来老东家的一些好与坏,只是感觉在一家公司呆久了,不管是同事、环境、技术相关,都趋于一种小变化的节奏。至于这是好是坏,因人而异吧。
# 2、个人成长
写了很久的相似业务,感觉对自己的成长来说,帮助很小。一直是vue
,一直是toB
,一直都是his系统
。近一年以来,基本也是自己在负责两个项目,很想和别人一起做项目,学习大佬的姿势。也很想做做其他的产品,或者toC
等等,想让自己能接触更多的东西。打听了有赞技术挺强,用的也是大厂偏爱的React
,自己想转这方面的,也是为了一个大厂梦,所以自己需要做出一些改变。
# 3、生活压力
结婚需要房子,杭州的房价又不低,必须得去奋斗,说白了还是缺钱
。提离职之前也大概了解了老东家的涨幅,下家给的翻倍
,没办法拒绝。也是为了提高自己的base
,为以后做做准备。
# 二、面试结果(按顺序排)
# 1、微点(offer)
出去面试的第一家,3 轮技术+一轮 hr,给的薪资还可以,其他年终 1-3 个月,单休+五险一金最低,自己就不考虑了
# 2、涂鸦(现场挂)
信心满满的去现场面,被锤了一顿。次要原因是:我给的 pdf 简历,重点的地方用其他颜色标记了。结果涂鸦 hr 打印出来的简历这些标重点的都没了。面试官也很无奈,只能拣其他能看见的关键字问,我又不太熟,就只能 GG 了。给自己的打击挺大的。。。主要原因还是自己菜 😂
# 3、海康(一面 20mins 挂)
一面二十多分钟,然后给我挂了 😂
# 4、端点(offer)
一面电话,二面现场,三面 HR 电话。技术栈 react,前端七八十人左右,给的薪资也还行,听说那边 90%是 3 个月年终,本来是要去的,后面有了有赞的 offer。
# 5、有赞(offer)
前后大概一周,年前最后一个工作日收到 offer,自己提了离职。这里写下主要的问题吧,有想看我的回答的可以去博客瞅两眼【面试】2020 年底面经 (opens new window)
# 6、字节跳动(一面 1h20mins 挂)
年前拿了有赞的 offer,准备去了。可惜的时候没有面过大厂。快到离职日期的时候,朋友帮我内推了一下字节,带着试一试的心态,距离上一次面试已经一个月了,简单准备了一下。一面 1h20min,个人感觉没有想象的那么难,编程题没做好,是自己的问题,再加油吧 💪🏻。
# 面试中个人问题
# 1、话太多
一个问题自己能说好久,说着说着就跑题了。自己面试实习生,也遇到过这样的。这样会给自己在面试管的印象扣分。面试还是拣重点的回答,回答也不能太短,需要在中间给面试官提问的时间。
# 2、答非所问
不会就是不会,很多知识点,如果是没听过的,或者自己没去了解过的,就不要扯,这样只会拉长面试的时间。某些知识点不会,直接说。面试官就接着下一个问题了,也能让面试官更全面的了解自己。
# 3、算法薄弱
遇到算法题,总是想着用暴力法解决,写的代码有点难看。多去刷刷题,没有基础的,每种类型的刷几道简单的就行,像我这种比较初级的程序员,考的基本是简单的算法题。
# 有赞面经
# 一面电话 (1h)
- 讲讲最近写的项目
- 讲讲自己写的打印插件,vue-iframe-print,和其他打印方式对比。分页问题,默认背景图如何显示(知道有 css,但是记不住是那个),自定义样式等等
- 权限系统(RBAC),具体实现,接口权限校验。通用接口如何校验,可复用的业务接口如何校验
- 讲一讲 OAuth
- 微前端(项目在用) 为什么要用微前端,和 iframe 对比了一下。
- 实现一个水平垂直居中?flex:1 含义? 一道场景题
- margin 塌陷?有没有遇到过其他 css 问题?
- vue 响应式原理
- 组件 data 为什么是一个函数?
- vue Object.defineProperty 缺陷?数组 7 个方法怎么重写的?
- dep 依赖搜集与 watcher 派发更新流程?dep 是发布者还是订阅者?怎么知道每一个 watcher 要通知哪一个 dep?
- keep-alive 原理?
- 讲一讲虚拟 dom
- 讲一讲 vue diff 算法
- 为什么使用 key 能提升 diff 性能
- this 指向的理解?声明时和运行时指向?箭头函数指向?修改 this 指向?
- call,apply,bind 区别?讲一下实现一个 bind 的思路
- 函数柯里化概念,常用场景?
- 关于缓存的一些东西?如何提高缓存命中率?
- 详细描述一下输入 URL 到页面打开的过程,尽量详细些?
- 数组和链表在计算机中存储的方式?计算机中增加一个数组元素的方式?
- 你有什么想问我的?
然后约了二面,视频 coding
# 一面视频 coding(45mins)
/**
* 1. 实现一个函数,判断两个变量值是否相等
*
* 注意
* - 数据类型不限于示例,尽可能考虑边界
* - function 引用相等即可
*/
const foo1 = {
a: 1,
b: "1",
c: NaN,
d: [
{
a: 1,
b: 2,
},
],
f: {
a: 1,
},
g: null,
};
const foo2 = {
a: 1,
b: "1",
c: NaN,
d: [
{
a: 1,
b: 2,
},
],
f: {
a: 1,
},
g: null,
};
function isEqual(target1, target2) {}
console.log(isEqual(foo1, foo2), "isEqual");
/**
* 2. 实现 getValue 函数来获取path对应的值
*/
var object = { a: [{ b: { c: 3 } }] }; // path: 'a[0].b.c'
var array = [{ a: { b: [1] } }]; // path: '[0].a.b[0]'
function getValue(target, valuePath, defaultValue) {}
console.log(getValue(object, "a[0].b.c", 0)); // 输出3
console.log(getValue(array, "[0].a.b[0]", 12)); // 输出 1
console.log(getValue(array, "[0].a.b[0].c", 12)); // 输出 12
/**
* 问题 3
* 将一天24小时按每半小划分成48段,我们用一个位图表示选中的时间区间,例如`110000000000000000000000000000000000000000000000`,
* 表示第一个半小时和第二个半小时被选中了,其余时间段都没有被选中,也就是对应00:00~01:00这个时间区间。一个位图中可能有多个不连续的
* 时间区间被选中,例如`110010000000000000000000000000000000000000000000`,表示00:00-1:00和02:00-02:30这两个时间区间被选中了。
*
* 要求:写一个函数timeBitmapToRanges,将上述规则描述的时间位图转换成一个选中时间区间的数组。
* 示例输入:`"110010000000000000000000000000000000000000000000"`
* 示例输出:`["00:00~01:00", "02:00~02:30"]`
*/
function timeBitmapToRanges(str) {}
console.log(timeBitmapToRanges("110010000000000000000000000000000000000000000000"));
console.log(timeBitmapToRanges("110011000000110000000000000000000000000000001111"));
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 二面现场( 1h20mins)
上来就是两页纸,我人懵了。。。因为已经做过线上 coding 了,没做好心理准备~~~,也没复习这方面的。。。。
- 大数相加: 给定两个字符串形式的非负整数 num1 和 num2 ,计算它们的和。leetcode 415. 字符串相加 (opens new window)
- 写一个事件 Event 类,实现 on,off,emit,once 功能,同时 on 要支持 debounce。eg:on('click',function(){},500)
- 介绍下让自己成长最大的项目?
- 你觉得现在遇到的最难的问题是什么?
- 为什么要做微前端?
- 回到写的第二道题,说到了 setTimeout 设定的时间,函数能准确按时执行吗?setTimeout 怎么能做到准时?
- js 是单线程还是多线程?为什么?支不支持多线程?支持多线程的方式有哪些?node 端多线程知不知道?进程和线程的区别?进程内存计算机如何分配?线程资源如何分配?
- 跨域的解决方案
- 如何实现移动端 1px 边框
- 什么是 html 可替换元素?
- 一个图片对应多个 cdn 地址,如果第一个地址不能用了,需要换成下一个,怎么做?
- vue 生命周期详细描述下?改变组件 data 里面的东西会触发什么生命周期?
- vue2.x 响应式原理?Object.defineProperty 的一些参数?
- for in 可以遍历出来那些东西?for in 可以遍历数组吗?可以遍历出那些东西?
- vue 组件 scoped 作用?实现原理?其他的 css 隔离方案?
- 怎么用 ES5 去实现 ES6 类的继承?
- 你觉得 eslint 有哪些规则比较有用?
- http1.1 和 http2 的区别?http1.1 中做了哪些项目优化?http1.1 中用的哪些优化手段,会在 http2 中失效?http2.0 还存在什么问题?http3 了解吗?
聊了近一个半小时,终于结束了~~~面试小哥说让我等会,告诉了我卫生间在那,就走了,面试体验还是挺不错的,有些不知道的问题。面试官会换种问法,实在答不出来也会跟你说答案。
# 三面(50mins)
- 自我介绍
- 说一说最近一年做的最好的业务?你觉得你做的最出彩的地方是哪里?
- 处方打印,不同格式如何设置?
- 离线缓存 存在什么问题?
- 讲一讲权限系统?除了 RBAC,还了解哪些权限设计吗?RBAC 的优点?
- 给你一个需求:除了预设角色,某个人可以单独做其他的事情,怎么办?
- 讲一讲你们做的微前端? 父应用如何加载多个子应用? 路由整合是如何做的?
- 讲一讲局部打印的实现?
- api-proxy 是如何实现的?业务越来越复杂,nginx 是不是每次都要改?怎么解决?怎么做一个全局代理?在本地如何调试线上代码?
- 讲一下项目中定制化需求如何处理?更优雅的方式?面试官举了一个有赞的场景例子:关于不同商家后台,某个商家多了一个菜单?某个商家在通用页面 A 中有特殊的两个按钮?如何处理这种个性化的问题?深入一点,如何把个性化需求开放给其他商家自己开发?
- 如果让你写一个 single-spa,你怎么做?两个子应用的 app.js 如何切换?js、css 如何隔离?作为攻击者,如何突破用 proxy 实现的一个沙箱环境,或者说子应用如何才能访问父应用的 window 对象?
- 讲一讲项目中的全键盘操作?keyup 监听怎么做的?addEventListener 第三个参数?如何阻止冒泡事件?怎么阻止部分按键?
- 讲一讲 oAuth 2.0
- 你为什么想出来看机会?对下一份工作期望是怎么样的?你现在是怎么学习的?
- 你有什么想问的?
接着就让我等一下,估计是去讨论去了,自己也知道,接下来如果有 hr 来,就 80%过了。找个理由说 hr 不在的,基本就凉了。。。
# 四面(HR 40mins)
等待的时间是非常煎熬的~ 一会(忘记了是多久,差不多 10 分钟?),HR 小姐姐来了,换了个位置,开始面对面谈。
- 刚刚聊下来感觉怎么样?
- 对自己 1-3 年的规划
- 前端方面有没有犯过比较大的故障?绩效好的情况下为什么要考虑机会?
- 你觉得自己还能在现在的业务中成长多少?或者说你还能为现在的业务做什么?
- 平时自己的学习方式?
- 你希望自己 3 年以后能达到什么水平?你觉得自己和 P6 差距在哪?
- 平时的工作节奏?
- 你对加入有赞的一些期待是什么?薪资是怎么样的期待?有没有其他 offer?
- 你有什么想问的?
问了下什么时候能给结果?也说了自己有三个 offer,年前需要给答复,HR 小姐姐说,明天尽快。
等我到门口的时候,又问了下离职时间。这个时候自己才感觉有戏~~~~
# 拿 offer & 提离职
第二天中午,hr 给我电话了,下午发了满意的 offer。接着自己就去找主管提离职了,主管说有点突然,他要开车回家,就搁置了一下,到晚上的时候,自己又主动找了下主管,当时也没说出结果,最后晚上十一点多,大领导打电话来问我离职的原因,自己说了成长和钱的问题,最后和主管约定了离职日期。
# 一些感想
离职想法产生之前,自己并没有太多准备。遗憾的是没有把大厂都面一遍,字节
是离职前一周的面的,没什么准备,卒。网易
找了内推,hr 说资历太浅,卒。脉脉上找了个阿里
内推,给我投个 H5 技术专家,气死人 😤,卒。总体来说,没有个三年经验也挺难的,我 2021.2 投的,算是一年半经验,很多大厂简历都过不去。
幸运的是,年前拿到了 offer,避免了年后的激烈竞争 😎
# 学习资源
- 人人都能看得懂的 Leetcode 力扣刷题教程合集 (opens new window) 不错的算法视频讲解
- 种一棵树,最好的时机是十年前,其次是现在 (opens new window) 分享个人学习的东西
- 字节飞书的学习计划 - 超清楚(必看) (opens new window) 字节前端知识梳理,很清楚,建议收藏
- 冴羽的博客 (opens new window) 淘宝大神总结的前端基础
- vue 源码分析 (opens new window) 个人感觉讲的不错,带你从头实现一个 vue
- 大厂面试题每日一题 (opens new window) 没事就来刷一刷
- 01
- 2023/07/03 00:00:00
- 02
- 2023/04/22 00:00:00
- 03
- 2023/02/16 00:00:00