反射的使用场合和作用以及优缺点
反射的场合:
编译时未知对象或类属于那些类,程序只能靠运行时信息来发现该对象或类的真实信息
反射的作用:
通过反射可以使程序代码访问到装载JVM中类的内部信息
获取已装载类的属性信息,获取已装载类的方法,获取已装载类的构造方法信息
反射的优点:
提高了Java程序的灵活性和扩展性,降低了耦合性。
反射的缺点:
反射基本上是一种解释操作,用于字段和方法比直接的代码慢
反射主要领用在对灵活性和扩展性要求高的系统框架上,普通程序不建议使用。而且使用反射会模糊程序内部的逻辑,反射绕过了源代码,维护时难度更大。反射代码比直接代码更复杂。
反射技术主要的实现类和作用
JDK中实现反射机制的类位于java.lang.reflect中
Class类:代表一个类
Field类:代表类的成员变量(属性)
Method类:代表类的成员方法
Constructor类:代表类的构造方法
Array类:提供了动态创建数组,以及访问数组元素的静态方法
Class类的作用
Class是Java反射机制的起源和入口,用于获取与类相关的各种信息,提供了获取类信息的相关方法,Class类继承自Object类。
什么是设计模式
设计模式是一套被反复使用的、多数人知晓、经过分类编目的优秀代码设计经验的总结。特定环境下特定问题的处理方法。
重用设计和代码 重用设计比重用代码更有意义,自动带来代码重用
提高扩展性 大量使用面向接口编程,预留扩展插槽,新的功能或特性很容易加入到系统中来
提高灵活性 通过组合提高灵活性,可允许代码修改平稳发生,对一处修改不会波及到其他模块
提高开发效率 正确使用设计模式,可以节省大量的时间
面向对象设计原则有哪些------
面向对象设计原则是面向对象设计的基石,面向对象设计质量的依据和保障,设计模式是面向对象设计原则的经典应用
- 单一职责原则SRP:一个类只描述一个对象,或者一个方法只干一个活。
- 开闭原则OCP : 对源文件代码来说, 对扩展开放 对修改关闭
- 里氏替代原则LSP:
- 依赖注入原则DIP: 解耦
- 接口分离原则ISP: 面向接口
- 迪米特原则LOD:
- 组合/聚合复用原则CARP : 继承 代码重用!
开闭原则具有理想主义的色彩,它是面向对象设计的终极目标。其他设计原则都可以看作是开闭原则的实现手段或方法
并行和并发,作用
并行性是指两个或多个事件在同一时刻发生。
并发性是指连个或多个事件在同一时间间隔内发生。
通过并发和并行能够使得应用程序可以充分利用多核以及GPU的计算能力,从而提高应用程序的性能,比如在以下几个方面中:
- 使用异步I/O操作可以提高应用程序的响应性。大多数的GUI应用程序都是用单个线程来控制所有UI界面的更新。UI线程不应该被占用过长时间,不然UI界面就会失去对用户的响应。
- 跨多线程的并行工作可以更好的利用系统的资源。具有多CPU和GPU的现代计算机,通过并行可以指数级的提高CPU计算受限的应用程序的性能。
- 同时执行多个I/O操作(如同时从多个网站上获取信息)可以提高总体的吞吐量(throughput),等待I/O相应的操作可以用来发起新的操作,或者是处理操作返回的结果。
区别:
并发是指一个处理器同时处理多个任务。并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。
并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行。
并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。
当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状态。这种方式我们称之为并发(Concurrent)。
当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。
高并发解决思路和手段
高并发基本概念
高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。
高并发解决思路与手段
扩容:水平扩容、垂直扩容
缓存:Redis、Memcache、GuavaCache等
队列:Kafka、RabitMQ、RocketMQ等
应用拆分:服务化Dubbo与微服务Spring Cloud
限流:Guava RateLimiter使用、常用限流算法、自己实现分布式限流等
服务降级与服务熔断:服务降级的多重选择、Hystrix
数据库切库,分库分表:切库、分表、多数据源
高可用的一些手段:任务调度分布式elastic-job、主备curator的实现、监控报警机制