济南IT培训 > 达内新闻
互联网公司Java高级面试题(终)
- 发布:济南达内
- 来源:济南达内
- 时间:2018-08-20 18:02
济南达内的老师说,迪米特法则要求我们在设计系统时,应该尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中的一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用.简言之,就是通过引入一个合理的第三者来降低现有对象之间的耦合度.
在将迪米特法则运用到系统设计中时,要注意下面的几点:在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造成太大波及;在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限;在类的设计上,只要有可能,一个类型应当设计成不变类;在对其他类的引用上,一个对象对其他对象的引用应当降到最低.
6.接口隔离原则(ISP)
定义:一个类对另一个类的依赖应该建立在最小的接口上.
建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少.也就是说,我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用.
采用接口隔离原则对接口进行约束时,要注意以下几点:
接口尽量小,但是要有限度.对接口进行细化可以提高程序设计灵活性,但是如果过小,则会造成接口数量过多,使设计复杂化.所以一定要适度.
为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来.只有专注地为一个模块提供定制服务,才能建立最小的依赖关系.
提高内聚,减少对外交互.使接口用最少的方法去完成最多的事情.
concurrent包的实现基础

由于java的CAS同时具有 volatile 读和volatile写的内存语义,因此Java线程之间的通信现在有了下面四种方式:
A线程写volatile变量,随后B线程读这个volatile变量.
A线程写volatile变量,随后B线程用CAS更新这个volatile变量.
A线程用CAS更新一个volatile变量,随后B线程用CAS更新这个volatile变量.
A线程用CAS更新一个volatile变量,随后B线程读这个volatile变量.
Java的CAS会使用现代处理器上提供的高效机器级别原子指令,这些原子指令以原子方式对内存执行读-改-写操作,这是在多处理器中实现同步的关键(从本质上来说,能够支持原子性读-改-写指令的计算机器,是顺序计算图灵机的异步等价机器,因此任何现代的多处理器都会去支持某种能对内存执行原子性读-改-写操作的原子指令).同时,volatile变量的读/写和CAS可以实现线程之间的通信.把这些特性整合在一起,就形成了整个concurrent包得以实现的基石.如果我们仔细分析concurrent包的源代码实现,会发现一个通用化的实现模式:
首先,声明共享变量为volatile;
然后,使用CAS的原子条件更新来实现线程之间的同步;
同时,配合以volatile的读/写和CAS所具有的volatile读和写的内存语义来实现线程之间的通信.
AQS,非阻塞数据结构和原子变量类(java.util.concurrent.atomic包中的类),这些concurrent包中的基础类都是使用这种模式来实现的,而concurrent包中的高层类又是依赖于这些基础类来实现的.
以上就是济南达内给大家做的内容详解,更多关于java知识的学习,请继续关注济南达内
最新开班时间
- 北京
- 上海
- 广州
- 深圳
- 南京
- 成都
- 武汉
- 西安
- 青岛
- 天津
- 杭州
- 重庆
- 哈尔滨
- 济南
- 沈阳
- 合肥
- 郑州
- 长春
- 苏州
- 长沙
- 昆明
- 太原
- 无锡
- 石家庄
- 南宁
- 佛山
- 珠海
- 宁波
- 保定
- 呼和浩特
- 洛阳
- 烟台
- 运城
- 潍坊
互联网公司Java高级面试题(终)
- 发布:济南达内
- 来源:济南达内
- 时间:2018-08-20 18:02
济南达内的老师说,迪米特法则要求我们在设计系统时,应该尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中的一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用.简言之,就是通过引入一个合理的第三者来降低现有对象之间的耦合度.
在将迪米特法则运用到系统设计中时,要注意下面的几点:在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造成太大波及;在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限;在类的设计上,只要有可能,一个类型应当设计成不变类;在对其他类的引用上,一个对象对其他对象的引用应当降到最低.
6.接口隔离原则(ISP)
定义:一个类对另一个类的依赖应该建立在最小的接口上.
建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少.也就是说,我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用.
采用接口隔离原则对接口进行约束时,要注意以下几点:
接口尽量小,但是要有限度.对接口进行细化可以提高程序设计灵活性,但是如果过小,则会造成接口数量过多,使设计复杂化.所以一定要适度.
为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来.只有专注地为一个模块提供定制服务,才能建立最小的依赖关系.
提高内聚,减少对外交互.使接口用最少的方法去完成最多的事情.
concurrent包的实现基础

由于java的CAS同时具有 volatile 读和volatile写的内存语义,因此Java线程之间的通信现在有了下面四种方式:
A线程写volatile变量,随后B线程读这个volatile变量.
A线程写volatile变量,随后B线程用CAS更新这个volatile变量.
A线程用CAS更新一个volatile变量,随后B线程用CAS更新这个volatile变量.
A线程用CAS更新一个volatile变量,随后B线程读这个volatile变量.
Java的CAS会使用现代处理器上提供的高效机器级别原子指令,这些原子指令以原子方式对内存执行读-改-写操作,这是在多处理器中实现同步的关键(从本质上来说,能够支持原子性读-改-写指令的计算机器,是顺序计算图灵机的异步等价机器,因此任何现代的多处理器都会去支持某种能对内存执行原子性读-改-写操作的原子指令).同时,volatile变量的读/写和CAS可以实现线程之间的通信.把这些特性整合在一起,就形成了整个concurrent包得以实现的基石.如果我们仔细分析concurrent包的源代码实现,会发现一个通用化的实现模式:
首先,声明共享变量为volatile;
然后,使用CAS的原子条件更新来实现线程之间的同步;
同时,配合以volatile的读/写和CAS所具有的volatile读和写的内存语义来实现线程之间的通信.
AQS,非阻塞数据结构和原子变量类(java.util.concurrent.atomic包中的类),这些concurrent包中的基础类都是使用这种模式来实现的,而concurrent包中的高层类又是依赖于这些基础类来实现的.
以上就是济南达内给大家做的内容详解,更多关于java知识的学习,请继续关注济南达内
最新开班时间
- 北京
- 上海
- 广州
- 深圳
- 南京
- 成都
- 武汉
- 西安
- 青岛
- 天津
- 杭州
- 重庆
- 厦门
- 哈尔滨
- 济南
- 福州
- 沈阳
- 合肥
- 郑州
- 长春
- 苏州
- 大连
- 长沙
- 昆明
- 温州
- 太原
- 南昌
- 无锡
- 石家庄
- 南宁
- 中山
- 兰州
- 佛山
- 珠海
- 宁波
- 贵阳
- 保定
- 呼和浩特
- 东莞
- 洛阳
- 潍坊
- 烟台
- 运城