笔试问题汇总
- 小王、小张、小赵三个人是好朋友,他们中三个人一个人下海经商,一个考上了重点大学,一个人参军了,此外还知道下面的条件:小赵的年龄比比士兵的年龄大、大学生的年龄比小张小,小王的年龄和大学生不一样。
- 分析:小赵不是士兵、小张不是大学生、小王不是大学生 那么 可以确定小赵是大学生 由于小张的年龄大于大学生的年龄 大于士兵的年龄 因而小张是商人、那么小王只能是士兵。
答案:小赵:大学生,小张:商人,王:士兵
- 面向对象的三个特征以及设计原则
继承、封装、多态、
面向对象的7大设计原则
1、单一职责原则
每一个类应该专注于做一件事
2、里氏替换原则
超类存在的地方,子类是可以替换的。这个原则是说,所有的基类对象都可以替换成子类对象,其不会产生任何异常,但是反过来不成立。因为子类对象的某些方法在父类中是没有的,因而向上转型是不安全的。正应为这样,在程序中要尽量使用基类来对对象进行定义而在运行的时候确定其子类型,用子类型对象替换父类型对象。
3、依赖倒置原则
所谓的依赖倒置原则,就是具体依赖抽象,上层依赖下层。比如说B是底层模块 A是高层模块、B需要使用A的功能,这个时候,B不应当直接使用A的具体类,而是由B定义一个抽象接口,并由A来实现这个抽象接口。B只使用这个抽象接口,这样就达到了依赖倒置的目的,B也解除了对A的依赖,反过来A依赖于B定义的抽象接口。这样就避免了循环依赖。采用依赖倒置原则可以减少类之间的耦合性、提高系统的稳定性和减少并发执行的风险问题。
4、接口隔离原则
提供尽可能小的单独接口,而不要提供大的总接口,暴露行为让后面的实现类知道的越少越好。也就说说为各个功能建立专门的接口,这样比依赖于单一综合接口灵活的多。Java的接口可以多继承就是接口隔离原则的基础保障。
5、迪米特法则
一个对象对另外一个对象知道的越少越好,也就是说,一个软件实体要尽可能少的与其他实体发生相互作用。也就是说减少耦合。
6、开闭原则
对修改关闭,对扩展开放。
7、组合、聚合复用原则
其实整个设计模式都在讲如何讲类与类之间进行组合、聚合。因为继承破坏了封装,将基类的实现细节暴露给子类。同时增加了类之间的耦合,而组合/聚合复用可以使得系统更加灵活,类与类之间的耦合度降低。
- n个节点组成的二叉树的种类
这个是著名的卡特兰树