这里接着文章,继续分析,为什么叫面试造飞机,入职拧螺丝
这里,我们首先针对DDD领域驱动模型和Restful风格来举例,后面也会举例Spring以及Redis以及Mysql,这几个也基本上算的上面试常问的吧
其实,大家都知道Restful风格推出来已经很久了,它和传统的风格其实就是多了一个资源的概念,我们通过Restful风格的请求地址,可以在路径上跟分页参数、请求参数、请求id以及使用不同的请求方法(PUT\GET\POST\DELETE\PATCH等),其实这个面试的时候也会问,并且你问面试官贵公司是否使用这个风格,面试官一般统一回答都是是,但是真正进公司,你会发现,他们用的是个啥Restful,完全就只是把传统的请求改了下请求方法,改成了PUT、DELETE而已,丝毫没有资源的概念,把这最为核心的部分直接丢掉,那这还叫什么Restful风格呢
然后这里说下DDD领域驱动模型,很多面试官都会问你是否了解敏捷开发、TDD驱动,因为TDD也可以算是敏捷开发的最好产物了,通过测试用例去配合迭代去完成开发,但是现在又推出了DDD领域驱动,其实针对领域驱动本身是针对大型业务去使用的,例如美团这一类的大厂,一个项目几百个服务,或者一个服务几百个类这种情况,因为这种模式再次使用TDD或者传统都不利于维护了,太杂了,所以会选择使用DDD去抽离核心域、子域这一类的概念。其实真正公司这样的规模使用这个我觉得没认为问题,便于后期维护和扩展嘛,但是你一个单体项目,一个50个类不到的项目,每个类就是crud,你去使用DDD的意义是什么呢?难道只是为了彰显公司在向前沿技术靠近吗?还是说彰显你会DDD模型呢?
以上两个是设计模型上的差距,下面来说下具体代码以及框架源码的一些问题,首当其中就是Spring源码
我相信80%的面试官都是必问Spring源码,以及IOC和AOP以及Bean的生命周期和启动流程。但是我想问的是,这些东西的真的有意义吗,对于5年内工作经验的人,能把API玩熟,能把框架摸完,能把业务写通就已经不错了,你还希望别人去研读源码,去精通源码吗,那么人家为什么不进大厂,还要进你这个小厂呢?更何况,我所写过的项目,我就没有遇到过真正需要重写Aware的,最多也是获取上下文做一些操作而已,那么你问那些Bean的生命周期又有什么意义呢?如果你问循环依赖这些,我还能理解,因为项目中可能真实遇到,以及AOP这些都是能实际用到的,但是Bean的生命周期,真的会随意用到吗,真的有那么多的业务需要在Bean初始化的时候就操作吗
然后,这里继续针对Redis进行分析,博客其实聊到,Redis常问的就是集群结构,缓存失效这一类的问题,但是我想问的是,好多公司项目真的需要Redis集群这么大的业务量,大多数都是单体就够了,那些说的需要集群的,又有多少不是运维塔的,而是需要你一个中高级研发去搞呢?再说缓存过期这件事,我就没见那家公司真的对TTL做了随机数处理,或者真的用了布隆过滤器这个操作(ps:只针对中小型公司),但是面试的时候却要问,还必须要要你回答出来
然后,最后我们分析以下Mysql把,其实Mysql作为一个传统的关系型数据库,基本上已经成为面试必问的存在了,而且问的还很离谱很多,例如:日志的结构、主从结构、索引维护、双写不一致、行锁、表锁这些。但是,大多数公司真的Mysql连索引都没有,一张表都没有,有问题都说直接代码处理,没有那么大的业务量。也不存在什么分库分表,因为根本达不到所谓的千万级数据量,更何况说现在大数据技术这么成熟了,那还需要你Mysql去操作什么呢。当然,对于双写不一致这个情况是真实存在的,解决方案也是各个不一,不管是Mysql和Redis的双写不一致还是Mysql和Es的双写不一致还是其他的,解决方案都是各种各样,简单的复杂的啥都有,但是我似乎就没见啥小公司真的用起来了。。。。。
其实,从以上分析,可以看出,现在的小公司很离谱,自以为是地追求所谓的高新技术,自以为是的去定义所谓的框架,去定义所谓的面试题,然后进来全是理论派,写代码就给你扯一推理论啥的,也根本不会从团队成本、团队发展去考虑,感觉整个团队就他一个人一样
其实,最近看小马哥的视频,觉得真的自己不适合在技术领域一直走吧,大多数人学这一行都只是为了高薪,只是为了好就业而已,根本不是喜欢这一行去学习,就比如我们看Spring源码,看集合源码,我们只是为了面试而已,而小马哥是为了知道这个思想,知道整个流程去看的源码。其实这就是差距,这也就是为什么我们看了就忘,忘了又看一样的,我们似乎在用背古文的方法在背代码。或许,这一行的高度真的是固定的吧,学历或许不是最后一道枷锁,但是热爱肯定是最后一道枷锁
后面,如果大家还想了解什么,可以留言,我这边可以针对某些方向继续分享一些