实习日记 07/13 day4

转来转去,还是Spring

由于工作的架构主要是Spring boot,所以我又再次拿起了Spring的相关书籍稳固知识,早上读书的时候发现了Spring in Action第一章1.1.x中举得勇者斗恶龙的例子,对于国人来说并不是很容易理解,多少有点水土不服,尝试用我的理解重新举例子吧

1.1.2 依赖注入DI

原例子:

// 骑士例子
package com.springinaction.knights;
public class DamselResuingKnight implements Knight{
private RescueDamselQuest quest;
public DamselRescuingKnight(){
this.quest=new RescueDamselQuest();
}
public void embarkOnQuest(){
quest.embark;
}
// 骑士例子
package com.springinaction.knights;
public class BraveKnight implements Knight{
private Quest quest;
public BraveKnight(Quest quest){
this.quest=quest;
}
public void embarkOnQuest(){
quest.embark;
}

原版的例子实际上试说明勇者被quest才能出动,执行任务,由于高耦合度导致勇者只能执行特定的quest,修改过后,用着的行为更多了,能够挑战任何形式的quest。
这个例子有些过于欧美了,其实用的例子就是:
原先高耦合的代码是专卖店,只能卖一种东西,比如this.produce=new MilkProduce();牛奶专卖店
降低耦合就是Miniso,卖的种类更多,this.produce=new Produce();,可以导入任意商品售卖
DI是Spirng的一大特性,可以让相互协作的软件组件保持松散耦合。

1.1.3切面编程

DI能够让相互协作的软件组件保持松散耦合,而面向切面编程允许你把遍布在应用各处的功能分离出来形成可重用的组件
在本节书中举了吟游诗人和勇士的例子

吟游诗人具有两个方法探险前,和探险后执行的宣传的方法
同时在勇者的类中会定义吟游诗人类,这样使勇者类的代码变得臃肿,很明显这不是一个很好的方法
但是利用AOP,可以声明吟游诗人必须歌颂骑士的探险事迹,而骑士本身不用直接访问MInstreal方法。
举一个更贴近现实的例子,销售卖出一件产品,需要经理在卖出去前和卖出去后记录,利用切面编程在把经理声明为一个切面


<aop:config>
 <aop: aspect ref="manager">
  <aop:pointcut id="record">
   expression="execution(**.produceOnSold(..))"/>
   <aop:befor pointcut-ref="record"
   method="recordBeforeSold"/>
     <aop:after pointcut-ref="record"
   method="recodAfterSold"/>
   </aop:aspect>
  </aop:config>

项目相关

当我自己做项目练手的时候,不用考虑返回值的统一化,什么样的请求会返回什么样的数据都是顺手就好,当运用到工作之中的时候,就不能够在这样了。在我所接触到的业务中需要有统一的输入对象和返回对象。
放在beans中的common文件夹中,定义统一的输入输出文件。

HashMap

项目中经常用到HashMap,为什么要是用它呢
在项目中经常会遇到不定长的数据,无法准确的知道数据的量,或是数据的量会变化,这时候要用到Java中的ArrayList、LinkedList、Vector,它们都是可变长度的。但是或多或少都有些问题。而HashMap的出现就是为了解决动态数组插入删除速度慢或者遍历速度慢的问题而产生的
1.为了实现快速查找,HashMap 选择了数组而不是链表。以利用数组的索引实现 O(1) 复杂度的查找效率。
2.为了利用索引查找,HashMap 引入 Hash 算法, 将 key 映射成数组下标: key -> Index。
3.引入 Hash 算法又导致了 Hash 冲突。为了解决 Hash 冲突,HashMap 采用链地址法,在冲突位置转为使用链表存储。
4.链表存储过多的节点又导致了在链表上节点的查找性能的恶化。为了优化查找性能,HashMap 在链表长度超过 8 之后转而将链表转变成红黑树,以将 O(n) 复杂度的查找效率提升至 O(log n)。
所以HashMap是一个重要的数据结构,需要熟练掌握。

上一篇:【总结】纪中Day4比赛总结


下一篇:[厚涂]从零基础入门到精通-day4