From d712d4144880ddd280384da13ebe97714372b0cd Mon Sep 17 00:00:00 2001 From: Snailclimb Date: Mon, 9 Dec 2019 20:51:28 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E3=80=90=E7=9C=9F=E5=AE=9E=E9=9D=A2?= =?UTF-8?q?=E8=AF=95=E7=BB=8F=E5=8E=86=E3=80=91=E6=88=91=E6=89=80=E7=BB=8F?= =?UTF-8?q?=E5=8E=86=E7=9A=84=E9=98=BF=E9=87=8C=E4=B8=80=E4=BA=8C=E9=9D=A2?= =?UTF-8?q?=E6=80=BB=E7=BB=93(=E9=99=84=E8=AF=A6=E8=A7=A3).md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...åŽ†çš„é˜¿é‡Œä¸€äºŒé¢æ€»ç»“(附详解).md | 80 ++++++++++++------- 1 file changed, 50 insertions(+), 30 deletions(-) diff --git a/docs/essential-content-for-interview/real-interview-experience-analysis/ã€çœŸå®žé¢è¯•ç»åŽ†ã€‘æˆ‘æ‰€ç»åŽ†çš„é˜¿é‡Œä¸€äºŒé¢æ€»ç»“(附详解).md b/docs/essential-content-for-interview/real-interview-experience-analysis/ã€çœŸå®žé¢è¯•ç»åŽ†ã€‘æˆ‘æ‰€ç»åŽ†çš„é˜¿é‡Œä¸€äºŒé¢æ€»ç»“(附详解).md index 13f67b37..a1f61011 100644 --- a/docs/essential-content-for-interview/real-interview-experience-analysis/ã€çœŸå®žé¢è¯•ç»åŽ†ã€‘æˆ‘æ‰€ç»åŽ†çš„é˜¿é‡Œä¸€äºŒé¢æ€»ç»“(附详解).md +++ b/docs/essential-content-for-interview/real-interview-experience-analysis/ã€çœŸå®žé¢è¯•ç»åŽ†ã€‘æˆ‘æ‰€ç»åŽ†çš„é˜¿é‡Œä¸€äºŒé¢æ€»ç»“(附详解).md @@ -6,8 +6,8 @@ 2. 消æ¯é˜Ÿåˆ—相关:削峰和解耦; 3. Redis 相关:缓存穿é€é—®é¢˜çš„解决; 4. 一些基础问题: - - 网络相关:1.æµè§ˆå™¨è¾“å…¥URLå‘生了什么? 2.TCPå’ŒUDP区别? 3.TCP如何ä¿è¯ä¼ è¾“å¯é æ€§? - - Java 基础: + - 网络相关:1.æµè§ˆå™¨è¾“å…¥ URL å‘生了什么? 2.TCP å’Œ UDP 区别? 3.TCP 如何ä¿è¯ä¼ è¾“å¯é æ€§? + - Java 基础:1. 既然有了字节æµ,ä¸ºä»€ä¹ˆè¿˜è¦æœ‰å­—符æµ? 2.æ·±æ‹·è´ å’Œ æµ…æ‹·è´æœ‰å•¥åŒºåˆ«å‘¢ï¼Ÿ 䏋颿˜¯æ­£æ–‡ï¼ @@ -76,8 +76,8 @@ > 我觉得å¯ä»¥ä»Žä¸‹é¢å‡ ä¸ªæ–¹é¢æ¥è¯´ï¼š > -> 1. **系统å¯ç”¨æ€§é™ä½Žï¼š** 系统å¯ç”¨æ€§åœ¨æŸç§ç¨‹åº¦ä¸Šé™ä½Žï¼Œä¸ºä»€ä¹ˆè¿™æ ·è¯´å‘¢ï¼Ÿåœ¨åŠ å…¥MQ之å‰ï¼Œä½ ä¸ç”¨è€ƒè™‘消æ¯ä¸¢å¤±æˆ–者说MQ挂掉等等的情况,但是,引入MQ之åŽä½ å°±éœ€è¦åŽ»è€ƒè™‘äº†ï¼ -> 2. **ç³»ç»Ÿå¤æ‚性æé«˜ï¼š** 加入MQ之åŽï¼Œä½ éœ€è¦ä¿è¯æ¶ˆæ¯æ²¡æœ‰è¢«é‡å¤æ¶ˆè´¹ã€å¤„ç†æ¶ˆæ¯ä¸¢å¤±çš„æƒ…况ã€ä¿è¯æ¶ˆæ¯ä¼ é€’çš„é¡ºåºæ€§ç­‰ç­‰é—®é¢˜ï¼ +> 1. **系统å¯ç”¨æ€§é™ä½Žï¼š** 系统å¯ç”¨æ€§åœ¨æŸç§ç¨‹åº¦ä¸Šé™ä½Žï¼Œä¸ºä»€ä¹ˆè¿™æ ·è¯´å‘¢ï¼Ÿåœ¨åŠ å…¥ MQ 之å‰ï¼Œä½ ä¸ç”¨è€ƒè™‘消æ¯ä¸¢å¤±æˆ–者说 MQ 挂掉等等的情况,但是,引入 MQ 之åŽä½ å°±éœ€è¦åŽ»è€ƒè™‘äº†ï¼ +> 2. **ç³»ç»Ÿå¤æ‚性æé«˜ï¼š** 加入 MQ 之åŽï¼Œä½ éœ€è¦ä¿è¯æ¶ˆæ¯æ²¡æœ‰è¢«é‡å¤æ¶ˆè´¹ã€å¤„ç†æ¶ˆæ¯ä¸¢å¤±çš„æƒ…况ã€ä¿è¯æ¶ˆæ¯ä¼ é€’çš„é¡ºåºæ€§ç­‰ç­‰é—®é¢˜ï¼ > 3. **一致性问题:** 我上é¢è®²äº†æ¶ˆæ¯é˜Ÿåˆ—å¯ä»¥å®žçŽ°å¼‚æ­¥ï¼Œæ¶ˆæ¯é˜Ÿåˆ—带æ¥çš„异步确实å¯ä»¥æé«˜ç³»ç»Ÿå“应速度。但是,万一消æ¯çš„çœŸæ­£æ¶ˆè´¹è€…å¹¶æ²¡æœ‰æ­£ç¡®æ¶ˆè´¹æ¶ˆæ¯æ€Žä¹ˆåŠžï¼Ÿè¿™æ ·å°±ä¼šå¯¼è‡´æ•°æ®ä¸ä¸€è‡´çš„æƒ…况了! **é¢è¯•官**:åšé¡¹ç›®çš„过程中é‡åˆ°äº†ä»€ä¹ˆé—®é¢˜å—?解决了å—ï¼Ÿå¦‚æžœè§£å†³çš„è¯æ˜¯å¦‚何解决的呢? @@ -112,13 +112,13 @@ > > å¦å¤–,这里多说一嘴,一般情况下我们是这样设计 key 的: `表å:列å:主键å:主键值`。 > -> **2)布隆过滤器:**布隆过滤器是一个éžå¸¸ç¥žå¥‡çš„æ•°æ®ç»“构,通过它我们å¯ä»¥éžå¸¸æ–¹ä¾¿åœ°åˆ¤æ–­ä¸€ä¸ªç»™å®šæ•°æ®æ˜¯å¦å­˜åœ¨ä¸Žæµ·é‡æ•°æ®ä¸­ã€‚我们需è¦çš„就是判断 key 是å¦åˆæ³•ï¼Œæœ‰æ²¡æœ‰æ„Ÿè§‰å¸ƒéš†è¿‡æ»¤å™¨å°±æ˜¯æˆ‘ä»¬æƒ³è¦æ‰¾çš„那个“人â€ã€‚ +> **2)布隆过滤器:** 布隆过滤器是一个éžå¸¸ç¥žå¥‡çš„æ•°æ®ç»“构,通过它我们å¯ä»¥éžå¸¸æ–¹ä¾¿åœ°åˆ¤æ–­ä¸€ä¸ªç»™å®šæ•°æ®æ˜¯å¦å­˜åœ¨äºŽæµ·é‡æ•°æ®ä¸­ã€‚我们需è¦çš„就是判断 key 是å¦åˆæ³•ï¼Œæœ‰æ²¡æœ‰æ„Ÿè§‰å¸ƒéš†è¿‡æ»¤å™¨å°±æ˜¯æˆ‘ä»¬æƒ³è¦æ‰¾çš„那个“人â€ã€‚ **é¢è¯•官:** ä¸é”™ä¸é”™ï¼ä½ è¿˜çŸ¥é“å¸ƒéš†è¿‡æ»¤å™¨å•Šï¼æ¥ç»™æˆ‘谈一谈。 -**我:** 内心osï¼šâ€œå¦‚æžœä½ å‡†å¤‡è¿‡æµ·é‡æ•°æ®å¤„ç†çš„é¢è¯•题,你一定对:“如何确定一个数字是å¦åœ¨äºŽåŒ…å«å¤§é‡æ•°å­—的数字集中(数字集很大,5亿以上ï¼ï¼‰?â€è¿™ä¸ªé¢˜ç›®å¾ˆäº†è§£äº†ï¼è§£å†³è¿™é“题目就è¦ç”¨åˆ°å¸ƒéš†è¿‡æ»¤å™¨ã€‚†+**我:** 内心 osï¼šâ€œå¦‚æžœä½ å‡†å¤‡è¿‡æµ·é‡æ•°æ®å¤„ç†çš„é¢è¯•题,你一定对:“如何确定一个数字是å¦åœ¨äºŽåŒ…å«å¤§é‡æ•°å­—的数字集中(数字集很大,5 亿以上ï¼ï¼‰?â€è¿™ä¸ªé¢˜ç›®å¾ˆäº†è§£äº†ï¼è§£å†³è¿™é“题目就è¦ç”¨åˆ°å¸ƒéš†è¿‡æ»¤å™¨ã€‚†-> å¸ƒéš†è¿‡æ»¤å™¨åœ¨é’ˆå¯¹æµ·é‡æ•°æ®å޻釿ˆ–è€…éªŒè¯æ•°æ®åˆæ³•性的时候éžå¸¸æœ‰ç”¨ã€‚**布隆过滤器的本质实际上是 “ä½(bit)数组â€ï¼Œä¹Ÿå°±æ˜¯è¯´æ¯ä¸€ä¸ªå­˜å…¥å¸ƒéš†è¿‡æ»¤å™¨çš„æ•°æ®éƒ½åªå ä¸€ä½ã€‚相比于我们平时常用的的 Listã€Map ã€Set等数æ®ç»“构,它å ç”¨ç©ºé—´æ›´å°‘å¹¶ä¸”æ•ˆçŽ‡æ›´é«˜ï¼Œä½†æ˜¯ç¼ºç‚¹æ˜¯å…¶è¿”å›žçš„ç»“æžœæ˜¯æ¦‚çŽ‡æ€§çš„ï¼Œè€Œä¸æ˜¯éžå¸¸å‡†ç¡®çš„。** +> å¸ƒéš†è¿‡æ»¤å™¨åœ¨é’ˆå¯¹æµ·é‡æ•°æ®å޻釿ˆ–è€…éªŒè¯æ•°æ®åˆæ³•性的时候éžå¸¸æœ‰ç”¨ã€‚**布隆过滤器的本质实际上是 “ä½(bit)数组â€ï¼Œä¹Ÿå°±æ˜¯è¯´æ¯ä¸€ä¸ªå­˜å…¥å¸ƒéš†è¿‡æ»¤å™¨çš„æ•°æ®éƒ½åªå ä¸€ä½ã€‚相比于我们平时常用的的 Listã€Map ã€Set 等数æ®ç»“构,它å ç”¨ç©ºé—´æ›´å°‘å¹¶ä¸”æ•ˆçŽ‡æ›´é«˜ï¼Œä½†æ˜¯ç¼ºç‚¹æ˜¯å…¶è¿”å›žçš„ç»“æžœæ˜¯æ¦‚çŽ‡æ€§çš„ï¼Œè€Œä¸æ˜¯éžå¸¸å‡†ç¡®çš„。** > > **当一个元素加入布隆过滤器中的时候,会进行如下æ“作:** > @@ -132,11 +132,9 @@ > > 举个简å•的例å­ï¼š > -> -> > ![布隆过滤器hash计算](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-11/布隆过滤器-hashè¿ç®—.png) > -> 如图所示,当字符串存储è¦åŠ å…¥åˆ°å¸ƒéš†è¿‡æ»¤å™¨ä¸­æ—¶ï¼Œè¯¥å­—ç¬¦ä¸²é¦–å…ˆç”±å¤šä¸ªå“ˆå¸Œå‡½æ•°ç”Ÿæˆä¸åŒçš„哈希值,然åŽåœ¨å¯¹åº”çš„ä½æ•°ç»„的下表的元素设置为 1ï¼ˆå½“ä½æ•°ç»„åˆå§‹åŒ–æ—¶ ,所有ä½ç½®å‡ä¸º0)。当第二次存储相åŒå­—符串时,因为先å‰çš„对应ä½ç½®å·²è®¾ç½®ä¸º1ï¼Œæ‰€ä»¥å¾ˆå®¹æ˜“çŸ¥é“æ­¤å€¼å·²ç»å­˜åœ¨ï¼ˆåŽ»é‡éžå¸¸æ–¹ä¾¿ï¼‰ã€‚ +> 如图所示,当字符串存储è¦åŠ å…¥åˆ°å¸ƒéš†è¿‡æ»¤å™¨ä¸­æ—¶ï¼Œè¯¥å­—ç¬¦ä¸²é¦–å…ˆç”±å¤šä¸ªå“ˆå¸Œå‡½æ•°ç”Ÿæˆä¸åŒçš„哈希值,然åŽåœ¨å¯¹åº”çš„ä½æ•°ç»„的下表的元素设置为 1ï¼ˆå½“ä½æ•°ç»„åˆå§‹åŒ–æ—¶ ,所有ä½ç½®å‡ä¸º 0)。当第二次存储相åŒå­—符串时,因为先å‰çš„对应ä½ç½®å·²è®¾ç½®ä¸º 1ï¼Œæ‰€ä»¥å¾ˆå®¹æ˜“çŸ¥é“æ­¤å€¼å·²ç»å­˜åœ¨ï¼ˆåŽ»é‡éžå¸¸æ–¹ä¾¿ï¼‰ã€‚ > > 如果我们需è¦åˆ¤æ–­æŸä¸ªå­—符串是å¦åœ¨å¸ƒéš†è¿‡æ»¤å™¨ä¸­æ—¶ï¼Œåªéœ€è¦å¯¹ç»™å®šå­—ç¬¦ä¸²å†æ¬¡è¿›è¡Œç›¸åŒçš„哈希计算,得到值之åŽåˆ¤æ–­ä½æ•°ç»„中的æ¯ä¸ªå…ƒç´ æ˜¯å¦éƒ½ä¸º 1,如果值都为 1,那么说明这个值在布隆过滤器中,如果存在一个值ä¸ä¸º 1,说明该元素ä¸åœ¨å¸ƒéš†è¿‡æ»¤å™¨ä¸­ã€‚ > @@ -150,34 +148,34 @@ -更多关于布隆过滤器的内容å¯ä»¥çœ‹æˆ‘的这篇原创:[《ä¸äº†è§£å¸ƒéš†è¿‡æ»¤å™¨ï¼Ÿä¸€æ–‡ç»™ä½ æ•´çš„æ˜Žæ˜Žç™½ç™½ï¼ã€‹](https://github.com/Snailclimb/JavaGuide/blob/master/docs/dataStructures-algorithms/data-structure/bloom-filter.md) ,强烈推è,个人感觉网上应该找ä¸åˆ°æ€»ç»“的这么明明白白的文章了。 +更多关于布隆过滤器的内容å¯ä»¥çœ‹æˆ‘的这篇原创:[《ä¸äº†è§£å¸ƒéš†è¿‡æ»¤å™¨ï¼Ÿä¸€æ–‡ç»™ä½ æ•´çš„æ˜Žæ˜Žç™½ç™½ï¼ã€‹](https://github.com/Snailclimb/JavaGuide/blob/master/docs/dataStructures-algorithms/data-structure/bloom-filter.md "《ä¸äº†è§£å¸ƒéš†è¿‡æ»¤å™¨ï¼Ÿä¸€æ–‡ç»™ä½ æ•´çš„æ˜Žæ˜Žç™½ç™½ï¼ã€‹") ,强烈推è,个人感觉网上应该找ä¸åˆ°æ€»ç»“的这么明明白白的文章了。 -**é¢è¯•官:** 好了好了。项目就暂时问到这里å§ï¼ä¸‹é¢æœ‰ä¸€äº›æ¯”较基础的问题我简å•地问一下你。内心os: éš¾ä¸æˆè¿™å®¶ä¼™æ»¡å£é«˜å¹¶å‘,连最基础的东西都ä¸ä¼šå§ï¼ +**é¢è¯•官:** 好了好了。项目就暂时问到这里å§ï¼ä¸‹é¢æœ‰ä¸€äº›æ¯”较基础的问题我简å•地问一下你。内心 os: éš¾ä¸æˆè¿™å®¶ä¼™æ»¡å£é«˜å¹¶å‘,连最基础的东西都ä¸ä¼šå§ï¼ **我:** å¥½çš„å¥½çš„ï¼æ²¡é—®é¢˜ï¼ -**é¢è¯•官:** æµè§ˆå™¨è¾“å…¥URLå‘生了什么? +**é¢è¯•官:** æµè§ˆå™¨è¾“å…¥ URL å‘生了什么? -**我:**内心 osï¼šâ€œå¾ˆå¸¸é—®çš„ä¸€ä¸ªé—®é¢˜ï¼Œå»ºè®®æ‹¿å°æœ¬æœ¬è®°å¥½äº†ï¼å¦å¤–ï¼Œç™¾åº¦å¥½åƒæœ€å–œæ¬¢é—®è¿™ä¸ªé—®é¢˜ï¼ŒåŽ»ç™¾åº¦é¢è¯•å¯è¦æå‰å¤‡å¥½è¿™é“题的功课哦ï¼ç›¸ä¼¼é—®é¢˜ï¼šæ‰“开一个网页,整个过程会使用哪些å议?â€ã€‚ +**我:** 内心 osï¼šâ€œå¾ˆå¸¸é—®çš„ä¸€ä¸ªé—®é¢˜ï¼Œå»ºè®®æ‹¿å°æœ¬æœ¬è®°å¥½äº†ï¼å¦å¤–ï¼Œç™¾åº¦å¥½åƒæœ€å–œæ¬¢é—®è¿™ä¸ªé—®é¢˜ï¼ŒåŽ»ç™¾åº¦é¢è¯•å¯è¦æå‰å¤‡å¥½è¿™é“题的功课哦ï¼ç›¸ä¼¼é—®é¢˜ï¼šæ‰“开一个网页,整个过程会使用哪些å议?â€ã€‚ -> å›¾è§£ï¼ˆå›¾ç‰‡æ¥æºï¼šã€Šå›¾è§£HTTP》): +> å›¾è§£ï¼ˆå›¾ç‰‡æ¥æºï¼šã€Šå›¾è§£ HTTP》): > > > > 总体æ¥è¯´åˆ†ä¸ºä»¥ä¸‹å‡ ä¸ªè¿‡ç¨‹: > -> 1. DNSè§£æž -> 2. TCP连接 -> 3. å‘é€HTTP请求 -> 4. æœåС噍处ç†è¯·æ±‚并返回HTTP报文 +> 1. DNS è§£æž +> 2. TCP 连接 +> 3. å‘é€ HTTP 请求 +> 4. æœåС噍处ç†è¯·æ±‚并返回 HTTP 报文 > 5. æµè§ˆå™¨è§£æžæ¸²æŸ“é¡µé¢ > 6. è¿žæŽ¥ç»“æŸ > > 具体å¯ä»¥å‚考下é¢è¿™ç¯‡æ–‡ç« ï¼š > -> - [https://segmentfault.com/a/1190000006879700](https://segmentfault.com/a/1190000006879700) +> - [https://segmentfault.com/a/1190000006879700](https://segmentfault.com/a/1190000006879700 "https://segmentfault.com/a/1190000006879700") -**é¢è¯•官:** TCPå’ŒUDP区别? +**é¢è¯•官:** TCP å’Œ UDP 区别? **我:** @@ -185,18 +183,40 @@ > > UDP åœ¨ä¼ é€æ•°æ®ä¹‹å‰ä¸éœ€è¦å…ˆå»ºç«‹è¿žæŽ¥ï¼Œè¿œåœ°ä¸»æœºåœ¨æ”¶åˆ° UDP 报文åŽï¼Œä¸éœ€è¦ç»™å‡ºä»»ä½•确认。虽然 UDP 䏿供å¯é äº¤ä»˜ï¼Œä½†åœ¨æŸäº›æƒ…况下 UDP ç¡®æ˜¯ä¸€ç§æœ€æœ‰æ•ˆçš„工作方å¼ï¼ˆä¸€èˆ¬ç”¨äºŽå³æ—¶é€šä¿¡ï¼‰ï¼Œæ¯”如: QQ 语音〠QQ 视频 ã€ç›´æ’­ç­‰ç­‰ > -> TCP æä¾›é¢å‘连接的æœåŠ¡ã€‚åœ¨ä¼ é€æ•°æ®ä¹‹å‰å¿…须先建立连接,数æ®ä¼ é€ç»“æŸåŽè¦é‡Šæ”¾è¿žæŽ¥ã€‚ TCP ä¸æä¾›å¹¿æ’­æˆ–å¤šæ’­æœåŠ¡ã€‚ç”±äºŽ TCP è¦æä¾›å¯é çš„,é¢å‘连接的传输æœåŠ¡ï¼ˆTCPçš„å¯é ä½“现在TCP在传递数æ®ä¹‹å‰ï¼Œä¼šæœ‰ä¸‰æ¬¡æ¡æ‰‹æ¥å»ºç«‹è¿žæŽ¥ï¼Œè€Œä¸”在数æ®ä¼ é€’时,有确认ã€çª—å£ã€é‡ä¼ ã€æ‹¥å¡žæŽ§åˆ¶æœºåˆ¶ï¼Œåœ¨æ•°æ®ä¼ å®ŒåŽï¼Œè¿˜ä¼šæ–­å¼€è¿žæŽ¥ç”¨æ¥èŠ‚çº¦ç³»ç»Ÿèµ„æºï¼‰ï¼Œè¿™ä¸€éš¾ä»¥é¿å…增加了许多开销,如确认,æµé‡æŽ§åˆ¶ï¼Œè®¡æ—¶å™¨ä»¥åŠè¿žæŽ¥ç®¡ç†ç­‰ã€‚è¿™ä¸ä»…使å议数æ®å•元的首部增大很多,还è¦å ç”¨è®¸å¤šå¤„ç†æœºèµ„æºã€‚TCP 一般用于文件传输ã€å‘é€å’ŒæŽ¥æ”¶é‚®ä»¶ã€è¿œç¨‹ç™»å½•等场景。 +> TCP æä¾›é¢å‘连接的æœåŠ¡ã€‚åœ¨ä¼ é€æ•°æ®ä¹‹å‰å¿…须先建立连接,数æ®ä¼ é€ç»“æŸåŽè¦é‡Šæ”¾è¿žæŽ¥ã€‚ TCP ä¸æä¾›å¹¿æ’­æˆ–å¤šæ’­æœåŠ¡ã€‚ç”±äºŽ TCP è¦æä¾›å¯é çš„,é¢å‘连接的传输æœåŠ¡ï¼ˆTCP çš„å¯é ä½“现在 TCP 在传递数æ®ä¹‹å‰ï¼Œä¼šæœ‰ä¸‰æ¬¡æ¡æ‰‹æ¥å»ºç«‹è¿žæŽ¥ï¼Œè€Œä¸”在数æ®ä¼ é€’时,有确认ã€çª—å£ã€é‡ä¼ ã€æ‹¥å¡žæŽ§åˆ¶æœºåˆ¶ï¼Œåœ¨æ•°æ®ä¼ å®ŒåŽï¼Œè¿˜ä¼šæ–­å¼€è¿žæŽ¥ç”¨æ¥èŠ‚çº¦ç³»ç»Ÿèµ„æºï¼‰ï¼Œè¿™ä¸€éš¾ä»¥é¿å…增加了许多开销,如确认,æµé‡æŽ§åˆ¶ï¼Œè®¡æ—¶å™¨ä»¥åŠè¿žæŽ¥ç®¡ç†ç­‰ã€‚è¿™ä¸ä»…使å议数æ®å•元的首部增大很多,还è¦å ç”¨è®¸å¤šå¤„ç†æœºèµ„æºã€‚TCP 一般用于文件传输ã€å‘é€å’ŒæŽ¥æ”¶é‚®ä»¶ã€è¿œç¨‹ç™»å½•等场景。 -**é¢è¯•官:** TCP如何ä¿è¯ä¼ è¾“å¯é æ€§? +**é¢è¯•官:** TCP 如何ä¿è¯ä¼ è¾“å¯é æ€§? **我:** -> 1. 应用数æ®è¢«åˆ†å‰²æˆ TCP 认为最适åˆå‘é€çš„æ•°æ®å—。 -> 2. TCP ç»™å‘é€çš„æ¯ä¸€ä¸ªåŒ…è¿›è¡Œç¼–å·ï¼ŒæŽ¥æ”¶æ–¹å¯¹æ•°æ®åŒ…进行排åºï¼ŒæŠŠæœ‰åºæ•°æ®ä¼ é€ç»™åº”用层。 -> 3. **校验和:** TCP å°†ä¿æŒå®ƒé¦–部和数æ®çš„æ£€éªŒå’Œã€‚这是一个端到端的检验和,目的是检测数æ®åœ¨ä¼ è¾“过程中的任何å˜åŒ–。如果收到段的检验和有差错,TCP 将丢弃这个报文段和ä¸ç¡®è®¤æ”¶åˆ°æ­¤æŠ¥æ–‡æ®µã€‚ -> 4. TCP 的接收端会丢弃é‡å¤çš„æ•°æ®ã€‚ -> 5. **æµé‡æŽ§åˆ¶ï¼š** TCP 连接的æ¯ä¸€æ–¹éƒ½æœ‰å›ºå®šå¤§å°çš„缓冲空间,TCP的接收端åªå…许å‘é€ç«¯å‘é€æŽ¥æ”¶ç«¯ç¼“å†²åŒºèƒ½æŽ¥çº³çš„æ•°æ®ã€‚当接收方æ¥ä¸åŠå¤„ç†å‘逿–¹çš„æ•°æ®ï¼Œèƒ½æç¤ºå‘逿–¹é™ä½Žå‘é€çš„速率,防止包丢失。TCP 使用的æµé‡æŽ§åˆ¶å议是å¯å˜å¤§å°çš„æ»‘动窗å£å议。 (TCP 利用滑动窗å£å®žçްæµé‡æŽ§åˆ¶ï¼‰ +> 1. 应用数æ®è¢«åˆ†å‰²æˆ TCP 认为最适åˆå‘é€çš„æ•°æ®å—。 +> 2. TCP ç»™å‘é€çš„æ¯ä¸€ä¸ªåŒ…è¿›è¡Œç¼–å·ï¼ŒæŽ¥æ”¶æ–¹å¯¹æ•°æ®åŒ…进行排åºï¼ŒæŠŠæœ‰åºæ•°æ®ä¼ é€ç»™åº”用层。 +> 3. **校验和:** TCP å°†ä¿æŒå®ƒé¦–部和数æ®çš„æ£€éªŒå’Œã€‚这是一个端到端的检验和,目的是检测数æ®åœ¨ä¼ è¾“过程中的任何å˜åŒ–。如果收到段的检验和有差错,TCP 将丢弃这个报文段和ä¸ç¡®è®¤æ”¶åˆ°æ­¤æŠ¥æ–‡æ®µã€‚ +> 4. TCP 的接收端会丢弃é‡å¤çš„æ•°æ®ã€‚ +> 5. **æµé‡æŽ§åˆ¶ï¼š** TCP 连接的æ¯ä¸€æ–¹éƒ½æœ‰å›ºå®šå¤§å°çš„缓冲空间,TCP 的接收端åªå…许å‘é€ç«¯å‘é€æŽ¥æ”¶ç«¯ç¼“å†²åŒºèƒ½æŽ¥çº³çš„æ•°æ®ã€‚当接收方æ¥ä¸åŠå¤„ç†å‘逿–¹çš„æ•°æ®ï¼Œèƒ½æç¤ºå‘逿–¹é™ä½Žå‘é€çš„速率,防止包丢失。TCP 使用的æµé‡æŽ§åˆ¶å议是å¯å˜å¤§å°çš„æ»‘动窗å£å议。 (TCP 利用滑动窗å£å®žçްæµé‡æŽ§åˆ¶ï¼‰ > 6. **拥塞控制:** 当网络拥塞时,å‡å°‘æ•°æ®çš„å‘é€ã€‚ -> 7. **ARQå议:** 也是为了实现å¯é ä¼ è¾“的,它的基本原ç†å°±æ˜¯æ¯å‘å®Œä¸€ä¸ªåˆ†ç»„å°±åœæ­¢å‘é€ï¼Œç­‰å¾…对方确认。在收到确认åŽå†å‘下一个分组。 -> 8. **è¶…æ—¶é‡ä¼ ï¼š** 当 TCP å‘出一个段åŽï¼Œå®ƒå¯åŠ¨ä¸€ä¸ªå®šæ—¶å™¨ï¼Œç­‰å¾…ç›®çš„ç«¯ç¡®è®¤æ”¶åˆ°è¿™ä¸ªæŠ¥æ–‡æ®µã€‚å¦‚æžœä¸èƒ½åŠæ—¶æ”¶åˆ°ä¸€ä¸ªç¡®è®¤ï¼Œå°†é‡å‘这个报文段。 +> 7. **ARQ å议:** 也是为了实现å¯é ä¼ è¾“的,它的基本原ç†å°±æ˜¯æ¯å‘å®Œä¸€ä¸ªåˆ†ç»„å°±åœæ­¢å‘é€ï¼Œç­‰å¾…对方确认。在收到确认åŽå†å‘下一个分组。 +> 8. **è¶…æ—¶é‡ä¼ ï¼š** 当 TCP å‘出一个段åŽï¼Œå®ƒå¯åŠ¨ä¸€ä¸ªå®šæ—¶å™¨ï¼Œç­‰å¾…ç›®çš„ç«¯ç¡®è®¤æ”¶åˆ°è¿™ä¸ªæŠ¥æ–‡æ®µã€‚å¦‚æžœä¸èƒ½åŠæ—¶æ”¶åˆ°ä¸€ä¸ªç¡®è®¤ï¼Œå°†é‡å‘这个报文段。 +**é¢è¯•官:** æˆ‘å†æ¥é—®ä½ ä¸€äº› Java 基础的问题å§ï¼å°ä¼™å­ã€‚ + +**我:** 好的。(内心 os:“你尽管æ¥ï¼â€ï¼‰ + +**é¢è¯•官:** 既然有了字节æµ,ä¸ºä»€ä¹ˆè¿˜è¦æœ‰å­—符æµ? + +我:内心 os :“问题本质想问:**ä¸ç®¡æ˜¯æ–‡ä»¶è¯»å†™è¿˜æ˜¯ç½‘络å‘é€æŽ¥æ”¶ï¼Œä¿¡æ¯çš„æœ€å°å­˜å‚¨å•元都是字节,那为什么 I/O æµæ“作è¦åˆ†ä¸ºå­—èŠ‚æµæ“ä½œå’Œå­—ç¬¦æµæ“作呢?**†+ +> å­—ç¬¦æµæ˜¯ç”± Java 虚拟机将字节转æ¢å¾—到的,问题就出在这个过程还算是éžå¸¸è€—时,并且,如果我们ä¸çŸ¥é“ç¼–ç ç±»åž‹å°±å¾ˆå®¹æ˜“出现乱ç é—®é¢˜ã€‚所以, I/O æµå°±å¹²è„†æä¾›äº†ä¸€ä¸ªç›´æŽ¥æ“作字符的接å£ï¼Œæ–¹ä¾¿æˆ‘ä»¬å¹³æ—¶å¯¹å­—ç¬¦è¿›è¡Œæµæ“作。如果音频文件ã€å›¾ç‰‡ç­‰åª’ä½“æ–‡ä»¶ç”¨å­—èŠ‚æµæ¯”较好,如果涉åŠåˆ°å­—符的è¯ä½¿ç”¨å­—ç¬¦æµæ¯”较好。 + +**é¢è¯•官**ï¼šæ·±æ‹·è´ å’Œ æµ…æ‹·è´æœ‰å•¥åŒºåˆ«å‘¢ï¼Ÿ + +**我:** + +> 1. **æµ…æ‹·è´**:对基本数æ®ç±»åž‹è¿›è¡Œå€¼ä¼ é€’,对引用数æ®ç±»åž‹è¿›è¡Œå¼•用传递般的拷è´ï¼Œæ­¤ä¸ºæµ…æ‹·è´ã€‚ +> 2. **深拷è´**:对基本数æ®ç±»åž‹è¿›è¡Œå€¼ä¼ é€’,对引用数æ®ç±»åž‹ï¼Œåˆ›å»ºä¸€ä¸ªæ–°çš„对象,并å¤åˆ¶å…¶å†…容,此为深拷è´ã€‚ +> +> ![deep and shallow copy](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-7/java-deep-and-shallow-copy.jpg) + +**é¢è¯•官:** 好的ï¼é¢è¯•结æŸã€‚å°ä¼™å­å¯ä»¥çš„ï¼å›žå®¶ç­‰é€šçŸ¥å§ï¼ + +**我:** 好的好的ï¼è¾›è‹¦æ‚¨äº†ï¼