Skip to content

Commit 9d639b1

Browse files
committed
📝盘古之白 IO-01/Blog@785c017
1 parent 260262b commit 9d639b1

File tree

9 files changed

+47
-49
lines changed

9 files changed

+47
-49
lines changed

index.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ return new BigInteger(1, md.digest()).toString(16);
1717
<blockquote>
1818
<p><strong>【强制】</strong> 所有的相同类型的包装类对象之间值的比较,全部使用 <code>equals</code> 方法比较。</p>
1919
&lt;/blockquote></description></item><item><title>有趣的算法-布隆过滤器</title><link>/posts/%E6%9C%89%E8%B6%A3%E7%9A%84%E7%AE%97%E6%B3%95-%E5%B8%83%E9%9A%86%E8%BF%87%E6%BB%A4%E5%99%A8/</link><pubDate>Wed, 30 Oct 2019 00:00:00 +0000</pubDate><guid>/posts/%E6%9C%89%E8%B6%A3%E7%9A%84%E7%AE%97%E6%B3%95-%E5%B8%83%E9%9A%86%E8%BF%87%E6%BB%A4%E5%99%A8/</guid><description>&lt;h2 id="引言">引言&lt;/h2>
20-
&lt;p>现在假设一个需求:设计一个url黑名单系统,需求是1亿个url黑名单,每个url平均长度30字节,判断当前的url是否在黑名单中&lt;/p>
21-
&lt;p>我们最先想到的可能时HashSet,如果少量的url,HashSet有着O(1)的查询效率是首选的方案。但是面对1亿个url,单单存储value就需要2861MB内存,显然不可取。而如果放到硬盘上进行数据库查询,面对近3GB的数据库,每次匹配都要查询的话,IO操作本身就是瓶颈&lt;/p>
20+
&lt;p>现在假设一个需求:设计一个 url 黑名单系统,需求是 1 亿个 url 黑名单,每个 url 平均长度 30 字节,判断当前的 url 是否在黑名单中&lt;/p>
21+
&lt;p>我们最先想到的可能时 HashSet,如果少量的 url,HashSet 有着 O(1) 的查询效率是首选的方案。但是面对 1 亿个 url,单单存储 value 就需要 2861MB 内存,显然不可取。而如果放到硬盘上进行数据库查询,面对近 3GB 的数据库,每次匹配都要查询的话,IO 操作本身就是瓶颈&lt;/p>
2222
&lt;p>所以这时候引入了布隆过滤器。&lt;/p></description></item><item><title>从阿里规约谈起-Arrays.asList 三坑</title><link>/posts/%E4%BB%8E%E9%98%BF%E9%87%8C%E8%A7%84%E7%BA%A6%E8%B0%88%E8%B5%B7-arrays.aslist%E4%B8%89%E5%9D%91/</link><pubDate>Tue, 24 Sep 2019 00:00:00 +0000</pubDate><guid>/posts/%E4%BB%8E%E9%98%BF%E9%87%8C%E8%A7%84%E7%BA%A6%E8%B0%88%E8%B5%B7-arrays.aslist%E4%B8%89%E5%9D%91/</guid><description>&lt;h2 id="前言">前言&lt;/h2>
2323
&lt;p>将数组转换成 List 是日常开发十分常见的操作,对此 JDK 提供了一个非常好用的工具类:&lt;/p>
2424
&lt;pre>&lt;code class="language-java">List list = Arrays.asList(array);

page/2/index.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@
7171
<a href=/posts/%E6%9C%89%E8%B6%A3%E7%9A%84%E7%AE%97%E6%B3%95-%E5%B8%83%E9%9A%86%E8%BF%87%E6%BB%A4%E5%99%A8/ class="font-bold text-xl hover:text-eureka">有趣的算法-布隆过滤器</a>
7272
</div>
7373
<div class=content>
74-
引言 现在假设一个需求:设计一个url黑名单系统,需求是1亿个url黑名单,每个url平均长度30字节,判断当前的url是否在黑名单中
75-
我们最先想到的可能时HashSet,如果少量的url,HashSet有着O(1)的查询效率是首选的方案。但是面对1亿个url,单单存储value就需要2861MB内存,显然不可取。而如果放到硬盘上进行数据库查询,面对近3GB的数据库,每次匹配都要查询的话,IO操作本身就是瓶颈
74+
引言 现在假设一个需求:设计一个 url 黑名单系统,需求是 1 亿个 url 黑名单,每个 url 平均长度 30 字节,判断当前的 url 是否在黑名单中
75+
我们最先想到的可能时 HashSet,如果少量的 url,HashSet 有着 O(1) 的查询效率是首选的方案。但是面对 1 亿个 url,单单存储 value 就需要 2861MB 内存,显然不可取。而如果放到硬盘上进行数据库查询,面对近 3GB 的数据库,每次匹配都要查询的话,IO 操作本身就是瓶颈
7676
所以这时候引入了布隆过滤器。
7777
</div>
7878
<div class="flex flex-wrap flex-row items-center mt-2 text-tertiary-text">

posts/index.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ return new BigInteger(1, md.digest()).toString(16);
1717
&lt;blockquote>
1818
&lt;p>&lt;strong>【强制】&lt;/strong> 所有的相同类型的包装类对象之间值的比较,全部使用 &lt;code>equals&lt;/code> 方法比较。&lt;/p>
1919
&lt;/blockquote></description></item><item><title>有趣的算法-布隆过滤器</title><link>/posts/%E6%9C%89%E8%B6%A3%E7%9A%84%E7%AE%97%E6%B3%95-%E5%B8%83%E9%9A%86%E8%BF%87%E6%BB%A4%E5%99%A8/</link><pubDate>Wed, 30 Oct 2019 00:00:00 +0000</pubDate><guid>/posts/%E6%9C%89%E8%B6%A3%E7%9A%84%E7%AE%97%E6%B3%95-%E5%B8%83%E9%9A%86%E8%BF%87%E6%BB%A4%E5%99%A8/</guid><description>&lt;h2 id="引言">引言&lt;/h2>
20-
&lt;p>现在假设一个需求:设计一个url黑名单系统,需求是1亿个url黑名单,每个url平均长度30字节,判断当前的url是否在黑名单中&lt;/p>
21-
&lt;p>我们最先想到的可能时HashSet,如果少量的url,HashSet有着O(1)的查询效率是首选的方案。但是面对1亿个url,单单存储value就需要2861MB内存,显然不可取。而如果放到硬盘上进行数据库查询,面对近3GB的数据库,每次匹配都要查询的话,IO操作本身就是瓶颈&lt;/p>
20+
&lt;p>现在假设一个需求:设计一个 url 黑名单系统,需求是 1 亿个 url 黑名单,每个 url 平均长度 30 字节,判断当前的 url 是否在黑名单中&lt;/p>
21+
&lt;p>我们最先想到的可能时 HashSet,如果少量的 url,HashSet 有着 O(1) 的查询效率是首选的方案。但是面对 1 亿个 url,单单存储 value 就需要 2861MB 内存,显然不可取。而如果放到硬盘上进行数据库查询,面对近 3GB 的数据库,每次匹配都要查询的话,IO 操作本身就是瓶颈&lt;/p>
2222
&lt;p>所以这时候引入了布隆过滤器。&lt;/p></description></item><item><title>从阿里规约谈起-Arrays.asList 三坑</title><link>/posts/%E4%BB%8E%E9%98%BF%E9%87%8C%E8%A7%84%E7%BA%A6%E8%B0%88%E8%B5%B7-arrays.aslist%E4%B8%89%E5%9D%91/</link><pubDate>Tue, 24 Sep 2019 00:00:00 +0000</pubDate><guid>/posts/%E4%BB%8E%E9%98%BF%E9%87%8C%E8%A7%84%E7%BA%A6%E8%B0%88%E8%B5%B7-arrays.aslist%E4%B8%89%E5%9D%91/</guid><description>&lt;h2 id="前言">前言&lt;/h2>
2323
&lt;p>将数组转换成 List 是日常开发十分常见的操作,对此 JDK 提供了一个非常好用的工具类:&lt;/p>
2424
&lt;pre>&lt;code class="language-java">List list = Arrays.asList(array);

posts/page/2/index.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<link rel=icon type=image/png sizes=32x32 href=/images/favicon_huc32cac3e9dc2dba9d765d255923cde91_27863_32x32_fill_box_center_3.png>
1919
<link rel=apple-touch-icon sizes=180x180 href=/images/favicon_huc32cac3e9dc2dba9d765d255923cde91_27863_180x180_fill_box_center_3.png>
2020
<meta name=description content="Eureka is a elegant and powerful theme for Hugo.">
21-
<script type=application/ld+json>{"@context":"https://schema.org","@type":"ItemList","itemListElement":[{"@type":"ListItem","position":1,"name":"有趣的算法-布隆过滤器","description":"\u003ch2 id=\"引言\"\u003e引言\u003c/h2\u003e\n\u003cp\u003e现在假设一个需求:设计一个url黑名单系统,需求是1亿个url黑名单,每个url平均长度30字节,判断当前的url是否在黑名单中。\u003c/p\u003e\n\u003cp\u003e我们最先想到的可能时HashSet,如果少量的url,HashSet有着O(1)的查询效率是首选的方案。但是面对1亿个url,单单存储value就需要2861MB内存,显然不可取。而如果放到硬盘上进行数据库查询,面对近3GB的数据库,每次匹配都要查询的话,IO操作本身就是瓶颈。\u003c/p\u003e\n\u003cp\u003e所以这时候引入了布隆过滤器。\u003c/p\u003e","url":"/posts/%E6%9C%89%E8%B6%A3%E7%9A%84%E7%AE%97%E6%B3%95-%E5%B8%83%E9%9A%86%E8%BF%87%E6%BB%A4%E5%99%A8/"},{"@type":"ListItem","position":2,"name":"从阿里规约谈起-Arrays.asList 三坑","description":"\u003ch2 id=\"前言\"\u003e前言\u003c/h2\u003e\n\u003cp\u003e将数组转换成 List 是日常开发十分常见的操作,对此 JDK 提供了一个非常好用的工具类:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-java\"\u003eList list = Arrays.asList(array);\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e但是如果操纵 List 的内容的话,阿里规约会给出一个提示:\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.fori.fun/blog/posts/img/p3c_aslist_error.png\" alt=\"使用 asList 的问题\"\u003e\u003c/p\u003e\n\u003cp\u003e于是深入看了下,发现 \u003ccode\u003eArrays.asList\u003c/code\u003e 有三个日常开发中容易坑人的地方。\u003c/p\u003e","url":"/posts/%E4%BB%8E%E9%98%BF%E9%87%8C%E8%A7%84%E7%BA%A6%E8%B0%88%E8%B5%B7-arrays.aslist%E4%B8%89%E5%9D%91/"},{"@type":"ListItem","position":3,"name":"从阿里规约谈起-HashMap 初始化和扩容相关","description":"\u003ch2 id=\"引言\"\u003e引言\u003c/h2\u003e\n\u003cp\u003e日常开发中使用 HashMap 方法如下:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-java\"\u003eMap\u0026lt;String, Object\u0026gt; HashMap = new HashMap\u0026lt;\u0026gt;();\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e但是阿里规约会提示有问题:\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.fori.fun/blog/posts/img/p3c_hashmap_error.png\" alt=\"未指定初始化容量\"\u003e\u003c/p\u003e\n\u003cp\u003e由此我们可以看一下 HashMap 初始化和扩容相关。\u003c/p\u003e\n\u003cp\u003e注:本文涉及了少许 HashMap 基础,由于与主线无关,不详讲。源码均加了些注释,注释无法解释清楚的地方放在源码之后论述。\u003c/p\u003e","url":"/posts/%E4%BB%8E%E9%98%BF%E9%87%8C%E8%A7%84%E7%BA%A6%E8%B0%88%E8%B5%B7-hashmap%E5%88%9D%E5%A7%8B%E5%8C%96%E5%92%8C%E6%89%A9%E5%AE%B9%E7%9B%B8%E5%85%B3/"},{"@type":"ListItem","position":4,"name":"从阿里规约谈起-禁用 Executors 创建线程池","description":"\u003ch2 id=\"前言\"\u003e前言\u003c/h2\u003e\n\u003cp\u003eAndroid 开发中耗时任务应该放在子线程中进行,否则会阻塞 UI 造成 ANR。但是如果直接创建子线程,阿里规约会提示:\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.fori.fun/blog/posts/img/p3c_new_thread_error.png\" alt=\"直接使用子线程报错\"\u003e\u003c/p\u003e\n\u003cp\u003e关于禁止直接创建线程的原因如图,不再赘述。\u003c/p\u003e","url":"/posts/%E4%BB%8E%E9%98%BF%E9%87%8C%E8%A7%84%E7%BA%A6%E8%B0%88%E8%B5%B7-%E7%A6%81%E7%94%A8executors%E5%88%9B%E5%BB%BA%E7%BA%BF%E7%A8%8B%E6%B1%A0/"}]}</script><meta property="og:title" content="Posts | IO01 Blog">
21+
<script type=application/ld+json>{"@context":"https://schema.org","@type":"ItemList","itemListElement":[{"@type":"ListItem","position":1,"name":"有趣的算法-布隆过滤器","description":"\u003ch2 id=\"引言\"\u003e引言\u003c/h2\u003e\n\u003cp\u003e现在假设一个需求:设计一个 url 黑名单系统,需求是 1 亿个 url 黑名单,每个 url 平均长度 30 字节,判断当前的 url 是否在黑名单中。\u003c/p\u003e\n\u003cp\u003e我们最先想到的可能时 HashSet,如果少量的 url,HashSet 有着 O(1) 的查询效率是首选的方案。但是面对 1 亿个 url,单单存储 value 就需要 2861MB 内存,显然不可取。而如果放到硬盘上进行数据库查询,面对近 3GB 的数据库,每次匹配都要查询的话,IO 操作本身就是瓶颈。\u003c/p\u003e\n\u003cp\u003e所以这时候引入了布隆过滤器。\u003c/p\u003e","url":"/posts/%E6%9C%89%E8%B6%A3%E7%9A%84%E7%AE%97%E6%B3%95-%E5%B8%83%E9%9A%86%E8%BF%87%E6%BB%A4%E5%99%A8/"},{"@type":"ListItem","position":2,"name":"从阿里规约谈起-Arrays.asList 三坑","description":"\u003ch2 id=\"前言\"\u003e前言\u003c/h2\u003e\n\u003cp\u003e将数组转换成 List 是日常开发十分常见的操作,对此 JDK 提供了一个非常好用的工具类:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-java\"\u003eList list = Arrays.asList(array);\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e但是如果操纵 List 的内容的话,阿里规约会给出一个提示:\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.fori.fun/blog/posts/img/p3c_aslist_error.png\" alt=\"使用 asList 的问题\"\u003e\u003c/p\u003e\n\u003cp\u003e于是深入看了下,发现 \u003ccode\u003eArrays.asList\u003c/code\u003e 有三个日常开发中容易坑人的地方。\u003c/p\u003e","url":"/posts/%E4%BB%8E%E9%98%BF%E9%87%8C%E8%A7%84%E7%BA%A6%E8%B0%88%E8%B5%B7-arrays.aslist%E4%B8%89%E5%9D%91/"},{"@type":"ListItem","position":3,"name":"从阿里规约谈起-HashMap 初始化和扩容相关","description":"\u003ch2 id=\"引言\"\u003e引言\u003c/h2\u003e\n\u003cp\u003e日常开发中使用 HashMap 方法如下:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-java\"\u003eMap\u0026lt;String, Object\u0026gt; HashMap = new HashMap\u0026lt;\u0026gt;();\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e但是阿里规约会提示有问题:\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.fori.fun/blog/posts/img/p3c_hashmap_error.png\" alt=\"未指定初始化容量\"\u003e\u003c/p\u003e\n\u003cp\u003e由此我们可以看一下 HashMap 初始化和扩容相关。\u003c/p\u003e\n\u003cp\u003e注:本文涉及了少许 HashMap 基础,由于与主线无关,不详讲。源码均加了些注释,注释无法解释清楚的地方放在源码之后论述。\u003c/p\u003e","url":"/posts/%E4%BB%8E%E9%98%BF%E9%87%8C%E8%A7%84%E7%BA%A6%E8%B0%88%E8%B5%B7-hashmap%E5%88%9D%E5%A7%8B%E5%8C%96%E5%92%8C%E6%89%A9%E5%AE%B9%E7%9B%B8%E5%85%B3/"},{"@type":"ListItem","position":4,"name":"从阿里规约谈起-禁用 Executors 创建线程池","description":"\u003ch2 id=\"前言\"\u003e前言\u003c/h2\u003e\n\u003cp\u003eAndroid 开发中耗时任务应该放在子线程中进行,否则会阻塞 UI 造成 ANR。但是如果直接创建子线程,阿里规约会提示:\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.fori.fun/blog/posts/img/p3c_new_thread_error.png\" alt=\"直接使用子线程报错\"\u003e\u003c/p\u003e\n\u003cp\u003e关于禁止直接创建线程的原因如图,不再赘述。\u003c/p\u003e","url":"/posts/%E4%BB%8E%E9%98%BF%E9%87%8C%E8%A7%84%E7%BA%A6%E8%B0%88%E8%B5%B7-%E7%A6%81%E7%94%A8executors%E5%88%9B%E5%BB%BA%E7%BA%BF%E7%A8%8B%E6%B1%A0/"}]}</script><meta property="og:title" content="Posts | IO01 Blog">
2222
<meta property="og:type" content="website">
2323
<meta property="og:image" content="/images/favicon.png">
2424
<meta property="og:url" content="/posts/">
@@ -74,8 +74,8 @@ <h1 class="font-bold text-3xl text-primary-text">Posts</h1>
7474
<a href=/posts/%E6%9C%89%E8%B6%A3%E7%9A%84%E7%AE%97%E6%B3%95-%E5%B8%83%E9%9A%86%E8%BF%87%E6%BB%A4%E5%99%A8/ class="font-bold text-xl hover:text-eureka">有趣的算法-布隆过滤器</a>
7575
</div>
7676
<div class=content>
77-
引言 现在假设一个需求:设计一个url黑名单系统,需求是1亿个url黑名单,每个url平均长度30字节,判断当前的url是否在黑名单中
78-
我们最先想到的可能时HashSet,如果少量的url,HashSet有着O(1)的查询效率是首选的方案。但是面对1亿个url,单单存储value就需要2861MB内存,显然不可取。而如果放到硬盘上进行数据库查询,面对近3GB的数据库,每次匹配都要查询的话,IO操作本身就是瓶颈
77+
引言 现在假设一个需求:设计一个 url 黑名单系统,需求是 1 亿个 url 黑名单,每个 url 平均长度 30 字节,判断当前的 url 是否在黑名单中
78+
我们最先想到的可能时 HashSet,如果少量的 url,HashSet 有着 O(1) 的查询效率是首选的方案。但是面对 1 亿个 url,单单存储 value 就需要 2861MB 内存,显然不可取。而如果放到硬盘上进行数据库查询,面对近 3GB 的数据库,每次匹配都要查询的话,IO 操作本身就是瓶颈
7979
所以这时候引入了布隆过滤器。
8080
</div>
8181
<div class="flex flex-wrap flex-row items-center mt-2 text-tertiary-text">

posts/从阿里规约谈起-arrays.aslist三坑/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ <h2 id=坑二>坑二</h2>
130130
System.out.println(&quot;stringList: &quot; + stringList);
131131
//输出:stringList: [A, b, c]
132132
</code></pre>
133-
<p>根据 <code>Arrays.ArrayList</code> 构造函数可以看到,只是将原数组赋值给了一个内部变量,所以改变原数组的值,List 自然而然也会发生变化:</p>
133+
<p>根据 <code>Arrays.ArrayList</code> 构造函数可以看到,只是将原数组赋值给了一个内部变量,所以改变原数组的值,List 自然而然也会发生变化</p>
134134
<pre><code class=language-java>ArrayList(E[] array) {
135135
a = Objects.requireNonNull(array);
136136
}

0 commit comments

Comments
 (0)