Skip to content

Commit 5d68893

Browse files
author
xk
committed
all md
0 parents  commit 5d68893

20 files changed

Lines changed: 6989 additions & 0 deletions

.DS_Store

6 KB
Binary file not shown.

Docs/ 异常&反射.md

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
## 异常&反射
2+
3+
![image-20200414175020396](https://gitee.com/yizhibuerdai/Imagetools/raw/master/images/image-20200414175020396.png)
4+
5+
#### 1.**error和exception有什么区别**
6+
7+
error表示系统级的错误,是java运行环境内部错误或者硬件问题,不能指望程序来处理这样的问题,除了退出运行外别无选择,它是Java虚拟机抛出的。
8+
9+
exception 表示程序需要捕捉、需要处理的异常,是由与程序设计的不完善而出现的问题,程序必须处理的问题。
10+
11+
#### 2.说出5个常见的**RuntimeException**
12+
13+
(1)Java.lang.NullPointerException 空指针异常;出现原因:调用了未经初始化的对象或者是不存在的对象。
14+
15+
(2)Java.lang.NumberFormatException 字符串转换为数字异常;出现原因:字符型数据中包含非数字型字符。
16+
17+
(3)Java.lang.IndexOutOfBoundsException 数组角标越界异常,常见于操作数组对象时发生。
18+
19+
(4)Java.lang.IllegalArgumentException 方法传递参数错误。
20+
21+
(5)Java.lang.ClassCastException 数据类型转换异常。
22+
23+
#### 3.**throw和throws的区别**?
24+
25+
throw:
26+
27+
  (1)throw 语句用在方法体内,表示抛出异常,由方法体内的语句处理。
28+
29+
  (2)throw 是具体向外抛出异常的动作,所以它抛出的是一个异常实例,执行 throw 一定是抛出了某种异常。
30+
31+
throws:
32+
33+
​ (1)@throws 语句是用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理。
34+
35+
​ (2)throws 主要是声明这个方法会抛出某种类型的异常,让它的使用者要知道需要捕获的异常的类型。
36+
37+
​ (3)throws 表示出现异常的一种可能性,并不一定会发生这种异常。
38+
39+
#### 4.Java中异常分类
40+
41+
按照异常处理时机:
42+
43+
编译时异常(受控异常(CheckedException))和运行时异常(非受控异常(UnCheckedException))
44+
45+
#### 5.如何自定义异常
46+
47+
继承Exception是检查性异常,继承RuntimeException是非检查性异常,一般要复写两个构造方法,用throw抛出新异常
48+
49+
如果同时有很多异常抛出,那可能就是异常链,就是一个异常引发另一个异常,另一个异常引发更多异常,一般我们会找它的原始异常来解决问题,一般会在开头或结尾,异常可通过initCause串起来,可以通过自定义异常
50+
51+
#### 6.Java中异常处理
52+
53+
首先处理异常主要有两种方式:一种try catch,一种是throws。
54+
55+
1. try catch:
56+
57+
- try{} 中放入可能发生异常的代码。catch{}中放入对捕获到异常之后的处理。
58+
59+
2.throw throws:
60+
61+
- throw是语句抛出异常,出现于函数内部,用来抛出一个具体异常实例,throw被执行后面的语句不起作用,直接转入异常处理阶段。
62+
- throws是函数方法抛出异常,一般写在方法的头部,抛出异常,给方法的调用者进行解决。
63+
64+
#### 7.什么是Java反射机制?
65+
66+
Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。
67+
68+
#### 8.举例什么地方用到反射机制?
69+
70+
1. JDBC中,利用反射动态加载了数据库驱动程序。
71+
2. Web服务器中利用反射调用了Sevlet的服务方法。
72+
3. Eclispe等开发工具利用反射动态刨析对象的类型与结构,动态提示对象的属性和方法。
73+
4. 很多框架都用到反射机制,注入属性,调用方法,如Spring。
74+
75+
#### 9.java反射机制的作用
76+
77+
- 在运行时判定任意一个对象所属的类
78+
- 在运行时构造任意一个类的对象;
79+
- 在运行时判定任意一个类所具有的成员变量和方法;
80+
- 在运行时调用任意一个对象的方法;
81+
- 生成动态代理;
82+
83+
#### 10.Java反射机制类
84+
85+
```
86+
java.lang.Class; //类
87+
java.lang.reflect.Constructor;//构造方法
88+
java.lang.reflect.Field; //类的成员变量
89+
java.lang.reflect.Method;//类的方法
90+
java.lang.reflect.Modifier;//访问权限
91+
```
92+
93+
#### 11.反射机制优缺点?
94+
95+
优点:运行期类型的判断,动态加载类,提高代码灵活度。
96+
97+
缺点:性能瓶颈:反射相当于一系列解释操作,通知 JVM 要做的事情,性能比直接的java代码要慢很多。
98+
99+
#### 12.利用反射创建对象?
100+
101+
1.通过一个全限类名创建一个对象 Class.forName(“全限类名”); 例如:com.mysql.jdbc.Driver Driver类已经被加载到 jvm中,并且完成了类的初始化工作就行了 类名.class; 获取Class<?> clz 对象 对象.getClass(); 2.获取构造器对象,通过构造器new出一个对象 Clazz.getConstructor([String.class]); Con.newInstance([参数]); 3.通过class对象创建一个实例对象(就相当与new类名()无参构造器) Cls.newInstance();
102+
103+
参考:
104+
105+
- https://blog.csdn.net/qq_37875585/article/details/89340495
106+
107+
- https://www.cnblogs.com/whoislcj/p/6038511.html
108+
109+
![WechatIMG360](https://gitee.com/yizhibuerdai/Imagetools/raw/master/images/common1.png)

Docs/.DS_Store

6 KB
Binary file not shown.

Docs/Dubbo.md

Lines changed: 271 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,271 @@
1+
## Dubbo
2+
3+
#### 1.什么是Dubbo?
4+
5+
Dubbo是基于Java的高性能轻量级的RPC分布式服务框架,现已成为 Apache 基金会孵化项目。
6+
7+
官网:http://dubbo.apache.org/en-us/
8+
9+
#### 2.为什么要使用Dubbo?
10+
11+
背景:
12+
13+
随着互联网的快速发展,Web应用程序的规模不断扩大,最后我们发现传统的垂直体系结构(整体式)已无法解决。分布式服务体系结构和流计算体系结构势在必行,迫切需要一个治理系统来确保体系结构的有序发展。
14+
15+
- 开源免费
16+
- 一些核心业务被提取并作为独立的服务提供服务,逐渐形成一个稳定的服务中心,这样前端应用程序就可以更好地响应变化多端的市场需求
17+
- 分布式框架能承受更大规模的流量
18+
- 内部基于netty性能高
19+
20+
#### 3.Dubbo提供了哪3个关键功能?
21+
22+
基于接口的远程调用
23+
24+
容错和负载均衡
25+
26+
自动服务注册和发现
27+
28+
#### 4.你知道哪些机构在用Dubbo吗?
29+
30+
![image-20200423105332840](https://gitee.com/yizhibuerdai/Imagetools/raw/master/images/image-20200423105332840.png)
31+
32+
#### 5.Dubbo服务的关键节点有哪些?
33+
34+
![image-20200423105925624](https://gitee.com/yizhibuerdai/Imagetools/raw/master/images/image-20200423105925624.png)
35+
36+
#### 6.说一下Dubbo服务注册流程?
37+
38+
1. 服务容器负责启动,加载,运行服务提供者。
39+
2. 服务提供者在启动时,向注册中心注册自己提供的服务。
40+
3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
41+
4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
42+
5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
43+
6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
44+
45+
#### 7.能画一下服务注册流程图吗?
46+
47+
![image-20200423110344448](https://gitee.com/yizhibuerdai/Imagetools/raw/master/images/image-20200423110344448.png)
48+
49+
#### 8.Dubbo架构的特点?
50+
51+
连通性、健壮性、伸缩性、以及向未来架构的升级性。
52+
53+
#### 9.对jdk的最小版本需求?
54+
55+
jdk1.6+
56+
57+
#### 10.注册中心的选择?
58+
59+
一般来说选中Zookeeper更稳定更合适。
60+
61+
除了Zookeeper还有Redis注册中心、Multicast注册中心、Simple注册中心。
62+
63+
#### 11.Dubbo的核心配置?用途?
64+
65+
![image-20200423111538534](https://gitee.com/yizhibuerdai/Imagetools/raw/master/images/image-20200423111538534.png)
66+
67+
#### 12.配置优先级规则?
68+
69+
![image-20200423112118958](https://gitee.com/yizhibuerdai/Imagetools/raw/master/images/image-20200423112118958.png)
70+
71+
优先级从高到低:
72+
73+
- JVM -D参数,当你部署或者启动应用时,它可以轻易地重写配置,比如,改变dubbo协议端口;
74+
- XML, XML中的当前配置会重写dubbo.properties中的;
75+
- Properties,默认配置,仅仅作用于以上两者没有配置时。
76+
77+
#### 13.如何用代码方式绕过注册中心点对点直连?
78+
79+
```java
80+
81+
82+
ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏
83+
// 如果点对点直连,可以用reference.setUrl()指定目标地址,设置url后将绕过注册中心,
84+
// 其中,协议对应provider.setProtocol()的值,端口对应provider.setPort()的值,
85+
// 路径对应service.setPath()的值,如果未设置path,缺省path为接口名
86+
reference.setUrl("dubbo://10.20.130.230:20880/com.xxx.XxxService");
87+
88+
89+
```
90+
91+
#### 14.Dubbo配置来源有几种?分别是?
92+
93+
4种
94+
95+
- JVM System Properties,-D参数
96+
- Externalized Configuration,外部化配置
97+
- ServiceConfig、ReferenceConfig等编程接口采集的配置
98+
- 本地配置文件dubbo.properties
99+
100+
#### 15.如何禁用某个服务的启动检查?
101+
102+
```xml
103+
<dubbo:reference interface = "com.foo.BarService" check = "false" />
104+
```
105+
106+
#### 16.Dubbo 负载均衡策略?默认是?
107+
108+
- 随机负载平衡(默认)
109+
110+
- RoundRobin负载平衡
111+
112+
- 最小活动负载平衡
113+
114+
- 一致的哈希负载平衡
115+
116+
#### 17.上线兼容老版本?
117+
118+
多版本号(version)
119+
120+
#### 18.开发测试环境,想绕过注册中心如何配置?
121+
122+
- xml
123+
124+
```xml
125+
<dubbo:reference id="xxxService" interface="com.alibaba.xxx.XxxService" url="dubbo://localhost:20890" />
126+
127+
```
128+
129+
- -D
130+
131+
```powershell
132+
java -Dcom.alibaba.xxx.XxxService=dubbo://localhost:20890
133+
```
134+
135+
- .properties
136+
137+
```properties
138+
java -Ddubbo.resolve.file=xxx.properties
139+
```
140+
141+
```properties
142+
com.alibaba.xxx.XxxService=dubbo://localhost:20890
143+
```
144+
145+
#### 19.集群容错几种方法?
146+
147+
![image-20200423121735540](https://gitee.com/yizhibuerdai/Imagetools/raw/master/images/image-20200423121735540.png)
148+
149+
#### 20.Dubbo有几种配置方式?
150+
151+
1. Spring
152+
2. Java API
153+
154+
#### 21.Dubbo有哪些协议?推荐?
155+
156+
- dubbo://(推荐)
157+
- rmi://
158+
- hessian://
159+
- http://
160+
- webservice://
161+
- thrift://
162+
- memcached://
163+
- redis://
164+
- rest://
165+
166+
#### 22.Dubbo使用什么通信框架?
167+
168+
dubbo使用netty。
169+
170+
#### 23.dubbo协议默认端口号?http协议默认端口?hessian?rmi?
171+
172+
- dubbo:20880
173+
- http:80
174+
- hessian:80
175+
- rmi:80
176+
177+
#### 24.Dubbo默认序列化框架?其他的你还知道?
178+
179+
- dubbo协议缺省为hessian2
180+
- rmi协议缺省为java
181+
- http协议缺省为json
182+
183+
#### 25.一个服务有多重实现时,如何处理?
184+
185+
可以用group分组,服务提供方和消费放都指定同一个group。
186+
187+
#### 26.Dubbo服务调用默认是阻塞的?还有其他的?
188+
189+
默认是同步等待结果阻塞的,同时也支持异步调用。
190+
191+
Dubbo 是基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小,异步调用会返回一个 Future 对象。
192+
193+
#### 27.Dubbo服务追踪解决方案?
194+
195+
- Zipkin
196+
- Pinpoint
197+
- SkyWalking
198+
199+
#### 28.Dubbo不维护了吗?Dubbo和Dubbox有什么区别?
200+
201+
现在进入了Apache,由apache维护。
202+
203+
Dubbox是当当的扩展项目。
204+
205+
#### 29.Dubbox有什么新功能?
206+
207+
- 支持REST风格远程调用(HTTP + JSON/XML)
208+
209+
- 支持基于Kryo和FST的Java高效序列化实现
210+
211+
- 支持基于嵌入式Tomcat的HTTP remoting体系
212+
- 升级Spring
213+
- 升级ZooKeeper客户端
214+
215+
#### 30.io线程池大小默认?
216+
217+
cpu个数 + 1
218+
219+
#### 31.dubbo://协议适合什么样的服务调用?
220+
221+
采用单一长链接和NIO异步通讯,适用于小数量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
222+
223+
不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。
224+
225+
![image-20200423154308365](https://gitee.com/yizhibuerdai/Imagetools/raw/master/images/image-20200423154308365.png)
226+
227+
#### 32.自动剔除服务什么原理?
228+
229+
zookeeper临时节点,会话保持原理。
230+
231+
#### 33.从 `2.0.5` 版本开始,dubbo支持通过x命令来进行服务治理?
232+
233+
telnet
234+
235+
#### 34.如何用命令查看服务列表?
236+
237+
```powershell
238+
telnet localhost 20880
239+
```
240+
241+
进入命令行。然后执行 ls相关命令:
242+
243+
- `ls`: 显示服务列表
244+
- `ls -l`: 显示服务详细信息列表
245+
- `ls XxxService`: 显示服务的方法列表
246+
- `ls -l XxxService`: 显示服务的方法详细信息列表
247+
248+
#### 35.Dubbo框架设计是怎样的?
249+
250+
![image-20200423162348971](https://gitee.com/yizhibuerdai/Imagetools/raw/master/images/image-20200423162348971.png)
251+
252+
各层说明:
253+
254+
- **config 配置层**:对外配置接口,以 `ServiceConfig`, `ReferenceConfig` 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类
255+
- **proxy 服务代理层**:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 `ServiceProxy` 为中心,扩展接口为 `ProxyFactory`
256+
- **registry 注册中心层**:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 `RegistryFactory`, `Registry`, `RegistryService`
257+
- **cluster 路由层**:封装多个提供者的路由及负载均衡,并桥接注册中心,以 `Invoker` 为中心,扩展接口为 `Cluster`, `Directory`, `Router`, `LoadBalance`
258+
- **monitor 监控层**:RPC 调用次数和调用时间监控,以 `Statistics` 为中心,扩展接口为 `MonitorFactory`, `Monitor`, `MonitorService`
259+
- **protocol 远程调用层**:封装 RPC 调用,以 `Invocation`, `Result` 为中心,扩展接口为 `Protocol`, `Invoker`, `Exporter`
260+
- **exchange 信息交换层**:封装请求响应模式,同步转异步,以 `Request`, `Response` 为中心,扩展接口为 `Exchanger`, `ExchangeChannel`, `ExchangeClient`, `ExchangeServer`
261+
- **transport 网络传输层**:抽象 mina 和 netty 为统一接口,以 `Message` 为中心,扩展接口为 `Channel`, `Transporter`, `Client`, `Server`, `Codec`
262+
- **serialize 数据序列化层**:可复用的一些工具,扩展接口为 `Serialization`, `ObjectInput`, `ObjectOutput`, `ThreadPool`
263+
264+
#### 36.你读过Dubbo的源码吗?
265+
266+
这个问题其实面试中如果问dubbo的话,基本就会带这个问题。有时间的话,大家可以下载源码,读一读,如果大家有兴趣的话,我会出后续文章。
267+
268+
参考:http://dubbo.apache.org/en-us/
269+
270+
![WechatIMG360](https://gitee.com/yizhibuerdai/Imagetools/raw/master/images/common1.png)
271+

0 commit comments

Comments
 (0)