From e37a10c76d57227ba4bda1f7d74655af3ab98847 Mon Sep 17 00:00:00 2001 From: guide Date: Thu, 13 Jan 2022 16:57:40 +0800 Subject: [PATCH] =?UTF-8?q?[docs=20add]=E6=95=8F=E6=84=9F=E8=AF=8D?= =?UTF-8?q?=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 +++- .../sentive-words-filter/brower-trie.png | Bin 0 -> 11636 bytes .../common-collections-trie.png | Bin 0 -> 13061 bytes .../images/sentive-words-filter/trie.drawio | 1 + .../images/sentive-words-filter/trie.png | Bin 0 -> 62600 bytes .../security/sentive-words-filter.md | 55 ++++++++++++++++++ 6 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 docs/system-design/security/images/sentive-words-filter/brower-trie.png create mode 100644 docs/system-design/security/images/sentive-words-filter/common-collections-trie.png create mode 100644 docs/system-design/security/images/sentive-words-filter/trie.drawio create mode 100644 docs/system-design/security/images/sentive-words-filter/trie.png create mode 100644 docs/system-design/security/sentive-words-filter.md diff --git a/README.md b/README.md index 3705a7c1..934fdb82 100755 --- a/README.md +++ b/README.md @@ -229,6 +229,12 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle 数据脱敏说的就是我们根据特定的规则对敏感信息数据进行变形,比如我们把手机号、身份证号某些位数使用 * 来代替。 +#### 敏感词过滤 + + + +https://github.com/toolgood/ToolGood.Words + ### 定时任务 最近有朋友问到定时任务相关的问题。于是,我简单写了一篇文章总结一下定时任务的一些概念以及一些常见的定时任务技术选型:[《Java定时任务大揭秘》](./docs/system-design/定时任务.md) @@ -353,7 +359,9 @@ Dubbo 是一款国产的 RPC 框架,由阿里开源。相关阅读: **一旦用户的请求超过某个时间得不到响应就结束此次请求并抛出异常。** 如果不进行超时设置可能会导致请求响应速度慢,甚至导致请求堆积进而让系统无法在处理请求。 -另外,重试的次数一般设为 3 次,再多次的重试没有好处,反而会加重服务器压力(部分场景使用失败重试机制会不太适合)。 +重试的次数一般设为 3 次,再多的重试次数没有好处,反而会加重服务器压力(部分场景使用失败重试机制会不太适合)。在一次重试失败之后通常会加上一个时间间隔 delay 再进行下一次重试,时间间隔 delay 通常建议是随机的。 + +并且,为了更好地保护下游,我们还可以结合断路器。 ### 灾备设计和异地多活 diff --git a/docs/system-design/security/images/sentive-words-filter/brower-trie.png b/docs/system-design/security/images/sentive-words-filter/brower-trie.png new file mode 100644 index 0000000000000000000000000000000000000000..e7370c4336b44f78c8e0839371354aba8727510c GIT binary patch literal 11636 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 literal 0 HcmV?d00001 diff --git a/docs/system-design/security/images/sentive-words-filter/common-collections-trie.png b/docs/system-design/security/images/sentive-words-filter/common-collections-trie.png new file mode 100644 index 0000000000000000000000000000000000000000..ef6c97a3d9433cdeaf8f0aa6822e4f2a998c4fae GIT binary patch literal 13061 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

rjR2uhm`GUE;T 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 \ No newline at end of file diff --git a/docs/system-design/security/images/sentive-words-filter/trie.png b/docs/system-design/security/images/sentive-words-filter/trie.png new file mode 100644 index 0000000000000000000000000000000000000000..28eee6570fa7c2252f6a4042574df5a8afee52be GIT binary patch literal 62600 zcmV)WK(4=uP)HOX5{paxg;_dz8*XZQ${o(BW-|PM4+3Dfd=koXd^!Wew`v3U*|Nj2}>hk{V^Zw@C z>-zlv<=W~1008gx{_*zy=-=)9{r~6Q?CRm}>*Me9?)L5G@%{b%?&$LP&&~Mt`uX?! z_3-!d?DXvA@a^>e_w)GP>;1H}wEg}6>GA&i`~2|f^X~Ni@$2*Z`TP0N&-U{7{QLd+ z)6sE~!gQ3w`PI|<+uClB!2IUrZI8c!pUL{y*817kcbCNd^Yi=U;*F@zeVoU7nZ=iM zr-h=+{qOGn`1t{#>gv?S+oHJG z%evFW#l^e3yRDJAUtVAm5)#I<&q_*5_xb$u_WJGZ?b6-s(Zbj*EiEZ2D$c#u$+pq1 zle?vcviSJ;+1c6P;NYW#v6z^e@ALWe^z}tWM!TcMoO`R4la$WR&RSVoz^cieeXP4$ zR)B$m=jZ2&iHl@pWIjDUIyySQW@DY5pD{2nsHmuQb#;7vel#>S_V)J6%gnh|QKpEr z#Bpx#@9**P@z|c6kB^XOXllJ*Td%LL!K};4dv|PXZKI>4aBy+b;Pb%J>zjJ3x69{< zgN5tK$jyU**W~x!uB<{rLwb37(2R-Or={n>zpbgT_UPy0wzPqWlGBut%GvPq^Yb+} zJMGZVrk|AcvAV{drm|^oc*(%due80mu)Xfq)w-ab zoP4WCR&6{)P+M+^XMUj6yt{jpw}f$VbYo&@iMh#U%x-3$d1e*@{vRm5*&o)6#d>$xEa$V? zdcIt45cq2`ThC_8YsW7jAmIOnZ&vg5a=uv1S6?2#{C4alSTx|#jo)prHrD#rhcAQm z2mEjF?KQitZ&t@|m)`;mvH?&U07hN{qH0x=06_M|aksDwWc3XM1pMa_U7OpT{(Czj zJ1;~6kg(kTtV`ii_f9ssU5KdU=X4J zivtK*wsdc$R~OVm;4f z4<$2D2$q3`x!TO^&c8WE5D@U6!xy{7`q~%Z4S�TY=^sfY9jN^M-tUmW#YjAmR#! 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 trie = new PatriciaTrie<>(); +trie.put("Abigail", "student"); +trie.put("Abi", "doctor"); +trie.put("Annabel", "teacher"); +trie.put("Christina", "student"); +trie.put("Chris", "doctor"); +Assertions.assertTrue(trie.containsKey("Abigail")); +assertEquals("{Abi=doctor, Abigail=student}", trie.prefixMap("Abi").toString()); +assertEquals("{Chris=doctor, Christina=student}", trie.prefixMap("Chr").toString()); +``` + +Aho-Corasick(AC)自动机是一种建立在Trie 树上的一种改进算法,是一种多模式匹配算法,由贝尔实验室的研究人员Alfred V. Aho 和 Margaret J.Corasick 发明。 + +AC自动机算法使用Trie 树来存放模式串的前缀,通过失败匹配指针(失配指针)来处理匹配失败的跳转。 + +相关阅读:[地铁十分钟 | AC自动机](https://zhuanlan.zhihu.com/p/146369212) + +## DFA + +DFA(Deterministic Finite Automaton)即确定有穷自动机。 + + +