[吐槽] 最近的前端面试

2020-03-17 20:58:05 +08:00
 lococo

最近在面了些厂,几乎全部挂在偏门基础上,如下举例

  1. f.bind(context1).bind(context2)会如何
  2. obj1[obj2] = ''会如何
  3. let A = function () {return obj}; new A()会如何

···

这些题无一例外,全是抖机灵得考你对某个细节知识的掌控,例如 bind 的底层原理?类型转换? new 的原理?

我不否认这些原理和基础很重要,但试问

面试题难道不应该基于实际的业务场景?哪个最佳实践会让你这么写代码?

偏门的知识点永远不能体现任何问题,这些问题除了能在刷题的时候遇到,能解决什么实际问题?即使实际遇到了,难道不是 google 一下就可以解决的事情?

你问我什么问题不能 google 一下解决?那就是你不知道坑在哪你就找不到方向的问题,例如 eventloop,webpack 的打包原理,http/https/h2 的各种协议问题

所以这些面试题除了可以让那些刷过大量面试题的童鞋欣喜以外,反而会让我们这些善于处理实际问题,而对很多偏门细节知识点掌握不好的童鞋感到头疼

好了,不说了,我刷提去了

9191 次点击
所在节点    职场话题
94 条回复
lipeiwei
2020-03-17 23:09:56 +08:00
这题我都没刷过,但都答得出来
第一题问的是 bind,实质上可以引申到整个 this 机制
第二题是 object 的 key 只能是 string 或者 symbol,所以这里涉及到类型转换( obj2 转换成 string 类型)
第三题,这种就是构造函数的返回值是引用类型的情况了

把《 javascript 高级程序设计》跟《你不知道的 javascript 》上中下 都看一遍吧,就会很清晰
lococo
2020-03-17 23:10:11 +08:00
@chuxiaonan bable 刚出来的时候的确会这么转换,也不知道哪个版本后面就改掉了,但连续两次这种 bind 的问法还是很奇怪;关于你说的单例,我到觉得完全没有必要这么去实现,还不如直接 export 一个实例来的更有意义;
lococo
2020-03-17 23:11:43 +08:00
@lipeiwei 很厉害,基础夯实
wyz123723
2020-03-17 23:16:19 +08:00
哈哈,这些我都会问. 不问这些还要问什么呢?楼主说问实际的业务问题。但是问实际的业务问题你考虑过这些吗? 1. 面试者能否有足够能力将业务场景表示清楚?2. 应聘者能否理解你说的业务场景 3.理解以后应聘者能否说出你想要的答案?4.即使不是你想要的答案, 你能否判断他的业务解决方案就一定弱于你的解决方案呢?
autoxbc
2020-03-17 23:16:35 +08:00
有些人的代码只是凑巧能运行,并不是他们真的知道怎么做,和楼主共勉
royzxq
2020-03-17 23:20:39 +08:00
@lococo 原来 babel 的箭头函数编译之后的代码改了。
lococo
2020-03-18 00:05:14 +08:00
@wyz123723 问些大的方向,例如协议,常用工具这些都可以从大自小问道很细,而且很实用。而小的点很多我都知道有坑,但具体坑是怎么挖的我要自己试过才知道,例如第二问的类型转换,我知道类型转换是个坑,但我从来不会去关心怎么转,只知道避开就好
lococo
2020-03-18 00:09:45 +08:00
@royzxq 你这么一提醒我还真去试了下,看下是不是以前转成 bind 会导致歧义,而现在不会。但发现并没有,现在 bind 箭头函数也无法改变 this 的指向,因为 this 在箭头函数中被 babel 编译掉了。这么说我还真不明白为什么 babel 会把箭头函数编译生成代码中的 bind 在某个版本后取消掉
chuxiaonan
2020-03-18 00:18:56 +08:00
@lococo
export 是导出时运算
理论上不能算是单例模式(虽然其结果看起来像是只存在了一个实例)
或者换言之 不纯粹
个人觉得比较纯粹的单例应该是形如
new Singleton === new Singleton 这样的 最好有 new 的存在
a87586179
2020-03-18 00:27:26 +08:00
这是没办法的事,我们公司上一年招的前端都是明确要带作品和现场问代码了,现在的前端水分真的很大,招过一个对接口花了两个星期最后只有一个能用的人,后来背调,3 年经验结果发现是学历造假的人,直接开了,现在招的人全都要背调
a87586179
2020-03-18 00:29:42 +08:00
通关面试这些题,通过面试官引导可以引申到很多问题和原理,就可以大概了解这个人的水平和知识面
lococo
2020-03-18 00:32:38 +08:00
@chuxiaonan 嗯,这么看上去好像是很优雅,那我不置可否了,不过这样就有别于其他语言的单例了
dongguangming
2020-03-18 03:18:26 +08:00
悲剧,成了刷题大王
Mutoo
2020-03-18 06:03:13 +08:00
1. 多次 bind 只有第一次有效
2. 相当于 obj1[obj2.toString()] => obj1['[object Object]']
3. 构造函数中返回的结果为取待 jsvm 默认创建的对象作为 new 的返回值。

这些东西不需要 google 我就能答上来,是因为我在多来年开发中累积下来的经验(也许我多年前早就 google 过了。)
毕竟面试的过程就是想挑选有经验的人吧,毕竟业务大家都会写。
再接再励 :D
murmur
2020-03-18 08:28:38 +08:00
习惯就好了,面试本来就是要筛掉一批人,背答案也是能力的一种体现,只要钱给的够,来的人够多他怎么问我们也管不到。。。
xpsilvester
2020-03-18 08:42:17 +08:00
@q8164305 有道理
xianxiaobo
2020-03-18 09:01:19 +08:00
我也最讨厌这种题,也许是前端太多造成的这个局面吧。不过这种公司,不去也罢,多半技术 leader 和你合不来。
yukunYang
2020-03-18 09:06:39 +08:00
@lococo 这可不一定,去 bind 一个 bind 过得函数有极大可能出现,
rioshikelong121
2020-03-18 09:07:42 +08:00
谁这么写代码怕不是早被打死了。
yhxx
2020-03-18 09:08:40 +08:00
虽然我也觉得这几道题没什么意义,不过我觉得你问 webpack 原理和问 bind 原理好像差不多吧
真要说基础的话,bind 好像还更基础一点。。。
你举的几个例子也都是 google 一下就很容易知道的啊

排除网上随便搜几道面试题的那种,大部分人问这种问题应该是想,既然你说你学习能力强,那么证明给我看,JavaScript 基础都不是很熟悉的话,怎么证明学习能力强?
同样你说『善于处理实际问题』,只要能证明给面试官看,我觉得在好公司应该也是没问题的,不会仅仅因为你不知道两次 bind 会发生什么就拒绝你

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/653679

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX