最近在面了些厂,几乎全部挂在偏门基础上,如下举例
···
这些题无一例外,全是抖机灵得考你对某个细节知识的掌控,例如 bind 的底层原理?类型转换? new 的原理?
我不否认这些原理和基础很重要,但试问
面试题难道不应该基于实际的业务场景?哪个最佳实践会让你这么写代码?
偏门的知识点永远不能体现任何问题,这些问题除了能在刷题的时候遇到,能解决什么实际问题?即使实际遇到了,难道不是 google 一下就可以解决的事情?
你问我什么问题不能 google 一下解决?那就是你不知道坑在哪你就找不到方向的问题,例如 eventloop,webpack 的打包原理,http/https/h2 的各种协议问题
所以这些面试题除了可以让那些刷过大量面试题的童鞋欣喜以外,反而会让我们这些善于处理实际问题,而对很多偏门细节知识点掌握不好的童鞋感到头疼
好了,不说了,我刷提去了
1
ricky0603 2020-03-17 20:59:55 +08:00 via Android
我们也在招前端,欢迎楼主了解一下: https://v2ex.com/t/653499#reply23
|
2
musi 2020-03-17 21:00:13 +08:00
大佬在哪刷题带我一个
|
3
daquandiao2 2020-03-17 21:02:10 +08:00 via Android
前端人太多了啊 不这么做一堆能过的
|
4
dilu 2020-03-17 21:02:41 +08:00 9
举个例子,lz 现在去相亲
你结婚只能给 5w 彩礼,房子是借钱首付 对方姑娘长得很丑,你说不行 人家姑娘骂骂咧咧的走了,一边走一边说:难道相亲不应该看能不能生孩子,我能生孩子不就行了? 要颜值干嘛?能解决什么实际问题?长得好看不用洗衣服做家务?就算有问题,花钱找人解决不就行了? 一个道理,谁都想花最少的钱娶最漂亮的媳妇。市场会自己调节供需关系的。 |
5
weixiangzhe 2020-03-17 21:03:07 +08:00
你多刷点题就会发现,这些是很常见问题,问这些问题都可以笑出声那种
|
6
ayase252 2020-03-17 21:04:08 +08:00 via iPhone
确实,如果让我问的话,我也不会问这种东西。实际里谁这么写代码早被同事打死了。
|
7
Ch2x 2020-03-17 21:04:35 +08:00
争取做个大佬,去问别人,而不是别人问你
|
10
q8164305 2020-03-17 21:08:34 +08:00 via Android
刷题吧
|
11
lococo OP @daquandiao2 可能是我屁股决定脑袋,没有在大厂呆过,体会不到大厂的处境
|
12
q8164305 2020-03-17 21:13:22 +08:00 via Android 3
你想想,中国高考就是刷题上去的,那一旦这些刷题的人掌握话语权,一定会沿袭他们成功的套路,这是整个教育环境决定的
|
13
C1mple 2020-03-17 21:15:17 +08:00 via Android
不算啥,答上了照样有可能挂
|
15
anianj 2020-03-17 21:26:49 +08:00
这三题,我都没刷过,凭经验,三题我都能答对
|
17
royzxq 2020-03-17 21:30:43 +08:00
用中学老师话讲,送分题给你你都不要。 这些但凡看看面经都是白拿的分干嘛不要?
你说 bind 实际中不会遇到是么, 那要是不知道 bind 是怎么回事, 你给箭头函数再 call 一次死活改变不了上下文,不还得去查是不是? |
20
royzxq 2020-03-17 21:34:11 +08:00
面试不会因为特别偏门的题就直接挂,要挂也是基础掌握的不够扎实或者经历确实不够亮眼。
另外大家都善于处理实际问题的情况下,人家凭什么不选择基础更为扎实的呢? |
21
royzxq 2020-03-17 21:36:20 +08:00 1
@lococo 这个问题我一定会问的,这个问题会引出 bind 的实现, 引出 bind 的实现就一定会问到 call 和 apply,然后还会涉及到闭包。 看似只问一个问题,其实中间能涉及到很多点,包括闭包还能继续引下去。如果你以为面试官真的只想考察这个你以为偏的知识点,那就真的是理解错了 。
|
22
Justin13 2020-03-17 21:37:27 +08:00 via Android
说实话,我也认为这些偏门知识没大用,正常写代码根本不会写出这种代码。
有些地方知道有坑就好了,写代码时绕着走,而不是非得整的清清楚楚,这个坑有多深,是三角形的还是四边形的,有意义么? |
23
royzxq 2020-03-17 21:38:58 +08:00
另外,只看面经也只能答出一部分题,如果觉得这个人可能是背的面经。直接要求手撕代码就完事儿了,面经可背,手撕问点业务中实际存在的、不难但是可以考察出真材实料的问题一样可以过滤掉背题选手选出真正靠谱的。
如果你真的觉得没必要问这些,你完全可以要求面试官问一些涉及到具体场景的然后进入你自己的节奏啊。 |
24
lococo OP 有些童鞋不明白三道题的点在哪里,这里说明一下:
1. 连续两次的 bind 无意义,而且有歧义 2. obj 的变量赋值需要字符串,如果变量是 obj 的话很傻 3. constructor 的写法一定不需要 return,除非你的 constructor 别有用心,那样会有歧义 |
25
rabbbit 2020-03-17 21:43:06 +08:00
看干什么把,如果是造轮子的话基础的确挺重要的.
不过第一题我也不会,没试过 bind 两次. |
26
ianva 2020-03-17 21:44:46 +08:00 3
这种面试没有意义,这些机制上语言带来的,原因上在于语言有缺陷,而不是有多优雅,就像那本 JavaScript 精华部分那样,而这类的问题不应该由人去解决,所以道格拉斯弄出的 JSlint,直到现在发展出 eslint。在现在这个阶段来说语言也似乎不是问题,前端可选的也越来越多,所以这类的问题,最没有价值
|
27
rabbbit 2020-03-17 21:45:08 +08:00
话说回来,有办法在外面函数是否已经被 bind 吗?
|
28
rabbbit 2020-03-17 21:45:41 +08:00
函数 -> 检测函数
|
29
royzxq 2020-03-17 21:48:56 +08:00
楼上大佬太多。那我想请教一下各位大佬,在面对蛮多候选人的时候,除了结合候选人经历 /项目之外,如何快速高效的在几十分钟到几个小时的时间内对候选人做出一个相对合理的评判。
|
31
ianva 2020-03-17 21:58:54 +08:00
另外造轮子和语言的特性是没有关联的,就像 SICP 里那样,用 scheme 这种非常精简的语言中的很小一部分特性,去不断的一层一层实现抽象,哪怕构建语言也上从需要出发。
造轮子考验的的对平台的熟悉,很多框架的熟悉,不同语言的熟悉,在这基础上,提出需求,并不断分析需求,实现他,其实是一个自己发现问题,寻找方案,制定方案,实现方案的过程,语言在只是工具,复杂难懂的工具并不会提供太多帮助。 |
32
myl0204 2020-03-17 21:59:41 +08:00 via Android
最近也在面试,不喜欢刷题也没有去刷题,靠平时的积累硬着头面试
|
33
lococo OP @royzxq bind 的实现原理真的很重要么?原谅我写了 5 年 js,bind 用过无数次,但从来没有关心过 bind 的底层是如何去实现的。而相反,我在面试的时候更偏向问下 webpack 的原理,知道的越细,在做优化的时候方向就会更多
|
35
lococo OP @royzxq 不不不,我的意思我想不到任意一个需要知道 bind 的原理才可以解决的实际问题,一旦脱离实际业务了,问题本身就没有太大意义了
|
37
ufan0 2020-03-17 22:29:05 +08:00
我一后端应届,
当初遇见这些偏门问题不会,好,我去学; 然后问我框架,我不大熟练,我继续去学吧; 再然后好点的公司,基础要求高,我就看了好几本书,感觉还行; 过关斩将,现在,被挂学历...... 现在市场这么饱和的吗?那么点工资的岗位都是硕士和本科生竞争。 |
38
lococo OP @ufan0 hhh,心疼,学历真的蛮重要,沙子里挑金子是很困难的,所以我宁愿把那些沙子里的金子和沙子一起丢掉,也不愿意耗精力去筛选
|
39
ufan0 2020-03-17 22:35:00 +08:00
@lococo 欸,道理我懂,我认同好大学人才更多。
但是两次都是技术面很 happy,和 HR 面也没问题,但是就挂了,挺难受的。 HR 给的回复:疫情期间,HC 缩减,要求会更高,更青睐于 985/211. |
40
chuxiaonan 2020-03-17 22:47:53 +08:00
除了第一题 第 2/3 题平时还是比较常见和基础的吧...
我在想面试官是不是在考一些开发中可能踩过的坑? 比如他第二题 可能就是不小心用了一个 object 去赋值取值 第三题是单例模式的实现方法 第一题可能是上古某个时代的 babel 还是什么的转码器 会把类里面的 func = () => {} 这种的 shorthand 定义转写为 func.bind(this) 如果那个时候没有研究过转码后的代码 很可能会不清楚这个机制 导致在 ctor 里重复定义 this.func = this.func.bind(this) |
41
lipeiwei 2020-03-17 23:09:56 +08:00 1
这题我都没刷过,但都答得出来
第一题问的是 bind,实质上可以引申到整个 this 机制 第二题是 object 的 key 只能是 string 或者 symbol,所以这里涉及到类型转换( obj2 转换成 string 类型) 第三题,这种就是构造函数的返回值是引用类型的情况了 把《 javascript 高级程序设计》跟《你不知道的 javascript 》上中下 都看一遍吧,就会很清晰 |
42
lococo OP @chuxiaonan bable 刚出来的时候的确会这么转换,也不知道哪个版本后面就改掉了,但连续两次这种 bind 的问法还是很奇怪;关于你说的单例,我到觉得完全没有必要这么去实现,还不如直接 export 一个实例来的更有意义;
|
44
wyz123723 2020-03-17 23:16:19 +08:00
哈哈,这些我都会问. 不问这些还要问什么呢?楼主说问实际的业务问题。但是问实际的业务问题你考虑过这些吗? 1. 面试者能否有足够能力将业务场景表示清楚?2. 应聘者能否理解你说的业务场景 3.理解以后应聘者能否说出你想要的答案?4.即使不是你想要的答案, 你能否判断他的业务解决方案就一定弱于你的解决方案呢?
|
45
autoxbc 2020-03-17 23:16:35 +08:00
有些人的代码只是凑巧能运行,并不是他们真的知道怎么做,和楼主共勉
|
47
lococo OP @wyz123723 问些大的方向,例如协议,常用工具这些都可以从大自小问道很细,而且很实用。而小的点很多我都知道有坑,但具体坑是怎么挖的我要自己试过才知道,例如第二问的类型转换,我知道类型转换是个坑,但我从来不会去关心怎么转,只知道避开就好
|
48
lococo OP @royzxq 你这么一提醒我还真去试了下,看下是不是以前转成 bind 会导致歧义,而现在不会。但发现并没有,现在 bind 箭头函数也无法改变 this 的指向,因为 this 在箭头函数中被 babel 编译掉了。这么说我还真不明白为什么 babel 会把箭头函数编译生成代码中的 bind 在某个版本后取消掉
|
49
chuxiaonan 2020-03-18 00:18:56 +08:00
@lococo
export 是导出时运算 理论上不能算是单例模式(虽然其结果看起来像是只存在了一个实例) 或者换言之 不纯粹 个人觉得比较纯粹的单例应该是形如 new Singleton === new Singleton 这样的 最好有 new 的存在 |
50
a87586179 2020-03-18 00:27:26 +08:00
这是没办法的事,我们公司上一年招的前端都是明确要带作品和现场问代码了,现在的前端水分真的很大,招过一个对接口花了两个星期最后只有一个能用的人,后来背调,3 年经验结果发现是学历造假的人,直接开了,现在招的人全都要背调
|
51
a87586179 2020-03-18 00:29:42 +08:00
通关面试这些题,通过面试官引导可以引申到很多问题和原理,就可以大概了解这个人的水平和知识面
|
52
lococo OP @chuxiaonan 嗯,这么看上去好像是很优雅,那我不置可否了,不过这样就有别于其他语言的单例了
|
53
dongguangming 2020-03-18 03:18:26 +08:00
悲剧,成了刷题大王
|
54
Mutoo 2020-03-18 06:03:13 +08:00 6
1. 多次 bind 只有第一次有效
2. 相当于 obj1[obj2.toString()] => obj1['[object Object]'] 3. 构造函数中返回的结果为取待 jsvm 默认创建的对象作为 new 的返回值。 这些东西不需要 google 我就能答上来,是因为我在多来年开发中累积下来的经验(也许我多年前早就 google 过了。) 毕竟面试的过程就是想挑选有经验的人吧,毕竟业务大家都会写。 再接再励 :D |
55
murmur 2020-03-18 08:28:38 +08:00
习惯就好了,面试本来就是要筛掉一批人,背答案也是能力的一种体现,只要钱给的够,来的人够多他怎么问我们也管不到。。。
|
56
xpsilvester 2020-03-18 08:42:17 +08:00
@q8164305 有道理
|
57
xianxiaobo 2020-03-18 09:01:19 +08:00
我也最讨厌这种题,也许是前端太多造成的这个局面吧。不过这种公司,不去也罢,多半技术 leader 和你合不来。
|
59
rioshikelong121 2020-03-18 09:07:42 +08:00
谁这么写代码怕不是早被打死了。
|
60
yhxx 2020-03-18 09:08:40 +08:00
虽然我也觉得这几道题没什么意义,不过我觉得你问 webpack 原理和问 bind 原理好像差不多吧
真要说基础的话,bind 好像还更基础一点。。。 你举的几个例子也都是 google 一下就很容易知道的啊 排除网上随便搜几道面试题的那种,大部分人问这种问题应该是想,既然你说你学习能力强,那么证明给我看,JavaScript 基础都不是很熟悉的话,怎么证明学习能力强? 同样你说『善于处理实际问题』,只要能证明给面试官看,我觉得在好公司应该也是没问题的,不会仅仅因为你不知道两次 bind 会发生什么就拒绝你 |
61
nianyu 2020-03-18 09:16:35 +08:00
这些不是 js 基础,而是 js 套路题. 现在是个面试都要考你这些, 所以你要事先背题刷题
|
62
KuroNekoFan 2020-03-18 09:39:48 +08:00
如果对 js 有比较系统,跟上潮流的的学习是应该要回答出来的
|
63
minglanyu 2020-03-18 09:45:17 +08:00
对于刷题我个人是不主张的,实际项目中总结出的知识才是一直受用的。
写代码也好,找工作也好,我觉得都不是一时的,而是很长时间要做的一件事。 |
64
minglanyu 2020-03-18 09:57:41 +08:00
关于第二题有一些想说的:
“obj1[obj2] = ''会如何? 1. 实际工作中不会这么用。obj 一般会以 string 作为 key,也可以把 symbol 作为 key。 2. 如果真想让 object 作为 key,可以使用 es6 的 Map 类型。 3. localStorage 默认只能存储 string,localforage 支持存储 object,array,blob 等数据类型。 |
66
isleon 2020-03-18 10:23:49 +08:00
我记得以前看过一个乐队的故事:一个出名乐队经常被邀请去演出,但是他们要求的合同里一个角落有这样一项“必须要在舞台后台配备跳跳糖,否则合约失效”。一次演出乐队,乐队的人发现没有跳跳糖,马上要求停止演出。其实这个条约的作用就是故意设的,如果那么无聊的小条款都 OK 了,那么说明演出主办方准备得很负责,普通的音响、伴舞等等方面问题也不大了。
所以面试那么偏是因为 [偏的你都会,那容易的你就肯定会了] 这种原因考查你的知识容量。 还有个原因,跟高考一样,像这种选拔性的考试, [简单的大家都会,偏一点的你也会你才脱颖而出] 。 这个是劳资市场的自然平衡,等他招不到人难度自然会下来,面试的人太多难度自然上来了。 |
67
royzxq 2020-03-18 10:29:15 +08:00 1
偷偷估摸两句,面试中没有答出来的点可能会影响最终的薪资和评级哦(
|
68
MoRun 2020-03-18 10:30:40 +08:00 1
@lococo
1、很多你不能预先知道你使用的函数是否有被 bind 过,多次 bind 这种场景我认为经验丰富的工程师多少遇见过 2、es6 有一种数据结构叫做 Map,那么为何在有 Object 这种 key-value 类型的数据之后还要单独引入一种数据结构呢,对于 Map 有了解的话,自然就能知道 Map 与 Object 的不同,这个题也就知道答案 3、不说了,这种用法很常见,而且你学构造函数的时候就没有对一个函数不需要 return 却能得到返回值有所好奇吗 这几个问题,基础扎实的工程师不需要刷题也能够回答上来,而且引申下去可以聊的点也不少 |
69
redford42 2020-03-18 10:39:15 +08:00
我觉得吧
面试就是面行话... |
70
seki 2020-03-18 10:46:32 +08:00
这些知识作为加分点我觉得还好,如果只因为这些被刷就不合理了。
JS 和 Web 奇奇妙秒的地方太多了,全都涉及到是非常难的。我相信把面试者和面试官角色换位,一样能问出面试官不知道的知识点 |
71
Perry 2020-03-18 10:49:32 +08:00
楼主的观点没问题,确实能有更好的问题来筛选面试者。
|
72
learnshare 2020-03-18 10:51:38 +08:00
面试是为了剔除一部分人,最后选择一个更优的。问什么问题不那么重要
所以看开点,JS/CSS 甚至 HTML 里有很多细节,不熟悉、不了解,甚至没见过都很正常 多刷题或许能得到工作机会,但并不能证明“适合”这份工作 从术业有专攻的角度讲,我更推荐从求职者的工作和项目开始交流,写过的代码以及爬坑的经验才是真实的。背题得到的东西两个月就忘掉了 |
73
learnshare 2020-03-18 11:04:43 +08:00
举一个刁钻的例子
背景: CSS 也算是 GUI 开发里应用最广泛的“语言”,讲到 GUI 就可以深入到计算机图形学,取 CSS 里最常见的颜色部分 问题: 两层元素 底层 (c1=rgb) 上层 (c2=rgba) 叠加之后,呈现为什么颜色? |
74
nazhenhuiyi294 2020-03-18 11:30:53 +08:00
我感觉是,这样出题会变得更容易。业务上很难看出来水平,(如果面试官也是个垃圾的话)。
|
75
Arrowing 2020-03-18 11:49:08 +08:00
1、2 题还算正常。
1 方法绑定了上下文对象,不可再绑定第二次,可参考箭头函数。 2 考察 Object.toString() 3 就算二选一嘛,是返回 obj 还是返回 this 对象,蒙一个呗。 |
76
Yuicon 2020-03-18 12:14:24 +08:00
这种只能看看准备充分不充分 大部分人花几分钟看下就懂了
|
77
humor66 2020-03-18 12:24:23 +08:00
|
78
MorningStar0 2020-03-18 12:49:35 +08:00
我以为自从用了 ES6 和 TS 之后,用到这些的机会就少了面试也没人问,看来还是老套路啊
|
79
meteor957 2020-03-18 14:56:00 +08:00 via Android
没办法,作为应聘者你是乙方 满足甲方的需求即可,除非你来当这个甲方。跟供需也有关系,基础、学历、工作经验、技术广度 、年龄,当供大于求的时候 什么借口都有。裁员的时候同理。
|
81
johnhsm2333 2020-03-18 15:11:42 +08:00
最近刚进行了一遍犀牛书的回顾,你这些问题真的就是真的基础中的基础。看过话,是真的会有一些印象,不确定答案的话也可以向面试官说一下自己的想法,去验证下。
|
82
meathill 2020-03-18 15:42:35 +08:00
第一题没遭遇过,23 都还是常见的。3 结合 Proxy 很常用。
|
83
cjc2017 2020-03-18 15:52:51 +08:00
插眼 看大佬们的回复 get 到了新的知识点
|
84
lizz666 2020-03-18 15:55:22 +08:00
1. this 改为 context2
2. obj1 会多个 '[object Object]' 属性,值为 '' 3. 返回 obj ( obj 是对象的话) 不知道答案是不是这些,这些基础可以刷 高级前端面试 小程序,木易杨写的,我觉得用起来不错 |
85
miniwade514 2020-03-18 18:48:24 +08:00
1. bind 不常用吗?用的时候有没有想过重复 bind 会怎么样?
2. 给对象设置属性不常用吗?用的时候有没有想过对象的 key 可以是哪些类型? 3. 对象实例化不常用吗?用的时候有没有想过内部发生了什么? 哪一个都不“偏”啊。 不要强调“实际场景”,实现能力和基础扎实度,都是必要的。因为基础问题(低级错误)导致的 bug 是最隐蔽最难排查的。 |
86
Tn5ohB1Yecdk3qCK 2020-03-18 18:52:04 +08:00
插眼 后端看完后 又学到了新知识
|
88
hyyou2010 2020-03-18 22:12:22 +08:00
工作中应该尽量使用主流且简单的技术。
举例来说,我甚至觉得原型链不会用都可以,懂也尽量别用。 |
89
szdubinbin 2020-03-19 00:33:04 +08:00
我想 up 主可能会喜欢我这种出面试的~,我给前端出题一般都是给段业务描述然后里面套知识点,避免别人说面试造火箭,譬如“我司要实现一个 xxx 功能,你能否简单实现一下”,里面可能套了节流、防抖知识点,具体根据写的代码可能会考察绑定上下文 /闭包之类的细节,我自己也挺感概的,自己工作这么久还用着应届生方式刷题面试,觉得自己挺水的~~
|
90
catch 2020-03-19 07:53:40 +08:00 via iPhone
这种题可以淘汰一批基础差的人
|
91
ansenJ 2020-03-19 10:17:10 +08:00
以前我也觉得这些题没啥用,但是后来我才发现,
答不出这些题,就没有企业录用你, 所以觉得还是蛮有用的... 虽然工作中用到的的确不多... 但是当你需要的时候, 是要知道有这种东西的存在... |
93
gzwgq222 2020-04-04 11:54:13 +08:00
这三道题感觉都还 OK 吧,也是为了考察候选人。
能做对的就两种情况: 1. 真正理解知识的 2. 刷过题的 不要为了面试而刷题,应该是真的把这一系列的知识点吃透才行,不然每次面试都刷题,多累啊。 吃透了才是自己的。 |