编者按:对于开发者来说,找工作最难的莫过于技术面试。Fredrik Strand Oseberg在freeCodeCamp上发表了一篇文章,介绍了自己学习编程6个月后找工作获得5个offer的经历。文章由36氪编译。
从编程挑战中获得的信息是:
越短越好,只要它总是可读的
在性能方面,最好将查询选择器置于事件监听器回调函数之外(只调用一次,而不是每次都触发)
性能方面,getElementById和getElementByClassName比querySelector更好
第二天,我接到了经理的电话。我通过了面试,他们想给我一个机会。我本可以在这里停下来,不用参加其他的面试了。我可以说:“我已经拿到了一个offer,这已经足够了。”
但我做了相反的事情。
我打电话给所有我正在面试的公司,并告诉他们我已经收到了一个offer,并问他们是否可以加快进程,因为我现在有时间限制。
面试,尤其是技术面试,都是很艰难的心理考验。如果你一直在展示,面试官将期待你的表现能够超越预期。这很难。那么我为什么要这么做呢?
原因有四个。
1、我想向自己证明,这不是运气。
2、我想要尊重每一个给我面试机会的人,给他们一个公平的机会。
3、我想确保自己找到了适合自己的公司,让我成为一名开发人员。
4、为了你们,这个社区对我的帮助很大,我想从技术面试中获得尽可能多的信息,这样你们就可以从我的错误中吸取教训,并做出相应的准备。
我对我从freeCodeCamp获得的帮助和支持感到惭愧,我想要回报。
在与其他公司取得联系,并表明我获得了一家顶级公司的offer后,很多公司都迫不及待地想让我通过面试。在一周内,我完成了几次技术面试。
以下是第三次技术面试中的一些问题:
你是如何学习React的?你为什么要学习它?这有什么好处?
Redux是如何工作的?这个API由什么组成的?什么是不变性?不变性的好处是什么?
你将如何重新设计我们的网页?
你如何处理更深层次的应用程序?例如后端?
你自己做测试吗?什么是单元测试?
对你来说,什么是好的用户体验?
如何测试用户体验?
这次面试中的编程挑战是基于CSS的。
我收到了一张纸,上面有一些CSS规则,看起来是这样的:
<div id=menu class=dropdown-menu></div> // HTML Element
// CSS Rules
#menu {
color: black;
}.dropdown-menu {
color: green;
}div {
color: blue;
}
我的任务是解释我所看到的。我立即识别了了HTML Element并告诉面试官,element上的id和class可以在CSS中使用,以选择HTML Element。在这里,我解释说CSS是级联的,这意味着通常最后一条规则将适用。然而,在这种情况下,选择器有不同的权重。顺序如下所示:id> class>element。
这意味着,在上面的示例中,黑色将被应用到HTML Element中。
这是我进行的最后一次技术面试。虽然它仍然很伤脑筋,但现在我已经习惯了。下面是我们讨论的内容:
建立一个基本的网站。确定其中的组件。
你如何让它响应?
如何将文本垂直和水平居中?
什么是CSS框模型?内容框和边框之间的区别是什么?
React有什么好处?
array.forEach在for循环中的好处是什么?有没有可能需要使用for循环的情况?
编程挑战是建立一个不同程度难度的wordwrap函数。想象一下,你只能在屏幕上放20个字符,如果你超过它,你就得从一个新行开始。
我对这个问题的原始解决方案涉及拆分字符串,使用计数器和模数运算符来确定计数是否为20,然后在数组中插入一个换行符并加入字符串。
然后,任务难度增加了,只允许全部单词排成一行。也就是说,如果一个单词导致总数超过20,那么需要在单词前面插入一个换行符。
我在面试中并没有完全解决这个问题,但我的思路是正确的。在我不确定的时候,我使用了MDN,并且我取得了很好的进展。
这就足够了。
我不能把它写下来,如果你感兴趣的话,这里有一个解决的版本:
function wordWrap(str) {
let totalCount = 0;
const arr = str.split(' '), formattedStr =
arr.forEach((word, index) => {
totalCount += word.length;
if (totalCount >= 20) {
formattedStr.push('\n', word, ' '); totalCount = word.length;
} else {
formattedStr.push(word, ' ');
}
}); return formattedStr.join('');
}
如果看到了这里,恭喜你。这是一个漫长的过程。我尽可能提供更多的信息,希望它能帮助像你这样的人。
这样做的结果是,我陷入了一个我从未想过的境地。最后,我有5个offer可供选择。一家大公司甚至给我提供了一个“blind”offer,不管竞争对手给我多少钱,它都能更高。我最终选择了我第一次通过技术面试的公司,因为我相信这对我来说是最合适的。
技术面试可能是一场艰苦的精神折磨。你会受到挑战,你会被带出你的舒适区,这是一件好事。它能帮助你成长。它会让你变得更好。
如果你准备好了,你就能有所收获。
所以从我的经验来看,不要回避技术面试。不要因为你失败了就放弃。不要认为这是你作为开发者的终极衡量标准。它不是。它只是公司用来衡量你的生产力的最简单的工具。
申请工作。准备好。参加技术面试。从错误中学习。不断重复这一过程。
如果你这样做,我保证你会成功。
编译组出品。编辑:郝鹏程
相关阅读:
|
|
|
|
|
|
文章标签:
刘备(161年-223年6月10日),字玄德,东汉末年幽州涿郡涿县(今河北省涿州市)人,西汉中山靖王刘胜的后代,三国时期蜀汉开国皇帝、政治家,史家又称他为先主。刘备少年时拜卢植为师,而后参与镇压黄巾起义。先后率军救援北海相孔融、徐州牧陶谦等。陶谦病亡后,将徐州让与刘备。刘备早年颠沛流离,备尝艰辛,投靠过多个诸侯。赤壁之战时,与孙权联盟击败曹操,趁势夺取荆州。而后进取益州。于章武元年(221年)在成都称帝,国号汉,史称蜀或蜀汉。《三国志》评刘备的机权干略不及曹操,但其弘毅宽厚,知人待士,百折不挠,终成帝业。刘备也称自己做事“每与操反,事乃成尔”。