CRUDBoy成长计划(1)—当面试官问设计模式的时候说些什么?
注意:
- 本次计划针对有一定工作经验,想要提升技术和工作能力的程序员。
- 关于本计划的详情见:CRUD Boy 成长计划
- 宗旨 首先不做理论知识普及,这样的东西太多了,其次,不做自我感动的事情,看上去学了很久,实际上工作用不到,面试问不到。 最后功利的一点说就是为了提高薪资。为了能够在工作中有更好的表现,将代码写的更好,更易用,更好维护,更优雅。也为了,在下一次面试的时候,能够从一群八股文科举选手中脱颖而出。 归根结底,技术岗位最重要的还是解决问题的能力,而不是背书的能力。 由于每个人的经验都是不可复制的,因此,我们需要互相学习互相探索出一条程序员自我成长的路线。整体方向围绕两个核心 职业素养 和 技术能力开展。既为了现在能够把代码写好,把需求做好,也为了日后能够把牛逼吹好,把薪资谈好。
- 目前入。
开展方式
关于本计划的详情见:CRUD Boy 成长计划
开始本周内容之前再次强调计划开展方式:
- 周一公布专题内容和学习方向,例如:服务器和JVM调优。并对上一周的主题,各位同学的项目案例以及解决方案进行讨论。
- 参于计划的同学,利用周一周二周三做两件事。
- 围绕主题自行查阅相关资料,最好整理成文档,粘贴复制成文档也是ok的。
- 查看自己现在项目中是否有类似的问题。例如:现在架构是什么样的,服务器参数,JVM参数等,未必要全,但是一定要看。 理论是为了实际应用服务的,如果只是花时间看了大量理论,那么就很不划算,一方面没有用过未必能够记得住,另一方面流于表面,真正要用的时候还是不能用到实战中。 例如:工厂设计模式都知道吧?会用吗?在项目中用过吗? 所以第二件事儿就是在项目中找应用场景,未必要写代码发生产,但是拉个分支进行一定的技术改造也是很有必要的。实战中学习。
- 周四周五我会发布相关理论文章和实战案例分析(包含需求背景,分析过程,实现步骤,代码成品,基本上都是我在项目中写过的代码)。 没有需求背景,就没有实战意义,天天用小明和小张养猫养狗举例子,打基础是非常好的,理解难度小,但是想要进阶有难度。
- 周六周日,自行回顾自己项目中类似的问题,能不能合理的进行解决。简单写出解决方案。
第一周主题:设计模式
在面试中,经常会问到设计模式,大部分情况下,面试者的回答都不太理想,原因大致如下:
- 知道的设计模式太过于基础,无外乎单例,工厂,代理等。
- 只是知道概念,好一点的会知道这些设计模式在源码中的应用,但是如何用设计模式来改造自己的业务代码,大部分的面试者是很难回答上来的。
而设计模式就是一些总结好的编程模板,为了让我们在解决特殊问题的时候,代码能够写的更加优雅,更易用,更易扩展。所以本质上来说,学设计模式就是为了写好代码。
但是现在的设计模式教程,大部分都集中在基础理论和编程思想的讲解上,往往是看过很多设计模式的文章,也写了很多demo,却不能对业务代码做出一点改造。知道了很多道理,却依然写不好代码。
那么怎么学习设计模式,才能学有所用呢?
- 首先,不能用理论的想法按部就班的了解设计模式的前世今生,方方面面,因为设计模式相关的内容太过于繁杂,往往需要看好久才能看完,更别说应用了,即便是能够坚持看完,黄花菜都凉了。
- 其次,大部分的设计模式并不常用,所以也就没有必要全部学会了。
- 最后也是最重要的,要明白设计模式是写代码的方式模板,每一种设计模式都解决特殊的问题,也就意味着,我们只需要知道某个设计模式解决什么问题,就可以在项目中找到类似的场景进行改造,从实际出发解决问题。换句话就是从需求出发,针对业务场景应用某个设计模式。
综上,本次设计模式学习,并不追求23种设计模式的走马观。不会采用教科书式的顺序逐个讲解。而是围绕几个常用且适用范围广的设计模式,基于实际项目代码和业务场景进行讲解,面向实战,保证学习之后可以在项目中进行小的改造。
先用起来,再逐步迭代,用的越来越广;先解决小问题,再逐步扩大,解决更多问题。
第一周引导内容
在进行学习的时候一定要收集整理文档。粘贴复制也可以。
由于设计模式内容繁多,所以本周只对两个设计模式进行学习:
- 建造者模式
- 职责链模式
以下是我罗列的问题引导大家进行学习:
- 什么是建造者模式?
- 建造者模式有什么用?能够解决什么问题?
- 写出一个小demo。
- 现在项目中使用的框架或者工具类,有哪些代码使用了建造者模式?复制或者截图部分代码到文档中,如果有简单的分析更好了。(提示:建造者模式的类可以搜索Builder)
- 业务代码中,有没有什么地方可以使用建造者模式?现在有没有使用上?你认为是否可以改造为建造者模式?(提示:线程池,Session创建)
- 什么是职责链模式?
- 职责链模式有什么用?能够解决什么问题?
- 写出一个小demo。
- 现在项目中使用的框架或者工具类,有哪些代码使用了职责链模式?复制或者截图部分代码到文档中,如果有简单的分析更好了。(提示:建造者模式的类可以搜索Handler)
- 业务代码中,有没有什么地方可以使用职责链模式?现在有没有使用上?你认为是否可以改造为职责链模式?(提示:同一批数据根据type进行不同的处理)
最后
周一周二周三,自行学习,大家也发现了如果只是一味的看资料,博客,用处不大,就是因为没有引入项目中思考,所以这个时候摒弃惰性很重要,思考一下场景,会让自己对设计模式的理解更加清晰。
有什么问题,大家可以发在群里进行讨论。有好的思考也要即时分享。讨论尽量在大群进行。