Skip to content

Commit 101de7e

Browse files
committed
HashMap内存溢出
1 parent adc688f commit 101de7e

File tree

3 files changed

+65
-9
lines changed

3 files changed

+65
-9
lines changed

README.md

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -138,14 +138,19 @@ Senior Java engineer interview exams in 2019
138138

139139
* 自己查漏补缺
140140

141-
* sql遗漏知识点
141+
* [微服务调用超时的处理方案](readme/call-timeout-process.md)
142+
143+
* sql遗漏知识点
144+
145+
答案: exists与in的区别和各自的应用场景是什么? having的作用是什么?
146+
truncate与delete的区别.
147+
Oracle的over(), partition by的使用。partition by与group by的区别。
148+
149+
* valotile关键字有什么作用
150+
151+
* duboo或者spring cloud微服务调用超时应该怎么处理
142152

143-
答案: exists与in的区别和各自的应用场景是什么? having的作用是什么?
144-
truncate与delete的区别.
145-
Oracle的over(), partition by的使用。partition by与group by的区别。
146153

147-
* valotile关键字有什么作用
148-
149154
<hr/>
150155

151156
* 京东金融
@@ -256,10 +261,10 @@ String s = " z111,c888,n222,,,g000, t333,a999,c888 ,p000 ,z111 ";
256261

257262
*1.[Spring bean依赖注入的时候怎么解决bean之间的循环引用问题](https://www.cnblogs.com/bhlsheji/p/5208076.html)
258263

259-
*2.如何自己去实现一个WEB框架,怎么实现类似于SpringMVC里的@RequestMapping
264+
*2.如何自己去实现一个WEB框架,怎么实现类似于SpringMVC里的@RequestMapping,用什么匹配算法速度最快
260265

261266
* 拍拍贷
262-
* [使用HashMap的时候如何避免内存泄漏](readme/)
267+
* [使用HashMap的时候如何避免内存泄漏](readme/hashmap-memory-leak.md)
263268

264269
## 更多Java面试题
265270

readme/call-timeout-process.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# 微服务调用超时处理
2+
3+
* 服务之间调用的交互模式
4+
* 同步
5+
* 异步
6+
* 消息队列
7+
8+
* 最简单的处理策略
9+
10+
微服务调用,一般是使用同步调用。通常的做法是超时几次后采用熔断策略。
11+
12+
下面讨论更高级的处理方式,方案会复杂些,实现成本也略高
13+
14+
15+
[微服务调用超时处理-高级方案](https://www.jianshu.com/p/d68d572b0613)
16+
17+
转载网友的博客,下面贴出关键点
18+
19+
* 同步超时
20+
21+
超时可能发生的点
22+
23+
在同步调用的模式下,超时可能发生的节点有以下三处:
24+
25+
请求超时,客户端给服务端发送请求时超时,此时服务端没有收到客户端的请求;
26+
服务端内部超时,服务端可能存在DB操作、IO操作、调用其他服务超时;
27+
响应超时,服务端给客户端返回响应时超时,此时服务端已经处理了请求。
28+
29+
### 客户端
30+
无论是何种超时,对于客户端来说都是透明的,即客户端无法知道具体发生超时的点。客户端对于超时的处理,有如下两种常见方法:
31+
32+
* 查询,通过主动查询去拉取超时请求的状态。这种方法需要服务端提供查询接口,并且是根据客户端生成的请求流水号作为查询的条件,因为同一个服务或者接口可能会存在多个调用方,这就需要服务端能够唯一标识某一个客户端请求。
33+
34+
35+
如何唯一标识客户端请求,有以下两种方案可供参考.
36+
1. 全局流水号(traceId),全局流水号需要在所有调用方之间唯一,这可能需要在全公司层面有分布式发号器的应用。
37+
2. 如果在调用方的应用有不属于公司的应用,那么全局流水号可能就不好控制了,这个时候可以使用:productId+productSeqId的组合形式。productId表示接入方的系统号,productSeqId表示接入方的流水号,productSeqId需要保证在同一个productId内是唯一的。这样服务端就可以通过productId + productSeqId来唯一标识客户端的请求。
38+
39+
40+
* 重试,需要设置重试梯度(5s,30s,1min...),以及重试次数的阈值(最多重试的次数)。另外,客户端的重试需要服务端支持幂等(多次执行和只执行一次的效果一样)。
41+
42+
### 服务端
43+
对于①.请求超时和③.响应超时服务端是无法感知的,也就没法进行处理。而在②.服务端内部超时时服务端应该快速失败,立即响应客户端。如果是服务端调用其他服务(例如,服务C)超时,服务端除了快速失败之外,还需要调用服务C的冲正操作。
44+
45+
46+
47+
48+
49+
服务端内部调用其他服务超时
50+
51+
服务C的冲正接口需要能够判断之前是否接收过服务端超时的请求,如果接收过请求并做了处理,则应该执行反向的回滚操作,如果没有接收过,则忽略冲正请求。

readme/hashmap-memory-leak.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 使用HashMap的时候如何避免内存泄漏
22

3-
当Key为复杂类型(自定义对象)的时候,如果map.put(obj, value)后
3+
当HashMap的Key为复杂类型(自定义对象)的时候,如果map.put(obj, value)后
44
如果修改了obj中的某些字段值,而且这这个字段会导致obj.hashCode()发送变化的。就必定导致内存泄漏。
55
因为Node数据的存放地址没变,但是里面的key变了。
66

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy