近期我和很多候选人进行了一些交流,在技术交流过程中发现了一些普遍的现象,很多情况候选人都了解存在的问题,但是又不知道如何去弥补这些问题。今天我来和大家一起探讨下,然后提供一些建议,希望能帮助大家。
存在的普遍性问题
在说问题之前,我们先抛出一个面试题,这个面试题设计是由浅入深,看你对知识点的掌握程度。
- 跨域你了解吗,什么是同源;
- 那么跨域有那几种解决方案呢?
- 既然你提到了 jsonp 那么 jsonp 的原理是什么呢?
- 在 iframe 中有 postmessage 来支持跨域,那么其中有什么安全问题呢?
- Access-Control-Allow-Origin 如果来支持多个域名呢?
深度不足
在聊的过程中,有这种场景回答 举个例子
“老师,这个知识点我看过,大概就是这样这样…如果说具体的概念,我用专业的术语说不上来”。 “老师,这个我知道,后面如果需要,Google 下应该就没有问题了”。 “老师,这个知识点,我没有用过,所以我不是很了解”。
这里问题就在于大家平时没有注重积累,看知识点不能只是看了就结束了,应该要注重练习实践。正好最近上了一个陈振平老师的课,里面有一个叫做 费曼学习法
- 被动学习,最多只能留存 30%,而主动学习最低 50%,最高 90%
- 你看文章,其实只能留存 10% ,也就是对知识点有一个大概的认识,也就是我们第一个人回答的问题
- 主动学习包括,讨论、实践、传授他人,也就是如果你能和别人探讨这个知识点,那么你可以留存 50%,如果你能亲自实践,比如跨域解决方案,你能自我实现那么你能留存 70%,而如果你可以把这个知识点写文章传授出来,那么你基本就掌握了,并且几乎不会忘记。
只掌握自己工作层面的知识
同样上面的问题,在遇到第五个问题时,有些同学会这样回答我
“老师,那一般是后端处理的,所以这块我不是很了解”
如果你这样回答,那么在面试过程中会大大的减分,先不论这个知识点前后端区分,即使是后端的知识点,你对跨域整个知识体系来说也是应该需要掌握的。 同样的,我们会面临很多这类问题,又比如网络相关的,我们都听过一个面试题
从 URL 输入到浏览器之后,浏览器发生了什么
这个问题时非常常见的,那么把问题改进一下
如果有用户反馈网页响应慢,那么从你角度思考下,这中间会有哪些原因呢,并且应该如何来定位
很多同学这时候就会说包体积如何优化,图片资源怎么加载,页面结构应该如何布局等等。当然这也没有错,只是不够全面,应该先从 DNS 、再到 HTTP 、再到缓存等知识、然后再到页面性能等。 这时候如果 DNS 存在问题,应该如何定位呢?很多东西就会反馈给我,不了解,又或者说三次握手如何定位快和慢呢? 往往没有注重这些知识的积累,专注在前端知识点了,
系统化实践不足
这个就是我们上面说过的,这个知识点我没有用过,所以我不了解,当然这样诚实回答是最好的。 这里的核心问题就是平时缺乏实践,特别对于一些常见的知识点,需要进行实践。针对比较常见的知识点一定要进行实践应用,也就是我们费曼学习法中,必须要通过实践来掌握 70% 的知识点。
性能方面欠缺
大部分同学都是说自己长期做业务,所以这块目前了解不多,或者实践经验较少。简历中常常也会说优化了什么,但是深入一问,优化的数据是从多少到多少,数据怎么来的,优化过程时怎么样的,能回答上来的也就寥寥无几了。 而这个原因可能会自己的业务有关,其次也存在没有很好的引路人,导致的问题。
架构方面思考不足
平时我喜欢问一下开放性问题,比如
如果让你来实现一个扫码登录,你觉得应该如何实现? 这中间会存在什么安全性问题? 这个实现过程中融合了哪些技术点?
如果让你实现一个商品详情页面,你觉得应该如何来做? 这中间要注重用户体验,毕竟是访问最多的核心页面,你觉得应该注重哪些细节设计?
这就非常考验一个人的综合能力了,在短时间内看一个人是否能把多个知识点融合。不仅考验一个人的知识点的全面性也考验一个人的临场发挥能力。 当然这属于拔高的面试题,但是大部分前端同学都只能体现前端的设计,对于后端的设计或者整体的方案了解都不会非常充分。
欠缺流程规范
在一个优秀的团队中,流程、制度和规范是非常标准的,大家都是按照流水线搬砖,由此来避免一些常见的低级问题。但是在很多团队里面都没有形成一定的规范,其次也不了解。 比如:团队的协议规范、团队的代码规范、代码 review 规范、代码的 Git 管理规范等等。
那么有这些问题,应该如何来解决呢?
如何针对性解决
- 深度不足和系统化实践不足,这点我上面已经提到了,大家要应用费曼学习法,多进行实践,也可以和同事多讨论,或者写文章来传授;
- 性能方面欠缺考虑,比如在做一个官网需求,大家可以自我思考,我们应该看哪些性能指标,如果性能指标产生问题时,我们应该针对性的进行优化,这样慢慢的你就积累了相关的经验了;
- 架构方面思考不足,平时要注重全面的技术点了解,并做好技术方案,技术方案要参考现有外部的设计方案,设计完成后要考量方案的可行性、安全、性能、资源损耗(人力、机器)等,通过全面的技术方案设计以后,你会对整个架构设计有一个比较全面的了解;
- 流程规范,这个大家就参考下大厂的一些规范和标准,有些可以参照执行一下,无论团队大小,叫做麻雀虽小,五脏俱全。
如果还有其他方面的问题,大家也可以进行交流。