作者Doggyun (汪汪嗷嗷)
看板Soft_Job
标题[心得] 2021前端工程师面试心得
时间Thu Apr 1 05:15:36 2021
帮转,不是我的心得。
要看网志请搜寻李彦杰 2021 前端工程师面试心得 应该就找得到;我贴网址一直失败。
一、前言
先简介一下背景,小弟毕业於112EE,大二的时候开始接触前端,一开始是看线上平台的课程学习,之後大三大四分别进入了三家不同的公司做前端实习生,毕业後做了正职前端工程师大约八个月。这次找工作从二月过完年後开始找工作,总共经历大约一个月的时间。
因为之前受到ptt版友还有一些medium的文章帮助很多,所以趁这个机会来回馈一下,也当作是纪录自己人生的小里程碑。
二、准备
1.leetcode medium 刷了120题左右,不太想刷easy跟hard因为觉得很浪费时间(之後要往senior做准备就会开始刷hard了),不知道从何刷起的话之前在ptt文章有看到一个非常有帮助的连结:
https://leetcode.com/list/xoqag3yj/,这75题几乎囊括了所有类型的题目,一边刷的同时一边复习自己有哪些观念或结构还不熟悉,就再去针对那类型的题目练习。
2.英文我上了一个线上平台的课程(怕被说业配我就不打名字了),每天上三十分钟,持续了大概两个礼拜就去面试了。
我觉得英文这个东西还是趁早开始学比较好,至於甚麽平台真的不要太在意,先开始最重要,先开始最重要,先开始最重要,反正投资自己一定稳赚不赔,与其拿去养胖自己不如多做一点有意义的事:D
3.对你的履历上面提到的专案一定要非常非常熟悉,包括遇到的难点,是怎麽解决的,当时遇到甚麽抉择,因为什麽原因做了这样的决定。除了专案以外最好再准备一个最近看到学到的技术相关的东西,可以是任何东西让你跟别人有差距的,一方面可以告诉面试官你平常都有在学新东西,另一方面可以将话题带往你比较熟悉的方向。
4.剩下的就是一些CSS,JS,React准备,CSS的部分因为我现在上班都是全部自己来,不用auto complete,所以算是蛮熟的了就没有多去准备,剩下的JS跟React只能说看到甚麽学甚麽,底下有几个我很推荐的连结有兴趣可以看一下(如果有作者不希望我放连结请通知我谢谢):
Web rendering
https://developers.google.com/web/updates/2019/02/rendering-on-the-web
Web performance
https://developers.google.com/web/updates/2018/08/web-performance-made-easy
Netflix 网站优化
https://medium.com/dev-channel/a-netflix-web-performance-case-study-c0bcde26a9d9
Event loop
https://pjchender.blogspot.com/2017/08/javascript-learn-event-loop-stack-queue.html
如果不知道自己哪里不足可以看这个
https://zhuanlan.zhihu.com/p/143611353
三、面试心得
升鼎科技
一面:
总共分成四个阶段
第一个阶段写了一题easy的leetcode,写完之後追加follow up问有没有更好的时间复杂度或空间复杂度,算是很简单的题目,有把javascript的Map跟Set是怎麽操作的好好学起来应该不是大问题。
第二和第三个阶段主要聊了一下之前的经验,还有现在公司的产品主要负责的部分,还有之後想要发展的方向,整体聊起来的感觉非常的好,非常工程师的聊天,让我觉得他们是真心想要跟我合作的,而不只是单纯在考我问题。
最後一个阶段跟HR聊了一下期待薪资,福利等等。
结果:offer get,氛围非常好,但是因为接受了其他 offer 所以婉拒了。
Appier
一面:online interview
由三位不同team的前端来面试,主要写了一点code,还问了一些基本的css,有答应面试官不透露题目,所以就不细讲了,之前有看过类似的像这题:
https://github.com/lgwebdream/FE-Interview/issues/21
有兴趣的可以研究一下,就是看你js的程如何。
二面:onsite interview
由三位同个team的成员来面试,一样问了一些背景相关的知识,之後问了一个React怎麽做data binding,然後当场我就愣住了,我好像都是自己做binding,就乱回答了一通说给一个input怎麽做bind的,这好像也不是面试官想要听的答案,之後又问了会不会写後端跟App,感觉是需要一个通才,面完的当下就觉得大概是没过了,还需要好好加强自己的基本功,然後多碰一点後端的东西。
结果:感谢信。
优拓科技
这间的老板ric是我大学时期有修过课的教授,他的data structure在敝系是出了名的硬,来之前就觉得应该不会很简单,所以抱着学习的心态来这家公司面试。
一面:onsite interview
先简单的介绍了一下自己之後,开始问技术相关的问题,印象比较深刻的是问了一个如果今天在做一个操作很大的回圈,导致画面会卡顿,该怎麽办?
我没有在前端操作过巨量的运算,所以算是问到了一个我的知识盲点,後来面试官看我不会就跟我讲了可以的解法,大概就是把回圈拆开来,或是把运算拆开,用setInterval去做,很像React Fiber的操作,就是每更新一个node就去检查一下时间超过了没,没超过就继续做,超过了就停下来先去做比较重要的事。其实很多问题大概都可以回答个五到六成,但是面试官在听你解释问题的时候其实也能听得出来你有几两重,所以还是多充实自己,遇到问题就去通盘了解,被问到的时候才可以给出比较全面的回答。
结果:感谢信,tech lead 还在信中跟我说到「顶尖的前端工程师不仅仅只是会前端,他们是通才,只是选择在前端领域更加专精」,真的让我很感动,他们是很认真的在招揽人才,只可惜我还没到那个境界。
HaHow
零面:phone interview
时间大概半小时,简单问了一下之前的背景,现在的工作负责什麽项目,有没有遇到什麽困难,怎麽解决。
作业:
写一个无限滚动的介面,最近很多间公司都会希望手刻无限滚动,可以参考一下ObserverIntersectionAPI,这个Web API同时也能拿来做lazyloading,有兴趣的可以研究一下。
一面:
原本预定要有两个阶段,分别是RD team还有PM会来面试,结果RD面完就说PM有个临时会议中断了。
RD team考了一题费氏数列,问了一些JS的问题,还问了React的Virtual Dom是怎麽做的,我把React16的Fiber架构大概讲了一遍,结果被问到如果React在commit阶段就超过了时间那还是会卡顿要怎麽办,我当下就卡住了,我的内心想法是那应该没办法吧,但我又觉得commit阶段真的会超过时间吗?
然後就一边纠结一边回答我不知道XD之後还问了一题React在做map的时候会需要加上一个key,加这个key的目的是什麽?完了又是一个我之前遇到但是没有彻底搞懂的东西,结果又乱答一通。
结果:无声卡,整个面试的流程非常冗长,建议如果有想要去试试看的可以提早投。
Line Taiwan
OA:
总共十题两个小时,前三题是coding题目,第四题问事件捕捉,事件冒泡,後面几题都是问答题。整体来说难度应该算中间偏上,但是因为用他们家的系统所以难度直接拉高一个等级,输入输出都要自己来,连test case都要自己想,我原本以为这种OA都是要全对才会过,写完当下觉得自己肯定过不了了,结果来了一面的通知让我吓一大跳XD
一面:
简单做了自我介绍,讲了一下现在在用的技术,现在负责做什麽,然後针对OA的题目做了一些讨论,特别说一下我觉得这样才有在重视求职者,很多公司发了OA或作业,面试时完全都没提到,虽然说对公司来说可能就只是筛人的门槛,但是对求职者来说也是付出了时间,又没拿报酬,给个回馈我觉得应该不算是太过分。之後有着重问了Web performance相关的东西,因为之前刚好有做到所以还算回答的顺畅。
二面:
这关由Hiring Manager来面试,主要是聊之前的专案经验,跟技术比较无关,比较偏向想法类型,这类型的面试对我来说蛮有趣的,可以跟面试官交流彼此想法,各种类型的问题都有可能在这关被问到,像是我现在的专案没有写测试,就被问了如果我要跟PM解释测试的价值,那我会怎麽说?
那如果你因为时间不够,只能加部分测试,你觉得你要怎麽加,你要加哪种测试?
像是这种问题,可以看出你的沟通能力还有思路够不够清晰,我觉得非常的专业,这是我理想中面试官的样子。
三面:
原本二面的面试官跟我说二面就是最後一面了,所以我收到三面通知的时候还蛮疑惑的。
不过也因为这时候我决定去Bytedance了,所以就没有参加三面了,Line给我的面试体验真的是非常好(除了OA那个系统很难用之外)。
结果:收到其他offer婉拒三面。
Bytedance(Singapore)
总共三轮技术面+一轮HR,每轮都45分钟左右
一面:
有特别要求所以是中文面试,比较特别的是这关的面试官似乎连我的履历都没看,上来自我介绍完之後就是题目轰炸,问得非常仔细,像是javascript和React差别,function component 跟 class component 差别,闭包等等,而且每个问题都有follow up,只知道表面肯定会倒,最後考了一题medium左右的leetcode,给你一颗binary tree,tree node的结构包含parent, left, right,给你两个节点p, q,请问p与q的距离是多少?
我先给了一个 dfs的解答,时间复杂度O(n),之後面试官追问只要是一个map都可以用dfs来做,既然我给你了一个binary tree,有没有更好的办法,之後就给了一个往上找parent然後记起来的解法,时间复杂度O(log(n))。
二面:
有特别要求所以是中文面试,这关主要针对你的履历问相关的问题,这里停留了蛮久的效能优化问题,还问了现在做的项目中比较困难的部分,针对这个部分面试官再出follow up,主要也是技术相关的问题居多,最後问了一题应该也是medium的题,给你一个array,里面的每个元素都是一个object,
object包含id和next,请你按照上一个元素的next是下一个元素的id做排序,可以假设题目一定正确且只有一个正确解答。题目描述有点复杂但不是一个太难的题目,我一开始给了一个O(n )的解答,之後用了两个Map把元素都记起来,时间复杂度O(n),这个做法不是很漂亮但只要时间复杂度对了应该就给过。题外话前两关的coding题如果没过大概率就没下文了,要想办法在10分钟内想出完美解答还是有点难度的,可以试着先给比较烂的解答,给的同时顺便想一下等一下要怎麽改,可以帮你增加一点信心的同时多延长一点时间。
三面:
这关规定一定要用英文,所以英文至少要能够沟通,由Hiring Manager来面试,先做了自我介绍之後针对经验问了一些问题,之後总共问了三个大问题,第一个你打完网址按下enter之後发生了什麽事,这个问题网路上的资源非常的多,重点在於你能回答得多细,像我中间对DNS解析没有过多研究,就被问DNS具体是怎麽解析的,我只能回答到从後面解析到前面,具体是用什麽演算法,怎麽比对,我当时都没有研究过,算是乱回答了一通。第二题问CORS是什麽,我回答了一些简单请求,预检的规则以後,接着问CORS有什麽优点跟缺点,我就举了古早的Proxy Server
跟jsonp等这些方法跟CORS做比较,之後又接着问CORS有没有什麽安全性上的问题,然後我就倒了:(,让我了解自己对於这个问题没有研究透彻,在研究问题的时候就应该要有这种穷追猛打的精神。最後一个问题javascript的hash map具体是怎麽实作的,还好我之前大学在上课的时候有自己刻过,就回答了一些hash function, collision,还提到如果碰撞超过8个会从link list转成红黑树,接着就被问如果被转成树要怎麽确定hash
map查找的时间复杂度是O(1),我脑中想着红黑数最快也要O(log(n))呀那到底是怎麽找的,然後我就又乱扯了一通。我都觉得我可能要在这关倒了,结果面试官直接跟我说觉得我的表现蛮好的,但是如果以後要来新加坡工作要好好练英文XD算是松了一口气。
HR面:
这关也是一定要用英文面试,原本其实我很担心,以为会问很多behavior question,结果比较像是在闲聊,聊一些为什麽要来这间公司,期望薪资是多少等等这些,没有问什麽很刁难的题目,HR给人的感觉也很亲切。大概两天之後就通知我有确定的offer了。
结果:offer get,整体面试下来的强度算是很够的,每次大约一个小时的过程中一直在输出大量的资讯,面试官也会给足feedback然後再接着问follow question,所以平常的阅读量真的蛮重要的,非常有可能一不小心就会问到你不会的东西,尽管你没准备到但是依然能回答个三四成。
四、总结
我觉得面试有个很有趣的地方就是可以检视自己还有哪些不足,平常上班可能都在操作熟悉的环境,熟悉的代码,很有可能有某部分东西自己一直在用但是没有搞懂过,可以透过这个机会让自己再精进一点。然後我很喜欢一句话:「不难,要你干嘛?」所以在准备的时候还有平常再写code的时候尽量让自己的思考再深入一点,以此勉励自己,继续朝着顶尖前端工程师的路上前进。
-----
Sent from JPTT on my iPhone
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.194.42.34 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1617225338.A.53C.html
1F:推 taipoo: 补推给你 04/01 07:11
2F:推 aaa1234136: 分享推推 04/01 07:16
3F:推 azureroki: 问一下前端到底算法重要还是框架知识重要 04/01 08:06
4F:→ hegemon: 前端算法不重要呀...重点是你对基础css, html+框架熟不熟 04/01 08:30
5F:推 tbpfs: 112EE 还收那麽多感谢信,这些公司也太有趣了吧 04/01 08:50
6F:→ tbpfs: 直接去面tier 1的大公司,或许都比较好进 04/01 08:51
7F:推 Aroeman: 只能说近年面试下来前端刷题 04/01 08:56
8F:→ Aroeman: 框架 js css html 都会频繁考 04/01 08:56
9F:推 iceman5566: 那几间无声卡跟感谢信 里面到底是有多强呀 呵呵 04/01 09:14
10F:推 hduek153: 去科技业可能不用干嘛就进去了 04/01 09:25
11F:→ hduek153: 然後薪水可能还屌打 04/01 09:25
12F:→ gonjay: 请问在科技业是不是比较少前端职缺? 04/01 10:09
13F:推 summerleaves: 分享推 04/01 10:33
14F:→ kangan987: 也考太多算法…… 04/01 10:47
15F:推 chatnoir: 不会啊, 我记得台积跟联发科都有前端缺啊 04/01 10:56
16F:推 andy1673595: Nice.... 04/01 11:32
17F:推 Sofya: 请问Bytedance一面题目是假设Binary tree还是BST? 04/01 11:38
18F:→ Sofya: 普通Binary tree怎麽给出O(log(n))解法? 04/01 11:38
19F:推 nek0t1m: binary lifting可以到O(logN), 但要preprocess 04/01 12:15
20F:推 c910320: 台大电机为什麽要来挤前端 04/01 12:17
21F:推 xxhomey: 推谢谢分享 04/01 12:29
22F:推 ldkrsi: 感觉leetcode练习太多了 browser+framework熟的效益比较高 04/01 12:41
23F:→ ldkrsi: 有些感谢信应该是小庙容不下大佛 觉得收你後半年就跑了 04/01 12:42
24F:→ shaomi: 能请教是在职还是离职找工作吗?觉得在职要请一堆假去找 04/01 12:46
25F:→ shaomi: 有点痛苦 04/01 12:46
26F:推 edison51501: 推 04/01 12:54
27F:→ robber1234: EE做前端 科科 04/01 13:14
28F:推 blackmaninEE: 推详细 04/01 13:18
29F:→ shooter555: 112EE做前端 不是应该要去faang 04/01 13:37
30F:推 f763guy: 小庙容不下大佛+1,去科技业可能不用干嘛就进去了 04/01 14:56
32F:推 andrewking: 推 04/01 15:07
33F:推 joey11121: 李哥快去LCS加入FANG战队吧 04/01 15:09
34F:推 zxc25678: 某几楼笑死 要不要112EE不用面试直接录取算了 04/01 15:37
35F:推 scott0002: 有时候求职也是挺吃缘分的 04/01 17:00
36F:推 Bigbirds: 推 04/01 17:54
37F:推 jackkao1: 推 04/01 18:13
38F:→ Hsins: 发 offer 又不是只需要衡量学经历和能力,有时候考量可能是 04/01 18:45
39F:→ Hsins: 小庙容不下大佛或是企业与面试者期望的部分(不只是薪水, 04/01 18:45
40F:→ Hsins: 还有团队文化和技术架构甚至职涯规划)相左呀… 04/01 18:45
41F:推 arhtur945: 讲学历又要战来战去不会很累吗 04/01 19:38
42F:推 momo0215: 推分享 04/02 05:55
43F:推 jack529: 推,是说这波bytedance 也太多了吧,感觉你们都可以开同 04/02 11:27
44F:→ jack529: 学会了XD 04/02 11:27
45F:推 DrTech: 观念非常正确 04/02 12:10
46F:→ superpandal: 带往熟悉的方向仅限於面试官也有兴趣或懂 不然只会收 04/02 21:02
47F:→ superpandal: 到冷冷的回应 这还是太过正面的面试情况 04/02 21:03
48F:→ superpandal: 果然还是觉得粉饰太平有点别扭 04/02 21:09
49F:推 lohsts: 推 04/03 17:56
50F:推 Gringoire: 推 04/04 11:12
51F:推 morriliu: 推 04/10 10:14
52F:推 hhow09: 推 04/20 00:52