From 353f8c7056a0df2a6e5661ea252c8be223bdbf30 Mon Sep 17 00:00:00 2001 From: Snailclimb Date: Sun, 1 Dec 2019 11:25:58 +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 | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 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 fdb26309..d1deecf5 100644 --- a/docs/essential-content-for-interview/real-interview-experience-analysis/ã€çœŸå®žé¢è¯•ç»åŽ†ã€‘æˆ‘æ‰€ç»åŽ†çš„é˜¿é‡Œä¸€äºŒé¢æ€»ç»“(附详解).md +++ b/docs/essential-content-for-interview/real-interview-experience-analysis/ã€çœŸå®žé¢è¯•ç»åŽ†ã€‘æˆ‘æ‰€ç»åŽ†çš„é˜¿é‡Œä¸€äºŒé¢æ€»ç»“(附详解).md @@ -5,6 +5,8 @@ 3. Redis 相关:缓存穿é€é—®é¢˜çš„解决; 4. 一些 Java 基础问题; +䏋颿˜¯æ­£æ–‡ï¼ + é¢è¯•开始,å在我å‰é¢çš„就是这次我的é¢è¯•官å—?这å‘é‡çœ‹ç€æ ¹æœ¬ä¸åƒç¨‹åºå‘˜å•Šï¼Ÿæˆ‘心里正嘀咕ç€ï¼Œåªå¬è§é¢è¯•官说:“å°ä¼™ï¼Œä¸‹åˆå¥½ï¼Œæˆ‘今天就是你的é¢è¯•官,咱们开始é¢è¯•å§ï¼â€ã€‚ ### 第一é¢å¼€å§‹ @@ -76,7 +78,7 @@ **é¢è¯•官**:åšé¡¹ç›®çš„过程中é‡åˆ°äº†ä»€ä¹ˆé—®é¢˜å—?解决了å—ï¼Ÿå¦‚æžœè§£å†³çš„è¯æ˜¯å¦‚何解决的呢? -**我** : 内心 os: "åšçš„过程中好åƒä¹Ÿæ²¡æœ‰é‡åˆ°ä»€ä¹ˆé—®é¢˜å•Šï¼æ€Žä¹ˆåŠžï¼Ÿæ€Žä¹ˆåŠžï¼Ÿçªç„¶æƒ³åˆ°å¯ä»¥è¯´æˆ‘在使用 Redis 过程中é‡åˆ°çš„问题,毕竟我对 Redis 还算熟悉嘛,把é¢è¯•官往这个方å‘å¸å¼•,准没错。" +**我** : 内心 os: "åšçš„过程中好åƒä¹Ÿæ²¡æœ‰é‡åˆ°ä»€ä¹ˆé—®é¢˜å•Šï¼æ€Žä¹ˆåŠžï¼Ÿæ€Žä¹ˆåŠžï¼Ÿçªç„¶æƒ³åˆ°å¯ä»¥è¯´æˆ‘在使用 Redis 过程中é‡åˆ°çš„问题,毕竟我对 Redis 还算熟悉嘛,**把é¢è¯•官往这个方å‘å¸å¼•**,准没错。" > 我在使用 Redis 对常用数æ®è¿›è¡Œç¼“冲的过程中出现了缓存穿é€ã€‚ç„¶åŽï¼Œæˆ‘通过谷歌æœç´¢ç›¸å…³çš„解决方案æ¥è§£å†³çš„。 @@ -92,7 +94,7 @@ > 2. 存储层ä¸å‘½ä¸­ï¼Œä¸å°†ç©ºç»“果写回缓存。 > 3. 返回空结果给客户端。 > -> 一般 MySQL 默认的最大连接数在 150 å·¦å³ï¼Œè¿™ä¸ªå¯ä»¥é€šè¿‡ `show variables like '%max_connections%';`å‘½ä»¤æ¥æŸ¥çœ‹ã€‚æœ€å¤§è¿žæŽ¥æ•°ä¸€ä¸ªè¿˜åªæ˜¯ä¸€ä¸ªæŒ‡æ ‡ï¼Œcpu,内存,ç£ç›˜ï¼Œç½‘络等无力æ¡ä»¶éƒ½æ˜¯å…¶è¿è¡ŒæŒ‡æ ‡ï¼Œè¿™äº›æŒ‡æ ‡éƒ½ä¼šé™åˆ¶å…¶å¹¶å‘èƒ½åŠ›ï¼æ‰€ä»¥ï¼Œä¸€èˆ¬ 3000 个并å‘请求就能打死大部分数æ®åº“了。 +> 一般 MySQL 默认的最大连接数在 150 å·¦å³ï¼Œè¿™ä¸ªå¯ä»¥é€šè¿‡ `show variables like '%max_connections%';`å‘½ä»¤æ¥æŸ¥çœ‹ã€‚æœ€å¤§è¿žæŽ¥æ•°ä¸€ä¸ªè¿˜åªæ˜¯ä¸€ä¸ªæŒ‡æ ‡ï¼Œcpu,内存,ç£ç›˜ï¼Œç½‘ç»œç­‰ç‰©ç†æ¡ä»¶éƒ½æ˜¯å…¶è¿è¡ŒæŒ‡æ ‡ï¼Œè¿™äº›æŒ‡æ ‡éƒ½ä¼šé™åˆ¶å…¶å¹¶å‘èƒ½åŠ›ï¼æ‰€ä»¥ï¼Œä¸€èˆ¬ 3000 的并å‘请求就能打死大部分数æ®åº“了。 **é¢è¯•官:** å°ä¼™å­ä¸é”™å•Šï¼è¿˜å‡†å¤‡é—®ä½ ï¼šâ€œä¸ºä»€ä¹ˆ 3000 的并å‘èƒ½æŠŠæ”¯æŒæœ€å¤§è¿žæŽ¥æ•° 4000 æ•°æ®åº“åŽ‹æ­»ï¼Ÿâ€æƒ³ä¸åˆ°ä½ è‡ªå·±å°±æå‰å›žç­”了ï¼ä¸é”™ï¼ @@ -102,11 +104,11 @@ > > 解决方案: > -> 1. **缓存无效 key** : 如果缓存和数æ®åº“都查ä¸åˆ°æŸä¸ª key 的数æ®å°±å†™ä¸€ä¸ªåˆ° redis 中去并设置过期时间,具体命令如下:`SET key value EX 10086`ã€‚è¿™ç§æ–¹å¼å¯ä»¥è§£å†³è¯·æ±‚çš„ key å˜åŒ–ä¸é¢‘ç¹çš„æƒ…å†µï¼Œå¦‚ä½•é»‘å®¢æ¶æ„æ”»å‡»ï¼Œæ¯æ¬¡æž„建的ä¸åŒçš„请求 key,会导致 redis ä¸­ç¼“å­˜å¤§é‡æ— æ•ˆçš„ key ã€‚å¾ˆæ˜Žæ˜¾ï¼Œè¿™ç§æ–¹æ¡ˆå¹¶ä¸èƒ½ä»Žæ ¹æœ¬ä¸Šè§£å†³æ­¤é—®é¢˜ã€‚如果éžè¦ç”¨è¿™ç§æ–¹å¼æ¥è§£å†³ç©¿é€é—®é¢˜çš„è¯ï¼Œå°½é‡å°†æ— æ•ˆçš„ key 的过期时间设置短一点比如 1 分钟。 +> **1)缓存无效 key** : 如果缓存和数æ®åº“都查ä¸åˆ°æŸä¸ª key 的数æ®å°±å†™ä¸€ä¸ªåˆ° redis 中去并设置过期时间,具体命令如下:`SET key value EX 10086`ã€‚è¿™ç§æ–¹å¼å¯ä»¥è§£å†³è¯·æ±‚çš„ key å˜åŒ–ä¸é¢‘ç¹çš„æƒ…å†µï¼Œå¦‚ä½•é»‘å®¢æ¶æ„æ”»å‡»ï¼Œæ¯æ¬¡æž„建的ä¸åŒçš„请求 key,会导致 redis ä¸­ç¼“å­˜å¤§é‡æ— æ•ˆçš„ key ã€‚å¾ˆæ˜Žæ˜¾ï¼Œè¿™ç§æ–¹æ¡ˆå¹¶ä¸èƒ½ä»Žæ ¹æœ¬ä¸Šè§£å†³æ­¤é—®é¢˜ã€‚如果éžè¦ç”¨è¿™ç§æ–¹å¼æ¥è§£å†³ç©¿é€é—®é¢˜çš„è¯ï¼Œå°½é‡å°†æ— æ•ˆçš„ key 的过期时间设置短一点比如 1 分钟。 > > å¦å¤–,这里多说一嘴,一般情况下我们是这样设计 key 的: `表å:列å:主键å:主键值`。 > -> 2. **布隆过滤器:** **布隆过滤器是一个éžå¸¸ç¥žå¥‡çš„æ•°æ®ç»“构,通过它我们å¯ä»¥éžå¸¸æ–¹ä¾¿åœ°åˆ¤æ–­ä¸€ä¸ªç»™å®šæ•°æ®æ˜¯å¦å­˜åœ¨ä¸Žæµ·é‡æ•°æ®ä¸­ã€‚我们需è¦çš„æœºä¼šåˆ¤æ–­ key 是å¦åˆæ³•ï¼Œæœ‰æ²¡æœ‰æ„Ÿè§‰å¸ƒéš†è¿‡æ»¤å™¨å°±æ˜¯æˆ‘ä»¬æƒ³è¦æ‰¾çš„那个“人â€ã€‚** +> **2)布隆过滤器:**布隆过滤器是一个éžå¸¸ç¥žå¥‡çš„æ•°æ®ç»“构,通过它我们å¯ä»¥éžå¸¸æ–¹ä¾¿åœ°åˆ¤æ–­ä¸€ä¸ªç»™å®šæ•°æ®æ˜¯å¦å­˜åœ¨ä¸Žæµ·é‡æ•°æ®ä¸­ã€‚我们需è¦çš„就是判断 key 是å¦åˆæ³•ï¼Œæœ‰æ²¡æœ‰æ„Ÿè§‰å¸ƒéš†è¿‡æ»¤å™¨å°±æ˜¯æˆ‘ä»¬æƒ³è¦æ‰¾çš„那个“人â€ã€‚ **é¢è¯•官:** ä¸é”™ä¸é”™ï¼ä½ è¿˜çŸ¥é“å¸ƒéš†è¿‡æ»¤å™¨å•Šï¼æ¥ç»™æˆ‘谈一谈。 @@ -138,4 +140,11 @@ > > 综上,我们å¯ä»¥å¾—出:**布隆过滤器说æŸä¸ªå…ƒç´ å­˜åœ¨ï¼Œå°æ¦‚率会误判。布隆过滤器说æŸä¸ªå…ƒç´ ä¸åœ¨ï¼Œé‚£ä¹ˆè¿™ä¸ªå…ƒç´ ä¸€å®šä¸åœ¨ã€‚** -**é¢è¯•官:** 看æ¥ä½ å¯¹å¸ƒéš†è¿‡æ»¤å™¨äº†è§£çš„还挺ä¸é”™çš„嘛ï¼é‚£ä½ å¿«è¯´è¯´ä½ æœ€åŽæ˜¯æ€Žä¹ˆåˆ©ç”¨å®ƒæ¥è§£å†³ç¼“存穿é€çš„。 \ No newline at end of file +**é¢è¯•官:** 看æ¥ä½ å¯¹å¸ƒéš†è¿‡æ»¤å™¨äº†è§£çš„还挺ä¸é”™çš„嘛ï¼é‚£ä½ å¿«è¯´è¯´ä½ æœ€åŽæ˜¯æ€Žä¹ˆåˆ©ç”¨å®ƒæ¥è§£å†³ç¼“存穿é€çš„。 + +**我:** 知é“了布隆过滤器的原ç†å°±ä¹‹åŽå°±å¾ˆå®¹æ˜“åšäº†ã€‚我是利用 Redis 布隆过滤器æ¥åšçš„。我把所有å¯èƒ½å­˜åœ¨çš„请求的值都存放在布隆过滤器中,当用户请求过æ¥ï¼Œæˆ‘ä¼šå…ˆåˆ¤æ–­ç”¨æˆ·å‘æ¥çš„请求的值是å¦å­˜åœ¨äºŽå¸ƒéš†è¿‡æ»¤å™¨ä¸­ã€‚ä¸å­˜åœ¨çš„è¯ï¼Œç›´æŽ¥è¿”å›žè¯·æ±‚å‚æ•°é”™è¯¯ä¿¡æ¯ç»™å®¢æˆ·ç«¯ï¼Œå­˜åœ¨çš„è¯æ‰ä¼šèµ°ä¸‹é¢çš„æµç¨‹ã€‚æ€»ç»“ä¸€ä¸‹å°±æ˜¯ä¸‹é¢è¿™å¼ å›¾(è¿™å¼ å›¾ç‰‡ä¸æ˜¯æˆ‘画的,为了çœäº‹ç›´æŽ¥åœ¨ç½‘上找的): + + + +更多关于布隆过滤器的内容å¯ä»¥çœ‹æˆ‘的这篇原创:[《ä¸äº†è§£å¸ƒéš†è¿‡æ»¤å™¨ï¼Ÿä¸€æ–‡ç»™ä½ æ•´çš„æ˜Žæ˜Žç™½ç™½ï¼ã€‹](https://github.com/Snailclimb/JavaGuide/blob/master/docs/dataStructures-algorithms/data-structure/bloom-filter.md) ,强烈推è,个人感觉网上应该找ä¸åˆ°æ€»ç»“的这么明明白白的文章了。 +