@ -49,6 +49,25 @@
<tag > 2019</tag>
</tags>
</entry>
<entry >
<title > 2020年中总结</title>
<url > /2020/07/11/2020%E5%B9%B4%E4%B8%AD%E6%80%BB%E7%BB%93/</url>
<content > <![CDATA[<p> 很快2020 年就过了一半了,而且是今年这么特殊的一年,很多事情都发生的出乎意料,疫情这个绕不过去的话题,之前写了点比较愤青的文字,感觉不太适合发出来就烂在草稿箱里吧,这个目前一大影响估计是今年都没办法完全摘下口罩了,前面几个月来回杭州都开车,因为彭埠大桥不通行了,实在是非常不方便,每条路都灰常堵,心累,吐槽下杭州的交通规划和交警同志,工作实在做的不咋地。</p>
<p > 另外一件是就是蜗壳,从前不知道黝黑蜗壳是啥意思,只是经常会在他的视频里看到,大学的时候在缘网下了一个集锦,炒鸡帅气,各种空接扣篮,越来越能明白那句“你永远不知道意外和明天不知道哪个会先来,且行且珍惜”的含义,只是听了很多道理,依然活不好这一生,知易行难,王阳明真的是这方面的大师,有空可以看看这方面的书,一直想写写我跟篮球跟蜗壳的这十几年,争取能早日写好吧,不过得找个静得下来的时候写。</p>
<p > 正事方面上半年还是挺让人失望的,没有达成一些目标,应该还是能力不足吧,技术方面分析一下还是停留在看的表面层,有些实操的,或者结合业务场景的能力不太行,算是在坚持写写 blog,主要是被这个每周一篇的目标推着走,有时会比较焦虑,内容产出也还比较差,希望能在后面有些改善,可能会降低频率,只是觉得降低了也不一定能有比较好的提升,无法战胜自己的惰性,所以暂时还是坚持下这个目标吧,还有就是 coding 能力,有时候也应该刷刷题,提升思维敏捷度,大脑用太少可能生锈了,况且本来就不是很有优势,虽然失望也只能继续努力吧,日拱一卒,来日方长,加油吧~😔</p>
<p > 还有就是跑步减肥了,截止今天,上半年跑了 136 公里了,因为疫情影响,农历年后是从 4 月 17 号开始跑的,去年跑到了 300 公里,奖励自己了一个手表(真的挺后悔的,还不如 200 块买个手表),今年希望可以能在这个基础上再进一步,一直跟领导说,跑步算是我坚持下来的唯一一个好习惯了,618 买了个跑步机,周末回家了可以不受天气影响的多跑跑,不过如果天气好可能还是会出去跑跑,跑步机跑道多少还是有点拘束,只是感觉可能是我还是吃得太多了🤦♂️,效果不是很明显,还在 80 这个坎徘徊,等于浪费了大半年,可能是年初的项目太费心力,压力比较大,吃得更多,是不是可以算工伤😄,这方面也需要好好调整,可以放得开一点,虽然不太可能一下子到位,但是总要去努力下,随着年龄成长总要承担更多,也要看得开一点,没法事事如愿,尽力就好了,减肥这个事情还在结合一些俯卧撑啥的,希望也能坚持下去,加油吧,不知道原话怎么说的,意思是人类最大的勇敢就是看透了人世间的苦难,仍然热爱生活。我当然没可能让内心变得这么强大,试着去努力吧,奥力给!</p>
]]></content>
<categories >
<category > 生活</category>
<category > 年中总结</category>
<category > 2020</category>
</categories>
<tags >
<tag > 生活</tag>
<tag > 2020</tag>
<tag > 年中总结</tag>
</tags>
</entry>
<entry >
<title > 2020 年终总结</title>
<url > /2021/03/31/2020-%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%93/</url>
@ -74,25 +93,6 @@
<tag > 拖更</tag>
</tags>
</entry>
<entry >
<title > 2020年中总结</title>
<url > /2020/07/11/2020%E5%B9%B4%E4%B8%AD%E6%80%BB%E7%BB%93/</url>
<content > <![CDATA[<p> 很快2020 年就过了一半了,而且是今年这么特殊的一年,很多事情都发生的出乎意料,疫情这个绕不过去的话题,之前写了点比较愤青的文字,感觉不太适合发出来就烂在草稿箱里吧,这个目前一大影响估计是今年都没办法完全摘下口罩了,前面几个月来回杭州都开车,因为彭埠大桥不通行了,实在是非常不方便,每条路都灰常堵,心累,吐槽下杭州的交通规划和交警同志,工作实在做的不咋地。</p>
<p > 另外一件是就是蜗壳,从前不知道黝黑蜗壳是啥意思,只是经常会在他的视频里看到,大学的时候在缘网下了一个集锦,炒鸡帅气,各种空接扣篮,越来越能明白那句“你永远不知道意外和明天不知道哪个会先来,且行且珍惜”的含义,只是听了很多道理,依然活不好这一生,知易行难,王阳明真的是这方面的大师,有空可以看看这方面的书,一直想写写我跟篮球跟蜗壳的这十几年,争取能早日写好吧,不过得找个静得下来的时候写。</p>
<p > 正事方面上半年还是挺让人失望的,没有达成一些目标,应该还是能力不足吧,技术方面分析一下还是停留在看的表面层,有些实操的,或者结合业务场景的能力不太行,算是在坚持写写 blog,主要是被这个每周一篇的目标推着走,有时会比较焦虑,内容产出也还比较差,希望能在后面有些改善,可能会降低频率,只是觉得降低了也不一定能有比较好的提升,无法战胜自己的惰性,所以暂时还是坚持下这个目标吧,还有就是 coding 能力,有时候也应该刷刷题,提升思维敏捷度,大脑用太少可能生锈了,况且本来就不是很有优势,虽然失望也只能继续努力吧,日拱一卒,来日方长,加油吧~😔</p>
<p > 还有就是跑步减肥了,截止今天,上半年跑了 136 公里了,因为疫情影响,农历年后是从 4 月 17 号开始跑的,去年跑到了 300 公里,奖励自己了一个手表(真的挺后悔的,还不如 200 块买个手表),今年希望可以能在这个基础上再进一步,一直跟领导说,跑步算是我坚持下来的唯一一个好习惯了,618 买了个跑步机,周末回家了可以不受天气影响的多跑跑,不过如果天气好可能还是会出去跑跑,跑步机跑道多少还是有点拘束,只是感觉可能是我还是吃得太多了🤦♂️,效果不是很明显,还在 80 这个坎徘徊,等于浪费了大半年,可能是年初的项目太费心力,压力比较大,吃得更多,是不是可以算工伤😄,这方面也需要好好调整,可以放得开一点,虽然不太可能一下子到位,但是总要去努力下,随着年龄成长总要承担更多,也要看得开一点,没法事事如愿,尽力就好了,减肥这个事情还在结合一些俯卧撑啥的,希望也能坚持下去,加油吧,不知道原话怎么说的,意思是人类最大的勇敢就是看透了人世间的苦难,仍然热爱生活。我当然没可能让内心变得这么强大,试着去努力吧,奥力给!</p>
]]></content>
<categories >
<category > 生活</category>
<category > 年中总结</category>
<category > 2020</category>
</categories>
<tags >
<tag > 生活</tag>
<tag > 2020</tag>
<tag > 年中总结</tag>
</tags>
</entry>
<entry >
<title > 2021 年中总结</title>
<url > /2021/07/18/2021-%E5%B9%B4%E4%B8%AD%E6%80%BB%E7%BB%93/</url>
@ -133,52 +133,6 @@
<tag > 拖更</tag>
</tags>
</entry>
<entry >
<title > 34_Search_for_a_Range</title>
<url > /2016/08/14/34-Search-for-a-Range/</url>
<content > <![CDATA[<h2 id="question"> <a href= "#question" class= "headerlink" title= "question" > </a> question</h2> <h3 id= "34-Search-for-a-Range" > <a href= "#34-Search-for-a-Range" class= "headerlink" title= "34. Search for a Range" > </a> 34. Search for a Range</h3> <p > <a href= "https://leetcode.com/problems/search-for-a-range/" > Original Page</a> </p>
<p > Given a sorted array of integers, find the starting and ending position of a given target value.</p>
<p > Your algorithm’s runtime complexity must be in the order of <em > O</em> (log <em > n</em> ).</p>
<p > If the target is not found in the array, return <code > [-1, -1]</code> .</p>
<p > For example,<br > Given <code > [5, 7, 7, 8, 8, 10]</code> and target value 8,<br > return <code > [3, 4]</code> .</p>
<h2 id= "analysis" > <a href= "#analysis" class= "headerlink" title= "analysis" > </a> analysis</h2> <p > 一开始就想到了二分查找,但是原来做二分查找的时候一般都是找到确定的那个数就完成了,<br > 这里的情况比较特殊,需要找到整个区间,所以需要两遍查找,并且一个是找到小于target<br > 的最大索引,一个是找到大于target的最大索引,代码参考<a href= "https://discuss.leetcode.com/topic/5891/clean-iterative-solution-with-two-binary-searches-with-explanation/2" > leetcode discuss</a> ,这位仁<br > 兄也做了详细的分析解释。 </p>
<h2 id= "code" > <a href= "#code" class= "headerlink" title= "code" > </a> code</h2> <pre class= "line-numbers language-C++" data-language= "C++" > <code class= "language-C++" > class Solution {
public:
vector< int> searchRange(vector< int> & nums, int target) {
vector< int> ret(2, -1);
int i = 0, j = nums.size() - 1;
int mid;
while(i < j){
mid = (i + j) / 2;
if(nums[mid] < target) i = mid + 1;
else j = mid;
}
if(nums[i] != target) return ret;
else {
ret[0] = i;
if((i+1) < (nums.size() - 1) & & nums[i+1] > target){
ret[1] = i;
return ret;
}
} / / 一点小优化
j = nums.size() - 1;
while(i < j){
mid = (i + j) / 2 + 1;
if(nums[mid] > target) j = mid - 1;
else i = mid;
}
ret[1] = j;
return ret;
}
} ;<span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre> ]]></content>
<categories >
<category > leetcode</category>
</categories>
<tags >
<tag > leetcode</tag>
<tag > c++</tag>
</tags>
</entry>
<entry >
<title > AQS篇二 之 Condition 浅析笔记</title>
<url > /2021/02/21/AQS-%E4%B9%8B-Condition-%E6%B5%85%E6%9E%90%E7%AC%94%E8%AE%B0/</url>
@ -676,6 +630,52 @@ public:
<tag > unlock</tag>
</tags>
</entry>
<entry >
<title > 34_Search_for_a_Range</title>
<url > /2016/08/14/34-Search-for-a-Range/</url>
<content > <![CDATA[<h2 id="question"> <a href= "#question" class= "headerlink" title= "question" > </a> question</h2> <h3 id= "34-Search-for-a-Range" > <a href= "#34-Search-for-a-Range" class= "headerlink" title= "34. Search for a Range" > </a> 34. Search for a Range</h3> <p > <a href= "https://leetcode.com/problems/search-for-a-range/" > Original Page</a> </p>
<p > Given a sorted array of integers, find the starting and ending position of a given target value.</p>
<p > Your algorithm’s runtime complexity must be in the order of <em > O</em> (log <em > n</em> ).</p>
<p > If the target is not found in the array, return <code > [-1, -1]</code> .</p>
<p > For example,<br > Given <code > [5, 7, 7, 8, 8, 10]</code> and target value 8,<br > return <code > [3, 4]</code> .</p>
<h2 id= "analysis" > <a href= "#analysis" class= "headerlink" title= "analysis" > </a> analysis</h2> <p > 一开始就想到了二分查找,但是原来做二分查找的时候一般都是找到确定的那个数就完成了,<br > 这里的情况比较特殊,需要找到整个区间,所以需要两遍查找,并且一个是找到小于target<br > 的最大索引,一个是找到大于target的最大索引,代码参考<a href= "https://discuss.leetcode.com/topic/5891/clean-iterative-solution-with-two-binary-searches-with-explanation/2" > leetcode discuss</a> ,这位仁<br > 兄也做了详细的分析解释。 </p>
<h2 id= "code" > <a href= "#code" class= "headerlink" title= "code" > </a> code</h2> <pre class= "line-numbers language-C++" data-language= "C++" > <code class= "language-C++" > class Solution {
public:
vector< int> searchRange(vector< int> & nums, int target) {
vector< int> ret(2, -1);
int i = 0, j = nums.size() - 1;
int mid;
while(i < j){
mid = (i + j) / 2;
if(nums[mid] < target) i = mid + 1;
else j = mid;
}
if(nums[i] != target) return ret;
else {
ret[0] = i;
if((i+1) < (nums.size() - 1) & & nums[i+1] > target){
ret[1] = i;
return ret;
}
} / / 一点小优化
j = nums.size() - 1;
while(i < j){
mid = (i + j) / 2 + 1;
if(nums[mid] > target) j = mid - 1;
else i = mid;
}
ret[1] = j;
return ret;
}
} ;<span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre> ]]></content>
<categories >
<category > leetcode</category>
</categories>
<tags >
<tag > leetcode</tag>
<tag > c++</tag>
</tags>
</entry>
<entry >
<title > AQS篇一</title>
<url > /2021/02/14/AQS%E7%AF%87%E4%B8%80/</url>
@ -2851,10 +2851,10 @@ Output: 0<span aria-hidden="true" class="line-numbers-rows"><span></span><span><
<tags >
<tag > leetcode</tag>
<tag > java</tag>
<tag > 题解</tag>
<tag > Binary Tree</tag>
<tag > DFS</tag>
<tag > 二叉树</tag>
<tag > 题解</tag>
</tags>
</entry>
<entry >
@ -2914,9 +2914,9 @@ inorder = [9,3,15,20,7]<span aria-hidden="true" class="line-numbers-rows"><
<tags >
<tag > leetcode</tag>
<tag > java</tag>
<tag > 题解</tag>
<tag > Binary Tree</tag>
<tag > 二叉树</tag>
<tag > 题解</tag>
<tag > 递归</tag>
<tag > Preorder Traversal</tag>
<tag > Inorder Traversal</tag>
@ -3092,9 +3092,9 @@ inorder = [9,3,15,20,7]<span aria-hidden="true" class="line-numbers-rows"><
<tags >
<tag > leetcode</tag>
<tag > java</tag>
<tag > 题解</tag>
<tag > Binary Tree</tag>
<tag > 二叉树</tag>
<tag > 题解</tag>
</tags>
</entry>
<entry >
@ -3906,34 +3906,6 @@ maxR<span class="token punctuation">[</span>n <span class="token operator">-</sp
<tag > Remove Duplicates from Sorted List</tag>
</tags>
</entry>
<entry >
<title > leetcode no.3</title>
<url > /2015/04/15/Leetcode-No-3/</url>
<content > <![CDATA[<p> **Longest Substring Without Repeating Characters **</p>
<span id= "more" > </span>
<h3 id= "description" > <a href= "#description" class= "headerlink" title= "description" > </a> description</h3> <p > Given a string, find the length of the longest substring without repeating characters.<br > For example, the longest substring without repeating letters for “abcabcbb” is “abc”,<br > which the length is 3. For “bbbbb” the longest substring is “b”, with the length of 1. </p>
<h3 id= "分析" > <a href= "#分析" class= "headerlink" title= "分析" > </a> 分析</h3> <p > <a href= "http://www.cnblogs.com/dollarzhaole/p/3155712.html" > 源码</a> 这次是参考了这个代码,<br > tail 表示的当前子串的起始点位置,tail从-1开始就包括的串的长度是1的边界。其实我<br > 也是猜的(逃</p>
<pre class= "line-numbers language-C++" data-language= "C++" > <code class= "language-C++" > int ct[256];
memset(ct, -1, sizeof(ct));
int tail = -1;
int max = 0;
for (int i = 0; i < s.size(); i++){
if (ct[s[i]] > tail)
tail = ct[s[i]];
if (i - tail > max)
max = i - tail;
ct[s[i]] = i;
}
return max;<span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre>
]]></content>
<categories >
<category > leetcode</category>
</categories>
<tags >
<tag > leetcode</tag>
<tag > c++</tag>
</tags>
</entry>
<entry >
<title > Linux 下 grep 命令的一点小技巧</title>
<url > /2020/08/06/Linux-%E4%B8%8B-grep-%E5%91%BD%E4%BB%A4%E7%9A%84%E4%B8%80%E7%82%B9%E5%B0%8F%E6%8A%80%E5%B7%A7/</url>
@ -3968,6 +3940,34 @@ maxR<span class="token punctuation">[</span>n <span class="token operator">-</sp
<tag > 转义</tag>
</tags>
</entry>
<entry >
<title > leetcode no.3</title>
<url > /2015/04/15/Leetcode-No-3/</url>
<content > <![CDATA[<p> **Longest Substring Without Repeating Characters **</p>
<span id= "more" > </span>
<h3 id= "description" > <a href= "#description" class= "headerlink" title= "description" > </a> description</h3> <p > Given a string, find the length of the longest substring without repeating characters.<br > For example, the longest substring without repeating letters for “abcabcbb” is “abc”,<br > which the length is 3. For “bbbbb” the longest substring is “b”, with the length of 1. </p>
<h3 id= "分析" > <a href= "#分析" class= "headerlink" title= "分析" > </a> 分析</h3> <p > <a href= "http://www.cnblogs.com/dollarzhaole/p/3155712.html" > 源码</a> 这次是参考了这个代码,<br > tail 表示的当前子串的起始点位置,tail从-1开始就包括的串的长度是1的边界。其实我<br > 也是猜的(逃</p>
<pre class= "line-numbers language-C++" data-language= "C++" > <code class= "language-C++" > int ct[256];
memset(ct, -1, sizeof(ct));
int tail = -1;
int max = 0;
for (int i = 0; i < s.size(); i++){
if (ct[s[i]] > tail)
tail = ct[s[i]];
if (i - tail > max)
max = i - tail;
ct[s[i]] = i;
}
return max;<span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre>
]]></content>
<categories >
<category > leetcode</category>
</categories>
<tags >
<tag > leetcode</tag>
<tag > c++</tag>
</tags>
</entry>
<entry >
<title > MFC 模态对话框</title>
<url > /2014/12/24/MFC%20%E6%A8%A1%E6%80%81%E5%AF%B9%E8%AF%9D%E6%A1%86/</url>
@ -4601,14 +4601,10 @@ EXPOSE 80<span aria-hidden="true" class="line-numbers-rows"><span></span><span><
<entry >
<title > docker使用中发现的echo命令的一个小技巧及其他</title>
<url > /2020/03/29/echo%E5%91%BD%E4%BB%A4%E7%9A%84%E4%B8%80%E4%B8%AA%E5%B0%8F%E6%8A%80%E5%B7%A7/</url>
<content > <![CDATA[<p> 最近做 docker 系列,会经常进到 docker 内部,如上一篇介绍的,这些镜像一般都有用 ubuntu 或者alpine 这样的 Linux 系统作为底包,如果构建镜像的时候没有替换源的话,因为你懂的原因,在内部想编辑下东西要安装 vim 就会很慢很慢,thousand years later~<br > 而且如果在容器内部想改源配置的话也要编辑器,就陷入了一个鸡生蛋,跟蛋生鸡的问题中,对于 linux 大神来说应该有一万种方法解决这个问题,对于我这个渣渣来说可能只想到了这个土方法,先 cp backup 一下 sources.list, 再 echo “xxx” > sources.list, 这里就碰到了一个问题,这个 sources.list 一般不止一行,直接 echo 的话就解析不了了,不过 echo 可以支持”\n”转义,就是加-e<br > 看一下解释和示例<br > <img data-src= "https://i.loli.net/2020/03/23/4vlxSOuR2DdF5kp.png" > <br > 还有一点也是在这个时候要安装 vim 之类的,得知道是什么镜像底包,如果是用 uname 指令,其实看到的是宿主机的系统,得用<code > cat /etc/issue</code> <br > <img data-src= "https://i.loli.net/2020/03/29/mh5YxdDnX3VSkg8.png" > <br > 这里稍稍记一下</p>
<p > echo 实操技巧</p>
<p > 最近做 docker 系列,会经常需要进到 docker 内部,如上一篇介绍的,这些镜像一般都有用 ubuntu 或者alpine 这样的 Linux 系统作为底包,如果构建镜像的时候没有替换源的话,因为特殊的网络原因,在内部想编辑下东西要安装个类似于 vim 这样的编辑器就会很慢很慢,像视频里 two thousand years later~ 而且如果在容器内部想改源配置的话也要编辑器,就陷入了一个鸡生蛋,跟蛋生鸡的死锁问题中,对于 linux 大神来说应该有一万种方法解决这个问题,对于我这个渣渣来说可能只想到了这个土方法,先 cp backup 一下 sources.list, 再 echo “xxx” > sources.list, 这里就碰到了一个问题,这个 sources.list 一般不止一行,直接 echo 的话就解析不了了,不过 echo 可以支持”\n”转义,就是加-e看一下解释和示例,我这里使用了 tldr ,可以用 npm install -g tldr 安装,也可以直接用man, 或者–help 来查看使用方式</p>
<p > 查看镜像底包</p>
<p > 还有一点也是在这个时候要安装 vim 之类的,得知道是什么镜像底包,如果是用 uname 指令,其实看到的是宿主机的系统,得用cat / etc/ issue</p>
<p > 这里稍稍记一下</p>
<p > 寻找系统镜像源</p>
<p > 目前国内系统源用得比较多的是阿里云源,不过这里也推荐清华源, 中科大源, 浙大源 这里不要脸的推荐下母校的源,不过还不是很完善</p>
<content > <![CDATA[<h2 id="echo-实操技巧"> <a href= "#echo-实操技巧" class= "headerlink" title= "echo 实操技巧" > </a> echo 实操技巧</h2> <p > 最近做 docker 系列,会经常需要进到 docker 内部,如上一篇介绍的,这些镜像一般都有用 ubuntu 或者alpine 这样的 Linux 系统作为底包,如果构建镜像的时候没有替换源的话,因为特殊的网络原因,在内部想编辑下东西要安装个类似于 vim 这样的编辑器就会很慢很慢,像视频里 two thousand years later~ 而且如果在容器内部想改源配置的话也要编辑器,就陷入了一个鸡生蛋,跟蛋生鸡的死锁问题中,对于 linux 大神来说应该有一万种方法解决这个问题,对于我这个渣渣来说可能只想到了这个土方法,先 cp backup 一下 sources.list, 再 echo “xxx” > sources.list, 这里就碰到了一个问题,这个 sources.list 一般不止一行,直接 echo 的话就解析不了了,不过 echo 可以支持”\n”转义,就是加-e看一下解释和示例,我这里使用了 tldr ,可以用 npm install -g tldr 安装,也可以直接用man, 或者–help 来查看使用方式<br > <img data-src= "https://img.nicksxs.com/uPic/TWcqJz.jpg" > </p>
<h2 id= "查看镜像底包" > <a href= "#查看镜像底包" class= "headerlink" title= "查看镜像底包" > </a> 查看镜像底包</h2> <p > 还有一点也是在这个时候要安装 vim 之类的,得知道是什么镜像底包,如果是用 uname 指令,其实看到的是宿主机的系统,得用<code > cat /etc/issue</code> </p>
<p > <img data-src= "https://img.nicksxs.com/uPic/HFW1Xa.jpg" > <br > 这里稍稍记一下</p>
<h2 id= "寻找系统镜像源" > <a href= "#寻找系统镜像源" class= "headerlink" title= "寻找系统镜像源" > </a> 寻找系统镜像源</h2> <p > 目前国内系统源用得比较多的是阿里云源,不过这里也推荐<a href= "https://mirrors.tuna.tsinghua.edu.cn/" > 清华源</a> , <a href= "https://mirrors.ustc.edu.cn/" > 中科大源</a> , <a href= "https://mirrors.zju.edu.cn/" > 浙大源</a> 这里不要脸的推荐下母校的源,不过还不是很完善,尽情期待下。</p>
]]></content>
<categories >
<category > Linux</category>
@ -5643,6 +5639,62 @@ typedef struct redisObject {
<li > refcount: 引用计数。它允许robj对象在某些情况下被共享。</li>
<li > ptr: 指向底层实现数据结构的指针<br > 当 type 是 OBJ_STRING 时,表示类型是个 string,它的编码方式 encoding 可能有 OBJ_ENCODING_RAW,OBJ_ENCODING_INT,OBJ_ENCODING_EMBSTR 三种<br > 当 type 是 OBJ_LIST 时,表示类型是 list,它的编码方式 encoding 是 OBJ_ENCODING_QUICKLIST,对于早一些的版本,2.2这种可能还会使用 OBJ_ENCODING_ZIPLIST,OBJ_ENCODING_LINKEDLIST<br > 当 type 是 OBJ_SET 时,是个集合,但是得看具体元素的类型,有可能使用整数集合,OBJ_ENCODING_INTSET, 如果元素不全是整型或者数量超过一定限制,那么编码就是 OBJ_ENCODING_HT hash table 了<br > 当 type 是 OBJ_ZSET 时,是个有序集合,它底层有可能使用的是 OBJ_ENCODING_ZIPLIST 或者 OBJ_ENCODING_SKIPLIST<br > 当 type 是 OBJ_HASH 时,一开始也是 OBJ_ENCODING_ZIPLIST,然后当数据量大于 hash_max_ziplist_entries 时会转成 OBJ_ENCODING_HT</li>
</ul>
]]></content>
<categories >
<category > Redis</category>
<category > 数据结构</category>
<category > C</category>
<category > 源码</category>
<category > Redis</category>
</categories>
<tags >
<tag > redis</tag>
<tag > 数据结构</tag>
<tag > 源码</tag>
</tags>
</entry>
<entry >
<title > redis数据结构介绍四-第四部分 压缩表</title>
<url > /2020/01/19/redis%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%BB%8B%E7%BB%8D%E5%9B%9B/</url>
<content > <![CDATA[<p> 在 redis 中还有一类表型数据结构叫压缩表,ziplist,它的目的是替代链表,链表是个很容易理解的数据结构,双向链表有前后指针,有带头结点的有的不带,但是链表有个比较大的问题是相对于普通的数组,它的内存不连续,碎片化的存储,内存利用效率不高,而且指针寻址相对于直接使用偏移量的话,也有一定的效率劣势,当然这不是主要的原因,ziplist 设计的主要目的是让链表的内存使用更高效</p>
<blockquote >
<p > The ziplist is a specially encoded dually linked list that is designed to be very memory efficient.<br > 这是摘自 redis 源码中ziplist.c 文件的注释,也说明了原因,它的大概结构是这样子</p>
</blockquote>
<pre class= "line-numbers language-none" > <code class= "language-none" > < zlbytes> < zltail> < zllen> < entry> < entry> ... < entry> < zlend> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> </span> </code> </pre>
<p > 其中<br > <code > < zlbytes> </code> 表示 ziplist 占用的字节总数,类型是uint32_t,32 位的无符号整型,当然表示的字节数也包含自己本身占用的 4 个<br > <code > < zltail> </code> 类型也是是uint32_t,表示ziplist表中最后一项(entry)在ziplist中的偏移字节数。<code > < zltail> </code> 的存在,使得我们可以很方便地找到最后一项(不用遍历整个ziplist),从而可以在ziplist尾端快速地执行push或pop操作。<br > <code > < uint16_t zllen> </code> 表示ziplist 中的数据项个数,因为是 16 位,所以当数量超过所能表示的最大的数量,它的 16 位全会置为 1,但是真实的数量需要遍历整个 ziplist 才能知道<br > <code > < entry> </code> 是具体的数据项,后面解释<br > <code > < zlend> </code> ziplist 的最后一个字节,固定是255。<br > 再看一下<code > < entry> </code> 中的具体结构,</p>
<pre class= "line-numbers language-none" > <code class= "language-none" > < prevlen> < encoding> < entry-data> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> </span> </code> </pre>
<p > 首先这个<code > < prevlen> </code> 有两种情况,一种是前面的元素的长度,如果是小于等于 253的时候就用一个uint8_t 来表示前一元素的长度,如果大于的话他将占用五个字节,第一个字节是 254,即表示这个字节已经表示不下了,需要后面的四个字节帮忙表示<br > <code > < encoding> </code> 这个就比较复杂,把源码的注释放下面先看下</p>
<pre class= "line-numbers language-none" > <code class= "language-none" > * |00pppppp| - 1 byte
* String value with length less than or equal to 63 bytes (6 bits).
* " pppppp" represents the unsigned 6 bit length.
* |01pppppp|qqqqqqqq| - 2 bytes
* String value with length less than or equal to 16383 bytes (14 bits).
* IMPORTANT: The 14 bit number is stored in big endian.
* |10000000|qqqqqqqq|rrrrrrrr|ssssssss|tttttttt| - 5 bytes
* String value with length greater than or equal to 16384 bytes.
* Only the 4 bytes following the first byte represents the length
* up to 32^2-1. The 6 lower bits of the first byte are not used and
* are set to zero.
* IMPORTANT: The 32 bit number is stored in big endian.
* |11000000| - 3 bytes
* Integer encoded as int16_t (2 bytes).
* |11010000| - 5 bytes
* Integer encoded as int32_t (4 bytes).
* |11100000| - 9 bytes
* Integer encoded as int64_t (8 bytes).
* |11110000| - 4 bytes
* Integer encoded as 24 bit signed (3 bytes).
* |11111110| - 2 bytes
* Integer encoded as 8 bit signed (1 byte).
* |1111xxxx| - (with xxxx between 0000 and 1101) immediate 4 bit integer.
* Unsigned integer from 0 to 12. The encoded value is actually from
* 1 to 13 because 0000 and 1111 can not be used, so 1 should be
* subtracted from the encoded 4 bit value to obtain the right value.
* |11111111| - End of ziplist special entry.<span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre>
<p > 首先如果 encoding 的前两位是 00 的话代表这个元素是个 6 位的字符串,即直接将数据保存在 encoding 中,不消耗额外的<code > < entry-data> </code> ,如果前两位是 01 的话表示是个 14 位的字符串,如果是 10 的话表示encoding 块之后的四个字节是存放字符串类型的数据,encoding 的剩余 6 位置 0。<br > 如果 encoding 的前两位是 11 的话表示这是个整型,具体的如果后两位是00的话,表示后面是个2字节的 int16_t 类型,如果是01的话,后面是个4字节的int32_t,如果是10的话后面是8字节的int64_t,如果是 11 的话后面是 3 字节的有符号整型,这些都要最后 4 位都是 0 的情况噢<br > 剩下当是<code > 11111110</code> 时,则表示是一个1 字节的有符号数,如果是 <code > 1111xxxx</code> ,其中<code > xxxx</code> 在0000 到 1101 表示实际的 1 到 13,为啥呢,因为 0000 前面已经用过了,而 1110 跟 1111 也都有用了。<br > 看个具体的例子(上下有点对不齐,将就看)</p>
<pre class= "line-numbers language-none" > <code class= "language-none" > [0f 00 00 00] [0c 00 00 00] [02 00] [00 f3] [02 f6] [ff]
|**zlbytes***| |***zltail***| |*zllen*| |entry1 entry2| |zlend|<span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> </span> </code> </pre>
<p > 第一部分代表整个 ziplist 有 15 个字节,zlbytes 自己占了 4 个 zltail 表示最后一个元素的偏移量,第 13 个字节起,zllen 表示有 2 个元素,第一个元素是<code > 00f3</code> ,00表示前一个元素长度是 0,本来前面就没元素(不过不知道这个能不能优化这一字节),然后是 f3,换成二进制就是11110011,对照上面的注释,是落在|1111xxxx|这个类型里,注意这个其实是用 0001 到 1101 也就是 1到 13 来表示 0到 12,所以 f3 应该就是 2,第一个元素是 2,第二个元素呢,02 代表前一个元素也就是刚才说的这个,占用 2 字节,f6 展开也是刚才的类型,实际是 5,ff 表示 ziplist 的结尾,所以这个 ziplist 里面是两个元素,2 跟 5</p>
]]></content>
<categories >
<category > Redis</category>
@ -5860,62 +5912,6 @@ REDIS_STATIC void __quicklistInsertNode(quicklist *quicklist,
quicklist-> len++;
} <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre>
<p > 前面第一步先根据插入的是头还是尾选择不同的 push 函数,quicklistPushHead 或者 quicklistPushTail,举例分析下从头插入的 quicklistPushHead,先判断当前的 quicklistNode 节点还能不能允许再往 ziplist 里添加元素,如果可以就添加,如果不允许就新建一个 quicklistNode,然后调用 _quicklistInsertNodeBefore 将节点插进去,具体插入quicklist节点的操作类似链表的插入。</p>
]]></content>
<categories >
<category > Redis</category>
<category > 数据结构</category>
<category > C</category>
<category > 源码</category>
<category > Redis</category>
</categories>
<tags >
<tag > redis</tag>
<tag > 数据结构</tag>
<tag > 源码</tag>
</tags>
</entry>
<entry >
<title > redis数据结构介绍四-第四部分 压缩表</title>
<url > /2020/01/19/redis%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%BB%8B%E7%BB%8D%E5%9B%9B/</url>
<content > <![CDATA[<p> 在 redis 中还有一类表型数据结构叫压缩表,ziplist,它的目的是替代链表,链表是个很容易理解的数据结构,双向链表有前后指针,有带头结点的有的不带,但是链表有个比较大的问题是相对于普通的数组,它的内存不连续,碎片化的存储,内存利用效率不高,而且指针寻址相对于直接使用偏移量的话,也有一定的效率劣势,当然这不是主要的原因,ziplist 设计的主要目的是让链表的内存使用更高效</p>
<blockquote >
<p > The ziplist is a specially encoded dually linked list that is designed to be very memory efficient.<br > 这是摘自 redis 源码中ziplist.c 文件的注释,也说明了原因,它的大概结构是这样子</p>
</blockquote>
<pre class= "line-numbers language-none" > <code class= "language-none" > < zlbytes> < zltail> < zllen> < entry> < entry> ... < entry> < zlend> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> </span> </code> </pre>
<p > 其中<br > <code > < zlbytes> </code> 表示 ziplist 占用的字节总数,类型是uint32_t,32 位的无符号整型,当然表示的字节数也包含自己本身占用的 4 个<br > <code > < zltail> </code> 类型也是是uint32_t,表示ziplist表中最后一项(entry)在ziplist中的偏移字节数。<code > < zltail> </code> 的存在,使得我们可以很方便地找到最后一项(不用遍历整个ziplist),从而可以在ziplist尾端快速地执行push或pop操作。<br > <code > < uint16_t zllen> </code> 表示ziplist 中的数据项个数,因为是 16 位,所以当数量超过所能表示的最大的数量,它的 16 位全会置为 1,但是真实的数量需要遍历整个 ziplist 才能知道<br > <code > < entry> </code> 是具体的数据项,后面解释<br > <code > < zlend> </code> ziplist 的最后一个字节,固定是255。<br > 再看一下<code > < entry> </code> 中的具体结构,</p>
<pre class= "line-numbers language-none" > <code class= "language-none" > < prevlen> < encoding> < entry-data> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> </span> </code> </pre>
<p > 首先这个<code > < prevlen> </code> 有两种情况,一种是前面的元素的长度,如果是小于等于 253的时候就用一个uint8_t 来表示前一元素的长度,如果大于的话他将占用五个字节,第一个字节是 254,即表示这个字节已经表示不下了,需要后面的四个字节帮忙表示<br > <code > < encoding> </code> 这个就比较复杂,把源码的注释放下面先看下</p>
<pre class= "line-numbers language-none" > <code class= "language-none" > * |00pppppp| - 1 byte
* String value with length less than or equal to 63 bytes (6 bits).
* " pppppp" represents the unsigned 6 bit length.
* |01pppppp|qqqqqqqq| - 2 bytes
* String value with length less than or equal to 16383 bytes (14 bits).
* IMPORTANT: The 14 bit number is stored in big endian.
* |10000000|qqqqqqqq|rrrrrrrr|ssssssss|tttttttt| - 5 bytes
* String value with length greater than or equal to 16384 bytes.
* Only the 4 bytes following the first byte represents the length
* up to 32^2-1. The 6 lower bits of the first byte are not used and
* are set to zero.
* IMPORTANT: The 32 bit number is stored in big endian.
* |11000000| - 3 bytes
* Integer encoded as int16_t (2 bytes).
* |11010000| - 5 bytes
* Integer encoded as int32_t (4 bytes).
* |11100000| - 9 bytes
* Integer encoded as int64_t (8 bytes).
* |11110000| - 4 bytes
* Integer encoded as 24 bit signed (3 bytes).
* |11111110| - 2 bytes
* Integer encoded as 8 bit signed (1 byte).
* |1111xxxx| - (with xxxx between 0000 and 1101) immediate 4 bit integer.
* Unsigned integer from 0 to 12. The encoded value is actually from
* 1 to 13 because 0000 and 1111 can not be used, so 1 should be
* subtracted from the encoded 4 bit value to obtain the right value.
* |11111111| - End of ziplist special entry.<span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre>
<p > 首先如果 encoding 的前两位是 00 的话代表这个元素是个 6 位的字符串,即直接将数据保存在 encoding 中,不消耗额外的<code > < entry-data> </code> ,如果前两位是 01 的话表示是个 14 位的字符串,如果是 10 的话表示encoding 块之后的四个字节是存放字符串类型的数据,encoding 的剩余 6 位置 0。<br > 如果 encoding 的前两位是 11 的话表示这是个整型,具体的如果后两位是00的话,表示后面是个2字节的 int16_t 类型,如果是01的话,后面是个4字节的int32_t,如果是10的话后面是8字节的int64_t,如果是 11 的话后面是 3 字节的有符号整型,这些都要最后 4 位都是 0 的情况噢<br > 剩下当是<code > 11111110</code> 时,则表示是一个1 字节的有符号数,如果是 <code > 1111xxxx</code> ,其中<code > xxxx</code> 在0000 到 1101 表示实际的 1 到 13,为啥呢,因为 0000 前面已经用过了,而 1110 跟 1111 也都有用了。<br > 看个具体的例子(上下有点对不齐,将就看)</p>
<pre class= "line-numbers language-none" > <code class= "language-none" > [0f 00 00 00] [0c 00 00 00] [02 00] [00 f3] [02 f6] [ff]
|**zlbytes***| |***zltail***| |*zllen*| |entry1 entry2| |zlend|<span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> </span> </code> </pre>
<p > 第一部分代表整个 ziplist 有 15 个字节,zlbytes 自己占了 4 个 zltail 表示最后一个元素的偏移量,第 13 个字节起,zllen 表示有 2 个元素,第一个元素是<code > 00f3</code> ,00表示前一个元素长度是 0,本来前面就没元素(不过不知道这个能不能优化这一字节),然后是 f3,换成二进制就是11110011,对照上面的注释,是落在|1111xxxx|这个类型里,注意这个其实是用 0001 到 1101 也就是 1到 13 来表示 0到 12,所以 f3 应该就是 2,第一个元素是 2,第二个元素呢,02 代表前一个元素也就是刚才说的这个,占用 2 字节,f6 展开也是刚才的类型,实际是 5,ff 表示 ziplist 的结尾,所以这个 ziplist 里面是两个元素,2 跟 5</p>
]]></content>
<categories >
<category > Redis</category>
@ -7568,6 +7564,26 @@ user3:
<tag > 中间件</tag>
</tags>
</entry>
<entry >
<title > 从丁仲礼被美国制裁聊点啥</title>
<url > /2020/12/20/%E4%BB%8E%E4%B8%81%E4%BB%B2%E7%A4%BC%E8%A2%AB%E7%BE%8E%E5%9B%BD%E5%88%B6%E8%A3%81%E8%81%8A%E7%82%B9%E5%95%A5/</url>
<content > <![CDATA[<p> 几年前看了柴静的《穹顶之下》觉得这个记者调查得很深入,挺有水平,然后再看到了她跟丁仲礼的采访,其实没看完整,也没试着去理解,就觉得环境问题挺严重的,为啥柴静这个对面的这位好像对这个很不屑的样子,最近因为丁仲礼上了美国制裁名单,B 站又有人把这个视频发了出来,就完整看了下,就觉得自己挺惭愧的,就抱着对柴静的好感而没来由的否定了丁老的看法和说法,所以人也需要不断地学习,改正之前错误的观点,当然不是说我现在说的就是百分百正确,只是个人的一些浅显的见解</p>
<p > 先聊聊这个事情,整体看下来我的一些理解,IPCC给中国的方案其实是个很大的陷阱,它里面有几个隐藏的点是容易被我们外行忽略的,第一点是基数,首先发达国家目前(指2010年采访或者IPCC方案时间)的人均碳排放量已经是远高于发展中国家的了,这也就导致了所谓的发达国家承诺减排80%是个非常有诚意的承诺其实就是忽悠;第二点是碳排放是个累计过程,从1900年开始到2050年,或者说到2010年,发达国家已经排的量是远超过发展中国家的,这是非常不公平的;第三点其实是通过前两点推导出来的,也就是即使发达国家这么有诚意地说减排80%,扒开这层虚伪的外衣,其实是给他们11亿人分走了48%的碳排放量,留给发展中国家55亿人口的只剩下了52%;第四点,人是否因为国家的发达与否而应受到不平等待遇,如果按国家维度,丁老说的,摩纳哥要跟中国分同样的排放量么,中国人还算不算人;第五点,这点算是我自己想的,也可能是柴静屁股决定脑袋想不到的点,她作为一个物质生活条件已经足够好了,那么对于那些生活在物质条件平均线以下的,他们是否能像城里人那样有空调地暖,洗澡有热水器浴霸,上下班能开车,这些其实都直接或者间接地导致了碳排放;他们有没有改善物质生活条件地权利呢,并且再说回来,其实丁老也给了我们觉得合理地方案,我们保证不管发达国家不管减排多少,我们都不会超过他们的80%,我觉得这是真正的诚意,而不是接着减排80%的噱头来忽悠人,也是像丁老这样的专家才能看破这个陷阱,碳排放权其实就是发展权,就是人权,中国人就不是人了么,或者说站在贫困线以下的人民是否有改善物质条件的权利,而不是说像柴静这样,只是管她自己,可能觉得小孩因为空气污染导致身体不好,所以做了穹顶之下这个纪录片,想去改善这个事情,空气污染不是说对的,只是每个国家都有这个过程,如果不发展,哪里有资源去让人活得好,活得好了是前提,然后再去各方面都改善。</p>
<p > 对于这个问题其实更想说的是人的认知偏差,之前总觉得美帝是更自由民主,公平啥的,或者说觉得美帝啥都好,有种无脑愤青的感觉,外国的月亮比较圆,但是经历了像川普当选美国总统以来的各种魔幻操作,还有对于疫情的种种不可思议的美国民众的反应,其实更让人明白第一是外国的月亮没比较圆,第二是事情总是没那么简单粗暴非黑即白,美国不像原先设想地那么领先优秀,但是的确有很多方面是全球领先的,天朝也有体制所带来的优势,不可妄自菲薄,也不能忙不自大,还是要多学习知识,提升认知水平。</p>
]]></content>
<categories >
<category > 生活</category>
<category > 吐槽</category>
<category > 疫情</category>
<category > 美国</category>
</categories>
<tags >
<tag > 生活</tag>
<tag > 吐槽</tag>
<tag > 疫情</tag>
<tag > 美国</tag>
</tags>
</entry>
<entry >
<title > 介绍下最近比较实用的端口转发</title>
<url > /2021/11/14/%E4%BB%8B%E7%BB%8D%E4%B8%8B%E6%9C%80%E8%BF%91%E6%AF%94%E8%BE%83%E5%AE%9E%E7%94%A8%E7%9A%84%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91/</url>
@ -7593,26 +7609,6 @@ user3:
<tag > 端口转发</tag>
</tags>
</entry>
<entry >
<title > 从丁仲礼被美国制裁聊点啥</title>
<url > /2020/12/20/%E4%BB%8E%E4%B8%81%E4%BB%B2%E7%A4%BC%E8%A2%AB%E7%BE%8E%E5%9B%BD%E5%88%B6%E8%A3%81%E8%81%8A%E7%82%B9%E5%95%A5/</url>
<content > <![CDATA[<p> 几年前看了柴静的《穹顶之下》觉得这个记者调查得很深入,挺有水平,然后再看到了她跟丁仲礼的采访,其实没看完整,也没试着去理解,就觉得环境问题挺严重的,为啥柴静这个对面的这位好像对这个很不屑的样子,最近因为丁仲礼上了美国制裁名单,B 站又有人把这个视频发了出来,就完整看了下,就觉得自己挺惭愧的,就抱着对柴静的好感而没来由的否定了丁老的看法和说法,所以人也需要不断地学习,改正之前错误的观点,当然不是说我现在说的就是百分百正确,只是个人的一些浅显的见解</p>
<p > 先聊聊这个事情,整体看下来我的一些理解,IPCC给中国的方案其实是个很大的陷阱,它里面有几个隐藏的点是容易被我们外行忽略的,第一点是基数,首先发达国家目前(指2010年采访或者IPCC方案时间)的人均碳排放量已经是远高于发展中国家的了,这也就导致了所谓的发达国家承诺减排80%是个非常有诚意的承诺其实就是忽悠;第二点是碳排放是个累计过程,从1900年开始到2050年,或者说到2010年,发达国家已经排的量是远超过发展中国家的,这是非常不公平的;第三点其实是通过前两点推导出来的,也就是即使发达国家这么有诚意地说减排80%,扒开这层虚伪的外衣,其实是给他们11亿人分走了48%的碳排放量,留给发展中国家55亿人口的只剩下了52%;第四点,人是否因为国家的发达与否而应受到不平等待遇,如果按国家维度,丁老说的,摩纳哥要跟中国分同样的排放量么,中国人还算不算人;第五点,这点算是我自己想的,也可能是柴静屁股决定脑袋想不到的点,她作为一个物质生活条件已经足够好了,那么对于那些生活在物质条件平均线以下的,他们是否能像城里人那样有空调地暖,洗澡有热水器浴霸,上下班能开车,这些其实都直接或者间接地导致了碳排放;他们有没有改善物质生活条件地权利呢,并且再说回来,其实丁老也给了我们觉得合理地方案,我们保证不管发达国家不管减排多少,我们都不会超过他们的80%,我觉得这是真正的诚意,而不是接着减排80%的噱头来忽悠人,也是像丁老这样的专家才能看破这个陷阱,碳排放权其实就是发展权,就是人权,中国人就不是人了么,或者说站在贫困线以下的人民是否有改善物质条件的权利,而不是说像柴静这样,只是管她自己,可能觉得小孩因为空气污染导致身体不好,所以做了穹顶之下这个纪录片,想去改善这个事情,空气污染不是说对的,只是每个国家都有这个过程,如果不发展,哪里有资源去让人活得好,活得好了是前提,然后再去各方面都改善。</p>
<p > 对于这个问题其实更想说的是人的认知偏差,之前总觉得美帝是更自由民主,公平啥的,或者说觉得美帝啥都好,有种无脑愤青的感觉,外国的月亮比较圆,但是经历了像川普当选美国总统以来的各种魔幻操作,还有对于疫情的种种不可思议的美国民众的反应,其实更让人明白第一是外国的月亮没比较圆,第二是事情总是没那么简单粗暴非黑即白,美国不像原先设想地那么领先优秀,但是的确有很多方面是全球领先的,天朝也有体制所带来的优势,不可妄自菲薄,也不能忙不自大,还是要多学习知识,提升认知水平。</p>
]]></content>
<categories >
<category > 生活</category>
<category > 吐槽</category>
<category > 疫情</category>
<category > 美国</category>
</categories>
<tags >
<tag > 生活</tag>
<tag > 吐槽</tag>
<tag > 疫情</tag>
<tag > 美国</tag>
</tags>
</entry>
<entry >
<title > 从清华美院学姐聊聊我们身边的恶人</title>
<url > /2020/11/29/%E4%BB%8E%E6%B8%85%E5%8D%8E%E7%BE%8E%E9%99%A2%E5%AD%A6%E5%A7%90%E8%81%8A%E8%81%8A%E6%88%91%E4%BB%AC%E8%BA%AB%E8%BE%B9%E7%9A%84%E6%81%B6%E4%BA%BA/</url>
@ -7633,28 +7629,6 @@ user3:
<tag > 杀人诛心</tag>
</tags>
</entry>
<entry >
<title > 关于公共交通再吐个槽</title>
<url > /2021/03/21/%E5%85%B3%E4%BA%8E%E5%85%AC%E5%85%B1%E4%BA%A4%E9%80%9A%E5%86%8D%E5%90%90%E4%B8%AA%E6%A7%BD/</url>
<content > <![CDATA[<p> 事情源于周末来回家发生的两件事情,先是回去的时候从高铁下车要坐公交,现在算是有个比较好的临时候车点了,但是可能由于疫情好转,晚上都不用检查健康码就可以进候车点,但是上公交的时候还是需要看健康码,一般情况下从高铁下来的,各个地方的人都有,而且也不太清楚这边上公交车需要查验健康码,我的一个看法是候车的时候就应该放个横幅告示,或者再配合喇叭循环播放,请提前准备好健康码,上车前需要查验,因为像这周的情况,我乘坐的那辆车是间隔时间比较长,而且终点是工业开发区,可能是比较多外来务工人员的目的地,正好这部分人可能对于操作手机检验健康码这个事情不太熟悉,所以结果就是头上几个不知道怎么搞出来健康码,然后让几乎有满满一整车的人在后面堵着,司机又非常厌烦那些没有提前出示健康码的,有位乘客搞得久了点,还被误以为没刷卡买票,差点吵起来,其实公共交通或者高铁站负责的在公交指引路线上多写一句上车前需要查验健康码,可能就能改善比较多,还有就是那个积水的路,这个吐槽起来就一大坨了,整个绍兴像 dayuejin 一样到处都是破路。<br > 第二个就是来杭州的时候,经过人行横道,远处车道的公交车停下来等我们了,为了少添麻烦总想快点穿过去,但是这时靠近我们的车道(晚上光线较暗,可见度不佳)有一辆从远处来的奥迪 A4 还是 A5 这种的车反而想加速冲过去,如果少看一下可能我已经残了,交规考的靠近人行道要减速好像基本都是个摆设了,杭州也只有公交车因为一些考核指标原因会主动礼让,人其实需要有同理心,虽然可能有些人是开车多于骑车走路的,但是总也不可能永远不穿人行道吧,甚至这些人可能还会在人行道红灯的时候走过去。这个事情不是吐槽公共交通的,只是也有些许关系,想起来还有一件事也是刚才来杭州的时候看到的,等公交的时候看到有辆路虎要加塞,而目标车道刚好是辆大货车,大货车看到按了喇叭,路虎犹豫了下还是挤进去了,可能是对路虎的扛撞性能非常自信吧,反正我是挺后怕的,这种级别的车,被撞了的话估计还是鸡蛋撞石头,吨位惯性在那,这里再延伸下,挺多开豪车的人好像都觉得这路上路权更大一些,谁谁都得让着他,可能实际吃亏的不多,所以越加巩固了这种思维,当真的碰到不管的可能就会明白了,路权这个事情在天朝也基本没啥人重视,也没想说个结论,就到这吧</p>
]]></content>
<categories >
<category > 生活</category>
<category > 公交</category>
</categories>
<tags >
<tag > 生活</tag>
<tag > 开车</tag>
<tag > 加塞</tag>
<tag > 糟心事</tag>
<tag > 规则</tag>
<tag > 公交</tag>
<tag > 路政规划</tag>
<tag > 基础设施</tag>
<tag > 杭州</tag>
<tag > 健康码</tag>
</tags>
</entry>
<entry >
<title > 关于读书打卡与分享</title>
<url > /2021/02/07/%E5%85%B3%E4%BA%8E%E8%AF%BB%E4%B9%A6%E6%89%93%E5%8D%A1%E4%B8%8E%E5%88%86%E4%BA%AB/</url>
@ -7693,6 +7667,28 @@ user3:
<tag > git</tag>
</tags>
</entry>
<entry >
<title > 关于公共交通再吐个槽</title>
<url > /2021/03/21/%E5%85%B3%E4%BA%8E%E5%85%AC%E5%85%B1%E4%BA%A4%E9%80%9A%E5%86%8D%E5%90%90%E4%B8%AA%E6%A7%BD/</url>
<content > <![CDATA[<p> 事情源于周末来回家发生的两件事情,先是回去的时候从高铁下车要坐公交,现在算是有个比较好的临时候车点了,但是可能由于疫情好转,晚上都不用检查健康码就可以进候车点,但是上公交的时候还是需要看健康码,一般情况下从高铁下来的,各个地方的人都有,而且也不太清楚这边上公交车需要查验健康码,我的一个看法是候车的时候就应该放个横幅告示,或者再配合喇叭循环播放,请提前准备好健康码,上车前需要查验,因为像这周的情况,我乘坐的那辆车是间隔时间比较长,而且终点是工业开发区,可能是比较多外来务工人员的目的地,正好这部分人可能对于操作手机检验健康码这个事情不太熟悉,所以结果就是头上几个不知道怎么搞出来健康码,然后让几乎有满满一整车的人在后面堵着,司机又非常厌烦那些没有提前出示健康码的,有位乘客搞得久了点,还被误以为没刷卡买票,差点吵起来,其实公共交通或者高铁站负责的在公交指引路线上多写一句上车前需要查验健康码,可能就能改善比较多,还有就是那个积水的路,这个吐槽起来就一大坨了,整个绍兴像 dayuejin 一样到处都是破路。<br > 第二个就是来杭州的时候,经过人行横道,远处车道的公交车停下来等我们了,为了少添麻烦总想快点穿过去,但是这时靠近我们的车道(晚上光线较暗,可见度不佳)有一辆从远处来的奥迪 A4 还是 A5 这种的车反而想加速冲过去,如果少看一下可能我已经残了,交规考的靠近人行道要减速好像基本都是个摆设了,杭州也只有公交车因为一些考核指标原因会主动礼让,人其实需要有同理心,虽然可能有些人是开车多于骑车走路的,但是总也不可能永远不穿人行道吧,甚至这些人可能还会在人行道红灯的时候走过去。这个事情不是吐槽公共交通的,只是也有些许关系,想起来还有一件事也是刚才来杭州的时候看到的,等公交的时候看到有辆路虎要加塞,而目标车道刚好是辆大货车,大货车看到按了喇叭,路虎犹豫了下还是挤进去了,可能是对路虎的扛撞性能非常自信吧,反正我是挺后怕的,这种级别的车,被撞了的话估计还是鸡蛋撞石头,吨位惯性在那,这里再延伸下,挺多开豪车的人好像都觉得这路上路权更大一些,谁谁都得让着他,可能实际吃亏的不多,所以越加巩固了这种思维,当真的碰到不管的可能就会明白了,路权这个事情在天朝也基本没啥人重视,也没想说个结论,就到这吧</p>
]]></content>
<categories >
<category > 生活</category>
<category > 公交</category>
</categories>
<tags >
<tag > 生活</tag>
<tag > 开车</tag>
<tag > 加塞</tag>
<tag > 糟心事</tag>
<tag > 规则</tag>
<tag > 公交</tag>
<tag > 路政规划</tag>
<tag > 基础设施</tag>
<tag > 杭州</tag>
<tag > 健康码</tag>
</tags>
</entry>
<entry >
<title > 分享记录一下一个 scp 操作方法</title>
<url > /2022/02/06/%E5%88%86%E4%BA%AB%E8%AE%B0%E5%BD%95%E4%B8%80%E4%B8%8B%E4%B8%80%E4%B8%AA-scp-%E6%93%8D%E4%BD%9C%E6%96%B9%E6%B3%95/</url>
@ -7731,10 +7727,10 @@ user3:
<tag > 干活</tag>
</tags>
</entry>
<entry >
<title > 在老丈人家的小工记三 </title>
<url > /2020/09/13/%E5%9C%A8%E8%80%81%E4%B8%88%E4%BA%BA%E5%AE%B6%E7%9A%84%E5%B0%8F%E5%B7%A5%E8%AE%B0%E4%B8%89 /</url>
<content > <![CDATA[<h2 id="小工记三"> <a href= "#小工记三" class= "headerlink" title= "小工记三" > </a> 小工记三</h2> <p > 前面这两周周末也都去老丈人家帮忙了,上上周周六先是去了那个在装修的旧房子那,把三楼收拾了下,因为要搬进来住,来不及等二楼装修好,就要把三楼里的东西都整理干净,这个活感觉是比较 easy,原来是就准备把三楼当放东西仓储的地方了,我们乡下大部分三层楼都是这么用的,这次也是没办法,之前搬进来的木头什么的都搬出去,主要是这上面灰尘太多,后面清理鼻孔的时候都是黑色的了,把东西都搬出去以后主要是地还是很脏,就扫了地拖了地,因为是水泥地,灰尘又太多了,拖起来都是会灰尘扬起来,整个脱完了的确干净很多,然而这会就出了个大乌龙,我们清理的是三楼的西边一间,结果老丈人上来说要住东边那间的🤦♂️,不过其实西边的也得清理,因为还是要放被子什么的,不算是白费功夫,接着清理东边那间,之前这个房子做过群租房,里面有个高低铺的床,当时觉得可以用在放被子什么的就没扔,只是拆掉了放旁边,我们就把它擦干净了又装好,发现螺丝🔩少了几个,亘古不变的真理,拆了以后装要不就多几个要不就少几个,不是很牢靠,不过用来放放被子省得放地上总还是可以的,对了前面还做了个事情就是铺地毯,其实也不是地毯,就是类似于墙布雨篷布那种,别人不用了送给我们的,三楼水泥地也不会铺瓷砖地板了就放一下,干净好看点,不过大小不合适要裁一下,那把剪刀是真的太难用了,我手都要抽筋了,它就是刀口只有一小个点是能剪下来的,其他都是钝的,后来还是用刀片直接裁,铺好以后,真的感觉也不太一样了,焕然一新的感觉<br > 差不多中午了就去吃饭了,之前两次是去了一家小饭店,还是还比较干净,但是店里菜不好吃,还死贵,这次去了一家小快餐店,口味好,便宜,味道是真的不错,带鱼跟黄鱼都好吃,一点都不腥,我对这类比较腥的鱼真的是很挑剔的,基本上除了家里做的很少吃外面的,那天抱着试试的态度吃了下,真的还不错,后来丈母娘说好像这家老板是给别人结婚喜事酒席当厨师的,怪不得做的好吃,其实本来是有一点小抗拒,怕不干净什么的,后来发现菜很好吃,而且可能是老丈人跟干活的师傅去吃的比较多,老板很客气,我们吃完饭,还给我们买了葡萄吃,不过这家店有一个槽点,就是饭比较不好吃,有时候会夹生,不过后面聊起来其实是这种小菜馆饭点的通病,烧的太早太多容易多出来浪费,烧的迟了不够吃,而且大的电饭锅比较不容易烧好。<br > 下午前面还是在处理三楼的,窗户上各种钉子,实在是太多了,我后面在走廊上排了一排🤦♂️,有些是直接断了,有些是就撬了出来,感觉我在杭州租房也没有这样子各种钉钉子,挂下衣服什么的也不用这么多吧,比较不能理解,搞得到处都是钉子。那天我爸也去帮忙了,主要是在卫生间里做白缝,其实也是个技术活,印象中好像我小时候自己家里也做过这个事情,但是比较模糊了,后面我们三楼搞完了就去帮我爸了,前面是我老婆二爹在那先刷上白缝,这里叫白缝,有些考究的也叫美缝,就是瓷砖铺完之后的缝,如果不去弄的话,里面水泥的颜色就露出来了,而且容易渗水,所以就要用白水泥加胶水搅拌之后糊在缝上,但是也不是直接糊,先要把缝抠一抠,因为铺瓷砖的还不会仔细到每个缝里的水泥都是一样满,而且也需要一些空间糊上去,不然就太表面的一层很容易被水直接冲掉了,然后这次其实也不是用的白水泥,而是直接现成买来就已经配好的用来填缝的,兑水搅拌均匀就好了,后面就主要是我跟我爸在搞,那个时候真的觉得我实在是太胖了,蹲下去真的没一会就受不了了,膝盖什么的太难受了,后面我跪着刷,然后膝盖又疼,也是比较不容易,不过我爸动作很快,我中间跪累了休息一会,我爸就能搞一大片,后面其实我也没做多少(谦虚一下),总体来讲这次不是很累,就是蹲着跪着腿有点受不了,是应该好好减肥 了。</p>
<entry >
<title > 在老丈人家的小工记五 </title>
<url > /2020/10/18/%E5%9C%A8%E8%80%81%E4%B8%88%E4%BA%BA%E5%AE%B6%E7%9A%84%E5%B0%8F%E5%B7%A5%E8%AE%B0%E4%BA%94 /</url>
<content > <![CDATA[<p> 终于回忆起来了,年纪大了写这种东西真的要立马写,不然很容易想不起来,那天应该是 9 月 12 日,也就是上周六,因为我爸也去了,而且娘亲(丈母娘,LD 这么叫,我也就随了她这么叫,当然是背后,当面就叫妈)也在那,早上一到那二爹就给我爸指挥了活,要挖一条院子的出水道,自己想出来的词,因为觉得下水道是竖的,在那稍稍帮了一会会忙,然后我还是比较惯例的跟着 LD 还有娘亲去住的家里,主要是老丈人可能也不太想让我干太累的活,因为上次已经差不多把三楼都整理干净了,然后就是二楼了,二楼说实话我也帮不上什么忙,主要是衣服被子什么的,正好是有张以前小孩子睡过的那种摇篮床,看上去虽然有一些破损,整体还是不错的,所以打算拿过去,我就负责把它拆掉了,比较简单的是只要拧螺丝就行了,但是其实是用了好多好多工具才搞定的,一开始只要螺丝刀就行了,但是因为年代久了,后面的螺帽也有点锈住或者本身就会串着会一起动,所以拿来了个扳手,大部分的其实都被这两个工具给搞定了,但是后期大概还剩下四分之一的时候,有一颗完全锈住,并且螺纹跟之前那些都不一样,但是这个已经是最大的螺丝刀了,也没办法换个大的了,所以又去找来个一字的,因为十字的不是也可以用一字的拧嘛,结果可能是我买的工具箱里的一字螺丝刀太新了,口子那很锋利,直接把螺丝花纹给划掉了,大的小的都划掉,然后真的变成凹进去一个圆柱体了,然后就想能不能隔一层布去拧,然而因为的确是已经变成圆柱体了,布也不太给力,不放弃的我又去找来了个老虎钳,妄图把划掉的螺丝用老虎钳钳住,另一端用扳手拧开螺帽,但是这个螺丝跟螺帽真的是生锈的太严重了,外加上钳不太牢,完全是两边一起转,实在是没办法了,在征得同意之后,直接掰断了,火死了,一颗螺丝折腾得比我拆一张床还久,那天因为早上去的也比较晚了,然后就快吃午饭了,正好想着带一点东西过去,就把一些脸盆,泡脚桶啥的拿过去了,先是去吃了饭,还是在那家快餐店,菜的口味还是依然不错,就是人比较多,我爸旁边都是素菜,都没怎么吃远一点的荤菜,下次要早点去,把荤菜放我爸旁边😄(PS:他们家饭还是依然尴尬,需要等),吃完就开到在修的房子那把东西拿了出来,我爸已经动作很快的打了一小半的地沟了,说实话那玩意真的是很重,我之前把它从三楼拿下来,就觉得这个太重了,这次还要用起来,感觉我的手会分分钟废掉,不过一开始我还是跟着LD去了住的家里,惯例睡了午觉,那天睡得比较踏实,竟然睡了一个小时,醒了想了下,其实LD她们收拾也用不上我(没啥力气活),我还是去帮我爸他们,跟LD说了下就去了在修的老房子那,两位老爹在一起钻地,看着就很累,我连忙上去想换一会他们,因为刚好是钻到混凝土地线,特别难,力道不够就会滑开,用蛮力就是钻进去拔不出来,原理是因为本身浇的时候就是很紧实的,需要边钻边动,那家伙实在是太重了,真的是汗如雨下,基本是三个人轮流来,我是个添乱的,经常卡住,然后把地线,其实就是一条混凝土横梁,里面还有14跟18的钢筋,需要割断,这个割断也是很有技巧,钢筋本身在里面是受到挤压的,直接用切割的,到快断掉的时候就会崩一下,非常危险,还是老丈人比较有经验,要留一点点,然后直接用榔头敲断就好了,本来以为这个是最难的了,结果下面是一块非常大的青基石,而且也是石头跟石头挤一块,边上一点点打钻有点杯水车薪,后来是用那种螺旋的钻,钻四个洞,相对位置大概是个长方形,这样子把中间这个长方形钻出来就比较容易地能拿出来了,后面的也容易搞出来了,后面的其实难度不是特别大了,主要是地沟打好之后得看看高低是不是符合要求的,不能本来是往外排水的反而外面高,这个怎么看就又很有技巧了,一般在地上的只要侧着看一下就好了,考究点就用下水平尺,但是在地下的,不用水平尺,其实可以借助于地沟里正要放进去的水管,放点水进去,看水往哪流就行了,铺好水管后,就剩填埋的活了,不是太麻烦了,那天真的是累到了,打那个混凝土的时候我真的是把我整个人压上去了,不过也挺爽的,有点把平时无处发泄的蛮力发泄出去 了。</p>
]]></content>
<categories >
<category > 生活</category>
@ -7752,9 +7748,9 @@ user3:
</tags>
</entry>
<entry >
<title > 在老丈人家的小工记五 </title>
<url > /2020/10/18/%E5%9C%A8%E8%80%81%E4%B8%88%E4%BA%BA%E5%AE%B6%E7%9A%84%E5%B0%8F%E5%B7%A5%E8%AE%B0%E4%BA%94 /</url>
<content > <![CDATA[<p> 终于回忆起来了,年纪大了写这种东西真的要立马写,不然很容易想不起来,那天应该是 9 月 12 日,也就是上周六,因为我爸也去了,而且娘亲(丈母娘,LD 这么叫,我也就随了她这么叫,当然是背后,当面就叫妈)也在那,早上一到那二爹就给我爸指挥了活,要挖一条院子的出水道,自己想出来的词,因为觉得下水道是竖的,在那稍稍帮了一会会忙,然后我还是比较惯例的跟着 LD 还有娘亲去住的家里,主要是老丈人可能也不太想让我干太累的活,因为上次已经差不多把三楼都整理干净了,然后就是二楼了,二楼说实话我也帮不上什么忙,主要是衣服被子什么的,正好是有张以前小孩子睡过的那种摇篮床,看上去虽然有一些破损,整体还是不错的,所以打算拿过去,我就负责把它拆掉了,比较简单的是只要拧螺丝就行了,但是其实是用了好多好多工具才搞定的,一开始只要螺丝刀就行了,但是因为年代久了,后面的螺帽也有点锈住或者本身就会串着会一起动,所以拿来了个扳手,大部分的其实都被这两个工具给搞定了,但是后期大概还剩下四分之一的时候,有一颗完全锈住,并且螺纹跟之前那些都不一样,但是这个已经是最大的螺丝刀了,也没办法换个大的了,所以又去找来个一字的,因为十字的不是也可以用一字的拧嘛,结果可能是我买的工具箱里的一字螺丝刀太新了,口子那很锋利,直接把螺丝花纹给划掉了,大的小的都划掉,然后真的变成凹进去一个圆柱体了,然后就想能不能隔一层布去拧,然而因为的确是已经变成圆柱体了,布也不太给力,不放弃的我又去找来了个老虎钳,妄图把划掉的螺丝用老虎钳钳住,另一端用扳手拧开螺帽,但是这个螺丝跟螺帽真的是生锈的太严重了,外加上钳不太牢,完全是两边一起转,实在是没办法了,在征得同意之后,直接掰断了,火死了,一颗螺丝折腾得比我拆一张床还久,那天因为早上去的也比较晚了,然后就快吃午饭了,正好想着带一点东西过去,就把一些脸盆,泡脚桶啥的拿过去了,先是去吃了饭,还是在那家快餐店,菜的口味还是依然不错,就是人比较多,我爸旁边都是素菜,都没怎么吃远一点的荤菜,下次要早点去,把荤菜放我爸旁边😄(PS:他们家饭还是依然尴尬,需要等),吃完就开到在修的房子那把东西拿了出来,我爸已经动作很快的打了一小半的地沟了,说实话那玩意真的是很重,我之前把它从三楼拿下来,就觉得这个太重了,这次还要用起来,感觉我的手会分分钟废掉,不过一开始我还是跟着LD去了住的家里,惯例睡了午觉,那天睡得比较踏实,竟然睡了一个小时,醒了想了下,其实LD她们收拾也用不上我(没啥力气活),我还是去帮我爸他们,跟LD说了下就去了在修的老房子那,两位老爹在一起钻地,看着就很累,我连忙上去想换一会他们,因为刚好是钻到混凝土地线,特别难,力道不够就会滑开,用蛮力就是钻进去拔不出来,原理是因为本身浇的时候就是很紧实的,需要边钻边动,那家伙实在是太重了,真的是汗如雨下,基本是三个人轮流来,我是个添乱的,经常卡住,然后把地线,其实就是一条混凝土横梁,里面还有14跟18的钢筋,需要割断,这个割断也是很有技巧,钢筋本身在里面是受到挤压的,直接用切割的,到快断掉的时候就会崩一下,非常危险,还是老丈人比较有经验,要留一点点,然后直接用榔头敲断就好了,本来以为这个是最难的了,结果下面是一块非常大的青基石,而且也是石头跟石头挤一块,边上一点点打钻有点杯水车薪,后来是用那种螺旋的钻,钻四个洞,相对位置大概是个长方形,这样子把中间这个长方形钻出来就比较容易地能拿出来了,后面的也容易搞出来了,后面的其实难度不是特别大了,主要是地沟打好之后得看看高低是不是符合要求的,不能本来是往外排水的反而外面高,这个怎么看就又很有技巧了,一般在地上的只要侧着看一下就好了,考究点就用下水平尺,但是在地下的,不用水平尺,其实可以借助于地沟里正要放进去的水管,放点水进去,看水往哪流就行了,铺好水管后,就剩填埋的活了,不是太麻烦了,那天真的是累到了,打那个混凝土的时候我真的是把我整个人压上去了,不过也挺爽的,有点把平时无处发泄的蛮力发泄出去了 。</p>
<title > 在老丈人家的小工记四 </title>
<url > /2020/09/26/%E5%9C%A8%E8%80%81%E4%B8%88%E4%BA%BA%E5%AE%B6%E7%9A%84%E5%B0%8F%E5%B7%A5%E8%AE%B0%E5%9B%9B /</url>
<content > <![CDATA[<h2 id="小工记四"> <a href= "#小工记四" class= "headerlink" title= "小工记四" > </a> 小工记四</h2> <p > 第四周去的时候让我们去了现在在住的房子里,去三楼整理东西了,蛮多的东西需要收拾整理,有些需要丢一下,以前往往是把不太要用的东西就放三楼了,但是后面就不会再去收拾整理,LD 跟丈母娘负责收拾,我不太知道哪些还要的,哪些不要了,而且本来也不擅长这种收拾🤦♂️,然后就变成她们收拾出来废纸箱,我负责拆掉,压平,这时候终于觉得体重还算是有点作用,总体来说这个事情我其实也不擅长,不擅长的主要是捆起来,可能我总是小题大做,因为纸箱大小不一,如果不做一下分类,然后把大的折小一些的话,直接绑起来,容易拎起来就散掉了,而且一些鞋盒子这种小件的纸盒会比较薄,冰箱这种大件的比较厚,厚的比较不容易变形,需要大力踩踏,而且扎的时候需要用体重压住捆实了之后那样子才是真的捆实的,不然待会又是松松垮垮容易滑出来散架,因为压住了捆好后,下来了之后箱子就会弹开了把绳子崩紧实,感觉又是掌握到生活小技巧了😃,我这里其实比较单调无聊,然后 LD 那可以说非常厉害了,一共理出来 11 把旧电扇,还有好多没用过全新的不锈钢脸盆大大小小的,感觉比店里在卖的还多,还有是有比较多小时候的东西,特别多小时候的衣服,其实这种对我来说最难了,可能需要读一下断舍离,蛮多东西都舍不得扔,但是其实是没啥用了,然后还占地方,这天应该算是比较轻松的一天了,上午主要是把收拾出来要的和不要的搬下楼,然后下午要去把纸板给卖掉。中午还是去小快餐店吃的,在住的家里理东西还有个好处就是中午吃完饭可以小憩一下,因为我个人是非常依赖午休的,不然下午完全没精神,而且心态也会比较烦躁,一方面是客观的的确比较疲惫,另一方面应该主观心理作用也有点影响,就像上班的时候也是觉得不午睡就会很难受,心理作用也有一点,不过总之能睡还是睡一会,真的没办法就心态好点,吃完午饭之后我们就推着小平板车去收废品的地方卖掉了上午我收拾捆起来的纸板,好像卖了一百多,都是直接过地磅了,不用一捆一捆地称,不过有个小插曲,那里另外一个大爷在倒他的三轮车的时候撞了我一下,还好车速慢,屁股上肉垫后,接下来就比较麻烦了,是LD 她们两姐妹从小到大的书,也要去卖掉,小平板车就载不下了,而且着实也不太好推,轮子不太平,导致推着很累,书有好多箱,本来是想去亲戚家借电动三轮车,因为不会开摩托的那种,摩托的那种 LD 邻居家就有,可是到了那发现那个也是很大,而且刹车是用脚踩的那种,俺爹不太放心,就说第二天周日他有空会帮忙去载了卖掉的,然后比较搞笑的来了,丈母娘看错了时间,以为已经快五点了,就让我们顺便在车里带点东西去在修的房子,放到那边三楼去,到了那还跟老丈人说已经这么迟了要赶紧去菜场买菜了,结果我们回来以后才发现看错了一个小时🤦♂️。<br > 前面可以没提,前三周去的我们一般就周六去一天,然后周日因为要早点回杭州,而且可能想让我们周日能休息下,但是这周就因为周日的时候我爸要去帮忙载书,然后 LD 姐姐也会过来收拾东西,我们周日就又去整理收拾了,周日由于俺爹去的很早,我过去的时候书已经木有了,主要是去收拾东西了,把一些有用没用的继续整理,基本上三楼的就处理完毕了,舒了一大口气,毕竟让丈母娘一个人收拾实在是太累了,但是要扔掉的衣服比较棘手,附近知道的青蛙回收桶被推倒了,其他地方也不知道哪里有,我们就先载了一些东西去在修的房子那,然后去找青蛙桶,结果一个小区可以进,但是已经满了,另一个不让进,后来只能让 LD 姐姐带去她们小区扔了,塞了满满一车。因为要赶回杭州的车就没有等我爸一起回来,他还在那帮忙搞卫生间的墙缝。<br > 虽然这两天不太热,活也不算很吃力,不过我这个体重和易出汗的体质,还是让短袖不知道湿透了多少次,灌了好多水和冰红茶(下午能提提神),回来周一早上称体重也比较喜人,差一点就达到阶段目标,可以想想去哪里吃之前想好的烤肉跟火锅了(估计吃完立马回到解放前) 。</p>
]]></content>
<categories >
<category > 生活</category>
@ -7772,9 +7768,9 @@ user3:
</tags>
</entry>
<entry >
<title > 在老丈人家的小工记四 </title>
<url > /2020/09/26/%E5%9C%A8%E8%80%81%E4%B8%88%E4%BA%BA%E5%AE%B6%E7%9A%84%E5%B0%8F%E5%B7%A5%E8%AE%B0%E5%9B%9B /</url>
<content > <![CDATA[<h2 id="小工记四 "> <a href= "#小工记四 " class= "headerlink" title= "小工记四" > </a> 小工记四</h2> <p > 第四周去的时候让我们去了现在在住的房子里,去三楼整理东西了,蛮多的东西需要收拾整理,有些需要丢一下,以前往往是把不太要用的东西就放三楼了,但是后面就不会再去收拾整理,LD 跟丈母娘负责收拾,我不太知道哪些还要的,哪些不要了,而且本来也不擅长这种收拾🤦♂️,然后就变成她们收拾出来废纸箱,我负责拆掉,压平,这时候终于觉得体重还算是有点作用,总体来说这个事情我其实也不擅长,不擅长的主要是捆起来,可能我总是小题大做,因为纸箱大小不一,如果不做一下分类,然后把大的折小一些的话,直接绑起来,容易拎起来就散掉了,而且一些鞋盒子这种小件的纸盒会比较薄,冰箱这种大件的比较厚,厚的比较不容易变形,需要大力踩踏,而且扎的时候需要用体重压住捆实了之后那样子才是真的捆实的,不然待会又是松松垮垮容易滑出来散架,因为压住了捆好后,下来了之后箱子就会弹开了把绳子崩紧实,感觉又是掌握到生活小技巧了😃,我这里其实比较单调无聊,然后 LD 那可以说非常厉害了,一共理出来 11 把旧电扇,还有好多没用过全新的不锈钢脸盆大大小小的,感觉比店里在卖的还多,还有是有比较多小时候的东西,特别多小时候的衣服,其实这种对我来说最难了,可能需要读一下断舍离,蛮多东西都舍不得扔,但是其实是没啥用了,然后还占地方,这天应该算是比较轻松的一天了,上午主要是把收拾出来要的和不要的搬下楼,然后下午要去把纸板给卖掉。中午还是去小快餐店吃的,在住的家里理东西还有个好处就是中午吃完饭可以小憩一下,因为我个人是非常依赖午休的,不然下午完全没精神,而且心态也会比较烦躁,一方面是客观的的确比较疲惫,另一方面应该主观心理作用也有点影响,就像上班的时候也是觉得不午睡就会很难受,心理作用也有一点,不过总之能睡还是睡一会,真的没办法就心态好点,吃完午饭之后我们就推着小平板车去收废品的地方卖掉了上午我收拾捆起来的纸板,好像卖了一百多,都是直接过地磅了,不用一捆一捆地称,不过有个小插曲,那里另外一个大爷在倒他的三轮车的时候撞了我一下,还好车速慢,屁股上肉垫后,接下来就比较麻烦了,是LD 她们两姐妹从小到大的书,也要去卖掉,小平板车就载不下了,而且着实也不太好推,轮子不太平,导致推着很累,书有好多箱,本来是想去亲戚家借电动三轮车,因为不会开摩托的那种,摩托的那种 LD 邻居家就有,可是到了那发现那个也是很大,而且刹车是用脚踩的那种,俺爹不太放心,就说第二天周日他有空会帮忙去载了卖掉的,然后比较搞笑的来了,丈母娘看错了时间,以为已经快五点了,就让我们顺便在车里带点东西去在修的房子,放到那边三楼去,到了那还跟老丈人说已经这么迟了要赶紧去菜场买菜了,结果我们回来以后才发现看错了一个小时🤦♂️。<br > 前面可以没提,前三周去的我们一般就周六去一天,然后周日因为要早点回杭州,而且可能想让我们周日能休息下,但是这周就因为周日的时候我爸要去帮忙载书,然后 LD 姐姐也会过来收拾东西,我们周日就又去整理收拾了,周日由于俺爹去的很早,我过去的时候书已经木有了,主要是去收拾东西了,把一些有用没用的继续整理,基本上三楼的就处理完毕了,舒了一大口气,毕竟让丈母娘一个人收拾实在是太累了,但是要扔掉的衣服比较棘手,附近知道的青蛙回收桶被推倒了,其他地方也不知道哪里有,我们就先载了一些东西去在修的房子那,然后去找青蛙桶,结果一个小区可以进,但是已经满了,另一个不让进,后来只能让 LD 姐姐带去她们小区扔了,塞了满满一车。因为要赶回杭州的车就没有等我爸一起回来,他还在那帮忙搞卫生间的墙缝。<br > 虽然这两天不太热,活也不算很吃力,不过我这个体重和易出汗的体质,还是让短袖不知道湿透了多少次,灌了好多水和冰红茶(下午能提提神),回来周一早上称体重也比较喜人,差一点就达到阶段目标,可以想想去哪里吃之前想好的烤肉跟火锅了(估计吃完立马回到解放前) 。</p>
<title > 在老丈人家的小工记三 </title>
<url > /2020/09/13/%E5%9C%A8%E8%80%81%E4%B8%88%E4%BA%BA%E5%AE%B6%E7%9A%84%E5%B0%8F%E5%B7%A5%E8%AE%B0%E4%B8%89 /</url>
<content > <![CDATA[<h2 id="小工记三 "> <a href= "#小工记三 " class= "headerlink" title= "小工记三" > </a> 小工记三</h2> <p > 前面这两周周末也都去老丈人家帮忙了,上上周周六先是去了那个在装修的旧房子那,把三楼收拾了下,因为要搬进来住,来不及等二楼装修好,就要把三楼里的东西都整理干净,这个活感觉是比较 easy,原来是就准备把三楼当放东西仓储的地方了,我们乡下大部分三层楼都是这么用的,这次也是没办法,之前搬进来的木头什么的都搬出去,主要是这上面灰尘太多,后面清理鼻孔的时候都是黑色的了,把东西都搬出去以后主要是地还是很脏,就扫了地拖了地,因为是水泥地,灰尘又太多了,拖起来都是会灰尘扬起来,整个脱完了的确干净很多,然而这会就出了个大乌龙,我们清理的是三楼的西边一间,结果老丈人上来说要住东边那间的🤦♂️,不过其实西边的也得清理,因为还是要放被子什么的,不算是白费功夫,接着清理东边那间,之前这个房子做过群租房,里面有个高低铺的床,当时觉得可以用在放被子什么的就没扔,只是拆掉了放旁边,我们就把它擦干净了又装好,发现螺丝🔩少了几个,亘古不变的真理,拆了以后装要不就多几个要不就少几个,不是很牢靠,不过用来放放被子省得放地上总还是可以的,对了前面还做了个事情就是铺地毯,其实也不是地毯,就是类似于墙布雨篷布那种,别人不用了送给我们的,三楼水泥地也不会铺瓷砖地板了就放一下,干净好看点,不过大小不合适要裁一下,那把剪刀是真的太难用了,我手都要抽筋了,它就是刀口只有一小个点是能剪下来的,其他都是钝的,后来还是用刀片直接裁,铺好以后,真的感觉也不太一样了,焕然一新的感觉<br > 差不多中午了就去吃饭了,之前两次是去了一家小饭店,还是还比较干净,但是店里菜不好吃,还死贵,这次去了一家小快餐店,口味好,便宜,味道是真的不错,带鱼跟黄鱼都好吃,一点都不腥,我对这类比较腥的鱼真的是很挑剔的,基本上除了家里做的很少吃外面的,那天抱着试试的态度吃了下,真的还不错,后来丈母娘说好像这家老板是给别人结婚喜事酒席当厨师的,怪不得做的好吃,其实本来是有一点小抗拒,怕不干净什么的,后来发现菜很好吃,而且可能是老丈人跟干活的师傅去吃的比较多,老板很客气,我们吃完饭,还给我们买了葡萄吃,不过这家店有一个槽点,就是饭比较不好吃,有时候会夹生,不过后面聊起来其实是这种小菜馆饭点的通病,烧的太早太多容易多出来浪费,烧的迟了不够吃,而且大的电饭锅比较不容易烧好。<br > 下午前面还是在处理三楼的,窗户上各种钉子,实在是太多了,我后面在走廊上排了一排🤦♂️,有些是直接断了,有些是就撬了出来,感觉我在杭州租房也没有这样子各种钉钉子,挂下衣服什么的也不用这么多吧,比较不能理解,搞得到处都是钉子。那天我爸也去帮忙了,主要是在卫生间里做白缝,其实也是个技术活,印象中好像我小时候自己家里也做过这个事情,但是比较模糊了,后面我们三楼搞完了就去帮我爸了,前面是我老婆二爹在那先刷上白缝,这里叫白缝,有些考究的也叫美缝,就是瓷砖铺完之后的缝,如果不去弄的话,里面水泥的颜色就露出来了,而且容易渗水,所以就要用白水泥加胶水搅拌之后糊在缝上,但是也不是直接糊,先要把缝抠一抠,因为铺瓷砖的还不会仔细到每个缝里的水泥都是一样满,而且也需要一些空间糊上去,不然就太表面的一层很容易被水直接冲掉了,然后这次其实也不是用的白水泥,而是直接现成买来就已经配好的用来填缝的,兑水搅拌均匀就好了,后面就主要是我跟我爸在搞,那个时候真的觉得我实在是太胖了,蹲下去真的没一会就受不了了,膝盖什么的太难受了,后面我跪着刷,然后膝盖又疼,也是比较不容易,不过我爸动作很快,我中间跪累了休息一会,我爸就能搞一大片,后面其实我也没做多少(谦虚一下),总体来讲这次不是很累,就是蹲着跪着腿有点受不了,是应该好好减肥了 。</p>
]]></content>
<categories >
<category > 生活</category>
@ -7935,31 +7931,31 @@ user3:
</tags>
</entry>
<entry >
<title > 是何原因竟让两人深夜奔袭十公里</title>
<url > /2022/06/05/%E6%98%AF%E4%BD%95%E5%8E%9F%E5%9B%A0%E7%AB%9F%E8%AE%A9%E4%B8%A4%E4%BA%BA%E6%B7%B1%E5%A4%9C%E5%A5%94%E8%A2%AD%E5%8D%81%E5%85%AC%E9%87%8C/</url>
<content > <![CDATA[<p> 偶尔来个标题党,不过也是一次比较神奇的经历<br > 上周五下班后跟 LD 约好去吃牛蛙,某个朋友好像对这类都不太能接受,我以前小时候也不常吃,但是这类其实都是口味比较重,没有那种肉本身的腥味,而且肉质比较特殊,吃过几次以后就有点爱上了,这次刚好是 LD 买的新店开业券,比较优惠(我们俩都是有点勤俭持家的,想着小电驴还有三格电,这家店又有点远,骑车单趟大概要 10 公里左右,有点担心,LD 说应该可以的,就一起骑了过去(跟她轮换着骑电驴和共享单车),结果大概离吃牛蛙的店还有一辆公里的时候,电量就报警了,只有最后一个红色的了,一共是五格,最后一格是红色的,提示我们该充电了,这样子是真的有点慌了,之前开了几个月都是还有一两格电的时候就充电了,没有试验过究竟这最后一格电能开多远,总之先到了再说。<br > 这家牛蛙没想到还挺热闹的,我们到那已经快八点了,还有十几个排队的,有个人还想插队(向来是不惯着这种,一边去),旁边刚好是有些商店就逛了下,就跟常规的商业中心差不多,开业的比较早也算是这一边比较核心的商业综合体了,各种品牌都有,而且还有彩票售卖点的,只是不太理解现在的彩票都是兑图案的,而且要 10 块钱一张,我的概念里还是以前 2 块钱一张的双色球,偶尔能中个五块十块的。排队还剩四五个的时候我们就去门口坐着等了,又等了大概二十分钟才排到我们,靠近我们等的里面的位置,好像好几个小女生在那还叫了外卖奶茶,然后各种拍照,小朋友的生活还是丰富多彩的,我们到了就点了蒜蓉的,没有点传说中紫苏的,菜单上画了 N 个🌶,LD 还是想体验下说下次人多点可以试试,我们俩吃怕太辣了吃不消,口味还是不错的,这家貌似是 LD 闺蜜推荐的,口碑有保证。两个人光吃一个蛙锅就差不多了,本来还想再点个其他的,后面实在吃不下了就没点,吃完还是惯例点了个奶茶,不过是真的不好找,太大了。<br > 本来是就回个家的事了,结果就因为前面铺垫的小电驴已经只有一格电了,标题的深夜奔袭十公里就出现了,这个电驴估计续航也虚标挺严重的,电量也是这样,骑的时候显示只有一格电,关掉再开起来又有三格,然后我们回去骑了没一公里就没电了,这下是真的完球了,觉得车子也比较新,直接停外面也不放心,就开始了深夜的十公里推电驴奔袭,LD 看我太累还帮我中间推了一段,虽然是跑过十公里的,但是推着个没电的电驴,还是着实不容易的,LD 也是陪我推着车走,中间好几次说我们把电驴停着打车回去,把电池带回去充满了明天再过来骑车,可能是心态已经转变了,这应该算是一次很特殊的体验,从我们吃完出来大概十点,到最后我们推到小区,大概是过了两个小时的样子,说句深夜也不太过分,把这次这么推车看成了一种意志力的考验,很多事情也都是怕坚持,或者说怕不能坚持,想走得远,没有持续的努力坚持肯定是不行的,所以还是坚持着把车推回来(好吧,我其实主要是怕车被偷,毕竟刚来杭州上学没多久就被偷了自行车留下了阴影),中间感谢 LD,跟我轮着推了一段路,有些下坡的时候还在那坐着用脚蹬一下,离家里大概还有一公里的时候,有个骑电瓶车的大叔还停下来问我们是车破了还是没电了,应该是出于好意吧,最后快到的时候真的非常渴,买了2.5 升的水被我一口气喝了大半瓶,奶茶已经不能起到解渴的作用了,本来以为这样能消耗很多,结果第二天一称还重了,(我的称一定有问题 233</p>
<title > 看完了扫黑风暴,聊聊感想</title>
<url > /2021/10/24/%E7%9C%8B%E5%AE%8C%E4%BA%86%E6%89%AB%E9%BB%91%E9%A3%8E%E6%9A%B4-%E8%81%8A%E8%81%8A%E6%84%9F%E6%83%B3/</url>
<content > <![CDATA[<p> 一直在想这篇怎么写,看了这部剧其实对我的一些观念是有影响的,应该是在 9 月份就看完了,到现在可能才会稍微平静一点,一开始是没有想看这部剧,因为同期有一部差不多同名的电影,被投诉了对湖南埋尸案家属伤害很大,我以为就是投诉的这部电视剧,后来同事跟我说不是,所以就想着看一下,但是没有马上看,因为一直不喜欢追这种比较纠结的剧,当时看人民的名义,就是后面等不了了直接看了小说,所以差不多是等到更完了才看的。</p>
<p > 尝试保持一个比较冷静的状态来聊聊,在看的时候有一点感想就是如果要剧里的坏人排个名,因为明眼看都是孙兴是个穷凶极恶的坏人,干尽了坏事,而且可能是演员表演地好,让人真的恨的牙痒痒,但是更多地还是停留在那些剧情中的表现和他的表情,其实对应的真实案例有更多的,这里尽量不展开,有兴趣可以自行搜索关键字,所以其实我想排个名的话,孙兴的母亲应该是我心目中是造成这个结果的比较大占比的始作俑者,因为是方方面面的,包括对林汉的栽赃迫害,最后串起来是因为他看到了孙兴又出来了,就是那句老话,撒了一个谎以后就要用无数个谎来圆,贺芸为了孙兴,作了第一个恶以后就用了一系列的丧心病狂的操作来保护孙兴,而且这之后所做的事情一件比一件可怕,并且如果不是督导组各种想方设法地去破解谜题,这个事情还可以一直被通过各种操作瞒下去,而孙兴还可以继续地为虎作伥,当然其他的包括高明远以及后面的王政,当然是为了这个操作也提供的各种方式的帮助,甚至是主导了这些操作,但是这里贺芸还是在这个位子上能够通过权力做出非常关键的动作,包括栽赃林汉,并且搞掉了李成阳。其中还有一点是我对剧情设计的质疑,也是我前面提到过一点,因为里面孙兴好像是很爱他的母亲贺芸,似乎想表达的是孙兴作的恶是因为得不到母爱,并且个人感觉如果是一个比较敬爱自己母亲的儿子,似乎应该有所畏惧,对他的行为也会有所限制,不应该变成这样一个无恶不作的恶霸,这也是我一直以来的观点,很多人作恶太多可能是因为没有信仰,不管是信基督耶稣还是信道教佛教,总归有一些制约,当然不是说就绝对不会作恶,只是偏向于有所畏惧敬畏,除了某绿哈。</p>
<p > 而对于其他的人感觉演技都不错,只是最后有一些虎头蛇尾吧,不知道是不是审核的原因,也不细说了怕被请喝茶,还有提一点就是麦佳的这个事情,她其实是里面很惨的一个人,把高明远当成最亲近的人,而其实真相令人感觉不寒而栗,杀父杀母的仇人,对于麦佳这个演员,一直觉得印象深刻,后来才想起来就是在爱情公寓里演被关谷救了要以身相遇的那个女孩,长相其实蛮令人印象深刻的,但好像也一直不温不火,不过也不能说演技很好吧,只是在这里演的任务真的是很可怜了,剧情设计里也应该是个很重要的串联人物,最终被高明远献给了大佬,这里扯开一点,好像有的观点说贺芸之前也是这样的,只是一种推测了。</p>
<p > 看完这部剧其实有很多想说的,但是也为了不被请喝茶,尽量少说了,只想说珍爱生命,还是自己小心吧</p>
]]></content>
<categories >
<category > 生活</category>
</categories>
<tags >
<tag > 生活</tag>
<tag > 影评</tag>
</tags>
</entry>
<entry >
<title > 看完了扫黑风暴,聊聊感想</title>
<url > /2021/10/24/%E7%9C%8B%E5%AE%8C%E4%BA%86%E6%89%AB%E9%BB%91%E9%A3%8E%E6%9A%B4-%E8%81%8A%E8%81%8A%E6%84%9F%E6%83%B3/</url>
<content > <![CDATA[<p> 一直在想这篇怎么写,看了这部剧其实对我的一些观念是有影响的,应该是在 9 月份就看完了,到现在可能才会稍微平静一点,一开始是没有想看这部剧,因为同期有一部差不多同名的电影,被投诉了对湖南埋尸案家属伤害很大,我以为就是投诉的这部电视剧,后来同事跟我说不是,所以就想着看一下,但是没有马上看,因为一直不喜欢追这种比较纠结的剧,当时看人民的名义,就是后面等不了了直接看了小说,所以差不多是等到更完了才看的。</p>
<p > 尝试保持一个比较冷静的状态来聊聊,在看的时候有一点感想就是如果要剧里的坏人排个名,因为明眼看都是孙兴是个穷凶极恶的坏人,干尽了坏事,而且可能是演员表演地好,让人真的恨的牙痒痒,但是更多地还是停留在那些剧情中的表现和他的表情,其实对应的真实案例有更多的,这里尽量不展开,有兴趣可以自行搜索关键字,所以其实我想排个名的话,孙兴的母亲应该是我心目中是造成这个结果的比较大占比的始作俑者,因为是方方面面的,包括对林汉的栽赃迫害,最后串起来是因为他看到了孙兴又出来了,就是那句老话,撒了一个谎以后就要用无数个谎来圆,贺芸为了孙兴,作了第一个恶以后就用了一系列的丧心病狂的操作来保护孙兴,而且这之后所做的事情一件比一件可怕,并且如果不是督导组各种想方设法地去破解谜题,这个事情还可以一直被通过各种操作瞒下去,而孙兴还可以继续地为虎作伥,当然其他的包括高明远以及后面的王政,当然是为了这个操作也提供的各种方式的帮助,甚至是主导了这些操作,但是这里贺芸还是在这个位子上能够通过权力做出非常关键的动作,包括栽赃林汉,并且搞掉了李成阳。其中还有一点是我对剧情设计的质疑,也是我前面提到过一点,因为里面孙兴好像是很爱他的母亲贺芸,似乎想表达的是孙兴作的恶是因为得不到母爱,并且个人感觉如果是一个比较敬爱自己母亲的儿子,似乎应该有所畏惧,对他的行为也会有所限制,不应该变成这样一个无恶不作的恶霸,这也是我一直以来的观点,很多人作恶太多可能是因为没有信仰,不管是信基督耶稣还是信道教佛教,总归有一些制约,当然不是说就绝对不会作恶,只是偏向于有所畏惧敬畏,除了某绿哈。</p>
<p > 而对于其他的人感觉演技都不错,只是最后有一些虎头蛇尾吧,不知道是不是审核的原因,也不细说了怕被请喝茶,还有提一点就是麦佳的这个事情,她其实是里面很惨的一个人,把高明远当成最亲近的人,而其实真相令人感觉不寒而栗,杀父杀母的仇人,对于麦佳这个演员,一直觉得印象深刻,后来才想起来就是在爱情公寓里演被关谷救了要以身相遇的那个女孩,长相其实蛮令人印象深刻的,但好像也一直不温不火,不过也不能说演技很好吧,只是在这里演的任务真的是很可怜了,剧情设计里也应该是个很重要的串联人物,最终被高明远献给了大佬,这里扯开一点,好像有的观点说贺芸之前也是这样的,只是一种推测了。</p>
<p > 看完这部剧其实有很多想说的,但是也为了不被请喝茶,尽量少说了,只想说珍爱生命,还是自己小心吧</p>
<title > 是何原因竟让两人深夜奔袭十公里</title>
<url > /2022/06/05/%E6%98%AF%E4%BD%95%E5%8E%9F%E5%9B%A0%E7%AB%9F%E8%AE%A9%E4%B8%A4%E4%BA%BA%E6%B7%B1%E5%A4%9C%E5%A5%94%E8%A2%AD%E5%8D%81%E5%85%AC%E9%87%8C/</url>
<content > <![CDATA[<p> 偶尔来个标题党,不过也是一次比较神奇的经历<br > 上周五下班后跟 LD 约好去吃牛蛙,某个朋友好像对这类都不太能接受,我以前小时候也不常吃,但是这类其实都是口味比较重,没有那种肉本身的腥味,而且肉质比较特殊,吃过几次以后就有点爱上了,这次刚好是 LD 买的新店开业券,比较优惠(我们俩都是有点勤俭持家的,想着小电驴还有三格电,这家店又有点远,骑车单趟大概要 10 公里左右,有点担心,LD 说应该可以的,就一起骑了过去(跟她轮换着骑电驴和共享单车),结果大概离吃牛蛙的店还有一辆公里的时候,电量就报警了,只有最后一个红色的了,一共是五格,最后一格是红色的,提示我们该充电了,这样子是真的有点慌了,之前开了几个月都是还有一两格电的时候就充电了,没有试验过究竟这最后一格电能开多远,总之先到了再说。<br > 这家牛蛙没想到还挺热闹的,我们到那已经快八点了,还有十几个排队的,有个人还想插队(向来是不惯着这种,一边去),旁边刚好是有些商店就逛了下,就跟常规的商业中心差不多,开业的比较早也算是这一边比较核心的商业综合体了,各种品牌都有,而且还有彩票售卖点的,只是不太理解现在的彩票都是兑图案的,而且要 10 块钱一张,我的概念里还是以前 2 块钱一张的双色球,偶尔能中个五块十块的。排队还剩四五个的时候我们就去门口坐着等了,又等了大概二十分钟才排到我们,靠近我们等的里面的位置,好像好几个小女生在那还叫了外卖奶茶,然后各种拍照,小朋友的生活还是丰富多彩的,我们到了就点了蒜蓉的,没有点传说中紫苏的,菜单上画了 N 个🌶,LD 还是想体验下说下次人多点可以试试,我们俩吃怕太辣了吃不消,口味还是不错的,这家貌似是 LD 闺蜜推荐的,口碑有保证。两个人光吃一个蛙锅就差不多了,本来还想再点个其他的,后面实在吃不下了就没点,吃完还是惯例点了个奶茶,不过是真的不好找,太大了。<br > 本来是就回个家的事了,结果就因为前面铺垫的小电驴已经只有一格电了,标题的深夜奔袭十公里就出现了,这个电驴估计续航也虚标挺严重的,电量也是这样,骑的时候显示只有一格电,关掉再开起来又有三格,然后我们回去骑了没一公里就没电了,这下是真的完球了,觉得车子也比较新,直接停外面也不放心,就开始了深夜的十公里推电驴奔袭,LD 看我太累还帮我中间推了一段,虽然是跑过十公里的,但是推着个没电的电驴,还是着实不容易的,LD 也是陪我推着车走,中间好几次说我们把电驴停着打车回去,把电池带回去充满了明天再过来骑车,可能是心态已经转变了,这应该算是一次很特殊的体验,从我们吃完出来大概十点,到最后我们推到小区,大概是过了两个小时的样子,说句深夜也不太过分,把这次这么推车看成了一种意志力的考验,很多事情也都是怕坚持,或者说怕不能坚持,想走得远,没有持续的努力坚持肯定是不行的,所以还是坚持着把车推回来(好吧,我其实主要是怕车被偷,毕竟刚来杭州上学没多久就被偷了自行车留下了阴影),中间感谢 LD,跟我轮着推了一段路,有些下坡的时候还在那坐着用脚蹬一下,离家里大概还有一公里的时候,有个骑电瓶车的大叔还停下来问我们是车破了还是没电了,应该是出于好意吧,最后快到的时候真的非常渴,买了2.5 升的水被我一口气喝了大半瓶,奶茶已经不能起到解渴的作用了,本来以为这样能消耗很多,结果第二天一称还重了,(我的称一定有问题 233</p>
]]></content>
<categories >
<category > 生活</category>
</categories>
<tags >
<tag > 生活</tag>
<tag > 影评</tag>
</tags>
</entry>
<entry >
@ -11367,6 +11363,44 @@ public Result invoke(final Invocation invocation) throws RpcException {
<tag > 自旋</tag>
</tags>
</entry>
<entry >
<title > 聊聊 Java 的 equals 和 hashCode 方法</title>
<url > /2021/01/03/%E8%81%8A%E8%81%8A-Java-%E7%9A%84-equals-%E5%92%8C-hashCode-%E6%96%B9%E6%B3%95/</url>
<content > <![CDATA[<p> Java 中的这个话题也是比较常遇到的,关于这块原先也是比较忽略的,但是仔细想想又有点遗忘了就在这里记一下<br > 简单看下代码<br > <code > java.lang.Object#equals</code> </p>
<pre class= "line-numbers language-java" data-language= "java" > <code class= "language-java" > <span class= "token keyword" > public</span> <span class= "token keyword" > boolean</span> <span class= "token function" > equals</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > Object</span> obj<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token keyword" > return</span> <span class= "token punctuation" > (</span> <span class= "token keyword" > this</span> <span class= "token operator" > ==</span> obj<span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> </span> </code> </pre>
<p > 对于所有对象的父类,<code > equals</code> 方法其实对比的就是对象的地址,也就是是否是同一个对象,试想如果像 Integer 或者 String 这种,我们没有重写 <code > equals</code> ,那其实就等于是在用<code > ==</code> ,可能就没法达到我们的目的,所以像 String 这种常用的 jdk 类都是默认重写了<br > <code > java.lang.String#equals</code> </p>
<pre class= "line-numbers language-java" data-language= "java" > <code class= "language-java" > <span class= "token keyword" > public</span> <span class= "token keyword" > boolean</span> <span class= "token function" > equals</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > Object</span> anObject<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token keyword" > if</span> <span class= "token punctuation" > (</span> <span class= "token keyword" > this</span> <span class= "token operator" > ==</span> anObject<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token keyword" > return</span> <span class= "token boolean" > true</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span>
<span class= "token keyword" > if</span> <span class= "token punctuation" > (</span> anObject <span class= "token keyword" > instanceof</span> <span class= "token class-name" > String</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token class-name" > String</span> anotherString <span class= "token operator" > =</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > String</span> <span class= "token punctuation" > )</span> anObject<span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> n <span class= "token operator" > =</span> value<span class= "token punctuation" > .</span> length<span class= "token punctuation" > ;</span>
<span class= "token keyword" > if</span> <span class= "token punctuation" > (</span> n <span class= "token operator" > ==</span> anotherString<span class= "token punctuation" > .</span> value<span class= "token punctuation" > .</span> length<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token keyword" > char</span> v1<span class= "token punctuation" > [</span> <span class= "token punctuation" > ]</span> <span class= "token operator" > =</span> value<span class= "token punctuation" > ;</span>
<span class= "token keyword" > char</span> v2<span class= "token punctuation" > [</span> <span class= "token punctuation" > ]</span> <span class= "token operator" > =</span> anotherString<span class= "token punctuation" > .</span> value<span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> i <span class= "token operator" > =</span> <span class= "token number" > 0</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > while</span> <span class= "token punctuation" > (</span> n<span class= "token operator" > --</span> <span class= "token operator" > !=</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token keyword" > if</span> <span class= "token punctuation" > (</span> v1<span class= "token punctuation" > [</span> i<span class= "token punctuation" > ]</span> <span class= "token operator" > !=</span> v2<span class= "token punctuation" > [</span> i<span class= "token punctuation" > ]</span> <span class= "token punctuation" > )</span>
<span class= "token keyword" > return</span> <span class= "token boolean" > false</span> <span class= "token punctuation" > ;</span>
i<span class= "token operator" > ++</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span>
<span class= "token keyword" > return</span> <span class= "token boolean" > true</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span>
<span class= "token punctuation" > } </span>
<span class= "token keyword" > return</span> <span class= "token boolean" > false</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre>
<p > 然后呢就是为啥一些书或者 <code > effective java</code> 中写了 <code > equals</code> 跟 <code > hashCode</code> 要一起重写,这里涉及到当对象作为 <code > HashMap</code> 的 <code > key</code> 的时候<br > 首先 <code > HashMap</code> 会使用 <code > hashCode</code> 去判断是否在同一个槽里,然后在通过 <code > equals</code> 去判断是否是同一个 <code > key</code> ,是的话就替换,不是的话就链表接下去,如果不重写 <code > hashCode</code> 的话,默认的 <code > object</code> 的<code > hashCode</code> 是 <code > native</code> 方法,根据对象的地址生成的,这样其实对象的值相同的话,因为地址不同,<code > HashMap</code> 也会出现异常,所以需要重写,同时也需要重写 <code > equals</code> 方法,才能确认是同一个 <code > key</code> ,而不是落在同一个槽的不同 <code > key</code> .</p>
]]></content>
<categories >
<category > java</category>
</categories>
<tags >
<tag > java</tag>
</tags>
</entry>
<entry >
<title > 聊聊 Java 中绕不开的 Synchronized 关键字</title>
<url > /2021/06/20/%E8%81%8A%E8%81%8A-Java-%E4%B8%AD%E7%BB%95%E4%B8%8D%E5%BC%80%E7%9A%84-Synchronized-%E5%85%B3%E9%94%AE%E5%AD%97/</url>
@ -11536,44 +11570,6 @@ public Result invoke(final Invocation invocation) throws RpcException {
<tag > 自旋</tag>
</tags>
</entry>
<entry >
<title > 聊聊 Java 的 equals 和 hashCode 方法</title>
<url > /2021/01/03/%E8%81%8A%E8%81%8A-Java-%E7%9A%84-equals-%E5%92%8C-hashCode-%E6%96%B9%E6%B3%95/</url>
<content > <![CDATA[<p> Java 中的这个话题也是比较常遇到的,关于这块原先也是比较忽略的,但是仔细想想又有点遗忘了就在这里记一下<br > 简单看下代码<br > <code > java.lang.Object#equals</code> </p>
<pre class= "line-numbers language-java" data-language= "java" > <code class= "language-java" > <span class= "token keyword" > public</span> <span class= "token keyword" > boolean</span> <span class= "token function" > equals</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > Object</span> obj<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token keyword" > return</span> <span class= "token punctuation" > (</span> <span class= "token keyword" > this</span> <span class= "token operator" > ==</span> obj<span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> </span> </code> </pre>
<p > 对于所有对象的父类,<code > equals</code> 方法其实对比的就是对象的地址,也就是是否是同一个对象,试想如果像 Integer 或者 String 这种,我们没有重写 <code > equals</code> ,那其实就等于是在用<code > ==</code> ,可能就没法达到我们的目的,所以像 String 这种常用的 jdk 类都是默认重写了<br > <code > java.lang.String#equals</code> </p>
<pre class= "line-numbers language-java" data-language= "java" > <code class= "language-java" > <span class= "token keyword" > public</span> <span class= "token keyword" > boolean</span> <span class= "token function" > equals</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > Object</span> anObject<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token keyword" > if</span> <span class= "token punctuation" > (</span> <span class= "token keyword" > this</span> <span class= "token operator" > ==</span> anObject<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token keyword" > return</span> <span class= "token boolean" > true</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span>
<span class= "token keyword" > if</span> <span class= "token punctuation" > (</span> anObject <span class= "token keyword" > instanceof</span> <span class= "token class-name" > String</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token class-name" > String</span> anotherString <span class= "token operator" > =</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > String</span> <span class= "token punctuation" > )</span> anObject<span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> n <span class= "token operator" > =</span> value<span class= "token punctuation" > .</span> length<span class= "token punctuation" > ;</span>
<span class= "token keyword" > if</span> <span class= "token punctuation" > (</span> n <span class= "token operator" > ==</span> anotherString<span class= "token punctuation" > .</span> value<span class= "token punctuation" > .</span> length<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token keyword" > char</span> v1<span class= "token punctuation" > [</span> <span class= "token punctuation" > ]</span> <span class= "token operator" > =</span> value<span class= "token punctuation" > ;</span>
<span class= "token keyword" > char</span> v2<span class= "token punctuation" > [</span> <span class= "token punctuation" > ]</span> <span class= "token operator" > =</span> anotherString<span class= "token punctuation" > .</span> value<span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> i <span class= "token operator" > =</span> <span class= "token number" > 0</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > while</span> <span class= "token punctuation" > (</span> n<span class= "token operator" > --</span> <span class= "token operator" > !=</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token keyword" > if</span> <span class= "token punctuation" > (</span> v1<span class= "token punctuation" > [</span> i<span class= "token punctuation" > ]</span> <span class= "token operator" > !=</span> v2<span class= "token punctuation" > [</span> i<span class= "token punctuation" > ]</span> <span class= "token punctuation" > )</span>
<span class= "token keyword" > return</span> <span class= "token boolean" > false</span> <span class= "token punctuation" > ;</span>
i<span class= "token operator" > ++</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span>
<span class= "token keyword" > return</span> <span class= "token boolean" > true</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span>
<span class= "token punctuation" > } </span>
<span class= "token keyword" > return</span> <span class= "token boolean" > false</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre>
<p > 然后呢就是为啥一些书或者 <code > effective java</code> 中写了 <code > equals</code> 跟 <code > hashCode</code> 要一起重写,这里涉及到当对象作为 <code > HashMap</code> 的 <code > key</code> 的时候<br > 首先 <code > HashMap</code> 会使用 <code > hashCode</code> 去判断是否在同一个槽里,然后在通过 <code > equals</code> 去判断是否是同一个 <code > key</code> ,是的话就替换,不是的话就链表接下去,如果不重写 <code > hashCode</code> 的话,默认的 <code > object</code> 的<code > hashCode</code> 是 <code > native</code> 方法,根据对象的地址生成的,这样其实对象的值相同的话,因为地址不同,<code > HashMap</code> 也会出现异常,所以需要重写,同时也需要重写 <code > equals</code> 方法,才能确认是同一个 <code > key</code> ,而不是落在同一个槽的不同 <code > key</code> .</p>
]]></content>
<categories >
<category > java</category>
</categories>
<tags >
<tag > java</tag>
</tags>
</entry>
<entry >
<title > 聊聊 Java 的类加载机制一</title>
<url > /2020/11/08/%E8%81%8A%E8%81%8A-Java-%E7%9A%84%E7%B1%BB%E5%8A%A0%E8%BD%BD%E6%9C%BA%E5%88%B6/</url>
@ -13244,67 +13240,6 @@ t2
<tag > Sharding-Jdbc</tag>
</tags>
</entry>
<entry >
<title > 聊聊 dubbo 的线程池</title>
<url > /2021/04/04/%E8%81%8A%E8%81%8A-dubbo-%E7%9A%84%E7%BA%BF%E7%A8%8B%E6%B1%A0/</url>
<content > <![CDATA[<p> 之前没注意到这一块,只是比较模糊的印象 dubbo 自己基于 ThreadPoolExecutor 定义了几个线程池,但是没具体看过,主要是觉得就是为了避免使用 jdk 自带的那几个(java.util.concurrent.Executors),防止出现那些问题<br > 看下代码目录主要是这几个<br > <img data-src= "https://img.nicksxs.com/uPic/3qIllK.png" > </p>
<ul >
<li > FixedThreadPool:创建一个复用固定个数线程的线程池。<br > 简单看下代码<pre class= "line-numbers language-java" data-language= "java" > <code class= "language-java" > <span class= "token keyword" > public</span> <span class= "token class-name" > Executor</span> <span class= "token function" > getExecutor</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > URL</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token class-name" > String</span> name <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threadname"</span> <span class= "token punctuation" > ,</span> <span class= "token string" > "Dubbo"</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> threads <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threads"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 200</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> queues <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "queues"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > return</span> <span class= "token keyword" > new</span> <span class= "token class-name" > ThreadPoolExecutor</span> <span class= "token punctuation" > (</span> threads<span class= "token punctuation" > ,</span> threads<span class= "token punctuation" > ,</span> <span class= "token number" > 0L</span> <span class= "token punctuation" > ,</span> <span class= "token class-name" > TimeUnit</span> <span class= "token punctuation" > .</span> MILLISECONDS<span class= "token punctuation" > ,</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > BlockingQueue</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > (</span> queues <span class= "token operator" > ==</span> <span class= "token number" > 0</span> <span class= "token operator" > ?</span> <span class= "token keyword" > new</span> <span class= "token class-name" > SynchronousQueue</span> <span class= "token punctuation" > (</span> <span class= "token punctuation" > )</span> <span class= "token operator" > :</span> <span class= "token punctuation" > (</span> queues <span class= "token operator" > < </span> <span class= "token number" > 0</span> <span class= "token operator" > ?</span> <span class= "token keyword" > new</span> <span class= "token class-name" > LinkedBlockingQueue</span> <span class= "token punctuation" > (</span> <span class= "token punctuation" > )</span> <span class= "token operator" > :</span> <span class= "token keyword" > new</span> <span class= "token class-name" > LinkedBlockingQueue</span> <span class= "token punctuation" > (</span> queues<span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > NamedThreadFactory</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> <span class= "token boolean" > true</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > AbortPolicyWithReport</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre>
可以看到核心线程数跟最大线程数一致,也就是说就不会在核心线程数和最大线程数之间动态变化了</li>
<li > LimitedThreadPool:创建一个线程池,这个线程池中线程个数随着需要量动态增加,但是数量不超过配置的阈值的个数,另外空闲线程不会被回收,会一直存在。<pre class= "line-numbers language-java" data-language= "java" > <code class= "language-java" > <span class= "token keyword" > public</span> <span class= "token class-name" > Executor</span> <span class= "token function" > getExecutor</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > URL</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token class-name" > String</span> name <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threadname"</span> <span class= "token punctuation" > ,</span> <span class= "token string" > "Dubbo"</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> cores <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "corethreads"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> threads <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threads"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 200</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> queues <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "queues"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > return</span> <span class= "token keyword" > new</span> <span class= "token class-name" > ThreadPoolExecutor</span> <span class= "token punctuation" > (</span> cores<span class= "token punctuation" > ,</span> threads<span class= "token punctuation" > ,</span> <span class= "token number" > 9223372036854775807L</span> <span class= "token punctuation" > ,</span> <span class= "token class-name" > TimeUnit</span> <span class= "token punctuation" > .</span> MILLISECONDS<span class= "token punctuation" > ,</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > BlockingQueue</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > (</span> queues <span class= "token operator" > ==</span> <span class= "token number" > 0</span> <span class= "token operator" > ?</span> <span class= "token keyword" > new</span> <span class= "token class-name" > SynchronousQueue</span> <span class= "token punctuation" > (</span> <span class= "token punctuation" > )</span> <span class= "token operator" > :</span> <span class= "token punctuation" > (</span> queues <span class= "token operator" > < </span> <span class= "token number" > 0</span> <span class= "token operator" > ?</span> <span class= "token keyword" > new</span> <span class= "token class-name" > LinkedBlockingQueue</span> <span class= "token punctuation" > (</span> <span class= "token punctuation" > )</span> <span class= "token operator" > :</span> <span class= "token keyword" > new</span> <span class= "token class-name" > LinkedBlockingQueue</span> <span class= "token punctuation" > (</span> queues<span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > NamedThreadFactory</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> <span class= "token boolean" > true</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > AbortPolicyWithReport</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre>
这个特点主要是创建了保活时间特别长,即可以认为不会被回收了</li>
<li > EagerThreadPool :创建一个线程池,这个线程池当所有核心线程都处于忙碌状态时候,创建新的线程来执行新任务,而不是把任务放入线程池阻塞队列。<pre class= "line-numbers language-java" data-language= "java" > <code class= "language-java" > <span class= "token keyword" > public</span> <span class= "token class-name" > Executor</span> <span class= "token function" > getExecutor</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > URL</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token class-name" > String</span> name <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threadname"</span> <span class= "token punctuation" > ,</span> <span class= "token string" > "Dubbo"</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> cores <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "corethreads"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> threads <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threads"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 2147483647</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> queues <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "queues"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> alive <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "alive"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 60000</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token class-name" > TaskQueue</span> <span class= "token generics" > <span class= "token punctuation" > < </span> <span class= "token class-name" > Runnable</span> <span class= "token punctuation" > ></span> </span> taskQueue <span class= "token operator" > =</span> <span class= "token keyword" > new</span> <span class= "token class-name" > TaskQueue</span> <span class= "token punctuation" > (</span> queues <span class= "token operator" > < =</span> <span class= "token number" > 0</span> <span class= "token operator" > ?</span> <span class= "token number" > 1</span> <span class= "token operator" > :</span> queues<span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token class-name" > EagerThreadPoolExecutor</span> executor <span class= "token operator" > =</span> <span class= "token keyword" > new</span> <span class= "token class-name" > EagerThreadPoolExecutor</span> <span class= "token punctuation" > (</span> cores<span class= "token punctuation" > ,</span> threads<span class= "token punctuation" > ,</span> <span class= "token punctuation" > (</span> <span class= "token keyword" > long</span> <span class= "token punctuation" > )</span> alive<span class= "token punctuation" > ,</span> <span class= "token class-name" > TimeUnit</span> <span class= "token punctuation" > .</span> MILLISECONDS<span class= "token punctuation" > ,</span> taskQueue<span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > NamedThreadFactory</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> <span class= "token boolean" > true</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > AbortPolicyWithReport</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
taskQueue<span class= "token punctuation" > .</span> <span class= "token function" > setExecutor</span> <span class= "token punctuation" > (</span> executor<span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > return</span> executor<span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre>
这个是改动最多的一个了,因为需要实现这个机制,有兴趣的可以详细看下</li>
<li > CachedThreadPool: 创建一个自适应线程池,当线程处于空闲1分钟时候,线程会被回收,当有新请求到来时候会创建新线程<pre class= "line-numbers language-java" data-language= "java" > <code class= "language-java" > <span class= "token keyword" > public</span> <span class= "token class-name" > Executor</span> <span class= "token function" > getExecutor</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > URL</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token class-name" > String</span> name <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threadname"</span> <span class= "token punctuation" > ,</span> <span class= "token string" > "Dubbo"</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> cores <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "corethreads"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> threads <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threads"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 2147483647</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> queues <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "queues"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> alive <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "alive"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 60000</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > return</span> <span class= "token keyword" > new</span> <span class= "token class-name" > ThreadPoolExecutor</span> <span class= "token punctuation" > (</span> cores<span class= "token punctuation" > ,</span> threads<span class= "token punctuation" > ,</span> <span class= "token punctuation" > (</span> <span class= "token keyword" > long</span> <span class= "token punctuation" > )</span> alive<span class= "token punctuation" > ,</span> <span class= "token class-name" > TimeUnit</span> <span class= "token punctuation" > .</span> MILLISECONDS<span class= "token punctuation" > ,</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > BlockingQueue</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > (</span> queues <span class= "token operator" > ==</span> <span class= "token number" > 0</span> <span class= "token operator" > ?</span> <span class= "token keyword" > new</span> <span class= "token class-name" > SynchronousQueue</span> <span class= "token punctuation" > (</span> <span class= "token punctuation" > )</span> <span class= "token operator" > :</span> <span class= "token punctuation" > (</span> queues <span class= "token operator" > < </span> <span class= "token number" > 0</span> <span class= "token operator" > ?</span> <span class= "token keyword" > new</span> <span class= "token class-name" > LinkedBlockingQueue</span> <span class= "token punctuation" > (</span> <span class= "token punctuation" > )</span> <span class= "token operator" > :</span> <span class= "token keyword" > new</span> <span class= "token class-name" > LinkedBlockingQueue</span> <span class= "token punctuation" > (</span> queues<span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > NamedThreadFactory</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> <span class= "token boolean" > true</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > AbortPolicyWithReport</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre>
这里可以看到线程池的配置,核心是 0,最大线程数是 2147483647,保活时间是一分钟<br > 只是非常简略的介绍下,有兴趣可以自行阅读代码。</li>
</ul>
]]></content>
<categories >
<category > Java</category>
<category > Dubbo - 线程池</category>
<category > Dubbo</category>
<category > 线程池</category>
<category > ThreadPool</category>
</categories>
<tags >
<tag > Java</tag>
<tag > Dubbo</tag>
<tag > ThreadPool</tag>
<tag > 线程池</tag>
<tag > FixedThreadPool</tag>
<tag > LimitedThreadPool</tag>
<tag > EagerThreadPool</tag>
<tag > CachedThreadPool</tag>
</tags>
</entry>
<entry >
<title > 聊聊 mysql 的 MVCC 续篇</title>
<url > /2020/05/02/%E8%81%8A%E8%81%8A-mysql-%E7%9A%84-MVCC-%E7%BB%AD%E7%AF%87/</url>
@ -13380,6 +13315,67 @@ void ReadView::prepare(trx_id_t id) {
<tag > 幻读</tag>
</tags>
</entry>
<entry >
<title > 聊聊 dubbo 的线程池</title>
<url > /2021/04/04/%E8%81%8A%E8%81%8A-dubbo-%E7%9A%84%E7%BA%BF%E7%A8%8B%E6%B1%A0/</url>
<content > <![CDATA[<p> 之前没注意到这一块,只是比较模糊的印象 dubbo 自己基于 ThreadPoolExecutor 定义了几个线程池,但是没具体看过,主要是觉得就是为了避免使用 jdk 自带的那几个(java.util.concurrent.Executors),防止出现那些问题<br > 看下代码目录主要是这几个<br > <img data-src= "https://img.nicksxs.com/uPic/3qIllK.png" > </p>
<ul >
<li > FixedThreadPool:创建一个复用固定个数线程的线程池。<br > 简单看下代码<pre class= "line-numbers language-java" data-language= "java" > <code class= "language-java" > <span class= "token keyword" > public</span> <span class= "token class-name" > Executor</span> <span class= "token function" > getExecutor</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > URL</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token class-name" > String</span> name <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threadname"</span> <span class= "token punctuation" > ,</span> <span class= "token string" > "Dubbo"</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> threads <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threads"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 200</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> queues <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "queues"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > return</span> <span class= "token keyword" > new</span> <span class= "token class-name" > ThreadPoolExecutor</span> <span class= "token punctuation" > (</span> threads<span class= "token punctuation" > ,</span> threads<span class= "token punctuation" > ,</span> <span class= "token number" > 0L</span> <span class= "token punctuation" > ,</span> <span class= "token class-name" > TimeUnit</span> <span class= "token punctuation" > .</span> MILLISECONDS<span class= "token punctuation" > ,</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > BlockingQueue</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > (</span> queues <span class= "token operator" > ==</span> <span class= "token number" > 0</span> <span class= "token operator" > ?</span> <span class= "token keyword" > new</span> <span class= "token class-name" > SynchronousQueue</span> <span class= "token punctuation" > (</span> <span class= "token punctuation" > )</span> <span class= "token operator" > :</span> <span class= "token punctuation" > (</span> queues <span class= "token operator" > < </span> <span class= "token number" > 0</span> <span class= "token operator" > ?</span> <span class= "token keyword" > new</span> <span class= "token class-name" > LinkedBlockingQueue</span> <span class= "token punctuation" > (</span> <span class= "token punctuation" > )</span> <span class= "token operator" > :</span> <span class= "token keyword" > new</span> <span class= "token class-name" > LinkedBlockingQueue</span> <span class= "token punctuation" > (</span> queues<span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > NamedThreadFactory</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> <span class= "token boolean" > true</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > AbortPolicyWithReport</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre>
可以看到核心线程数跟最大线程数一致,也就是说就不会在核心线程数和最大线程数之间动态变化了</li>
<li > LimitedThreadPool:创建一个线程池,这个线程池中线程个数随着需要量动态增加,但是数量不超过配置的阈值的个数,另外空闲线程不会被回收,会一直存在。<pre class= "line-numbers language-java" data-language= "java" > <code class= "language-java" > <span class= "token keyword" > public</span> <span class= "token class-name" > Executor</span> <span class= "token function" > getExecutor</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > URL</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token class-name" > String</span> name <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threadname"</span> <span class= "token punctuation" > ,</span> <span class= "token string" > "Dubbo"</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> cores <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "corethreads"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> threads <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threads"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 200</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> queues <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "queues"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > return</span> <span class= "token keyword" > new</span> <span class= "token class-name" > ThreadPoolExecutor</span> <span class= "token punctuation" > (</span> cores<span class= "token punctuation" > ,</span> threads<span class= "token punctuation" > ,</span> <span class= "token number" > 9223372036854775807L</span> <span class= "token punctuation" > ,</span> <span class= "token class-name" > TimeUnit</span> <span class= "token punctuation" > .</span> MILLISECONDS<span class= "token punctuation" > ,</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > BlockingQueue</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > (</span> queues <span class= "token operator" > ==</span> <span class= "token number" > 0</span> <span class= "token operator" > ?</span> <span class= "token keyword" > new</span> <span class= "token class-name" > SynchronousQueue</span> <span class= "token punctuation" > (</span> <span class= "token punctuation" > )</span> <span class= "token operator" > :</span> <span class= "token punctuation" > (</span> queues <span class= "token operator" > < </span> <span class= "token number" > 0</span> <span class= "token operator" > ?</span> <span class= "token keyword" > new</span> <span class= "token class-name" > LinkedBlockingQueue</span> <span class= "token punctuation" > (</span> <span class= "token punctuation" > )</span> <span class= "token operator" > :</span> <span class= "token keyword" > new</span> <span class= "token class-name" > LinkedBlockingQueue</span> <span class= "token punctuation" > (</span> queues<span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > NamedThreadFactory</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> <span class= "token boolean" > true</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > AbortPolicyWithReport</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre>
这个特点主要是创建了保活时间特别长,即可以认为不会被回收了</li>
<li > EagerThreadPool :创建一个线程池,这个线程池当所有核心线程都处于忙碌状态时候,创建新的线程来执行新任务,而不是把任务放入线程池阻塞队列。<pre class= "line-numbers language-java" data-language= "java" > <code class= "language-java" > <span class= "token keyword" > public</span> <span class= "token class-name" > Executor</span> <span class= "token function" > getExecutor</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > URL</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token class-name" > String</span> name <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threadname"</span> <span class= "token punctuation" > ,</span> <span class= "token string" > "Dubbo"</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> cores <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "corethreads"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> threads <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threads"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 2147483647</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> queues <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "queues"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> alive <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "alive"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 60000</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token class-name" > TaskQueue</span> <span class= "token generics" > <span class= "token punctuation" > < </span> <span class= "token class-name" > Runnable</span> <span class= "token punctuation" > ></span> </span> taskQueue <span class= "token operator" > =</span> <span class= "token keyword" > new</span> <span class= "token class-name" > TaskQueue</span> <span class= "token punctuation" > (</span> queues <span class= "token operator" > < =</span> <span class= "token number" > 0</span> <span class= "token operator" > ?</span> <span class= "token number" > 1</span> <span class= "token operator" > :</span> queues<span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token class-name" > EagerThreadPoolExecutor</span> executor <span class= "token operator" > =</span> <span class= "token keyword" > new</span> <span class= "token class-name" > EagerThreadPoolExecutor</span> <span class= "token punctuation" > (</span> cores<span class= "token punctuation" > ,</span> threads<span class= "token punctuation" > ,</span> <span class= "token punctuation" > (</span> <span class= "token keyword" > long</span> <span class= "token punctuation" > )</span> alive<span class= "token punctuation" > ,</span> <span class= "token class-name" > TimeUnit</span> <span class= "token punctuation" > .</span> MILLISECONDS<span class= "token punctuation" > ,</span> taskQueue<span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > NamedThreadFactory</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> <span class= "token boolean" > true</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > AbortPolicyWithReport</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
taskQueue<span class= "token punctuation" > .</span> <span class= "token function" > setExecutor</span> <span class= "token punctuation" > (</span> executor<span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > return</span> executor<span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre>
这个是改动最多的一个了,因为需要实现这个机制,有兴趣的可以详细看下</li>
<li > CachedThreadPool: 创建一个自适应线程池,当线程处于空闲1分钟时候,线程会被回收,当有新请求到来时候会创建新线程<pre class= "line-numbers language-java" data-language= "java" > <code class= "language-java" > <span class= "token keyword" > public</span> <span class= "token class-name" > Executor</span> <span class= "token function" > getExecutor</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > URL</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > { </span>
<span class= "token class-name" > String</span> name <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threadname"</span> <span class= "token punctuation" > ,</span> <span class= "token string" > "Dubbo"</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> cores <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "corethreads"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> threads <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "threads"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 2147483647</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> queues <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "queues"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 0</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > int</span> alive <span class= "token operator" > =</span> url<span class= "token punctuation" > .</span> <span class= "token function" > getParameter</span> <span class= "token punctuation" > (</span> <span class= "token string" > "alive"</span> <span class= "token punctuation" > ,</span> <span class= "token number" > 60000</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token keyword" > return</span> <span class= "token keyword" > new</span> <span class= "token class-name" > ThreadPoolExecutor</span> <span class= "token punctuation" > (</span> cores<span class= "token punctuation" > ,</span> threads<span class= "token punctuation" > ,</span> <span class= "token punctuation" > (</span> <span class= "token keyword" > long</span> <span class= "token punctuation" > )</span> alive<span class= "token punctuation" > ,</span> <span class= "token class-name" > TimeUnit</span> <span class= "token punctuation" > .</span> MILLISECONDS<span class= "token punctuation" > ,</span> <span class= "token punctuation" > (</span> <span class= "token class-name" > BlockingQueue</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > (</span> queues <span class= "token operator" > ==</span> <span class= "token number" > 0</span> <span class= "token operator" > ?</span> <span class= "token keyword" > new</span> <span class= "token class-name" > SynchronousQueue</span> <span class= "token punctuation" > (</span> <span class= "token punctuation" > )</span> <span class= "token operator" > :</span> <span class= "token punctuation" > (</span> queues <span class= "token operator" > < </span> <span class= "token number" > 0</span> <span class= "token operator" > ?</span> <span class= "token keyword" > new</span> <span class= "token class-name" > LinkedBlockingQueue</span> <span class= "token punctuation" > (</span> <span class= "token punctuation" > )</span> <span class= "token operator" > :</span> <span class= "token keyword" > new</span> <span class= "token class-name" > LinkedBlockingQueue</span> <span class= "token punctuation" > (</span> queues<span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > NamedThreadFactory</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> <span class= "token boolean" > true</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ,</span> <span class= "token keyword" > new</span> <span class= "token class-name" > AbortPolicyWithReport</span> <span class= "token punctuation" > (</span> name<span class= "token punctuation" > ,</span> url<span class= "token punctuation" > )</span> <span class= "token punctuation" > )</span> <span class= "token punctuation" > ;</span>
<span class= "token punctuation" > } </span> <span aria-hidden= "true" class= "line-numbers-rows" > <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> <span > </span> </span> </code> </pre>
这里可以看到线程池的配置,核心是 0,最大线程数是 2147483647,保活时间是一分钟<br > 只是非常简略的介绍下,有兴趣可以自行阅读代码。</li>
</ul>
]]></content>
<categories >
<category > Java</category>
<category > Dubbo - 线程池</category>
<category > Dubbo</category>
<category > 线程池</category>
<category > ThreadPool</category>
</categories>
<tags >
<tag > Java</tag>
<tag > Dubbo</tag>
<tag > ThreadPool</tag>
<tag > 线程池</tag>
<tag > FixedThreadPool</tag>
<tag > LimitedThreadPool</tag>
<tag > EagerThreadPool</tag>
<tag > CachedThreadPool</tag>
</tags>
</entry>
<entry >
<title > 聊聊 mysql 的 MVCC</title>
<url > /2020/04/26/%E8%81%8A%E8%81%8A-mysql-%E7%9A%84-MVCC/</url>
@ -14572,11 +14568,12 @@ server.6<span class="token operator">=</span><span class="token number">192.168<
</tags>
</entry>
<entry >
<title > 闲话篇-也算碰到了为老不尊和坏人变老了的典型案例</title>
<url > /2022/05/22/%E9%97%B2%E8%AF%9D%E7%AF%87-%E4%B9%9F%E7%AE%97%E7%A2%B0%E5%88%B0%E4%BA%86%E4%B8%BA%E8%80%81%E4%B8%8D%E5%B0%8A%E5%92%8C%E5%9D%8F%E4%BA%BA%E5%8F%98%E8%80%81%E4%BA%86%E7%9A%84%E5%85%B8%E5%9E%8B%E6%A1%88%E4%BE%8B/</url>
<content > <![CDATA[<p> 在目前的房子也差不多租了四五年了,楼下邻居换了两拨了,我们这栋楼装修了不知道多少次,因为是学区的原因,房子交易的频率还是比较高的,不过比较神奇的我们对门的没换过,而且一直也没什么交集(除了后面说的水管爆裂),就进出的时候偶尔看到应该是住着一对老夫妻,感觉年纪也有个七八十了。</p>
<p > 对对面这户人家的印象,就是对面的老头子经常是我出门上班去了他回来,看着他颤颤巍巍地走楼梯,我看到了都靠边走,而且有几次还听见好像是他儿子在说他,”年假这么大了,还是少出去吧”,说实话除了这次的事情,之前就有一次水管阀门爆裂了,算是有点交集,那次大概是去年冬天,天气已经很冷了,我们周日下午回来看到楼梯有点湿,但是没什么特别的异常就没怎么注意,到晚上洗完澡,楼下的邻居就来敲门,说我们门外的水表那一直在流水,出门一看真的是懵了,外面水表那在哗哗哗地流水,导致楼梯那就跟水帘洞一样,仔细看看是对面家的水表阀门那在漏水,我只能先用塑料袋包一下,然后大冬天(刚洗完澡)穿着凉拖跑下去找物业保安,走到一楼的时候发现水一直流到一楼了,楼梯上都是水流下来,五楼那是最惨的,感觉门框周边都浸透了,五楼的也是态度比较差的让我一定要把水弄好了,但是前面也说了谁是从对门那户的水表阀那出来的,理论上应该让对面的处理,结果我敲门敲了半天对面都没反应,想着我放着不管也不太好,就去找了物业保安,保安上来看了只能先把总阀关了,我也打电话给维修自来水管的,自来水公司的人过了会也是真的来修了,我那会是挺怕不来修,自来水公司的师傅到了以后拿开一看是对面那户的有个阀门估计是自己换上去的,跟我们这的完全不一样,看上去就比较劣质,师傅也挺气的,大晚上被叫过来,我又尝试着去敲门也还是没人应,也没办法,对面老人家我敲太响到时候出来说我吓到他们啥的,第二天去说也没现场了。</p>
<p > 前面的这件事是个重要铺垫,前几天 LD 下班后把厨余垃圾套好袋子放在门口,打算等我下班了因为要去做核酸(hz 48 小时核酸)顺便带下去,结果到了七点多,说对面的老太太在那疯狂砸门了,LD 被吓到了不敢开门,老太太在外面一边砸门一边骂,“你们年轻人怎么素质这么差”(他们家也经常在门口放垃圾,我们刚来住的时候在楼梯转角他们就放这个废弃的洗衣机,每次走楼梯带点东西都要小心翼翼地走,不然都过不去,然后我赶紧赶回去,结果她听到我回家了,还特意开门继续骂,“你们年轻人怎么素质这么差,垃圾放在这里”,我说我们刚才放在这,打算待会做核酸的时候去扔掉,结果他们家老头,都已经没了牙齿,在那瞪大眼睛说,“你们早上就放在这了的,”我说是LD 刚才下班了放的,争论了一会,我说这个事情我们门口放了垃圾,这会我就去扔掉了,但是你们家老太太这么砸门总不太好,像之前门口水管爆掉了,我敲了门没人应,我也没要砸门一定把你们叫醒,结果老头老太说我们的水管从来没换过,不可能破的(其实到这,再往后说就没意思了,跟这么不要脸的人说多了也只是瞎扯),一会又回到这个垃圾的问题,那个老头说“你们昨天就放在这里了的”,睁着眼说瞎话可真是 666,感觉不是老太太拦着点他马上就要冲上来揍我了一样,事后我想想,这种情况我大概只能躺地上装死了,当这个事情发生之前我真的快把前面说的事情(水管阀坏了)给忘了,虽然这是理论上不该我来处理,除非是老头老太太请求我帮忙,这事后面我也从没说起过,本来完全没交集,对他们的是怎么样的人也没概念,总觉得年纪大了可能还比较心宽和蔼点,结果没想到就是一典型的坏人变老了,我说你们这么砸门,我老婆都被吓得不敢开门,结果对面老头老太太的儿子也出来了说,“我们就是敲下门,我母亲是机关单位退休的,所以肯定不会敲门很大声的,你老婆觉得吓到了是你们人生观价值观有问题”,听到这话我差点笑出来,连着两个可笑至极的脑残逻辑,无语他妈给无语开门,无语到家了。对门家我们之前有个印象就是因为我们都是顶楼,这边老小区以前都是把前后阳台包进来的,然后社区就来咨询大家的意见是不是统一把包进来的违建拆掉,还特地上来六楼跟他们说,结果对面的老头就说,“我要去住建局投诉你们”,本来这个事情是违法的,但是社区的意思也是征求各位业主的意见,结果感觉是社区上门强拆了一样,为老不尊,坏人变老了的典范了。</p>
<title > 闲话篇-路遇神逻辑骑车带娃爹</title>
<url > /2022/05/08/%E9%97%B2%E8%AF%9D%E7%AF%87-%E8%B7%AF%E9%81%87%E7%A5%9E%E9%80%BB%E8%BE%91%E9%AA%91%E8%BD%A6%E5%B8%A6%E5%A8%83%E7%88%B9/</url>
<content > <![CDATA[<p> 周末吃完中饭去买菜,没想到碰到这个神(zhi)奇(zhang)大哥带着两个娃,在非机动车道虽然没有像上班高峰车那么多,但是有送外卖,各种叮咚买菜和普通像我这样骑电驴,骑自行车的人,我的情况可能还特殊点,前面说过电驴买了以后本来网上找到过怎么解除限速的,后面看了下,限速 25 虽然慢,但还是对安全很有好处的,我上下班也不赶这个时间,所以就没解除,其他路上的电瓶车包括这位带娃的大哥可能有不少都不符合国标的限速要求或者解除了限速,这些算是铺垫。</p>
<p > 那位大哥,骑电瓶车一前一后带着两个娃,在非机动车道靠右边行驶,肉眼估计是在我右前方大概十几米的距离,不知道是小孩不舒服了还是啥,想下来还是就在跟他爹玩耍,我算是比较谨慎骑车的,看到这种情况已经准备好捏刹车了,但是也没想到这个娃这么神,差不多能并排四五辆电瓶车的非机动车道,直接从他爸的车下来跑到了非机动车道的最左边,前面我铺垫了电瓶车 25 码,换算一下大概 1 秒能前进 7 米,我是直接把刹车捏死了,才勉强避免撞上这个小孩,并且当时的情况本来我左后方有另一个大哥是想从我左边超过去,因为我刹车了他也赶紧刹车。</p>
<p > 现在我们做个假设,假如我刹车不够及时,撞上了这个小孩,会是啥后果呢,小孩人没事还好,即使没事也免不了大吵一架,说我骑车不看前面,然后去医院做检查,负责医药费,如果是有点啥伤了,这事估计是没完了,我是心里一阵后怕。</p>
<p > 说实话是张口快骂人了,“怎么带小孩的”,结果那大哥竟然还是那套话术,“你们骑车不会慢点的啊,说一下就好了啊,用得着这么说吗”,我是真的被这位的逻辑给打败了,还好是想超我车那大哥刹住车了,他要是刹不住呢,把我撞了我怪谁?这不是追尾事件,是 zhizhang 大哥的小孩鬼探头,下个电瓶车就下车,下来就往另一边跑,我们尽力刹车没撞到这小孩,说他没管好小孩这大哥还觉得自己委屈了?结果我倒是想骂脏话了,结果我左后方的的大哥就跟他说“你这么教小孩教得真好,你真厉害”,果然在中国还是不能好好说话,阴阳怪气才是王道,我前面也说了真的是后怕,为什么我从头到尾都没有说这个小孩不对,我是觉得这个年纪的小孩(估摸着也就五六岁或者再大个一两岁)这种安全意识应该是要父母和学校老师一起教育培养的,在路上不能这么随便乱跑,即使别人撞了他,别人有责任,那小孩的生理伤痛和心理伤害,父母也肯定要心疼的吧,另外对我们来说前面也说了,真的撞到了我们也是很难受的,这个社会里真的是自私自利的人太多了,平时让外卖小哥送爬下楼梯送上来外卖都觉得挺抱歉的,每次的接过来都说谢谢,人家也不容易,换在有些人身上大概会觉得自己花了钱就是大爷,给我送上来是必须的。</p>
]]></content>
<categories >
<category > 生活</category>
@ -14586,12 +14583,11 @@ server.6<span class="token operator">=</span><span class="token number">192.168<
</tags>
</entry>
<entry >
<title > 闲话篇-路遇神逻辑骑车带娃爹</title>
<url > /2022/05/08/%E9%97%B2%E8%AF%9D%E7%AF%87-%E8%B7%AF%E9%81%87%E7%A5%9E%E9%80%BB%E8%BE%91%E9%AA%91%E8%BD%A6%E5%B8%A6%E5%A8%83%E7%88%B9/</url>
<content > <![CDATA[<p> 周末吃完中饭去买菜,没想到碰到这个神(zhi)奇(zhang)大哥带着两个娃,在非机动车道虽然没有像上班高峰车那么多,但是有送外卖,各种叮咚买菜和普通像我这样骑电驴,骑自行车的人,我的情况可能还特殊点,前面说过电驴买了以后本来网上找到过怎么解除限速的,后面看了下,限速 25 虽然慢,但还是对安全很有好处的,我上下班也不赶这个时间,所以就没解除,其他路上的电瓶车包括这位带娃的大哥可能有不少都不符合国标的限速要求或者解除了限速,这些算是铺垫。</p>
<p > 那位大哥,骑电瓶车一前一后带着两个娃,在非机动车道靠右边行驶,肉眼估计是在我右前方大概十几米的距离,不知道是小孩不舒服了还是啥,想下来还是就在跟他爹玩耍,我算是比较谨慎骑车的,看到这种情况已经准备好捏刹车了,但是也没想到这个娃这么神,差不多能并排四五辆电瓶车的非机动车道,直接从他爸的车下来跑到了非机动车道的最左边,前面我铺垫了电瓶车 25 码,换算一下大概 1 秒能前进 7 米,我是直接把刹车捏死了,才勉强避免撞上这个小孩,并且当时的情况本来我左后方有另一个大哥是想从我左边超过去,因为我刹车了他也赶紧刹车。</p>
<p > 现在我们做个假设,假如我刹车不够及时,撞上了这个小孩,会是啥后果呢,小孩人没事还好,即使没事也免不了大吵一架,说我骑车不看前面,然后去医院做检查,负责医药费,如果是有点啥伤了,这事估计是没完了,我是心里一阵后怕。</p>
<p > 说实话是张口快骂人了,“怎么带小孩的”,结果那大哥竟然还是那套话术,“你们骑车不会慢点的啊,说一下就好了啊,用得着这么说吗”,我是真的被这位的逻辑给打败了,还好是想超我车那大哥刹住车了,他要是刹不住呢,把我撞了我怪谁?这不是追尾事件,是 zhizhang 大哥的小孩鬼探头,下个电瓶车就下车,下来就往另一边跑,我们尽力刹车没撞到这小孩,说他没管好小孩这大哥还觉得自己委屈了?结果我倒是想骂脏话了,结果我左后方的的大哥就跟他说“你这么教小孩教得真好,你真厉害”,果然在中国还是不能好好说话,阴阳怪气才是王道,我前面也说了真的是后怕,为什么我从头到尾都没有说这个小孩不对,我是觉得这个年纪的小孩(估摸着也就五六岁或者再大个一两岁)这种安全意识应该是要父母和学校老师一起教育培养的,在路上不能这么随便乱跑,即使别人撞了他,别人有责任,那小孩的生理伤痛和心理伤害,父母也肯定要心疼的吧,另外对我们来说前面也说了,真的撞到了我们也是很难受的,这个社会里真的是自私自利的人太多了,平时让外卖小哥送爬下楼梯送上来外卖都觉得挺抱歉的,每次的接过来都说谢谢,人家也不容易,换在有些人身上大概会觉得自己花了钱就是大爷,给我送上来是必须的。</p>
<title > 闲话篇-也算碰到了为老不尊和坏人变老了的典型案例</title>
<url > /2022/05/22/%E9%97%B2%E8%AF%9D%E7%AF%87-%E4%B9%9F%E7%AE%97%E7%A2%B0%E5%88%B0%E4%BA%86%E4%B8%BA%E8%80%81%E4%B8%8D%E5%B0%8A%E5%92%8C%E5%9D%8F%E4%BA%BA%E5%8F%98%E8%80%81%E4%BA%86%E7%9A%84%E5%85%B8%E5%9E%8B%E6%A1%88%E4%BE%8B/</url>
<content > <![CDATA[<p> 在目前的房子也差不多租了四五年了,楼下邻居换了两拨了,我们这栋楼装修了不知道多少次,因为是学区的原因,房子交易的频率还是比较高的,不过比较神奇的我们对门的没换过,而且一直也没什么交集(除了后面说的水管爆裂),就进出的时候偶尔看到应该是住着一对老夫妻,感觉年纪也有个七八十了。</p>
<p > 对对面这户人家的印象,就是对面的老头子经常是我出门上班去了他回来,看着他颤颤巍巍地走楼梯,我看到了都靠边走,而且有几次还听见好像是他儿子在说他,”年假这么大了,还是少出去吧”,说实话除了这次的事情,之前就有一次水管阀门爆裂了,算是有点交集,那次大概是去年冬天,天气已经很冷了,我们周日下午回来看到楼梯有点湿,但是没什么特别的异常就没怎么注意,到晚上洗完澡,楼下的邻居就来敲门,说我们门外的水表那一直在流水,出门一看真的是懵了,外面水表那在哗哗哗地流水,导致楼梯那就跟水帘洞一样,仔细看看是对面家的水表阀门那在漏水,我只能先用塑料袋包一下,然后大冬天(刚洗完澡)穿着凉拖跑下去找物业保安,走到一楼的时候发现水一直流到一楼了,楼梯上都是水流下来,五楼那是最惨的,感觉门框周边都浸透了,五楼的也是态度比较差的让我一定要把水弄好了,但是前面也说了谁是从对门那户的水表阀那出来的,理论上应该让对面的处理,结果我敲门敲了半天对面都没反应,想着我放着不管也不太好,就去找了物业保安,保安上来看了只能先把总阀关了,我也打电话给维修自来水管的,自来水公司的人过了会也是真的来修了,我那会是挺怕不来修,自来水公司的师傅到了以后拿开一看是对面那户的有个阀门估计是自己换上去的,跟我们这的完全不一样,看上去就比较劣质,师傅也挺气的,大晚上被叫过来,我又尝试着去敲门也还是没人应,也没办法,对面老人家我敲太响到时候出来说我吓到他们啥的,第二天去说也没现场了。</p>
<p > 前面的这件事是个重要铺垫,前几天 LD 下班后把厨余垃圾套好袋子放在门口,打算等我下班了因为要去做核酸(hz 48 小时核酸)顺便带下去,结果到了七点多,说对面的老太太在那疯狂砸门了,LD 被吓到了不敢开门,老太太在外面一边砸门一边骂,“你们年轻人怎么素质这么差”(他们家也经常在门口放垃圾,我们刚来住的时候在楼梯转角他们就放这个废弃的洗衣机,每次走楼梯带点东西都要小心翼翼地走,不然都过不去,然后我赶紧赶回去,结果她听到我回家了,还特意开门继续骂,“你们年轻人怎么素质这么差,垃圾放在这里”,我说我们刚才放在这,打算待会做核酸的时候去扔掉,结果他们家老头,都已经没了牙齿,在那瞪大眼睛说,“你们早上就放在这了的,”我说是LD 刚才下班了放的,争论了一会,我说这个事情我们门口放了垃圾,这会我就去扔掉了,但是你们家老太太这么砸门总不太好,像之前门口水管爆掉了,我敲了门没人应,我也没要砸门一定把你们叫醒,结果老头老太说我们的水管从来没换过,不可能破的(其实到这,再往后说就没意思了,跟这么不要脸的人说多了也只是瞎扯),一会又回到这个垃圾的问题,那个老头说“你们昨天就放在这里了的”,睁着眼说瞎话可真是 666,感觉不是老太太拦着点他马上就要冲上来揍我了一样,事后我想想,这种情况我大概只能躺地上装死了,当这个事情发生之前我真的快把前面说的事情(水管阀坏了)给忘了,虽然这是理论上不该我来处理,除非是老头老太太请求我帮忙,这事后面我也从没说起过,本来完全没交集,对他们的是怎么样的人也没概念,总觉得年纪大了可能还比较心宽和蔼点,结果没想到就是一典型的坏人变老了,我说你们这么砸门,我老婆都被吓得不敢开门,结果对面老头老太太的儿子也出来了说,“我们就是敲下门,我母亲是机关单位退休的,所以肯定不会敲门很大声的,你老婆觉得吓到了是你们人生观价值观有问题”,听到这话我差点笑出来,连着两个可笑至极的脑残逻辑,无语他妈给无语开门,无语到家了。对门家我们之前有个印象就是因为我们都是顶楼,这边老小区以前都是把前后阳台包进来的,然后社区就来咨询大家的意见是不是统一把包进来的违建拆掉,还特地上来六楼跟他们说,结果对面的老头就说,“我要去住建局投诉你们”,本来这个事情是违法的,但是社区的意思也是征求各位业主的意见,结果感觉是社区上门强拆了一样,为老不尊,坏人变老了的典范了。</p>
]]></content>
<categories >
<category > 生活</category>