复盘整理20190926

秋招已经过半,啥都没有,每日凉凉的心态,重要的是觉得自己竟然毫无长进!

 

算法的坑,进去了就不想出了,心累。

决定坚持到十二月份,如果毫无结果就考教师资格证,考雅思,准备别的方向了。

 

 

来复盘下吧:

1.笔试

(1)在图的搜索算法中,

DFS(深度优先遍历):  

  通常可以用stack实现;

  基于递归的搜索方式,它的特点是由一个状态拓展一个状态,然后不停拓展,直到找到目标或者无法继续拓展结束一个状态的递归。 

  对于解决遍历和求所有问题有效,对于问题搜索深度小的时候处理速度迅速,然而在深度很大的情况下效率不高。

BFS(广度优先遍历):

  通常可以用queue实现;  

  它的特点是由每一个状态可以扩展出许多状态,然后再以此扩展,直到找到目标状态或者队列中头尾指针相遇,即队列中所有状态都已处理完毕。

  对于解决最短或最少问题特别有效,而且寻找深度小,但缺点是内存耗费量大(需要开大量的数组单元用来存储状态)。 

 

(2)递归和迭代

递归:

  从概念上讲,递归就是指程序调用自身的编程思想,即一个函数调用本身;

  无限循环的递归算法会导致栈溢出

迭代:

  迭代是利用已知的变量值,根据递推公式不断演进得到变量新值得编程思想。

 

(3)java的设计模式

 

  • 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。
  • 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。
  • 行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

模版方法和策略模式都封装了算法,一个用组合(策略模式),一个用继承(模版方法)。

策略模式:将一组算法封装成对象,通过传递这些对象灵活的改变程序功能

模板方法:让子类重写方法的一部分,而不是全部。

命令模式:把发出命令的责任和执行命令的责任分开,委派给不同的对象。

代理模式:在不改变源码的情况下,实现对目标对象功能扩展

设计模式遵循的原则有6个:

1、开闭原则(Open Close Principle)

  对扩展开放,对修改关闭。

2、里氏代换原则(Liskov Substitution Principle)

  只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

3、依赖倒转原则(Dependence Inversion Principle)

  这个是开闭原则的基础,对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则(Interface Segregation Principle)

  使用多个隔离的借口来降低耦合度。

5、迪米特法则(最少知道原则)(Demeter Principle)

  一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则(Composite Reuse Principle)

  原则是尽量使用合成/聚合的方式,而不是使用继承。继承实际上破坏了类的封装性,超类的方法可能会被子类修改。

 

(4)

转载于:https://www.cnblogs.com/ivyharding/p/11589659.html

你可能感兴趣的:(复盘整理20190926)