如今的面试这么卷是正确嘛,编码不应该是思路为主嘛?(使用react router演变例子说明思路的重要性)

398 阅读7分钟

如今的面试有多卷?

又准备到三金四银的黄金期了,想必大家辛苦工作了一年多,Boss不加薪爱画饼的习俗遍地都是。在这样的条件下,相信已经有一部分的同学已经在背《面试官》blog准备年后的跳槽工作。

我也不知道如今的编程界,如何变得如此的卷,也不知道什么时候变得如此的可笑。如今的环境你出去面试。面试官是以一个八卦文的形式给你进行面试,动不动就问你xxx原理,你知道xxx route的原理? 甚至可笑的是有些面试官也不知道他们在问什么。

原理是很重要,但他不是衡量一个人唯一标准

有那么一句话debug5小时等同于文档阅读(懂原理)5分钟。可见原理很重要,但在我的用人方面考虑,懂原理虽然好,但它在我考虑用人方面只占用40%左右的比例。

因为大部分的实际开发过程中,你是完全不用知道原理这东西。能不能解决问题,取决与人的思路,和你对知识点的运用。

当然导致IT界这么卷,我也要谢谢所谓的“培训机构”,你想想有多少非科班的同学卷进来这个行业。你不会一大堆人会。在用人情况,当然是选择会得越多的人来胜任这个岗位。

我也有时候去关注《面试官》问题,但是你会发现,几乎都是问你这一类的问题。

  1. vue如何实现自定义指令呢
  2. MVVM如何实现
  3. 请简单实现双向数据绑定mvvm。
  4. 动不动就叫你手写 xxx (但实际开发过程中,除非你是去大厂,要不你肯定是只用库不手写)

当然我是也会和上面一样问,主要是看简历是不是在作假。有一些原理的东西也会问,但是可能他答得不怎么好,毕竟知识点,每个人的理解能力都不一样,如果非要安装八股文去背书,我们和流水线的工人有什么区别?新生代的代码帮运工(IT界的码农)?

React Router很多人会问原理,怎么实现的。然后因为别人回答不上来就pass了,我感觉这就很奇葩了。你能React Router不应该问问使用者,你为什么要使用他,使用它为你解决了什么问题嘛?实际摸摸良心你们有多少人是因为业务改了React router的库的?

思路才是编程的核心/算法也是

一个程序的是怎么来的?计算机的编译是人机交互。一个程序的好坏,取决与编码人的思路/方案。 每个人都在卷,但是很少人会停下脚本来思考一个问题,我学了这么多东西到底能给我解决什么问题?怎么能简化我现在的工作量。很多人因为vue router 是用config file进行管理的。然后react router v3之前的版本都是用config file 进行管理的。

然后再react router v4的作者,做了一个很神奇的变更,就是不在用config file 进行管理,二十用react-router-dom进行解耦分离。为什么作者要这么做呢?这么做的好处又是什么的?经过我的思考,我发现新版本的Router这么做可以让我们的应用更加灵活。如果你的思路够超前,你可以做更多的事情。

React-Router v4之后为什么不用config来管理路由?使用react-router新特性做模块加载吧 - 掘金 (juejin.cn)

至于React Router的源码还有实现是怎么来的,我现在都还没去了解。我只知道它应该是基于禁止跳转,然后修改url地址,获取pathname去做匹配这里的思路来实现的。如果没有这种库,我估计也会这么自己写一个。

我甚至问了一个很搞笑的问题,React Router你为什么要使用?你是什么场景下想到使用这种模式的。 我更看重的是有没有考虑解决了什么难点,这样人可以为我省下更多的成本。因为他懂得如何偷懒!

当时那个应聘者当场就蒙圈了,他可能会感觉这个面试官是来搞笑的吧,市场都在用的东西,这是一个技术栈。你问我为什么要用它,你来搞笑吧。

然后他说spa,单页面,减少白屏时间。体验好这些方面的回复。虽然这是一方面,也是网上说的最多的点。

但是如果你认真想想之后,你会发现,其实React Router最后解决的也只是React核心思想,组件开发。只不过它使用router的方式替你做了一个层渲染选择器,还有layout的复用。当然这只是我的猜想。

你可以想想,因为nginx是一个高性能的静态代理服务器。为了让它的性能发挥到及至,一般的前端都不会再搭建一个node服务器来做渲染层,webpack已是工程化,你做的项目不可能是以下的模式。

image.png

你会发现这样做,你重复编写的layout工作量变多了。而且每添加一个页面你需要多配置一个page webpack 进行编译。

这个时候你就会考虑是不是可以用一种方式来优化我们的工作量,这个时候就会演变层这种模式

image.png

后面你会发现你要写太多的条件进行编码到达你想获取的page组件。在这个过程,你发现你的组件复用率是提高了,而且你也可以简化webpack的配置来达一个页面渲染不同的页面效果。

但是你还是会发现我需要做的事还是比较多,因为我需要做很多的判断来实现,而且也不好管理。这个时候就有了React Router v1版本的map即我经常说的config。通过一个映射进行条件渲染。也就出现这样关系演变成

image.png

现在的你可以通过不同的key去做判断,来显然不同的page组件。你还是会发现一个问题,就是你在开发过程中,如果你的项目出现问题的时候,你不知道你到底走到了那个page页面出现的错误。

这个时候你后想到一个问题,我有什么方式可以快速的去查看到,这个时候你会注意到浏览器的地址栏...难道你注意的是浏览器的控制台??

也就有了以下的模式,将你的key写在地址栏上,给你看到你现在跑到了那个页面

image.png

至于说的减少白屏,是体检增加了。但是首次白屏也迎面而来。也就有了以后的按需加载。至于说什么spa单页啊那些其实说好听也就是因为这种思路演变过来。解放你的开发过程推荐使用的一种模式。

好了今天也是水文一篇,主要是想告诉大家,原理很重要,但你的思维更加重要。我们做程序的不是IT界的搬运工,而是简化工作的创制者。但是看完原理之后,你有没有想过别人为什么要这么做。。。

今天我也不知道要写点什么。毕竟也快要过年放假了,工作上的心思也不会放得太重,我也是最近几天开始日更博客日志的。还有维护一下我与我家布偶的沙雕b站日常。